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,500 @@
1
+ /**
2
+ * Component Structure Detector - Component file structure detection
3
+ *
4
+ * Detects single file vs split patterns for UI components.
5
+ * Identifies component folder patterns and reports violations when
6
+ * components don't follow the dominant pattern.
7
+ *
8
+ * @requirements 8.1 - THE Component_Detector SHALL detect component file structure patterns (single file vs split)
9
+ */
10
+ import { StructuralDetector } from '../base/index.js';
11
+ // ============================================================================
12
+ // Constants
13
+ // ============================================================================
14
+ /**
15
+ * File extensions that indicate a component file
16
+ */
17
+ export const COMPONENT_EXTENSIONS = ['.tsx', '.jsx'];
18
+ /**
19
+ * Patterns for identifying component-related files
20
+ * Order matters - more specific patterns should be checked first
21
+ */
22
+ export const COMPONENT_FILE_PATTERNS = {
23
+ // More specific patterns first
24
+ test: [/\.(test|spec)\.(ts|tsx|js|jsx)$/],
25
+ stories: [/\.stories\.(ts|tsx|js|jsx|mdx)$/],
26
+ styles: [
27
+ /\.styles?\.(ts|js|tsx|jsx)$/,
28
+ /\.module\.(css|scss|sass|less)$/,
29
+ /\.styled\.(ts|js|tsx|jsx)$/,
30
+ /\.(css|scss|sass|less)$/,
31
+ ],
32
+ hooks: [/\.hooks?\.(ts|tsx)$/, /^use[A-Z].*\.(ts|tsx)$/],
33
+ types: [/\.types?\.(ts|tsx)$/, /\.d\.ts$/],
34
+ utils: [/\.utils?\.(ts|tsx|js|jsx)$/],
35
+ constants: [/\.constants?\.(ts|tsx|js|jsx)$/],
36
+ index: [/^index\.(ts|tsx|js|jsx)$/],
37
+ // Generic component pattern last
38
+ component: [/\.(tsx|jsx)$/],
39
+ other: [],
40
+ };
41
+ /**
42
+ * Common component folder patterns
43
+ */
44
+ export const COMPONENT_FOLDER_INDICATORS = [
45
+ 'components',
46
+ 'ui',
47
+ 'common',
48
+ 'shared',
49
+ 'atoms',
50
+ 'molecules',
51
+ 'organisms',
52
+ 'templates',
53
+ 'pages',
54
+ 'views',
55
+ 'screens',
56
+ 'widgets',
57
+ 'features',
58
+ ];
59
+ // ============================================================================
60
+ // Helper Functions
61
+ // ============================================================================
62
+ /**
63
+ * Determine the file type of a component-related file
64
+ * Checks more specific patterns first before generic component pattern
65
+ */
66
+ export function getComponentFileType(fileName) {
67
+ const lowerFileName = fileName.toLowerCase();
68
+ // Check patterns in order of specificity (most specific first)
69
+ // This order is important to avoid generic patterns matching before specific ones
70
+ const checkOrder = [
71
+ 'test',
72
+ 'stories',
73
+ 'styles',
74
+ 'hooks',
75
+ 'types',
76
+ 'utils',
77
+ 'constants',
78
+ 'index',
79
+ 'component', // Generic component pattern last
80
+ ];
81
+ for (const type of checkOrder) {
82
+ const patterns = COMPONENT_FILE_PATTERNS[type];
83
+ if (!patterns)
84
+ continue;
85
+ for (const pattern of patterns) {
86
+ if (pattern.test(lowerFileName) || pattern.test(fileName)) {
87
+ return type;
88
+ }
89
+ }
90
+ }
91
+ return 'other';
92
+ }
93
+ /**
94
+ * Extract component name from a file path
95
+ */
96
+ export function extractComponentName(filePath) {
97
+ const normalizedPath = filePath.replace(/\\/g, '/');
98
+ const segments = normalizedPath.split('/').filter(s => s.length > 0);
99
+ const fileName = segments[segments.length - 1] || '';
100
+ // Remove extension and suffixes
101
+ let baseName = fileName
102
+ .replace(/\.(tsx|jsx|ts|js)$/, '')
103
+ .replace(/\.(test|spec|stories|styles|hooks|types|utils|constants|module)$/, '')
104
+ .replace(/\.(css|scss|sass|less)$/, '');
105
+ // If it's an index file, use the parent folder name
106
+ if (baseName.toLowerCase() === 'index' && segments.length > 1) {
107
+ baseName = segments[segments.length - 2] || baseName;
108
+ }
109
+ return baseName;
110
+ }
111
+ /**
112
+ * Check if a file is likely a component file
113
+ */
114
+ export function isComponentFile(filePath) {
115
+ const normalizedPath = filePath.replace(/\\/g, '/').toLowerCase();
116
+ // Must have a component extension
117
+ if (!COMPONENT_EXTENSIONS.some(ext => normalizedPath.endsWith(ext))) {
118
+ return false;
119
+ }
120
+ // Exclude test files
121
+ if (/\.(test|spec)\.(tsx|jsx)$/.test(normalizedPath)) {
122
+ return false;
123
+ }
124
+ // Exclude stories files
125
+ if (/\.stories\.(tsx|jsx)$/.test(normalizedPath)) {
126
+ return false;
127
+ }
128
+ return true;
129
+ }
130
+ /**
131
+ * Check if a directory is likely a component folder
132
+ */
133
+ export function isComponentFolder(folderPath, files) {
134
+ const normalizedPath = folderPath.replace(/\\/g, '/');
135
+ const folderName = normalizedPath.split('/').pop() || '';
136
+ // Check if folder name starts with uppercase (PascalCase component)
137
+ if (/^[A-Z]/.test(folderName)) {
138
+ // Check if it contains component files
139
+ const folderFiles = files.filter(f => f.replace(/\\/g, '/').startsWith(normalizedPath + '/'));
140
+ return folderFiles.some(f => isComponentFile(f));
141
+ }
142
+ return false;
143
+ }
144
+ /**
145
+ * Get all files in a component folder
146
+ */
147
+ export function getComponentFolderFiles(folderPath, allFiles) {
148
+ const normalizedFolder = folderPath.replace(/\\/g, '/');
149
+ return allFiles.filter(f => {
150
+ const normalizedFile = f.replace(/\\/g, '/');
151
+ // Direct children only (not nested folders)
152
+ const relativePath = normalizedFile.slice(normalizedFolder.length + 1);
153
+ return normalizedFile.startsWith(normalizedFolder + '/') && !relativePath.includes('/');
154
+ });
155
+ }
156
+ /**
157
+ * Determine the structure type of a component
158
+ */
159
+ export function determineStructureType(mainFile, relatedFiles) {
160
+ const normalizedMain = mainFile.replace(/\\/g, '/');
161
+ const segments = normalizedMain.split('/');
162
+ const fileName = segments[segments.length - 1] || '';
163
+ const folderName = segments.length > 1 ? segments[segments.length - 2] : undefined;
164
+ // Check for folder-based patterns
165
+ if (folderName && /^[A-Z]/.test(folderName)) {
166
+ const baseFileName = fileName.replace(/\.(tsx|jsx)$/, '');
167
+ // Button/index.tsx pattern
168
+ if (baseFileName.toLowerCase() === 'index') {
169
+ return 'folder-index';
170
+ }
171
+ // Button/Button.tsx pattern
172
+ if (baseFileName === folderName) {
173
+ return 'folder-named';
174
+ }
175
+ }
176
+ // Check for split-file pattern (has related files like .styles.ts, .hooks.ts)
177
+ const hasRelatedFiles = relatedFiles.some(f => {
178
+ const type = getComponentFileType(f.split('/').pop() || '');
179
+ return ['styles', 'hooks', 'types', 'utils', 'constants'].includes(type);
180
+ });
181
+ if (hasRelatedFiles) {
182
+ return 'split-file';
183
+ }
184
+ // Default to single-file
185
+ return 'single-file';
186
+ }
187
+ /**
188
+ * Find related files for a component
189
+ */
190
+ export function findRelatedFiles(componentName, componentPath, allFiles) {
191
+ const normalizedPath = componentPath.replace(/\\/g, '/');
192
+ const directory = normalizedPath.split('/').slice(0, -1).join('/');
193
+ return allFiles.filter(f => {
194
+ const normalizedFile = f.replace(/\\/g, '/');
195
+ if (normalizedFile === normalizedPath)
196
+ return false;
197
+ // Same directory
198
+ const fileDir = normalizedFile.split('/').slice(0, -1).join('/');
199
+ if (fileDir !== directory)
200
+ return false;
201
+ // Check if file name contains the component name
202
+ const fileName = normalizedFile.split('/').pop() || '';
203
+ const fileBaseName = extractComponentName(normalizedFile);
204
+ return fileBaseName.toLowerCase() === componentName.toLowerCase() ||
205
+ fileName.toLowerCase().startsWith(componentName.toLowerCase() + '.');
206
+ });
207
+ }
208
+ /**
209
+ * Detect all components in a project
210
+ */
211
+ export function detectComponents(files) {
212
+ const components = [];
213
+ const processedFiles = new Set();
214
+ // First, find all component folders
215
+ const folders = new Set();
216
+ for (const file of files) {
217
+ const normalizedFile = file.replace(/\\/g, '/');
218
+ const segments = normalizedFile.split('/');
219
+ for (let i = 0; i < segments.length - 1; i++) {
220
+ const folderPath = segments.slice(0, i + 1).join('/');
221
+ const folderName = segments[i];
222
+ // Check if this is a PascalCase folder (potential component folder)
223
+ if (folderName && /^[A-Z]/.test(folderName)) {
224
+ folders.add(folderPath);
225
+ }
226
+ }
227
+ }
228
+ // Process component folders
229
+ for (const folder of folders) {
230
+ const folderFiles = getComponentFolderFiles(folder, files);
231
+ const componentFiles = folderFiles.filter(f => isComponentFile(f));
232
+ if (componentFiles.length === 0)
233
+ continue;
234
+ const folderName = folder.split('/').pop() || '';
235
+ // Find the main component file
236
+ let mainFile = componentFiles.find(f => {
237
+ const fileName = f.split('/').pop()?.replace(/\.(tsx|jsx)$/, '') || '';
238
+ return fileName === folderName || fileName.toLowerCase() === 'index';
239
+ });
240
+ if (!mainFile) {
241
+ mainFile = componentFiles[0];
242
+ }
243
+ if (!mainFile)
244
+ continue;
245
+ const componentFileInfos = folderFiles.map(f => ({
246
+ path: f,
247
+ componentName: folderName,
248
+ fileType: getComponentFileType(f.split('/').pop() || ''),
249
+ folderName,
250
+ isMainFile: f === mainFile,
251
+ }));
252
+ const structureType = determineStructureType(mainFile, folderFiles);
253
+ components.push({
254
+ name: folderName,
255
+ structureType,
256
+ files: componentFileInfos,
257
+ mainFile,
258
+ folderPath: folder,
259
+ });
260
+ // Mark files as processed
261
+ folderFiles.forEach(f => processedFiles.add(f.replace(/\\/g, '/')));
262
+ }
263
+ // Process standalone component files
264
+ for (const file of files) {
265
+ const normalizedFile = file.replace(/\\/g, '/');
266
+ if (processedFiles.has(normalizedFile))
267
+ continue;
268
+ if (!isComponentFile(file))
269
+ continue;
270
+ const componentName = extractComponentName(file);
271
+ if (!componentName || !/^[A-Z]/.test(componentName))
272
+ continue;
273
+ const relatedFiles = findRelatedFiles(componentName, file, files);
274
+ const structureType = determineStructureType(file, relatedFiles);
275
+ const allComponentFiles = [file, ...relatedFiles];
276
+ const componentFileInfos = allComponentFiles.map(f => ({
277
+ path: f,
278
+ componentName,
279
+ fileType: getComponentFileType(f.split('/').pop() || ''),
280
+ folderName: undefined,
281
+ isMainFile: f === file,
282
+ }));
283
+ components.push({
284
+ name: componentName,
285
+ structureType,
286
+ files: componentFileInfos,
287
+ mainFile: file,
288
+ folderPath: undefined,
289
+ });
290
+ // Mark files as processed
291
+ allComponentFiles.forEach(f => processedFiles.add(f.replace(/\\/g, '/')));
292
+ }
293
+ return components;
294
+ }
295
+ /**
296
+ * Analyze component structure patterns in a project
297
+ */
298
+ export function analyzeComponentStructure(files) {
299
+ const components = detectComponents(files);
300
+ // Count by structure type
301
+ const typeCounts = {
302
+ 'single-file': 0,
303
+ 'split-file': 0,
304
+ 'folder-index': 0,
305
+ 'folder-named': 0,
306
+ 'unknown': 0,
307
+ };
308
+ for (const component of components) {
309
+ typeCounts[component.structureType]++;
310
+ }
311
+ // Determine dominant type
312
+ let dominantType = 'unknown';
313
+ let maxCount = 0;
314
+ for (const [type, count] of Object.entries(typeCounts)) {
315
+ if (count > maxCount && type !== 'unknown') {
316
+ maxCount = count;
317
+ dominantType = type;
318
+ }
319
+ }
320
+ // Calculate confidence
321
+ const totalComponents = components.filter(c => c.structureType !== 'unknown').length;
322
+ const confidence = totalComponents > 0 ? maxCount / totalComponents : 0;
323
+ // Find inconsistent components
324
+ const inconsistentComponents = components.filter(c => c.structureType !== dominantType && c.structureType !== 'unknown');
325
+ return {
326
+ components,
327
+ dominantType,
328
+ confidence,
329
+ typeCounts,
330
+ inconsistentComponents,
331
+ };
332
+ }
333
+ /**
334
+ * Generate a suggested restructure for a component
335
+ */
336
+ export function suggestRestructure(component, targetType) {
337
+ const { name, structureType, mainFile } = component;
338
+ if (structureType === targetType) {
339
+ return mainFile;
340
+ }
341
+ const directory = mainFile.replace(/\\/g, '/').split('/').slice(0, -1).join('/');
342
+ switch (targetType) {
343
+ case 'folder-index':
344
+ return `${directory}/${name}/index.tsx`;
345
+ case 'folder-named':
346
+ return `${directory}/${name}/${name}.tsx`;
347
+ case 'single-file':
348
+ return `${directory}/${name}.tsx`;
349
+ case 'split-file':
350
+ return mainFile; // Keep main file, suggest adding related files
351
+ default:
352
+ return mainFile;
353
+ }
354
+ }
355
+ // ============================================================================
356
+ // Component Structure Detector Class
357
+ // ============================================================================
358
+ /**
359
+ * Detector for component structure patterns
360
+ *
361
+ * Identifies whether components use single-file, split-file, or folder-based
362
+ * organization and detects inconsistencies.
363
+ *
364
+ * @requirements 8.1 - THE Component_Detector SHALL detect component file structure patterns
365
+ */
366
+ export class ComponentStructureDetector extends StructuralDetector {
367
+ id = 'components/component-structure';
368
+ category = 'components';
369
+ subcategory = 'file-structure';
370
+ name = 'Component Structure Detector';
371
+ description = 'Detects component file structure patterns (single file vs split) and identifies inconsistencies';
372
+ supportedLanguages = ['typescript', 'javascript'];
373
+ /**
374
+ * Detect component structure patterns in the project
375
+ */
376
+ async detect(context) {
377
+ const patterns = [];
378
+ const violations = [];
379
+ // Analyze the entire project's component structure
380
+ const analysis = analyzeComponentStructure(context.projectContext.files);
381
+ // Create pattern match for the detected dominant structure
382
+ if (analysis.dominantType !== 'unknown' && analysis.confidence > 0.3) {
383
+ patterns.push(this.createStructurePattern(context.file, analysis));
384
+ }
385
+ // Create patterns for each structure type found
386
+ for (const [type, count] of Object.entries(analysis.typeCounts)) {
387
+ if (count > 0 && type !== 'unknown') {
388
+ patterns.push(this.createTypePattern(context.file, type, count, analysis));
389
+ }
390
+ }
391
+ // Generate violations for inconsistent components
392
+ for (const inconsistent of analysis.inconsistentComponents) {
393
+ // Only report if the current file is part of this component
394
+ if (this.isFileInComponent(context.file, inconsistent)) {
395
+ const violation = this.createInconsistencyViolation(context.file, inconsistent, analysis.dominantType);
396
+ if (violation) {
397
+ violations.push(violation);
398
+ }
399
+ }
400
+ }
401
+ return this.createResult(patterns, violations, analysis.confidence);
402
+ }
403
+ /**
404
+ * Generate a quick fix for component structure violations
405
+ */
406
+ generateQuickFix(violation) {
407
+ // Extract target structure from the violation message
408
+ const match = violation.message.match(/restructure to '([^']+)'/);
409
+ if (!match || !match[1]) {
410
+ return null;
411
+ }
412
+ const suggestedPath = match[1];
413
+ return {
414
+ title: `Move to ${suggestedPath}`,
415
+ kind: 'refactor',
416
+ edit: {
417
+ changes: {},
418
+ documentChanges: [
419
+ { uri: violation.file, edits: [] },
420
+ { uri: suggestedPath, edits: [] },
421
+ ],
422
+ },
423
+ isPreferred: true,
424
+ confidence: 0.7,
425
+ preview: `Restructure component to follow ${violation.expected} pattern`,
426
+ };
427
+ }
428
+ /**
429
+ * Check if a file is part of a component
430
+ */
431
+ isFileInComponent(file, component) {
432
+ const normalizedFile = file.replace(/\\/g, '/');
433
+ return component.files.some(f => f.path.replace(/\\/g, '/') === normalizedFile);
434
+ }
435
+ /**
436
+ * Create a pattern match for the dominant structure type
437
+ */
438
+ createStructurePattern(file, analysis) {
439
+ return {
440
+ patternId: `component-structure-${analysis.dominantType}`,
441
+ location: { file, line: 1, column: 1 },
442
+ confidence: analysis.confidence,
443
+ isOutlier: false,
444
+ };
445
+ }
446
+ /**
447
+ * Create a pattern match for a specific structure type
448
+ */
449
+ createTypePattern(file, type, count, analysis) {
450
+ const total = analysis.components.filter(c => c.structureType !== 'unknown').length;
451
+ const confidence = total > 0 ? count / total : 0;
452
+ return {
453
+ patternId: `component-structure-type-${type}`,
454
+ location: { file, line: 1, column: 1 },
455
+ confidence,
456
+ isOutlier: confidence < 0.3,
457
+ };
458
+ }
459
+ /**
460
+ * Create a violation for an inconsistent component
461
+ */
462
+ createInconsistencyViolation(file, component, dominantType) {
463
+ const suggestedPath = suggestRestructure(component, dominantType);
464
+ const range = {
465
+ start: { line: 1, character: 1 },
466
+ end: { line: 1, character: 1 },
467
+ };
468
+ const structureDescriptions = {
469
+ 'single-file': 'single file (component, styles, and logic in one file)',
470
+ 'split-file': 'split files (component.tsx, component.styles.ts, component.hooks.ts)',
471
+ 'folder-index': 'folder with index (Component/index.tsx)',
472
+ 'folder-named': 'folder with named file (Component/Component.tsx)',
473
+ 'unknown': 'unknown',
474
+ };
475
+ return {
476
+ id: `component-structure-${component.name}-${file.replace(/[^a-zA-Z0-9]/g, '-')}`,
477
+ patternId: 'components/component-structure',
478
+ severity: 'warning',
479
+ file,
480
+ range,
481
+ message: `Component '${component.name}' uses ${structureDescriptions[component.structureType]} but project uses ${structureDescriptions[dominantType]}. Consider restructure to '${suggestedPath}'`,
482
+ expected: structureDescriptions[dominantType],
483
+ actual: structureDescriptions[component.structureType],
484
+ aiExplainAvailable: true,
485
+ aiFixAvailable: false,
486
+ firstSeen: new Date(),
487
+ occurrences: 1,
488
+ };
489
+ }
490
+ }
491
+ // ============================================================================
492
+ // Factory Function
493
+ // ============================================================================
494
+ /**
495
+ * Create a new ComponentStructureDetector instance
496
+ */
497
+ export function createComponentStructureDetector() {
498
+ return new ComponentStructureDetector();
499
+ }
500
+ //# sourceMappingURL=component-structure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-structure.js","sourceRoot":"","sources":["../../src/components/component-structure.ts"],"names":[],"mappings":"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"}