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,602 @@
1
+ /**
2
+ * Package Boundaries Detector - Monorepo boundary violation detection
3
+ *
4
+ * Detects monorepo package boundary violations including:
5
+ * - Direct imports between packages that bypass the public API
6
+ * - Imports from packages that are not declared as dependencies
7
+ * - Cross-package imports that violate the dependency hierarchy
8
+ * - Internal module access (importing from src/ instead of package entry point)
9
+ *
10
+ * @requirements 7.8 - THE Structural_Detector SHALL detect package boundary violations in monorepos
11
+ */
12
+ import { StructuralDetector } from '../base/index.js';
13
+ // ============================================================================
14
+ // Constants
15
+ // ============================================================================
16
+ /**
17
+ * Common monorepo package directory patterns
18
+ */
19
+ export const COMMON_PACKAGE_PATTERNS = [
20
+ 'packages/*',
21
+ 'apps/*',
22
+ 'libs/*',
23
+ 'modules/*',
24
+ 'services/*',
25
+ ];
26
+ /**
27
+ * Patterns that indicate internal/private paths
28
+ */
29
+ export const INTERNAL_PATH_PATTERNS = [
30
+ '/src/',
31
+ '/lib/',
32
+ '/dist/',
33
+ '/internal/',
34
+ '/private/',
35
+ '/_internal/',
36
+ '/_private/',
37
+ ];
38
+ /**
39
+ * Default monorepo configuration
40
+ */
41
+ export const DEFAULT_MONOREPO_CONFIG = {
42
+ packagePatterns: COMMON_PACKAGE_PATTERNS,
43
+ allowInternalImports: false,
44
+ };
45
+ // ============================================================================
46
+ // Helper Functions
47
+ // ============================================================================
48
+ /**
49
+ * Normalize a file path for consistent matching
50
+ */
51
+ function normalizePath(path) {
52
+ return path.replace(/\\/g, '/');
53
+ }
54
+ /**
55
+ * Extract package name from an import path
56
+ * Handles scoped packages (@org/package) and regular packages
57
+ */
58
+ export function extractPackageName(importPath) {
59
+ // Skip relative imports
60
+ if (importPath.startsWith('.') || importPath.startsWith('/')) {
61
+ return null;
62
+ }
63
+ // Handle scoped packages (@org/package)
64
+ if (importPath.startsWith('@')) {
65
+ const parts = importPath.split('/');
66
+ if (parts.length >= 2) {
67
+ return `${parts[0]}/${parts[1]}`;
68
+ }
69
+ return null;
70
+ }
71
+ // Handle regular packages
72
+ const parts = importPath.split('/');
73
+ return parts[0] || null;
74
+ }
75
+ /**
76
+ * Check if an import path accesses internal package paths
77
+ */
78
+ export function isInternalImport(importPath) {
79
+ const normalizedPath = normalizePath(importPath);
80
+ // Check for common internal path patterns
81
+ for (const pattern of INTERNAL_PATH_PATTERNS) {
82
+ if (normalizedPath.includes(pattern)) {
83
+ return true;
84
+ }
85
+ }
86
+ // Check for direct src/ access after package name
87
+ // e.g., driftdetect-core/src/internal or package-name/src/utils
88
+ const packageName = extractPackageName(importPath);
89
+ if (packageName) {
90
+ const afterPackage = importPath.slice(packageName.length);
91
+ if (afterPackage.startsWith('/src/') ||
92
+ afterPackage.startsWith('/lib/') ||
93
+ afterPackage.startsWith('/dist/')) {
94
+ return true;
95
+ }
96
+ }
97
+ return false;
98
+ }
99
+ /**
100
+ * Check if an import bypasses the public API
101
+ * (imports from internal paths instead of the package entry point)
102
+ */
103
+ export function bypassesPublicApi(importPath, packageName) {
104
+ // If the import is just the package name, it uses the public API
105
+ if (importPath === packageName) {
106
+ return false;
107
+ }
108
+ // If the import has a subpath, check if it's accessing internal paths
109
+ const subpath = importPath.slice(packageName.length);
110
+ // Allow explicit exports like driftdetect-core/utils (if exported)
111
+ // But flag internal paths like driftdetect-core/src/utils
112
+ if (subpath.startsWith('/src/') ||
113
+ subpath.startsWith('/lib/') ||
114
+ subpath.startsWith('/dist/') ||
115
+ subpath.includes('/internal/') ||
116
+ subpath.includes('/private/')) {
117
+ return true;
118
+ }
119
+ return false;
120
+ }
121
+ /**
122
+ * Detect packages in a monorepo from file paths
123
+ */
124
+ export function detectMonorepoPackages(files, config = DEFAULT_MONOREPO_CONFIG) {
125
+ const packages = [];
126
+ const packageDirs = new Set();
127
+ // Find package directories based on patterns
128
+ for (const file of files) {
129
+ const normalizedFile = normalizePath(file);
130
+ for (const pattern of config.packagePatterns) {
131
+ // Extract the base directory from the pattern (e.g., 'packages' from 'packages/*')
132
+ const patternBase = pattern.replace('/*', '').replace('/**', '');
133
+ // Check if the file is under this pattern base
134
+ if (normalizedFile.startsWith(patternBase + '/')) {
135
+ // Extract the package directory name
136
+ const afterBase = normalizedFile.slice(patternBase.length + 1);
137
+ const packageDir = afterBase.split('/')[0];
138
+ if (packageDir) {
139
+ const fullPackageDir = `${patternBase}/${packageDir}`;
140
+ packageDirs.add(fullPackageDir);
141
+ }
142
+ }
143
+ }
144
+ }
145
+ // Also detect packages from package.json files
146
+ for (const file of files) {
147
+ const normalizedFile = normalizePath(file);
148
+ if (normalizedFile.endsWith('/package.json') || normalizedFile === 'package.json') {
149
+ const dir = normalizedFile.replace('/package.json', '');
150
+ if (dir && dir !== '.' && dir !== 'package.json') {
151
+ packageDirs.add(dir);
152
+ }
153
+ }
154
+ }
155
+ // Create PackageInfo for each detected package
156
+ for (const dir of packageDirs) {
157
+ // Derive package name from directory
158
+ const parts = dir.split('/');
159
+ const packageName = parts[parts.length - 1] || dir;
160
+ // Check if it's a scoped package (common in monorepos)
161
+ const parentDir = parts[parts.length - 2];
162
+ const scopedName = parentDir === 'packages' || parentDir === 'apps' || parentDir === 'libs'
163
+ ? `@${parts[0] || 'monorepo'}/${packageName}`
164
+ : packageName;
165
+ packages.push({
166
+ name: scopedName,
167
+ path: dir,
168
+ dependencies: [],
169
+ devDependencies: [],
170
+ peerDependencies: [],
171
+ });
172
+ }
173
+ return packages;
174
+ }
175
+ /**
176
+ * Find which package a file belongs to
177
+ */
178
+ export function findPackageForFile(filePath, packages) {
179
+ const normalizedPath = normalizePath(filePath);
180
+ // Find the package with the longest matching path (most specific)
181
+ let bestMatch = null;
182
+ let bestMatchLength = 0;
183
+ for (const pkg of packages) {
184
+ const normalizedPkgPath = normalizePath(pkg.path);
185
+ if (normalizedPath.startsWith(normalizedPkgPath + '/') ||
186
+ normalizedPath === normalizedPkgPath) {
187
+ if (normalizedPkgPath.length > bestMatchLength) {
188
+ bestMatch = pkg;
189
+ bestMatchLength = normalizedPkgPath.length;
190
+ }
191
+ }
192
+ }
193
+ return bestMatch;
194
+ }
195
+ /**
196
+ * Resolve an import to determine which package it targets
197
+ */
198
+ export function resolveImportToPackage(importSource, currentFile, packages) {
199
+ // Handle relative imports
200
+ if (importSource.startsWith('.')) {
201
+ const currentDir = normalizePath(currentFile).split('/').slice(0, -1).join('/');
202
+ const segments = importSource.split('/');
203
+ const pathSegments = currentDir.split('/');
204
+ for (const segment of segments) {
205
+ if (segment === '.') {
206
+ continue;
207
+ }
208
+ else if (segment === '..') {
209
+ pathSegments.pop();
210
+ }
211
+ else {
212
+ pathSegments.push(segment);
213
+ }
214
+ }
215
+ const resolvedPath = pathSegments.join('/');
216
+ return findPackageForFile(resolvedPath, packages);
217
+ }
218
+ // Handle package imports
219
+ const packageName = extractPackageName(importSource);
220
+ if (!packageName) {
221
+ return null;
222
+ }
223
+ // Find package by name (exact match)
224
+ for (const pkg of packages) {
225
+ if (pkg.name === packageName) {
226
+ return pkg;
227
+ }
228
+ }
229
+ // Find package by name (ends with the package name for scoped packages)
230
+ for (const pkg of packages) {
231
+ if (pkg.name.endsWith('/' + packageName.replace('@', '').split('/').pop())) {
232
+ return pkg;
233
+ }
234
+ }
235
+ // Try to find by directory name
236
+ const pkgDirName = packageName.startsWith('@')
237
+ ? packageName.split('/').pop()
238
+ : packageName;
239
+ for (const pkg of packages) {
240
+ const dirName = pkg.path.split('/').pop();
241
+ if (dirName === pkgDirName) {
242
+ return pkg;
243
+ }
244
+ }
245
+ return null;
246
+ }
247
+ /**
248
+ * Check if a package is declared as a dependency
249
+ */
250
+ export function isDeclaredDependency(targetPackage, sourcePackage) {
251
+ const allDeps = [
252
+ ...sourcePackage.dependencies,
253
+ ...sourcePackage.devDependencies,
254
+ ...sourcePackage.peerDependencies,
255
+ ];
256
+ return allDeps.includes(targetPackage);
257
+ }
258
+ /**
259
+ * Generate a suggested import path for a violation
260
+ */
261
+ export function generateSuggestedImport(violation) {
262
+ switch (violation.type) {
263
+ case 'internal-import':
264
+ case 'bypass-public-api':
265
+ // Suggest using the package name directly
266
+ return violation.targetPackage;
267
+ case 'undeclared-dependency':
268
+ // Suggest adding to dependencies
269
+ return undefined; // No import fix, need to add dependency
270
+ case 'hierarchy-violation':
271
+ // Suggest restructuring
272
+ return undefined;
273
+ default:
274
+ return undefined;
275
+ }
276
+ }
277
+ /**
278
+ * Calculate severity for a package boundary violation
279
+ */
280
+ export function calculateViolationSeverity(type) {
281
+ switch (type) {
282
+ case 'internal-import':
283
+ return 'error'; // Accessing internal paths is a serious violation
284
+ case 'bypass-public-api':
285
+ return 'warning'; // Bypassing public API should be fixed
286
+ case 'undeclared-dependency':
287
+ return 'error'; // Missing dependency can cause runtime errors
288
+ case 'hierarchy-violation':
289
+ return 'warning'; // Hierarchy violations are architectural concerns
290
+ default:
291
+ return 'warning';
292
+ }
293
+ }
294
+ /**
295
+ * Analyze package boundaries for a file
296
+ */
297
+ export function analyzePackageBoundaries(file, imports, projectFiles, config = DEFAULT_MONOREPO_CONFIG) {
298
+ // Detect packages in the monorepo
299
+ const packages = detectMonorepoPackages(projectFiles, config);
300
+ // Find the current file's package
301
+ const currentPackage = findPackageForFile(file, packages);
302
+ // If not in a monorepo package, return early
303
+ if (!currentPackage || packages.length <= 1) {
304
+ return {
305
+ isInMonorepo: packages.length > 1,
306
+ currentPackage,
307
+ packages,
308
+ violations: [],
309
+ totalCrossPackageImports: 0,
310
+ };
311
+ }
312
+ const violations = [];
313
+ let crossPackageImports = 0;
314
+ for (const imp of imports) {
315
+ // Skip relative imports within the same package (unless checking internal)
316
+ if (imp.source.startsWith('.')) {
317
+ // Check if relative import goes outside current package
318
+ const targetPackage = resolveImportToPackage(imp.source, file, packages);
319
+ if (targetPackage && targetPackage.name !== currentPackage.name) {
320
+ crossPackageImports++;
321
+ // Relative import to another package - this is a violation
322
+ violations.push({
323
+ type: 'bypass-public-api',
324
+ importSource: imp.source,
325
+ targetPackage: targetPackage.name,
326
+ sourcePackage: currentPackage.name,
327
+ line: imp.line,
328
+ severity: 'warning',
329
+ description: `Relative import to package '${targetPackage.name}' bypasses the public API`,
330
+ suggestedImport: targetPackage.name,
331
+ });
332
+ }
333
+ continue;
334
+ }
335
+ // Extract package name from import
336
+ const packageName = extractPackageName(imp.source);
337
+ if (!packageName) {
338
+ continue;
339
+ }
340
+ // Find the target package
341
+ const targetPackage = resolveImportToPackage(imp.source, file, packages);
342
+ // Skip external packages (not in monorepo)
343
+ if (!targetPackage) {
344
+ continue;
345
+ }
346
+ // Skip same-package imports
347
+ if (targetPackage.name === currentPackage.name) {
348
+ continue;
349
+ }
350
+ crossPackageImports++;
351
+ // Check for internal import violations
352
+ if (isInternalImport(imp.source)) {
353
+ violations.push({
354
+ type: 'internal-import',
355
+ importSource: imp.source,
356
+ targetPackage: targetPackage.name,
357
+ sourcePackage: currentPackage.name,
358
+ line: imp.line,
359
+ severity: 'error',
360
+ description: `Import from internal path of package '${targetPackage.name}'`,
361
+ suggestedImport: targetPackage.name,
362
+ });
363
+ continue;
364
+ }
365
+ // Check for public API bypass
366
+ if (bypassesPublicApi(imp.source, packageName)) {
367
+ violations.push({
368
+ type: 'bypass-public-api',
369
+ importSource: imp.source,
370
+ targetPackage: targetPackage.name,
371
+ sourcePackage: currentPackage.name,
372
+ line: imp.line,
373
+ severity: 'warning',
374
+ description: `Import bypasses public API of package '${targetPackage.name}'`,
375
+ suggestedImport: targetPackage.name,
376
+ });
377
+ continue;
378
+ }
379
+ // Check for undeclared dependency (if we have dependency info)
380
+ if (currentPackage.dependencies.length > 0 ||
381
+ currentPackage.devDependencies.length > 0) {
382
+ if (!isDeclaredDependency(targetPackage.name, currentPackage)) {
383
+ violations.push({
384
+ type: 'undeclared-dependency',
385
+ importSource: imp.source,
386
+ targetPackage: targetPackage.name,
387
+ sourcePackage: currentPackage.name,
388
+ line: imp.line,
389
+ severity: 'error',
390
+ description: `Package '${targetPackage.name}' is not declared as a dependency`,
391
+ });
392
+ }
393
+ }
394
+ }
395
+ return {
396
+ isInMonorepo: true,
397
+ currentPackage,
398
+ packages,
399
+ violations,
400
+ totalCrossPackageImports: crossPackageImports,
401
+ };
402
+ }
403
+ // ============================================================================
404
+ // Package Boundaries Detector Class
405
+ // ============================================================================
406
+ /**
407
+ * Detector for monorepo package boundary violations
408
+ *
409
+ * Identifies violations including:
410
+ * - Direct imports between packages that bypass the public API
411
+ * - Imports from packages that are not declared as dependencies
412
+ * - Cross-package imports that violate the dependency hierarchy
413
+ * - Internal module access (importing from src/ instead of package entry point)
414
+ *
415
+ * @requirements 7.8 - THE Structural_Detector SHALL detect package boundary violations in monorepos
416
+ */
417
+ export class PackageBoundariesDetector extends StructuralDetector {
418
+ id = 'structural/package-boundaries';
419
+ category = 'structural';
420
+ subcategory = 'package-boundaries';
421
+ name = 'Package Boundaries Detector';
422
+ description = 'Detects monorepo package boundary violations including internal imports and undeclared dependencies';
423
+ supportedLanguages = [
424
+ 'typescript',
425
+ 'javascript',
426
+ ];
427
+ /**
428
+ * Detect package boundary violations in the project
429
+ */
430
+ async detect(context) {
431
+ const patterns = [];
432
+ const violations = [];
433
+ // Extract imports from context
434
+ const imports = this.extractImports(context);
435
+ if (imports.length === 0) {
436
+ return this.createResult(patterns, violations, 1.0);
437
+ }
438
+ // Analyze package boundaries
439
+ const analysis = analyzePackageBoundaries(context.file, imports, context.projectContext.files);
440
+ // If not in a monorepo, return early
441
+ if (!analysis.isInMonorepo) {
442
+ return this.createResult(patterns, violations, 1.0);
443
+ }
444
+ // Create pattern match for monorepo detection
445
+ patterns.push({
446
+ patternId: 'package-boundaries-monorepo',
447
+ location: { file: context.file, line: 1, column: 1 },
448
+ confidence: 0.9,
449
+ isOutlier: false,
450
+ });
451
+ // Create pattern match for current package
452
+ if (analysis.currentPackage) {
453
+ patterns.push({
454
+ patternId: `package-boundaries-package-${analysis.currentPackage.name.replace(/[^a-zA-Z0-9]/g, '-')}`,
455
+ location: { file: context.file, line: 1, column: 1 },
456
+ confidence: 0.9,
457
+ isOutlier: false,
458
+ });
459
+ }
460
+ // Generate violations
461
+ for (const violation of analysis.violations) {
462
+ const v = this.createBoundaryViolation(context.file, violation);
463
+ violations.push(v);
464
+ // Also create a pattern match for tracking
465
+ patterns.push({
466
+ patternId: `package-boundaries-${violation.type}`,
467
+ location: { file: context.file, line: violation.line, column: 1 },
468
+ confidence: 0.9,
469
+ isOutlier: true,
470
+ });
471
+ }
472
+ // Calculate confidence based on clean imports ratio
473
+ const cleanRatio = analysis.totalCrossPackageImports > 0
474
+ ? (analysis.totalCrossPackageImports - analysis.violations.length) / analysis.totalCrossPackageImports
475
+ : 1.0;
476
+ return this.createResult(patterns, violations, cleanRatio);
477
+ }
478
+ /**
479
+ * Generate a quick fix for package boundary violations
480
+ */
481
+ generateQuickFix(violation) {
482
+ // Handle internal import violations
483
+ if (violation.patternId === 'structural/package-boundaries-internal-import' ||
484
+ violation.patternId === 'structural/package-boundaries-bypass-public-api') {
485
+ // Extract the suggested import from the violation
486
+ const suggestedImport = violation.expected?.match(/import from '([^']+)'/)?.[1];
487
+ if (suggestedImport) {
488
+ return {
489
+ title: `Change import to '${suggestedImport}'`,
490
+ kind: 'quickfix',
491
+ edit: {
492
+ changes: {},
493
+ documentChanges: [],
494
+ },
495
+ isPreferred: true,
496
+ confidence: 0.8,
497
+ preview: `Replace the internal import with the public API: import from '${suggestedImport}'`,
498
+ };
499
+ }
500
+ }
501
+ // Handle undeclared dependency violations
502
+ if (violation.patternId === 'structural/package-boundaries-undeclared-dependency') {
503
+ const packageName = violation.actual?.match(/from '([^']+)'/)?.[1];
504
+ return {
505
+ title: `Add '${packageName}' to dependencies`,
506
+ kind: 'quickfix',
507
+ edit: {
508
+ changes: {},
509
+ documentChanges: [],
510
+ },
511
+ isPreferred: true,
512
+ confidence: 0.7,
513
+ preview: `Add the package to your package.json dependencies`,
514
+ };
515
+ }
516
+ return null;
517
+ }
518
+ /**
519
+ * Extract imports from the detection context
520
+ */
521
+ extractImports(context) {
522
+ const imports = [];
523
+ // Use imports from context if available
524
+ if (context.imports && context.imports.length > 0) {
525
+ for (const imp of context.imports) {
526
+ const source = imp.source ||
527
+ imp.module;
528
+ if (source) {
529
+ imports.push({
530
+ source,
531
+ line: imp.line || 1,
532
+ });
533
+ }
534
+ }
535
+ return imports;
536
+ }
537
+ // Fall back to parsing content for imports
538
+ const importRegex = /^import\s+(?:(?:type\s+)?(?:\{[^}]*\}|\*\s+as\s+\w+|\w+(?:\s*,\s*\{[^}]*\})?)\s+from\s+)?['"]([^'"]+)['"]/gm;
539
+ const lines = context.content.split('\n');
540
+ for (let i = 0; i < lines.length; i++) {
541
+ const line = lines[i];
542
+ const match = importRegex.exec(line);
543
+ if (match && match[1]) {
544
+ imports.push({
545
+ source: match[1],
546
+ line: i + 1,
547
+ });
548
+ }
549
+ importRegex.lastIndex = 0; // Reset regex state
550
+ }
551
+ return imports;
552
+ }
553
+ /**
554
+ * Create a violation for a package boundary issue
555
+ */
556
+ createBoundaryViolation(file, boundaryViolation) {
557
+ const range = {
558
+ start: { line: boundaryViolation.line - 1, character: 0 },
559
+ end: { line: boundaryViolation.line - 1, character: 100 },
560
+ };
561
+ const violation = {
562
+ id: `package-boundary-${file.replace(/[^a-zA-Z0-9]/g, '-')}-${boundaryViolation.line}`,
563
+ patternId: `structural/package-boundaries-${boundaryViolation.type}`,
564
+ severity: boundaryViolation.severity,
565
+ file,
566
+ range,
567
+ message: boundaryViolation.description,
568
+ expected: boundaryViolation.suggestedImport
569
+ ? `Use public API: import from '${boundaryViolation.suggestedImport}'`
570
+ : 'Use the package public API',
571
+ actual: `Import from '${boundaryViolation.importSource}'`,
572
+ aiExplainAvailable: true,
573
+ aiFixAvailable: boundaryViolation.type !== 'undeclared-dependency',
574
+ firstSeen: new Date(),
575
+ occurrences: 1,
576
+ };
577
+ // Add quick fix for fixable violations
578
+ if (boundaryViolation.suggestedImport) {
579
+ violation.quickFix = {
580
+ title: `Change import to '${boundaryViolation.suggestedImport}'`,
581
+ kind: 'quickfix',
582
+ edit: {
583
+ changes: {},
584
+ documentChanges: [],
585
+ },
586
+ isPreferred: true,
587
+ confidence: 0.8,
588
+ };
589
+ }
590
+ return violation;
591
+ }
592
+ }
593
+ // ============================================================================
594
+ // Factory Function
595
+ // ============================================================================
596
+ /**
597
+ * Create a new PackageBoundariesDetector instance
598
+ */
599
+ export function createPackageBoundariesDetector() {
600
+ return new PackageBoundariesDetector();
601
+ }
602
+ //# sourceMappingURL=package-boundaries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-boundaries.js","sourceRoot":"","sources":["../../src/structural/package-boundaries.ts"],"names":[],"mappings":"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"}