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,151 @@
1
+ /**
2
+ * Token Handling Detector - Token pattern detection
3
+ *
4
+ * Detects token handling patterns including JWT storage, refresh tokens,
5
+ * token validation, and secure token practices.
6
+ *
7
+ * Flags violations: Insecure token storage, missing refresh logic, exposed tokens.
8
+ *
9
+ * @requirements 11.2 - Token handling patterns
10
+ */
11
+ import { RegexDetector } from '../base/index.js';
12
+ export const TOKEN_STORAGE_PATTERNS = [
13
+ /localStorage\.setItem\s*\(\s*['"`](?:token|jwt|access_token|auth)/gi,
14
+ /sessionStorage\.setItem\s*\(\s*['"`](?:token|jwt|access_token|auth)/gi,
15
+ /document\.cookie\s*=.*(?:token|jwt|access)/gi,
16
+ /setCookie\s*\([^)]*(?:token|jwt|access)/gi,
17
+ ];
18
+ export const SECURE_COOKIE_PATTERNS = [
19
+ /httpOnly\s*:\s*true/gi,
20
+ /secure\s*:\s*true/gi,
21
+ /sameSite\s*:\s*['"`](?:strict|lax)['"`]/gi,
22
+ ];
23
+ export const REFRESH_TOKEN_PATTERNS = [
24
+ /refresh[_-]?token/gi,
25
+ /refreshToken/gi,
26
+ /\/api\/(?:auth\/)?refresh/gi,
27
+ /tokenRefresh/gi,
28
+ /rotateToken/gi,
29
+ ];
30
+ export const TOKEN_VALIDATION_PATTERNS = [
31
+ /jwt\.verify\s*\(/gi,
32
+ /verifyToken\s*\(/gi,
33
+ /validateToken\s*\(/gi,
34
+ /isTokenValid/gi,
35
+ /checkToken/gi,
36
+ /decodeToken\s*\(/gi,
37
+ ];
38
+ export const TOKEN_EXTRACTION_PATTERNS = [
39
+ /(?:req|request)\.headers\s*\[\s*['"`]authorization['"`]\s*\]/gi,
40
+ /Bearer\s+/gi,
41
+ /getToken\s*\(/gi,
42
+ /extractToken/gi,
43
+ /parseToken/gi,
44
+ ];
45
+ export const INSECURE_STORAGE_PATTERNS = [
46
+ /localStorage\.setItem\s*\(\s*['"`](?:token|jwt|access_token)['"`]/gi,
47
+ ];
48
+ export const TOKEN_IN_URL_PATTERNS = [
49
+ /\?.*token=/gi,
50
+ /&token=/gi,
51
+ /url\s*[+=].*token/gi,
52
+ ];
53
+ export const TOKEN_LOGGED_PATTERNS = [
54
+ /console\.log\s*\([^)]*token/gi,
55
+ /logger\.\w+\s*\([^)]*token/gi,
56
+ /print\s*\([^)]*token/gi,
57
+ ];
58
+ export const EXCLUDED_FILE_PATTERNS = [/\.test\.[jt]sx?$/, /\.spec\.[jt]sx?$/, /node_modules\//, /\.d\.ts$/];
59
+ export function shouldExcludeFile(filePath) {
60
+ return EXCLUDED_FILE_PATTERNS.some(p => p.test(filePath));
61
+ }
62
+ function isInsideComment(content, index) {
63
+ const before = content.slice(0, index);
64
+ const lastNewline = before.lastIndexOf('\n');
65
+ const line = before.slice(lastNewline + 1);
66
+ if (line.includes('//') && index - lastNewline - 1 > line.indexOf('//'))
67
+ return true;
68
+ return before.lastIndexOf('/*') > before.lastIndexOf('*/');
69
+ }
70
+ function getPosition(content, index) {
71
+ const before = content.slice(0, index);
72
+ return { line: before.split('\n').length, column: index - before.lastIndexOf('\n') };
73
+ }
74
+ function detectPatterns(content, file, patterns, type) {
75
+ const results = [];
76
+ const lines = content.split('\n');
77
+ for (const pattern of patterns) {
78
+ const regex = new RegExp(pattern.source, pattern.flags);
79
+ let match;
80
+ while ((match = regex.exec(content)) !== null) {
81
+ if (isInsideComment(content, match.index))
82
+ continue;
83
+ const { line, column } = getPosition(content, match.index);
84
+ results.push({ type, file, line, column, matchedText: match[0], context: lines[line - 1] || '' });
85
+ }
86
+ }
87
+ return results;
88
+ }
89
+ function detectViolations(content, file, patterns, type, issue, fix) {
90
+ const violations = [];
91
+ const lines = content.split('\n');
92
+ for (const pattern of patterns) {
93
+ const regex = new RegExp(pattern.source, pattern.flags);
94
+ let match;
95
+ while ((match = regex.exec(content)) !== null) {
96
+ if (isInsideComment(content, match.index))
97
+ continue;
98
+ const { line, column } = getPosition(content, match.index);
99
+ violations.push({
100
+ type, file, line, column,
101
+ endLine: line, endColumn: column + match[0].length,
102
+ value: match[0], issue, suggestedFix: fix,
103
+ lineContent: lines[line - 1] || '',
104
+ });
105
+ }
106
+ }
107
+ return violations;
108
+ }
109
+ export function analyzeTokenHandling(content, file) {
110
+ if (shouldExcludeFile(file)) {
111
+ return { patterns: [], violations: [], usesSecureStorage: false, hasRefreshLogic: false };
112
+ }
113
+ const patterns = [
114
+ ...detectPatterns(content, file, TOKEN_STORAGE_PATTERNS, 'jwt-storage'),
115
+ ...detectPatterns(content, file, REFRESH_TOKEN_PATTERNS, 'refresh-token'),
116
+ ...detectPatterns(content, file, TOKEN_VALIDATION_PATTERNS, 'token-validation'),
117
+ ...detectPatterns(content, file, TOKEN_EXTRACTION_PATTERNS, 'token-extraction'),
118
+ ...detectPatterns(content, file, SECURE_COOKIE_PATTERNS, 'secure-cookie'),
119
+ ];
120
+ const violations = [
121
+ ...detectViolations(content, file, INSECURE_STORAGE_PATTERNS, 'insecure-storage', 'Token stored in localStorage is vulnerable to XSS', 'Use httpOnly cookies instead'),
122
+ ...detectViolations(content, file, TOKEN_IN_URL_PATTERNS, 'token-in-url', 'Token in URL can be leaked via referrer or logs', 'Pass tokens in headers instead'),
123
+ ...detectViolations(content, file, TOKEN_LOGGED_PATTERNS, 'token-logged', 'Token being logged may expose sensitive data', 'Remove token from logs'),
124
+ ];
125
+ const usesSecureStorage = patterns.some(p => p.type === 'secure-cookie');
126
+ const hasRefreshLogic = patterns.some(p => p.type === 'refresh-token');
127
+ return { patterns, violations, usesSecureStorage, hasRefreshLogic };
128
+ }
129
+ export class TokenHandlingDetector extends RegexDetector {
130
+ id = 'auth/token-handling';
131
+ name = 'Token Handling Detector';
132
+ description = 'Detects token handling patterns and security issues';
133
+ category = 'auth';
134
+ subcategory = 'tokens';
135
+ supportedLanguages = ['typescript', 'javascript', 'python'];
136
+ async detect(context) {
137
+ const { content, file } = context;
138
+ if (shouldExcludeFile(file))
139
+ return this.createEmptyResult();
140
+ const analysis = analyzeTokenHandling(content, file);
141
+ const confidence = analysis.usesSecureStorage ? 0.9 : 0.75;
142
+ return this.createResult([], [], confidence);
143
+ }
144
+ generateQuickFix() {
145
+ return null;
146
+ }
147
+ }
148
+ export function createTokenHandlingDetector() {
149
+ return new TokenHandlingDetector();
150
+ }
151
+ //# sourceMappingURL=token-handling.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-handling.js","sourceRoot":"","sources":["../../src/auth/token-handling.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,421 @@
1
+ /**
2
+ * AST Detector - AST-based detection base class
3
+ *
4
+ * Provides Tree-sitter query helpers and utilities for AST-based pattern detection.
5
+ * Extends BaseDetector with specialized methods for traversing and querying ASTs.
6
+ *
7
+ * @requirements 6.4 - THE Detector_System SHALL support detection methods: ast, regex, semantic, structural, and custom
8
+ */
9
+ import type { AST, ASTNode } from 'driftdetect-core';
10
+ import { BaseDetector } from './base-detector.js';
11
+ /**
12
+ * Pattern definition for AST matching
13
+ *
14
+ * Defines criteria for matching AST nodes during detection.
15
+ */
16
+ export interface ASTPattern {
17
+ /** Node type to match (e.g., 'FunctionDeclaration', 'ClassDeclaration') */
18
+ type?: string;
19
+ /** Text content to match (exact string or regex) */
20
+ text?: string | RegExp;
21
+ /** Whether text matching should be exact */
22
+ exactText?: boolean;
23
+ /** Child patterns to match */
24
+ children?: ASTPattern[];
25
+ /** Minimum number of children required */
26
+ minChildren?: number;
27
+ /** Maximum number of children allowed */
28
+ maxChildren?: number;
29
+ /** Custom predicate for additional matching logic */
30
+ predicate?: (node: ASTNode) => boolean;
31
+ /** Whether to match any descendant (not just direct children) */
32
+ matchDescendants?: boolean;
33
+ /** Capture name for extracting matched nodes */
34
+ capture?: string;
35
+ }
36
+ /**
37
+ * Result of an AST pattern match
38
+ */
39
+ export interface ASTMatchResult {
40
+ /** The matched node */
41
+ node: ASTNode;
42
+ /** Confidence score (0-1) */
43
+ confidence: number;
44
+ /** Captured nodes by name */
45
+ captures: Map<string, ASTNode>;
46
+ /** Start position in source */
47
+ startPosition: {
48
+ row: number;
49
+ column: number;
50
+ };
51
+ /** End position in source */
52
+ endPosition: {
53
+ row: number;
54
+ column: number;
55
+ };
56
+ }
57
+ /**
58
+ * Options for AST traversal
59
+ */
60
+ export interface TraversalOptions {
61
+ /** Maximum depth to traverse (undefined = unlimited) */
62
+ maxDepth?: number;
63
+ /** Node types to skip during traversal */
64
+ skipTypes?: string[];
65
+ /** Whether to include the root node in traversal */
66
+ includeRoot?: boolean;
67
+ }
68
+ /**
69
+ * Visitor function for AST traversal
70
+ *
71
+ * @param node - Current node being visited
72
+ * @param parent - Parent node (null for root)
73
+ * @param depth - Current depth in the tree
74
+ * @returns false to stop traversal of subtree, undefined to continue
75
+ */
76
+ export type ASTVisitor = (node: ASTNode, parent: ASTNode | null, depth: number) => boolean | void;
77
+ /**
78
+ * Abstract base class for AST-based detectors
79
+ *
80
+ * Provides Tree-sitter query helpers and utilities for pattern detection
81
+ * that operates on parsed AST structures.
82
+ *
83
+ * @requirements 6.4 - THE Detector_System SHALL support detection methods: ast
84
+ *
85
+ * @example
86
+ * ```typescript
87
+ * class FunctionNamingDetector extends ASTDetector {
88
+ * readonly id = 'structural/function-naming';
89
+ * readonly category = 'structural';
90
+ * readonly subcategory = 'naming-conventions';
91
+ * readonly name = 'Function Naming Detector';
92
+ * readonly description = 'Detects function naming patterns';
93
+ * readonly supportedLanguages = ['typescript', 'javascript'];
94
+ *
95
+ * async detect(context: DetectionContext): Promise<DetectionResult> {
96
+ * if (!context.ast) {
97
+ * return this.createEmptyResult();
98
+ * }
99
+ *
100
+ * const functions = this.findNodes(context.ast, 'function_declaration');
101
+ * // Analyze function naming patterns...
102
+ * }
103
+ *
104
+ * generateQuickFix(violation: Violation): QuickFix | null {
105
+ * return null;
106
+ * }
107
+ * }
108
+ * ```
109
+ */
110
+ export declare abstract class ASTDetector extends BaseDetector {
111
+ /**
112
+ * Detection method is always 'ast' for AST-based detectors
113
+ *
114
+ * @requirements 6.4 - Detector declares detection method as 'ast'
115
+ */
116
+ readonly detectionMethod: "ast";
117
+ /**
118
+ * Find all nodes of a specific type in the AST
119
+ *
120
+ * Traverses the entire AST and returns all nodes matching the specified type.
121
+ *
122
+ * @param ast - The AST to search
123
+ * @param nodeType - The type of node to find (e.g., 'function_declaration', 'class_declaration')
124
+ * @returns Array of matching nodes
125
+ *
126
+ * @example
127
+ * ```typescript
128
+ * const functions = this.findNodes(ast, 'function_declaration');
129
+ * const classes = this.findNodes(ast, 'class_declaration');
130
+ * ```
131
+ */
132
+ protected findNodes(ast: AST, nodeType: string): ASTNode[];
133
+ /**
134
+ * Find all nodes matching multiple types
135
+ *
136
+ * @param ast - The AST to search
137
+ * @param nodeTypes - Array of node types to find
138
+ * @returns Array of matching nodes
139
+ *
140
+ * @example
141
+ * ```typescript
142
+ * const declarations = this.findNodesByTypes(ast, ['function_declaration', 'arrow_function']);
143
+ * ```
144
+ */
145
+ protected findNodesByTypes(ast: AST, nodeTypes: string[]): ASTNode[];
146
+ /**
147
+ * Find the first node of a specific type
148
+ *
149
+ * @param ast - The AST to search
150
+ * @param nodeType - The type of node to find
151
+ * @returns The first matching node, or null if not found
152
+ */
153
+ protected findFirstNode(ast: AST, nodeType: string): ASTNode | null;
154
+ /**
155
+ * Find nodes matching a predicate function
156
+ *
157
+ * @param ast - The AST to search
158
+ * @param predicate - Function that returns true for matching nodes
159
+ * @returns Array of matching nodes
160
+ *
161
+ * @example
162
+ * ```typescript
163
+ * const asyncFunctions = this.findNodesWhere(ast, (node) =>
164
+ * node.type === 'function_declaration' && node.text.includes('async')
165
+ * );
166
+ * ```
167
+ */
168
+ protected findNodesWhere(ast: AST, predicate: (node: ASTNode) => boolean): ASTNode[];
169
+ /**
170
+ * Find the nearest ancestor of a specific type
171
+ *
172
+ * Traverses up the tree from the given node to find the first ancestor
173
+ * matching the specified type.
174
+ *
175
+ * @param node - The starting node
176
+ * @param nodeType - The type of ancestor to find
177
+ * @param ast - The AST containing the node (needed for parent lookup)
178
+ * @returns The ancestor node, or null if not found
179
+ *
180
+ * @example
181
+ * ```typescript
182
+ * const parentClass = this.findAncestor(methodNode, 'class_declaration', ast);
183
+ * ```
184
+ */
185
+ protected findAncestor(node: ASTNode, nodeType: string, ast: AST): ASTNode | null;
186
+ /**
187
+ * Find all ancestors of a node
188
+ *
189
+ * @param node - The starting node
190
+ * @param ast - The AST containing the node
191
+ * @returns Array of ancestor nodes from immediate parent to root
192
+ */
193
+ protected findAllAncestors(node: ASTNode, ast: AST): ASTNode[];
194
+ /**
195
+ * Find all descendants of a node
196
+ *
197
+ * @param node - The starting node
198
+ * @returns Array of all descendant nodes
199
+ */
200
+ protected findDescendants(node: ASTNode): ASTNode[];
201
+ /**
202
+ * Find descendants of a specific type
203
+ *
204
+ * @param node - The starting node
205
+ * @param nodeType - The type of descendants to find
206
+ * @returns Array of matching descendant nodes
207
+ */
208
+ protected findDescendantsByType(node: ASTNode, nodeType: string): ASTNode[];
209
+ /**
210
+ * Get the text content of a node
211
+ *
212
+ * Returns the source text corresponding to the node's position.
213
+ * If content is provided, extracts from content; otherwise uses node.text.
214
+ *
215
+ * @param node - The node to get text for
216
+ * @param content - Optional source content to extract from
217
+ * @returns The text content of the node
218
+ *
219
+ * @example
220
+ * ```typescript
221
+ * const functionName = this.getNodeText(identifierNode, context.content);
222
+ * ```
223
+ */
224
+ protected getNodeText(node: ASTNode, content?: string): string;
225
+ /**
226
+ * Get the trimmed text content of a node
227
+ *
228
+ * @param node - The node to get text for
229
+ * @param content - Optional source content to extract from
230
+ * @returns The trimmed text content
231
+ */
232
+ protected getNodeTextTrimmed(node: ASTNode, content?: string): string;
233
+ /**
234
+ * Match an AST against a pattern
235
+ *
236
+ * Searches the AST for nodes matching the specified pattern and returns
237
+ * all matches with their confidence scores.
238
+ *
239
+ * @param ast - The AST to search
240
+ * @param pattern - The pattern to match
241
+ * @returns Array of match results
242
+ *
243
+ * @example
244
+ * ```typescript
245
+ * const matches = this.matchPattern(ast, {
246
+ * type: 'function_declaration',
247
+ * children: [{ type: 'identifier', capture: 'name' }]
248
+ * });
249
+ * ```
250
+ */
251
+ protected matchPattern(ast: AST, pattern: ASTPattern): ASTMatchResult[];
252
+ /**
253
+ * Match a single node against a pattern
254
+ *
255
+ * @param node - The node to match
256
+ * @param pattern - The pattern to match against
257
+ * @param captures - Map to store captured nodes
258
+ * @returns Confidence score (0-1), 0 if no match
259
+ */
260
+ private matchNode;
261
+ /**
262
+ * Match text against a pattern (string or regex)
263
+ */
264
+ private matchText;
265
+ /**
266
+ * Match child patterns against node children
267
+ */
268
+ private matchChildPatterns;
269
+ /**
270
+ * Traverse the AST depth-first
271
+ *
272
+ * Visits each node in the AST, calling the visitor function.
273
+ * The visitor can return false to stop traversal of a subtree.
274
+ *
275
+ * @param ast - The AST to traverse
276
+ * @param visitor - Function called for each node
277
+ * @param options - Traversal options
278
+ *
279
+ * @example
280
+ * ```typescript
281
+ * this.traverse(ast, (node, parent, depth) => {
282
+ * console.log(`${node.type} at depth ${depth}`);
283
+ * if (depth > 5) return false; // Stop going deeper
284
+ * });
285
+ * ```
286
+ */
287
+ protected traverse(ast: AST, visitor: ASTVisitor, options?: TraversalOptions): void;
288
+ /**
289
+ * Traverse a specific node and its descendants
290
+ *
291
+ * @param node - The node to start traversal from
292
+ * @param visitor - Function called for each node
293
+ * @param options - Traversal options
294
+ */
295
+ protected traverseNode(node: ASTNode, visitor: ASTVisitor, options?: TraversalOptions): void;
296
+ /**
297
+ * Get the parent chain from root to a specific node
298
+ *
299
+ * @param ast - The AST to search
300
+ * @param targetNode - The node to find parents for
301
+ * @returns Array of parent nodes from root to immediate parent
302
+ */
303
+ protected getParentChain(ast: AST, targetNode: ASTNode): ASTNode[];
304
+ /**
305
+ * Get the immediate parent of a node
306
+ *
307
+ * @param ast - The AST containing the node
308
+ * @param node - The node to find the parent of
309
+ * @returns The parent node, or null if node is root
310
+ */
311
+ protected getParent(ast: AST, node: ASTNode): ASTNode | null;
312
+ /**
313
+ * Get the depth of a node in the AST
314
+ *
315
+ * @param ast - The AST containing the node
316
+ * @param targetNode - The node to get depth for
317
+ * @returns The depth (0 for root), or -1 if not found
318
+ */
319
+ protected getNodeDepth(ast: AST, targetNode: ASTNode): number;
320
+ /**
321
+ * Check if a node is a leaf node (has no children)
322
+ *
323
+ * @param node - The node to check
324
+ * @returns true if the node has no children
325
+ */
326
+ protected isLeafNode(node: ASTNode): boolean;
327
+ /**
328
+ * Get direct children of a specific type
329
+ *
330
+ * @param node - The parent node
331
+ * @param nodeType - The type of children to find
332
+ * @returns Array of matching child nodes
333
+ */
334
+ protected getChildrenByType(node: ASTNode, nodeType: string): ASTNode[];
335
+ /**
336
+ * Get the first direct child of a specific type
337
+ *
338
+ * @param node - The parent node
339
+ * @param nodeType - The type of child to find
340
+ * @returns The first matching child, or null if not found
341
+ */
342
+ protected getFirstChildByType(node: ASTNode, nodeType: string): ASTNode | null;
343
+ /**
344
+ * Check if a node has a child of a specific type
345
+ *
346
+ * @param node - The parent node
347
+ * @param nodeType - The type to check for
348
+ * @returns true if a child of the specified type exists
349
+ */
350
+ protected hasChildOfType(node: ASTNode, nodeType: string): boolean;
351
+ /**
352
+ * Check if a node has a descendant of a specific type
353
+ *
354
+ * @param node - The starting node
355
+ * @param nodeType - The type to check for
356
+ * @returns true if a descendant of the specified type exists
357
+ */
358
+ protected hasDescendantOfType(node: ASTNode, nodeType: string): boolean;
359
+ /**
360
+ * Get siblings of a node (other children of the same parent)
361
+ *
362
+ * @param ast - The AST containing the node
363
+ * @param node - The node to find siblings for
364
+ * @returns Array of sibling nodes (excluding the node itself)
365
+ */
366
+ protected getSiblings(ast: AST, node: ASTNode): ASTNode[];
367
+ /**
368
+ * Get the next sibling of a node
369
+ *
370
+ * @param ast - The AST containing the node
371
+ * @param node - The node to find the next sibling for
372
+ * @returns The next sibling, or null if none exists
373
+ */
374
+ protected getNextSibling(ast: AST, node: ASTNode): ASTNode | null;
375
+ /**
376
+ * Get the previous sibling of a node
377
+ *
378
+ * @param ast - The AST containing the node
379
+ * @param node - The node to find the previous sibling for
380
+ * @returns The previous sibling, or null if none exists
381
+ */
382
+ protected getPreviousSibling(ast: AST, node: ASTNode): ASTNode | null;
383
+ /**
384
+ * Count nodes of a specific type in the AST
385
+ *
386
+ * @param ast - The AST to search
387
+ * @param nodeType - The type of nodes to count
388
+ * @returns The count of matching nodes
389
+ */
390
+ protected countNodes(ast: AST, nodeType: string): number;
391
+ /**
392
+ * Check if the AST contains a node of a specific type
393
+ *
394
+ * @param ast - The AST to search
395
+ * @param nodeType - The type to check for
396
+ * @returns true if a node of the specified type exists
397
+ */
398
+ protected hasNodeOfType(ast: AST, nodeType: string): boolean;
399
+ /**
400
+ * Get the line number of a node (1-indexed)
401
+ *
402
+ * @param node - The node to get the line number for
403
+ * @returns The line number (1-indexed)
404
+ */
405
+ protected getLineNumber(node: ASTNode): number;
406
+ /**
407
+ * Get the column number of a node (1-indexed)
408
+ *
409
+ * @param node - The node to get the column number for
410
+ * @returns The column number (1-indexed)
411
+ */
412
+ protected getColumnNumber(node: ASTNode): number;
413
+ }
414
+ /**
415
+ * Type guard to check if a detector is an AST detector
416
+ *
417
+ * @param detector - The detector to check
418
+ * @returns true if the detector is an ASTDetector
419
+ */
420
+ export declare function isASTDetector(detector: BaseDetector): detector is ASTDetector;
421
+ //# sourceMappingURL=ast-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast-detector.d.ts","sourceRoot":"","sources":["../../src/base/ast-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMlD;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEvB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IAExB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,qDAAqD;IACrD,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC;IAEvC,iEAAiE;IACjE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,uBAAuB;IACvB,IAAI,EAAE,OAAO,CAAC;IAEd,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IAEnB,6BAA6B;IAC7B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE/B,+BAA+B;IAC/B,aAAa,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAE/C,6BAA6B;IAC7B,WAAW,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAErB,oDAAoD;IACpD,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,UAAU,GAAG,CACvB,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,OAAO,GAAG,IAAI,EACtB,KAAK,EAAE,MAAM,KACV,OAAO,GAAG,IAAI,CAAC;AAMpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,8BAAsB,WAAY,SAAQ,YAAY;IACpD;;;;OAIG;IACH,QAAQ,CAAC,eAAe,EAAG,KAAK,CAAU;IAM1C;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,EAAE;IAY1D;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE;IAapE;;;;;;OAMG;IACH,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAcnE;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,cAAc,CACtB,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,GACpC,OAAO,EAAE;IAgBZ;;;;;;;;;;;;;;;OAeG;IACH,SAAS,CAAC,YAAY,CACpB,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,GAAG,GACP,OAAO,GAAG,IAAI;IAcjB;;;;;;OAMG;IACH,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,EAAE;IAK9D;;;;;OAKG;IACH,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,EAAE;IAcnD;;;;;;OAMG;IACH,SAAS,CAAC,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,EAAE;IAoB3E;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IAkC9D;;;;;;OAMG;IACH,SAAS,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IAQrE;;;;;;;;;;;;;;;;;OAiBG;IACH,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,GAAG,cAAc,EAAE;IAqBvE;;;;;;;OAOG;IACH,OAAO,CAAC,SAAS;IAwDjB;;OAEG;IACH,OAAO,CAAC,SAAS;IAYjB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA6C1B;;;;;;;;;;;;;;;;;OAiBG;IACH,SAAS,CAAC,QAAQ,CAChB,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,UAAU,EACnB,OAAO,GAAE,gBAAqB,GAC7B,IAAI;IAwCP;;;;;;OAMG;IACH,SAAS,CAAC,YAAY,CACpB,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,UAAU,EACnB,OAAO,GAAE,gBAAqB,GAC7B,IAAI;IAiCP;;;;;;OAMG;IACH,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,EAAE;IAsBlE;;;;;;OAMG;IACH,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI;IAK5D;;;;;;OAMG;IACH,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM;IAc7D;;;;;OAKG;IACH,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;IAI5C;;;;;;OAMG;IACH,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,EAAE;IAIvE;;;;;;OAMG;IACH,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAI9E;;;;;;OAMG;IACH,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIlE;;;;;;OAMG;IACH,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAKvE;;;;;;OAMG;IACH,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,EAAE;IASzD;;;;;;OAMG;IACH,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI;IAcjE;;;;;;OAMG;IACH,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI;IAcrE;;;;;;OAMG;IACH,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIxD;;;;;;OAMG;IACH,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI5D;;;;;OAKG;IACH,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM;IAI9C;;;;;OAKG;IACH,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM;CAGjD;AAMD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,YAAY,GAAG,QAAQ,IAAI,WAAW,CAE7E"}