@sudosandwich/limps-headless 0.1.3

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 (335) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +339 -0
  3. package/bin/limps-headless +2 -0
  4. package/dist/analysis/index.d.ts +6 -0
  5. package/dist/analysis/index.d.ts.map +1 -0
  6. package/dist/analysis/index.js +6 -0
  7. package/dist/analysis/index.js.map +1 -0
  8. package/dist/analysis/ir/build-ir.d.ts +10 -0
  9. package/dist/analysis/ir/build-ir.d.ts.map +1 -0
  10. package/dist/analysis/ir/build-ir.js +102 -0
  11. package/dist/analysis/ir/build-ir.js.map +1 -0
  12. package/dist/analysis/ir/types.d.ts +44 -0
  13. package/dist/analysis/ir/types.d.ts.map +1 -0
  14. package/dist/analysis/ir/types.js +2 -0
  15. package/dist/analysis/ir/types.js.map +1 -0
  16. package/dist/analysis/module-graph.d.ts +20 -0
  17. package/dist/analysis/module-graph.d.ts.map +1 -0
  18. package/dist/analysis/module-graph.js +104 -0
  19. package/dist/analysis/module-graph.js.map +1 -0
  20. package/dist/analysis/passes/behavior-evidence.d.ts +9 -0
  21. package/dist/analysis/passes/behavior-evidence.d.ts.map +1 -0
  22. package/dist/analysis/passes/behavior-evidence.js +80 -0
  23. package/dist/analysis/passes/behavior-evidence.js.map +1 -0
  24. package/dist/analysis/passes/import-evidence.d.ts +3 -0
  25. package/dist/analysis/passes/import-evidence.d.ts.map +1 -0
  26. package/dist/analysis/passes/import-evidence.js +58 -0
  27. package/dist/analysis/passes/import-evidence.js.map +1 -0
  28. package/dist/analysis/passes/index.d.ts +15 -0
  29. package/dist/analysis/passes/index.d.ts.map +1 -0
  30. package/dist/analysis/passes/index.js +21 -0
  31. package/dist/analysis/passes/index.js.map +1 -0
  32. package/dist/analysis/passes/jsx-evidence.d.ts +8 -0
  33. package/dist/analysis/passes/jsx-evidence.d.ts.map +1 -0
  34. package/dist/analysis/passes/jsx-evidence.js +149 -0
  35. package/dist/analysis/passes/jsx-evidence.js.map +1 -0
  36. package/dist/analysis/ts-program.d.ts +12 -0
  37. package/dist/analysis/ts-program.d.ts.map +1 -0
  38. package/dist/analysis/ts-program.js +59 -0
  39. package/dist/analysis/ts-program.js.map +1 -0
  40. package/dist/analyzer/disambiguator.d.ts +20 -0
  41. package/dist/analyzer/disambiguator.d.ts.map +1 -0
  42. package/dist/analyzer/disambiguator.js +83 -0
  43. package/dist/analyzer/disambiguator.js.map +1 -0
  44. package/dist/analyzer/index.d.ts +26 -0
  45. package/dist/analyzer/index.d.ts.map +1 -0
  46. package/dist/analyzer/index.js +68 -0
  47. package/dist/analyzer/index.js.map +1 -0
  48. package/dist/analyzer/parser.d.ts +23 -0
  49. package/dist/analyzer/parser.d.ts.map +1 -0
  50. package/dist/analyzer/parser.js +58 -0
  51. package/dist/analyzer/parser.js.map +1 -0
  52. package/dist/analyzer/patterns.d.ts +42 -0
  53. package/dist/analyzer/patterns.d.ts.map +1 -0
  54. package/dist/analyzer/patterns.js +206 -0
  55. package/dist/analyzer/patterns.js.map +1 -0
  56. package/dist/analyzer/props.d.ts +16 -0
  57. package/dist/analyzer/props.d.ts.map +1 -0
  58. package/dist/analyzer/props.js +235 -0
  59. package/dist/analyzer/props.js.map +1 -0
  60. package/dist/analyzer/rules/checkbox-switch-toggle.d.ts +10 -0
  61. package/dist/analyzer/rules/checkbox-switch-toggle.d.ts.map +1 -0
  62. package/dist/analyzer/rules/checkbox-switch-toggle.js +26 -0
  63. package/dist/analyzer/rules/checkbox-switch-toggle.js.map +1 -0
  64. package/dist/analyzer/rules/dialog-popover.d.ts +10 -0
  65. package/dist/analyzer/rules/dialog-popover.d.ts.map +1 -0
  66. package/dist/analyzer/rules/dialog-popover.js +25 -0
  67. package/dist/analyzer/rules/dialog-popover.js.map +1 -0
  68. package/dist/analyzer/rules/index.d.ts +24 -0
  69. package/dist/analyzer/rules/index.d.ts.map +1 -0
  70. package/dist/analyzer/rules/index.js +51 -0
  71. package/dist/analyzer/rules/index.js.map +1 -0
  72. package/dist/analyzer/rules/tooltip-hovercard.d.ts +10 -0
  73. package/dist/analyzer/rules/tooltip-hovercard.d.ts.map +1 -0
  74. package/dist/analyzer/rules/tooltip-hovercard.js +21 -0
  75. package/dist/analyzer/rules/tooltip-hovercard.js.map +1 -0
  76. package/dist/analyzer/scorer.d.ts +12 -0
  77. package/dist/analyzer/scorer.d.ts.map +1 -0
  78. package/dist/analyzer/scorer.js +171 -0
  79. package/dist/analyzer/scorer.js.map +1 -0
  80. package/dist/analyzer/weights.d.ts +28 -0
  81. package/dist/analyzer/weights.d.ts.map +1 -0
  82. package/dist/analyzer/weights.js +40 -0
  83. package/dist/analyzer/weights.js.map +1 -0
  84. package/dist/audit/analyses/migration.d.ts +42 -0
  85. package/dist/audit/analyses/migration.d.ts.map +1 -0
  86. package/dist/audit/analyses/migration.js +91 -0
  87. package/dist/audit/analyses/migration.js.map +1 -0
  88. package/dist/audit/discover-components.d.ts +7 -0
  89. package/dist/audit/discover-components.d.ts.map +1 -0
  90. package/dist/audit/discover-components.js +486 -0
  91. package/dist/audit/discover-components.js.map +1 -0
  92. package/dist/audit/generate-report.d.ts +28 -0
  93. package/dist/audit/generate-report.d.ts.map +1 -0
  94. package/dist/audit/generate-report.js +333 -0
  95. package/dist/audit/generate-report.js.map +1 -0
  96. package/dist/audit/index.d.ts +8 -0
  97. package/dist/audit/index.d.ts.map +1 -0
  98. package/dist/audit/index.js +8 -0
  99. package/dist/audit/index.js.map +1 -0
  100. package/dist/audit/run-audit.d.ts +33 -0
  101. package/dist/audit/run-audit.d.ts.map +1 -0
  102. package/dist/audit/run-audit.js +287 -0
  103. package/dist/audit/run-audit.js.map +1 -0
  104. package/dist/audit/types.d.ts +135 -0
  105. package/dist/audit/types.d.ts.map +1 -0
  106. package/dist/audit/types.js +5 -0
  107. package/dist/audit/types.js.map +1 -0
  108. package/dist/cache/index.d.ts +110 -0
  109. package/dist/cache/index.d.ts.map +1 -0
  110. package/dist/cache/index.js +176 -0
  111. package/dist/cache/index.js.map +1 -0
  112. package/dist/cache/storage.d.ts +73 -0
  113. package/dist/cache/storage.d.ts.map +1 -0
  114. package/dist/cache/storage.js +176 -0
  115. package/dist/cache/storage.js.map +1 -0
  116. package/dist/cache/ttl.d.ts +62 -0
  117. package/dist/cache/ttl.d.ts.map +1 -0
  118. package/dist/cache/ttl.js +96 -0
  119. package/dist/cache/ttl.js.map +1 -0
  120. package/dist/cli/commands/analyze.d.ts +6 -0
  121. package/dist/cli/commands/analyze.d.ts.map +1 -0
  122. package/dist/cli/commands/analyze.js +43 -0
  123. package/dist/cli/commands/analyze.js.map +1 -0
  124. package/dist/cli/commands/audit.d.ts +6 -0
  125. package/dist/cli/commands/audit.d.ts.map +1 -0
  126. package/dist/cli/commands/audit.js +73 -0
  127. package/dist/cli/commands/audit.js.map +1 -0
  128. package/dist/cli/commands/check-updates.d.ts +6 -0
  129. package/dist/cli/commands/check-updates.d.ts.map +1 -0
  130. package/dist/cli/commands/check-updates.js +34 -0
  131. package/dist/cli/commands/check-updates.js.map +1 -0
  132. package/dist/cli/commands/diff.d.ts +7 -0
  133. package/dist/cli/commands/diff.d.ts.map +1 -0
  134. package/dist/cli/commands/diff.js +48 -0
  135. package/dist/cli/commands/diff.js.map +1 -0
  136. package/dist/cli/commands/extract.d.ts +6 -0
  137. package/dist/cli/commands/extract.d.ts.map +1 -0
  138. package/dist/cli/commands/extract.js +42 -0
  139. package/dist/cli/commands/extract.js.map +1 -0
  140. package/dist/cli/commands/list.d.ts +6 -0
  141. package/dist/cli/commands/list.d.ts.map +1 -0
  142. package/dist/cli/commands/list.js +33 -0
  143. package/dist/cli/commands/list.js.map +1 -0
  144. package/dist/cli/flags.d.ts +9 -0
  145. package/dist/cli/flags.d.ts.map +1 -0
  146. package/dist/cli/flags.js +22 -0
  147. package/dist/cli/flags.js.map +1 -0
  148. package/dist/cli/index.d.ts +5 -0
  149. package/dist/cli/index.d.ts.map +1 -0
  150. package/dist/cli/index.js +40 -0
  151. package/dist/cli/index.js.map +1 -0
  152. package/dist/config.d.ts +19 -0
  153. package/dist/config.d.ts.map +1 -0
  154. package/dist/config.js +23 -0
  155. package/dist/config.js.map +1 -0
  156. package/dist/differ/hints.d.ts +21 -0
  157. package/dist/differ/hints.d.ts.map +1 -0
  158. package/dist/differ/hints.js +105 -0
  159. package/dist/differ/hints.js.map +1 -0
  160. package/dist/differ/index.d.ts +25 -0
  161. package/dist/differ/index.d.ts.map +1 -0
  162. package/dist/differ/index.js +115 -0
  163. package/dist/differ/index.js.map +1 -0
  164. package/dist/differ/props.d.ts +36 -0
  165. package/dist/differ/props.d.ts.map +1 -0
  166. package/dist/differ/props.js +210 -0
  167. package/dist/differ/props.js.map +1 -0
  168. package/dist/differ/severity.d.ts +31 -0
  169. package/dist/differ/severity.d.ts.map +1 -0
  170. package/dist/differ/severity.js +65 -0
  171. package/dist/differ/severity.js.map +1 -0
  172. package/dist/differ/types.d.ts +109 -0
  173. package/dist/differ/types.d.ts.map +1 -0
  174. package/dist/differ/types.js +5 -0
  175. package/dist/differ/types.js.map +1 -0
  176. package/dist/extractor/classifier.d.ts +30 -0
  177. package/dist/extractor/classifier.d.ts.map +1 -0
  178. package/dist/extractor/classifier.js +150 -0
  179. package/dist/extractor/classifier.js.map +1 -0
  180. package/dist/extractor/forward-ref.d.ts +28 -0
  181. package/dist/extractor/forward-ref.d.ts.map +1 -0
  182. package/dist/extractor/forward-ref.js +134 -0
  183. package/dist/extractor/forward-ref.js.map +1 -0
  184. package/dist/extractor/index.d.ts +25 -0
  185. package/dist/extractor/index.d.ts.map +1 -0
  186. package/dist/extractor/index.js +43 -0
  187. package/dist/extractor/index.js.map +1 -0
  188. package/dist/extractor/interface.d.ts +40 -0
  189. package/dist/extractor/interface.d.ts.map +1 -0
  190. package/dist/extractor/interface.js +233 -0
  191. package/dist/extractor/interface.js.map +1 -0
  192. package/dist/extractor/jsdoc.d.ts +24 -0
  193. package/dist/extractor/jsdoc.d.ts.map +1 -0
  194. package/dist/extractor/jsdoc.js +74 -0
  195. package/dist/extractor/jsdoc.js.map +1 -0
  196. package/dist/extractor/project.d.ts +17 -0
  197. package/dist/extractor/project.d.ts.map +1 -0
  198. package/dist/extractor/project.js +33 -0
  199. package/dist/extractor/project.js.map +1 -0
  200. package/dist/extractor/props.d.ts +24 -0
  201. package/dist/extractor/props.d.ts.map +1 -0
  202. package/dist/extractor/props.js +78 -0
  203. package/dist/extractor/props.js.map +1 -0
  204. package/dist/extractor/type-resolver.d.ts +32 -0
  205. package/dist/extractor/type-resolver.d.ts.map +1 -0
  206. package/dist/extractor/type-resolver.js +129 -0
  207. package/dist/extractor/type-resolver.js.map +1 -0
  208. package/dist/fetcher/index.d.ts +7 -0
  209. package/dist/fetcher/index.d.ts.map +1 -0
  210. package/dist/fetcher/index.js +7 -0
  211. package/dist/fetcher/index.js.map +1 -0
  212. package/dist/fetcher/npm-registry.d.ts +45 -0
  213. package/dist/fetcher/npm-registry.d.ts.map +1 -0
  214. package/dist/fetcher/npm-registry.js +217 -0
  215. package/dist/fetcher/npm-registry.js.map +1 -0
  216. package/dist/fetcher/unified-package.d.ts +27 -0
  217. package/dist/fetcher/unified-package.d.ts.map +1 -0
  218. package/dist/fetcher/unified-package.js +99 -0
  219. package/dist/fetcher/unified-package.js.map +1 -0
  220. package/dist/fetcher/unpkg.d.ts +20 -0
  221. package/dist/fetcher/unpkg.d.ts.map +1 -0
  222. package/dist/fetcher/unpkg.js +58 -0
  223. package/dist/fetcher/unpkg.js.map +1 -0
  224. package/dist/index.d.ts +18 -0
  225. package/dist/index.d.ts.map +1 -0
  226. package/dist/index.js +41 -0
  227. package/dist/index.js.map +1 -0
  228. package/dist/providers/base.d.ts +10 -0
  229. package/dist/providers/base.d.ts.map +1 -0
  230. package/dist/providers/base.js +80 -0
  231. package/dist/providers/base.js.map +1 -0
  232. package/dist/providers/index.d.ts +10 -0
  233. package/dist/providers/index.d.ts.map +1 -0
  234. package/dist/providers/index.js +10 -0
  235. package/dist/providers/index.js.map +1 -0
  236. package/dist/providers/interface.d.ts +56 -0
  237. package/dist/providers/interface.d.ts.map +1 -0
  238. package/dist/providers/interface.js +5 -0
  239. package/dist/providers/interface.js.map +1 -0
  240. package/dist/providers/radix-backend.d.ts +11 -0
  241. package/dist/providers/radix-backend.d.ts.map +1 -0
  242. package/dist/providers/radix-backend.js +107 -0
  243. package/dist/providers/radix-backend.js.map +1 -0
  244. package/dist/providers/radix.d.ts +6 -0
  245. package/dist/providers/radix.d.ts.map +1 -0
  246. package/dist/providers/radix.js +21 -0
  247. package/dist/providers/radix.js.map +1 -0
  248. package/dist/providers/registry.d.ts +17 -0
  249. package/dist/providers/registry.d.ts.map +1 -0
  250. package/dist/providers/registry.js +55 -0
  251. package/dist/providers/registry.js.map +1 -0
  252. package/dist/rules/engine.d.ts +4 -0
  253. package/dist/rules/engine.d.ts.map +1 -0
  254. package/dist/rules/engine.js +37 -0
  255. package/dist/rules/engine.js.map +1 -0
  256. package/dist/rules/index.d.ts +6 -0
  257. package/dist/rules/index.d.ts.map +1 -0
  258. package/dist/rules/index.js +6 -0
  259. package/dist/rules/index.js.map +1 -0
  260. package/dist/rules/predicates.d.ts +10 -0
  261. package/dist/rules/predicates.d.ts.map +1 -0
  262. package/dist/rules/predicates.js +93 -0
  263. package/dist/rules/predicates.js.map +1 -0
  264. package/dist/rules/rulesets/base-ui.d.ts +3 -0
  265. package/dist/rules/rulesets/base-ui.d.ts.map +1 -0
  266. package/dist/rules/rulesets/base-ui.js +65 -0
  267. package/dist/rules/rulesets/base-ui.js.map +1 -0
  268. package/dist/rules/rulesets/radix-legacy.d.ts +3 -0
  269. package/dist/rules/rulesets/radix-legacy.d.ts.map +1 -0
  270. package/dist/rules/rulesets/radix-legacy.js +38 -0
  271. package/dist/rules/rulesets/radix-legacy.js.map +1 -0
  272. package/dist/rules/types.d.ts +57 -0
  273. package/dist/rules/types.d.ts.map +1 -0
  274. package/dist/rules/types.js +2 -0
  275. package/dist/rules/types.js.map +1 -0
  276. package/dist/signatures/disambiguation.d.ts +30 -0
  277. package/dist/signatures/disambiguation.d.ts.map +1 -0
  278. package/dist/signatures/disambiguation.js +99 -0
  279. package/dist/signatures/disambiguation.js.map +1 -0
  280. package/dist/signatures/distinguishing.d.ts +29 -0
  281. package/dist/signatures/distinguishing.d.ts.map +1 -0
  282. package/dist/signatures/distinguishing.js +108 -0
  283. package/dist/signatures/distinguishing.js.map +1 -0
  284. package/dist/signatures/generator.d.ts +20 -0
  285. package/dist/signatures/generator.d.ts.map +1 -0
  286. package/dist/signatures/generator.js +147 -0
  287. package/dist/signatures/generator.js.map +1 -0
  288. package/dist/signatures/index.d.ts +10 -0
  289. package/dist/signatures/index.d.ts.map +1 -0
  290. package/dist/signatures/index.js +10 -0
  291. package/dist/signatures/index.js.map +1 -0
  292. package/dist/signatures/inference.d.ts +37 -0
  293. package/dist/signatures/inference.d.ts.map +1 -0
  294. package/dist/signatures/inference.js +132 -0
  295. package/dist/signatures/inference.js.map +1 -0
  296. package/dist/tools/analyze-component.d.ts +41 -0
  297. package/dist/tools/analyze-component.d.ts.map +1 -0
  298. package/dist/tools/analyze-component.js +274 -0
  299. package/dist/tools/analyze-component.js.map +1 -0
  300. package/dist/tools/check-updates.d.ts +33 -0
  301. package/dist/tools/check-updates.d.ts.map +1 -0
  302. package/dist/tools/check-updates.js +81 -0
  303. package/dist/tools/check-updates.js.map +1 -0
  304. package/dist/tools/diff-versions.d.ts +39 -0
  305. package/dist/tools/diff-versions.d.ts.map +1 -0
  306. package/dist/tools/diff-versions.js +78 -0
  307. package/dist/tools/diff-versions.js.map +1 -0
  308. package/dist/tools/extract-primitive.d.ts +50 -0
  309. package/dist/tools/extract-primitive.d.ts.map +1 -0
  310. package/dist/tools/extract-primitive.js +145 -0
  311. package/dist/tools/extract-primitive.js.map +1 -0
  312. package/dist/tools/generate-report.d.ts +29 -0
  313. package/dist/tools/generate-report.d.ts.map +1 -0
  314. package/dist/tools/generate-report.js +36 -0
  315. package/dist/tools/generate-report.js.map +1 -0
  316. package/dist/tools/index.d.ts +11 -0
  317. package/dist/tools/index.d.ts.map +1 -0
  318. package/dist/tools/index.js +11 -0
  319. package/dist/tools/index.js.map +1 -0
  320. package/dist/tools/list-primitives.d.ts +41 -0
  321. package/dist/tools/list-primitives.d.ts.map +1 -0
  322. package/dist/tools/list-primitives.js +74 -0
  323. package/dist/tools/list-primitives.js.map +1 -0
  324. package/dist/tools/run-audit.d.ts +43 -0
  325. package/dist/tools/run-audit.d.ts.map +1 -0
  326. package/dist/tools/run-audit.js +60 -0
  327. package/dist/tools/run-audit.js.map +1 -0
  328. package/dist/types/index.d.ts +143 -0
  329. package/dist/types/index.d.ts.map +1 -0
  330. package/dist/types/index.js +5 -0
  331. package/dist/types/index.js.map +1 -0
  332. package/docs/architecture.md +88 -0
  333. package/docs/providers.md +47 -0
  334. package/docs/tools.md +143 -0
  335. package/package.json +59 -0
@@ -0,0 +1,486 @@
1
+ /**
2
+ * Discover React components in a project and return metadata.
3
+ * Agent 1 #1: Unified Component Discovery with backend detection.
4
+ */
5
+ import * as fs from 'node:fs';
6
+ import * as path from 'node:path';
7
+ import * as ts from 'typescript';
8
+ /** Import patterns for Radix UI packages. */
9
+ const RADIX_IMPORT_PATTERNS = [
10
+ /^@radix-ui\/react-/,
11
+ /^@radix-ui\/primitive/,
12
+ /^radix-ui$/,
13
+ /^radix-ui\//,
14
+ ];
15
+ /** Import patterns for Base UI packages. */
16
+ const BASE_IMPORT_PATTERNS = [
17
+ /^@base-ui\/react/,
18
+ /^@base-ui\//,
19
+ /^@base-ui-components\//,
20
+ /^@base_ui\//,
21
+ ];
22
+ /** JSX attribute patterns that indicate Radix usage. */
23
+ const RADIX_EVIDENCE_PATTERNS = ['asChild'];
24
+ /** JSX role values that map to headless primitives (Base UI overlap). */
25
+ const BASE_ROLE_EVIDENCE = new Set([
26
+ 'alertdialog',
27
+ 'checkbox',
28
+ 'combobox',
29
+ 'dialog',
30
+ 'listbox',
31
+ 'menu',
32
+ 'menubar',
33
+ 'menuitem',
34
+ 'option',
35
+ 'radio',
36
+ 'radiogroup',
37
+ 'slider',
38
+ 'switch',
39
+ 'tab',
40
+ 'tablist',
41
+ 'tabpanel',
42
+ 'tooltip',
43
+ ]);
44
+ /** JSX attribute patterns that indicate Base UI usage. */
45
+ const BASE_EVIDENCE_PATTERNS = [
46
+ 'render',
47
+ ...Array.from(BASE_ROLE_EVIDENCE).map((role) => `role:${role}`),
48
+ ];
49
+ const DEFAULT_OPTIONS = {
50
+ rootDir: 'src/components',
51
+ includePatterns: ['**/*.tsx', '**/*.jsx'],
52
+ excludePatterns: ['**/*.test.*', '**/*.stories.*', '**/*.spec.*'],
53
+ };
54
+ function normalizePath(value) {
55
+ return value.replace(/\\/g, '/');
56
+ }
57
+ function globToRegExp(glob) {
58
+ const globstarSlash = '__GLOBSTAR_SLASH__';
59
+ const globstar = '__GLOBSTAR__';
60
+ const star = '__STAR__';
61
+ const escaped = glob
62
+ .replace(/\*\*\//g, globstarSlash)
63
+ .replace(/\*\*/g, globstar)
64
+ .replace(/\*/g, star)
65
+ .replace(/[.+^${}()|[\]\\]/g, '\\$&')
66
+ .replace(new RegExp(globstarSlash, 'g'), '(?:.*/)?')
67
+ .replace(new RegExp(globstar, 'g'), '.*')
68
+ .replace(new RegExp(star, 'g'), '[^/]*');
69
+ return new RegExp(`^${escaped}$`);
70
+ }
71
+ function matchesAny(pathValue, patterns) {
72
+ if (patterns.length === 0)
73
+ return false;
74
+ return patterns.some((pattern) => globToRegExp(pattern).test(pathValue));
75
+ }
76
+ function extractComponentName(sourceFile, filePath) {
77
+ let name;
78
+ const visit = (node) => {
79
+ if (ts.isExportAssignment(node) && node.isExportEquals === false) {
80
+ if (ts.isIdentifier(node.expression)) {
81
+ name = node.expression.text;
82
+ }
83
+ }
84
+ if (ts.isVariableStatement(node) &&
85
+ node.modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword)) {
86
+ for (const decl of node.declarationList.declarations) {
87
+ if (ts.isIdentifier(decl.name)) {
88
+ name = decl.name.text;
89
+ }
90
+ }
91
+ }
92
+ if (ts.isFunctionDeclaration(node) &&
93
+ node.modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword)) {
94
+ if (node.name) {
95
+ name = node.name.text;
96
+ }
97
+ }
98
+ ts.forEachChild(node, visit);
99
+ };
100
+ visit(sourceFile);
101
+ if (!name) {
102
+ name = path.basename(filePath, path.extname(filePath));
103
+ }
104
+ return name;
105
+ }
106
+ function detectExportType(sourceFile) {
107
+ let hasDefault = false;
108
+ let hasNamed = false;
109
+ const visit = (node) => {
110
+ if (ts.isExportAssignment(node) && !node.isExportEquals) {
111
+ hasDefault = true;
112
+ }
113
+ if (ts.isExportDeclaration(node) && !node.exportClause) {
114
+ hasDefault = true;
115
+ }
116
+ if (ts.isExportDeclaration(node) && node.exportClause && ts.isNamedExports(node.exportClause)) {
117
+ hasNamed = true;
118
+ }
119
+ if ((ts.isVariableStatement(node) ||
120
+ ts.isFunctionDeclaration(node) ||
121
+ ts.isClassDeclaration(node)) &&
122
+ node.modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword)) {
123
+ if (node.modifiers?.some((m) => m.kind === ts.SyntaxKind.DefaultKeyword)) {
124
+ hasDefault = true;
125
+ }
126
+ else {
127
+ hasNamed = true;
128
+ }
129
+ }
130
+ ts.forEachChild(node, visit);
131
+ };
132
+ visit(sourceFile);
133
+ if (hasDefault && hasNamed)
134
+ return 'both';
135
+ if (hasDefault)
136
+ return 'default';
137
+ if (hasNamed)
138
+ return 'named';
139
+ return undefined;
140
+ }
141
+ function extractPropsInterface(sourceFile) {
142
+ let propsInterface;
143
+ const visit = (node) => {
144
+ if (ts.isInterfaceDeclaration(node) || ts.isTypeAliasDeclaration(node)) {
145
+ const name = node.name.text;
146
+ if (name.endsWith('Props') || name.endsWith('Prop')) {
147
+ propsInterface = name;
148
+ }
149
+ }
150
+ ts.forEachChild(node, visit);
151
+ };
152
+ visit(sourceFile);
153
+ return propsInterface;
154
+ }
155
+ function extractDependencies(sourceFile) {
156
+ const dependencies = new Set();
157
+ const visit = (node) => {
158
+ if (ts.isImportDeclaration(node) && ts.isStringLiteral(node.moduleSpecifier)) {
159
+ const clause = node.importClause;
160
+ if (clause?.namedBindings && ts.isNamedImports(clause.namedBindings)) {
161
+ clause.namedBindings.elements.forEach((element) => {
162
+ const name = element.name.text;
163
+ if (name[0] && name[0] === name[0].toUpperCase()) {
164
+ dependencies.add(name);
165
+ }
166
+ });
167
+ }
168
+ if (clause?.name) {
169
+ const name = clause.name.text;
170
+ if (name[0] && name[0] === name[0].toUpperCase()) {
171
+ dependencies.add(name);
172
+ }
173
+ }
174
+ }
175
+ ts.forEachChild(node, visit);
176
+ };
177
+ visit(sourceFile);
178
+ return [...dependencies];
179
+ }
180
+ /**
181
+ * Extract all import sources from a source file (Agent 1 #1).
182
+ */
183
+ function extractImportSources(sourceFile) {
184
+ const sources = [];
185
+ const visit = (node) => {
186
+ if (ts.isImportDeclaration(node) && ts.isStringLiteral(node.moduleSpecifier)) {
187
+ sources.push(node.moduleSpecifier.text);
188
+ }
189
+ ts.forEachChild(node, visit);
190
+ };
191
+ visit(sourceFile);
192
+ return sources;
193
+ }
194
+ /**
195
+ * Check if an import source matches Radix patterns.
196
+ */
197
+ function isRadixImport(source) {
198
+ return RADIX_IMPORT_PATTERNS.some((pattern) => pattern.test(source));
199
+ }
200
+ /**
201
+ * Check if an import source matches Base UI patterns.
202
+ */
203
+ function isBaseImport(source) {
204
+ return BASE_IMPORT_PATTERNS.some((pattern) => pattern.test(source));
205
+ }
206
+ /**
207
+ * Extract JSX attribute evidence for backend detection (Agent 1 #1).
208
+ * Scans for attributes like asChild (Radix) and render (Base).
209
+ */
210
+ function extractPatternEvidence(sourceFile) {
211
+ const evidence = new Set();
212
+ const visit = (node) => {
213
+ // Check JSX attributes
214
+ if (ts.isJsxAttribute(node) && ts.isIdentifier(node.name)) {
215
+ const attrName = node.name.text;
216
+ // Check for Radix patterns
217
+ if (RADIX_EVIDENCE_PATTERNS.includes(attrName)) {
218
+ evidence.add(attrName);
219
+ }
220
+ // Check for Base patterns - but only if it's a render prop (has JSX element or function value)
221
+ if (BASE_EVIDENCE_PATTERNS.includes(attrName)) {
222
+ // Avoid false positives: only count 'render' if it looks like a render prop
223
+ if (node.initializer) {
224
+ if (ts.isJsxExpression(node.initializer) ||
225
+ (ts.isStringLiteral(node.initializer) === false)) {
226
+ evidence.add(attrName);
227
+ }
228
+ }
229
+ }
230
+ if (attrName === 'role' && node.initializer) {
231
+ let roleValue;
232
+ if (ts.isStringLiteral(node.initializer)) {
233
+ roleValue = node.initializer.text;
234
+ }
235
+ else if (ts.isJsxExpression(node.initializer) &&
236
+ node.initializer.expression &&
237
+ ts.isStringLiteral(node.initializer.expression)) {
238
+ roleValue = node.initializer.expression.text;
239
+ }
240
+ if (roleValue) {
241
+ const normalized = roleValue.toLowerCase();
242
+ if (BASE_ROLE_EVIDENCE.has(normalized)) {
243
+ evidence.add(`role:${normalized}`);
244
+ }
245
+ }
246
+ }
247
+ }
248
+ ts.forEachChild(node, visit);
249
+ };
250
+ visit(sourceFile);
251
+ return [...evidence];
252
+ }
253
+ /**
254
+ * Extract exported names from a source file (Agent 1 #1).
255
+ */
256
+ function extractExportedNames(sourceFile) {
257
+ const names = [];
258
+ const visit = (node) => {
259
+ // export default X
260
+ if (ts.isExportAssignment(node) && !node.isExportEquals) {
261
+ if (ts.isIdentifier(node.expression)) {
262
+ names.push(node.expression.text);
263
+ }
264
+ else {
265
+ names.push('default');
266
+ }
267
+ }
268
+ // export const X = ..., export function X, export class X
269
+ if ((ts.isVariableStatement(node) ||
270
+ ts.isFunctionDeclaration(node) ||
271
+ ts.isClassDeclaration(node)) &&
272
+ node.modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword)) {
273
+ if (ts.isVariableStatement(node)) {
274
+ for (const decl of node.declarationList.declarations) {
275
+ if (ts.isIdentifier(decl.name)) {
276
+ names.push(decl.name.text);
277
+ }
278
+ }
279
+ }
280
+ else if (node.name) {
281
+ names.push(node.name.text);
282
+ }
283
+ }
284
+ // export { X, Y }
285
+ if (ts.isExportDeclaration(node) && node.exportClause && ts.isNamedExports(node.exportClause)) {
286
+ for (const element of node.exportClause.elements) {
287
+ names.push(element.name.text);
288
+ }
289
+ }
290
+ ts.forEachChild(node, visit);
291
+ };
292
+ visit(sourceFile);
293
+ return names;
294
+ }
295
+ /**
296
+ * Determine if the component exports a React component (Agent 1 #1).
297
+ * Heuristic: exports something that starts with uppercase letter.
298
+ */
299
+ function detectExportsComponent(exportedNames) {
300
+ return exportedNames.some((name) => {
301
+ if (name === 'default')
302
+ return true;
303
+ return name[0] === name[0].toUpperCase();
304
+ });
305
+ }
306
+ /**
307
+ * Determine backend from import sources and evidence (Agent 1 #1).
308
+ */
309
+ function determineBackend(importSources, evidence) {
310
+ const radixImports = importSources.filter(isRadixImport);
311
+ const baseImports = importSources.filter(isBaseImport);
312
+ const hasRadixImports = radixImports.length > 0;
313
+ const hasBaseImports = baseImports.length > 0;
314
+ // Evidence-based detection (secondary signal)
315
+ const hasRadixEvidence = evidence.some((e) => RADIX_EVIDENCE_PATTERNS.includes(e));
316
+ const hasBaseEvidence = evidence.some((e) => BASE_EVIDENCE_PATTERNS.includes(e));
317
+ // Mixed usage: both backends detected
318
+ if ((hasRadixImports && hasBaseImports) || (hasRadixImports && hasBaseEvidence) || (hasBaseImports && hasRadixEvidence)) {
319
+ return {
320
+ backend: 'mixed',
321
+ mixedUsage: true,
322
+ matchedImports: [...radixImports, ...baseImports],
323
+ };
324
+ }
325
+ // Radix only
326
+ if (hasRadixImports || hasRadixEvidence) {
327
+ return {
328
+ backend: 'radix',
329
+ mixedUsage: false,
330
+ matchedImports: radixImports,
331
+ };
332
+ }
333
+ // Base only
334
+ if (hasBaseImports || hasBaseEvidence) {
335
+ return {
336
+ backend: 'base',
337
+ mixedUsage: false,
338
+ matchedImports: baseImports,
339
+ };
340
+ }
341
+ // Unknown
342
+ return {
343
+ backend: 'unknown',
344
+ mixedUsage: false,
345
+ matchedImports: [],
346
+ };
347
+ }
348
+ async function walkFiles(rootDir) {
349
+ const entries = await fs.promises.readdir(rootDir, { withFileTypes: true });
350
+ const results = [];
351
+ for (const entry of entries) {
352
+ const fullPath = path.join(rootDir, entry.name);
353
+ if (entry.isDirectory()) {
354
+ results.push(...(await walkFiles(fullPath)));
355
+ }
356
+ else if (entry.isFile()) {
357
+ results.push(fullPath);
358
+ }
359
+ }
360
+ return results;
361
+ }
362
+ function resolveLocalImport(fromFilePath, specifier) {
363
+ const cwd = process.cwd();
364
+ let basePath;
365
+ if (specifier.startsWith('@/')) {
366
+ basePath = path.join(cwd, 'src', specifier.slice(2));
367
+ }
368
+ else if (specifier.startsWith('./') || specifier.startsWith('../')) {
369
+ basePath = path.resolve(path.dirname(fromFilePath), specifier);
370
+ }
371
+ else {
372
+ return undefined;
373
+ }
374
+ if (basePath.endsWith('.ts') || basePath.endsWith('.tsx')) {
375
+ return fs.existsSync(basePath) ? basePath : undefined;
376
+ }
377
+ for (const ext of ['.ts', '.tsx']) {
378
+ const withExt = `${basePath}${ext}`;
379
+ if (fs.existsSync(withExt))
380
+ return withExt;
381
+ }
382
+ if (fs.existsSync(basePath) && fs.statSync(basePath).isDirectory()) {
383
+ for (const ext of ['.ts', '.tsx']) {
384
+ const indexPath = path.join(basePath, `index${ext}`);
385
+ if (fs.existsSync(indexPath))
386
+ return indexPath;
387
+ }
388
+ }
389
+ return undefined;
390
+ }
391
+ export async function discoverComponents(options = {}) {
392
+ const opts = { ...DEFAULT_OPTIONS, ...options };
393
+ const rootDir = path.resolve(process.cwd(), opts.rootDir);
394
+ if (!fs.existsSync(rootDir)) {
395
+ console.warn(`[discover-components] Root directory not found: ${rootDir}`);
396
+ return [];
397
+ }
398
+ const includePatterns = opts.includePatterns.map(normalizePath);
399
+ const excludePatterns = opts.excludePatterns.map(normalizePath);
400
+ const files = await walkFiles(rootDir);
401
+ const results = [];
402
+ const fileInfoByPath = new Map();
403
+ for (const filePath of files) {
404
+ const normalized = normalizePath(path.relative(rootDir, filePath));
405
+ if (!matchesAny(normalized, includePatterns))
406
+ continue;
407
+ if (matchesAny(normalized, excludePatterns))
408
+ continue;
409
+ const content = fs.readFileSync(filePath, 'utf-8');
410
+ const sourceFile = ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, true, filePath.endsWith('.tsx') ? ts.ScriptKind.TSX : ts.ScriptKind.TS);
411
+ const importSources = extractImportSources(sourceFile);
412
+ const evidence = extractPatternEvidence(sourceFile);
413
+ const exportedNames = extractExportedNames(sourceFile);
414
+ fileInfoByPath.set(filePath, {
415
+ filePath,
416
+ relativePath: normalizePath(path.relative(process.cwd(), filePath)),
417
+ sourceFile,
418
+ importSources,
419
+ evidence,
420
+ exportedNames,
421
+ });
422
+ }
423
+ const directBackendByPath = new Map();
424
+ const matchedImportsByPath = new Map();
425
+ for (const info of fileInfoByPath.values()) {
426
+ const { backend, matchedImports } = determineBackend(info.importSources, info.evidence);
427
+ directBackendByPath.set(info.filePath, backend);
428
+ matchedImportsByPath.set(info.filePath, matchedImports);
429
+ }
430
+ const inferredBackendByPath = new Map();
431
+ const visiting = new Set();
432
+ const inferBackend = (filePath) => {
433
+ const cached = inferredBackendByPath.get(filePath);
434
+ if (cached)
435
+ return cached;
436
+ if (visiting.has(filePath))
437
+ return 'unknown';
438
+ visiting.add(filePath);
439
+ const direct = directBackendByPath.get(filePath) ?? 'unknown';
440
+ let hasBase = direct === 'base' || direct === 'mixed';
441
+ let hasRadix = direct === 'radix' || direct === 'mixed';
442
+ const info = fileInfoByPath.get(filePath);
443
+ if (info) {
444
+ for (const specifier of info.importSources) {
445
+ const resolved = resolveLocalImport(info.filePath, specifier);
446
+ if (!resolved || !fileInfoByPath.has(resolved))
447
+ continue;
448
+ const depBackend = inferBackend(resolved);
449
+ if (depBackend === 'base' || depBackend === 'mixed')
450
+ hasBase = true;
451
+ if (depBackend === 'radix' || depBackend === 'mixed')
452
+ hasRadix = true;
453
+ }
454
+ }
455
+ visiting.delete(filePath);
456
+ let result = 'unknown';
457
+ if (hasBase && hasRadix)
458
+ result = 'mixed';
459
+ else if (hasBase)
460
+ result = 'base';
461
+ else if (hasRadix)
462
+ result = 'radix';
463
+ inferredBackendByPath.set(filePath, result);
464
+ return result;
465
+ };
466
+ for (const info of fileInfoByPath.values()) {
467
+ const backend = inferBackend(info.filePath);
468
+ const name = extractComponentName(info.sourceFile, info.filePath);
469
+ const matchedImports = matchedImportsByPath.get(info.filePath) ?? [];
470
+ results.push({
471
+ path: info.relativePath,
472
+ name,
473
+ exportType: detectExportType(info.sourceFile),
474
+ propsInterface: extractPropsInterface(info.sourceFile),
475
+ dependencies: extractDependencies(info.sourceFile),
476
+ backend,
477
+ mixedUsage: backend === 'mixed',
478
+ importSources: matchedImports,
479
+ evidence: info.evidence,
480
+ exportsComponent: detectExportsComponent(info.exportedNames),
481
+ exportedNames: info.exportedNames,
482
+ });
483
+ }
484
+ return results;
485
+ }
486
+ //# sourceMappingURL=discover-components.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover-components.js","sourceRoot":"","sources":["../../src/audit/discover-components.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Generate audit report from precomputed analysis, diff, and update-check JSON.
3
+ */
4
+ import type { AuditReport, RunAuditOptions } from './types.js';
5
+ export interface GenerateReportInput {
6
+ inputs: {
7
+ analysis?: string;
8
+ diff?: string;
9
+ checkUpdates?: string;
10
+ inventory?: string;
11
+ };
12
+ outputDir?: string;
13
+ format?: 'json' | 'markdown' | 'both';
14
+ title?: string;
15
+ /** Policy options used for this audit (included in report metadata). */
16
+ policy?: Partial<RunAuditOptions>;
17
+ }
18
+ export interface GenerateReportResult {
19
+ report: AuditReport;
20
+ outputDir: string;
21
+ jsonPath?: string;
22
+ markdownPath?: string;
23
+ }
24
+ /**
25
+ * Generate audit report from precomputed input paths.
26
+ */
27
+ export declare function generateReport(input: GenerateReportInput): GenerateReportResult;
28
+ //# sourceMappingURL=generate-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-report.d.ts","sourceRoot":"","sources":["../../src/audit/generate-report.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EACV,WAAW,EAOX,eAAe,EAChB,MAAM,YAAY,CAAC;AAkNpB,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE;QACN,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,oBAAoB,CAyF/E"}