driftdetect-detectors 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 (509) hide show
  1. package/dist/accessibility/alt-text.d.ts +63 -0
  2. package/dist/accessibility/alt-text.d.ts.map +1 -0
  3. package/dist/accessibility/alt-text.js +100 -0
  4. package/dist/accessibility/alt-text.js.map +1 -0
  5. package/dist/accessibility/aria-roles.d.ts +65 -0
  6. package/dist/accessibility/aria-roles.d.ts.map +1 -0
  7. package/dist/accessibility/aria-roles.js +87 -0
  8. package/dist/accessibility/aria-roles.js.map +1 -0
  9. package/dist/accessibility/focus-management.d.ts +62 -0
  10. package/dist/accessibility/focus-management.d.ts.map +1 -0
  11. package/dist/accessibility/focus-management.js +88 -0
  12. package/dist/accessibility/focus-management.js.map +1 -0
  13. package/dist/accessibility/heading-hierarchy.d.ts +66 -0
  14. package/dist/accessibility/heading-hierarchy.d.ts.map +1 -0
  15. package/dist/accessibility/heading-hierarchy.js +94 -0
  16. package/dist/accessibility/heading-hierarchy.js.map +1 -0
  17. package/dist/accessibility/index.d.ts +25 -0
  18. package/dist/accessibility/index.d.ts.map +1 -0
  19. package/dist/accessibility/index.js +21 -0
  20. package/dist/accessibility/index.js.map +1 -0
  21. package/dist/accessibility/keyboard-nav.d.ts +63 -0
  22. package/dist/accessibility/keyboard-nav.d.ts.map +1 -0
  23. package/dist/accessibility/keyboard-nav.js +86 -0
  24. package/dist/accessibility/keyboard-nav.js.map +1 -0
  25. package/dist/accessibility/semantic-html.d.ts +76 -0
  26. package/dist/accessibility/semantic-html.d.ts.map +1 -0
  27. package/dist/accessibility/semantic-html.js +204 -0
  28. package/dist/accessibility/semantic-html.js.map +1 -0
  29. package/dist/api/client-patterns.d.ts +121 -0
  30. package/dist/api/client-patterns.d.ts.map +1 -0
  31. package/dist/api/client-patterns.js +478 -0
  32. package/dist/api/client-patterns.js.map +1 -0
  33. package/dist/api/error-format.d.ts +140 -0
  34. package/dist/api/error-format.d.ts.map +1 -0
  35. package/dist/api/error-format.js +614 -0
  36. package/dist/api/error-format.js.map +1 -0
  37. package/dist/api/http-methods.d.ts +255 -0
  38. package/dist/api/http-methods.d.ts.map +1 -0
  39. package/dist/api/http-methods.js +890 -0
  40. package/dist/api/http-methods.js.map +1 -0
  41. package/dist/api/index.d.ts +16 -0
  42. package/dist/api/index.d.ts.map +1 -0
  43. package/dist/api/index.js +37 -0
  44. package/dist/api/index.js.map +1 -0
  45. package/dist/api/pagination.d.ts +133 -0
  46. package/dist/api/pagination.d.ts.map +1 -0
  47. package/dist/api/pagination.js +521 -0
  48. package/dist/api/pagination.js.map +1 -0
  49. package/dist/api/response-envelope.d.ts +261 -0
  50. package/dist/api/response-envelope.d.ts.map +1 -0
  51. package/dist/api/response-envelope.js +1050 -0
  52. package/dist/api/response-envelope.js.map +1 -0
  53. package/dist/api/retry-patterns.d.ts +117 -0
  54. package/dist/api/retry-patterns.d.ts.map +1 -0
  55. package/dist/api/retry-patterns.js +480 -0
  56. package/dist/api/retry-patterns.js.map +1 -0
  57. package/dist/api/route-structure.d.ts +128 -0
  58. package/dist/api/route-structure.d.ts.map +1 -0
  59. package/dist/api/route-structure.js +738 -0
  60. package/dist/api/route-structure.js.map +1 -0
  61. package/dist/auth/audit-logging.d.ts +80 -0
  62. package/dist/auth/audit-logging.d.ts.map +1 -0
  63. package/dist/auth/audit-logging.js +370 -0
  64. package/dist/auth/audit-logging.js.map +1 -0
  65. package/dist/auth/index.d.ts +33 -0
  66. package/dist/auth/index.d.ts.map +1 -0
  67. package/dist/auth/index.js +49 -0
  68. package/dist/auth/index.js.map +1 -0
  69. package/dist/auth/middleware-usage.d.ts +65 -0
  70. package/dist/auth/middleware-usage.d.ts.map +1 -0
  71. package/dist/auth/middleware-usage.js +192 -0
  72. package/dist/auth/middleware-usage.js.map +1 -0
  73. package/dist/auth/permission-checks.d.ts +60 -0
  74. package/dist/auth/permission-checks.d.ts.map +1 -0
  75. package/dist/auth/permission-checks.js +159 -0
  76. package/dist/auth/permission-checks.js.map +1 -0
  77. package/dist/auth/rbac-patterns.d.ts +68 -0
  78. package/dist/auth/rbac-patterns.d.ts.map +1 -0
  79. package/dist/auth/rbac-patterns.js +143 -0
  80. package/dist/auth/rbac-patterns.js.map +1 -0
  81. package/dist/auth/resource-ownership.d.ts +77 -0
  82. package/dist/auth/resource-ownership.d.ts.map +1 -0
  83. package/dist/auth/resource-ownership.js +324 -0
  84. package/dist/auth/resource-ownership.js.map +1 -0
  85. package/dist/auth/token-handling.d.ts +64 -0
  86. package/dist/auth/token-handling.d.ts.map +1 -0
  87. package/dist/auth/token-handling.js +151 -0
  88. package/dist/auth/token-handling.js.map +1 -0
  89. package/dist/base/ast-detector.d.ts +421 -0
  90. package/dist/base/ast-detector.d.ts.map +1 -0
  91. package/dist/base/ast-detector.js +699 -0
  92. package/dist/base/ast-detector.js.map +1 -0
  93. package/dist/base/base-detector.d.ts +366 -0
  94. package/dist/base/base-detector.d.ts.map +1 -0
  95. package/dist/base/base-detector.js +170 -0
  96. package/dist/base/base-detector.js.map +1 -0
  97. package/dist/base/index.d.ts +12 -0
  98. package/dist/base/index.d.ts.map +1 -0
  99. package/dist/base/index.js +17 -0
  100. package/dist/base/index.js.map +1 -0
  101. package/dist/base/regex-detector.d.ts +421 -0
  102. package/dist/base/regex-detector.d.ts.map +1 -0
  103. package/dist/base/regex-detector.js +537 -0
  104. package/dist/base/regex-detector.js.map +1 -0
  105. package/dist/base/structural-detector.d.ts +424 -0
  106. package/dist/base/structural-detector.d.ts.map +1 -0
  107. package/dist/base/structural-detector.js +731 -0
  108. package/dist/base/structural-detector.js.map +1 -0
  109. package/dist/base/types.d.ts +53 -0
  110. package/dist/base/types.d.ts.map +1 -0
  111. package/dist/base/types.js +5 -0
  112. package/dist/base/types.js.map +1 -0
  113. package/dist/components/component-structure.d.ts +163 -0
  114. package/dist/components/component-structure.d.ts.map +1 -0
  115. package/dist/components/component-structure.js +500 -0
  116. package/dist/components/component-structure.js.map +1 -0
  117. package/dist/components/composition.d.ts +287 -0
  118. package/dist/components/composition.d.ts.map +1 -0
  119. package/dist/components/composition.js +1123 -0
  120. package/dist/components/composition.js.map +1 -0
  121. package/dist/components/duplicate-detection.d.ts +251 -0
  122. package/dist/components/duplicate-detection.d.ts.map +1 -0
  123. package/dist/components/duplicate-detection.js +804 -0
  124. package/dist/components/duplicate-detection.js.map +1 -0
  125. package/dist/components/index.d.ts +16 -0
  126. package/dist/components/index.d.ts.map +1 -0
  127. package/dist/components/index.js +51 -0
  128. package/dist/components/index.js.map +1 -0
  129. package/dist/components/near-duplicate.d.ts +402 -0
  130. package/dist/components/near-duplicate.d.ts.map +1 -0
  131. package/dist/components/near-duplicate.js +1090 -0
  132. package/dist/components/near-duplicate.js.map +1 -0
  133. package/dist/components/props-patterns.d.ts +194 -0
  134. package/dist/components/props-patterns.d.ts.map +1 -0
  135. package/dist/components/props-patterns.js +795 -0
  136. package/dist/components/props-patterns.js.map +1 -0
  137. package/dist/components/ref-forwarding.d.ts +250 -0
  138. package/dist/components/ref-forwarding.d.ts.map +1 -0
  139. package/dist/components/ref-forwarding.js +832 -0
  140. package/dist/components/ref-forwarding.js.map +1 -0
  141. package/dist/components/state-patterns.d.ts +291 -0
  142. package/dist/components/state-patterns.d.ts.map +1 -0
  143. package/dist/components/state-patterns.js +970 -0
  144. package/dist/components/state-patterns.js.map +1 -0
  145. package/dist/config/config-validation.d.ts +74 -0
  146. package/dist/config/config-validation.d.ts.map +1 -0
  147. package/dist/config/config-validation.js +446 -0
  148. package/dist/config/config-validation.js.map +1 -0
  149. package/dist/config/default-values.d.ts +72 -0
  150. package/dist/config/default-values.d.ts.map +1 -0
  151. package/dist/config/default-values.js +386 -0
  152. package/dist/config/default-values.js.map +1 -0
  153. package/dist/config/env-naming.d.ts +73 -0
  154. package/dist/config/env-naming.d.ts.map +1 -0
  155. package/dist/config/env-naming.js +429 -0
  156. package/dist/config/env-naming.js.map +1 -0
  157. package/dist/config/environment-detection.d.ts +72 -0
  158. package/dist/config/environment-detection.d.ts.map +1 -0
  159. package/dist/config/environment-detection.js +400 -0
  160. package/dist/config/environment-detection.js.map +1 -0
  161. package/dist/config/feature-flags.d.ts +72 -0
  162. package/dist/config/feature-flags.d.ts.map +1 -0
  163. package/dist/config/feature-flags.js +384 -0
  164. package/dist/config/feature-flags.js.map +1 -0
  165. package/dist/config/index.d.ts +27 -0
  166. package/dist/config/index.d.ts.map +1 -0
  167. package/dist/config/index.js +43 -0
  168. package/dist/config/index.js.map +1 -0
  169. package/dist/config/required-optional.d.ts +71 -0
  170. package/dist/config/required-optional.d.ts.map +1 -0
  171. package/dist/config/required-optional.js +344 -0
  172. package/dist/config/required-optional.js.map +1 -0
  173. package/dist/data-access/connection-pooling.d.ts +63 -0
  174. package/dist/data-access/connection-pooling.d.ts.map +1 -0
  175. package/dist/data-access/connection-pooling.js +297 -0
  176. package/dist/data-access/connection-pooling.js.map +1 -0
  177. package/dist/data-access/dto-patterns.d.ts +64 -0
  178. package/dist/data-access/dto-patterns.d.ts.map +1 -0
  179. package/dist/data-access/dto-patterns.js +291 -0
  180. package/dist/data-access/dto-patterns.js.map +1 -0
  181. package/dist/data-access/index.d.ts +31 -0
  182. package/dist/data-access/index.d.ts.map +1 -0
  183. package/dist/data-access/index.js +49 -0
  184. package/dist/data-access/index.js.map +1 -0
  185. package/dist/data-access/n-plus-one.d.ts +60 -0
  186. package/dist/data-access/n-plus-one.d.ts.map +1 -0
  187. package/dist/data-access/n-plus-one.js +264 -0
  188. package/dist/data-access/n-plus-one.js.map +1 -0
  189. package/dist/data-access/query-patterns.d.ts +64 -0
  190. package/dist/data-access/query-patterns.d.ts.map +1 -0
  191. package/dist/data-access/query-patterns.js +314 -0
  192. package/dist/data-access/query-patterns.js.map +1 -0
  193. package/dist/data-access/repository-pattern.d.ts +62 -0
  194. package/dist/data-access/repository-pattern.d.ts.map +1 -0
  195. package/dist/data-access/repository-pattern.js +257 -0
  196. package/dist/data-access/repository-pattern.js.map +1 -0
  197. package/dist/data-access/transaction-patterns.d.ts +61 -0
  198. package/dist/data-access/transaction-patterns.d.ts.map +1 -0
  199. package/dist/data-access/transaction-patterns.js +277 -0
  200. package/dist/data-access/transaction-patterns.js.map +1 -0
  201. package/dist/data-access/validation-patterns.d.ts +62 -0
  202. package/dist/data-access/validation-patterns.d.ts.map +1 -0
  203. package/dist/data-access/validation-patterns.js +301 -0
  204. package/dist/data-access/validation-patterns.js.map +1 -0
  205. package/dist/documentation/deprecation.d.ts +62 -0
  206. package/dist/documentation/deprecation.d.ts.map +1 -0
  207. package/dist/documentation/deprecation.js +83 -0
  208. package/dist/documentation/deprecation.js.map +1 -0
  209. package/dist/documentation/example-code.d.ts +64 -0
  210. package/dist/documentation/example-code.d.ts.map +1 -0
  211. package/dist/documentation/example-code.js +79 -0
  212. package/dist/documentation/example-code.js.map +1 -0
  213. package/dist/documentation/index.d.ts +22 -0
  214. package/dist/documentation/index.d.ts.map +1 -0
  215. package/dist/documentation/index.js +19 -0
  216. package/dist/documentation/index.js.map +1 -0
  217. package/dist/documentation/jsdoc-patterns.d.ts +72 -0
  218. package/dist/documentation/jsdoc-patterns.d.ts.map +1 -0
  219. package/dist/documentation/jsdoc-patterns.js +92 -0
  220. package/dist/documentation/jsdoc-patterns.js.map +1 -0
  221. package/dist/documentation/readme-structure.d.ts +67 -0
  222. package/dist/documentation/readme-structure.d.ts.map +1 -0
  223. package/dist/documentation/readme-structure.js +76 -0
  224. package/dist/documentation/readme-structure.js.map +1 -0
  225. package/dist/documentation/todo-patterns.d.ts +67 -0
  226. package/dist/documentation/todo-patterns.d.ts.map +1 -0
  227. package/dist/documentation/todo-patterns.js +73 -0
  228. package/dist/documentation/todo-patterns.js.map +1 -0
  229. package/dist/errors/async-errors.d.ts +72 -0
  230. package/dist/errors/async-errors.d.ts.map +1 -0
  231. package/dist/errors/async-errors.js +214 -0
  232. package/dist/errors/async-errors.js.map +1 -0
  233. package/dist/errors/circuit-breaker.d.ts +53 -0
  234. package/dist/errors/circuit-breaker.d.ts.map +1 -0
  235. package/dist/errors/circuit-breaker.js +241 -0
  236. package/dist/errors/circuit-breaker.js.map +1 -0
  237. package/dist/errors/error-codes.d.ts +73 -0
  238. package/dist/errors/error-codes.d.ts.map +1 -0
  239. package/dist/errors/error-codes.js +211 -0
  240. package/dist/errors/error-codes.js.map +1 -0
  241. package/dist/errors/error-logging.d.ts +73 -0
  242. package/dist/errors/error-logging.d.ts.map +1 -0
  243. package/dist/errors/error-logging.js +256 -0
  244. package/dist/errors/error-logging.js.map +1 -0
  245. package/dist/errors/error-propagation.d.ts +73 -0
  246. package/dist/errors/error-propagation.d.ts.map +1 -0
  247. package/dist/errors/error-propagation.js +244 -0
  248. package/dist/errors/error-propagation.js.map +1 -0
  249. package/dist/errors/exception-hierarchy.d.ts +75 -0
  250. package/dist/errors/exception-hierarchy.d.ts.map +1 -0
  251. package/dist/errors/exception-hierarchy.js +259 -0
  252. package/dist/errors/exception-hierarchy.js.map +1 -0
  253. package/dist/errors/index.d.ts +31 -0
  254. package/dist/errors/index.d.ts.map +1 -0
  255. package/dist/errors/index.js +49 -0
  256. package/dist/errors/index.js.map +1 -0
  257. package/dist/errors/try-catch-placement.d.ts +73 -0
  258. package/dist/errors/try-catch-placement.d.ts.map +1 -0
  259. package/dist/errors/try-catch-placement.js +214 -0
  260. package/dist/errors/try-catch-placement.js.map +1 -0
  261. package/dist/index.d.ts +221 -0
  262. package/dist/index.d.ts.map +1 -0
  263. package/dist/index.js +245 -0
  264. package/dist/index.js.map +1 -0
  265. package/dist/logging/context-fields.d.ts +48 -0
  266. package/dist/logging/context-fields.d.ts.map +1 -0
  267. package/dist/logging/context-fields.js +160 -0
  268. package/dist/logging/context-fields.js.map +1 -0
  269. package/dist/logging/correlation-ids.d.ts +44 -0
  270. package/dist/logging/correlation-ids.d.ts.map +1 -0
  271. package/dist/logging/correlation-ids.js +144 -0
  272. package/dist/logging/correlation-ids.js.map +1 -0
  273. package/dist/logging/health-checks.d.ts +45 -0
  274. package/dist/logging/health-checks.d.ts.map +1 -0
  275. package/dist/logging/health-checks.js +165 -0
  276. package/dist/logging/health-checks.js.map +1 -0
  277. package/dist/logging/index.d.ts +31 -0
  278. package/dist/logging/index.d.ts.map +1 -0
  279. package/dist/logging/index.js +49 -0
  280. package/dist/logging/index.js.map +1 -0
  281. package/dist/logging/log-levels.d.ts +46 -0
  282. package/dist/logging/log-levels.d.ts.map +1 -0
  283. package/dist/logging/log-levels.js +178 -0
  284. package/dist/logging/log-levels.js.map +1 -0
  285. package/dist/logging/metric-naming.d.ts +46 -0
  286. package/dist/logging/metric-naming.d.ts.map +1 -0
  287. package/dist/logging/metric-naming.js +157 -0
  288. package/dist/logging/metric-naming.js.map +1 -0
  289. package/dist/logging/pii-redaction.d.ts +44 -0
  290. package/dist/logging/pii-redaction.d.ts.map +1 -0
  291. package/dist/logging/pii-redaction.js +166 -0
  292. package/dist/logging/pii-redaction.js.map +1 -0
  293. package/dist/logging/structured-format.d.ts +53 -0
  294. package/dist/logging/structured-format.d.ts.map +1 -0
  295. package/dist/logging/structured-format.js +235 -0
  296. package/dist/logging/structured-format.js.map +1 -0
  297. package/dist/performance/bundle-size.d.ts +79 -0
  298. package/dist/performance/bundle-size.d.ts.map +1 -0
  299. package/dist/performance/bundle-size.js +276 -0
  300. package/dist/performance/bundle-size.js.map +1 -0
  301. package/dist/performance/caching-patterns.d.ts +78 -0
  302. package/dist/performance/caching-patterns.d.ts.map +1 -0
  303. package/dist/performance/caching-patterns.js +257 -0
  304. package/dist/performance/caching-patterns.js.map +1 -0
  305. package/dist/performance/code-splitting.d.ts +86 -0
  306. package/dist/performance/code-splitting.d.ts.map +1 -0
  307. package/dist/performance/code-splitting.js +447 -0
  308. package/dist/performance/code-splitting.js.map +1 -0
  309. package/dist/performance/debounce-throttle.d.ts +75 -0
  310. package/dist/performance/debounce-throttle.d.ts.map +1 -0
  311. package/dist/performance/debounce-throttle.js +232 -0
  312. package/dist/performance/debounce-throttle.js.map +1 -0
  313. package/dist/performance/index.d.ts +28 -0
  314. package/dist/performance/index.d.ts.map +1 -0
  315. package/dist/performance/index.js +39 -0
  316. package/dist/performance/index.js.map +1 -0
  317. package/dist/performance/lazy-loading.d.ts +75 -0
  318. package/dist/performance/lazy-loading.d.ts.map +1 -0
  319. package/dist/performance/lazy-loading.js +233 -0
  320. package/dist/performance/lazy-loading.js.map +1 -0
  321. package/dist/performance/memoization.d.ts +75 -0
  322. package/dist/performance/memoization.d.ts.map +1 -0
  323. package/dist/performance/memoization.js +251 -0
  324. package/dist/performance/memoization.js.map +1 -0
  325. package/dist/registry/detector-registry.d.ts +266 -0
  326. package/dist/registry/detector-registry.d.ts.map +1 -0
  327. package/dist/registry/detector-registry.js +526 -0
  328. package/dist/registry/detector-registry.js.map +1 -0
  329. package/dist/registry/index.d.ts +10 -0
  330. package/dist/registry/index.d.ts.map +1 -0
  331. package/dist/registry/index.js +10 -0
  332. package/dist/registry/index.js.map +1 -0
  333. package/dist/registry/loader.d.ts +232 -0
  334. package/dist/registry/loader.d.ts.map +1 -0
  335. package/dist/registry/loader.js +419 -0
  336. package/dist/registry/loader.js.map +1 -0
  337. package/dist/registry/types.d.ts +111 -0
  338. package/dist/registry/types.d.ts.map +1 -0
  339. package/dist/registry/types.js +19 -0
  340. package/dist/registry/types.js.map +1 -0
  341. package/dist/security/csp-headers.d.ts +78 -0
  342. package/dist/security/csp-headers.d.ts.map +1 -0
  343. package/dist/security/csp-headers.js +401 -0
  344. package/dist/security/csp-headers.js.map +1 -0
  345. package/dist/security/csrf-protection.d.ts +72 -0
  346. package/dist/security/csrf-protection.d.ts.map +1 -0
  347. package/dist/security/csrf-protection.js +344 -0
  348. package/dist/security/csrf-protection.js.map +1 -0
  349. package/dist/security/index.d.ts +30 -0
  350. package/dist/security/index.d.ts.map +1 -0
  351. package/dist/security/index.js +48 -0
  352. package/dist/security/index.js.map +1 -0
  353. package/dist/security/input-sanitization.d.ts +74 -0
  354. package/dist/security/input-sanitization.d.ts.map +1 -0
  355. package/dist/security/input-sanitization.js +373 -0
  356. package/dist/security/input-sanitization.js.map +1 -0
  357. package/dist/security/rate-limiting.d.ts +81 -0
  358. package/dist/security/rate-limiting.d.ts.map +1 -0
  359. package/dist/security/rate-limiting.js +535 -0
  360. package/dist/security/rate-limiting.js.map +1 -0
  361. package/dist/security/secret-management.d.ts +83 -0
  362. package/dist/security/secret-management.d.ts.map +1 -0
  363. package/dist/security/secret-management.js +547 -0
  364. package/dist/security/secret-management.js.map +1 -0
  365. package/dist/security/sql-injection.d.ts +76 -0
  366. package/dist/security/sql-injection.d.ts.map +1 -0
  367. package/dist/security/sql-injection.js +383 -0
  368. package/dist/security/sql-injection.js.map +1 -0
  369. package/dist/security/xss-prevention.d.ts +80 -0
  370. package/dist/security/xss-prevention.d.ts.map +1 -0
  371. package/dist/security/xss-prevention.js +416 -0
  372. package/dist/security/xss-prevention.js.map +1 -0
  373. package/dist/structural/barrel-exports.d.ts +178 -0
  374. package/dist/structural/barrel-exports.d.ts.map +1 -0
  375. package/dist/structural/barrel-exports.js +553 -0
  376. package/dist/structural/barrel-exports.js.map +1 -0
  377. package/dist/structural/circular-deps.d.ts +140 -0
  378. package/dist/structural/circular-deps.d.ts.map +1 -0
  379. package/dist/structural/circular-deps.js +422 -0
  380. package/dist/structural/circular-deps.js.map +1 -0
  381. package/dist/structural/co-location.d.ts +202 -0
  382. package/dist/structural/co-location.d.ts.map +1 -0
  383. package/dist/structural/co-location.js +640 -0
  384. package/dist/structural/co-location.js.map +1 -0
  385. package/dist/structural/directory-structure.d.ts +151 -0
  386. package/dist/structural/directory-structure.d.ts.map +1 -0
  387. package/dist/structural/directory-structure.js +457 -0
  388. package/dist/structural/directory-structure.js.map +1 -0
  389. package/dist/structural/file-naming.d.ts +61 -0
  390. package/dist/structural/file-naming.d.ts.map +1 -0
  391. package/dist/structural/file-naming.js +231 -0
  392. package/dist/structural/file-naming.js.map +1 -0
  393. package/dist/structural/import-ordering.d.ts +212 -0
  394. package/dist/structural/import-ordering.d.ts.map +1 -0
  395. package/dist/structural/import-ordering.js +821 -0
  396. package/dist/structural/import-ordering.js.map +1 -0
  397. package/dist/structural/index.d.ts +23 -0
  398. package/dist/structural/index.d.ts.map +1 -0
  399. package/dist/structural/index.js +26 -0
  400. package/dist/structural/index.js.map +1 -0
  401. package/dist/structural/module-boundaries.d.ts +164 -0
  402. package/dist/structural/module-boundaries.d.ts.map +1 -0
  403. package/dist/structural/module-boundaries.js +616 -0
  404. package/dist/structural/module-boundaries.js.map +1 -0
  405. package/dist/structural/package-boundaries.d.ts +182 -0
  406. package/dist/structural/package-boundaries.d.ts.map +1 -0
  407. package/dist/structural/package-boundaries.js +602 -0
  408. package/dist/structural/package-boundaries.js.map +1 -0
  409. package/dist/styling/class-naming.d.ts +263 -0
  410. package/dist/styling/class-naming.d.ts.map +1 -0
  411. package/dist/styling/class-naming.js +892 -0
  412. package/dist/styling/class-naming.js.map +1 -0
  413. package/dist/styling/color-usage.d.ts +213 -0
  414. package/dist/styling/color-usage.d.ts.map +1 -0
  415. package/dist/styling/color-usage.js +732 -0
  416. package/dist/styling/color-usage.js.map +1 -0
  417. package/dist/styling/design-tokens.d.ts +212 -0
  418. package/dist/styling/design-tokens.d.ts.map +1 -0
  419. package/dist/styling/design-tokens.js +748 -0
  420. package/dist/styling/design-tokens.js.map +1 -0
  421. package/dist/styling/index.d.ts +16 -0
  422. package/dist/styling/index.d.ts.map +1 -0
  423. package/dist/styling/index.js +56 -0
  424. package/dist/styling/index.js.map +1 -0
  425. package/dist/styling/responsive.d.ts +304 -0
  426. package/dist/styling/responsive.d.ts.map +1 -0
  427. package/dist/styling/responsive.js +888 -0
  428. package/dist/styling/responsive.js.map +1 -0
  429. package/dist/styling/spacing-scale.d.ts +248 -0
  430. package/dist/styling/spacing-scale.d.ts.map +1 -0
  431. package/dist/styling/spacing-scale.js +865 -0
  432. package/dist/styling/spacing-scale.js.map +1 -0
  433. package/dist/styling/tailwind-patterns.d.ts +305 -0
  434. package/dist/styling/tailwind-patterns.d.ts.map +1 -0
  435. package/dist/styling/tailwind-patterns.js +1181 -0
  436. package/dist/styling/tailwind-patterns.js.map +1 -0
  437. package/dist/styling/typography.d.ts +281 -0
  438. package/dist/styling/typography.d.ts.map +1 -0
  439. package/dist/styling/typography.js +1004 -0
  440. package/dist/styling/typography.js.map +1 -0
  441. package/dist/styling/z-index-scale.d.ts +270 -0
  442. package/dist/styling/z-index-scale.d.ts.map +1 -0
  443. package/dist/styling/z-index-scale.js +714 -0
  444. package/dist/styling/z-index-scale.js.map +1 -0
  445. package/dist/testing/co-location.d.ts +42 -0
  446. package/dist/testing/co-location.d.ts.map +1 -0
  447. package/dist/testing/co-location.js +134 -0
  448. package/dist/testing/co-location.js.map +1 -0
  449. package/dist/testing/describe-naming.d.ts +47 -0
  450. package/dist/testing/describe-naming.d.ts.map +1 -0
  451. package/dist/testing/describe-naming.js +150 -0
  452. package/dist/testing/describe-naming.js.map +1 -0
  453. package/dist/testing/file-naming.d.ts +44 -0
  454. package/dist/testing/file-naming.d.ts.map +1 -0
  455. package/dist/testing/file-naming.js +131 -0
  456. package/dist/testing/file-naming.js.map +1 -0
  457. package/dist/testing/fixture-patterns.d.ts +52 -0
  458. package/dist/testing/fixture-patterns.d.ts.map +1 -0
  459. package/dist/testing/fixture-patterns.js +228 -0
  460. package/dist/testing/fixture-patterns.js.map +1 -0
  461. package/dist/testing/index.d.ts +31 -0
  462. package/dist/testing/index.d.ts.map +1 -0
  463. package/dist/testing/index.js +49 -0
  464. package/dist/testing/index.js.map +1 -0
  465. package/dist/testing/mock-patterns.d.ts +53 -0
  466. package/dist/testing/mock-patterns.d.ts.map +1 -0
  467. package/dist/testing/mock-patterns.js +264 -0
  468. package/dist/testing/mock-patterns.js.map +1 -0
  469. package/dist/testing/setup-teardown.d.ts +55 -0
  470. package/dist/testing/setup-teardown.d.ts.map +1 -0
  471. package/dist/testing/setup-teardown.js +262 -0
  472. package/dist/testing/setup-teardown.js.map +1 -0
  473. package/dist/testing/test-structure.d.ts +51 -0
  474. package/dist/testing/test-structure.d.ts.map +1 -0
  475. package/dist/testing/test-structure.js +225 -0
  476. package/dist/testing/test-structure.js.map +1 -0
  477. package/dist/types/any-usage.d.ts +99 -0
  478. package/dist/types/any-usage.d.ts.map +1 -0
  479. package/dist/types/any-usage.js +641 -0
  480. package/dist/types/any-usage.js.map +1 -0
  481. package/dist/types/file-location.d.ts +76 -0
  482. package/dist/types/file-location.d.ts.map +1 -0
  483. package/dist/types/file-location.js +395 -0
  484. package/dist/types/file-location.js.map +1 -0
  485. package/dist/types/generic-patterns.d.ts +97 -0
  486. package/dist/types/generic-patterns.d.ts.map +1 -0
  487. package/dist/types/generic-patterns.js +615 -0
  488. package/dist/types/generic-patterns.js.map +1 -0
  489. package/dist/types/index.d.ts +31 -0
  490. package/dist/types/index.d.ts.map +1 -0
  491. package/dist/types/index.js +43 -0
  492. package/dist/types/index.js.map +1 -0
  493. package/dist/types/interface-vs-type.d.ts +81 -0
  494. package/dist/types/interface-vs-type.d.ts.map +1 -0
  495. package/dist/types/interface-vs-type.js +440 -0
  496. package/dist/types/interface-vs-type.js.map +1 -0
  497. package/dist/types/naming-conventions.d.ts +84 -0
  498. package/dist/types/naming-conventions.d.ts.map +1 -0
  499. package/dist/types/naming-conventions.js +455 -0
  500. package/dist/types/naming-conventions.js.map +1 -0
  501. package/dist/types/type-assertions.d.ts +98 -0
  502. package/dist/types/type-assertions.d.ts.map +1 -0
  503. package/dist/types/type-assertions.js +639 -0
  504. package/dist/types/type-assertions.js.map +1 -0
  505. package/dist/types/utility-types.d.ts +110 -0
  506. package/dist/types/utility-types.d.ts.map +1 -0
  507. package/dist/types/utility-types.js +547 -0
  508. package/dist/types/utility-types.js.map +1 -0
  509. package/package.json +44 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-html.js","sourceRoot":"","sources":["../../src/accessibility/semantic-html.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Client Patterns Detector - API client usage pattern detection
3
+ *
4
+ * Detects API client patterns including:
5
+ * - Fetch wrapper usage (custom fetch clients)
6
+ * - Axios instance patterns
7
+ * - React Query / TanStack Query patterns
8
+ * - SWR patterns
9
+ * - tRPC client patterns
10
+ * - GraphQL client patterns (Apollo, urql)
11
+ * - Custom API client abstractions
12
+ *
13
+ * Flags violations:
14
+ * - Inconsistent client usage across codebase
15
+ * - Direct fetch/axios calls instead of wrapper
16
+ * - Missing error handling in client calls
17
+ * - Inconsistent base URL configuration
18
+ * - Missing request/response interceptors
19
+ *
20
+ * @requirements 10.6 - THE API_Detector SHALL detect API client patterns (fetch wrapper usage)
21
+ */
22
+ import type { Language } from 'driftdetect-core';
23
+ import { RegexDetector, type DetectionContext, type DetectionResult } from '../base/index.js';
24
+ /** Types of API client patterns detected */
25
+ export type ClientPatternType = 'fetch-wrapper' | 'axios-instance' | 'react-query' | 'swr' | 'trpc' | 'apollo' | 'urql' | 'direct-fetch' | 'direct-axios';
26
+ /** Types of client pattern violations detected */
27
+ export type ClientViolationType = 'inconsistent-client' | 'direct-call' | 'missing-error-handling' | 'hardcoded-url' | 'missing-auth-header' | 'mixed-clients';
28
+ /** Information about a detected client pattern */
29
+ export interface ClientPatternInfo {
30
+ type: ClientPatternType;
31
+ file: string;
32
+ line: number;
33
+ column: number;
34
+ matchedText: string;
35
+ clientName?: string | undefined;
36
+ hasErrorHandling?: boolean | undefined;
37
+ hasAuthHeader?: boolean | undefined;
38
+ context?: string | undefined;
39
+ }
40
+ /** Information about a detected client violation */
41
+ export interface ClientViolationInfo {
42
+ type: ClientViolationType;
43
+ file: string;
44
+ line: number;
45
+ column: number;
46
+ endLine: number;
47
+ endColumn: number;
48
+ value: string;
49
+ issue: string;
50
+ suggestedFix?: string | undefined;
51
+ lineContent: string;
52
+ }
53
+ /** Analysis of client patterns in a file */
54
+ export interface ClientPatternAnalysis {
55
+ clientPatterns: ClientPatternInfo[];
56
+ violations: ClientViolationInfo[];
57
+ dominantClient: ClientPatternType | null;
58
+ usesConsistentClient: boolean;
59
+ hasWrapper: boolean;
60
+ patternAdherenceConfidence: number;
61
+ }
62
+ /** Fetch wrapper patterns */
63
+ export declare const FETCH_WRAPPER_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp];
64
+ /** Axios instance patterns */
65
+ export declare const AXIOS_INSTANCE_PATTERNS: readonly [RegExp, RegExp, RegExp];
66
+ /** React Query patterns */
67
+ export declare const REACT_QUERY_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp];
68
+ /** SWR patterns */
69
+ export declare const SWR_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp];
70
+ /** tRPC patterns */
71
+ export declare const TRPC_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp];
72
+ /** Apollo Client patterns */
73
+ export declare const APOLLO_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp];
74
+ /** urql patterns */
75
+ export declare const URQL_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp];
76
+ /** Direct fetch patterns */
77
+ export declare const DIRECT_FETCH_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp];
78
+ /** Direct axios patterns */
79
+ export declare const DIRECT_AXIOS_PATTERNS: readonly [RegExp, RegExp, RegExp];
80
+ /** File patterns to exclude */
81
+ export declare const EXCLUDED_FILE_PATTERNS: RegExp[];
82
+ /** Check if a file should be excluded from detection */
83
+ export declare function shouldExcludeFile(filePath: string): boolean;
84
+ /** Check if content has error handling around a position */
85
+ export declare function hasErrorHandling(content: string, index: number): boolean;
86
+ /** Check if content has auth header setup */
87
+ export declare function hasAuthHeader(content: string): boolean;
88
+ /** Detect fetch wrapper patterns */
89
+ export declare function detectFetchWrappers(content: string, file: string): ClientPatternInfo[];
90
+ /** Detect axios instance patterns */
91
+ export declare function detectAxiosInstances(content: string, file: string): ClientPatternInfo[];
92
+ /** Detect React Query patterns */
93
+ export declare function detectReactQuery(content: string, file: string): ClientPatternInfo[];
94
+ /** Detect SWR patterns */
95
+ export declare function detectSWR(content: string, file: string): ClientPatternInfo[];
96
+ /** Detect direct fetch calls */
97
+ export declare function detectDirectFetch(content: string, file: string): ClientPatternInfo[];
98
+ /** Detect direct axios calls */
99
+ export declare function detectDirectAxios(content: string, file: string): ClientPatternInfo[];
100
+ /** Detect direct call violations when wrapper exists */
101
+ export declare function detectDirectCallViolations(patterns: ClientPatternInfo[], file: string): ClientViolationInfo[];
102
+ /** Detect mixed client violations */
103
+ export declare function detectMixedClientViolations(patterns: ClientPatternInfo[], file: string): ClientViolationInfo[];
104
+ /** Detect missing error handling violations */
105
+ export declare function detectMissingErrorHandlingViolations(patterns: ClientPatternInfo[], file: string): ClientViolationInfo[];
106
+ /** Analyze client patterns in file content */
107
+ export declare function analyzeClientPatterns(content: string, file: string): ClientPatternAnalysis;
108
+ /** Client Patterns Detector - Detects API client usage patterns */
109
+ export declare class ClientPatternsDetector extends RegexDetector {
110
+ readonly id = "api/client-patterns";
111
+ readonly name = "Client Patterns Detector";
112
+ readonly description = "Detects API client patterns (fetch wrapper usage)";
113
+ readonly category = "api";
114
+ readonly subcategory = "client";
115
+ readonly supportedLanguages: Language[];
116
+ detect(context: DetectionContext): Promise<DetectionResult>;
117
+ generateQuickFix(): null;
118
+ }
119
+ /** Create a new ClientPatternsDetector instance */
120
+ export declare function createClientPatternsDetector(): ClientPatternsDetector;
121
+ //# sourceMappingURL=client-patterns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-patterns.d.ts","sourceRoot":"","sources":["../../src/api/client-patterns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,478 @@
1
+ /**
2
+ * Client Patterns Detector - API client usage pattern detection
3
+ *
4
+ * Detects API client patterns including:
5
+ * - Fetch wrapper usage (custom fetch clients)
6
+ * - Axios instance patterns
7
+ * - React Query / TanStack Query patterns
8
+ * - SWR patterns
9
+ * - tRPC client patterns
10
+ * - GraphQL client patterns (Apollo, urql)
11
+ * - Custom API client abstractions
12
+ *
13
+ * Flags violations:
14
+ * - Inconsistent client usage across codebase
15
+ * - Direct fetch/axios calls instead of wrapper
16
+ * - Missing error handling in client calls
17
+ * - Inconsistent base URL configuration
18
+ * - Missing request/response interceptors
19
+ *
20
+ * @requirements 10.6 - THE API_Detector SHALL detect API client patterns (fetch wrapper usage)
21
+ */
22
+ import { RegexDetector } from '../base/index.js';
23
+ // ============================================================================
24
+ // Constants
25
+ // ============================================================================
26
+ /** Fetch wrapper patterns */
27
+ export const FETCH_WRAPPER_PATTERNS = [
28
+ // TypeScript/JavaScript patterns
29
+ /(?:export\s+)?(?:const|function)\s+(\w*(?:fetch|api|client|http)\w*)\s*[=:]/gi,
30
+ /class\s+(\w*(?:Api|Client|Http|Fetch)\w*)\s*(?:extends|implements|\{)/gi,
31
+ /createClient\s*\(/gi,
32
+ /createApiClient\s*\(/gi,
33
+ // Python patterns - httpx, requests, aiohttp
34
+ /(?:def|async\s+def)\s+(\w*(?:fetch|api|client|http)\w*)\s*\(/gi,
35
+ /class\s+(\w*(?:Api|Client|Http)\w*)\s*(?:\(|:)/gi,
36
+ /httpx\.(?:Client|AsyncClient)\s*\(/gi,
37
+ /requests\.Session\s*\(/gi,
38
+ /aiohttp\.ClientSession\s*\(/gi,
39
+ ];
40
+ /** Axios instance patterns */
41
+ export const AXIOS_INSTANCE_PATTERNS = [
42
+ /axios\.create\s*\(/gi,
43
+ /(?:const|let|var)\s+(\w+)\s*=\s*axios\.create/gi,
44
+ /new\s+Axios\s*\(/gi,
45
+ ];
46
+ /** React Query patterns */
47
+ export const REACT_QUERY_PATTERNS = [
48
+ /useQuery\s*[<(]/gi,
49
+ /useMutation\s*[<(]/gi,
50
+ /useInfiniteQuery\s*[<(]/gi,
51
+ /QueryClient\s*\(/gi,
52
+ /QueryClientProvider/gi,
53
+ ];
54
+ /** SWR patterns */
55
+ export const SWR_PATTERNS = [
56
+ /useSWR\s*[<(]/gi,
57
+ /useSWRMutation\s*[<(]/gi,
58
+ /useSWRInfinite\s*[<(]/gi,
59
+ /SWRConfig/gi,
60
+ ];
61
+ /** tRPC patterns */
62
+ export const TRPC_PATTERNS = [
63
+ /trpc\.\w+\.(query|mutation|useQuery|useMutation)/gi,
64
+ /createTRPCClient/gi,
65
+ /createTRPCReact/gi,
66
+ /createTRPCNext/gi,
67
+ ];
68
+ /** Apollo Client patterns */
69
+ export const APOLLO_PATTERNS = [
70
+ /useQuery\s*\(\s*gql/gi,
71
+ /useMutation\s*\(\s*gql/gi,
72
+ /ApolloClient\s*\(/gi,
73
+ /ApolloProvider/gi,
74
+ /new\s+InMemoryCache/gi,
75
+ ];
76
+ /** urql patterns */
77
+ export const URQL_PATTERNS = [
78
+ /useQuery\s*\(\s*\{[^}]*query:/gi,
79
+ /useMutation\s*\(\s*\{[^}]*query:/gi,
80
+ /createClient\s*\(\s*\{[^}]*url:/gi,
81
+ /Provider\s+value=\{client\}/gi,
82
+ ];
83
+ /** Direct fetch patterns */
84
+ export const DIRECT_FETCH_PATTERNS = [
85
+ /(?<!\.)\bfetch\s*\(\s*['"`]/gi,
86
+ /(?<!\.)\bfetch\s*\(\s*`/gi,
87
+ /window\.fetch\s*\(/gi,
88
+ /globalThis\.fetch\s*\(/gi,
89
+ ];
90
+ /** Direct axios patterns */
91
+ export const DIRECT_AXIOS_PATTERNS = [
92
+ /axios\.(get|post|put|patch|delete|request)\s*\(/gi,
93
+ /axios\s*\(\s*\{/gi,
94
+ /axios\s*\(\s*['"`]/gi,
95
+ ];
96
+ /** File patterns to exclude */
97
+ export const EXCLUDED_FILE_PATTERNS = [
98
+ /\.test\.[jt]sx?$/,
99
+ /\.spec\.[jt]sx?$/,
100
+ /\.stories\.[jt]sx?$/,
101
+ /\.d\.ts$/,
102
+ /node_modules\//,
103
+ /\.mock\.[jt]sx?$/,
104
+ ];
105
+ // ============================================================================
106
+ // Helper Functions
107
+ // ============================================================================
108
+ /** Check if a file should be excluded from detection */
109
+ export function shouldExcludeFile(filePath) {
110
+ return EXCLUDED_FILE_PATTERNS.some(pattern => pattern.test(filePath));
111
+ }
112
+ /** Check if position is inside a comment */
113
+ function isInsideComment(content, index) {
114
+ const beforeIndex = content.slice(0, index);
115
+ const lastNewline = beforeIndex.lastIndexOf('\n');
116
+ const currentLine = beforeIndex.slice(lastNewline + 1);
117
+ if (currentLine.includes('//')) {
118
+ const commentStart = currentLine.indexOf('//');
119
+ const positionInLine = index - lastNewline - 1;
120
+ if (positionInLine > commentStart)
121
+ return true;
122
+ }
123
+ const lastBlockCommentStart = beforeIndex.lastIndexOf('/*');
124
+ const lastBlockCommentEnd = beforeIndex.lastIndexOf('*/');
125
+ if (lastBlockCommentStart > lastBlockCommentEnd)
126
+ return true;
127
+ return false;
128
+ }
129
+ /** Get line and column from index */
130
+ function getPositionFromIndex(content, index) {
131
+ const beforeMatch = content.slice(0, index);
132
+ const lineNumber = beforeMatch.split('\n').length;
133
+ const lastNewline = beforeMatch.lastIndexOf('\n');
134
+ const column = index - lastNewline;
135
+ return { line: lineNumber, column };
136
+ }
137
+ /** Check if content has error handling around a position */
138
+ export function hasErrorHandling(content, index) {
139
+ const beforeIndex = content.slice(Math.max(0, index - 200), index);
140
+ const afterIndex = content.slice(index, Math.min(content.length, index + 200));
141
+ // Check for try/catch
142
+ if (beforeIndex.includes('try') && afterIndex.includes('catch'))
143
+ return true;
144
+ // Check for .catch()
145
+ if (afterIndex.includes('.catch('))
146
+ return true;
147
+ // Check for error handling in async/await
148
+ if (beforeIndex.includes('try {') || afterIndex.includes('} catch'))
149
+ return true;
150
+ return false;
151
+ }
152
+ /** Check if content has auth header setup */
153
+ export function hasAuthHeader(content) {
154
+ const authPatterns = [
155
+ /headers\s*:\s*\{[^}]*(?:Authorization|Bearer|auth)/gi,
156
+ /setHeader\s*\(\s*['"`]Authorization/gi,
157
+ /interceptors\.request/gi,
158
+ /withCredentials\s*:\s*true/gi,
159
+ ];
160
+ return authPatterns.some(pattern => pattern.test(content));
161
+ }
162
+ // ============================================================================
163
+ // Detection Functions
164
+ // ============================================================================
165
+ /** Detect fetch wrapper patterns */
166
+ export function detectFetchWrappers(content, file) {
167
+ const results = [];
168
+ const lines = content.split('\n');
169
+ for (const pattern of FETCH_WRAPPER_PATTERNS) {
170
+ const regex = new RegExp(pattern.source, pattern.flags);
171
+ let match;
172
+ while ((match = regex.exec(content)) !== null) {
173
+ if (isInsideComment(content, match.index))
174
+ continue;
175
+ const { line, column } = getPositionFromIndex(content, match.index);
176
+ results.push({
177
+ type: 'fetch-wrapper',
178
+ file,
179
+ line,
180
+ column,
181
+ matchedText: match[0],
182
+ clientName: match[1] || undefined,
183
+ hasAuthHeader: hasAuthHeader(content),
184
+ context: lines[line - 1] || '',
185
+ });
186
+ }
187
+ }
188
+ return results;
189
+ }
190
+ /** Detect axios instance patterns */
191
+ export function detectAxiosInstances(content, file) {
192
+ const results = [];
193
+ const lines = content.split('\n');
194
+ for (const pattern of AXIOS_INSTANCE_PATTERNS) {
195
+ const regex = new RegExp(pattern.source, pattern.flags);
196
+ let match;
197
+ while ((match = regex.exec(content)) !== null) {
198
+ if (isInsideComment(content, match.index))
199
+ continue;
200
+ const { line, column } = getPositionFromIndex(content, match.index);
201
+ results.push({
202
+ type: 'axios-instance',
203
+ file,
204
+ line,
205
+ column,
206
+ matchedText: match[0],
207
+ clientName: match[1] || undefined,
208
+ hasAuthHeader: hasAuthHeader(content),
209
+ context: lines[line - 1] || '',
210
+ });
211
+ }
212
+ }
213
+ return results;
214
+ }
215
+ /** Detect React Query patterns */
216
+ export function detectReactQuery(content, file) {
217
+ const results = [];
218
+ const lines = content.split('\n');
219
+ for (const pattern of REACT_QUERY_PATTERNS) {
220
+ const regex = new RegExp(pattern.source, pattern.flags);
221
+ let match;
222
+ while ((match = regex.exec(content)) !== null) {
223
+ if (isInsideComment(content, match.index))
224
+ continue;
225
+ const { line, column } = getPositionFromIndex(content, match.index);
226
+ results.push({
227
+ type: 'react-query',
228
+ file,
229
+ line,
230
+ column,
231
+ matchedText: match[0],
232
+ hasErrorHandling: hasErrorHandling(content, match.index),
233
+ context: lines[line - 1] || '',
234
+ });
235
+ }
236
+ }
237
+ return results;
238
+ }
239
+ /** Detect SWR patterns */
240
+ export function detectSWR(content, file) {
241
+ const results = [];
242
+ const lines = content.split('\n');
243
+ for (const pattern of SWR_PATTERNS) {
244
+ const regex = new RegExp(pattern.source, pattern.flags);
245
+ let match;
246
+ while ((match = regex.exec(content)) !== null) {
247
+ if (isInsideComment(content, match.index))
248
+ continue;
249
+ const { line, column } = getPositionFromIndex(content, match.index);
250
+ results.push({
251
+ type: 'swr',
252
+ file,
253
+ line,
254
+ column,
255
+ matchedText: match[0],
256
+ hasErrorHandling: hasErrorHandling(content, match.index),
257
+ context: lines[line - 1] || '',
258
+ });
259
+ }
260
+ }
261
+ return results;
262
+ }
263
+ /** Detect direct fetch calls */
264
+ export function detectDirectFetch(content, file) {
265
+ const results = [];
266
+ const lines = content.split('\n');
267
+ for (const pattern of DIRECT_FETCH_PATTERNS) {
268
+ const regex = new RegExp(pattern.source, pattern.flags);
269
+ let match;
270
+ while ((match = regex.exec(content)) !== null) {
271
+ if (isInsideComment(content, match.index))
272
+ continue;
273
+ const { line, column } = getPositionFromIndex(content, match.index);
274
+ results.push({
275
+ type: 'direct-fetch',
276
+ file,
277
+ line,
278
+ column,
279
+ matchedText: match[0],
280
+ hasErrorHandling: hasErrorHandling(content, match.index),
281
+ context: lines[line - 1] || '',
282
+ });
283
+ }
284
+ }
285
+ return results;
286
+ }
287
+ /** Detect direct axios calls */
288
+ export function detectDirectAxios(content, file) {
289
+ const results = [];
290
+ const lines = content.split('\n');
291
+ for (const pattern of DIRECT_AXIOS_PATTERNS) {
292
+ const regex = new RegExp(pattern.source, pattern.flags);
293
+ let match;
294
+ while ((match = regex.exec(content)) !== null) {
295
+ if (isInsideComment(content, match.index))
296
+ continue;
297
+ const { line, column } = getPositionFromIndex(content, match.index);
298
+ results.push({
299
+ type: 'direct-axios',
300
+ file,
301
+ line,
302
+ column,
303
+ matchedText: match[0],
304
+ hasErrorHandling: hasErrorHandling(content, match.index),
305
+ context: lines[line - 1] || '',
306
+ });
307
+ }
308
+ }
309
+ return results;
310
+ }
311
+ // ============================================================================
312
+ // Violation Detection Functions
313
+ // ============================================================================
314
+ /** Detect direct call violations when wrapper exists */
315
+ export function detectDirectCallViolations(patterns, file) {
316
+ const violations = [];
317
+ const hasWrapper = patterns.some(p => p.type === 'fetch-wrapper' || p.type === 'axios-instance');
318
+ if (hasWrapper) {
319
+ const directCalls = patterns.filter(p => p.type === 'direct-fetch' || p.type === 'direct-axios');
320
+ for (const call of directCalls) {
321
+ violations.push({
322
+ type: 'direct-call',
323
+ file,
324
+ line: call.line,
325
+ column: call.column,
326
+ endLine: call.line,
327
+ endColumn: call.column + call.matchedText.length,
328
+ value: call.matchedText,
329
+ issue: 'Direct fetch/axios call instead of using wrapper',
330
+ suggestedFix: 'Use the API client wrapper for consistent error handling and configuration',
331
+ lineContent: call.context || '',
332
+ });
333
+ }
334
+ }
335
+ return violations;
336
+ }
337
+ /** Detect mixed client violations */
338
+ export function detectMixedClientViolations(patterns, file) {
339
+ const violations = [];
340
+ const clientTypes = new Set(patterns.map(p => p.type));
341
+ const dataFetchingLibs = ['react-query', 'swr', 'apollo', 'urql', 'trpc'];
342
+ const usedLibs = dataFetchingLibs.filter(lib => clientTypes.has(lib));
343
+ if (usedLibs.length > 1) {
344
+ for (const pattern of patterns) {
345
+ if (dataFetchingLibs.includes(pattern.type)) {
346
+ violations.push({
347
+ type: 'mixed-clients',
348
+ file,
349
+ line: pattern.line,
350
+ column: pattern.column,
351
+ endLine: pattern.line,
352
+ endColumn: pattern.column + pattern.matchedText.length,
353
+ value: pattern.type,
354
+ issue: `Multiple data fetching libraries detected: ${usedLibs.join(', ')}`,
355
+ suggestedFix: 'Standardize on a single data fetching library',
356
+ lineContent: pattern.context || '',
357
+ });
358
+ }
359
+ }
360
+ }
361
+ return violations;
362
+ }
363
+ /** Detect missing error handling violations */
364
+ export function detectMissingErrorHandlingViolations(patterns, file) {
365
+ const violations = [];
366
+ const directCalls = patterns.filter(p => (p.type === 'direct-fetch' || p.type === 'direct-axios') && !p.hasErrorHandling);
367
+ for (const call of directCalls) {
368
+ violations.push({
369
+ type: 'missing-error-handling',
370
+ file,
371
+ line: call.line,
372
+ column: call.column,
373
+ endLine: call.line,
374
+ endColumn: call.column + call.matchedText.length,
375
+ value: call.matchedText,
376
+ issue: 'API call without error handling',
377
+ suggestedFix: 'Add try/catch or .catch() for error handling',
378
+ lineContent: call.context || '',
379
+ });
380
+ }
381
+ return violations;
382
+ }
383
+ // ============================================================================
384
+ // Main Analysis Function
385
+ // ============================================================================
386
+ /** Analyze client patterns in file content */
387
+ export function analyzeClientPatterns(content, file) {
388
+ if (shouldExcludeFile(file)) {
389
+ return {
390
+ clientPatterns: [],
391
+ violations: [],
392
+ dominantClient: null,
393
+ usesConsistentClient: true,
394
+ hasWrapper: false,
395
+ patternAdherenceConfidence: 1.0,
396
+ };
397
+ }
398
+ // Detect all patterns
399
+ const fetchWrappers = detectFetchWrappers(content, file);
400
+ const axiosInstances = detectAxiosInstances(content, file);
401
+ const reactQuery = detectReactQuery(content, file);
402
+ const swr = detectSWR(content, file);
403
+ const directFetch = detectDirectFetch(content, file);
404
+ const directAxios = detectDirectAxios(content, file);
405
+ const allPatterns = [
406
+ ...fetchWrappers, ...axiosInstances, ...reactQuery,
407
+ ...swr, ...directFetch, ...directAxios,
408
+ ];
409
+ // Detect violations
410
+ const directCallViolations = detectDirectCallViolations(allPatterns, file);
411
+ const mixedClientViolations = detectMixedClientViolations(allPatterns, file);
412
+ const errorHandlingViolations = detectMissingErrorHandlingViolations(allPatterns, file);
413
+ const allViolations = [
414
+ ...directCallViolations,
415
+ ...mixedClientViolations,
416
+ ...errorHandlingViolations,
417
+ ];
418
+ // Determine dominant client
419
+ const typeCounts = {};
420
+ for (const pattern of allPatterns) {
421
+ typeCounts[pattern.type] = (typeCounts[pattern.type] || 0) + 1;
422
+ }
423
+ let dominantClient = null;
424
+ let maxCount = 0;
425
+ for (const [type, count] of Object.entries(typeCounts)) {
426
+ if (count > maxCount) {
427
+ maxCount = count;
428
+ dominantClient = type;
429
+ }
430
+ }
431
+ // Check for wrapper
432
+ const hasWrapper = fetchWrappers.length > 0 || axiosInstances.length > 0;
433
+ // Calculate confidence
434
+ const totalPatterns = allPatterns.length;
435
+ const violationCount = allViolations.length;
436
+ const confidence = totalPatterns > 0
437
+ ? Math.max(0, 1 - (violationCount / totalPatterns) * 0.2)
438
+ : 1.0;
439
+ // Check consistency
440
+ const uniqueTypes = new Set(allPatterns.map(p => p.type));
441
+ const usesConsistentClient = uniqueTypes.size <= 2; // Allow wrapper + one library
442
+ return {
443
+ clientPatterns: allPatterns,
444
+ violations: allViolations,
445
+ dominantClient,
446
+ usesConsistentClient,
447
+ hasWrapper,
448
+ patternAdherenceConfidence: confidence,
449
+ };
450
+ }
451
+ // ============================================================================
452
+ // Detector Class
453
+ // ============================================================================
454
+ /** Client Patterns Detector - Detects API client usage patterns */
455
+ export class ClientPatternsDetector extends RegexDetector {
456
+ id = 'api/client-patterns';
457
+ name = 'Client Patterns Detector';
458
+ description = 'Detects API client patterns (fetch wrapper usage)';
459
+ category = 'api';
460
+ subcategory = 'client';
461
+ supportedLanguages = ['typescript', 'javascript', 'python'];
462
+ async detect(context) {
463
+ const { content, file } = context;
464
+ if (shouldExcludeFile(file)) {
465
+ return this.createEmptyResult();
466
+ }
467
+ const analysis = analyzeClientPatterns(content, file);
468
+ return this.createResult([], [], analysis.patternAdherenceConfidence);
469
+ }
470
+ generateQuickFix() {
471
+ return null;
472
+ }
473
+ }
474
+ /** Create a new ClientPatternsDetector instance */
475
+ export function createClientPatternsDetector() {
476
+ return new ClientPatternsDetector();
477
+ }
478
+ //# sourceMappingURL=client-patterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-patterns.js","sourceRoot":"","sources":["../../src/api/client-patterns.ts"],"names":[],"mappings":"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"}