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,232 @@
1
+ /**
2
+ * Detector Loader - Lazy loading of detectors
3
+ *
4
+ * Loads detectors on demand to minimize startup time.
5
+ * Supports dynamic import of detector modules and batch loading.
6
+ *
7
+ * @requirements 6.7 - THE Detector_System SHALL support lazy loading of detectors
8
+ */
9
+ import type { BaseDetector } from '../base/base-detector.js';
10
+ import type { DetectorInfo, DetectorRegistrationOptions } from './types.js';
11
+ import { DetectorRegistry } from './detector-registry.js';
12
+ /**
13
+ * Detector module definition for lazy loading
14
+ */
15
+ export interface DetectorModule {
16
+ /** Unique detector ID */
17
+ id: string;
18
+ /** Detector metadata for querying before instantiation */
19
+ info: DetectorInfo;
20
+ /** Module path for dynamic import */
21
+ modulePath: string;
22
+ /** Export name within the module (default: 'default') */
23
+ exportName?: string;
24
+ /** Registration options */
25
+ options?: DetectorRegistrationOptions;
26
+ }
27
+ /**
28
+ * Detector loader configuration
29
+ */
30
+ export interface DetectorLoaderConfig {
31
+ /** Base path for resolving module paths */
32
+ basePath?: string;
33
+ /** Whether to preload all detectors on initialization */
34
+ preload?: boolean;
35
+ /** Timeout for loading a detector in milliseconds */
36
+ loadTimeout?: number;
37
+ /** Whether to continue loading if one detector fails */
38
+ continueOnError?: boolean;
39
+ }
40
+ /**
41
+ * Result of loading detectors
42
+ */
43
+ export interface LoadResult {
44
+ /** Successfully loaded detector IDs */
45
+ loaded: string[];
46
+ /** Failed detector IDs with error messages */
47
+ failed: Array<{
48
+ id: string;
49
+ error: string;
50
+ }>;
51
+ /** Total time taken in milliseconds */
52
+ duration: number;
53
+ }
54
+ /**
55
+ * Detector load status
56
+ */
57
+ export type LoadStatus = 'pending' | 'loading' | 'loaded' | 'failed';
58
+ /**
59
+ * Lazy loader for detectors
60
+ *
61
+ * Manages lazy loading of detectors to minimize startup time.
62
+ * Detectors are only instantiated when first accessed.
63
+ *
64
+ * @requirements 6.7 - THE Detector_System SHALL support lazy loading of detectors
65
+ *
66
+ * @example
67
+ * ```typescript
68
+ * const loader = new DetectorLoader(registry);
69
+ *
70
+ * // Register detector modules for lazy loading
71
+ * loader.registerModule({
72
+ * id: 'structural/file-naming',
73
+ * info: { ... },
74
+ * modulePath: './structural/file-naming.js',
75
+ * });
76
+ *
77
+ * // Load a specific detector
78
+ * const detector = await loader.load('structural/file-naming');
79
+ *
80
+ * // Load all registered detectors
81
+ * const result = await loader.loadAll();
82
+ * ```
83
+ */
84
+ export declare class DetectorLoader {
85
+ /** Registry to register loaded detectors with */
86
+ private readonly registry;
87
+ /** Configuration */
88
+ private readonly config;
89
+ /** Registered detector modules */
90
+ private readonly modules;
91
+ /**
92
+ * Create a new detector loader
93
+ *
94
+ * @param registry - Registry to register loaded detectors with
95
+ * @param config - Loader configuration
96
+ */
97
+ constructor(registry: DetectorRegistry, config?: DetectorLoaderConfig);
98
+ /**
99
+ * Register a detector module for lazy loading
100
+ *
101
+ * @param module - Detector module definition
102
+ */
103
+ registerModule(module: DetectorModule): void;
104
+ /**
105
+ * Register multiple detector modules
106
+ *
107
+ * @param modules - Array of detector module definitions
108
+ */
109
+ registerModules(modules: DetectorModule[]): void;
110
+ /**
111
+ * Unregister a detector module
112
+ *
113
+ * @param id - Detector ID to unregister
114
+ * @returns true if the module was unregistered
115
+ */
116
+ unregisterModule(id: string): boolean;
117
+ /**
118
+ * Load a specific detector by ID
119
+ *
120
+ * @param id - Detector ID to load
121
+ * @returns Loaded detector instance
122
+ * @throws DetectorRegistrationError if loading fails
123
+ */
124
+ load(id: string): Promise<BaseDetector>;
125
+ /**
126
+ * Load all registered detector modules
127
+ *
128
+ * @returns Load result with success/failure information
129
+ */
130
+ loadAll(): Promise<LoadResult>;
131
+ /**
132
+ * Load detectors matching a filter
133
+ *
134
+ * @param filter - Filter function to select which detectors to load
135
+ * @returns Load result
136
+ */
137
+ loadFiltered(filter: (module: DetectorModule) => boolean): Promise<LoadResult>;
138
+ /**
139
+ * Load detectors by category
140
+ *
141
+ * @param category - Category to load
142
+ * @returns Load result
143
+ */
144
+ loadByCategory(category: string): Promise<LoadResult>;
145
+ /**
146
+ * Load detectors by language
147
+ *
148
+ * @param language - Language to load detectors for
149
+ * @returns Load result
150
+ */
151
+ loadByLanguage(language: string): Promise<LoadResult>;
152
+ /**
153
+ * Get the load status of a detector
154
+ *
155
+ * @param id - Detector ID
156
+ * @returns Load status or undefined if not registered
157
+ */
158
+ getStatus(id: string): LoadStatus | undefined;
159
+ /**
160
+ * Get all registered module IDs
161
+ *
162
+ * @returns Array of detector IDs
163
+ */
164
+ getModuleIds(): string[];
165
+ /**
166
+ * Get all registered modules
167
+ *
168
+ * @returns Array of detector modules
169
+ */
170
+ getModules(): DetectorModule[];
171
+ /**
172
+ * Check if a module is registered
173
+ *
174
+ * @param id - Detector ID
175
+ * @returns true if the module is registered
176
+ */
177
+ hasModule(id: string): boolean;
178
+ /**
179
+ * Get the count of registered modules
180
+ */
181
+ get size(): number;
182
+ /**
183
+ * Get statistics about loaded detectors
184
+ */
185
+ getStats(): {
186
+ pending: number;
187
+ loading: number;
188
+ loaded: number;
189
+ failed: number;
190
+ };
191
+ /**
192
+ * Load a detector from its module definition
193
+ *
194
+ * @param module - Detector module definition
195
+ * @returns Loaded detector instance
196
+ */
197
+ private loadDetector;
198
+ /**
199
+ * Resolve a module path relative to the base path
200
+ *
201
+ * @param modulePath - Module path to resolve
202
+ * @returns Resolved path
203
+ */
204
+ private resolvePath;
205
+ /**
206
+ * Clear all registered modules
207
+ */
208
+ clear(): void;
209
+ }
210
+ /**
211
+ * Create a detector module definition
212
+ *
213
+ * Helper function for creating detector module definitions.
214
+ *
215
+ * @param id - Detector ID
216
+ * @param info - Detector info
217
+ * @param modulePath - Module path
218
+ * @param options - Additional options
219
+ * @returns Detector module definition
220
+ */
221
+ export declare function createDetectorModule(id: string, info: Omit<DetectorInfo, 'id'>, modulePath: string, options?: {
222
+ exportName?: string;
223
+ registrationOptions?: DetectorRegistrationOptions;
224
+ }): DetectorModule;
225
+ /**
226
+ * Create a detector loader with default registry
227
+ *
228
+ * @param config - Loader configuration
229
+ * @returns Detector loader instance
230
+ */
231
+ export declare function createLoader(registry: DetectorRegistry, config?: DetectorLoaderConfig): DetectorLoader;
232
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/registry/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAA6B,MAAM,wBAAwB,CAAC;AAMrF;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,yBAAyB;IACzB,EAAE,EAAE,MAAM,CAAC;IAEX,0DAA0D;IAC1D,IAAI,EAAE,YAAY,CAAC;IAEnB,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;IAEnB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,2BAA2B;IAC3B,OAAO,CAAC,EAAE,2BAA2B,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,yDAAyD;IACzD,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,wDAAwD;IACxD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,uCAAuC;IACvC,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB,8CAA8C;IAC9C,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAE7C,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAgBrE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,cAAc;IACzB,iDAAiD;IACjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAE5C,oBAAoB;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;IAExD,kCAAkC;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6C;IAErE;;;;;OAKG;gBACS,QAAQ,EAAE,gBAAgB,EAAE,MAAM,GAAE,oBAAyB;IAczE;;;;OAIG;IACH,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAwB5C;;;;OAIG;IACH,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI;IAMhD;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAerC;;;;;;OAMG;IACG,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA0C7C;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC;IA4BpC;;;;;OAKG;IACG,YAAY,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAgCpF;;;;;OAKG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAI3D;;;;;OAKG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAU3D;;;;;OAKG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAI7C;;;;OAIG;IACH,YAAY,IAAI,MAAM,EAAE;IAIxB;;;;OAIG;IACH,UAAU,IAAI,cAAc,EAAE;IAI9B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI9B;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,QAAQ,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IA8BhF;;;;;OAKG;YACW,YAAY;IA6D1B;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAOnB;;OAEG;IACH,KAAK,IAAI,IAAI;CAMd;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,EAC9B,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,mBAAmB,CAAC,EAAE,2BAA2B,CAAA;CAAE,GACnF,cAAc,CAgBhB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,CAAC,EAAE,oBAAoB,GAC5B,cAAc,CAEhB"}
@@ -0,0 +1,419 @@
1
+ /**
2
+ * Detector Loader - Lazy loading of detectors
3
+ *
4
+ * Loads detectors on demand to minimize startup time.
5
+ * Supports dynamic import of detector modules and batch loading.
6
+ *
7
+ * @requirements 6.7 - THE Detector_System SHALL support lazy loading of detectors
8
+ */
9
+ import { DetectorRegistry, DetectorRegistrationError } from './detector-registry.js';
10
+ // ============================================================================
11
+ // Detector Loader Class
12
+ // ============================================================================
13
+ /**
14
+ * Lazy loader for detectors
15
+ *
16
+ * Manages lazy loading of detectors to minimize startup time.
17
+ * Detectors are only instantiated when first accessed.
18
+ *
19
+ * @requirements 6.7 - THE Detector_System SHALL support lazy loading of detectors
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const loader = new DetectorLoader(registry);
24
+ *
25
+ * // Register detector modules for lazy loading
26
+ * loader.registerModule({
27
+ * id: 'structural/file-naming',
28
+ * info: { ... },
29
+ * modulePath: './structural/file-naming.js',
30
+ * });
31
+ *
32
+ * // Load a specific detector
33
+ * const detector = await loader.load('structural/file-naming');
34
+ *
35
+ * // Load all registered detectors
36
+ * const result = await loader.loadAll();
37
+ * ```
38
+ */
39
+ export class DetectorLoader {
40
+ /** Registry to register loaded detectors with */
41
+ registry;
42
+ /** Configuration */
43
+ config;
44
+ /** Registered detector modules */
45
+ modules = new Map();
46
+ /**
47
+ * Create a new detector loader
48
+ *
49
+ * @param registry - Registry to register loaded detectors with
50
+ * @param config - Loader configuration
51
+ */
52
+ constructor(registry, config = {}) {
53
+ this.registry = registry;
54
+ this.config = {
55
+ basePath: config.basePath ?? '',
56
+ preload: config.preload ?? false,
57
+ loadTimeout: config.loadTimeout ?? 30000,
58
+ continueOnError: config.continueOnError ?? true,
59
+ };
60
+ }
61
+ // ============================================================================
62
+ // Module Registration
63
+ // ============================================================================
64
+ /**
65
+ * Register a detector module for lazy loading
66
+ *
67
+ * @param module - Detector module definition
68
+ */
69
+ registerModule(module) {
70
+ if (this.modules.has(module.id)) {
71
+ throw new DetectorRegistrationError(`Detector module '${module.id}' is already registered`, module.id);
72
+ }
73
+ this.modules.set(module.id, {
74
+ module,
75
+ status: 'pending',
76
+ error: undefined,
77
+ loadPromise: undefined,
78
+ });
79
+ // Register factory with registry for lazy loading
80
+ this.registry.registerFactory(module.id, () => this.loadDetector(module), module.info, module.options);
81
+ }
82
+ /**
83
+ * Register multiple detector modules
84
+ *
85
+ * @param modules - Array of detector module definitions
86
+ */
87
+ registerModules(modules) {
88
+ for (const module of modules) {
89
+ this.registerModule(module);
90
+ }
91
+ }
92
+ /**
93
+ * Unregister a detector module
94
+ *
95
+ * @param id - Detector ID to unregister
96
+ * @returns true if the module was unregistered
97
+ */
98
+ unregisterModule(id) {
99
+ const state = this.modules.get(id);
100
+ if (!state) {
101
+ return false;
102
+ }
103
+ this.modules.delete(id);
104
+ this.registry.unregister(id);
105
+ return true;
106
+ }
107
+ // ============================================================================
108
+ // Loading Methods
109
+ // ============================================================================
110
+ /**
111
+ * Load a specific detector by ID
112
+ *
113
+ * @param id - Detector ID to load
114
+ * @returns Loaded detector instance
115
+ * @throws DetectorRegistrationError if loading fails
116
+ */
117
+ async load(id) {
118
+ const state = this.modules.get(id);
119
+ if (!state) {
120
+ throw new DetectorRegistrationError(`Detector module '${id}' is not registered`, id);
121
+ }
122
+ // If already loading, wait for the existing promise
123
+ if (state.status === 'loading' && state.loadPromise) {
124
+ return state.loadPromise;
125
+ }
126
+ // If already loaded, get from registry
127
+ if (state.status === 'loaded') {
128
+ const detector = await this.registry.get(id);
129
+ if (detector) {
130
+ return detector;
131
+ }
132
+ }
133
+ // If previously failed, try again
134
+ if (state.status === 'failed') {
135
+ state.status = 'pending';
136
+ state.error = undefined;
137
+ }
138
+ // Start loading
139
+ state.status = 'loading';
140
+ state.loadPromise = this.loadDetector(state.module);
141
+ try {
142
+ const detector = await state.loadPromise;
143
+ state.status = 'loaded';
144
+ return detector;
145
+ }
146
+ catch (error) {
147
+ state.status = 'failed';
148
+ state.error = error instanceof Error ? error : new Error(String(error));
149
+ throw error;
150
+ }
151
+ finally {
152
+ state.loadPromise = undefined;
153
+ }
154
+ }
155
+ /**
156
+ * Load all registered detector modules
157
+ *
158
+ * @returns Load result with success/failure information
159
+ */
160
+ async loadAll() {
161
+ const startTime = Date.now();
162
+ const loaded = [];
163
+ const failed = [];
164
+ const loadPromises = Array.from(this.modules.keys()).map(async (id) => {
165
+ try {
166
+ await this.load(id);
167
+ loaded.push(id);
168
+ }
169
+ catch (error) {
170
+ const errorMessage = error instanceof Error ? error.message : String(error);
171
+ failed.push({ id, error: errorMessage });
172
+ if (!this.config.continueOnError) {
173
+ throw error;
174
+ }
175
+ }
176
+ });
177
+ await Promise.all(loadPromises);
178
+ return {
179
+ loaded,
180
+ failed,
181
+ duration: Date.now() - startTime,
182
+ };
183
+ }
184
+ /**
185
+ * Load detectors matching a filter
186
+ *
187
+ * @param filter - Filter function to select which detectors to load
188
+ * @returns Load result
189
+ */
190
+ async loadFiltered(filter) {
191
+ const startTime = Date.now();
192
+ const loaded = [];
193
+ const failed = [];
194
+ const modulesToLoad = Array.from(this.modules.values())
195
+ .filter((state) => filter(state.module))
196
+ .map((state) => state.module.id);
197
+ const loadPromises = modulesToLoad.map(async (id) => {
198
+ try {
199
+ await this.load(id);
200
+ loaded.push(id);
201
+ }
202
+ catch (error) {
203
+ const errorMessage = error instanceof Error ? error.message : String(error);
204
+ failed.push({ id, error: errorMessage });
205
+ if (!this.config.continueOnError) {
206
+ throw error;
207
+ }
208
+ }
209
+ });
210
+ await Promise.all(loadPromises);
211
+ return {
212
+ loaded,
213
+ failed,
214
+ duration: Date.now() - startTime,
215
+ };
216
+ }
217
+ /**
218
+ * Load detectors by category
219
+ *
220
+ * @param category - Category to load
221
+ * @returns Load result
222
+ */
223
+ async loadByCategory(category) {
224
+ return this.loadFiltered((module) => module.info.category === category);
225
+ }
226
+ /**
227
+ * Load detectors by language
228
+ *
229
+ * @param language - Language to load detectors for
230
+ * @returns Load result
231
+ */
232
+ async loadByLanguage(language) {
233
+ return this.loadFiltered((module) => module.info.supportedLanguages.includes(language));
234
+ }
235
+ // ============================================================================
236
+ // Status Methods
237
+ // ============================================================================
238
+ /**
239
+ * Get the load status of a detector
240
+ *
241
+ * @param id - Detector ID
242
+ * @returns Load status or undefined if not registered
243
+ */
244
+ getStatus(id) {
245
+ return this.modules.get(id)?.status;
246
+ }
247
+ /**
248
+ * Get all registered module IDs
249
+ *
250
+ * @returns Array of detector IDs
251
+ */
252
+ getModuleIds() {
253
+ return Array.from(this.modules.keys());
254
+ }
255
+ /**
256
+ * Get all registered modules
257
+ *
258
+ * @returns Array of detector modules
259
+ */
260
+ getModules() {
261
+ return Array.from(this.modules.values()).map((state) => state.module);
262
+ }
263
+ /**
264
+ * Check if a module is registered
265
+ *
266
+ * @param id - Detector ID
267
+ * @returns true if the module is registered
268
+ */
269
+ hasModule(id) {
270
+ return this.modules.has(id);
271
+ }
272
+ /**
273
+ * Get the count of registered modules
274
+ */
275
+ get size() {
276
+ return this.modules.size;
277
+ }
278
+ /**
279
+ * Get statistics about loaded detectors
280
+ */
281
+ getStats() {
282
+ let pending = 0;
283
+ let loading = 0;
284
+ let loaded = 0;
285
+ let failed = 0;
286
+ for (const state of this.modules.values()) {
287
+ switch (state.status) {
288
+ case 'pending':
289
+ pending++;
290
+ break;
291
+ case 'loading':
292
+ loading++;
293
+ break;
294
+ case 'loaded':
295
+ loaded++;
296
+ break;
297
+ case 'failed':
298
+ failed++;
299
+ break;
300
+ }
301
+ }
302
+ return { pending, loading, loaded, failed };
303
+ }
304
+ // ============================================================================
305
+ // Private Methods
306
+ // ============================================================================
307
+ /**
308
+ * Load a detector from its module definition
309
+ *
310
+ * @param module - Detector module definition
311
+ * @returns Loaded detector instance
312
+ */
313
+ async loadDetector(module) {
314
+ const modulePath = this.resolvePath(module.modulePath);
315
+ const exportName = module.exportName ?? 'default';
316
+ try {
317
+ // Create a timeout promise
318
+ const timeoutPromise = new Promise((_, reject) => {
319
+ setTimeout(() => {
320
+ reject(new Error(`Timeout loading detector '${module.id}' after ${this.config.loadTimeout}ms`));
321
+ }, this.config.loadTimeout);
322
+ });
323
+ // Race between import and timeout
324
+ const importedModule = await Promise.race([
325
+ import(modulePath),
326
+ timeoutPromise,
327
+ ]);
328
+ // Get the detector class/factory from the module
329
+ const DetectorClass = importedModule[exportName];
330
+ if (!DetectorClass) {
331
+ throw new Error(`Export '${exportName}' not found in module '${modulePath}'`);
332
+ }
333
+ // Instantiate the detector
334
+ let detector;
335
+ if (typeof DetectorClass === 'function') {
336
+ // Check if it's a class (has prototype) or a factory function
337
+ if (DetectorClass.prototype && DetectorClass.prototype.constructor === DetectorClass) {
338
+ // It's a class, instantiate it
339
+ detector = new DetectorClass();
340
+ }
341
+ else {
342
+ // It's a factory function, call it
343
+ const result = DetectorClass();
344
+ detector = result instanceof Promise ? await result : result;
345
+ }
346
+ }
347
+ else if (typeof DetectorClass === 'object' && DetectorClass !== null) {
348
+ // It's already an instance
349
+ detector = DetectorClass;
350
+ }
351
+ else {
352
+ throw new Error(`Invalid export '${exportName}' in module '${modulePath}': expected class, factory, or instance`);
353
+ }
354
+ return detector;
355
+ }
356
+ catch (error) {
357
+ throw new DetectorRegistrationError(`Failed to load detector '${module.id}' from '${modulePath}': ${error instanceof Error ? error.message : String(error)}`, module.id, error instanceof Error ? error : undefined);
358
+ }
359
+ }
360
+ /**
361
+ * Resolve a module path relative to the base path
362
+ *
363
+ * @param modulePath - Module path to resolve
364
+ * @returns Resolved path
365
+ */
366
+ resolvePath(modulePath) {
367
+ if (this.config.basePath && !modulePath.startsWith('/') && !modulePath.startsWith('.')) {
368
+ return `${this.config.basePath}/${modulePath}`;
369
+ }
370
+ return modulePath;
371
+ }
372
+ /**
373
+ * Clear all registered modules
374
+ */
375
+ clear() {
376
+ for (const id of this.modules.keys()) {
377
+ this.registry.unregister(id);
378
+ }
379
+ this.modules.clear();
380
+ }
381
+ }
382
+ // ============================================================================
383
+ // Factory Functions
384
+ // ============================================================================
385
+ /**
386
+ * Create a detector module definition
387
+ *
388
+ * Helper function for creating detector module definitions.
389
+ *
390
+ * @param id - Detector ID
391
+ * @param info - Detector info
392
+ * @param modulePath - Module path
393
+ * @param options - Additional options
394
+ * @returns Detector module definition
395
+ */
396
+ export function createDetectorModule(id, info, modulePath, options) {
397
+ const result = {
398
+ id,
399
+ info: { ...info, id },
400
+ modulePath,
401
+ };
402
+ if (options?.exportName !== undefined) {
403
+ result.exportName = options.exportName;
404
+ }
405
+ if (options?.registrationOptions !== undefined) {
406
+ result.options = options.registrationOptions;
407
+ }
408
+ return result;
409
+ }
410
+ /**
411
+ * Create a detector loader with default registry
412
+ *
413
+ * @param config - Loader configuration
414
+ * @returns Detector loader instance
415
+ */
416
+ export function createLoader(registry, config) {
417
+ return new DetectorLoader(registry, config);
418
+ }
419
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/registry/loader.ts"],"names":[],"mappings":"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"}