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,140 @@
1
+ /**
2
+ * Circular Dependencies Detector - Circular dependency detection
3
+ *
4
+ * Detects circular dependency patterns including:
5
+ * - Direct circular imports (A → B → A)
6
+ * - Indirect circular imports (A → B → C → A)
7
+ * - Self-imports
8
+ *
9
+ * Integrates with the core dependency graph module for cycle detection.
10
+ *
11
+ * @requirements 7.7 - THE Structural_Detector SHALL detect circular dependencies
12
+ */
13
+ import type { Violation, QuickFix, Language } from 'driftdetect-core';
14
+ import { StructuralDetector, type DetectionContext, type DetectionResult } from '../base/index.js';
15
+ /**
16
+ * Type of circular dependency
17
+ */
18
+ export type CircularDependencyType = 'self-import' | 'direct' | 'indirect';
19
+ /**
20
+ * Severity level based on cycle characteristics
21
+ */
22
+ export type CycleSeverity = 'error' | 'warning' | 'info';
23
+ /**
24
+ * Information about a detected circular dependency
25
+ */
26
+ export interface CircularDependencyInfo {
27
+ /** Type of circular dependency */
28
+ type: CircularDependencyType;
29
+ /** Files involved in the cycle (in order) */
30
+ cycle: string[];
31
+ /** Length of the cycle */
32
+ length: number;
33
+ /** Calculated severity based on cycle characteristics */
34
+ severity: CycleSeverity;
35
+ /** Human-readable description of the cycle */
36
+ description: string;
37
+ /** Suggested ways to break the cycle */
38
+ suggestions: string[];
39
+ }
40
+ /**
41
+ * Analysis result for circular dependencies in a file
42
+ */
43
+ export interface CircularDependencyAnalysis {
44
+ /** Whether the file is involved in any circular dependencies */
45
+ hasCircularDependencies: boolean;
46
+ /** All circular dependencies involving this file */
47
+ circularDependencies: CircularDependencyInfo[];
48
+ /** Total number of imports in the file */
49
+ totalImports: number;
50
+ /** Number of imports involved in cycles */
51
+ importsInCycles: number;
52
+ /** Self-imports detected */
53
+ selfImports: string[];
54
+ }
55
+ /**
56
+ * Import information for cycle detection
57
+ */
58
+ interface ImportForCycleDetection {
59
+ source: string;
60
+ resolvedPath?: string | undefined;
61
+ line: number;
62
+ }
63
+ /**
64
+ * Determine the type of circular dependency based on cycle length
65
+ */
66
+ export declare function getCycleType(cycle: string[], currentFile: string): CircularDependencyType;
67
+ /**
68
+ * Calculate severity based on cycle characteristics
69
+ *
70
+ * Severity is determined by:
71
+ * - Self-imports: error (always problematic)
72
+ * - Direct cycles (length 2): warning (common but should be fixed)
73
+ * - Short indirect cycles (length 3-4): warning
74
+ * - Long indirect cycles (length > 4): info (may be architectural)
75
+ */
76
+ export declare function calculateCycleSeverity(type: CircularDependencyType, cycleLength: number): CycleSeverity;
77
+ /**
78
+ * Generate suggestions for breaking a circular dependency
79
+ */
80
+ export declare function generateBreakCycleSuggestions(_cycle: string[], type: CircularDependencyType): string[];
81
+ /**
82
+ * Format a cycle as a human-readable string
83
+ */
84
+ export declare function formatCycle(cycle: string[]): string;
85
+ /**
86
+ * Detect self-imports in a file
87
+ */
88
+ export declare function detectSelfImports(currentFile: string, imports: ImportForCycleDetection[]): string[];
89
+ /**
90
+ * Build a local dependency graph from imports
91
+ */
92
+ export declare function buildLocalDependencyGraph(imports: ImportForCycleDetection[]): Map<string, Set<string>>;
93
+ /**
94
+ * Detect cycles using DFS from a starting node
95
+ */
96
+ export declare function detectCyclesFromNode(startNode: string, getDependencies: (node: string) => string[], maxDepth?: number): string[][];
97
+ /**
98
+ * Analyze circular dependencies for a file
99
+ */
100
+ export declare function analyzeCircularDependencies(file: string, imports: ImportForCycleDetection[], getDependencies?: (file: string) => string[]): CircularDependencyAnalysis;
101
+ /**
102
+ * Detector for circular dependency patterns
103
+ *
104
+ * Identifies circular dependencies in the codebase:
105
+ * - Self-imports (file imports itself)
106
+ * - Direct circular imports (A → B → A)
107
+ * - Indirect circular imports (A → B → C → A)
108
+ *
109
+ * @requirements 7.7 - THE Structural_Detector SHALL detect circular dependencies
110
+ */
111
+ export declare class CircularDependenciesDetector extends StructuralDetector {
112
+ readonly id = "structural/circular-deps";
113
+ readonly category: "structural";
114
+ readonly subcategory = "circular-dependencies";
115
+ readonly name = "Circular Dependencies Detector";
116
+ readonly description = "Detects circular dependency patterns including direct, indirect, and self-imports";
117
+ readonly supportedLanguages: Language[];
118
+ /**
119
+ * Detect circular dependencies in the project
120
+ */
121
+ detect(context: DetectionContext): Promise<DetectionResult>;
122
+ /**
123
+ * Generate a quick fix for circular dependency violations
124
+ */
125
+ generateQuickFix(violation: Violation): QuickFix | null;
126
+ /**
127
+ * Extract imports from the detection context
128
+ */
129
+ private extractImports;
130
+ /**
131
+ * Create a violation for a circular dependency
132
+ */
133
+ private createCircularDependencyViolation;
134
+ }
135
+ /**
136
+ * Create a new CircularDependenciesDetector instance
137
+ */
138
+ export declare function createCircularDependenciesDetector(): CircularDependenciesDetector;
139
+ export {};
140
+ //# sourceMappingURL=circular-deps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circular-deps.d.ts","sourceRoot":"","sources":["../../src/structural/circular-deps.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,422 @@
1
+ /**
2
+ * Circular Dependencies Detector - Circular dependency detection
3
+ *
4
+ * Detects circular dependency patterns including:
5
+ * - Direct circular imports (A → B → A)
6
+ * - Indirect circular imports (A → B → C → A)
7
+ * - Self-imports
8
+ *
9
+ * Integrates with the core dependency graph module for cycle detection.
10
+ *
11
+ * @requirements 7.7 - THE Structural_Detector SHALL detect circular dependencies
12
+ */
13
+ import { StructuralDetector } from '../base/index.js';
14
+ // ============================================================================
15
+ // Helper Functions
16
+ // ============================================================================
17
+ /**
18
+ * Normalize a file path for consistent comparison
19
+ */
20
+ function normalizePath(path) {
21
+ return path.replace(/\\/g, '/').toLowerCase();
22
+ }
23
+ /**
24
+ * Get the file name from a path for display
25
+ */
26
+ function getFileName(path) {
27
+ // Don't normalize case for display purposes
28
+ const normalized = path.replace(/\\/g, '/');
29
+ const parts = normalized.split('/');
30
+ return parts[parts.length - 1] || path;
31
+ }
32
+ /**
33
+ * Determine the type of circular dependency based on cycle length
34
+ */
35
+ export function getCycleType(cycle, currentFile) {
36
+ const normalizedCurrent = normalizePath(currentFile);
37
+ const normalizedCycle = cycle.map(normalizePath);
38
+ // Check for self-import (cycle of length 1 or file appears twice consecutively)
39
+ if (normalizedCycle.length === 1 && normalizedCycle[0] === normalizedCurrent) {
40
+ return 'self-import';
41
+ }
42
+ // Check for direct cycle (A → B → A)
43
+ if (normalizedCycle.length <= 3) {
44
+ return 'direct';
45
+ }
46
+ // Indirect cycle (longer chain)
47
+ return 'indirect';
48
+ }
49
+ /**
50
+ * Calculate severity based on cycle characteristics
51
+ *
52
+ * Severity is determined by:
53
+ * - Self-imports: error (always problematic)
54
+ * - Direct cycles (length 2): warning (common but should be fixed)
55
+ * - Short indirect cycles (length 3-4): warning
56
+ * - Long indirect cycles (length > 4): info (may be architectural)
57
+ */
58
+ export function calculateCycleSeverity(type, cycleLength) {
59
+ if (type === 'self-import') {
60
+ return 'error';
61
+ }
62
+ if (type === 'direct') {
63
+ return 'warning';
64
+ }
65
+ // Indirect cycles
66
+ if (cycleLength <= 4) {
67
+ return 'warning';
68
+ }
69
+ return 'info';
70
+ }
71
+ /**
72
+ * Generate suggestions for breaking a circular dependency
73
+ */
74
+ export function generateBreakCycleSuggestions(_cycle, type) {
75
+ const suggestions = [];
76
+ if (type === 'self-import') {
77
+ suggestions.push('Remove the self-import statement');
78
+ suggestions.push('Check if the import is a typo or copy-paste error');
79
+ return suggestions;
80
+ }
81
+ if (type === 'direct') {
82
+ suggestions.push('Extract shared code into a separate module that both files can import');
83
+ suggestions.push('Use dependency injection to break the direct coupling');
84
+ suggestions.push('Consider if one of the imports can be removed or made dynamic');
85
+ }
86
+ if (type === 'indirect') {
87
+ suggestions.push('Identify the core abstraction and extract it to a shared module');
88
+ suggestions.push('Use an interface/type-only import to break the runtime dependency');
89
+ suggestions.push('Consider restructuring the module hierarchy');
90
+ suggestions.push('Use lazy loading or dynamic imports for non-critical dependencies');
91
+ }
92
+ // Common suggestions
93
+ suggestions.push('Review the module responsibilities - circular deps often indicate unclear boundaries');
94
+ return suggestions;
95
+ }
96
+ /**
97
+ * Format a cycle as a human-readable string
98
+ */
99
+ export function formatCycle(cycle) {
100
+ const fileNames = cycle.map(getFileName);
101
+ return fileNames.join(' → ');
102
+ }
103
+ /**
104
+ * Detect self-imports in a file
105
+ */
106
+ export function detectSelfImports(currentFile, imports) {
107
+ const normalizedCurrent = normalizePath(currentFile);
108
+ const selfImports = [];
109
+ for (const imp of imports) {
110
+ const resolvedPath = imp.resolvedPath || imp.source;
111
+ if (normalizePath(resolvedPath) === normalizedCurrent) {
112
+ selfImports.push(imp.source);
113
+ }
114
+ }
115
+ return selfImports;
116
+ }
117
+ /**
118
+ * Build a local dependency graph from imports
119
+ */
120
+ export function buildLocalDependencyGraph(imports) {
121
+ const graph = new Map();
122
+ for (const imp of imports) {
123
+ const resolvedPath = imp.resolvedPath;
124
+ if (resolvedPath) {
125
+ const normalized = normalizePath(resolvedPath);
126
+ if (!graph.has(normalized)) {
127
+ graph.set(normalized, new Set());
128
+ }
129
+ }
130
+ }
131
+ return graph;
132
+ }
133
+ /**
134
+ * Detect cycles using DFS from a starting node
135
+ */
136
+ export function detectCyclesFromNode(startNode, getDependencies, maxDepth = 10) {
137
+ const cycles = [];
138
+ const visited = new Set();
139
+ const recursionStack = new Set();
140
+ const path = [];
141
+ function dfs(node, depth) {
142
+ if (depth > maxDepth) {
143
+ return;
144
+ }
145
+ visited.add(node);
146
+ recursionStack.add(node);
147
+ path.push(node);
148
+ const dependencies = getDependencies(node);
149
+ for (const dep of dependencies) {
150
+ const normalizedDep = normalizePath(dep);
151
+ if (!visited.has(normalizedDep)) {
152
+ dfs(normalizedDep, depth + 1);
153
+ }
154
+ else if (recursionStack.has(normalizedDep)) {
155
+ // Found a cycle
156
+ const cycleStart = path.indexOf(normalizedDep);
157
+ if (cycleStart !== -1) {
158
+ const cycle = [...path.slice(cycleStart), normalizedDep];
159
+ // Only add if this cycle includes the start node
160
+ if (cycle.some(n => normalizePath(n) === normalizePath(startNode))) {
161
+ cycles.push(cycle);
162
+ }
163
+ }
164
+ }
165
+ }
166
+ path.pop();
167
+ recursionStack.delete(node);
168
+ }
169
+ dfs(normalizePath(startNode), 0);
170
+ return cycles;
171
+ }
172
+ /**
173
+ * Analyze circular dependencies for a file
174
+ */
175
+ export function analyzeCircularDependencies(file, imports, getDependencies) {
176
+ const normalizedFile = normalizePath(file);
177
+ const circularDependencies = [];
178
+ // Detect self-imports
179
+ const selfImports = detectSelfImports(file, imports);
180
+ for (const selfImport of selfImports) {
181
+ circularDependencies.push({
182
+ type: 'self-import',
183
+ cycle: [file],
184
+ length: 1,
185
+ severity: 'error',
186
+ description: `File imports itself via '${selfImport}'`,
187
+ suggestions: generateBreakCycleSuggestions([file], 'self-import'),
188
+ });
189
+ }
190
+ // If we have a dependency graph, use it to detect cycles
191
+ if (getDependencies) {
192
+ const cycles = detectCyclesFromNode(normalizedFile, getDependencies);
193
+ for (const cycle of cycles) {
194
+ // Skip if this is a self-import (already handled)
195
+ if (cycle.length <= 2 && cycle[0] === cycle[cycle.length - 1]) {
196
+ continue;
197
+ }
198
+ const type = getCycleType(cycle, file);
199
+ const severity = calculateCycleSeverity(type, cycle.length - 1); // -1 because cycle includes start node twice
200
+ circularDependencies.push({
201
+ type,
202
+ cycle,
203
+ length: cycle.length - 1,
204
+ severity,
205
+ description: `Circular dependency: ${formatCycle(cycle)}`,
206
+ suggestions: generateBreakCycleSuggestions(cycle, type),
207
+ });
208
+ }
209
+ }
210
+ // Count imports involved in cycles
211
+ const importsInCycles = new Set();
212
+ for (const dep of circularDependencies) {
213
+ for (const cycleFile of dep.cycle) {
214
+ importsInCycles.add(normalizePath(cycleFile));
215
+ }
216
+ }
217
+ return {
218
+ hasCircularDependencies: circularDependencies.length > 0,
219
+ circularDependencies,
220
+ totalImports: imports.length,
221
+ importsInCycles: importsInCycles.size,
222
+ selfImports,
223
+ };
224
+ }
225
+ /**
226
+ * Get the line number of an import that causes a cycle
227
+ */
228
+ function getImportLineForCycle(imports, targetFile) {
229
+ const normalizedTarget = normalizePath(targetFile);
230
+ for (const imp of imports) {
231
+ const resolvedPath = imp.resolvedPath || imp.source;
232
+ if (normalizePath(resolvedPath) === normalizedTarget) {
233
+ return imp.line;
234
+ }
235
+ }
236
+ return 1; // Default to first line if not found
237
+ }
238
+ // ============================================================================
239
+ // Circular Dependencies Detector Class
240
+ // ============================================================================
241
+ /**
242
+ * Detector for circular dependency patterns
243
+ *
244
+ * Identifies circular dependencies in the codebase:
245
+ * - Self-imports (file imports itself)
246
+ * - Direct circular imports (A → B → A)
247
+ * - Indirect circular imports (A → B → C → A)
248
+ *
249
+ * @requirements 7.7 - THE Structural_Detector SHALL detect circular dependencies
250
+ */
251
+ export class CircularDependenciesDetector extends StructuralDetector {
252
+ id = 'structural/circular-deps';
253
+ category = 'structural';
254
+ subcategory = 'circular-dependencies';
255
+ name = 'Circular Dependencies Detector';
256
+ description = 'Detects circular dependency patterns including direct, indirect, and self-imports';
257
+ supportedLanguages = [
258
+ 'typescript',
259
+ 'javascript',
260
+ ];
261
+ /**
262
+ * Detect circular dependencies in the project
263
+ */
264
+ async detect(context) {
265
+ const patterns = [];
266
+ const violations = [];
267
+ // Extract imports from context
268
+ const imports = this.extractImports(context);
269
+ if (imports.length === 0) {
270
+ return this.createResult(patterns, violations, 1.0);
271
+ }
272
+ // Get dependency graph from project context if available
273
+ const getDependencies = context.projectContext.dependencyGraph?.getDependencies;
274
+ // Analyze circular dependencies
275
+ const analysis = analyzeCircularDependencies(context.file, imports, getDependencies);
276
+ // If no circular dependencies, return early with a pattern indicating clean state
277
+ if (!analysis.hasCircularDependencies) {
278
+ patterns.push({
279
+ patternId: 'circular-deps-clean',
280
+ location: { file: context.file, line: 1, column: 1 },
281
+ confidence: 1.0,
282
+ isOutlier: false,
283
+ });
284
+ return this.createResult(patterns, violations, 1.0);
285
+ }
286
+ // Create violations for each circular dependency
287
+ for (const circDep of analysis.circularDependencies) {
288
+ const violation = this.createCircularDependencyViolation(context.file, circDep, imports);
289
+ violations.push(violation);
290
+ // Also create a pattern match for tracking
291
+ patterns.push({
292
+ patternId: `circular-deps-${circDep.type}`,
293
+ location: { file: context.file, line: violation.range.start.line + 1, column: 1 },
294
+ confidence: 0.9,
295
+ isOutlier: true, // Circular dependencies are outliers from good patterns
296
+ });
297
+ }
298
+ // Calculate confidence based on the ratio of clean imports
299
+ const cleanImportRatio = analysis.totalImports > 0
300
+ ? (analysis.totalImports - analysis.importsInCycles) / analysis.totalImports
301
+ : 1.0;
302
+ return this.createResult(patterns, violations, cleanImportRatio);
303
+ }
304
+ /**
305
+ * Generate a quick fix for circular dependency violations
306
+ */
307
+ generateQuickFix(violation) {
308
+ // Circular dependencies typically require manual refactoring
309
+ // We provide guidance but can't automatically fix them
310
+ if (violation.patternId === 'structural/circular-deps-self-import') {
311
+ return {
312
+ title: 'Remove self-import',
313
+ kind: 'quickfix',
314
+ edit: {
315
+ changes: {},
316
+ documentChanges: [],
317
+ },
318
+ isPreferred: true,
319
+ confidence: 0.9,
320
+ preview: 'Remove the import statement that imports the current file',
321
+ };
322
+ }
323
+ if (violation.patternId === 'structural/circular-deps-direct' ||
324
+ violation.patternId === 'structural/circular-deps-indirect') {
325
+ return {
326
+ title: 'Break circular dependency',
327
+ kind: 'refactor',
328
+ edit: {
329
+ changes: {},
330
+ documentChanges: [],
331
+ },
332
+ isPreferred: false,
333
+ confidence: 0.5,
334
+ preview: violation.explanation || 'Extract shared code to break the dependency cycle',
335
+ };
336
+ }
337
+ return null;
338
+ }
339
+ /**
340
+ * Extract imports from the detection context
341
+ */
342
+ extractImports(context) {
343
+ const imports = [];
344
+ // Use imports from context if available
345
+ if (context.imports && context.imports.length > 0) {
346
+ for (const imp of context.imports) {
347
+ imports.push({
348
+ source: imp.source,
349
+ resolvedPath: imp.resolvedPath,
350
+ line: imp.line,
351
+ });
352
+ }
353
+ return imports;
354
+ }
355
+ // Fall back to parsing content for imports
356
+ const importRegex = /^import\s+(?:(?:type\s+)?(?:\{[^}]*\}|\*\s+as\s+\w+|\w+(?:\s*,\s*\{[^}]*\})?)\s+from\s+)?['"]([^'"]+)['"]/gm;
357
+ const lines = context.content.split('\n');
358
+ for (let i = 0; i < lines.length; i++) {
359
+ const line = lines[i];
360
+ const match = importRegex.exec(line);
361
+ if (match && match[1]) {
362
+ imports.push({
363
+ source: match[1],
364
+ line: i + 1,
365
+ });
366
+ }
367
+ importRegex.lastIndex = 0; // Reset regex state
368
+ }
369
+ return imports;
370
+ }
371
+ /**
372
+ * Create a violation for a circular dependency
373
+ */
374
+ createCircularDependencyViolation(file, circDep, imports) {
375
+ // Find the line number of the import that causes the cycle
376
+ const targetFile = circDep.cycle.length > 1 ? circDep.cycle[1] : circDep.cycle[0];
377
+ const line = targetFile ? getImportLineForCycle(imports, targetFile) : 1;
378
+ const range = {
379
+ start: { line: line - 1, character: 0 },
380
+ end: { line: line - 1, character: 100 },
381
+ };
382
+ const violation = {
383
+ id: `circular-deps-${file.replace(/[^a-zA-Z0-9]/g, '-')}-${line}`,
384
+ patternId: `structural/circular-deps-${circDep.type}`,
385
+ severity: circDep.severity,
386
+ file,
387
+ range,
388
+ message: circDep.description,
389
+ expected: 'No circular dependencies',
390
+ actual: `Circular dependency of length ${circDep.length}`,
391
+ explanation: circDep.suggestions.join('\n• '),
392
+ aiExplainAvailable: true,
393
+ aiFixAvailable: false,
394
+ firstSeen: new Date(),
395
+ occurrences: 1,
396
+ };
397
+ // Add quick fix for self-imports
398
+ if (circDep.type === 'self-import') {
399
+ violation.quickFix = {
400
+ title: 'Remove self-import',
401
+ kind: 'quickfix',
402
+ edit: {
403
+ changes: {},
404
+ documentChanges: [],
405
+ },
406
+ isPreferred: true,
407
+ confidence: 0.9,
408
+ };
409
+ }
410
+ return violation;
411
+ }
412
+ }
413
+ // ============================================================================
414
+ // Factory Function
415
+ // ============================================================================
416
+ /**
417
+ * Create a new CircularDependenciesDetector instance
418
+ */
419
+ export function createCircularDependenciesDetector() {
420
+ return new CircularDependenciesDetector();
421
+ }
422
+ //# sourceMappingURL=circular-deps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circular-deps.js","sourceRoot":"","sources":["../../src/structural/circular-deps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,kBAAkB,EAA+C,MAAM,kBAAkB,CAAC;AA8DnG,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;GAEG;AACH,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,IAAY;IAC/B,4CAA4C;IAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAe,EAAE,WAAmB;IAC/D,MAAM,iBAAiB,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IACrD,MAAM,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAEjD,gFAAgF;IAChF,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,KAAK,iBAAiB,EAAE,CAAC;QAC7E,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,qCAAqC;IACrC,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAChC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,gCAAgC;IAChC,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAA4B,EAC5B,WAAmB;IAEnB,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,kBAAkB;IAClB,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,6BAA6B,CAC3C,MAAgB,EAChB,IAA4B;IAE5B,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QAC3B,WAAW,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QACrD,WAAW,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QACtE,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,WAAW,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;QAC1F,WAAW,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;QAC1E,WAAW,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;IACpF,CAAC;IAED,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,WAAW,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;QACpF,WAAW,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;QACtF,WAAW,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAChE,WAAW,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;IACxF,CAAC;IAED,qBAAqB;IACrB,WAAW,CAAC,IAAI,CAAC,sFAAsF,CAAC,CAAC;IAEzG,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAe;IACzC,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACzC,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,WAAmB,EACnB,OAAkC;IAElC,MAAM,iBAAiB,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IACrD,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,MAAM,CAAC;QACpD,IAAI,aAAa,CAAC,YAAY,CAAC,KAAK,iBAAiB,EAAE,CAAC;YACtD,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,OAAkC;IAElC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAC;IAE7C,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC;QACtC,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,UAAU,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;YAC/C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC3B,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,SAAiB,EACjB,eAA2C,EAC3C,WAAmB,EAAE;IAErB,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACzC,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,SAAS,GAAG,CAAC,IAAY,EAAE,KAAa;QACtC,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhB,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QAC3C,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,MAAM,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;YAEzC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;gBAChC,GAAG,CAAC,aAAa,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YAChC,CAAC;iBAAM,IAAI,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC7C,gBAAgB;gBAChB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;gBAC/C,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;oBACtB,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,CAAC;oBACzD,iDAAiD;oBACjD,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;wBACnE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACrB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,GAAG,EAAE,CAAC;QACX,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CACzC,IAAY,EACZ,OAAkC,EAClC,eAA4C;IAE5C,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,oBAAoB,GAA6B,EAAE,CAAC;IAE1D,sBAAsB;IACtB,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrD,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,oBAAoB,CAAC,IAAI,CAAC;YACxB,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,CAAC,IAAI,CAAC;YACb,MAAM,EAAE,CAAC;YACT,QAAQ,EAAE,OAAO;YACjB,WAAW,EAAE,4BAA4B,UAAU,GAAG;YACtD,WAAW,EAAE,6BAA6B,CAAC,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC;SAClE,CAAC,CAAC;IACL,CAAC;IAED,yDAAyD;IACzD,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,oBAAoB,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;QAErE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,kDAAkD;YAClD,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC9D,SAAS;YACX,CAAC;YAED,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACvC,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,6CAA6C;YAE9G,oBAAoB,CAAC,IAAI,CAAC;gBACxB,IAAI;gBACJ,KAAK;gBACL,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC;gBACxB,QAAQ;gBACR,WAAW,EAAE,wBAAwB,WAAW,CAAC,KAAK,CAAC,EAAE;gBACzD,WAAW,EAAE,6BAA6B,CAAC,KAAK,EAAE,IAAI,CAAC;aACxD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAC1C,KAAK,MAAM,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACvC,KAAK,MAAM,SAAS,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YAClC,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,OAAO;QACL,uBAAuB,EAAE,oBAAoB,CAAC,MAAM,GAAG,CAAC;QACxD,oBAAoB;QACpB,YAAY,EAAE,OAAO,CAAC,MAAM;QAC5B,eAAe,EAAE,eAAe,CAAC,IAAI;QACrC,WAAW;KACZ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAC5B,OAAkC,EAClC,UAAkB;IAElB,MAAM,gBAAgB,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAEnD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,MAAM,CAAC;QACpD,IAAI,aAAa,CAAC,YAAY,CAAC,KAAK,gBAAgB,EAAE,CAAC;YACrD,OAAO,GAAG,CAAC,IAAI,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,CAAC,CAAC,qCAAqC;AACjD,CAAC;AAED,+EAA+E;AAC/E,uCAAuC;AACvC,+EAA+E;AAE/E;;;;;;;;;GASG;AACH,MAAM,OAAO,4BAA6B,SAAQ,kBAAkB;IACzD,EAAE,GAAG,0BAA0B,CAAC;IAChC,QAAQ,GAAG,YAAqB,CAAC;IACjC,WAAW,GAAG,uBAAuB,CAAC;IACtC,IAAI,GAAG,gCAAgC,CAAC;IACxC,WAAW,GAAG,mFAAmF,CAAC;IAClG,kBAAkB,GAAe;QACxC,YAAY;QACZ,YAAY;KACb,CAAC;IAEF;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,OAAyB;QACpC,MAAM,QAAQ,GAAmB,EAAE,CAAC;QACpC,MAAM,UAAU,GAAgB,EAAE,CAAC;QAEnC,+BAA+B;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAE7C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;QACtD,CAAC;QAED,yDAAyD;QACzD,MAAM,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,eAAe,EAAE,eAAe,CAAC;QAEhF,gCAAgC;QAChC,MAAM,QAAQ,GAAG,2BAA2B,CAC1C,OAAO,CAAC,IAAI,EACZ,OAAO,EACP,eAAe,CAChB,CAAC;QAEF,kFAAkF;QAClF,IAAI,CAAC,QAAQ,CAAC,uBAAuB,EAAE,CAAC;YACtC,QAAQ,CAAC,IAAI,CAAC;gBACZ,SAAS,EAAE,qBAAqB;gBAChC,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;gBACpD,UAAU,EAAE,GAAG;gBACf,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;YACH,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;QACtD,CAAC;QAED,iDAAiD;QACjD,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,oBAAoB,EAAE,CAAC;YACpD,MAAM,SAAS,GAAG,IAAI,CAAC,iCAAiC,CACtD,OAAO,CAAC,IAAI,EACZ,OAAO,EACP,OAAO,CACR,CAAC;YACF,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAE3B,2CAA2C;YAC3C,QAAQ,CAAC,IAAI,CAAC;gBACZ,SAAS,EAAE,iBAAiB,OAAO,CAAC,IAAI,EAAE;gBAC1C,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;gBACjF,UAAU,EAAE,GAAG;gBACf,SAAS,EAAE,IAAI,EAAE,wDAAwD;aAC1E,CAAC,CAAC;QACL,CAAC;QAED,2DAA2D;QAC3D,MAAM,gBAAgB,GAAG,QAAQ,CAAC,YAAY,GAAG,CAAC;YAChD,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ,CAAC,YAAY;YAC5E,CAAC,CAAC,GAAG,CAAC;QAER,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;IACnE,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,SAAoB;QACnC,6DAA6D;QAC7D,uDAAuD;QAEvD,IAAI,SAAS,CAAC,SAAS,KAAK,sCAAsC,EAAE,CAAC;YACnE,OAAO;gBACL,KAAK,EAAE,oBAAoB;gBAC3B,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE;oBACJ,OAAO,EAAE,EAAE;oBACX,eAAe,EAAE,EAAE;iBACpB;gBACD,WAAW,EAAE,IAAI;gBACjB,UAAU,EAAE,GAAG;gBACf,OAAO,EAAE,2DAA2D;aACrE,CAAC;QACJ,CAAC;QAED,IAAI,SAAS,CAAC,SAAS,KAAK,iCAAiC;YACzD,SAAS,CAAC,SAAS,KAAK,mCAAmC,EAAE,CAAC;YAChE,OAAO;gBACL,KAAK,EAAE,2BAA2B;gBAClC,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE;oBACJ,OAAO,EAAE,EAAE;oBACX,eAAe,EAAE,EAAE;iBACpB;gBACD,WAAW,EAAE,KAAK;gBAClB,UAAU,EAAE,GAAG;gBACf,OAAO,EAAE,SAAS,CAAC,WAAW,IAAI,mDAAmD;aACtF,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,OAAyB;QAC9C,MAAM,OAAO,GAA8B,EAAE,CAAC;QAE9C,wCAAwC;QACxC,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBAClC,OAAO,CAAC,IAAI,CAAC;oBACX,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,YAAY,EAAE,GAAG,CAAC,YAAY;oBAC9B,IAAI,EAAE,GAAG,CAAC,IAAI;iBACf,CAAC,CAAC;YACL,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,2CAA2C;QAC3C,MAAM,WAAW,GAAG,6GAA6G,CAAC;QAClI,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YACvB,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,IAAI,CAAC;oBACX,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;oBAChB,IAAI,EAAE,CAAC,GAAG,CAAC;iBACZ,CAAC,CAAC;YACL,CAAC;YACD,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,oBAAoB;QACjD,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,iCAAiC,CACvC,IAAY,EACZ,OAA+B,EAC/B,OAAkC;QAElC,2DAA2D;QAC3D,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClF,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,qBAAqB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzE,MAAM,KAAK,GAAU;YACnB,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE;YACvC,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE;SACxC,CAAC;QAEF,MAAM,SAAS,GAAc;YAC3B,EAAE,EAAE,iBAAiB,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE;YACjE,SAAS,EAAE,4BAA4B,OAAO,CAAC,IAAI,EAAE;YACrD,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,IAAI;YACJ,KAAK;YACL,OAAO,EAAE,OAAO,CAAC,WAAW;YAC5B,QAAQ,EAAE,0BAA0B;YACpC,MAAM,EAAE,iCAAiC,OAAO,CAAC,MAAM,EAAE;YACzD,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;YAC7C,kBAAkB,EAAE,IAAI;YACxB,cAAc,EAAE,KAAK;YACrB,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,WAAW,EAAE,CAAC;SACf,CAAC;QAEF,iCAAiC;QACjC,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YACnC,SAAS,CAAC,QAAQ,GAAG;gBACnB,KAAK,EAAE,oBAAoB;gBAC3B,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE;oBACJ,OAAO,EAAE,EAAE;oBACX,eAAe,EAAE,EAAE;iBACpB;gBACD,WAAW,EAAE,IAAI;gBACjB,UAAU,EAAE,GAAG;aAChB,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAED,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,kCAAkC;IAChD,OAAO,IAAI,4BAA4B,EAAE,CAAC;AAC5C,CAAC"}