@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,145 @@
1
+ // @fitness-ignore-file unused-config-options -- Config options reserved for future use or environment-specific
2
+ // @fitness-ignore-file no-markdown-references -- Check's own JSDoc contains example .md references to document what it detects
3
+ /**
4
+ * @fileoverview Detect markdown file references in code comments
5
+ *
6
+ * File path references to markdown documents become stale when documents are
7
+ * moved, renamed, or deleted. Use stable identifiers instead.
8
+ */
9
+ import { defineCheck } from '@opensip-cli/fitness';
10
+ /**
11
+ * Pattern to match .md file references in comments
12
+ * Matches patterns like:
13
+ * - docs/adr/052-something.md
14
+ * - ./README.md
15
+ * - ../docs/guide.md
16
+ * - CHANGELOG.md
17
+ */
18
+ const MARKDOWN_REFERENCE_PATTERN = /(?:^|[\s(])([./\w-]+\.md)(?:[\s)]|$)/g;
19
+ /**
20
+ * Pattern to detect if a line is likely a comment (not a template literal)
21
+ */
22
+ const COMMENT_PATTERNS = [
23
+ /^\s*\/\//, // Single-line comment
24
+ /^\s*\/\*/, // Multi-line comment start (/**)
25
+ /^\s*\*(?!\*)/, // JSDoc continuation (* text) but NOT markdown bold (**text**)
26
+ ];
27
+ /**
28
+ * Files/patterns to exclude from this check
29
+ */
30
+ const EXCLUDED_PATTERNS = [
31
+ /\.md$/, // Don't check markdown files themselves
32
+ /CHANGELOG/, // Changelog files often reference other changelogs
33
+ /README/, // README files reference other docs
34
+ /__tests__/, // Test files may legitimately reference test fixtures
35
+ /\.test\.ts$/, // Test files
36
+ /\.spec\.ts$/, // Spec files
37
+ ];
38
+ /**
39
+ * Well-known markdown file names that are stable references (not stale paths).
40
+ * These are root-level or conventionally-named files that don't become stale.
41
+ */
42
+ const STABLE_REFERENCE_PATTERNS = [
43
+ /^CLAUDE\.md$/i, // Project-level AI guidance file
44
+ /^README\.md$/i, // Standard readme files
45
+ /^CHANGELOG\.md$/i, // Standard changelog files
46
+ /^CONTRIBUTING\.md$/i, // Contribution guidelines
47
+ /^LICENSE\.md$/i, // License file
48
+ /^CODE_OF_CONDUCT\.md$/i, // Code of conduct
49
+ /^SECURITY\.md$/i, // Security policy
50
+ ];
51
+ /**
52
+ * Check if a line is a comment line
53
+ */
54
+ function isCommentLine(line) {
55
+ return COMMENT_PATTERNS.some((pattern) => pattern.test(line));
56
+ }
57
+ /**
58
+ * Check if a file should be excluded
59
+ */
60
+ function shouldExcludeFile(filePath) {
61
+ return EXCLUDED_PATTERNS.some((pattern) => pattern.test(filePath));
62
+ }
63
+ /**
64
+ * Find markdown references in a file
65
+ */
66
+ function findMarkdownReferences(content) {
67
+ const references = [];
68
+ const lines = content.split('\n');
69
+ for (const [i, line] of lines.entries()) {
70
+ /* v8 ignore next -- defensive: lines.entries() never yields undefined */
71
+ if (line === undefined)
72
+ continue;
73
+ // Only check comment lines
74
+ if (!isCommentLine(line))
75
+ continue;
76
+ // Find all .md references in this line
77
+ let match;
78
+ MARKDOWN_REFERENCE_PATTERN.lastIndex = 0; // Reset regex state
79
+ while ((match = MARKDOWN_REFERENCE_PATTERN.exec(line)) !== null) {
80
+ const reference = match[1];
81
+ // Skip if it's just mentioning the file extension generically or undefined
82
+ if (!reference || reference === '.md')
83
+ continue;
84
+ // Skip well-known stable markdown file names (e.g., CLAUDE.md, README.md)
85
+ /* v8 ignore next -- defensive: split + pop on a non-empty string never returns undefined */
86
+ const basename = reference.split('/').pop() ?? reference;
87
+ if (STABLE_REFERENCE_PATTERNS.some((pattern) => pattern.test(basename)))
88
+ continue;
89
+ references.push({
90
+ lineNumber: i + 1,
91
+ line,
92
+ reference,
93
+ });
94
+ }
95
+ }
96
+ return references;
97
+ }
98
+ /**
99
+ * Check: quality/no-markdown-references
100
+ *
101
+ * Detects markdown file path references in code comments. These references
102
+ * become stale when documents are moved, renamed, or deleted.
103
+ *
104
+ * Use stable identifiers instead of file paths to avoid stale references.
105
+ */
106
+ export const noMarkdownReferences = defineCheck({
107
+ id: '8be86917-6908-49e5-a185-a6bd18045b31',
108
+ slug: 'no-markdown-references',
109
+ scope: { languages: ['typescript'], concerns: ['backend', 'frontend', 'cli'] },
110
+ contentFilter: 'raw',
111
+ confidence: 'medium',
112
+ description: 'Detect markdown file references in code comments that may become stale',
113
+ longDescription: `**Purpose:** Detects markdown file path references in code comments that become stale when documents are moved, renamed, or deleted.
114
+
115
+ **Detects:**
116
+ - References matching \`[./\\w-]+\\.md\` in comment lines (single-line \`//\`, multi-line \`/* */\`, and JSDoc \`/** */\`)
117
+ - Examples: \`docs/adr/052-something.md\`, \`./README.md\`, \`../docs/guide.md\`, \`CHANGELOG.md\`
118
+
119
+ **Why it matters:** File path references silently break when documents are reorganized. Stable identifiers (e.g., document titles or IDs) remain valid regardless of file location.
120
+
121
+ **Scope:** General best practice. Analyzes each file individually (\`analyze\`). Targets production files, excluding markdown, test, and changelog files.`,
122
+ tags: ['documentation', 'maintainability', 'quality'],
123
+ fileTypes: ['ts', 'tsx'],
124
+ analyze(content, filePath) {
125
+ // Skip excluded files
126
+ if (shouldExcludeFile(filePath)) {
127
+ return [];
128
+ }
129
+ const violations = [];
130
+ const references = findMarkdownReferences(content);
131
+ for (const { lineNumber, reference } of references) {
132
+ const suggestion = `Remove or replace the markdown file reference '${reference}'. Use stable identifiers (e.g., document titles or IDs) instead of file paths that break when documents are moved.`;
133
+ violations.push({
134
+ line: lineNumber,
135
+ column: 0,
136
+ message: `Markdown file reference '${reference}' may become stale`,
137
+ severity: 'warning',
138
+ suggestion,
139
+ match: reference,
140
+ });
141
+ }
142
+ return violations;
143
+ },
144
+ });
145
+ //# sourceMappingURL=no-markdown-references.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-markdown-references.js","sourceRoot":"","sources":["../../../src/checks/quality/no-markdown-references.ts"],"names":[],"mappings":"AAAA,+GAA+G;AAC/G,+HAA+H;AAC/H;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAuB,MAAM,sBAAsB,CAAC;AAExE;;;;;;;GAOG;AACH,MAAM,0BAA0B,GAAG,uCAAuC,CAAC;AAE3E;;GAEG;AACH,MAAM,gBAAgB,GAAG;IACvB,UAAU,EAAE,sBAAsB;IAClC,UAAU,EAAE,iCAAiC;IAC7C,cAAc,EAAE,+DAA+D;CAChF,CAAC;AAEF;;GAEG;AACH,MAAM,iBAAiB,GAAG;IACxB,OAAO,EAAE,wCAAwC;IACjD,WAAW,EAAE,mDAAmD;IAChE,QAAQ,EAAE,oCAAoC;IAC9C,WAAW,EAAE,sDAAsD;IACnE,aAAa,EAAE,aAAa;IAC5B,aAAa,EAAE,aAAa;CAC7B,CAAC;AAEF;;;GAGG;AACH,MAAM,yBAAyB,GAAG;IAChC,eAAe,EAAE,iCAAiC;IAClD,eAAe,EAAE,wBAAwB;IACzC,kBAAkB,EAAE,2BAA2B;IAC/C,qBAAqB,EAAE,0BAA0B;IACjD,gBAAgB,EAAE,eAAe;IACjC,wBAAwB,EAAE,kBAAkB;IAC5C,iBAAiB,EAAE,kBAAkB;CACtC,CAAC;AAEF;;GAEG;AACH,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAChE,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,QAAgB;IACzC,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACrE,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAC7B,OAAe;IAEf,MAAM,UAAU,GAA8D,EAAE,CAAC;IACjF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QACxC,yEAAyE;QACzE,IAAI,IAAI,KAAK,SAAS;YAAE,SAAS;QAEjC,2BAA2B;QAC3B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;YAAE,SAAS;QAEnC,uCAAuC;QACvC,IAAI,KAAK,CAAC;QACV,0BAA0B,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,oBAAoB;QAC9D,OAAO,CAAC,KAAK,GAAG,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAChE,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAE3B,2EAA2E;YAC3E,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,KAAK;gBAAE,SAAS;YAEhD,0EAA0E;YAC1E,4FAA4F;YAC5F,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,SAAS,CAAC;YACzD,IAAI,yBAAyB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAAE,SAAS;YAElF,UAAU,CAAC,IAAI,CAAC;gBACd,UAAU,EAAE,CAAC,GAAG,CAAC;gBACjB,IAAI;gBACJ,SAAS;aACV,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,WAAW,CAAC;IAC9C,EAAE,EAAE,sCAAsC;IAC1C,IAAI,EAAE,wBAAwB;IAC9B,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE;IAC9E,aAAa,EAAE,KAAK;IAEpB,UAAU,EAAE,QAAQ;IACpB,WAAW,EAAE,wEAAwE;IACrF,eAAe,EAAE;;;;;;;;0JAQuI;IACxJ,IAAI,EAAE,CAAC,eAAe,EAAE,iBAAiB,EAAE,SAAS,CAAC;IACrD,SAAS,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC;IAExB,OAAO,CAAC,OAAO,EAAE,QAAQ;QACvB,sBAAsB;QACtB,IAAI,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,UAAU,GAAqB,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAEnD,KAAK,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,UAAU,EAAE,CAAC;YACnD,MAAM,UAAU,GAAG,kDAAkD,SAAS,qHAAqH,CAAC;YAEpM,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,CAAC;gBACT,OAAO,EAAE,4BAA4B,SAAS,oBAAoB;gBAClE,QAAQ,EAAE,SAAS;gBACnB,UAAU;gBACV,KAAK,EAAE,SAAS;aACjB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @fileoverview Advisory meta-check for content filter usage
3
+ *
4
+ * Detects fitness checks that use regex pattern matching on file content
5
+ * without declaring contentFilter: 'strip-strings', which may lead to
6
+ * false positives from string literal and comment content.
7
+ */
8
+ export declare const noRawRegexOnCode: import("@opensip-cli/fitness").Check;
9
+ //# sourceMappingURL=no-raw-regex-on-code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-raw-regex-on-code.d.ts","sourceRoot":"","sources":["../../../src/checks/quality/no-raw-regex-on-code.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,eAAO,MAAM,gBAAgB,sCAoD3B,CAAC"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * @fileoverview Advisory meta-check for content filter usage
3
+ *
4
+ * Detects fitness checks that use regex pattern matching on file content
5
+ * without declaring contentFilter: 'strip-strings', which may lead to
6
+ * false positives from string literal and comment content.
7
+ */
8
+ import { defineCheck } from '@opensip-cli/fitness';
9
+ const REGEX_USAGE_PATTERN = /\.(test|match|exec|search)\s*\(/;
10
+ const CONTENT_FILTER_PATTERN = /contentFilter\s*:\s*['"](raw|strip-strings|strip-strings-and-comments)['"]/;
11
+ const DEFINE_CHECK_PATTERN = /defineCheck\s*\(/;
12
+ export const noRawRegexOnCode = defineCheck({
13
+ id: '7a0f6bc1-f4dd-4e55-9628-d797c877c6e0',
14
+ slug: 'no-raw-regex-on-code',
15
+ scope: { languages: ['typescript'], concerns: ['fitness'] },
16
+ confidence: 'medium',
17
+ description: 'Detect regex checks that should use contentFilter: strip-strings',
18
+ longDescription: `**Purpose:** Advisory meta-check that identifies fitness checks using regex pattern matching without declaring \`contentFilter: 'strip-strings'\`. Such checks may produce false positives when patterns match inside string literals or comments.
19
+
20
+ **Detects:**
21
+ - Check files that call \`.test()\`, \`.match()\`, \`.exec()\`, or \`.search()\` on content
22
+ - That do NOT declare \`contentFilter: 'strip-strings'\` or \`contentFilter: 'raw'\`
23
+
24
+ **Why it matters:** Regex checks without content filtering match patterns inside string literals and documentation, producing false positives. Adding \`contentFilter: 'strip-strings'\` to the check config eliminates this class of false positives.
25
+
26
+ **Scope:** Fitness check files only.`,
27
+ tags: ['quality', 'internal', 'meta', 'content-filter'],
28
+ fileTypes: ['ts'],
29
+ analyze(content, filePath) {
30
+ // Only analyze fitness check files
31
+ if (!filePath.includes('fitness/src/checks/'))
32
+ return [];
33
+ // Must be a defineCheck file
34
+ if (!DEFINE_CHECK_PATTERN.test(content))
35
+ return [];
36
+ // Check if it uses regex methods
37
+ if (!REGEX_USAGE_PATTERN.test(content))
38
+ return [];
39
+ // Check if contentFilter is already declared (either value)
40
+ if (CONTENT_FILTER_PATTERN.test(content))
41
+ return [];
42
+ // Find the line with defineCheck to report the violation
43
+ const lines = content.split('\n');
44
+ for (const [i, line] of lines.entries()) {
45
+ if (line && DEFINE_CHECK_PATTERN.test(line)) {
46
+ return [
47
+ {
48
+ line: i + 1,
49
+ column: 0,
50
+ message: 'Check uses regex pattern matching without contentFilter declaration',
51
+ severity: 'warning',
52
+ type: 'missing-content-filter',
53
+ suggestion: "Add contentFilter: 'strip-strings' to skip string literals, or contentFilter: 'raw' to explicitly opt out (e.g., for secret detection checks).",
54
+ },
55
+ ];
56
+ }
57
+ }
58
+ return [];
59
+ },
60
+ });
61
+ //# sourceMappingURL=no-raw-regex-on-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-raw-regex-on-code.js","sourceRoot":"","sources":["../../../src/checks/quality/no-raw-regex-on-code.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAuB,MAAM,sBAAsB,CAAC;AAExE,MAAM,mBAAmB,GAAG,iCAAiC,CAAC;AAC9D,MAAM,sBAAsB,GAC1B,4EAA4E,CAAC;AAC/E,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AAEhD,MAAM,CAAC,MAAM,gBAAgB,GAAG,WAAW,CAAC;IAC1C,EAAE,EAAE,sCAAsC;IAC1C,IAAI,EAAE,sBAAsB;IAC5B,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE;IAE3D,UAAU,EAAE,QAAQ;IACpB,WAAW,EAAE,kEAAkE;IAC/E,eAAe,EAAE;;;;;;;;qCAQkB;IACnC,IAAI,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,CAAC;IACvD,SAAS,EAAE,CAAC,IAAI,CAAC;IAEjB,OAAO,CAAC,OAAO,EAAE,QAAQ;QACvB,mCAAmC;QACnC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YAAE,OAAO,EAAE,CAAC;QAEzD,6BAA6B;QAC7B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,EAAE,CAAC;QAEnD,iCAAiC;QACjC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,EAAE,CAAC;QAElD,4DAA4D;QAC5D,IAAI,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,EAAE,CAAC;QAEpD,yDAAyD;QACzD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YACxC,IAAI,IAAI,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5C,OAAO;oBACL;wBACE,IAAI,EAAE,CAAC,GAAG,CAAC;wBACX,MAAM,EAAE,CAAC;wBACT,OAAO,EAAE,qEAAqE;wBAC9E,QAAQ,EAAE,SAAS;wBACnB,IAAI,EAAE,wBAAwB;wBAC9B,UAAU,EACR,gJAAgJ;qBACnJ;iBACF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @fileoverview Detects temporary-workaround comments.
3
+ *
4
+ * Catches `HACK`/`FIXME` lines that explicitly describe themselves
5
+ * as `temporary`, a `workaround`, or "before launch" — these
6
+ * announcements are signs that a permanent fix was deferred.
7
+ *
8
+ * Extracted from the former `no-legacy-code` umbrella in Phase C4.
9
+ */
10
+ export declare const noTemporaryWorkarounds: import("@opensip-cli/fitness").Check;
11
+ //# sourceMappingURL=no-temporary-workarounds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-temporary-workarounds.d.ts","sourceRoot":"","sources":["../../../src/checks/quality/no-temporary-workarounds.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAmBH,eAAO,MAAM,sBAAsB,sCA6CjC,CAAC"}
@@ -0,0 +1,69 @@
1
+ /* eslint-disable sonarjs/fixme-tag -- this file's documentation references the FIXME marker by design */
2
+ // @fitness-ignore-file no-todo-comments -- this file's job is to detect FIXME/HACK workaround markers; the words appear in JSDoc by design
3
+ /**
4
+ * @fileoverview Detects temporary-workaround comments.
5
+ *
6
+ * Catches `HACK`/`FIXME` lines that explicitly describe themselves
7
+ * as `temporary`, a `workaround`, or "before launch" — these
8
+ * announcements are signs that a permanent fix was deferred.
9
+ *
10
+ * Extracted from the former `no-legacy-code` umbrella in Phase C4.
11
+ */
12
+ import { defineCheck } from '@opensip-cli/fitness';
13
+ const EXCLUDE_PATTERNS = [/fitness/, /test/, /spec/, /docs/, /reports/, /versioning/];
14
+ function shouldExcludeFile(relativePath) {
15
+ return EXCLUDE_PATTERNS.some((pattern) => pattern.test(relativePath));
16
+ }
17
+ const MARKER_NEEDLES = ['hack', 'fixme'];
18
+ const QUALIFIER_NEEDLES = ['before launch', 'temporary', 'workaround'];
19
+ function matchTemporaryWorkaround(line) {
20
+ const lower = line.toLowerCase();
21
+ if (!MARKER_NEEDLES.some((m) => lower.includes(m)))
22
+ return false;
23
+ return QUALIFIER_NEEDLES.some((q) => lower.includes(q));
24
+ }
25
+ export const noTemporaryWorkarounds = defineCheck({
26
+ id: '09a93ec8-7b08-47b2-946a-c635e135b67b',
27
+ slug: 'no-temporary-workarounds',
28
+ scope: { languages: ['typescript'], concerns: ['backend', 'frontend', 'cli'] },
29
+ contentFilter: 'raw',
30
+ confidence: 'medium',
31
+ description: 'Detects HACK/FIXME comments that describe themselves as temporary',
32
+ longDescription: `**Purpose:** Flags \`HACK\`/\`FIXME\` comments that explicitly mark themselves as temporary, "before launch", or workarounds. These announcements are reliable signals that a permanent fix was deferred.
33
+
34
+ **Detects:**
35
+ - Lines containing \`HACK\` or \`FIXME\` *and* one of \`temporary\`, \`workaround\`, \`before launch\`
36
+
37
+ **Why it matters:** Temporary workarounds outlive their context. Surfacing them on every fitness run keeps the conversation about the permanent fix open.
38
+
39
+ **Scope:** General best practice. Analyzes each file individually; excludes test/docs/versioning paths.`,
40
+ tags: ['code-quality', 'compliance', 'quality'],
41
+ fileTypes: ['ts', 'tsx'],
42
+ analyze(content, filePath) {
43
+ if (shouldExcludeFile(filePath))
44
+ return [];
45
+ const lower = content.toLowerCase();
46
+ const hasMarker = MARKER_NEEDLES.some((m) => lower.includes(m));
47
+ if (!hasMarker)
48
+ return [];
49
+ const violations = [];
50
+ const lines = content.split('\n');
51
+ for (const [i, line] of lines.entries()) {
52
+ if (!line)
53
+ continue;
54
+ if (matchTemporaryWorkaround(line)) {
55
+ violations.push({
56
+ line: i + 1,
57
+ column: 0,
58
+ message: 'Found temporary workaround - implement permanent solution before launch',
59
+ severity: 'error',
60
+ type: 'temporary-workaround',
61
+ suggestion: 'Replace temporary workaround with a permanent, production-ready solution',
62
+ match: line.trim(),
63
+ });
64
+ }
65
+ }
66
+ return violations;
67
+ },
68
+ });
69
+ //# sourceMappingURL=no-temporary-workarounds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-temporary-workarounds.js","sourceRoot":"","sources":["../../../src/checks/quality/no-temporary-workarounds.ts"],"names":[],"mappings":"AAAA,yGAAyG;AACzG,2IAA2I;AAC3I;;;;;;;;GAQG;AAEH,OAAO,EAAE,WAAW,EAAuB,MAAM,sBAAsB,CAAC;AAExE,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;AAEtF,SAAS,iBAAiB,CAAC,YAAoB;IAC7C,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,OAAO,CAAU,CAAC;AAClD,MAAM,iBAAiB,GAAG,CAAC,eAAe,EAAE,WAAW,EAAE,YAAY,CAAU,CAAC;AAEhF,SAAS,wBAAwB,CAAC,IAAY;IAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACjE,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,WAAW,CAAC;IAChD,EAAE,EAAE,sCAAsC;IAC1C,IAAI,EAAE,0BAA0B;IAChC,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,mEAAmE;IAChF,eAAe,EAAE;;;;;;;wGAOqF;IACtG,IAAI,EAAE,CAAC,cAAc,EAAE,YAAY,EAAE,SAAS,CAAC;IAC/C,SAAS,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC;IAExB,OAAO,CAAC,OAAO,EAAE,QAAQ;QACvB,IAAI,iBAAiB,CAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,CAAC;QAE3C,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAE1B,MAAM,UAAU,GAAqB,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElC,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YACxC,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,IAAI,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,UAAU,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,MAAM,EAAE,CAAC;oBACT,OAAO,EAAE,yEAAyE;oBAClF,QAAQ,EAAE,OAAO;oBACjB,IAAI,EAAE,sBAAsB;oBAC5B,UAAU,EAAE,0EAA0E;oBACtF,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE;iBACnB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @fileoverview No window.alert/confirm/prompt Check
3
+ *
4
+ * Detects usage of window.alert(), window.confirm(), and window.prompt()
5
+ * in frontend code. These native browser dialogs provide poor UX and
6
+ * should be replaced with modal components or toast notifications.
7
+ *
8
+ * Migrated to defineRegexListCheck (Layer 4 Phase C6). The original
9
+ * site's `break // Only report once per line` is preserved via the
10
+ * helper's `oneViolationPerLine: true` option, and the import-skip is
11
+ * preserved via `skipLine`.
12
+ */
13
+ /**
14
+ * Check: quality/no-window-alert
15
+ *
16
+ * Prevents usage of native browser dialogs in frontend code.
17
+ */
18
+ export declare const noWindowAlert: import("@opensip-cli/fitness").Check;
19
+ //# sourceMappingURL=no-window-alert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-window-alert.d.ts","sourceRoot":"","sources":["../../../src/checks/quality/no-window-alert.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;GAWG;AAIH;;;;GAIG;AACH,eAAO,MAAM,aAAa,sCAsDxB,CAAC"}
@@ -0,0 +1,74 @@
1
+ // @fitness-ignore-file no-window-alert -- Fitness check definition references window.alert/confirm/prompt in string literals and regex patterns, not actual usage
2
+ /**
3
+ * @fileoverview No window.alert/confirm/prompt Check
4
+ *
5
+ * Detects usage of window.alert(), window.confirm(), and window.prompt()
6
+ * in frontend code. These native browser dialogs provide poor UX and
7
+ * should be replaced with modal components or toast notifications.
8
+ *
9
+ * Migrated to defineRegexListCheck (Layer 4 Phase C6). The original
10
+ * site's `break // Only report once per line` is preserved via the
11
+ * helper's `oneViolationPerLine: true` option, and the import-skip is
12
+ * preserved via `skipLine`.
13
+ */
14
+ import { defineRegexListCheck } from '@opensip-cli/fitness';
15
+ /**
16
+ * Check: quality/no-window-alert
17
+ *
18
+ * Prevents usage of native browser dialogs in frontend code.
19
+ */
20
+ export const noWindowAlert = defineRegexListCheck({
21
+ id: '170b156b-a45d-4f1a-af7a-a40ed507afe0',
22
+ slug: 'no-window-alert',
23
+ scope: { languages: ['typescript', 'tsx'], concerns: ['frontend', 'ui'] },
24
+ contentFilter: 'strip-strings',
25
+ confidence: 'medium',
26
+ description: 'Disallows window.alert(), window.confirm(), and window.prompt() — use proper UI components',
27
+ longDescription: `**Purpose:** Prevents usage of native browser dialog APIs in frontend code, enforcing proper UI components instead.
28
+
29
+ **Detects:**
30
+ - \`window.alert()\` calls -- should use toast notifications or modal dialogs
31
+ - \`window.confirm()\` calls -- should use confirmation modal dialogs
32
+ - \`window.prompt()\` calls -- should use form inputs in modal dialogs
33
+
34
+ **Why it matters:** Native browser dialogs block the main thread, cannot be styled, and provide a jarring, inconsistent user experience compared to in-app UI components.
35
+
36
+ **Scope:** General best practice. Analyzes each file individually (\`analyze\`). Targets frontend files (preset: \`frontend\`), excluding tests.`,
37
+ tags: ['frontend', 'ux', 'quality', 'best-practices'],
38
+ fileTypes: ['ts', 'tsx'],
39
+ options: {
40
+ // Original site skipped lines starting with `import ` (defensive
41
+ // against lines like `import { alert } from "..."`).
42
+ skipLine: (trimmed) => trimmed.startsWith('import '),
43
+ // Original site `break`s after the first matching pattern to emit
44
+ // only one violation per line.
45
+ oneViolationPerLine: true,
46
+ },
47
+ patterns: [
48
+ {
49
+ id: '7a0f6bc1-f4dd-4e55-9628-d797c877c6e0',
50
+ slug: 'window-alert',
51
+ regex: /window\.alert\s*\(/,
52
+ message: 'window.alert() provides poor UX — replace with a proper UI component',
53
+ severity: 'error',
54
+ suggestion: 'Use a toast notification or modal dialog instead of window.alert()',
55
+ },
56
+ {
57
+ id: '09a93ec8-7b08-47b2-946a-c635e135b67b',
58
+ slug: 'window-confirm',
59
+ regex: /window\.confirm\s*\(/,
60
+ message: 'window.confirm() provides poor UX — replace with a proper UI component',
61
+ severity: 'error',
62
+ suggestion: 'Use a confirmation modal dialog instead of window.confirm()',
63
+ },
64
+ {
65
+ id: 'e39edca8-ee4d-4de8-9a39-655f4d0eb86d',
66
+ slug: 'window-prompt',
67
+ regex: /window\.prompt\s*\(/,
68
+ message: 'window.prompt() provides poor UX — replace with a proper UI component',
69
+ severity: 'error',
70
+ suggestion: 'Use a form input in a modal dialog instead of window.prompt()',
71
+ },
72
+ ],
73
+ });
74
+ //# sourceMappingURL=no-window-alert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-window-alert.js","sourceRoot":"","sources":["../../../src/checks/quality/no-window-alert.ts"],"names":[],"mappings":"AAAA,kKAAkK;AAClK;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,oBAAoB,CAAC;IAChD,EAAE,EAAE,sCAAsC;IAC1C,IAAI,EAAE,iBAAiB;IACvB,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE;IACzE,aAAa,EAAE,eAAe;IAC9B,UAAU,EAAE,QAAQ;IACpB,WAAW,EACT,4FAA4F;IAC9F,eAAe,EAAE;;;;;;;;;iJAS8H;IAC/I,IAAI,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,gBAAgB,CAAC;IACrD,SAAS,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC;IACxB,OAAO,EAAE;QACP,iEAAiE;QACjE,qDAAqD;QACrD,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC;QACpD,kEAAkE;QAClE,+BAA+B;QAC/B,mBAAmB,EAAE,IAAI;KAC1B;IACD,QAAQ,EAAE;QACR;YACE,EAAE,EAAE,sCAAsC;YAC1C,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,oBAAoB;YAC3B,OAAO,EAAE,sEAAsE;YAC/E,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,oEAAoE;SACjF;QACD;YACE,EAAE,EAAE,sCAAsC;YAC1C,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,sBAAsB;YAC7B,OAAO,EAAE,wEAAwE;YACjF,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,6DAA6D;SAC1E;QACD;YACE,EAAE,EAAE,sCAAsC;YAC1C,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,qBAAqB;YAC5B,OAAO,EAAE,uEAAuE;YAChF,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,+DAA+D;SAC5E;KACF;CACF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './pino-serializer-coverage.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/checks/quality/observability/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './pino-serializer-coverage.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/checks/quality/observability/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @fileoverview Pino Serializer Coverage Check
3
+ *
4
+ * Validates that complex objects logged with Pino have serializers:
5
+ * - Objects without registered serializers break structured logging
6
+ * - Circular references cause logging failures
7
+ * - Large objects need truncation
8
+ */
9
+ /**
10
+ * Check: quality/pino-serializer-coverage
11
+ *
12
+ * Validates that complex objects logged have proper Pino serializers.
13
+ */
14
+ export declare const pinoSerializerCoverage: import("@opensip-cli/fitness").Check;
15
+ //# sourceMappingURL=pino-serializer-coverage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pino-serializer-coverage.d.ts","sourceRoot":"","sources":["../../../../src/checks/quality/observability/pino-serializer-coverage.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA2NH;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,sCAwBjC,CAAC"}