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 @@
1
+ {"version":3,"file":"lazy-loading.js","sourceRoot":"","sources":["../../src/performance/lazy-loading.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Memoization Detector - Memoization pattern detection
3
+ *
4
+ * Detects memoization patterns including:
5
+ * - React.memo
6
+ * - useMemo
7
+ * - useCallback
8
+ * - Custom memoization
9
+ * - Selector memoization (reselect)
10
+ *
11
+ * @requirements 19.3 - Memoization patterns
12
+ */
13
+ import type { Violation, QuickFix, PatternCategory, Language } from 'driftdetect-core';
14
+ import { RegexDetector } from '../base/regex-detector.js';
15
+ import type { DetectionContext, DetectionResult } from '../base/base-detector.js';
16
+ export type MemoizationPatternType = 'react-memo' | 'use-memo' | 'use-callback' | 'reselect' | 'custom-memoize' | 'lodash-memoize' | 'memo-one';
17
+ export type MemoizationViolationType = 'missing-deps' | 'empty-deps' | 'inline-object-deps' | 'unnecessary-memo';
18
+ export interface MemoizationPatternInfo {
19
+ type: MemoizationPatternType;
20
+ file: string;
21
+ line: number;
22
+ column: number;
23
+ matchedText: string;
24
+ context?: string | undefined;
25
+ }
26
+ export interface MemoizationViolationInfo {
27
+ type: MemoizationViolationType;
28
+ file: string;
29
+ line: number;
30
+ column: number;
31
+ matchedText: string;
32
+ issue: string;
33
+ suggestedFix?: string | undefined;
34
+ severity: 'high' | 'medium' | 'low';
35
+ }
36
+ export interface MemoizationAnalysis {
37
+ patterns: MemoizationPatternInfo[];
38
+ violations: MemoizationViolationInfo[];
39
+ useMemoCount: number;
40
+ useCallbackCount: number;
41
+ reactMemoCount: number;
42
+ confidence: number;
43
+ }
44
+ export declare const REACT_MEMO_PATTERNS: readonly [RegExp, RegExp, RegExp];
45
+ export declare const USE_MEMO_PATTERNS: readonly [RegExp, RegExp, RegExp];
46
+ export declare const USE_CALLBACK_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp];
47
+ export declare const RESELECT_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp];
48
+ export declare const CUSTOM_MEMOIZE_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp];
49
+ export declare const LODASH_MEMOIZE_PATTERNS: readonly [RegExp, RegExp, RegExp];
50
+ export declare const MEMO_ONE_PATTERNS: readonly [RegExp, RegExp];
51
+ export declare const EMPTY_DEPS_PATTERNS: readonly [RegExp, RegExp];
52
+ export declare const INLINE_OBJECT_DEPS_PATTERNS: readonly [RegExp, RegExp];
53
+ export declare function shouldExcludeFile(filePath: string): boolean;
54
+ export declare function detectReactMemo(content: string, filePath: string): MemoizationPatternInfo[];
55
+ export declare function detectUseMemo(content: string, filePath: string): MemoizationPatternInfo[];
56
+ export declare function detectUseCallback(content: string, filePath: string): MemoizationPatternInfo[];
57
+ export declare function detectReselect(content: string, filePath: string): MemoizationPatternInfo[];
58
+ export declare function detectCustomMemoize(content: string, filePath: string): MemoizationPatternInfo[];
59
+ export declare function detectLodashMemoize(content: string, filePath: string): MemoizationPatternInfo[];
60
+ export declare function detectMemoOne(content: string, filePath: string): MemoizationPatternInfo[];
61
+ export declare function detectEmptyDepsViolations(content: string, filePath: string): MemoizationViolationInfo[];
62
+ export declare function detectInlineObjectDepsViolations(content: string, filePath: string): MemoizationViolationInfo[];
63
+ export declare function analyzeMemoization(content: string, filePath: string): MemoizationAnalysis;
64
+ export declare class MemoizationDetector extends RegexDetector {
65
+ readonly id = "performance/memoization";
66
+ readonly name = "Memoization Detector";
67
+ readonly description = "Detects memoization patterns including React hooks and selectors";
68
+ readonly category: PatternCategory;
69
+ readonly subcategory = "memoization";
70
+ readonly supportedLanguages: Language[];
71
+ detect(context: DetectionContext): Promise<DetectionResult>;
72
+ generateQuickFix(_violation: Violation): QuickFix | null;
73
+ }
74
+ export declare function createMemoizationDetector(): MemoizationDetector;
75
+ //# sourceMappingURL=memoization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memoization.d.ts","sourceRoot":"","sources":["../../src/performance/memoization.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,251 @@
1
+ /**
2
+ * Memoization Detector - Memoization pattern detection
3
+ *
4
+ * Detects memoization patterns including:
5
+ * - React.memo
6
+ * - useMemo
7
+ * - useCallback
8
+ * - Custom memoization
9
+ * - Selector memoization (reselect)
10
+ *
11
+ * @requirements 19.3 - Memoization patterns
12
+ */
13
+ import { RegexDetector } from '../base/regex-detector.js';
14
+ // ============================================================================
15
+ // Constants
16
+ // ============================================================================
17
+ export const REACT_MEMO_PATTERNS = [
18
+ /React\.memo\s*\(/g,
19
+ /memo\s*\(\s*(?:function|\(|[A-Z])/g,
20
+ /export\s+default\s+memo\s*\(/g,
21
+ ];
22
+ export const USE_MEMO_PATTERNS = [
23
+ /useMemo\s*\(\s*\(\)\s*=>/g,
24
+ /useMemo\s*\(\s*function/g,
25
+ /const\s+\w+\s*=\s*useMemo\s*\(/g,
26
+ ];
27
+ export const USE_CALLBACK_PATTERNS = [
28
+ /useCallback\s*\(\s*\(/g,
29
+ /useCallback\s*\(\s*function/g,
30
+ /useCallback\s*\(\s*async/g,
31
+ /const\s+\w+\s*=\s*useCallback\s*\(/g,
32
+ ];
33
+ export const RESELECT_PATTERNS = [
34
+ /createSelector\s*\(/g,
35
+ /createStructuredSelector\s*\(/g,
36
+ /from\s+['"`]reselect['"`]/g,
37
+ /from\s+['"`]@reduxjs\/toolkit['"`]/g,
38
+ ];
39
+ export const CUSTOM_MEMOIZE_PATTERNS = [
40
+ // JavaScript/TypeScript
41
+ /memoize\s*\(/g,
42
+ /memoized/gi,
43
+ /cache\s*=\s*new\s+Map/g,
44
+ /WeakMap\s*\(\)/g,
45
+ // Python
46
+ /@lru_cache/g,
47
+ /@cache/g,
48
+ /functools\.lru_cache/g,
49
+ /functools\.cache/g,
50
+ /@cached_property/g,
51
+ /cachetools/gi,
52
+ ];
53
+ export const LODASH_MEMOIZE_PATTERNS = [
54
+ /_.memoize\s*\(/g,
55
+ /memoize\s*\(\s*function/g,
56
+ /from\s+['"`]lodash\/memoize['"`]/g,
57
+ ];
58
+ export const MEMO_ONE_PATTERNS = [
59
+ /memoizeOne\s*\(/g,
60
+ /from\s+['"`]memoize-one['"`]/g,
61
+ ];
62
+ export const EMPTY_DEPS_PATTERNS = [
63
+ /useMemo\s*\([^)]+,\s*\[\s*\]\s*\)/g,
64
+ /useCallback\s*\([^)]+,\s*\[\s*\]\s*\)/g,
65
+ ];
66
+ export const INLINE_OBJECT_DEPS_PATTERNS = [
67
+ /useMemo\s*\([^)]+,\s*\[\s*\{/g,
68
+ /useCallback\s*\([^)]+,\s*\[\s*\{/g,
69
+ ];
70
+ // ============================================================================
71
+ // Analysis Functions
72
+ // ============================================================================
73
+ export function shouldExcludeFile(filePath) {
74
+ const excludePatterns = [
75
+ /\.test\.[jt]sx?$/,
76
+ /\.spec\.[jt]sx?$/,
77
+ /__tests__\//,
78
+ /node_modules\//,
79
+ /\.min\.[jt]s$/,
80
+ ];
81
+ return excludePatterns.some((p) => p.test(filePath));
82
+ }
83
+ function detectPatterns(content, filePath, patterns, type) {
84
+ const results = [];
85
+ const lines = content.split('\n');
86
+ for (let i = 0; i < lines.length; i++) {
87
+ const line = lines[i];
88
+ for (const pattern of patterns) {
89
+ const regex = new RegExp(pattern.source, pattern.flags);
90
+ let match;
91
+ while ((match = regex.exec(line)) !== null) {
92
+ results.push({
93
+ type,
94
+ file: filePath,
95
+ line: i + 1,
96
+ column: match.index + 1,
97
+ matchedText: match[0],
98
+ context: line.trim(),
99
+ });
100
+ }
101
+ }
102
+ }
103
+ return results;
104
+ }
105
+ export function detectReactMemo(content, filePath) {
106
+ return detectPatterns(content, filePath, REACT_MEMO_PATTERNS, 'react-memo');
107
+ }
108
+ export function detectUseMemo(content, filePath) {
109
+ return detectPatterns(content, filePath, USE_MEMO_PATTERNS, 'use-memo');
110
+ }
111
+ export function detectUseCallback(content, filePath) {
112
+ return detectPatterns(content, filePath, USE_CALLBACK_PATTERNS, 'use-callback');
113
+ }
114
+ export function detectReselect(content, filePath) {
115
+ return detectPatterns(content, filePath, RESELECT_PATTERNS, 'reselect');
116
+ }
117
+ export function detectCustomMemoize(content, filePath) {
118
+ return detectPatterns(content, filePath, CUSTOM_MEMOIZE_PATTERNS, 'custom-memoize');
119
+ }
120
+ export function detectLodashMemoize(content, filePath) {
121
+ return detectPatterns(content, filePath, LODASH_MEMOIZE_PATTERNS, 'lodash-memoize');
122
+ }
123
+ export function detectMemoOne(content, filePath) {
124
+ return detectPatterns(content, filePath, MEMO_ONE_PATTERNS, 'memo-one');
125
+ }
126
+ export function detectEmptyDepsViolations(content, filePath) {
127
+ const results = [];
128
+ const lines = content.split('\n');
129
+ for (let i = 0; i < lines.length; i++) {
130
+ const line = lines[i];
131
+ for (const pattern of EMPTY_DEPS_PATTERNS) {
132
+ const regex = new RegExp(pattern.source, pattern.flags);
133
+ let match;
134
+ while ((match = regex.exec(line)) !== null) {
135
+ results.push({
136
+ type: 'empty-deps',
137
+ file: filePath,
138
+ line: i + 1,
139
+ column: match.index + 1,
140
+ matchedText: match[0],
141
+ issue: 'Empty dependency array may cause stale closures',
142
+ suggestedFix: 'Add dependencies or use useRef for stable values',
143
+ severity: 'medium',
144
+ });
145
+ }
146
+ }
147
+ }
148
+ return results;
149
+ }
150
+ export function detectInlineObjectDepsViolations(content, filePath) {
151
+ const results = [];
152
+ const lines = content.split('\n');
153
+ for (let i = 0; i < lines.length; i++) {
154
+ const line = lines[i];
155
+ for (const pattern of INLINE_OBJECT_DEPS_PATTERNS) {
156
+ const regex = new RegExp(pattern.source, pattern.flags);
157
+ let match;
158
+ while ((match = regex.exec(line)) !== null) {
159
+ results.push({
160
+ type: 'inline-object-deps',
161
+ file: filePath,
162
+ line: i + 1,
163
+ column: match.index + 1,
164
+ matchedText: match[0],
165
+ issue: 'Inline object in dependency array defeats memoization',
166
+ suggestedFix: 'Extract object to useMemo or use individual properties',
167
+ severity: 'high',
168
+ });
169
+ }
170
+ }
171
+ }
172
+ return results;
173
+ }
174
+ export function analyzeMemoization(content, filePath) {
175
+ if (shouldExcludeFile(filePath)) {
176
+ return {
177
+ patterns: [],
178
+ violations: [],
179
+ useMemoCount: 0,
180
+ useCallbackCount: 0,
181
+ reactMemoCount: 0,
182
+ confidence: 1.0,
183
+ };
184
+ }
185
+ const patterns = [
186
+ ...detectReactMemo(content, filePath),
187
+ ...detectUseMemo(content, filePath),
188
+ ...detectUseCallback(content, filePath),
189
+ ...detectReselect(content, filePath),
190
+ ...detectCustomMemoize(content, filePath),
191
+ ...detectLodashMemoize(content, filePath),
192
+ ...detectMemoOne(content, filePath),
193
+ ];
194
+ const violations = [
195
+ ...detectEmptyDepsViolations(content, filePath),
196
+ ...detectInlineObjectDepsViolations(content, filePath),
197
+ ];
198
+ const useMemoCount = patterns.filter((p) => p.type === 'use-memo').length;
199
+ const useCallbackCount = patterns.filter((p) => p.type === 'use-callback').length;
200
+ const reactMemoCount = patterns.filter((p) => p.type === 'react-memo').length;
201
+ let confidence = 0.7;
202
+ if (patterns.length > 0)
203
+ confidence += 0.15;
204
+ if (violations.length === 0)
205
+ confidence += 0.1;
206
+ confidence = Math.min(confidence, 0.95);
207
+ return {
208
+ patterns,
209
+ violations,
210
+ useMemoCount,
211
+ useCallbackCount,
212
+ reactMemoCount,
213
+ confidence,
214
+ };
215
+ }
216
+ // ============================================================================
217
+ // Detector Class
218
+ // ============================================================================
219
+ export class MemoizationDetector extends RegexDetector {
220
+ id = 'performance/memoization';
221
+ name = 'Memoization Detector';
222
+ description = 'Detects memoization patterns including React hooks and selectors';
223
+ category = 'performance';
224
+ subcategory = 'memoization';
225
+ supportedLanguages = ['typescript', 'javascript', 'python'];
226
+ async detect(context) {
227
+ if (!this.supportsLanguage(context.language)) {
228
+ return this.createEmptyResult();
229
+ }
230
+ const analysis = analyzeMemoization(context.content, context.file);
231
+ if (analysis.patterns.length === 0 && analysis.violations.length === 0) {
232
+ return this.createEmptyResult();
233
+ }
234
+ return this.createResult([], [], analysis.confidence, {
235
+ custom: {
236
+ patterns: analysis.patterns,
237
+ violations: analysis.violations,
238
+ useMemoCount: analysis.useMemoCount,
239
+ useCallbackCount: analysis.useCallbackCount,
240
+ reactMemoCount: analysis.reactMemoCount,
241
+ },
242
+ });
243
+ }
244
+ generateQuickFix(_violation) {
245
+ return null;
246
+ }
247
+ }
248
+ export function createMemoizationDetector() {
249
+ return new MemoizationDetector();
250
+ }
251
+ //# sourceMappingURL=memoization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memoization.js","sourceRoot":"","sources":["../../src/performance/memoization.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAmD1D,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,mBAAmB;IACnB,oCAAoC;IACpC,+BAA+B;CACvB,CAAC;AAEX,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,2BAA2B;IAC3B,0BAA0B;IAC1B,iCAAiC;CACzB,CAAC;AAEX,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,wBAAwB;IACxB,8BAA8B;IAC9B,2BAA2B;IAC3B,qCAAqC;CAC7B,CAAC;AAEX,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,sBAAsB;IACtB,gCAAgC;IAChC,4BAA4B;IAC5B,qCAAqC;CAC7B,CAAC;AAEX,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,wBAAwB;IACxB,eAAe;IACf,YAAY;IACZ,wBAAwB;IACxB,iBAAiB;IACjB,SAAS;IACT,aAAa;IACb,SAAS;IACT,uBAAuB;IACvB,mBAAmB;IACnB,mBAAmB;IACnB,cAAc;CACN,CAAC;AAEX,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,iBAAiB;IACjB,0BAA0B;IAC1B,mCAAmC;CAC3B,CAAC;AAEX,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,kBAAkB;IAClB,+BAA+B;CACvB,CAAC;AAEX,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,oCAAoC;IACpC,wCAAwC;CAChC,CAAC;AAEX,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,+BAA+B;IAC/B,mCAAmC;CAC3B,CAAC;AAEX,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,MAAM,eAAe,GAAG;QACtB,kBAAkB;QAClB,kBAAkB;QAClB,aAAa;QACb,gBAAgB;QAChB,eAAe;KAChB,CAAC;IACF,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,cAAc,CACrB,OAAe,EACf,QAAgB,EAChB,QAA2B,EAC3B,IAA4B;IAE5B,MAAM,OAAO,GAA6B,EAAE,CAAC;IAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YACxD,IAAI,KAAK,CAAC;YACV,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI;oBACJ,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC;oBACvB,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;oBACrB,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE;iBACrB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,QAAgB;IAC/D,OAAO,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,YAAY,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,QAAgB;IAC7D,OAAO,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,UAAU,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,QAAgB;IACjE,OAAO,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,cAAc,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,QAAgB;IAC9D,OAAO,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,UAAU,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAe,EAAE,QAAgB;IACnE,OAAO,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,uBAAuB,EAAE,gBAAgB,CAAC,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAe,EAAE,QAAgB;IACnE,OAAO,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,uBAAuB,EAAE,gBAAgB,CAAC,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,QAAgB;IAC7D,OAAO,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,UAAU,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,OAAe,EACf,QAAgB;IAEhB,MAAM,OAAO,GAA+B,EAAE,CAAC;IAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,KAAK,MAAM,OAAO,IAAI,mBAAmB,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YACxD,IAAI,KAAK,CAAC;YACV,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC;oBACvB,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;oBACrB,KAAK,EAAE,iDAAiD;oBACxD,YAAY,EAAE,kDAAkD;oBAChE,QAAQ,EAAE,QAAQ;iBACnB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC9C,OAAe,EACf,QAAgB;IAEhB,MAAM,OAAO,GAA+B,EAAE,CAAC;IAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,KAAK,MAAM,OAAO,IAAI,2BAA2B,EAAE,CAAC;YAClD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YACxD,IAAI,KAAK,CAAC;YACV,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,oBAAoB;oBAC1B,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC;oBACvB,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;oBACrB,KAAK,EAAE,uDAAuD;oBAC9D,YAAY,EAAE,wDAAwD;oBACtE,QAAQ,EAAE,MAAM;iBACjB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,OAAe,EACf,QAAgB;IAEhB,IAAI,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,OAAO;YACL,QAAQ,EAAE,EAAE;YACZ,UAAU,EAAE,EAAE;YACd,YAAY,EAAE,CAAC;YACf,gBAAgB,EAAE,CAAC;YACnB,cAAc,EAAE,CAAC;YACjB,UAAU,EAAE,GAAG;SAChB,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAA6B;QACzC,GAAG,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC;QACrC,GAAG,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC;QACnC,GAAG,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC;QACvC,GAAG,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC;QACpC,GAAG,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC;QACzC,GAAG,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC;QACzC,GAAG,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC;KACpC,CAAC;IAEF,MAAM,UAAU,GAA+B;QAC7C,GAAG,yBAAyB,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC/C,GAAG,gCAAgC,CAAC,OAAO,EAAE,QAAQ,CAAC;KACvD,CAAC;IAEF,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;IAC1E,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,MAAM,CAAC;IAClF,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,MAAM,CAAC;IAE9E,IAAI,UAAU,GAAG,GAAG,CAAC;IACrB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,UAAU,IAAI,IAAI,CAAC;IAC5C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,UAAU,IAAI,GAAG,CAAC;IAC/C,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAExC,OAAO;QACL,QAAQ;QACR,UAAU;QACV,YAAY;QACZ,gBAAgB;QAChB,cAAc;QACd,UAAU;KACX,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,MAAM,OAAO,mBAAoB,SAAQ,aAAa;IAC3C,EAAE,GAAG,yBAAyB,CAAC;IAC/B,IAAI,GAAG,sBAAsB,CAAC;IAC9B,WAAW,GAAG,kEAAkE,CAAC;IACjF,QAAQ,GAAoB,aAAa,CAAC;IAC1C,WAAW,GAAG,aAAa,CAAC;IAC5B,kBAAkB,GAAe,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IAEjF,KAAK,CAAC,MAAM,CAAC,OAAyB;QACpC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAClC,CAAC;QAED,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAEnE,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvE,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAClC,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,UAAU,EAAE;YACpD,MAAM,EAAE;gBACN,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,YAAY,EAAE,QAAQ,CAAC,YAAY;gBACnC,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;gBAC3C,cAAc,EAAE,QAAQ,CAAC,cAAc;aACxC;SACF,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB,CAAC,UAAqB;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,MAAM,UAAU,yBAAyB;IACvC,OAAO,IAAI,mBAAmB,EAAE,CAAC;AACnC,CAAC"}
@@ -0,0 +1,266 @@
1
+ /**
2
+ * Detector Registry - Detector registration and management
3
+ *
4
+ * Registers detectors by ID, validates interface compliance,
5
+ * and prevents duplicate registration.
6
+ *
7
+ * @requirements 6.2 - THE Detector_System SHALL provide a registry for detector discovery and management
8
+ */
9
+ import type { DetectorInfo, DetectorQuery, DetectorQueryResult, DetectorRegistrationOptions, RegisteredDetector } from './types.js';
10
+ import { BaseDetector, type DetectorFactory } from '../base/base-detector.js';
11
+ /**
12
+ * Error thrown when detector registration fails
13
+ */
14
+ export declare class DetectorRegistrationError extends Error {
15
+ readonly detectorId: string;
16
+ readonly errorCause: Error | undefined;
17
+ constructor(message: string, detectorId: string, cause?: Error);
18
+ }
19
+ /**
20
+ * Error thrown when a detector is not found
21
+ */
22
+ export declare class DetectorNotFoundError extends Error {
23
+ readonly detectorId: string;
24
+ constructor(detectorId: string);
25
+ }
26
+ /**
27
+ * Event types emitted by the registry
28
+ */
29
+ export type RegistryEventType = 'registered' | 'unregistered' | 'enabled' | 'disabled';
30
+ /**
31
+ * Event data for registry events
32
+ */
33
+ export interface RegistryEvent {
34
+ type: RegistryEventType;
35
+ detectorId: string;
36
+ detector?: RegisteredDetector;
37
+ }
38
+ /**
39
+ * Event listener callback type
40
+ */
41
+ export type RegistryEventListener = (event: RegistryEvent) => void;
42
+ /**
43
+ * Registry for managing detectors
44
+ *
45
+ * Provides methods for registering, querying, and managing detectors.
46
+ * Ensures detector IDs are unique and validates interface compliance.
47
+ *
48
+ * @requirements 6.2 - THE Detector_System SHALL provide a registry for detector discovery and management
49
+ *
50
+ * @example
51
+ * ```typescript
52
+ * const registry = new DetectorRegistry();
53
+ *
54
+ * // Register a detector
55
+ * registry.register(new FileNamingDetector());
56
+ *
57
+ * // Query detectors
58
+ * const structuralDetectors = registry.query({ category: 'structural' });
59
+ *
60
+ * // Get a specific detector
61
+ * const detector = registry.get('structural/file-naming');
62
+ * ```
63
+ */
64
+ export declare class DetectorRegistry {
65
+ /** Map of detector ID to registered detector */
66
+ private readonly detectors;
67
+ /** Map of detector ID to detector instance */
68
+ private readonly instances;
69
+ /** Map of detector ID to factory function (for lazy loading) */
70
+ private readonly factories;
71
+ /** Event listeners */
72
+ private readonly listeners;
73
+ /**
74
+ * Register a detector instance
75
+ *
76
+ * @param detector - Detector instance to register
77
+ * @param options - Registration options
78
+ * @throws DetectorRegistrationError if registration fails
79
+ *
80
+ * @requirements 6.2 - Registry for detector discovery and management
81
+ */
82
+ register(detector: BaseDetector, options?: DetectorRegistrationOptions): void;
83
+ /**
84
+ * Register a detector factory for lazy loading
85
+ *
86
+ * The factory will be called when the detector is first accessed.
87
+ *
88
+ * @param id - Detector ID
89
+ * @param factory - Factory function that creates the detector
90
+ * @param info - Detector info (required for querying before instantiation)
91
+ * @param options - Registration options
92
+ * @throws DetectorRegistrationError if registration fails
93
+ */
94
+ registerFactory(id: string, factory: DetectorFactory, info: DetectorInfo, options?: DetectorRegistrationOptions): void;
95
+ /**
96
+ * Unregister a detector
97
+ *
98
+ * @param id - Detector ID to unregister
99
+ * @returns true if the detector was unregistered, false if not found
100
+ */
101
+ unregister(id: string): boolean;
102
+ /**
103
+ * Get a detector by ID
104
+ *
105
+ * If the detector was registered with a factory, the factory will be
106
+ * called to create the instance on first access.
107
+ *
108
+ * @param id - Detector ID
109
+ * @returns Detector instance or undefined if not found
110
+ */
111
+ get(id: string): Promise<BaseDetector | undefined>;
112
+ /**
113
+ * Get a detector by ID synchronously
114
+ *
115
+ * Only returns detectors that have already been instantiated.
116
+ * Use get() for lazy-loaded detectors.
117
+ *
118
+ * @param id - Detector ID
119
+ * @returns Detector instance or undefined if not found or not instantiated
120
+ */
121
+ getSync(id: string): BaseDetector | undefined;
122
+ /**
123
+ * Get detector info by ID
124
+ *
125
+ * @param id - Detector ID
126
+ * @returns Registered detector info or undefined if not found
127
+ */
128
+ getInfo(id: string): RegisteredDetector | undefined;
129
+ /**
130
+ * Check if a detector is registered
131
+ *
132
+ * @param id - Detector ID
133
+ * @returns true if the detector is registered
134
+ */
135
+ has(id: string): boolean;
136
+ /**
137
+ * Query detectors by criteria
138
+ *
139
+ * @param query - Query criteria
140
+ * @returns Query result with matching detectors
141
+ */
142
+ query(query?: DetectorQuery): DetectorQueryResult;
143
+ /**
144
+ * Get all registered detector IDs
145
+ *
146
+ * @returns Array of detector IDs
147
+ */
148
+ getIds(): string[];
149
+ /**
150
+ * Get all registered detectors
151
+ *
152
+ * @returns Array of registered detector entries
153
+ */
154
+ getAll(): RegisteredDetector[];
155
+ /**
156
+ * Get the count of registered detectors
157
+ *
158
+ * @returns Number of registered detectors
159
+ */
160
+ get size(): number;
161
+ /**
162
+ * Enable a detector
163
+ *
164
+ * @param id - Detector ID
165
+ * @returns true if the detector was enabled, false if not found
166
+ */
167
+ enable(id: string): boolean;
168
+ /**
169
+ * Disable a detector
170
+ *
171
+ * @param id - Detector ID
172
+ * @returns true if the detector was disabled, false if not found
173
+ */
174
+ disable(id: string): boolean;
175
+ /**
176
+ * Check if a detector is enabled
177
+ *
178
+ * @param id - Detector ID
179
+ * @returns true if enabled, false if disabled or not found
180
+ */
181
+ isEnabled(id: string): boolean;
182
+ /**
183
+ * Add an event listener
184
+ *
185
+ * @param listener - Event listener callback
186
+ */
187
+ addEventListener(listener: RegistryEventListener): void;
188
+ /**
189
+ * Remove an event listener
190
+ *
191
+ * @param listener - Event listener callback
192
+ */
193
+ removeEventListener(listener: RegistryEventListener): void;
194
+ /**
195
+ * Clear all event listeners
196
+ */
197
+ clearEventListeners(): void;
198
+ /**
199
+ * Clear all registered detectors
200
+ *
201
+ * Calls onUnload for all instantiated detectors.
202
+ */
203
+ clear(): void;
204
+ /**
205
+ * Notify all detectors of a file change
206
+ *
207
+ * @param file - Path to the changed file
208
+ */
209
+ notifyFileChange(file: string): void;
210
+ /**
211
+ * Validate a detector instance
212
+ *
213
+ * @param detector - Detector to validate
214
+ * @throws DetectorRegistrationError if validation fails
215
+ */
216
+ private validateDetector;
217
+ /**
218
+ * Validate a detector ID format
219
+ *
220
+ * @param id - Detector ID to validate
221
+ * @throws DetectorRegistrationError if ID is invalid
222
+ */
223
+ private validateDetectorId;
224
+ /**
225
+ * Check if a registered detector matches a query
226
+ *
227
+ * @param registered - Registered detector to check
228
+ * @param query - Query criteria
229
+ * @returns true if the detector matches all criteria
230
+ */
231
+ private matchesQuery;
232
+ /**
233
+ * Emit an event to all listeners
234
+ *
235
+ * @param event - Event to emit
236
+ */
237
+ private emit;
238
+ }
239
+ /**
240
+ * Default global detector registry instance
241
+ *
242
+ * Use this for application-wide detector registration.
243
+ */
244
+ export declare const defaultRegistry: DetectorRegistry;
245
+ /**
246
+ * Register a detector with the default registry
247
+ *
248
+ * @param detector - Detector to register
249
+ * @param options - Registration options
250
+ */
251
+ export declare function registerDetector(detector: BaseDetector, options?: DetectorRegistrationOptions): void;
252
+ /**
253
+ * Get a detector from the default registry
254
+ *
255
+ * @param id - Detector ID
256
+ * @returns Detector instance or undefined
257
+ */
258
+ export declare function getDetector(id: string): Promise<BaseDetector | undefined>;
259
+ /**
260
+ * Query detectors from the default registry
261
+ *
262
+ * @param query - Query criteria
263
+ * @returns Query result
264
+ */
265
+ export declare function queryDetectors(query?: DetectorQuery): DetectorQueryResult;
266
+ //# sourceMappingURL=detector-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detector-registry.d.ts","sourceRoot":"","sources":["../../src/registry/detector-registry.ts"],"names":[],"mappings":"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"}