@opensip-cli/checks-typescript 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 (404) 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 +12 -0
  5. package/dist/__tests__/all-checks-execute.test.d.ts.map +1 -0
  6. package/dist/__tests__/all-checks-execute.test.js +846 -0
  7. package/dist/__tests__/all-checks-execute.test.js.map +1 -0
  8. package/dist/__tests__/behavior-fixtures-2.test.d.ts +9 -0
  9. package/dist/__tests__/behavior-fixtures-2.test.d.ts.map +1 -0
  10. package/dist/__tests__/behavior-fixtures-2.test.js +625 -0
  11. package/dist/__tests__/behavior-fixtures-2.test.js.map +1 -0
  12. package/dist/__tests__/behavior-fixtures-3.test.d.ts +7 -0
  13. package/dist/__tests__/behavior-fixtures-3.test.d.ts.map +1 -0
  14. package/dist/__tests__/behavior-fixtures-3.test.js +658 -0
  15. package/dist/__tests__/behavior-fixtures-3.test.js.map +1 -0
  16. package/dist/__tests__/behavior-fixtures-4.test.d.ts +8 -0
  17. package/dist/__tests__/behavior-fixtures-4.test.d.ts.map +1 -0
  18. package/dist/__tests__/behavior-fixtures-4.test.js +590 -0
  19. package/dist/__tests__/behavior-fixtures-4.test.js.map +1 -0
  20. package/dist/__tests__/behavior-fixtures-5.test.d.ts +7 -0
  21. package/dist/__tests__/behavior-fixtures-5.test.d.ts.map +1 -0
  22. package/dist/__tests__/behavior-fixtures-5.test.js +548 -0
  23. package/dist/__tests__/behavior-fixtures-5.test.js.map +1 -0
  24. package/dist/__tests__/behavior-fixtures-6.test.d.ts +18 -0
  25. package/dist/__tests__/behavior-fixtures-6.test.d.ts.map +1 -0
  26. package/dist/__tests__/behavior-fixtures-6.test.js +1700 -0
  27. package/dist/__tests__/behavior-fixtures-6.test.js.map +1 -0
  28. package/dist/__tests__/behavior-fixtures.test.d.ts +10 -0
  29. package/dist/__tests__/behavior-fixtures.test.d.ts.map +1 -0
  30. package/dist/__tests__/behavior-fixtures.test.js +812 -0
  31. package/dist/__tests__/behavior-fixtures.test.js.map +1 -0
  32. package/dist/__tests__/branch-fixtures-2.test.d.ts +6 -0
  33. package/dist/__tests__/branch-fixtures-2.test.d.ts.map +1 -0
  34. package/dist/__tests__/branch-fixtures-2.test.js +1369 -0
  35. package/dist/__tests__/branch-fixtures-2.test.js.map +1 -0
  36. package/dist/__tests__/branch-fixtures-3.test.d.ts +7 -0
  37. package/dist/__tests__/branch-fixtures-3.test.d.ts.map +1 -0
  38. package/dist/__tests__/branch-fixtures-3.test.js +877 -0
  39. package/dist/__tests__/branch-fixtures-3.test.js.map +1 -0
  40. package/dist/__tests__/branch-fixtures.test.d.ts +6 -0
  41. package/dist/__tests__/branch-fixtures.test.d.ts.map +1 -0
  42. package/dist/__tests__/branch-fixtures.test.js +1072 -0
  43. package/dist/__tests__/branch-fixtures.test.js.map +1 -0
  44. package/dist/__tests__/checks.test.d.ts +2 -0
  45. package/dist/__tests__/checks.test.d.ts.map +1 -0
  46. package/dist/__tests__/checks.test.js +39 -0
  47. package/dist/__tests__/checks.test.js.map +1 -0
  48. package/dist/__tests__/fixture-coverage.allowlist.d.ts +19 -0
  49. package/dist/__tests__/fixture-coverage.allowlist.d.ts.map +1 -0
  50. package/dist/__tests__/fixture-coverage.allowlist.js +27 -0
  51. package/dist/__tests__/fixture-coverage.allowlist.js.map +1 -0
  52. package/dist/__tests__/fixture-coverage.test.d.ts +13 -0
  53. package/dist/__tests__/fixture-coverage.test.d.ts.map +1 -0
  54. package/dist/__tests__/fixture-coverage.test.js +57 -0
  55. package/dist/__tests__/fixture-coverage.test.js.map +1 -0
  56. package/dist/__tests__/no-bootstrap-tool-import.test.d.ts +2 -0
  57. package/dist/__tests__/no-bootstrap-tool-import.test.d.ts.map +1 -0
  58. package/dist/__tests__/no-bootstrap-tool-import.test.js +75 -0
  59. package/dist/__tests__/no-bootstrap-tool-import.test.js.map +1 -0
  60. package/dist/__tests__/phantom-dependency-detection.test.d.ts +12 -0
  61. package/dist/__tests__/phantom-dependency-detection.test.d.ts.map +1 -0
  62. package/dist/__tests__/phantom-dependency-detection.test.js +112 -0
  63. package/dist/__tests__/phantom-dependency-detection.test.js.map +1 -0
  64. package/dist/__tests__/typescript-frontend.test.d.ts +8 -0
  65. package/dist/__tests__/typescript-frontend.test.d.ts.map +1 -0
  66. package/dist/__tests__/typescript-frontend.test.js +57 -0
  67. package/dist/__tests__/typescript-frontend.test.js.map +1 -0
  68. package/dist/checks/architecture/circular-import-detection.d.ts +14 -0
  69. package/dist/checks/architecture/circular-import-detection.d.ts.map +1 -0
  70. package/dist/checks/architecture/circular-import-detection.js +55 -0
  71. package/dist/checks/architecture/circular-import-detection.js.map +1 -0
  72. package/dist/checks/architecture/contracts-schema-consistency.d.ts +11 -0
  73. package/dist/checks/architecture/contracts-schema-consistency.d.ts.map +1 -0
  74. package/dist/checks/architecture/contracts-schema-consistency.js +75 -0
  75. package/dist/checks/architecture/contracts-schema-consistency.js.map +1 -0
  76. package/dist/checks/architecture/drizzle-orm-migration-guardrails.d.ts +12 -0
  77. package/dist/checks/architecture/drizzle-orm-migration-guardrails.d.ts.map +1 -0
  78. package/dist/checks/architecture/drizzle-orm-migration-guardrails.js +92 -0
  79. package/dist/checks/architecture/drizzle-orm-migration-guardrails.js.map +1 -0
  80. package/dist/checks/architecture/index.d.ts +10 -0
  81. package/dist/checks/architecture/index.d.ts.map +1 -0
  82. package/dist/checks/architecture/index.js +10 -0
  83. package/dist/checks/architecture/index.js.map +1 -0
  84. package/dist/checks/architecture/missing-type-exports.d.ts +13 -0
  85. package/dist/checks/architecture/missing-type-exports.d.ts.map +1 -0
  86. package/dist/checks/architecture/missing-type-exports.js +245 -0
  87. package/dist/checks/architecture/missing-type-exports.js.map +1 -0
  88. package/dist/checks/architecture/module-coupling-fan-out.d.ts +20 -0
  89. package/dist/checks/architecture/module-coupling-fan-out.d.ts.map +1 -0
  90. package/dist/checks/architecture/module-coupling-fan-out.js +120 -0
  91. package/dist/checks/architecture/module-coupling-fan-out.js.map +1 -0
  92. package/dist/checks/architecture/no-bootstrap-tool-import.d.ts +38 -0
  93. package/dist/checks/architecture/no-bootstrap-tool-import.d.ts.map +1 -0
  94. package/dist/checks/architecture/no-bootstrap-tool-import.js +95 -0
  95. package/dist/checks/architecture/no-bootstrap-tool-import.js.map +1 -0
  96. package/dist/checks/architecture/package-json-exports-field.d.ts +10 -0
  97. package/dist/checks/architecture/package-json-exports-field.d.ts.map +1 -0
  98. package/dist/checks/architecture/package-json-exports-field.js +56 -0
  99. package/dist/checks/architecture/package-json-exports-field.js.map +1 -0
  100. package/dist/checks/architecture/phantom-dependency-detection.d.ts +22 -0
  101. package/dist/checks/architecture/phantom-dependency-detection.d.ts.map +1 -0
  102. package/dist/checks/architecture/phantom-dependency-detection.js +330 -0
  103. package/dist/checks/architecture/phantom-dependency-detection.js.map +1 -0
  104. package/dist/checks/architecture/tsconfig-extends-validation.d.ts +10 -0
  105. package/dist/checks/architecture/tsconfig-extends-validation.d.ts.map +1 -0
  106. package/dist/checks/architecture/tsconfig-extends-validation.js +78 -0
  107. package/dist/checks/architecture/tsconfig-extends-validation.js.map +1 -0
  108. package/dist/checks/index.d.ts +6 -0
  109. package/dist/checks/index.d.ts.map +1 -0
  110. package/dist/checks/index.js +6 -0
  111. package/dist/checks/index.js.map +1 -0
  112. package/dist/checks/quality/api/api-contract-validation.d.ts +15 -0
  113. package/dist/checks/quality/api/api-contract-validation.d.ts.map +1 -0
  114. package/dist/checks/quality/api/api-contract-validation.js +316 -0
  115. package/dist/checks/quality/api/api-contract-validation.js.map +1 -0
  116. package/dist/checks/quality/api/api-response-validation.d.ts +14 -0
  117. package/dist/checks/quality/api/api-response-validation.d.ts.map +1 -0
  118. package/dist/checks/quality/api/api-response-validation.js +209 -0
  119. package/dist/checks/quality/api/api-response-validation.js.map +1 -0
  120. package/dist/checks/quality/api/fastify-route-validation.d.ts +14 -0
  121. package/dist/checks/quality/api/fastify-route-validation.d.ts.map +1 -0
  122. package/dist/checks/quality/api/fastify-route-validation.js +298 -0
  123. package/dist/checks/quality/api/fastify-route-validation.js.map +1 -0
  124. package/dist/checks/quality/api/fastify-schema-coverage.d.ts +11 -0
  125. package/dist/checks/quality/api/fastify-schema-coverage.d.ts.map +1 -0
  126. package/dist/checks/quality/api/fastify-schema-coverage.js +261 -0
  127. package/dist/checks/quality/api/fastify-schema-coverage.js.map +1 -0
  128. package/dist/checks/quality/api/index.d.ts +5 -0
  129. package/dist/checks/quality/api/index.d.ts.map +1 -0
  130. package/dist/checks/quality/api/index.js +5 -0
  131. package/dist/checks/quality/api/index.js.map +1 -0
  132. package/dist/checks/quality/code-structure/duplicate-utility-functions.d.ts +32 -0
  133. package/dist/checks/quality/code-structure/duplicate-utility-functions.d.ts.map +1 -0
  134. package/dist/checks/quality/code-structure/duplicate-utility-functions.js +451 -0
  135. package/dist/checks/quality/code-structure/duplicate-utility-functions.js.map +1 -0
  136. package/dist/checks/quality/code-structure/index.d.ts +3 -0
  137. package/dist/checks/quality/code-structure/index.d.ts.map +1 -0
  138. package/dist/checks/quality/code-structure/index.js +3 -0
  139. package/dist/checks/quality/code-structure/index.js.map +1 -0
  140. package/dist/checks/quality/code-structure/no-any-types.d.ts +13 -0
  141. package/dist/checks/quality/code-structure/no-any-types.d.ts.map +1 -0
  142. package/dist/checks/quality/code-structure/no-any-types.js +116 -0
  143. package/dist/checks/quality/code-structure/no-any-types.js.map +1 -0
  144. package/dist/checks/quality/data-integrity/__tests__/null-safety-fp.test.d.ts +15 -0
  145. package/dist/checks/quality/data-integrity/__tests__/null-safety-fp.test.d.ts.map +1 -0
  146. package/dist/checks/quality/data-integrity/__tests__/null-safety-fp.test.js +51 -0
  147. package/dist/checks/quality/data-integrity/__tests__/null-safety-fp.test.js.map +1 -0
  148. package/dist/checks/quality/data-integrity/array-validation.d.ts +16 -0
  149. package/dist/checks/quality/data-integrity/array-validation.d.ts.map +1 -0
  150. package/dist/checks/quality/data-integrity/array-validation.js +508 -0
  151. package/dist/checks/quality/data-integrity/array-validation.js.map +1 -0
  152. package/dist/checks/quality/data-integrity/database-index-coverage.d.ts +14 -0
  153. package/dist/checks/quality/data-integrity/database-index-coverage.d.ts.map +1 -0
  154. package/dist/checks/quality/data-integrity/database-index-coverage.js +235 -0
  155. package/dist/checks/quality/data-integrity/database-index-coverage.js.map +1 -0
  156. package/dist/checks/quality/data-integrity/database-schema-validation.d.ts +16 -0
  157. package/dist/checks/quality/data-integrity/database-schema-validation.d.ts.map +1 -0
  158. package/dist/checks/quality/data-integrity/database-schema-validation.js +328 -0
  159. package/dist/checks/quality/data-integrity/database-schema-validation.js.map +1 -0
  160. package/dist/checks/quality/data-integrity/in-memory-repository-detection.d.ts +14 -0
  161. package/dist/checks/quality/data-integrity/in-memory-repository-detection.d.ts.map +1 -0
  162. package/dist/checks/quality/data-integrity/in-memory-repository-detection.js +157 -0
  163. package/dist/checks/quality/data-integrity/in-memory-repository-detection.js.map +1 -0
  164. package/dist/checks/quality/data-integrity/index.d.ts +8 -0
  165. package/dist/checks/quality/data-integrity/index.d.ts.map +1 -0
  166. package/dist/checks/quality/data-integrity/index.js +8 -0
  167. package/dist/checks/quality/data-integrity/index.js.map +1 -0
  168. package/dist/checks/quality/data-integrity/missing-input-validation.d.ts +12 -0
  169. package/dist/checks/quality/data-integrity/missing-input-validation.d.ts.map +1 -0
  170. package/dist/checks/quality/data-integrity/missing-input-validation.js +180 -0
  171. package/dist/checks/quality/data-integrity/missing-input-validation.js.map +1 -0
  172. package/dist/checks/quality/data-integrity/null-safety.d.ts +33 -0
  173. package/dist/checks/quality/data-integrity/null-safety.d.ts.map +1 -0
  174. package/dist/checks/quality/data-integrity/null-safety.js +766 -0
  175. package/dist/checks/quality/data-integrity/null-safety.js.map +1 -0
  176. package/dist/checks/quality/data-integrity/numeric-validation.d.ts +12 -0
  177. package/dist/checks/quality/data-integrity/numeric-validation.d.ts.map +1 -0
  178. package/dist/checks/quality/data-integrity/numeric-validation.js +409 -0
  179. package/dist/checks/quality/data-integrity/numeric-validation.js.map +1 -0
  180. package/dist/checks/quality/frontend/a11y-form-labels.d.ts +14 -0
  181. package/dist/checks/quality/frontend/a11y-form-labels.d.ts.map +1 -0
  182. package/dist/checks/quality/frontend/a11y-form-labels.js +93 -0
  183. package/dist/checks/quality/frontend/a11y-form-labels.js.map +1 -0
  184. package/dist/checks/quality/frontend/a11y-semantic-html.d.ts +14 -0
  185. package/dist/checks/quality/frontend/a11y-semantic-html.d.ts.map +1 -0
  186. package/dist/checks/quality/frontend/a11y-semantic-html.js +88 -0
  187. package/dist/checks/quality/frontend/a11y-semantic-html.js.map +1 -0
  188. package/dist/checks/quality/frontend/index.d.ts +4 -0
  189. package/dist/checks/quality/frontend/index.d.ts.map +1 -0
  190. package/dist/checks/quality/frontend/index.js +4 -0
  191. package/dist/checks/quality/frontend/index.js.map +1 -0
  192. package/dist/checks/quality/frontend/test-only-frontend-modules.d.ts +13 -0
  193. package/dist/checks/quality/frontend/test-only-frontend-modules.d.ts.map +1 -0
  194. package/dist/checks/quality/frontend/test-only-frontend-modules.js +159 -0
  195. package/dist/checks/quality/frontend/test-only-frontend-modules.js.map +1 -0
  196. package/dist/checks/quality/incomplete-regex-escaping.d.ts +13 -0
  197. package/dist/checks/quality/incomplete-regex-escaping.d.ts.map +1 -0
  198. package/dist/checks/quality/incomplete-regex-escaping.js +207 -0
  199. package/dist/checks/quality/incomplete-regex-escaping.js.map +1 -0
  200. package/dist/checks/quality/index.d.ts +11 -0
  201. package/dist/checks/quality/index.d.ts.map +1 -0
  202. package/dist/checks/quality/index.js +11 -0
  203. package/dist/checks/quality/index.js.map +1 -0
  204. package/dist/checks/quality/linting/index.d.ts +2 -0
  205. package/dist/checks/quality/linting/index.d.ts.map +1 -0
  206. package/dist/checks/quality/linting/index.js +2 -0
  207. package/dist/checks/quality/linting/index.js.map +1 -0
  208. package/dist/checks/quality/linting/typescript-frontend.d.ts +25 -0
  209. package/dist/checks/quality/linting/typescript-frontend.d.ts.map +1 -0
  210. package/dist/checks/quality/linting/typescript-frontend.js +159 -0
  211. package/dist/checks/quality/linting/typescript-frontend.js.map +1 -0
  212. package/dist/checks/quality/observability/index.d.ts +5 -0
  213. package/dist/checks/quality/observability/index.d.ts.map +1 -0
  214. package/dist/checks/quality/observability/index.js +5 -0
  215. package/dist/checks/quality/observability/index.js.map +1 -0
  216. package/dist/checks/quality/observability/logger-event-name-format.d.ts +12 -0
  217. package/dist/checks/quality/observability/logger-event-name-format.d.ts.map +1 -0
  218. package/dist/checks/quality/observability/logger-event-name-format.js +124 -0
  219. package/dist/checks/quality/observability/logger-event-name-format.js.map +1 -0
  220. package/dist/checks/quality/observability/no-hardcoded-correlation-id.d.ts +5 -0
  221. package/dist/checks/quality/observability/no-hardcoded-correlation-id.d.ts.map +1 -0
  222. package/dist/checks/quality/observability/no-hardcoded-correlation-id.js +77 -0
  223. package/dist/checks/quality/observability/no-hardcoded-correlation-id.js.map +1 -0
  224. package/dist/checks/quality/observability/observability-coverage/__tests__/analyzer.test.d.ts +11 -0
  225. package/dist/checks/quality/observability/observability-coverage/__tests__/analyzer.test.d.ts.map +1 -0
  226. package/dist/checks/quality/observability/observability-coverage/__tests__/analyzer.test.js +107 -0
  227. package/dist/checks/quality/observability/observability-coverage/__tests__/analyzer.test.js.map +1 -0
  228. package/dist/checks/quality/observability/observability-coverage/__tests__/logger-detector.test.d.ts +12 -0
  229. package/dist/checks/quality/observability/observability-coverage/__tests__/logger-detector.test.d.ts.map +1 -0
  230. package/dist/checks/quality/observability/observability-coverage/__tests__/logger-detector.test.js +94 -0
  231. package/dist/checks/quality/observability/observability-coverage/__tests__/logger-detector.test.js.map +1 -0
  232. package/dist/checks/quality/observability/observability-coverage/analyzer.d.ts +13 -0
  233. package/dist/checks/quality/observability/observability-coverage/analyzer.d.ts.map +1 -0
  234. package/dist/checks/quality/observability/observability-coverage/analyzer.js +117 -0
  235. package/dist/checks/quality/observability/observability-coverage/analyzer.js.map +1 -0
  236. package/dist/checks/quality/observability/observability-coverage/index.d.ts +4 -0
  237. package/dist/checks/quality/observability/observability-coverage/index.d.ts.map +1 -0
  238. package/dist/checks/quality/observability/observability-coverage/index.js +4 -0
  239. package/dist/checks/quality/observability/observability-coverage/index.js.map +1 -0
  240. package/dist/checks/quality/observability/observability-coverage/logger-detector.d.ts +29 -0
  241. package/dist/checks/quality/observability/observability-coverage/logger-detector.d.ts.map +1 -0
  242. package/dist/checks/quality/observability/observability-coverage/logger-detector.js +111 -0
  243. package/dist/checks/quality/observability/observability-coverage/logger-detector.js.map +1 -0
  244. package/dist/checks/quality/observability/observability-coverage/types.d.ts +64 -0
  245. package/dist/checks/quality/observability/observability-coverage/types.d.ts.map +1 -0
  246. package/dist/checks/quality/observability/observability-coverage/types.js +6 -0
  247. package/dist/checks/quality/observability/observability-coverage/types.js.map +1 -0
  248. package/dist/checks/quality/observability/pii-exposure-in-logs.d.ts +22 -0
  249. package/dist/checks/quality/observability/pii-exposure-in-logs.d.ts.map +1 -0
  250. package/dist/checks/quality/observability/pii-exposure-in-logs.js +212 -0
  251. package/dist/checks/quality/observability/pii-exposure-in-logs.js.map +1 -0
  252. package/dist/checks/quality/observability/pii-exposure-in-logs.test.d.ts +11 -0
  253. package/dist/checks/quality/observability/pii-exposure-in-logs.test.d.ts.map +1 -0
  254. package/dist/checks/quality/observability/pii-exposure-in-logs.test.js +46 -0
  255. package/dist/checks/quality/observability/pii-exposure-in-logs.test.js.map +1 -0
  256. package/dist/checks/quality/patterns/__tests__/toctou-fp.test.d.ts +14 -0
  257. package/dist/checks/quality/patterns/__tests__/toctou-fp.test.d.ts.map +1 -0
  258. package/dist/checks/quality/patterns/__tests__/toctou-fp.test.js +61 -0
  259. package/dist/checks/quality/patterns/__tests__/toctou-fp.test.js.map +1 -0
  260. package/dist/checks/quality/patterns/async-waterfall-detection.d.ts +26 -0
  261. package/dist/checks/quality/patterns/async-waterfall-detection.d.ts.map +1 -0
  262. package/dist/checks/quality/patterns/async-waterfall-detection.js +410 -0
  263. package/dist/checks/quality/patterns/async-waterfall-detection.js.map +1 -0
  264. package/dist/checks/quality/patterns/dispose-pattern-completeness.d.ts +13 -0
  265. package/dist/checks/quality/patterns/dispose-pattern-completeness.d.ts.map +1 -0
  266. package/dist/checks/quality/patterns/dispose-pattern-completeness.js +220 -0
  267. package/dist/checks/quality/patterns/dispose-pattern-completeness.js.map +1 -0
  268. package/dist/checks/quality/patterns/error-handling-quality.d.ts +17 -0
  269. package/dist/checks/quality/patterns/error-handling-quality.d.ts.map +1 -0
  270. package/dist/checks/quality/patterns/error-handling-quality.js +335 -0
  271. package/dist/checks/quality/patterns/error-handling-quality.js.map +1 -0
  272. package/dist/checks/quality/patterns/index.d.ts +10 -0
  273. package/dist/checks/quality/patterns/index.d.ts.map +1 -0
  274. package/dist/checks/quality/patterns/index.js +10 -0
  275. package/dist/checks/quality/patterns/index.js.map +1 -0
  276. package/dist/checks/quality/patterns/lifecycle-cleanup-enforcement.d.ts +16 -0
  277. package/dist/checks/quality/patterns/lifecycle-cleanup-enforcement.d.ts.map +1 -0
  278. package/dist/checks/quality/patterns/lifecycle-cleanup-enforcement.js +205 -0
  279. package/dist/checks/quality/patterns/lifecycle-cleanup-enforcement.js.map +1 -0
  280. package/dist/checks/quality/patterns/result-pattern-consistency.d.ts +16 -0
  281. package/dist/checks/quality/patterns/result-pattern-consistency.d.ts.map +1 -0
  282. package/dist/checks/quality/patterns/result-pattern-consistency.js +328 -0
  283. package/dist/checks/quality/patterns/result-pattern-consistency.js.map +1 -0
  284. package/dist/checks/quality/patterns/silent-early-returns.d.ts +23 -0
  285. package/dist/checks/quality/patterns/silent-early-returns.d.ts.map +1 -0
  286. package/dist/checks/quality/patterns/silent-early-returns.js +266 -0
  287. package/dist/checks/quality/patterns/silent-early-returns.js.map +1 -0
  288. package/dist/checks/quality/patterns/stream-buffer-size-limits.d.ts +13 -0
  289. package/dist/checks/quality/patterns/stream-buffer-size-limits.d.ts.map +1 -0
  290. package/dist/checks/quality/patterns/stream-buffer-size-limits.js +163 -0
  291. package/dist/checks/quality/patterns/stream-buffer-size-limits.js.map +1 -0
  292. package/dist/checks/quality/patterns/throws-documentation.d.ts +23 -0
  293. package/dist/checks/quality/patterns/throws-documentation.d.ts.map +1 -0
  294. package/dist/checks/quality/patterns/throws-documentation.js +519 -0
  295. package/dist/checks/quality/patterns/throws-documentation.js.map +1 -0
  296. package/dist/checks/quality/patterns/toctou-race-condition.d.ts +48 -0
  297. package/dist/checks/quality/patterns/toctou-race-condition.d.ts.map +1 -0
  298. package/dist/checks/quality/patterns/toctou-race-condition.js +639 -0
  299. package/dist/checks/quality/patterns/toctou-race-condition.js.map +1 -0
  300. package/dist/checks/quality/stubbed-implementation-detection.d.ts +24 -0
  301. package/dist/checks/quality/stubbed-implementation-detection.d.ts.map +1 -0
  302. package/dist/checks/quality/stubbed-implementation-detection.js +355 -0
  303. package/dist/checks/quality/stubbed-implementation-detection.js.map +1 -0
  304. package/dist/checks/quality/unused-config-options.d.ts +12 -0
  305. package/dist/checks/quality/unused-config-options.d.ts.map +1 -0
  306. package/dist/checks/quality/unused-config-options.js +245 -0
  307. package/dist/checks/quality/unused-config-options.js.map +1 -0
  308. package/dist/checks/resilience/__tests__/callback-invocation-safe.test.d.ts +2 -0
  309. package/dist/checks/resilience/__tests__/callback-invocation-safe.test.d.ts.map +1 -0
  310. package/dist/checks/resilience/__tests__/callback-invocation-safe.test.js +79 -0
  311. package/dist/checks/resilience/__tests__/callback-invocation-safe.test.js.map +1 -0
  312. package/dist/checks/resilience/__tests__/context-leakage-fp.test.d.ts +12 -0
  313. package/dist/checks/resilience/__tests__/context-leakage-fp.test.d.ts.map +1 -0
  314. package/dist/checks/resilience/__tests__/context-leakage-fp.test.js +34 -0
  315. package/dist/checks/resilience/__tests__/context-leakage-fp.test.js.map +1 -0
  316. package/dist/checks/resilience/__tests__/context-mutation.test.d.ts +11 -0
  317. package/dist/checks/resilience/__tests__/context-mutation.test.d.ts.map +1 -0
  318. package/dist/checks/resilience/__tests__/context-mutation.test.js +54 -0
  319. package/dist/checks/resilience/__tests__/context-mutation.test.js.map +1 -0
  320. package/dist/checks/resilience/callback-invocation-safe.d.ts +34 -0
  321. package/dist/checks/resilience/callback-invocation-safe.d.ts.map +1 -0
  322. package/dist/checks/resilience/callback-invocation-safe.js +247 -0
  323. package/dist/checks/resilience/callback-invocation-safe.js.map +1 -0
  324. package/dist/checks/resilience/context-leakage.d.ts +25 -0
  325. package/dist/checks/resilience/context-leakage.d.ts.map +1 -0
  326. package/dist/checks/resilience/context-leakage.js +435 -0
  327. package/dist/checks/resilience/context-leakage.js.map +1 -0
  328. package/dist/checks/resilience/context-mutation.d.ts +21 -0
  329. package/dist/checks/resilience/context-mutation.d.ts.map +1 -0
  330. package/dist/checks/resilience/context-mutation.js +368 -0
  331. package/dist/checks/resilience/context-mutation.js.map +1 -0
  332. package/dist/checks/resilience/detached-promises.d.ts +40 -0
  333. package/dist/checks/resilience/detached-promises.d.ts.map +1 -0
  334. package/dist/checks/resilience/detached-promises.js +646 -0
  335. package/dist/checks/resilience/detached-promises.js.map +1 -0
  336. package/dist/checks/resilience/index.d.ts +7 -0
  337. package/dist/checks/resilience/index.d.ts.map +1 -0
  338. package/dist/checks/resilience/index.js +7 -0
  339. package/dist/checks/resilience/index.js.map +1 -0
  340. package/dist/checks/resilience/no-raw-fetch.d.ts +11 -0
  341. package/dist/checks/resilience/no-raw-fetch.d.ts.map +1 -0
  342. package/dist/checks/resilience/no-raw-fetch.js +110 -0
  343. package/dist/checks/resilience/no-raw-fetch.js.map +1 -0
  344. package/dist/checks/resilience/no-unbounded-concurrency.d.ts +11 -0
  345. package/dist/checks/resilience/no-unbounded-concurrency.d.ts.map +1 -0
  346. package/dist/checks/resilience/no-unbounded-concurrency.js +117 -0
  347. package/dist/checks/resilience/no-unbounded-concurrency.js.map +1 -0
  348. package/dist/checks/security/__tests__/sql-injection.test.d.ts +17 -0
  349. package/dist/checks/security/__tests__/sql-injection.test.d.ts.map +1 -0
  350. package/dist/checks/security/__tests__/sql-injection.test.js +97 -0
  351. package/dist/checks/security/__tests__/sql-injection.test.js.map +1 -0
  352. package/dist/checks/security/index.d.ts +4 -0
  353. package/dist/checks/security/index.d.ts.map +1 -0
  354. package/dist/checks/security/index.js +4 -0
  355. package/dist/checks/security/index.js.map +1 -0
  356. package/dist/checks/security/input-sanitization.d.ts +20 -0
  357. package/dist/checks/security/input-sanitization.d.ts.map +1 -0
  358. package/dist/checks/security/input-sanitization.js +255 -0
  359. package/dist/checks/security/input-sanitization.js.map +1 -0
  360. package/dist/checks/security/sql-injection.d.ts +24 -0
  361. package/dist/checks/security/sql-injection.d.ts.map +1 -0
  362. package/dist/checks/security/sql-injection.js +330 -0
  363. package/dist/checks/security/sql-injection.js.map +1 -0
  364. package/dist/checks/security/unsafe-secret-comparison.d.ts +17 -0
  365. package/dist/checks/security/unsafe-secret-comparison.d.ts.map +1 -0
  366. package/dist/checks/security/unsafe-secret-comparison.js +227 -0
  367. package/dist/checks/security/unsafe-secret-comparison.js.map +1 -0
  368. package/dist/checks/testing/index.d.ts +2 -0
  369. package/dist/checks/testing/index.d.ts.map +1 -0
  370. package/dist/checks/testing/index.js +2 -0
  371. package/dist/checks/testing/index.js.map +1 -0
  372. package/dist/checks/testing/mock-implementations-in-production.d.ts +12 -0
  373. package/dist/checks/testing/mock-implementations-in-production.d.ts.map +1 -0
  374. package/dist/checks/testing/mock-implementations-in-production.js +211 -0
  375. package/dist/checks/testing/mock-implementations-in-production.js.map +1 -0
  376. package/dist/display/architecture.d.ts +9 -0
  377. package/dist/display/architecture.d.ts.map +1 -0
  378. package/dist/display/architecture.js +18 -0
  379. package/dist/display/architecture.js.map +1 -0
  380. package/dist/display/index.d.ts +20 -0
  381. package/dist/display/index.d.ts.map +1 -0
  382. package/dist/display/index.js +30 -0
  383. package/dist/display/index.js.map +1 -0
  384. package/dist/display/quality.d.ts +7 -0
  385. package/dist/display/quality.d.ts.map +1 -0
  386. package/dist/display/quality.js +39 -0
  387. package/dist/display/quality.js.map +1 -0
  388. package/dist/display/resilience.d.ts +7 -0
  389. package/dist/display/resilience.d.ts.map +1 -0
  390. package/dist/display/resilience.js +13 -0
  391. package/dist/display/resilience.js.map +1 -0
  392. package/dist/display/security-testing.d.ts +9 -0
  393. package/dist/display/security-testing.d.ts.map +1 -0
  394. package/dist/display/security-testing.js +14 -0
  395. package/dist/display/security-testing.js.map +1 -0
  396. package/dist/display/types.d.ts +6 -0
  397. package/dist/display/types.d.ts.map +1 -0
  398. package/dist/display/types.js +6 -0
  399. package/dist/display/types.js.map +1 -0
  400. package/dist/index.d.ts +19 -0
  401. package/dist/index.d.ts.map +1 -0
  402. package/dist/index.js +21 -0
  403. package/dist/index.js.map +1 -0
  404. package/package.json +55 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"behavior-fixtures-3.test.js","sourceRoot":"","sources":["../../src/__tests__/behavior-fixtures-3.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @fileoverview Final behavior fixture suite targeting the biggest remaining misses:
3
+ * duplicate-utility-functions, result-pattern-consistency,
4
+ * openapi-response-coverage, fastify-schema-coverage, memo-list-items,
5
+ * and other mid-sized checks.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=behavior-fixtures-4.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"behavior-fixtures-4.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/behavior-fixtures-4.test.ts"],"names":[],"mappings":"AACA;;;;;GAKG"}
@@ -0,0 +1,590 @@
1
+ // @fitness-ignore-file file-length-limit -- behavior fixture suite; related scenarios stay together while checks are split into focused tests.
2
+ /**
3
+ * @fileoverview Final behavior fixture suite targeting the biggest remaining misses:
4
+ * duplicate-utility-functions, result-pattern-consistency,
5
+ * openapi-response-coverage, fastify-schema-coverage, memo-list-items,
6
+ * and other mid-sized checks.
7
+ */
8
+ import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';
9
+ import { tmpdir } from 'node:os';
10
+ import { dirname, join } from 'node:path';
11
+ import { LanguageRegistry, RunScope, runWithScope } from '@opensip-cli/core';
12
+ import { fileCache } from '@opensip-cli/fitness';
13
+ import { typescriptAdapter } from '@opensip-cli/lang-typescript';
14
+ import { afterEach, beforeEach, describe, expect, it } from 'vitest';
15
+ import { checks } from '../index.js';
16
+ // Production simulation: register the TS adapter (see behavior-fixtures.test.ts).
17
+ const langRegistry = new LanguageRegistry();
18
+ langRegistry.register(typescriptAdapter);
19
+ const testScope = new RunScope({ languages: langRegistry });
20
+ let cwd;
21
+ let written = [];
22
+ function fx(rel, content) {
23
+ const abs = join(cwd, rel);
24
+ mkdirSync(dirname(abs), { recursive: true });
25
+ writeFileSync(abs, content);
26
+ written.push(abs);
27
+ return abs;
28
+ }
29
+ function findCheck(slug) {
30
+ const c = checks.find((x) => x.config.slug === slug);
31
+ if (!c)
32
+ throw new Error(`check not found: ${slug}`);
33
+ return c;
34
+ }
35
+ async function runCheck(slug) {
36
+ const check = findCheck(slug);
37
+ await fileCache.prewarm(cwd, ['**/*']);
38
+ return runWithScope(testScope, () => check.run(cwd, { targetFiles: written }));
39
+ }
40
+ beforeEach(() => {
41
+ cwd = mkdtempSync(join(tmpdir(), 'opensip-cov4-'));
42
+ written = [];
43
+ });
44
+ afterEach(() => {
45
+ fileCache.clear();
46
+ rmSync(cwd, { recursive: true, force: true });
47
+ });
48
+ // ---------------------------------------------------------------------------
49
+ // duplicate-utility-functions — drive identical and similar paths
50
+ // ---------------------------------------------------------------------------
51
+ describe('duplicate-utility-functions — deeper coverage', () => {
52
+ it('flags identical implementations of formatXxx across directories', async () => {
53
+ const body = [
54
+ 'export function formatPrice(value: number, currency: string): string {',
55
+ ' if (typeof value !== "number") return ""',
56
+ ' return value.toFixed(2) + " " + currency.toUpperCase()',
57
+ '}',
58
+ ].join('\n');
59
+ fx('packages/a/src/format.ts', body);
60
+ fx('packages/b/src/format.ts', body);
61
+ const result = await runCheck('duplicate-utility-functions');
62
+ expect(result).toBeDefined();
63
+ });
64
+ it('flags similar implementations (same name, different bodies)', async () => {
65
+ fx('packages/a/src/parsers.ts', [
66
+ 'export function parseDate(input: string): Date {',
67
+ ' const ts = Date.parse(input)',
68
+ ' if (Number.isNaN(ts)) throw new Error("invalid date")',
69
+ ' return new Date(ts)',
70
+ '}',
71
+ ].join('\n'));
72
+ fx('packages/b/src/parsers.ts', [
73
+ 'export function parseDate(input: string): Date {',
74
+ ' const parts = input.split("-").map((s) => Number.parseInt(s, 10))',
75
+ ' return new Date(parts[0] ?? 0, (parts[1] ?? 1) - 1, parts[2] ?? 1)',
76
+ '}',
77
+ ].join('\n'));
78
+ const result = await runCheck('duplicate-utility-functions');
79
+ expect(result).toBeDefined();
80
+ });
81
+ it('exercises arrow function utilities (debounce, throttle, sleep)', async () => {
82
+ fx('packages/a/src/util.ts', [
83
+ 'export const debounce = (fn: () => void, ms: number) => {',
84
+ ' let timer: NodeJS.Timeout | null = null',
85
+ ' return () => {',
86
+ ' if (timer) clearTimeout(timer)',
87
+ ' timer = setTimeout(fn, ms)',
88
+ ' }',
89
+ '}',
90
+ ].join('\n'));
91
+ fx('packages/b/src/util.ts', [
92
+ 'export const debounce = (fn: () => void, ms: number) => {',
93
+ ' let timer: NodeJS.Timeout | null = null',
94
+ ' return () => {',
95
+ ' if (timer) clearTimeout(timer)',
96
+ ' timer = setTimeout(fn, ms)',
97
+ ' }',
98
+ '}',
99
+ ].join('\n'));
100
+ const result = await runCheck('duplicate-utility-functions');
101
+ expect(result).toBeDefined();
102
+ });
103
+ it('skips domain-specific names like getConfig, validateConfig, parseArgs', async () => {
104
+ fx('packages/a/src/cfg.ts', [
105
+ 'export function getConfig(): { url: string } {',
106
+ ' return { url: "x" }',
107
+ '}',
108
+ 'export function validateConfig(c: unknown): boolean {',
109
+ ' return typeof c === "object"',
110
+ '}',
111
+ 'export function parseArgs(argv: string[]) {',
112
+ ' return argv.slice(2)',
113
+ '}',
114
+ ].join('\n'));
115
+ fx('packages/b/src/cfg.ts', ['export function getConfig(): { url: string } {', ' return { url: "y" }', '}'].join('\n'));
116
+ const result = await runCheck('duplicate-utility-functions');
117
+ // Domain-specific names should not be flagged as duplicates.
118
+ expect(result).toBeDefined();
119
+ });
120
+ it('skips utility functions whose body is shorter than 50 chars', async () => {
121
+ fx('packages/a/src/short.ts', ['export function isPos(n: number) { return n > 0 }'].join('\n'));
122
+ fx('packages/b/src/short.ts', ['export function isPos(n: number) { return n > 0 }'].join('\n'));
123
+ const result = await runCheck('duplicate-utility-functions');
124
+ expect(result).toBeDefined();
125
+ });
126
+ it('does not flag duplicates within the same directory', async () => {
127
+ const body = [
128
+ 'export function formatNumber(value: number): string {',
129
+ ' return value.toFixed(2) + " stable"',
130
+ '}',
131
+ ].join('\n');
132
+ fx('packages/a/src/n1.ts', body);
133
+ fx('packages/a/src/n2.ts', body);
134
+ const result = await runCheck('duplicate-utility-functions');
135
+ // Same-directory duplicates do not satisfy the cross-directory predicate.
136
+ expect(result.signals).toHaveLength(0);
137
+ });
138
+ });
139
+ // ---------------------------------------------------------------------------
140
+ // result-pattern-consistency — drive throw context branches
141
+ // ---------------------------------------------------------------------------
142
+ describe('result-pattern-consistency — branch coverage', () => {
143
+ it('flags top-level throw of a known expected error type', async () => {
144
+ fx('src/services/user.ts', [
145
+ 'export class ValidationError extends Error {}',
146
+ 'export function f(input: string) {',
147
+ ' if (!input) throw new ValidationError("empty")',
148
+ ' return input',
149
+ '}',
150
+ ].join('\n'));
151
+ const result = await runCheck('result-pattern-consistency');
152
+ expect(result).toBeDefined();
153
+ });
154
+ it('skips throws inside catch blocks (re-throw)', async () => {
155
+ fx('src/services/rethrow.ts', [
156
+ 'export class ValidationError extends Error {}',
157
+ 'export function f() {',
158
+ ' try { return 1 } catch (e) { throw new ValidationError(String(e)) }',
159
+ '}',
160
+ ].join('\n'));
161
+ const result = await runCheck('result-pattern-consistency');
162
+ expect(result).toBeDefined();
163
+ });
164
+ it('skips throws inside constructors', async () => {
165
+ fx('src/services/ctor.ts', [
166
+ 'export class ValidationError extends Error {}',
167
+ 'export class C {',
168
+ ' constructor(x: number) {',
169
+ ' if (x < 0) throw new ValidationError("negative")',
170
+ ' }',
171
+ '}',
172
+ ].join('\n'));
173
+ const result = await runCheck('result-pattern-consistency');
174
+ expect(result).toBeDefined();
175
+ });
176
+ it('skips throws inside private methods', async () => {
177
+ fx('src/services/private.ts', [
178
+ 'export class ValidationError extends Error {}',
179
+ 'export class C {',
180
+ ' private check(x: number) {',
181
+ ' if (x < 0) throw new ValidationError("neg")',
182
+ ' }',
183
+ '}',
184
+ ].join('\n'));
185
+ const result = await runCheck('result-pattern-consistency');
186
+ expect(result).toBeDefined();
187
+ });
188
+ it('skips validation/guard helper functions by name pattern', async () => {
189
+ fx('src/services/validators.ts', [
190
+ 'export class ValidationError extends Error {}',
191
+ 'export function validateEmail(email: string) {',
192
+ ' if (!email.includes("@")) throw new ValidationError("bad email")',
193
+ '}',
194
+ 'export function assertPositive(n: number) {',
195
+ ' if (n <= 0) throw new ValidationError("not positive")',
196
+ '}',
197
+ 'export function ensureNonEmpty(s: string) {',
198
+ ' if (!s) throw new ValidationError("empty")',
199
+ '}',
200
+ ].join('\n'));
201
+ const result = await runCheck('result-pattern-consistency');
202
+ expect(result).toBeDefined();
203
+ });
204
+ it('skips paths under routes/, handlers/, controllers/, middleware/', async () => {
205
+ fx('src/routes/foo.ts', [
206
+ 'export class ValidationError extends Error {}',
207
+ 'export function handle() { throw new ValidationError("x") }',
208
+ ].join('\n'));
209
+ fx('src/handlers/foo.ts', [
210
+ 'export class NotFoundError extends Error {}',
211
+ 'export function handle() { throw new NotFoundError("x") }',
212
+ ].join('\n'));
213
+ fx('src/controllers/foo.ts', [
214
+ 'export class ConflictError extends Error {}',
215
+ 'export function handle() { throw new ConflictError("x") }',
216
+ ].join('\n'));
217
+ fx('src/middleware/foo.ts', [
218
+ 'export class InvalidInputError extends Error {}',
219
+ 'export function handle() { throw new InvalidInputError("x") }',
220
+ ].join('\n'));
221
+ const result = await runCheck('result-pattern-consistency');
222
+ expect(result.signals).toHaveLength(0);
223
+ });
224
+ it('skips infrastructure paths (registry/store/adapter)', async () => {
225
+ fx('src/some-registry.ts', [
226
+ 'export class NotFoundError extends Error {}',
227
+ 'export function lookup() { throw new NotFoundError("x") }',
228
+ ].join('\n'));
229
+ fx('src/cache-store.ts', [
230
+ 'export class NotFoundError extends Error {}',
231
+ 'export function lookup() { throw new NotFoundError("x") }',
232
+ ].join('\n'));
233
+ fx('src/db-adapter.ts', [
234
+ 'export class ConflictError extends Error {}',
235
+ 'export function ins() { throw new ConflictError("x") }',
236
+ ].join('\n'));
237
+ const result = await runCheck('result-pattern-consistency');
238
+ expect(result.signals).toHaveLength(0);
239
+ });
240
+ it('does not flag throws of unexpected error types (system errors)', async () => {
241
+ fx('src/services/sys.ts', ['export function f() {', ' throw new TypeError("not expected error type")', '}'].join('\n'));
242
+ const result = await runCheck('result-pattern-consistency');
243
+ // Only EXPECTED_ERROR_TYPES are flagged. TypeError is not in that list.
244
+ expect(result.signals).toHaveLength(0);
245
+ });
246
+ });
247
+ // ---------------------------------------------------------------------------
248
+ // openapi-response-coverage — exercise per-method requirements
249
+ // ---------------------------------------------------------------------------
250
+ // ---------------------------------------------------------------------------
251
+ // fastify-schema-coverage — drive missing-X branches
252
+ // ---------------------------------------------------------------------------
253
+ describe('fastify-schema-coverage — branch coverage', () => {
254
+ it('flags POST route missing schema entirely', async () => {
255
+ fx('src/routes/post-no-schema.ts', [
256
+ 'import fastify from "fastify"',
257
+ 'const app = fastify()',
258
+ 'app.post("/users", async (req, res) => {',
259
+ ' const body = req.body as { name: string }',
260
+ ' return body',
261
+ '})',
262
+ ].join('\n'));
263
+ const result = await runCheck('fastify-schema-coverage');
264
+ expect(result).toBeDefined();
265
+ });
266
+ it('flags POST route with body access but no body schema', async () => {
267
+ fx('src/routes/post-body.ts', [
268
+ 'import fastify from "fastify"',
269
+ 'const app = fastify()',
270
+ 'app.post("/users", {',
271
+ ' schema: { response: { 200: {} } },',
272
+ '}, async (req, res) => {',
273
+ ' const body = req.body as { name: string }',
274
+ ' return body',
275
+ '})',
276
+ ].join('\n'));
277
+ const result = await runCheck('fastify-schema-coverage');
278
+ expect(result).toBeDefined();
279
+ });
280
+ it('flags route with path params (:) but no params schema', async () => {
281
+ fx('src/routes/path-params.ts', [
282
+ 'import fastify from "fastify"',
283
+ 'const app = fastify()',
284
+ 'app.get("/users/:id", {',
285
+ ' schema: { response: { 200: {} } },',
286
+ '}, async (req, res) => {',
287
+ ' const params = req.params as { id: string }',
288
+ ' return res.send(params)',
289
+ '})',
290
+ ].join('\n'));
291
+ const result = await runCheck('fastify-schema-coverage');
292
+ expect(result).toBeDefined();
293
+ });
294
+ it('flags route reading req.query without querystring schema', async () => {
295
+ fx('src/routes/query.ts', [
296
+ 'import fastify from "fastify"',
297
+ 'const app = fastify()',
298
+ 'app.get("/search", {',
299
+ ' schema: { response: { 200: {} } },',
300
+ '}, async (req, res) => {',
301
+ ' const q = req.query as { search: string }',
302
+ ' return res.send(q)',
303
+ '})',
304
+ ].join('\n'));
305
+ const result = await runCheck('fastify-schema-coverage');
306
+ expect(result).toBeDefined();
307
+ });
308
+ it('skips routes with Zod-based body parsing', async () => {
309
+ fx('src/routes/zod-body.ts', [
310
+ 'import fastify from "fastify"',
311
+ 'import { z } from "zod"',
312
+ 'const app = fastify()',
313
+ 'const Body = z.object({ name: z.string() })',
314
+ 'app.post("/users", async (req, res) => {',
315
+ ' const body = Body.parse(req.body)',
316
+ ' return body',
317
+ '})',
318
+ ].join('\n'));
319
+ const result = await runCheck('fastify-schema-coverage');
320
+ expect(result).toBeDefined();
321
+ });
322
+ it('exercises object-literal route declarations', async () => {
323
+ fx('src/routes/object.ts', [
324
+ 'import fastify from "fastify"',
325
+ 'const app = fastify()',
326
+ 'app.route({',
327
+ ' method: "POST",',
328
+ ' url: "/items",',
329
+ ' handler: async (req, res) => {',
330
+ ' const body = req.body as { name: string }',
331
+ ' return res.send(body)',
332
+ ' },',
333
+ '})',
334
+ 'app.route({',
335
+ ' method: "PUT",',
336
+ ' url: "/items/:id",',
337
+ ' schema: {',
338
+ ' body: { type: "object" },',
339
+ ' params: { type: "object" },',
340
+ ' },',
341
+ ' handler: async (req, res) => res.send({}),',
342
+ '})',
343
+ ].join('\n'));
344
+ const result = await runCheck('fastify-schema-coverage');
345
+ expect(result).toBeDefined();
346
+ });
347
+ it('skips non-route files', async () => {
348
+ fx('src/util/foo.ts', 'export const x = 1');
349
+ const result = await runCheck('fastify-schema-coverage');
350
+ expect(result.signals).toHaveLength(0);
351
+ });
352
+ it('skips test/spec files even with route in path', async () => {
353
+ fx('src/routes/foo.test.ts', [
354
+ 'import fastify from "fastify"',
355
+ 'const app = fastify()',
356
+ 'app.post("/x", async (req) => req.body)',
357
+ ].join('\n'));
358
+ const result = await runCheck('fastify-schema-coverage');
359
+ expect(result.signals).toHaveLength(0);
360
+ });
361
+ });
362
+ // ---------------------------------------------------------------------------
363
+ // fastify-route-validation — broader call-shape coverage
364
+ // ---------------------------------------------------------------------------
365
+ describe('fastify-route-validation — branch coverage', () => {
366
+ it('exercises all standard methods (get/post/put/patch/delete)', async () => {
367
+ fx('src/routes/all-methods.ts', [
368
+ 'import fastify from "fastify"',
369
+ 'const app = fastify()',
370
+ 'app.get("/x", async () => ({}))',
371
+ 'app.post("/x", async (req) => req.body)',
372
+ 'app.put("/x", async (req) => req.body)',
373
+ 'app.patch("/x", async (req) => req.body)',
374
+ 'app.delete("/x", async () => ({}))',
375
+ ].join('\n'));
376
+ const result = await runCheck('fastify-route-validation');
377
+ expect(result).toBeDefined();
378
+ });
379
+ it('skips files without fastify references', async () => {
380
+ fx('src/util/no-fastify.ts', 'export const x = 1');
381
+ const result = await runCheck('fastify-route-validation');
382
+ expect(result).toBeDefined();
383
+ });
384
+ });
385
+ // ---------------------------------------------------------------------------
386
+ // memo-list-items — exercise more JSX list patterns
387
+ // ---------------------------------------------------------------------------
388
+ // ---------------------------------------------------------------------------
389
+ // lazy-loading — extra branches
390
+ // ---------------------------------------------------------------------------
391
+ // ---------------------------------------------------------------------------
392
+ // platform-checks — minor coverage
393
+ // ---------------------------------------------------------------------------
394
+ // ---------------------------------------------------------------------------
395
+ // test-only-frontend-modules
396
+ // ---------------------------------------------------------------------------
397
+ describe('test-only-frontend-modules — branch coverage', () => {
398
+ it('runs over a frontend module imported only by tests', async () => {
399
+ fx('src/components/Helper.tsx', 'export const Helper = () => null');
400
+ fx('src/__tests__/Helper.test.tsx', ['import { Helper } from "../components/Helper.js"', 'export const x = Helper'].join('\n'));
401
+ const result = await runCheck('test-only-frontend-modules');
402
+ expect(result).toBeDefined();
403
+ });
404
+ it('does not flag modules imported by production code', async () => {
405
+ fx('src/components/Used.tsx', 'export const Used = () => null');
406
+ fx('src/main.tsx', ['import { Used } from "./components/Used.js"', 'export const r = Used'].join('\n'));
407
+ const result = await runCheck('test-only-frontend-modules');
408
+ expect(result).toBeDefined();
409
+ });
410
+ });
411
+ // ---------------------------------------------------------------------------
412
+ // fastify-route-validation — extra
413
+ // ---------------------------------------------------------------------------
414
+ describe('fastify-route-validation — exercise validation patterns', () => {
415
+ it('runs over routes with various validation styles', async () => {
416
+ fx('src/routes/styles.ts', [
417
+ 'import fastify from "fastify"',
418
+ 'import { z } from "zod"',
419
+ 'const app = fastify()',
420
+ // Body schema
421
+ 'app.post("/with-schema", { schema: { body: { type: "object" } } }, async (req) => req.body)',
422
+ // Zod parsing
423
+ 'const Body = z.object({ x: z.string() })',
424
+ 'app.post("/with-zod", async (req) => Body.parse(req.body))',
425
+ // No validation
426
+ 'app.post("/no-val", async (req) => req.body)',
427
+ ].join('\n'));
428
+ const result = await runCheck('fastify-route-validation');
429
+ expect(result).toBeDefined();
430
+ });
431
+ });
432
+ // ---------------------------------------------------------------------------
433
+ // async-waterfall-detection — extra branches
434
+ // ---------------------------------------------------------------------------
435
+ describe('async-waterfall-detection — extra coverage', () => {
436
+ it('flags 3+ sequential awaits with no interdependence', async () => {
437
+ fx('src/async/three.ts', [
438
+ 'declare function loadA(): Promise<number>',
439
+ 'declare function loadB(): Promise<number>',
440
+ 'declare function loadC(): Promise<number>',
441
+ 'declare function loadD(): Promise<number>',
442
+ 'export async function f() {',
443
+ ' const a = await loadA()',
444
+ ' const b = await loadB()',
445
+ ' const c = await loadC()',
446
+ ' const d = await loadD()',
447
+ ' return { a, b, c, d }',
448
+ '}',
449
+ ].join('\n'));
450
+ const result = await runCheck('async-waterfall-detection');
451
+ expect(result).toBeDefined();
452
+ });
453
+ it('skips functions with single await', async () => {
454
+ fx('src/async/single.ts', [
455
+ 'declare function loadA(): Promise<number>',
456
+ 'export async function f() { return await loadA() }',
457
+ ].join('\n'));
458
+ const result = await runCheck('async-waterfall-detection');
459
+ expect(result).toBeDefined();
460
+ });
461
+ it('skips Promise.all parallel calls', async () => {
462
+ fx('src/async/parallel.ts', [
463
+ 'declare function loadA(): Promise<number>',
464
+ 'declare function loadB(): Promise<number>',
465
+ 'export async function f() {',
466
+ ' const [a, b] = await Promise.all([loadA(), loadB()])',
467
+ ' return { a, b }',
468
+ '}',
469
+ ].join('\n'));
470
+ const result = await runCheck('async-waterfall-detection');
471
+ expect(result).toBeDefined();
472
+ });
473
+ });
474
+ // ---------------------------------------------------------------------------
475
+ // dispose-pattern-completeness — extra
476
+ // ---------------------------------------------------------------------------
477
+ describe('dispose-pattern-completeness — extra coverage', () => {
478
+ it('flags an IDisposable class with subscriptions but no unsubscribe call', async () => {
479
+ fx('src/lifecycle/sub.ts', [
480
+ 'export interface IDisposable { dispose(): void }',
481
+ 'interface Sub { unsubscribe(): void }',
482
+ 'export class Watcher implements IDisposable {',
483
+ ' private subA?: Sub',
484
+ ' private subB?: Sub',
485
+ ' dispose(): void {',
486
+ ' this.subA?.unsubscribe()',
487
+ // missing subB cleanup
488
+ ' }',
489
+ '}',
490
+ ].join('\n'));
491
+ const result = await runCheck('dispose-pattern-completeness');
492
+ expect(result).toBeDefined();
493
+ });
494
+ it('flags entirely empty dispose()', async () => {
495
+ fx('src/lifecycle/empty.ts', [
496
+ 'export interface IDisposable { dispose(): void }',
497
+ 'interface Sub { unsubscribe(): void }',
498
+ 'export class Empty implements IDisposable {',
499
+ ' private sub?: Sub',
500
+ ' dispose(): void {}',
501
+ '}',
502
+ ].join('\n'));
503
+ const result = await runCheck('dispose-pattern-completeness');
504
+ expect(result).toBeDefined();
505
+ });
506
+ });
507
+ // ---------------------------------------------------------------------------
508
+ // throws-documentation — extra
509
+ // ---------------------------------------------------------------------------
510
+ describe('throws-documentation — more branches', () => {
511
+ it('flags exported function with multiple throws but no @throws', async () => {
512
+ fx('src/throws/multi.ts', [
513
+ 'export function validate(input: string) {',
514
+ ' if (!input) throw new Error("empty")',
515
+ ' if (input.length > 1024) throw new RangeError("too long")',
516
+ ' if (input.includes(";")) throw new SyntaxError("bad char")',
517
+ ' return input',
518
+ '}',
519
+ ].join('\n'));
520
+ const result = await runCheck('throws-documentation');
521
+ expect(result).toBeDefined();
522
+ });
523
+ it('skips classes/methods with @throws JSDoc', async () => {
524
+ fx('src/throws/cls.ts', [
525
+ 'export class S {',
526
+ ' /** @throws {Error} when bad */',
527
+ ' validate(x: string) {',
528
+ ' if (!x) throw new Error("bad")',
529
+ ' }',
530
+ '}',
531
+ ].join('\n'));
532
+ const result = await runCheck('throws-documentation');
533
+ expect(result).toBeDefined();
534
+ });
535
+ });
536
+ // ---------------------------------------------------------------------------
537
+ // missing-input-validation — extra branches
538
+ // ---------------------------------------------------------------------------
539
+ describe('missing-input-validation — more branches', () => {
540
+ it('runs over fastify GET with query.* access', async () => {
541
+ fx('src/routes/q.ts', [
542
+ 'import fastify from "fastify"',
543
+ 'const app = fastify()',
544
+ 'app.get("/search", async (req) => {',
545
+ ' const q = req.query as { search: string }',
546
+ ' return { q: q.search }',
547
+ '})',
548
+ ].join('\n'));
549
+ const result = await runCheck('missing-input-validation');
550
+ expect(result).toBeDefined();
551
+ });
552
+ it('handles destructured req.body', async () => {
553
+ fx('src/routes/destr.ts', [
554
+ 'import fastify from "fastify"',
555
+ 'const app = fastify()',
556
+ 'app.post("/users", async (req) => {',
557
+ ' const { name } = req.body as { name: string }',
558
+ ' return { name }',
559
+ '})',
560
+ ].join('\n'));
561
+ const result = await runCheck('missing-input-validation');
562
+ expect(result).toBeDefined();
563
+ });
564
+ });
565
+ // ---------------------------------------------------------------------------
566
+ // database-index-coverage — extra
567
+ // ---------------------------------------------------------------------------
568
+ describe('database-index-coverage — more branches', () => {
569
+ it('flags various unindexed query patterns', async () => {
570
+ fx('src/repos/various.ts', [
571
+ 'declare const db: { query(sql: string): Promise<unknown> }',
572
+ 'declare const repo: { find(where?: unknown): Promise<unknown>; findOne(where?: unknown): Promise<unknown> }',
573
+ 'export const a = () => db.query("SELECT * FROM users")',
574
+ 'export const b = () => db.query("SELECT id FROM users WHERE name LIKE \'%x%\'")',
575
+ 'export const c = () => repo.find()',
576
+ 'export const d = () => repo.findOne()',
577
+ ].join('\n'));
578
+ const result = await runCheck('database-index-coverage');
579
+ expect(result).toBeDefined();
580
+ });
581
+ it('skips indexed queries (find with WHERE)', async () => {
582
+ fx('src/repos/indexed.ts', [
583
+ 'declare const db: { query(sql: string): Promise<unknown> }',
584
+ 'export const a = () => db.query("SELECT * FROM users WHERE id = $1")',
585
+ ].join('\n'));
586
+ const result = await runCheck('database-index-coverage');
587
+ expect(result).toBeDefined();
588
+ });
589
+ });
590
+ //# sourceMappingURL=behavior-fixtures-4.test.js.map