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,416 @@
1
+ /**
2
+ * XSS Prevention Detector - Cross-Site Scripting prevention pattern detection
3
+ *
4
+ * Detects XSS prevention patterns including:
5
+ * - HTML encoding/escaping
6
+ * - Content sanitization (DOMPurify, sanitize-html)
7
+ * - React's built-in XSS protection
8
+ * - CSP nonce usage
9
+ * - Dangerous patterns (innerHTML, dangerouslySetInnerHTML)
10
+ *
11
+ * @requirements 16.3 - XSS prevention patterns
12
+ */
13
+ import { RegexDetector } from '../base/regex-detector.js';
14
+ // ============================================================================
15
+ // Constants
16
+ // ============================================================================
17
+ export const HTML_ESCAPE_PATTERNS = [
18
+ // TypeScript/JavaScript patterns
19
+ /escapeHtml\s*\(/gi,
20
+ /htmlEscape\s*\(/gi,
21
+ /encodeHTML\s*\(/gi,
22
+ /htmlEncode\s*\(/gi,
23
+ /escape\s*\(\s*['"`]html['"`]/gi,
24
+ /he\.encode\s*\(/gi,
25
+ /entities\.encode\s*\(/gi,
26
+ /\.replace\s*\(\s*\/[<>&'"]/gi,
27
+ // Python patterns - html.escape, markupsafe
28
+ /html\.escape\s*\(/gi,
29
+ /markupsafe\.escape\s*\(/gi,
30
+ /Markup\s*\(/gi,
31
+ /escape_html\s*\(/gi,
32
+ /cgi\.escape\s*\(/gi,
33
+ ];
34
+ export const DOMPURIFY_PATTERNS = [
35
+ /DOMPurify\.sanitize\s*\(/gi,
36
+ /purify\.sanitize\s*\(/gi,
37
+ /createDOMPurify\s*\(/gi,
38
+ /import.*DOMPurify/gi,
39
+ /require\s*\(\s*['"`]dompurify['"`]\s*\)/gi,
40
+ ];
41
+ export const SANITIZE_HTML_PATTERNS = [
42
+ /sanitizeHtml\s*\(/gi,
43
+ /sanitize-html/gi,
44
+ /xss\s*\(/gi,
45
+ /filterXSS\s*\(/gi,
46
+ /import.*sanitize-html/gi,
47
+ /import.*xss/gi,
48
+ ];
49
+ export const REACT_ESCAPE_PATTERNS = [
50
+ /React\.createElement\s*\(/gi,
51
+ /jsx\s*\(/gi,
52
+ /\{[^}]+\}/g, // JSX expressions (auto-escaped)
53
+ /createTextNode\s*\(/gi,
54
+ ];
55
+ export const CSP_NONCE_PATTERNS = [
56
+ /nonce\s*[=:]\s*['"`][^'"`]+['"`]/gi,
57
+ /nonce-[a-zA-Z0-9+/=]+/gi,
58
+ /script-src[^;]*'nonce-/gi,
59
+ /style-src[^;]*'nonce-/gi,
60
+ ];
61
+ export const ENCODE_URI_PATTERNS = [
62
+ /encodeURIComponent\s*\(/gi,
63
+ /encodeURI\s*\(/gi,
64
+ /escape\s*\(/gi,
65
+ /urlEncode\s*\(/gi,
66
+ ];
67
+ export const TEXT_CONTENT_PATTERNS = [
68
+ /\.textContent\s*=/gi,
69
+ /\.innerText\s*=/gi,
70
+ /createTextNode\s*\(/gi,
71
+ ];
72
+ export const DANGEROUS_INNER_HTML_PATTERNS = [
73
+ /dangerouslySetInnerHTML\s*=\s*\{\s*\{/gi,
74
+ /dangerouslySetInnerHTML:\s*\{/gi,
75
+ ];
76
+ export const DOCUMENT_WRITE_PATTERNS = [
77
+ /document\.write\s*\(/gi,
78
+ /document\.writeln\s*\(/gi,
79
+ ];
80
+ export const EVAL_USAGE_PATTERNS = [
81
+ // TypeScript/JavaScript patterns
82
+ /\beval\s*\(/gi,
83
+ /new\s+Function\s*\(/gi,
84
+ /setTimeout\s*\(\s*['"`]/gi,
85
+ /setInterval\s*\(\s*['"`]/gi,
86
+ // Python patterns - exec, eval
87
+ /\bexec\s*\(/gi,
88
+ /\beval\s*\(/gi,
89
+ /compile\s*\([^)]*,\s*['"`]\w+['"`]\s*,\s*['"`]exec['"`]/gi,
90
+ ];
91
+ export const INNER_HTML_ASSIGNMENT_PATTERNS = [
92
+ /\.innerHTML\s*=/gi,
93
+ /\.innerHTML\s*\+=/gi,
94
+ ];
95
+ export const OUTER_HTML_ASSIGNMENT_PATTERNS = [
96
+ /\.outerHTML\s*=/gi,
97
+ ];
98
+ export const SCRIPT_INJECTION_PATTERNS = [
99
+ /createElement\s*\(\s*['"`]script['"`]\s*\)/gi,
100
+ /insertAdjacentHTML\s*\(/gi,
101
+ /\.html\s*\(\s*[^)]+\)/gi,
102
+ ];
103
+ // ============================================================================
104
+ // Analysis Functions
105
+ // ============================================================================
106
+ export function shouldExcludeFile(filePath) {
107
+ const excludePatterns = [
108
+ /\.test\.[jt]sx?$/,
109
+ /\.spec\.[jt]sx?$/,
110
+ /__tests__\//,
111
+ /\.d\.ts$/,
112
+ /node_modules\//,
113
+ /\.min\.[jt]s$/,
114
+ ];
115
+ return excludePatterns.some((p) => p.test(filePath));
116
+ }
117
+ export function detectHTMLEscape(content, filePath) {
118
+ const results = [];
119
+ const lines = content.split('\n');
120
+ for (let i = 0; i < lines.length; i++) {
121
+ const line = lines[i];
122
+ for (const pattern of HTML_ESCAPE_PATTERNS) {
123
+ const regex = new RegExp(pattern.source, pattern.flags);
124
+ let match;
125
+ while ((match = regex.exec(line)) !== null) {
126
+ results.push({
127
+ type: 'html-escape',
128
+ file: filePath,
129
+ line: i + 1,
130
+ column: match.index + 1,
131
+ matchedText: match[0],
132
+ context: line.trim(),
133
+ });
134
+ }
135
+ }
136
+ }
137
+ return results;
138
+ }
139
+ export function detectDOMPurifySanitize(content, filePath) {
140
+ const results = [];
141
+ const lines = content.split('\n');
142
+ for (let i = 0; i < lines.length; i++) {
143
+ const line = lines[i];
144
+ for (const pattern of DOMPURIFY_PATTERNS) {
145
+ const regex = new RegExp(pattern.source, pattern.flags);
146
+ let match;
147
+ while ((match = regex.exec(line)) !== null) {
148
+ results.push({
149
+ type: 'dompurify-sanitize',
150
+ file: filePath,
151
+ line: i + 1,
152
+ column: match.index + 1,
153
+ matchedText: match[0],
154
+ library: 'dompurify',
155
+ context: line.trim(),
156
+ });
157
+ }
158
+ }
159
+ }
160
+ return results;
161
+ }
162
+ export function detectSanitizeHTML(content, filePath) {
163
+ const results = [];
164
+ const lines = content.split('\n');
165
+ for (let i = 0; i < lines.length; i++) {
166
+ const line = lines[i];
167
+ for (const pattern of SANITIZE_HTML_PATTERNS) {
168
+ const regex = new RegExp(pattern.source, pattern.flags);
169
+ let match;
170
+ while ((match = regex.exec(line)) !== null) {
171
+ results.push({
172
+ type: 'sanitize-html',
173
+ file: filePath,
174
+ line: i + 1,
175
+ column: match.index + 1,
176
+ matchedText: match[0],
177
+ library: 'sanitize-html',
178
+ context: line.trim(),
179
+ });
180
+ }
181
+ }
182
+ }
183
+ return results;
184
+ }
185
+ export function detectCSPNonce(content, filePath) {
186
+ const results = [];
187
+ const lines = content.split('\n');
188
+ for (let i = 0; i < lines.length; i++) {
189
+ const line = lines[i];
190
+ for (const pattern of CSP_NONCE_PATTERNS) {
191
+ const regex = new RegExp(pattern.source, pattern.flags);
192
+ let match;
193
+ while ((match = regex.exec(line)) !== null) {
194
+ results.push({
195
+ type: 'csp-nonce',
196
+ file: filePath,
197
+ line: i + 1,
198
+ column: match.index + 1,
199
+ matchedText: match[0],
200
+ context: line.trim(),
201
+ });
202
+ }
203
+ }
204
+ }
205
+ return results;
206
+ }
207
+ export function detectEncodeURI(content, filePath) {
208
+ const results = [];
209
+ const lines = content.split('\n');
210
+ for (let i = 0; i < lines.length; i++) {
211
+ const line = lines[i];
212
+ for (const pattern of ENCODE_URI_PATTERNS) {
213
+ const regex = new RegExp(pattern.source, pattern.flags);
214
+ let match;
215
+ while ((match = regex.exec(line)) !== null) {
216
+ results.push({
217
+ type: 'encode-uri',
218
+ file: filePath,
219
+ line: i + 1,
220
+ column: match.index + 1,
221
+ matchedText: match[0],
222
+ context: line.trim(),
223
+ });
224
+ }
225
+ }
226
+ }
227
+ return results;
228
+ }
229
+ export function detectTextContent(content, filePath) {
230
+ const results = [];
231
+ const lines = content.split('\n');
232
+ for (let i = 0; i < lines.length; i++) {
233
+ const line = lines[i];
234
+ for (const pattern of TEXT_CONTENT_PATTERNS) {
235
+ const regex = new RegExp(pattern.source, pattern.flags);
236
+ let match;
237
+ while ((match = regex.exec(line)) !== null) {
238
+ results.push({
239
+ type: 'text-content',
240
+ file: filePath,
241
+ line: i + 1,
242
+ column: match.index + 1,
243
+ matchedText: match[0],
244
+ context: line.trim(),
245
+ });
246
+ }
247
+ }
248
+ }
249
+ return results;
250
+ }
251
+ export function detectDangerousInnerHTMLViolations(content, filePath) {
252
+ const results = [];
253
+ const lines = content.split('\n');
254
+ for (let i = 0; i < lines.length; i++) {
255
+ const line = lines[i];
256
+ for (const pattern of DANGEROUS_INNER_HTML_PATTERNS) {
257
+ const regex = new RegExp(pattern.source, pattern.flags);
258
+ let match;
259
+ while ((match = regex.exec(line)) !== null) {
260
+ results.push({
261
+ type: 'dangerous-inner-html',
262
+ file: filePath,
263
+ line: i + 1,
264
+ column: match.index + 1,
265
+ matchedText: match[0],
266
+ issue: 'dangerouslySetInnerHTML usage - ensure content is sanitized',
267
+ suggestedFix: 'Sanitize content with DOMPurify before using dangerouslySetInnerHTML',
268
+ severity: 'high',
269
+ });
270
+ }
271
+ }
272
+ }
273
+ return results;
274
+ }
275
+ export function detectDocumentWriteViolations(content, filePath) {
276
+ const results = [];
277
+ const lines = content.split('\n');
278
+ for (let i = 0; i < lines.length; i++) {
279
+ const line = lines[i];
280
+ for (const pattern of DOCUMENT_WRITE_PATTERNS) {
281
+ const regex = new RegExp(pattern.source, pattern.flags);
282
+ let match;
283
+ while ((match = regex.exec(line)) !== null) {
284
+ results.push({
285
+ type: 'document-write',
286
+ file: filePath,
287
+ line: i + 1,
288
+ column: match.index + 1,
289
+ matchedText: match[0],
290
+ issue: 'document.write usage - potential XSS vulnerability',
291
+ suggestedFix: 'Use DOM manipulation methods instead of document.write',
292
+ severity: 'high',
293
+ });
294
+ }
295
+ }
296
+ }
297
+ return results;
298
+ }
299
+ export function detectEvalViolations(content, filePath) {
300
+ const results = [];
301
+ const lines = content.split('\n');
302
+ for (let i = 0; i < lines.length; i++) {
303
+ const line = lines[i];
304
+ for (const pattern of EVAL_USAGE_PATTERNS) {
305
+ const regex = new RegExp(pattern.source, pattern.flags);
306
+ let match;
307
+ while ((match = regex.exec(line)) !== null) {
308
+ results.push({
309
+ type: 'eval-usage',
310
+ file: filePath,
311
+ line: i + 1,
312
+ column: match.index + 1,
313
+ matchedText: match[0],
314
+ issue: 'eval or Function constructor usage - potential code injection',
315
+ suggestedFix: 'Avoid eval and use safer alternatives like JSON.parse',
316
+ severity: 'high',
317
+ });
318
+ }
319
+ }
320
+ }
321
+ return results;
322
+ }
323
+ export function detectInnerHTMLViolations(content, filePath) {
324
+ const results = [];
325
+ const lines = content.split('\n');
326
+ for (let i = 0; i < lines.length; i++) {
327
+ const line = lines[i];
328
+ for (const pattern of INNER_HTML_ASSIGNMENT_PATTERNS) {
329
+ const regex = new RegExp(pattern.source, pattern.flags);
330
+ let match;
331
+ while ((match = regex.exec(line)) !== null) {
332
+ results.push({
333
+ type: 'inner-html-assignment',
334
+ file: filePath,
335
+ line: i + 1,
336
+ column: match.index + 1,
337
+ matchedText: match[0],
338
+ issue: 'innerHTML assignment - potential XSS if content is not sanitized',
339
+ suggestedFix: 'Use textContent for text or sanitize HTML with DOMPurify',
340
+ severity: 'medium',
341
+ });
342
+ }
343
+ }
344
+ }
345
+ return results;
346
+ }
347
+ export function analyzeXSSPrevention(content, filePath) {
348
+ if (shouldExcludeFile(filePath)) {
349
+ return {
350
+ patterns: [],
351
+ violations: [],
352
+ hasXSSPrevention: false,
353
+ hasViolations: false,
354
+ confidence: 1.0,
355
+ };
356
+ }
357
+ const patterns = [
358
+ ...detectHTMLEscape(content, filePath),
359
+ ...detectDOMPurifySanitize(content, filePath),
360
+ ...detectSanitizeHTML(content, filePath),
361
+ ...detectCSPNonce(content, filePath),
362
+ ...detectEncodeURI(content, filePath),
363
+ ...detectTextContent(content, filePath),
364
+ ];
365
+ const violations = [
366
+ ...detectDangerousInnerHTMLViolations(content, filePath),
367
+ ...detectDocumentWriteViolations(content, filePath),
368
+ ...detectEvalViolations(content, filePath),
369
+ ...detectInnerHTMLViolations(content, filePath),
370
+ ];
371
+ const hasXSSPrevention = patterns.length > 0;
372
+ const hasViolations = violations.length > 0;
373
+ const confidence = hasViolations ? 0.7 : hasXSSPrevention ? 0.95 : 0.8;
374
+ return {
375
+ patterns,
376
+ violations,
377
+ hasXSSPrevention,
378
+ hasViolations,
379
+ confidence,
380
+ };
381
+ }
382
+ // ============================================================================
383
+ // Detector Class
384
+ // ============================================================================
385
+ export class XSSPreventionDetector extends RegexDetector {
386
+ id = 'security/xss-prevention';
387
+ name = 'XSS Prevention Detector';
388
+ description = 'Detects XSS prevention patterns and identifies potential vulnerabilities';
389
+ category = 'security';
390
+ subcategory = 'xss-prevention';
391
+ supportedLanguages = ['typescript', 'javascript', 'python'];
392
+ async detect(context) {
393
+ if (!this.supportsLanguage(context.language)) {
394
+ return this.createEmptyResult();
395
+ }
396
+ const analysis = analyzeXSSPrevention(context.content, context.file);
397
+ if (analysis.patterns.length === 0 && analysis.violations.length === 0) {
398
+ return this.createEmptyResult();
399
+ }
400
+ return this.createResult([], [], analysis.confidence, {
401
+ custom: {
402
+ patterns: analysis.patterns,
403
+ violations: analysis.violations,
404
+ hasXSSPrevention: analysis.hasXSSPrevention,
405
+ hasViolations: analysis.hasViolations,
406
+ },
407
+ });
408
+ }
409
+ generateQuickFix(_violation) {
410
+ return null;
411
+ }
412
+ }
413
+ export function createXSSPreventionDetector() {
414
+ return new XSSPreventionDetector();
415
+ }
416
+ //# sourceMappingURL=xss-prevention.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xss-prevention.js","sourceRoot":"","sources":["../../src/security/xss-prevention.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Barrel Exports Detector - Index file pattern detection
3
+ *
4
+ * Detects index.ts/index.js usage patterns and export patterns.
5
+ * Identifies barrel files that re-export from other modules and
6
+ * analyzes consistency of barrel file usage across the project.
7
+ *
8
+ * @requirements 7.4 - THE Structural_Detector SHALL detect barrel/index file usage patterns
9
+ */
10
+ import type { Violation, QuickFix, Language } from 'driftdetect-core';
11
+ import { StructuralDetector, type DetectionContext, type DetectionResult } from '../base/index.js';
12
+ /**
13
+ * Types of barrel file patterns
14
+ */
15
+ export type BarrelPattern = 'consistent' | 'inconsistent' | 'none' | 'unknown';
16
+ /**
17
+ * Types of export patterns found in barrel files
18
+ */
19
+ export type ExportType = 'named-export' | 'namespace-export' | 'default-reexport' | 'named-reexport' | 'direct-export' | 'default-export';
20
+ /**
21
+ * Common barrel file names
22
+ */
23
+ export declare const BARREL_FILE_NAMES: readonly ["index.ts", "index.tsx", "index.js", "index.jsx", "index.mjs", "index.cjs"];
24
+ /**
25
+ * Directories that typically should have barrel files
26
+ */
27
+ export declare const BARREL_EXPECTED_DIRECTORIES: readonly ["components", "hooks", "utils", "helpers", "services", "lib", "types", "models", "features", "modules", "pages", "api", "store", "contexts", "providers"];
28
+ /**
29
+ * Information about a barrel file
30
+ */
31
+ export interface BarrelFileInfo {
32
+ /** File path */
33
+ path: string;
34
+ /** Directory containing the barrel file */
35
+ directory: string;
36
+ /** Number of exports in the barrel file */
37
+ exportCount: number;
38
+ /** Types of exports found */
39
+ exportTypes: ExportType[];
40
+ /** Files being re-exported */
41
+ reexportedFiles: string[];
42
+ /** Whether this is a valid barrel file (has re-exports) */
43
+ isValidBarrel: boolean;
44
+ }
45
+ /**
46
+ * Information about a directory's barrel status
47
+ */
48
+ export interface DirectoryBarrelInfo {
49
+ /** Directory path */
50
+ directory: string;
51
+ /** Whether the directory has a barrel file */
52
+ hasBarrel: boolean;
53
+ /** The barrel file path (if exists) */
54
+ barrelFile: string | null;
55
+ /** Number of sibling files in the directory */
56
+ siblingFileCount: number;
57
+ /** Whether this directory should have a barrel file */
58
+ shouldHaveBarrel: boolean;
59
+ }
60
+ /**
61
+ * Analysis of barrel file patterns in a project
62
+ */
63
+ export interface BarrelAnalysis {
64
+ /** Detected barrel pattern */
65
+ pattern: BarrelPattern;
66
+ /** Confidence in the detection (0-1) */
67
+ confidence: number;
68
+ /** All barrel files found */
69
+ barrelFiles: BarrelFileInfo[];
70
+ /** Directories with barrel files */
71
+ directoriesWithBarrels: DirectoryBarrelInfo[];
72
+ /** Directories missing barrel files (that should have them) */
73
+ directoriesMissingBarrels: DirectoryBarrelInfo[];
74
+ /** Total directories analyzed */
75
+ totalDirectories: number;
76
+ /** Percentage of directories with barrel files */
77
+ barrelCoverage: number;
78
+ /** Dominant export style */
79
+ dominantExportStyle: ExportType | null;
80
+ }
81
+ /**
82
+ * Export pattern found in a file
83
+ */
84
+ export interface ExportPattern {
85
+ /** Type of export */
86
+ type: ExportType;
87
+ /** The exported name(s) */
88
+ names: string[];
89
+ /** Source module (for re-exports) */
90
+ source: string | null;
91
+ /** Line number where the export is found */
92
+ line: number;
93
+ }
94
+ /**
95
+ * Check if a file is a barrel/index file
96
+ */
97
+ export declare function isBarrelFile(filePath: string): boolean;
98
+ /**
99
+ * Get the directory of a file
100
+ */
101
+ export declare function getFileDirectory(filePath: string): string;
102
+ /**
103
+ * Get the file name from a path
104
+ */
105
+ export declare function getFileName(filePath: string): string;
106
+ /**
107
+ * Check if a directory name suggests it should have a barrel file
108
+ */
109
+ export declare function shouldDirectoryHaveBarrel(directoryPath: string): boolean;
110
+ /**
111
+ * Parse export patterns from file content
112
+ */
113
+ export declare function parseExportPatterns(content: string): ExportPattern[];
114
+ /**
115
+ * Analyze a barrel file's content
116
+ */
117
+ export declare function analyzeBarrelFile(filePath: string, content: string): BarrelFileInfo;
118
+ /**
119
+ * Extract unique directories from file paths
120
+ */
121
+ export declare function extractDirectories(files: string[]): Map<string, string[]>;
122
+ /**
123
+ * Analyze barrel file patterns in a project
124
+ */
125
+ export declare function analyzeBarrelPatterns(files: string[], fileContents?: Map<string, string>): BarrelAnalysis;
126
+ /**
127
+ * Check if a directory should have a barrel file based on project patterns
128
+ */
129
+ export declare function checkDirectoryNeedsBarrel(directory: string, files: string[], analysis: BarrelAnalysis): boolean;
130
+ /**
131
+ * Detector for barrel/index file patterns
132
+ *
133
+ * Identifies barrel files (index.ts/index.js) that re-export from other modules
134
+ * and analyzes consistency of barrel file usage across the project.
135
+ *
136
+ * @requirements 7.4 - THE Structural_Detector SHALL detect barrel/index file usage patterns
137
+ */
138
+ export declare class BarrelExportsDetector extends StructuralDetector {
139
+ readonly id = "structural/barrel-exports";
140
+ readonly category: "structural";
141
+ readonly subcategory = "barrel-exports";
142
+ readonly name = "Barrel Exports Detector";
143
+ readonly description = "Detects barrel/index file usage patterns and export consistency";
144
+ readonly supportedLanguages: Language[];
145
+ /**
146
+ * Detect barrel file patterns in the project
147
+ */
148
+ detect(context: DetectionContext): Promise<DetectionResult>;
149
+ /**
150
+ * Generate a quick fix for barrel export violations
151
+ */
152
+ generateQuickFix(violation: Violation): QuickFix | null;
153
+ /**
154
+ * Create a pattern match for barrel file usage
155
+ */
156
+ private createBarrelPattern;
157
+ /**
158
+ * Create a pattern match for export style
159
+ */
160
+ private createExportStylePattern;
161
+ /**
162
+ * Create a violation for an empty barrel file
163
+ */
164
+ private createEmptyBarrelViolation;
165
+ /**
166
+ * Check for inconsistent export style in a barrel file
167
+ */
168
+ private checkExportStyleConsistency;
169
+ /**
170
+ * Check if the current file's directory is missing a barrel file
171
+ */
172
+ private checkMissingBarrel;
173
+ }
174
+ /**
175
+ * Create a new BarrelExportsDetector instance
176
+ */
177
+ export declare function createBarrelExportsDetector(): BarrelExportsDetector;
178
+ //# sourceMappingURL=barrel-exports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"barrel-exports.d.ts","sourceRoot":"","sources":["../../src/structural/barrel-exports.ts"],"names":[],"mappings":"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"}