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,73 @@
1
+ /**
2
+ * Error Codes Detector - Error code pattern detection
3
+ *
4
+ * Detects error code patterns including:
5
+ * - ErrorCode enum definitions
6
+ * - Error code constants
7
+ * - Error code usage in error objects
8
+ * - Error code naming conventions
9
+ *
10
+ * Flags violations:
11
+ * - Missing error codes in error objects
12
+ * - Inconsistent error code naming
13
+ * - Magic string error codes
14
+ *
15
+ * @requirements 12.2 - Error code patterns
16
+ */
17
+ import type { Language } from 'driftdetect-core';
18
+ import { RegexDetector, type DetectionContext, type DetectionResult } from '../base/index.js';
19
+ export type ErrorCodePatternType = 'error-code-enum' | 'error-code-const' | 'error-code-usage' | 'error-code-type';
20
+ export type ErrorCodeViolationType = 'missing-error-code' | 'magic-string-code' | 'inconsistent-naming';
21
+ export interface ErrorCodePatternInfo {
22
+ type: ErrorCodePatternType;
23
+ file: string;
24
+ line: number;
25
+ column: number;
26
+ matchedText: string;
27
+ codeName?: string | undefined;
28
+ codeValue?: string | undefined;
29
+ context?: string | undefined;
30
+ }
31
+ export interface ErrorCodeViolationInfo {
32
+ type: ErrorCodeViolationType;
33
+ file: string;
34
+ line: number;
35
+ column: number;
36
+ endLine: number;
37
+ endColumn: number;
38
+ value: string;
39
+ issue: string;
40
+ suggestedFix?: string;
41
+ lineContent: string;
42
+ }
43
+ export interface ErrorCodeAnalysis {
44
+ patterns: ErrorCodePatternInfo[];
45
+ violations: ErrorCodeViolationInfo[];
46
+ hasErrorCodeEnum: boolean;
47
+ errorCodes: string[];
48
+ confidence: number;
49
+ }
50
+ export declare const ERROR_CODE_ENUM_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp];
51
+ export declare const ERROR_CODE_CONST_PATTERNS: readonly [RegExp, RegExp, RegExp];
52
+ export declare const ERROR_CODE_USAGE_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp];
53
+ export declare const ERROR_CODE_TYPE_PATTERNS: readonly [RegExp, RegExp];
54
+ export declare const MAGIC_STRING_CODE_PATTERNS: readonly [RegExp, RegExp];
55
+ export declare const EXCLUDED_FILE_PATTERNS: RegExp[];
56
+ export declare function shouldExcludeFile(filePath: string): boolean;
57
+ export declare function detectErrorCodeEnums(content: string, file: string): ErrorCodePatternInfo[];
58
+ export declare function detectErrorCodeConstants(content: string, file: string): ErrorCodePatternInfo[];
59
+ export declare function detectErrorCodeUsage(content: string, file: string): ErrorCodePatternInfo[];
60
+ export declare function detectMagicStringViolations(patterns: ErrorCodePatternInfo[], content: string, file: string): ErrorCodeViolationInfo[];
61
+ export declare function analyzeErrorCodes(content: string, file: string): ErrorCodeAnalysis;
62
+ export declare class ErrorCodesDetector extends RegexDetector {
63
+ readonly id = "errors/error-codes";
64
+ readonly name = "Error Codes Detector";
65
+ readonly description = "Detects error code patterns and usage";
66
+ readonly category = "errors";
67
+ readonly subcategory = "codes";
68
+ readonly supportedLanguages: Language[];
69
+ detect(context: DetectionContext): Promise<DetectionResult>;
70
+ generateQuickFix(): null;
71
+ }
72
+ export declare function createErrorCodesDetector(): ErrorCodesDetector;
73
+ //# sourceMappingURL=error-codes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-codes.d.ts","sourceRoot":"","sources":["../../src/errors/error-codes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,211 @@
1
+ /**
2
+ * Error Codes Detector - Error code pattern detection
3
+ *
4
+ * Detects error code patterns including:
5
+ * - ErrorCode enum definitions
6
+ * - Error code constants
7
+ * - Error code usage in error objects
8
+ * - Error code naming conventions
9
+ *
10
+ * Flags violations:
11
+ * - Missing error codes in error objects
12
+ * - Inconsistent error code naming
13
+ * - Magic string error codes
14
+ *
15
+ * @requirements 12.2 - Error code patterns
16
+ */
17
+ import { RegexDetector } from '../base/index.js';
18
+ // ============================================================================
19
+ // Constants
20
+ // ============================================================================
21
+ export const ERROR_CODE_ENUM_PATTERNS = [
22
+ /enum\s+ErrorCode\s*\{/gi,
23
+ /enum\s+ErrorCodes\s*\{/gi,
24
+ /const\s+ErrorCode\s*=\s*\{/gi,
25
+ /const\s+ErrorCodes\s*=\s*\{/gi,
26
+ ];
27
+ export const ERROR_CODE_CONST_PATTERNS = [
28
+ /(?:const|let|var)\s+([A-Z_]+_ERROR)\s*=/gi,
29
+ /(?:const|let|var)\s+(ERR_[A-Z_]+)\s*=/gi,
30
+ /(?:const|let|var)\s+([A-Z_]+_CODE)\s*=/gi,
31
+ ];
32
+ export const ERROR_CODE_USAGE_PATTERNS = [
33
+ /code\s*:\s*ErrorCode\.\w+/gi,
34
+ /code\s*:\s*ErrorCodes\.\w+/gi,
35
+ /errorCode\s*:\s*\w+/gi,
36
+ /\.code\s*=\s*ErrorCode\.\w+/gi,
37
+ ];
38
+ export const ERROR_CODE_TYPE_PATTERNS = [
39
+ /type\s+ErrorCode\s*=/gi,
40
+ /interface\s+\w*Error\w*\s*\{[^}]*code\s*:/gi,
41
+ ];
42
+ export const MAGIC_STRING_CODE_PATTERNS = [
43
+ /code\s*:\s*['"`][A-Z_]+['"`]/gi,
44
+ /errorCode\s*:\s*['"`][A-Z_]+['"`]/gi,
45
+ ];
46
+ export const EXCLUDED_FILE_PATTERNS = [
47
+ /\.test\.[jt]sx?$/,
48
+ /\.spec\.[jt]sx?$/,
49
+ /node_modules\//,
50
+ /\.d\.ts$/,
51
+ ];
52
+ // ============================================================================
53
+ // Helper Functions
54
+ // ============================================================================
55
+ export function shouldExcludeFile(filePath) {
56
+ return EXCLUDED_FILE_PATTERNS.some(p => p.test(filePath));
57
+ }
58
+ function isInsideComment(content, index) {
59
+ const before = content.slice(0, index);
60
+ const lastNewline = before.lastIndexOf('\n');
61
+ const line = before.slice(lastNewline + 1);
62
+ if (line.includes('//') && index - lastNewline - 1 > line.indexOf('//'))
63
+ return true;
64
+ return before.lastIndexOf('/*') > before.lastIndexOf('*/');
65
+ }
66
+ function getPosition(content, index) {
67
+ const before = content.slice(0, index);
68
+ return { line: before.split('\n').length, column: index - before.lastIndexOf('\n') };
69
+ }
70
+ // ============================================================================
71
+ // Detection Functions
72
+ // ============================================================================
73
+ export function detectErrorCodeEnums(content, file) {
74
+ const results = [];
75
+ const lines = content.split('\n');
76
+ for (const pattern of ERROR_CODE_ENUM_PATTERNS) {
77
+ const regex = new RegExp(pattern.source, pattern.flags);
78
+ let match;
79
+ while ((match = regex.exec(content)) !== null) {
80
+ if (isInsideComment(content, match.index))
81
+ continue;
82
+ const { line, column } = getPosition(content, match.index);
83
+ results.push({
84
+ type: 'error-code-enum',
85
+ file, line, column,
86
+ matchedText: match[0],
87
+ context: lines[line - 1] || '',
88
+ });
89
+ }
90
+ }
91
+ return results;
92
+ }
93
+ export function detectErrorCodeConstants(content, file) {
94
+ const results = [];
95
+ const lines = content.split('\n');
96
+ for (const pattern of ERROR_CODE_CONST_PATTERNS) {
97
+ const regex = new RegExp(pattern.source, pattern.flags);
98
+ let match;
99
+ while ((match = regex.exec(content)) !== null) {
100
+ if (isInsideComment(content, match.index))
101
+ continue;
102
+ const { line, column } = getPosition(content, match.index);
103
+ results.push({
104
+ type: 'error-code-const',
105
+ file, line, column,
106
+ matchedText: match[0],
107
+ codeName: match[1],
108
+ context: lines[line - 1] || '',
109
+ });
110
+ }
111
+ }
112
+ return results;
113
+ }
114
+ export function detectErrorCodeUsage(content, file) {
115
+ const results = [];
116
+ const lines = content.split('\n');
117
+ for (const pattern of ERROR_CODE_USAGE_PATTERNS) {
118
+ const regex = new RegExp(pattern.source, pattern.flags);
119
+ let match;
120
+ while ((match = regex.exec(content)) !== null) {
121
+ if (isInsideComment(content, match.index))
122
+ continue;
123
+ const { line, column } = getPosition(content, match.index);
124
+ results.push({
125
+ type: 'error-code-usage',
126
+ file, line, column,
127
+ matchedText: match[0],
128
+ context: lines[line - 1] || '',
129
+ });
130
+ }
131
+ }
132
+ return results;
133
+ }
134
+ export function detectMagicStringViolations(patterns, content, file) {
135
+ const violations = [];
136
+ const lines = content.split('\n');
137
+ const hasErrorCodeEnum = patterns.some(p => p.type === 'error-code-enum');
138
+ // Only flag magic strings if there's an ErrorCode enum
139
+ if (!hasErrorCodeEnum)
140
+ return violations;
141
+ for (const pattern of MAGIC_STRING_CODE_PATTERNS) {
142
+ const regex = new RegExp(pattern.source, pattern.flags);
143
+ let match;
144
+ while ((match = regex.exec(content)) !== null) {
145
+ if (isInsideComment(content, match.index))
146
+ continue;
147
+ const { line, column } = getPosition(content, match.index);
148
+ violations.push({
149
+ type: 'magic-string-code',
150
+ file, line, column,
151
+ endLine: line,
152
+ endColumn: column + match[0].length,
153
+ value: match[0],
154
+ issue: 'Using magic string instead of ErrorCode enum',
155
+ suggestedFix: 'Use ErrorCode enum value instead of string literal',
156
+ lineContent: lines[line - 1] || '',
157
+ });
158
+ }
159
+ }
160
+ return violations;
161
+ }
162
+ // ============================================================================
163
+ // Main Analysis Function
164
+ // ============================================================================
165
+ export function analyzeErrorCodes(content, file) {
166
+ if (shouldExcludeFile(file)) {
167
+ return { patterns: [], violations: [], hasErrorCodeEnum: false, errorCodes: [], confidence: 1.0 };
168
+ }
169
+ const enums = detectErrorCodeEnums(content, file);
170
+ const constants = detectErrorCodeConstants(content, file);
171
+ const usage = detectErrorCodeUsage(content, file);
172
+ const allPatterns = [...enums, ...constants, ...usage];
173
+ const violations = detectMagicStringViolations(allPatterns, content, file);
174
+ const errorCodes = constants
175
+ .filter(p => p.codeName)
176
+ .map(p => p.codeName)
177
+ .filter((v, i, a) => a.indexOf(v) === i);
178
+ const confidence = allPatterns.length > 0 ? Math.max(0.5, 1 - violations.length * 0.1) : 1.0;
179
+ return {
180
+ patterns: allPatterns,
181
+ violations,
182
+ hasErrorCodeEnum: enums.length > 0,
183
+ errorCodes,
184
+ confidence,
185
+ };
186
+ }
187
+ // ============================================================================
188
+ // Detector Class
189
+ // ============================================================================
190
+ export class ErrorCodesDetector extends RegexDetector {
191
+ id = 'errors/error-codes';
192
+ name = 'Error Codes Detector';
193
+ description = 'Detects error code patterns and usage';
194
+ category = 'errors';
195
+ subcategory = 'codes';
196
+ supportedLanguages = ['typescript', 'javascript', 'python'];
197
+ async detect(context) {
198
+ const { content, file } = context;
199
+ if (shouldExcludeFile(file))
200
+ return this.createEmptyResult();
201
+ const analysis = analyzeErrorCodes(content, file);
202
+ return this.createResult([], [], analysis.confidence);
203
+ }
204
+ generateQuickFix() {
205
+ return null;
206
+ }
207
+ }
208
+ export function createErrorCodesDetector() {
209
+ return new ErrorCodesDetector();
210
+ }
211
+ //# sourceMappingURL=error-codes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-codes.js","sourceRoot":"","sources":["../../src/errors/error-codes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,aAAa,EAA+C,MAAM,kBAAkB,CAAC;AAiD9F,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,yBAAyB;IACzB,0BAA0B;IAC1B,8BAA8B;IAC9B,+BAA+B;CACvB,CAAC;AAEX,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,2CAA2C;IAC3C,yCAAyC;IACzC,0CAA0C;CAClC,CAAC;AAEX,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,6BAA6B;IAC7B,8BAA8B;IAC9B,uBAAuB;IACvB,+BAA+B;CACvB,CAAC;AAEX,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,wBAAwB;IACxB,6CAA6C;CACrC,CAAC;AAEX,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,gCAAgC;IAChC,qCAAqC;CAC7B,CAAC;AAEX,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,kBAAkB;IAClB,kBAAkB;IAClB,gBAAgB;IAChB,UAAU;CACX,CAAC;AAEF,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,eAAe,CAAC,OAAe,EAAE,KAAa;IACrD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACvC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;IAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACrF,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,WAAW,CAAC,OAAe,EAAE,KAAa;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACvC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;AACvF,CAAC;AAED,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E,MAAM,UAAU,oBAAoB,CAAC,OAAe,EAAE,IAAY;IAChE,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,MAAM,OAAO,IAAI,wBAAwB,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACxD,IAAI,KAA6B,CAAC;QAClC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC9C,IAAI,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC;gBAAE,SAAS;YACpD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,iBAAiB;gBACvB,IAAI,EAAE,IAAI,EAAE,MAAM;gBAClB,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;gBACrB,OAAO,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE;aAC/B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAe,EAAE,IAAY;IACpE,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,MAAM,OAAO,IAAI,yBAAyB,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACxD,IAAI,KAA6B,CAAC;QAClC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC9C,IAAI,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC;gBAAE,SAAS;YACpD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,IAAI,EAAE,MAAM;gBAClB,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;gBACrB,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;gBAClB,OAAO,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE;aAC/B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAe,EAAE,IAAY;IAChE,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,MAAM,OAAO,IAAI,yBAAyB,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACxD,IAAI,KAA6B,CAAC;QAClC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC9C,IAAI,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC;gBAAE,SAAS;YACpD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,IAAI,EAAE,MAAM;gBAClB,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;gBACrB,OAAO,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE;aAC/B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,QAAgC,EAChC,OAAe,EACf,IAAY;IAEZ,MAAM,UAAU,GAA6B,EAAE,CAAC;IAChD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC;IAE1E,uDAAuD;IACvD,IAAI,CAAC,gBAAgB;QAAE,OAAO,UAAU,CAAC;IAEzC,KAAK,MAAM,OAAO,IAAI,0BAA0B,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACxD,IAAI,KAA6B,CAAC;QAClC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC9C,IAAI,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC;gBAAE,SAAS;YACpD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3D,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,mBAAmB;gBACzB,IAAI,EAAE,IAAI,EAAE,MAAM;gBAClB,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;gBACnC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;gBACf,KAAK,EAAE,8CAA8C;gBACrD,YAAY,EAAE,oDAAoD;gBAClE,WAAW,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE;aACnC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,IAAY;IAC7D,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;IACpG,CAAC;IAED,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAElD,MAAM,WAAW,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,SAAS,EAAE,GAAG,KAAK,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,2BAA2B,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAE3E,MAAM,UAAU,GAAG,SAAS;SACzB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;SACvB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAS,CAAC;SACrB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAE3C,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAE7F,OAAO;QACL,QAAQ,EAAE,WAAW;QACrB,UAAU;QACV,gBAAgB,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC;QAClC,UAAU;QACV,UAAU;KACX,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,MAAM,OAAO,kBAAmB,SAAQ,aAAa;IAC1C,EAAE,GAAG,oBAAoB,CAAC;IAC1B,IAAI,GAAG,sBAAsB,CAAC;IAC9B,WAAW,GAAG,uCAAuC,CAAC;IACtD,QAAQ,GAAG,QAAQ,CAAC;IACpB,WAAW,GAAG,OAAO,CAAC;IACtB,kBAAkB,GAAe,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IAEjF,KAAK,CAAC,MAAM,CAAC,OAAyB;QACpC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QAClC,IAAI,iBAAiB,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE7D,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IACxD,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO,IAAI,kBAAkB,EAAE,CAAC;AAClC,CAAC"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Error Logging Detector - Error logging pattern detection
3
+ *
4
+ * Detects error logging patterns including:
5
+ * - Logger usage for errors
6
+ * - Error context logging
7
+ * - Stack trace logging
8
+ * - Structured error logging
9
+ *
10
+ * Flags violations:
11
+ * - Console.log for errors
12
+ * - Missing error context
13
+ * - Inconsistent logging
14
+ *
15
+ * @requirements 12.7 - Error logging patterns
16
+ */
17
+ import type { Language } from 'driftdetect-core';
18
+ import { RegexDetector, type DetectionContext, type DetectionResult } from '../base/index.js';
19
+ export type ErrorLoggingPatternType = 'logger-error' | 'structured-log' | 'context-log' | 'stack-trace-log';
20
+ export type ErrorLoggingViolationType = 'console-error' | 'missing-context' | 'inconsistent-logging';
21
+ export interface ErrorLoggingPatternInfo {
22
+ type: ErrorLoggingPatternType;
23
+ file: string;
24
+ line: number;
25
+ column: number;
26
+ matchedText: string;
27
+ loggerName?: string | undefined;
28
+ context?: string | undefined;
29
+ }
30
+ export interface ErrorLoggingViolationInfo {
31
+ type: ErrorLoggingViolationType;
32
+ file: string;
33
+ line: number;
34
+ column: number;
35
+ endLine: number;
36
+ endColumn: number;
37
+ value: string;
38
+ issue: string;
39
+ suggestedFix?: string;
40
+ lineContent: string;
41
+ }
42
+ export interface ErrorLoggingAnalysis {
43
+ patterns: ErrorLoggingPatternInfo[];
44
+ violations: ErrorLoggingViolationInfo[];
45
+ hasStructuredLogging: boolean;
46
+ usesLogger: boolean;
47
+ confidence: number;
48
+ }
49
+ export declare const LOGGER_ERROR_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp];
50
+ export declare const STRUCTURED_LOG_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp];
51
+ export declare const CONTEXT_LOG_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp];
52
+ export declare const STACK_TRACE_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp];
53
+ export declare const CONSOLE_ERROR_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp];
54
+ export declare const EXCLUDED_FILE_PATTERNS: RegExp[];
55
+ export declare function shouldExcludeFile(filePath: string): boolean;
56
+ export declare function detectLoggerError(content: string, file: string): ErrorLoggingPatternInfo[];
57
+ export declare function detectStructuredLogging(content: string, file: string): ErrorLoggingPatternInfo[];
58
+ export declare function detectContextLogging(content: string, file: string): ErrorLoggingPatternInfo[];
59
+ export declare function detectStackTraceLogging(content: string, file: string): ErrorLoggingPatternInfo[];
60
+ export declare function detectConsoleErrorViolations(patterns: ErrorLoggingPatternInfo[], content: string, file: string): ErrorLoggingViolationInfo[];
61
+ export declare function analyzeErrorLogging(content: string, file: string): ErrorLoggingAnalysis;
62
+ export declare class ErrorLoggingDetector extends RegexDetector {
63
+ readonly id = "errors/error-logging";
64
+ readonly name = "Error Logging Detector";
65
+ readonly description = "Detects error logging patterns";
66
+ readonly category = "errors";
67
+ readonly subcategory = "logging";
68
+ readonly supportedLanguages: Language[];
69
+ detect(context: DetectionContext): Promise<DetectionResult>;
70
+ generateQuickFix(): null;
71
+ }
72
+ export declare function createErrorLoggingDetector(): ErrorLoggingDetector;
73
+ //# sourceMappingURL=error-logging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-logging.d.ts","sourceRoot":"","sources":["../../src/errors/error-logging.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,256 @@
1
+ /**
2
+ * Error Logging Detector - Error logging pattern detection
3
+ *
4
+ * Detects error logging patterns including:
5
+ * - Logger usage for errors
6
+ * - Error context logging
7
+ * - Stack trace logging
8
+ * - Structured error logging
9
+ *
10
+ * Flags violations:
11
+ * - Console.log for errors
12
+ * - Missing error context
13
+ * - Inconsistent logging
14
+ *
15
+ * @requirements 12.7 - Error logging patterns
16
+ */
17
+ import { RegexDetector } from '../base/index.js';
18
+ // ============================================================================
19
+ // Constants
20
+ // ============================================================================
21
+ export const LOGGER_ERROR_PATTERNS = [
22
+ // JavaScript/TypeScript
23
+ /logger\.error\s*\(/gi,
24
+ /log\.error\s*\(/gi,
25
+ /logging\.error\s*\(/gi,
26
+ /winston\.error\s*\(/gi,
27
+ /pino\.error\s*\(/gi,
28
+ // Python
29
+ /logger\.exception\s*\(/gi,
30
+ /self\.logger\.error\s*\(/gi,
31
+ /self\._logger\.error\s*\(/gi,
32
+ ];
33
+ export const STRUCTURED_LOG_PATTERNS = [
34
+ // JavaScript/TypeScript
35
+ /logger\.error\s*\(\s*\{/gi,
36
+ /log\.error\s*\(\s*\{/gi,
37
+ /error\s*:\s*\{[^}]*message/gi,
38
+ /logError\s*\(\s*\{/gi,
39
+ // Python - extra dict
40
+ /logger\.error\s*\([^)]+,\s*extra\s*=/gi,
41
+ /logger\.exception\s*\([^)]+,\s*extra\s*=/gi,
42
+ ];
43
+ export const CONTEXT_LOG_PATTERNS = [
44
+ // JavaScript/TypeScript
45
+ /logger\.error\s*\([^)]*,\s*\{/gi,
46
+ /log\.error\s*\([^)]*,\s*\{/gi,
47
+ /error\s*,\s*\{\s*context/gi,
48
+ /error\s*,\s*\{\s*metadata/gi,
49
+ // Python
50
+ /exc_info\s*=\s*True/gi,
51
+ /stack_info\s*=\s*True/gi,
52
+ ];
53
+ export const STACK_TRACE_PATTERNS = [
54
+ // JavaScript/TypeScript
55
+ /\.stack\b/gi,
56
+ /stackTrace/gi,
57
+ /Error\.captureStackTrace/gi,
58
+ /error\.stack/gi,
59
+ // Python
60
+ /traceback\.format_exc/gi,
61
+ /traceback\.print_exc/gi,
62
+ /sys\.exc_info/gi,
63
+ /__traceback__/gi,
64
+ ];
65
+ export const CONSOLE_ERROR_PATTERNS = [
66
+ // JavaScript/TypeScript
67
+ /console\.error\s*\(/gi,
68
+ /console\.log\s*\([^)]*error/gi,
69
+ /console\.warn\s*\([^)]*error/gi,
70
+ // Python - print for errors (anti-pattern)
71
+ /print\s*\([^)]*[Ee]rror/gi,
72
+ /print\s*\([^)]*[Ee]xception/gi,
73
+ ];
74
+ export const EXCLUDED_FILE_PATTERNS = [
75
+ /\.test\.[jt]sx?$/,
76
+ /\.spec\.[jt]sx?$/,
77
+ /node_modules\//,
78
+ /\.d\.ts$/,
79
+ ];
80
+ // ============================================================================
81
+ // Helper Functions
82
+ // ============================================================================
83
+ export function shouldExcludeFile(filePath) {
84
+ return EXCLUDED_FILE_PATTERNS.some(p => p.test(filePath));
85
+ }
86
+ function isInsideComment(content, index) {
87
+ const before = content.slice(0, index);
88
+ const lastNewline = before.lastIndexOf('\n');
89
+ const line = before.slice(lastNewline + 1);
90
+ if (line.includes('//') && index - lastNewline - 1 > line.indexOf('//'))
91
+ return true;
92
+ return before.lastIndexOf('/*') > before.lastIndexOf('*/');
93
+ }
94
+ function getPosition(content, index) {
95
+ const before = content.slice(0, index);
96
+ return { line: before.split('\n').length, column: index - before.lastIndexOf('\n') };
97
+ }
98
+ // ============================================================================
99
+ // Detection Functions
100
+ // ============================================================================
101
+ export function detectLoggerError(content, file) {
102
+ const results = [];
103
+ const lines = content.split('\n');
104
+ for (const pattern of LOGGER_ERROR_PATTERNS) {
105
+ const regex = new RegExp(pattern.source, pattern.flags);
106
+ let match;
107
+ while ((match = regex.exec(content)) !== null) {
108
+ if (isInsideComment(content, match.index))
109
+ continue;
110
+ const { line, column } = getPosition(content, match.index);
111
+ results.push({
112
+ type: 'logger-error',
113
+ file, line, column,
114
+ matchedText: match[0],
115
+ loggerName: match[0].split('.')[0],
116
+ context: lines[line - 1] || '',
117
+ });
118
+ }
119
+ }
120
+ return results;
121
+ }
122
+ export function detectStructuredLogging(content, file) {
123
+ const results = [];
124
+ const lines = content.split('\n');
125
+ for (const pattern of STRUCTURED_LOG_PATTERNS) {
126
+ const regex = new RegExp(pattern.source, pattern.flags);
127
+ let match;
128
+ while ((match = regex.exec(content)) !== null) {
129
+ if (isInsideComment(content, match.index))
130
+ continue;
131
+ const { line, column } = getPosition(content, match.index);
132
+ results.push({
133
+ type: 'structured-log',
134
+ file, line, column,
135
+ matchedText: match[0],
136
+ context: lines[line - 1] || '',
137
+ });
138
+ }
139
+ }
140
+ return results;
141
+ }
142
+ export function detectContextLogging(content, file) {
143
+ const results = [];
144
+ const lines = content.split('\n');
145
+ for (const pattern of CONTEXT_LOG_PATTERNS) {
146
+ const regex = new RegExp(pattern.source, pattern.flags);
147
+ let match;
148
+ while ((match = regex.exec(content)) !== null) {
149
+ if (isInsideComment(content, match.index))
150
+ continue;
151
+ const { line, column } = getPosition(content, match.index);
152
+ results.push({
153
+ type: 'context-log',
154
+ file, line, column,
155
+ matchedText: match[0],
156
+ context: lines[line - 1] || '',
157
+ });
158
+ }
159
+ }
160
+ return results;
161
+ }
162
+ export function detectStackTraceLogging(content, file) {
163
+ const results = [];
164
+ const lines = content.split('\n');
165
+ for (const pattern of STACK_TRACE_PATTERNS) {
166
+ const regex = new RegExp(pattern.source, pattern.flags);
167
+ let match;
168
+ while ((match = regex.exec(content)) !== null) {
169
+ if (isInsideComment(content, match.index))
170
+ continue;
171
+ const { line, column } = getPosition(content, match.index);
172
+ results.push({
173
+ type: 'stack-trace-log',
174
+ file, line, column,
175
+ matchedText: match[0],
176
+ context: lines[line - 1] || '',
177
+ });
178
+ }
179
+ }
180
+ return results;
181
+ }
182
+ export function detectConsoleErrorViolations(patterns, content, file) {
183
+ const violations = [];
184
+ const lines = content.split('\n');
185
+ const usesLogger = patterns.some(p => p.type === 'logger-error');
186
+ // Only flag console.error if there's a logger being used
187
+ if (!usesLogger)
188
+ return violations;
189
+ for (const pattern of CONSOLE_ERROR_PATTERNS) {
190
+ const regex = new RegExp(pattern.source, pattern.flags);
191
+ let match;
192
+ while ((match = regex.exec(content)) !== null) {
193
+ if (isInsideComment(content, match.index))
194
+ continue;
195
+ const { line, column } = getPosition(content, match.index);
196
+ violations.push({
197
+ type: 'console-error',
198
+ file, line, column,
199
+ endLine: line,
200
+ endColumn: column + match[0].length,
201
+ value: match[0],
202
+ issue: 'Using console for error logging instead of logger',
203
+ suggestedFix: 'Use logger.error() for consistent error logging',
204
+ lineContent: lines[line - 1] || '',
205
+ });
206
+ }
207
+ }
208
+ return violations;
209
+ }
210
+ // ============================================================================
211
+ // Main Analysis Function
212
+ // ============================================================================
213
+ export function analyzeErrorLogging(content, file) {
214
+ if (shouldExcludeFile(file)) {
215
+ return { patterns: [], violations: [], hasStructuredLogging: false, usesLogger: false, confidence: 1.0 };
216
+ }
217
+ const loggerError = detectLoggerError(content, file);
218
+ const structured = detectStructuredLogging(content, file);
219
+ const contextLog = detectContextLogging(content, file);
220
+ const stackTrace = detectStackTraceLogging(content, file);
221
+ const allPatterns = [...loggerError, ...structured, ...contextLog, ...stackTrace];
222
+ const violations = detectConsoleErrorViolations(allPatterns, content, file);
223
+ const confidence = allPatterns.length > 0 ? Math.max(0.5, 1 - violations.length * 0.1) : 1.0;
224
+ return {
225
+ patterns: allPatterns,
226
+ violations,
227
+ hasStructuredLogging: structured.length > 0,
228
+ usesLogger: loggerError.length > 0,
229
+ confidence,
230
+ };
231
+ }
232
+ // ============================================================================
233
+ // Detector Class
234
+ // ============================================================================
235
+ export class ErrorLoggingDetector extends RegexDetector {
236
+ id = 'errors/error-logging';
237
+ name = 'Error Logging Detector';
238
+ description = 'Detects error logging patterns';
239
+ category = 'errors';
240
+ subcategory = 'logging';
241
+ supportedLanguages = ['typescript', 'javascript', 'python'];
242
+ async detect(context) {
243
+ const { content, file } = context;
244
+ if (shouldExcludeFile(file))
245
+ return this.createEmptyResult();
246
+ const analysis = analyzeErrorLogging(content, file);
247
+ return this.createResult([], [], analysis.confidence);
248
+ }
249
+ generateQuickFix() {
250
+ return null;
251
+ }
252
+ }
253
+ export function createErrorLoggingDetector() {
254
+ return new ErrorLoggingDetector();
255
+ }
256
+ //# sourceMappingURL=error-logging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-logging.js","sourceRoot":"","sources":["../../src/errors/error-logging.ts"],"names":[],"mappings":"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"}