@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.
- package/LICENSE +21 -0
- package/README.md +339 -0
- package/bin/limps-headless +2 -0
- package/dist/analysis/index.d.ts +6 -0
- package/dist/analysis/index.d.ts.map +1 -0
- package/dist/analysis/index.js +6 -0
- package/dist/analysis/index.js.map +1 -0
- package/dist/analysis/ir/build-ir.d.ts +10 -0
- package/dist/analysis/ir/build-ir.d.ts.map +1 -0
- package/dist/analysis/ir/build-ir.js +102 -0
- package/dist/analysis/ir/build-ir.js.map +1 -0
- package/dist/analysis/ir/types.d.ts +44 -0
- package/dist/analysis/ir/types.d.ts.map +1 -0
- package/dist/analysis/ir/types.js +2 -0
- package/dist/analysis/ir/types.js.map +1 -0
- package/dist/analysis/module-graph.d.ts +20 -0
- package/dist/analysis/module-graph.d.ts.map +1 -0
- package/dist/analysis/module-graph.js +104 -0
- package/dist/analysis/module-graph.js.map +1 -0
- package/dist/analysis/passes/behavior-evidence.d.ts +9 -0
- package/dist/analysis/passes/behavior-evidence.d.ts.map +1 -0
- package/dist/analysis/passes/behavior-evidence.js +80 -0
- package/dist/analysis/passes/behavior-evidence.js.map +1 -0
- package/dist/analysis/passes/import-evidence.d.ts +3 -0
- package/dist/analysis/passes/import-evidence.d.ts.map +1 -0
- package/dist/analysis/passes/import-evidence.js +58 -0
- package/dist/analysis/passes/import-evidence.js.map +1 -0
- package/dist/analysis/passes/index.d.ts +15 -0
- package/dist/analysis/passes/index.d.ts.map +1 -0
- package/dist/analysis/passes/index.js +21 -0
- package/dist/analysis/passes/index.js.map +1 -0
- package/dist/analysis/passes/jsx-evidence.d.ts +8 -0
- package/dist/analysis/passes/jsx-evidence.d.ts.map +1 -0
- package/dist/analysis/passes/jsx-evidence.js +149 -0
- package/dist/analysis/passes/jsx-evidence.js.map +1 -0
- package/dist/analysis/ts-program.d.ts +12 -0
- package/dist/analysis/ts-program.d.ts.map +1 -0
- package/dist/analysis/ts-program.js +59 -0
- package/dist/analysis/ts-program.js.map +1 -0
- package/dist/analyzer/disambiguator.d.ts +20 -0
- package/dist/analyzer/disambiguator.d.ts.map +1 -0
- package/dist/analyzer/disambiguator.js +83 -0
- package/dist/analyzer/disambiguator.js.map +1 -0
- package/dist/analyzer/index.d.ts +26 -0
- package/dist/analyzer/index.d.ts.map +1 -0
- package/dist/analyzer/index.js +68 -0
- package/dist/analyzer/index.js.map +1 -0
- package/dist/analyzer/parser.d.ts +23 -0
- package/dist/analyzer/parser.d.ts.map +1 -0
- package/dist/analyzer/parser.js +58 -0
- package/dist/analyzer/parser.js.map +1 -0
- package/dist/analyzer/patterns.d.ts +42 -0
- package/dist/analyzer/patterns.d.ts.map +1 -0
- package/dist/analyzer/patterns.js +206 -0
- package/dist/analyzer/patterns.js.map +1 -0
- package/dist/analyzer/props.d.ts +16 -0
- package/dist/analyzer/props.d.ts.map +1 -0
- package/dist/analyzer/props.js +235 -0
- package/dist/analyzer/props.js.map +1 -0
- package/dist/analyzer/rules/checkbox-switch-toggle.d.ts +10 -0
- package/dist/analyzer/rules/checkbox-switch-toggle.d.ts.map +1 -0
- package/dist/analyzer/rules/checkbox-switch-toggle.js +26 -0
- package/dist/analyzer/rules/checkbox-switch-toggle.js.map +1 -0
- package/dist/analyzer/rules/dialog-popover.d.ts +10 -0
- package/dist/analyzer/rules/dialog-popover.d.ts.map +1 -0
- package/dist/analyzer/rules/dialog-popover.js +25 -0
- package/dist/analyzer/rules/dialog-popover.js.map +1 -0
- package/dist/analyzer/rules/index.d.ts +24 -0
- package/dist/analyzer/rules/index.d.ts.map +1 -0
- package/dist/analyzer/rules/index.js +51 -0
- package/dist/analyzer/rules/index.js.map +1 -0
- package/dist/analyzer/rules/tooltip-hovercard.d.ts +10 -0
- package/dist/analyzer/rules/tooltip-hovercard.d.ts.map +1 -0
- package/dist/analyzer/rules/tooltip-hovercard.js +21 -0
- package/dist/analyzer/rules/tooltip-hovercard.js.map +1 -0
- package/dist/analyzer/scorer.d.ts +12 -0
- package/dist/analyzer/scorer.d.ts.map +1 -0
- package/dist/analyzer/scorer.js +171 -0
- package/dist/analyzer/scorer.js.map +1 -0
- package/dist/analyzer/weights.d.ts +28 -0
- package/dist/analyzer/weights.d.ts.map +1 -0
- package/dist/analyzer/weights.js +40 -0
- package/dist/analyzer/weights.js.map +1 -0
- package/dist/audit/analyses/migration.d.ts +42 -0
- package/dist/audit/analyses/migration.d.ts.map +1 -0
- package/dist/audit/analyses/migration.js +91 -0
- package/dist/audit/analyses/migration.js.map +1 -0
- package/dist/audit/discover-components.d.ts +7 -0
- package/dist/audit/discover-components.d.ts.map +1 -0
- package/dist/audit/discover-components.js +486 -0
- package/dist/audit/discover-components.js.map +1 -0
- package/dist/audit/generate-report.d.ts +28 -0
- package/dist/audit/generate-report.d.ts.map +1 -0
- package/dist/audit/generate-report.js +333 -0
- package/dist/audit/generate-report.js.map +1 -0
- package/dist/audit/index.d.ts +8 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit/index.js +8 -0
- package/dist/audit/index.js.map +1 -0
- package/dist/audit/run-audit.d.ts +33 -0
- package/dist/audit/run-audit.d.ts.map +1 -0
- package/dist/audit/run-audit.js +287 -0
- package/dist/audit/run-audit.js.map +1 -0
- package/dist/audit/types.d.ts +135 -0
- package/dist/audit/types.d.ts.map +1 -0
- package/dist/audit/types.js +5 -0
- package/dist/audit/types.js.map +1 -0
- package/dist/cache/index.d.ts +110 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +176 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/storage.d.ts +73 -0
- package/dist/cache/storage.d.ts.map +1 -0
- package/dist/cache/storage.js +176 -0
- package/dist/cache/storage.js.map +1 -0
- package/dist/cache/ttl.d.ts +62 -0
- package/dist/cache/ttl.d.ts.map +1 -0
- package/dist/cache/ttl.js +96 -0
- package/dist/cache/ttl.js.map +1 -0
- package/dist/cli/commands/analyze.d.ts +6 -0
- package/dist/cli/commands/analyze.d.ts.map +1 -0
- package/dist/cli/commands/analyze.js +43 -0
- package/dist/cli/commands/analyze.js.map +1 -0
- package/dist/cli/commands/audit.d.ts +6 -0
- package/dist/cli/commands/audit.d.ts.map +1 -0
- package/dist/cli/commands/audit.js +73 -0
- package/dist/cli/commands/audit.js.map +1 -0
- package/dist/cli/commands/check-updates.d.ts +6 -0
- package/dist/cli/commands/check-updates.d.ts.map +1 -0
- package/dist/cli/commands/check-updates.js +34 -0
- package/dist/cli/commands/check-updates.js.map +1 -0
- package/dist/cli/commands/diff.d.ts +7 -0
- package/dist/cli/commands/diff.d.ts.map +1 -0
- package/dist/cli/commands/diff.js +48 -0
- package/dist/cli/commands/diff.js.map +1 -0
- package/dist/cli/commands/extract.d.ts +6 -0
- package/dist/cli/commands/extract.d.ts.map +1 -0
- package/dist/cli/commands/extract.js +42 -0
- package/dist/cli/commands/extract.js.map +1 -0
- package/dist/cli/commands/list.d.ts +6 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +33 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/flags.d.ts +9 -0
- package/dist/cli/flags.d.ts.map +1 -0
- package/dist/cli/flags.js +22 -0
- package/dist/cli/flags.js.map +1 -0
- package/dist/cli/index.d.ts +5 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +40 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config.d.ts +19 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +23 -0
- package/dist/config.js.map +1 -0
- package/dist/differ/hints.d.ts +21 -0
- package/dist/differ/hints.d.ts.map +1 -0
- package/dist/differ/hints.js +105 -0
- package/dist/differ/hints.js.map +1 -0
- package/dist/differ/index.d.ts +25 -0
- package/dist/differ/index.d.ts.map +1 -0
- package/dist/differ/index.js +115 -0
- package/dist/differ/index.js.map +1 -0
- package/dist/differ/props.d.ts +36 -0
- package/dist/differ/props.d.ts.map +1 -0
- package/dist/differ/props.js +210 -0
- package/dist/differ/props.js.map +1 -0
- package/dist/differ/severity.d.ts +31 -0
- package/dist/differ/severity.d.ts.map +1 -0
- package/dist/differ/severity.js +65 -0
- package/dist/differ/severity.js.map +1 -0
- package/dist/differ/types.d.ts +109 -0
- package/dist/differ/types.d.ts.map +1 -0
- package/dist/differ/types.js +5 -0
- package/dist/differ/types.js.map +1 -0
- package/dist/extractor/classifier.d.ts +30 -0
- package/dist/extractor/classifier.d.ts.map +1 -0
- package/dist/extractor/classifier.js +150 -0
- package/dist/extractor/classifier.js.map +1 -0
- package/dist/extractor/forward-ref.d.ts +28 -0
- package/dist/extractor/forward-ref.d.ts.map +1 -0
- package/dist/extractor/forward-ref.js +134 -0
- package/dist/extractor/forward-ref.js.map +1 -0
- package/dist/extractor/index.d.ts +25 -0
- package/dist/extractor/index.d.ts.map +1 -0
- package/dist/extractor/index.js +43 -0
- package/dist/extractor/index.js.map +1 -0
- package/dist/extractor/interface.d.ts +40 -0
- package/dist/extractor/interface.d.ts.map +1 -0
- package/dist/extractor/interface.js +233 -0
- package/dist/extractor/interface.js.map +1 -0
- package/dist/extractor/jsdoc.d.ts +24 -0
- package/dist/extractor/jsdoc.d.ts.map +1 -0
- package/dist/extractor/jsdoc.js +74 -0
- package/dist/extractor/jsdoc.js.map +1 -0
- package/dist/extractor/project.d.ts +17 -0
- package/dist/extractor/project.d.ts.map +1 -0
- package/dist/extractor/project.js +33 -0
- package/dist/extractor/project.js.map +1 -0
- package/dist/extractor/props.d.ts +24 -0
- package/dist/extractor/props.d.ts.map +1 -0
- package/dist/extractor/props.js +78 -0
- package/dist/extractor/props.js.map +1 -0
- package/dist/extractor/type-resolver.d.ts +32 -0
- package/dist/extractor/type-resolver.d.ts.map +1 -0
- package/dist/extractor/type-resolver.js +129 -0
- package/dist/extractor/type-resolver.js.map +1 -0
- package/dist/fetcher/index.d.ts +7 -0
- package/dist/fetcher/index.d.ts.map +1 -0
- package/dist/fetcher/index.js +7 -0
- package/dist/fetcher/index.js.map +1 -0
- package/dist/fetcher/npm-registry.d.ts +45 -0
- package/dist/fetcher/npm-registry.d.ts.map +1 -0
- package/dist/fetcher/npm-registry.js +217 -0
- package/dist/fetcher/npm-registry.js.map +1 -0
- package/dist/fetcher/unified-package.d.ts +27 -0
- package/dist/fetcher/unified-package.d.ts.map +1 -0
- package/dist/fetcher/unified-package.js +99 -0
- package/dist/fetcher/unified-package.js.map +1 -0
- package/dist/fetcher/unpkg.d.ts +20 -0
- package/dist/fetcher/unpkg.d.ts.map +1 -0
- package/dist/fetcher/unpkg.js +58 -0
- package/dist/fetcher/unpkg.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +41 -0
- package/dist/index.js.map +1 -0
- package/dist/providers/base.d.ts +10 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +80 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/index.d.ts +10 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +10 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/interface.d.ts +56 -0
- package/dist/providers/interface.d.ts.map +1 -0
- package/dist/providers/interface.js +5 -0
- package/dist/providers/interface.js.map +1 -0
- package/dist/providers/radix-backend.d.ts +11 -0
- package/dist/providers/radix-backend.d.ts.map +1 -0
- package/dist/providers/radix-backend.js +107 -0
- package/dist/providers/radix-backend.js.map +1 -0
- package/dist/providers/radix.d.ts +6 -0
- package/dist/providers/radix.d.ts.map +1 -0
- package/dist/providers/radix.js +21 -0
- package/dist/providers/radix.js.map +1 -0
- package/dist/providers/registry.d.ts +17 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +55 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/rules/engine.d.ts +4 -0
- package/dist/rules/engine.d.ts.map +1 -0
- package/dist/rules/engine.js +37 -0
- package/dist/rules/engine.js.map +1 -0
- package/dist/rules/index.d.ts +6 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +6 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/predicates.d.ts +10 -0
- package/dist/rules/predicates.d.ts.map +1 -0
- package/dist/rules/predicates.js +93 -0
- package/dist/rules/predicates.js.map +1 -0
- package/dist/rules/rulesets/base-ui.d.ts +3 -0
- package/dist/rules/rulesets/base-ui.d.ts.map +1 -0
- package/dist/rules/rulesets/base-ui.js +65 -0
- package/dist/rules/rulesets/base-ui.js.map +1 -0
- package/dist/rules/rulesets/radix-legacy.d.ts +3 -0
- package/dist/rules/rulesets/radix-legacy.d.ts.map +1 -0
- package/dist/rules/rulesets/radix-legacy.js +38 -0
- package/dist/rules/rulesets/radix-legacy.js.map +1 -0
- package/dist/rules/types.d.ts +57 -0
- package/dist/rules/types.d.ts.map +1 -0
- package/dist/rules/types.js +2 -0
- package/dist/rules/types.js.map +1 -0
- package/dist/signatures/disambiguation.d.ts +30 -0
- package/dist/signatures/disambiguation.d.ts.map +1 -0
- package/dist/signatures/disambiguation.js +99 -0
- package/dist/signatures/disambiguation.js.map +1 -0
- package/dist/signatures/distinguishing.d.ts +29 -0
- package/dist/signatures/distinguishing.d.ts.map +1 -0
- package/dist/signatures/distinguishing.js +108 -0
- package/dist/signatures/distinguishing.js.map +1 -0
- package/dist/signatures/generator.d.ts +20 -0
- package/dist/signatures/generator.d.ts.map +1 -0
- package/dist/signatures/generator.js +147 -0
- package/dist/signatures/generator.js.map +1 -0
- package/dist/signatures/index.d.ts +10 -0
- package/dist/signatures/index.d.ts.map +1 -0
- package/dist/signatures/index.js +10 -0
- package/dist/signatures/index.js.map +1 -0
- package/dist/signatures/inference.d.ts +37 -0
- package/dist/signatures/inference.d.ts.map +1 -0
- package/dist/signatures/inference.js +132 -0
- package/dist/signatures/inference.js.map +1 -0
- package/dist/tools/analyze-component.d.ts +41 -0
- package/dist/tools/analyze-component.d.ts.map +1 -0
- package/dist/tools/analyze-component.js +274 -0
- package/dist/tools/analyze-component.js.map +1 -0
- package/dist/tools/check-updates.d.ts +33 -0
- package/dist/tools/check-updates.d.ts.map +1 -0
- package/dist/tools/check-updates.js +81 -0
- package/dist/tools/check-updates.js.map +1 -0
- package/dist/tools/diff-versions.d.ts +39 -0
- package/dist/tools/diff-versions.d.ts.map +1 -0
- package/dist/tools/diff-versions.js +78 -0
- package/dist/tools/diff-versions.js.map +1 -0
- package/dist/tools/extract-primitive.d.ts +50 -0
- package/dist/tools/extract-primitive.d.ts.map +1 -0
- package/dist/tools/extract-primitive.js +145 -0
- package/dist/tools/extract-primitive.js.map +1 -0
- package/dist/tools/generate-report.d.ts +29 -0
- package/dist/tools/generate-report.d.ts.map +1 -0
- package/dist/tools/generate-report.js +36 -0
- package/dist/tools/generate-report.js.map +1 -0
- package/dist/tools/index.d.ts +11 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +11 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/list-primitives.d.ts +41 -0
- package/dist/tools/list-primitives.d.ts.map +1 -0
- package/dist/tools/list-primitives.js +74 -0
- package/dist/tools/list-primitives.js.map +1 -0
- package/dist/tools/run-audit.d.ts +43 -0
- package/dist/tools/run-audit.d.ts.map +1 -0
- package/dist/tools/run-audit.js +60 -0
- package/dist/tools/run-audit.js.map +1 -0
- package/dist/types/index.d.ts +143 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/docs/architecture.md +88 -0
- package/docs/providers.md +47 -0
- package/docs/tools.md +143 -0
- package/package.json +59 -0
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interface extraction from TypeScript source files.
|
|
3
|
+
*/
|
|
4
|
+
import { extractPropsFromInterface, isPropsInterface } from './props.js';
|
|
5
|
+
import { classifyProp } from './classifier.js';
|
|
6
|
+
import { findForwardRefDeclarations, extractPropsFromForwardRef, getSubComponentSuffix, } from './forward-ref.js';
|
|
7
|
+
import { filterReactInternals } from './type-resolver.js';
|
|
8
|
+
/**
|
|
9
|
+
* Pattern for Radix sub-component naming.
|
|
10
|
+
* @example "DialogRoot", "DialogContent", "DialogTrigger"
|
|
11
|
+
*/
|
|
12
|
+
const SUB_COMPONENT_PATTERN = /^([A-Z][a-z]+)(Root|Trigger|Content|Title|Description|Close|Overlay|Portal|Arrow|Item|Indicator|Thumb|Track|Range|Viewport|Scrollbar|Corner|Action|Cancel|Group|Label|Separator|Sub|List|Value|Icon|Image|Fallback)Props$/;
|
|
13
|
+
/**
|
|
14
|
+
* Required sub-components by primitive type.
|
|
15
|
+
*/
|
|
16
|
+
const REQUIRED_SUB_COMPONENTS = {
|
|
17
|
+
Dialog: ['Root', 'Trigger', 'Content'],
|
|
18
|
+
AlertDialog: ['Root', 'Trigger', 'Content', 'Action', 'Cancel'],
|
|
19
|
+
Popover: ['Root', 'Trigger', 'Content'],
|
|
20
|
+
Tooltip: ['Root', 'Trigger', 'Content'],
|
|
21
|
+
DropdownMenu: ['Root', 'Trigger', 'Content'],
|
|
22
|
+
ContextMenu: ['Root', 'Trigger', 'Content'],
|
|
23
|
+
Select: ['Root', 'Trigger', 'Value', 'Content'],
|
|
24
|
+
Tabs: ['Root', 'List', 'Trigger', 'Content'],
|
|
25
|
+
Accordion: ['Root', 'Item', 'Trigger', 'Content'],
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Find all interfaces in a source file.
|
|
29
|
+
*/
|
|
30
|
+
export function findInterfaces(sourceFile) {
|
|
31
|
+
return sourceFile.getInterfaces();
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Find props interfaces (names ending with "Props").
|
|
35
|
+
*/
|
|
36
|
+
export function findPropsInterfaces(sourceFile) {
|
|
37
|
+
return sourceFile.getInterfaces().filter((i) => isPropsInterface(i.getName()));
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Extract sub-components from props interfaces.
|
|
41
|
+
*/
|
|
42
|
+
export function extractSubComponents(sourceFile, primitiveName) {
|
|
43
|
+
const subComponents = [];
|
|
44
|
+
const interfaces = findPropsInterfaces(sourceFile);
|
|
45
|
+
const requiredSubs = REQUIRED_SUB_COMPONENTS[primitiveName] || [];
|
|
46
|
+
for (const iface of interfaces) {
|
|
47
|
+
const name = iface.getName();
|
|
48
|
+
// Check if it matches the sub-component pattern
|
|
49
|
+
const match = name.match(SUB_COMPONENT_PATTERN);
|
|
50
|
+
if (match && match[1] === primitiveName) {
|
|
51
|
+
const subName = match[2];
|
|
52
|
+
const rawProps = extractPropsFromInterface(iface);
|
|
53
|
+
const props = rawProps.map(classifyProp);
|
|
54
|
+
subComponents.push({
|
|
55
|
+
name: subName,
|
|
56
|
+
props,
|
|
57
|
+
isRequired: requiredSubs.includes(subName),
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
else if (name === `${primitiveName}Props`) {
|
|
61
|
+
// Root component props
|
|
62
|
+
const rawProps = extractPropsFromInterface(iface);
|
|
63
|
+
const props = rawProps.map(classifyProp);
|
|
64
|
+
subComponents.push({
|
|
65
|
+
name: 'Root',
|
|
66
|
+
props,
|
|
67
|
+
isRequired: true,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return subComponents;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Enhanced sub-component extraction that also handles ForwardRefExoticComponent.
|
|
75
|
+
* This function combines interface-based extraction with ForwardRef detection.
|
|
76
|
+
*/
|
|
77
|
+
export function extractSubComponentsEnhanced(sourceFile, primitiveName) {
|
|
78
|
+
const subComponents = [];
|
|
79
|
+
const seenNames = new Set();
|
|
80
|
+
const requiredSubs = REQUIRED_SUB_COMPONENTS[primitiveName] || [];
|
|
81
|
+
// First, try ForwardRef declarations (more common in real .d.ts files)
|
|
82
|
+
const forwardRefDecls = findForwardRefDeclarations(sourceFile);
|
|
83
|
+
for (const decl of forwardRefDecls) {
|
|
84
|
+
const suffix = getSubComponentSuffix(decl.name, primitiveName);
|
|
85
|
+
if (!suffix && decl.name !== primitiveName)
|
|
86
|
+
continue;
|
|
87
|
+
const subName = suffix || 'Root';
|
|
88
|
+
if (seenNames.has(subName))
|
|
89
|
+
continue;
|
|
90
|
+
seenNames.add(subName);
|
|
91
|
+
const rawProps = extractPropsFromForwardRef(sourceFile, decl);
|
|
92
|
+
const filteredProps = rawProps ? filterReactInternals(rawProps) : [];
|
|
93
|
+
const props = filteredProps.map(classifyProp);
|
|
94
|
+
subComponents.push({
|
|
95
|
+
name: subName,
|
|
96
|
+
props,
|
|
97
|
+
isRequired: requiredSubs.includes(subName),
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
// Also check for React.FC exports (like DialogPortal)
|
|
101
|
+
const fcDecls = findFCDeclarations(sourceFile, primitiveName);
|
|
102
|
+
for (const { name, propsTypeName } of fcDecls) {
|
|
103
|
+
const suffix = getSubComponentSuffix(name, primitiveName);
|
|
104
|
+
if (!suffix && name !== primitiveName)
|
|
105
|
+
continue;
|
|
106
|
+
const subName = suffix || 'Root';
|
|
107
|
+
if (seenNames.has(subName))
|
|
108
|
+
continue;
|
|
109
|
+
seenNames.add(subName);
|
|
110
|
+
// Try to get props from the interface
|
|
111
|
+
let props = [];
|
|
112
|
+
if (propsTypeName) {
|
|
113
|
+
const propsInterface = sourceFile.getInterface(propsTypeName);
|
|
114
|
+
if (propsInterface) {
|
|
115
|
+
const rawProps = extractPropsFromInterface(propsInterface);
|
|
116
|
+
props = filterReactInternals(rawProps).map(classifyProp);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
subComponents.push({
|
|
120
|
+
name: subName,
|
|
121
|
+
props,
|
|
122
|
+
isRequired: requiredSubs.includes(subName),
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
// Fallback: use interface-based extraction if no ForwardRef found
|
|
126
|
+
if (subComponents.length === 0) {
|
|
127
|
+
return extractSubComponents(sourceFile, primitiveName);
|
|
128
|
+
}
|
|
129
|
+
return subComponents;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Find React.FC variable declarations for a primitive.
|
|
133
|
+
*/
|
|
134
|
+
function findFCDeclarations(sourceFile, primitiveName) {
|
|
135
|
+
const results = [];
|
|
136
|
+
for (const statement of sourceFile.getVariableStatements()) {
|
|
137
|
+
for (const decl of statement.getDeclarations()) {
|
|
138
|
+
const typeNode = decl.getTypeNode();
|
|
139
|
+
if (!typeNode)
|
|
140
|
+
continue;
|
|
141
|
+
const typeText = typeNode.getText();
|
|
142
|
+
const name = decl.getName();
|
|
143
|
+
// Check if it's React.FC and matches our primitive
|
|
144
|
+
if ((typeText.includes('React.FC') || typeText.includes('FC<')) &&
|
|
145
|
+
name.startsWith(primitiveName)) {
|
|
146
|
+
// Extract props type from FC<PropsType>
|
|
147
|
+
const match = typeText.match(/(?:React\.)?FC<(\w+)>/);
|
|
148
|
+
results.push({
|
|
149
|
+
name,
|
|
150
|
+
propsTypeName: match ? match[1] : null,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return results;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Find exported names from a source file.
|
|
159
|
+
*/
|
|
160
|
+
export function findExports(sourceFile) {
|
|
161
|
+
const exports = [];
|
|
162
|
+
// Get export declarations
|
|
163
|
+
for (const exportDecl of sourceFile.getExportDeclarations()) {
|
|
164
|
+
for (const named of exportDecl.getNamedExports()) {
|
|
165
|
+
exports.push(named.getName());
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// Get export assignments (export default)
|
|
169
|
+
const defaultExport = sourceFile.getDefaultExportSymbol();
|
|
170
|
+
if (defaultExport) {
|
|
171
|
+
exports.push('default');
|
|
172
|
+
}
|
|
173
|
+
// Get directly exported declarations
|
|
174
|
+
for (const stmt of sourceFile.getStatements()) {
|
|
175
|
+
if (stmt.getText().startsWith('export ')) {
|
|
176
|
+
// Try to extract the name
|
|
177
|
+
const text = stmt.getText();
|
|
178
|
+
const match = text.match(/export\s+(?:const|let|var|function|class|interface|type)\s+(\w+)/);
|
|
179
|
+
if (match) {
|
|
180
|
+
exports.push(match[1]);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return [...new Set(exports)];
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Check if the primitive uses React Context.
|
|
188
|
+
*/
|
|
189
|
+
export function detectContextUsage(sourceFile) {
|
|
190
|
+
const text = sourceFile.getFullText();
|
|
191
|
+
return (text.includes('createContext') ||
|
|
192
|
+
text.includes('useContext') ||
|
|
193
|
+
text.includes('Provider'));
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Extract context shape if present.
|
|
197
|
+
*/
|
|
198
|
+
export function extractContextShape(sourceFile, primitiveName) {
|
|
199
|
+
// Look for *ContextValue interface
|
|
200
|
+
const contextInterface = sourceFile.getInterface(`${primitiveName}ContextValue`);
|
|
201
|
+
if (contextInterface) {
|
|
202
|
+
const rawProps = extractPropsFromInterface(contextInterface);
|
|
203
|
+
return rawProps.map(classifyProp);
|
|
204
|
+
}
|
|
205
|
+
return undefined;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Extract a complete primitive from a source file.
|
|
209
|
+
* Uses enhanced extraction with ForwardRef support for real .d.ts files.
|
|
210
|
+
*/
|
|
211
|
+
export function extractPrimitiveFromSource(sourceFile, primitiveName, packageName, version) {
|
|
212
|
+
// Try enhanced extraction first (handles ForwardRefExoticComponent)
|
|
213
|
+
let subComponents = extractSubComponentsEnhanced(sourceFile, primitiveName);
|
|
214
|
+
// Fallback to standard extraction if enhanced returns empty
|
|
215
|
+
if (subComponents.length === 0) {
|
|
216
|
+
subComponents = extractSubComponents(sourceFile, primitiveName);
|
|
217
|
+
}
|
|
218
|
+
// Find root props (either from XxxProps or from Root sub-component)
|
|
219
|
+
const rootSubComponent = subComponents.find((s) => s.name === 'Root');
|
|
220
|
+
const rootProps = rootSubComponent?.props || [];
|
|
221
|
+
return {
|
|
222
|
+
name: primitiveName,
|
|
223
|
+
package: packageName,
|
|
224
|
+
version,
|
|
225
|
+
extractedAt: new Date().toISOString(),
|
|
226
|
+
rootProps,
|
|
227
|
+
subComponents,
|
|
228
|
+
exports: findExports(sourceFile),
|
|
229
|
+
usesContext: detectContextUsage(sourceFile),
|
|
230
|
+
contextShape: extractContextShape(sourceFile, primitiveName),
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=interface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/extractor/interface.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSDoc extraction utilities.
|
|
3
|
+
*/
|
|
4
|
+
import type { JSDoc, PropertySignature } from 'ts-morph';
|
|
5
|
+
export interface JsDocInfo {
|
|
6
|
+
description?: string;
|
|
7
|
+
defaultValue?: string;
|
|
8
|
+
deprecated?: boolean;
|
|
9
|
+
see?: string[];
|
|
10
|
+
example?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Extract JSDoc information from a property.
|
|
14
|
+
*/
|
|
15
|
+
export declare function extractJsDoc(prop: PropertySignature): JsDocInfo;
|
|
16
|
+
/**
|
|
17
|
+
* Extract @default value from JSDoc comment text.
|
|
18
|
+
* Handles formats like:
|
|
19
|
+
* - @default "value"
|
|
20
|
+
* - @default `value`
|
|
21
|
+
* - @default value
|
|
22
|
+
*/
|
|
23
|
+
export declare function extractDefaultFromComment(jsDocs: JSDoc[]): string | undefined;
|
|
24
|
+
//# sourceMappingURL=jsdoc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsdoc.d.ts","sourceRoot":"","sources":["../../src/extractor/jsdoc.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAEzD,MAAM,WAAW,SAAS;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,iBAAiB,GAAG,SAAS,CAuC/D;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,KAAK,EAAE,GACd,MAAM,GAAG,SAAS,CAUpB"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSDoc extraction utilities.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Extract JSDoc information from a property.
|
|
6
|
+
*/
|
|
7
|
+
export function extractJsDoc(prop) {
|
|
8
|
+
const jsDocs = prop.getJsDocs();
|
|
9
|
+
if (jsDocs.length === 0) {
|
|
10
|
+
return {};
|
|
11
|
+
}
|
|
12
|
+
const result = {};
|
|
13
|
+
const doc = jsDocs[0];
|
|
14
|
+
// Get main description
|
|
15
|
+
const description = doc.getDescription();
|
|
16
|
+
if (description) {
|
|
17
|
+
result.description = description.trim();
|
|
18
|
+
}
|
|
19
|
+
// Parse tags
|
|
20
|
+
for (const tag of doc.getTags()) {
|
|
21
|
+
const tagName = tag.getTagName();
|
|
22
|
+
const text = tag.getText();
|
|
23
|
+
switch (tagName) {
|
|
24
|
+
case 'default':
|
|
25
|
+
case 'defaultValue':
|
|
26
|
+
result.defaultValue = extractTagValue(text);
|
|
27
|
+
break;
|
|
28
|
+
case 'deprecated':
|
|
29
|
+
result.deprecated = true;
|
|
30
|
+
break;
|
|
31
|
+
case 'see':
|
|
32
|
+
result.see = result.see || [];
|
|
33
|
+
result.see.push(extractTagValue(text));
|
|
34
|
+
break;
|
|
35
|
+
case 'example':
|
|
36
|
+
result.example = extractTagValue(text);
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Extract @default value from JSDoc comment text.
|
|
44
|
+
* Handles formats like:
|
|
45
|
+
* - @default "value"
|
|
46
|
+
* - @default `value`
|
|
47
|
+
* - @default value
|
|
48
|
+
*/
|
|
49
|
+
export function extractDefaultFromComment(jsDocs) {
|
|
50
|
+
for (const doc of jsDocs) {
|
|
51
|
+
for (const tag of doc.getTags()) {
|
|
52
|
+
const tagName = tag.getTagName();
|
|
53
|
+
if (tagName === 'default' || tagName === 'defaultValue') {
|
|
54
|
+
return extractTagValue(tag.getText());
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Extract the value from a JSDoc tag text.
|
|
62
|
+
*/
|
|
63
|
+
function extractTagValue(text) {
|
|
64
|
+
// Remove the @tagName part
|
|
65
|
+
const value = text.replace(/^@\w+\s*/, '').trim();
|
|
66
|
+
// Remove surrounding quotes or backticks
|
|
67
|
+
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
68
|
+
(value.startsWith("'") && value.endsWith("'")) ||
|
|
69
|
+
(value.startsWith('`') && value.endsWith('`'))) {
|
|
70
|
+
return value.slice(1, -1);
|
|
71
|
+
}
|
|
72
|
+
return value;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=jsdoc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsdoc.js","sourceRoot":"","sources":["../../src/extractor/jsdoc.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAAuB;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAChC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAEtB,uBAAuB;IACvB,MAAM,WAAW,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;IACzC,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IAC1C,CAAC;IAED,aAAa;IACb,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;QAE3B,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,SAAS,CAAC;YACf,KAAK,cAAc;gBACjB,MAAM,CAAC,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;gBAC5C,MAAM;YACR,KAAK,YAAY;gBACf,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;gBACzB,MAAM;YACR,KAAK,KAAK;gBACR,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;gBAC9B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;gBACvC,MAAM;YACR,KAAK,SAAS;gBACZ,MAAM,CAAC,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;gBACvC,MAAM;QACV,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAAe;IAEf,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;YACjC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,cAAc,EAAE,CAAC;gBACxD,OAAO,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,IAAY;IACnC,2BAA2B;IAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAElD,yCAAyC;IACzC,IACE,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC9C,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC9C,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAC9C,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ts-morph project setup for parsing type definitions.
|
|
3
|
+
*/
|
|
4
|
+
import { Project, SourceFile } from 'ts-morph';
|
|
5
|
+
/**
|
|
6
|
+
* Create a ts-morph Project with in-memory file system.
|
|
7
|
+
*/
|
|
8
|
+
export declare function createProject(): Project;
|
|
9
|
+
/**
|
|
10
|
+
* Create a source file from type content.
|
|
11
|
+
*/
|
|
12
|
+
export declare function createSourceFile(project: Project, content: string, fileName?: string): SourceFile;
|
|
13
|
+
/**
|
|
14
|
+
* Parse type content and return a source file.
|
|
15
|
+
*/
|
|
16
|
+
export declare function parseTypes(content: string): SourceFile;
|
|
17
|
+
//# sourceMappingURL=project.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/extractor/project.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE/C;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAWvC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,MAAqB,GAC9B,UAAU,CAEZ;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAGtD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ts-morph project setup for parsing type definitions.
|
|
3
|
+
*/
|
|
4
|
+
import { Project } from 'ts-morph';
|
|
5
|
+
/**
|
|
6
|
+
* Create a ts-morph Project with in-memory file system.
|
|
7
|
+
*/
|
|
8
|
+
export function createProject() {
|
|
9
|
+
return new Project({
|
|
10
|
+
useInMemoryFileSystem: true,
|
|
11
|
+
compilerOptions: {
|
|
12
|
+
target: 99, // ESNext
|
|
13
|
+
module: 99, // ESNext
|
|
14
|
+
lib: ['lib.esnext.d.ts', 'lib.dom.d.ts'],
|
|
15
|
+
strict: true,
|
|
16
|
+
skipLibCheck: true,
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Create a source file from type content.
|
|
22
|
+
*/
|
|
23
|
+
export function createSourceFile(project, content, fileName = 'index.d.ts') {
|
|
24
|
+
return project.createSourceFile(fileName, content, { overwrite: true });
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Parse type content and return a source file.
|
|
28
|
+
*/
|
|
29
|
+
export function parseTypes(content) {
|
|
30
|
+
const project = createProject();
|
|
31
|
+
return createSourceFile(project, content);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/extractor/project.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAc,MAAM,UAAU,CAAC;AAE/C;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,OAAO,CAAC;QACjB,qBAAqB,EAAE,IAAI;QAC3B,eAAe,EAAE;YACf,MAAM,EAAE,EAAE,EAAE,SAAS;YACrB,MAAM,EAAE,EAAE,EAAE,SAAS;YACrB,GAAG,EAAE,CAAC,iBAAiB,EAAE,cAAc,CAAC;YACxC,MAAM,EAAE,IAAI;YACZ,YAAY,EAAE,IAAI;SACnB;KACF,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAgB,EAChB,OAAe,EACf,WAAmB,YAAY;IAE/B,OAAO,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,OAAO,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Property extraction from TypeScript interfaces.
|
|
3
|
+
*/
|
|
4
|
+
import type { InterfaceDeclaration, PropertySignature } from 'ts-morph';
|
|
5
|
+
import type { RawProp } from '../types/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* Extract props from an interface declaration.
|
|
8
|
+
*/
|
|
9
|
+
export declare function extractPropsFromInterface(iface: InterfaceDeclaration): RawProp[];
|
|
10
|
+
/**
|
|
11
|
+
* Extract a single prop from a property signature.
|
|
12
|
+
*/
|
|
13
|
+
export declare function extractProp(prop: PropertySignature): RawProp;
|
|
14
|
+
/**
|
|
15
|
+
* Check if an interface name matches the props pattern.
|
|
16
|
+
* @example "DialogProps" -> true, "DialogState" -> false
|
|
17
|
+
*/
|
|
18
|
+
export declare function isPropsInterface(name: string): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Extract the component name from a props interface name.
|
|
21
|
+
* @example "DialogContentProps" -> "DialogContent"
|
|
22
|
+
*/
|
|
23
|
+
export declare function componentNameFromProps(propsName: string): string;
|
|
24
|
+
//# sourceMappingURL=props.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"props.d.ts","sourceRoot":"","sources":["../../src/extractor/props.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,iBAAiB,EAAQ,MAAM,UAAU,CAAC;AAC9E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAGjD;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,EAAE,CAwBX;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAa5D;AAyBD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEhE"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Property extraction from TypeScript interfaces.
|
|
3
|
+
*/
|
|
4
|
+
import { extractJsDoc } from './jsdoc.js';
|
|
5
|
+
/**
|
|
6
|
+
* Extract props from an interface declaration.
|
|
7
|
+
*/
|
|
8
|
+
export function extractPropsFromInterface(iface) {
|
|
9
|
+
const props = [];
|
|
10
|
+
// Get own properties
|
|
11
|
+
for (const prop of iface.getProperties()) {
|
|
12
|
+
props.push(extractProp(prop));
|
|
13
|
+
}
|
|
14
|
+
// Handle extended interfaces
|
|
15
|
+
for (const base of iface.getBaseDeclarations()) {
|
|
16
|
+
if (base.getKindName() === 'InterfaceDeclaration') {
|
|
17
|
+
const baseInterface = base;
|
|
18
|
+
const baseProps = extractPropsFromInterface(baseInterface);
|
|
19
|
+
// Add props that aren't already defined (don't override)
|
|
20
|
+
for (const baseProp of baseProps) {
|
|
21
|
+
if (!props.some((p) => p.name === baseProp.name)) {
|
|
22
|
+
props.push(baseProp);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return props;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Extract a single prop from a property signature.
|
|
31
|
+
*/
|
|
32
|
+
export function extractProp(prop) {
|
|
33
|
+
const name = prop.getName();
|
|
34
|
+
const type = getTypeText(prop.getType());
|
|
35
|
+
const required = !prop.hasQuestionToken();
|
|
36
|
+
const jsDoc = extractJsDoc(prop);
|
|
37
|
+
return {
|
|
38
|
+
name,
|
|
39
|
+
type,
|
|
40
|
+
required,
|
|
41
|
+
defaultValue: jsDoc.defaultValue,
|
|
42
|
+
description: jsDoc.description,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get a clean type text representation.
|
|
47
|
+
*/
|
|
48
|
+
function getTypeText(type) {
|
|
49
|
+
let text = type.getText();
|
|
50
|
+
// Simplify React types
|
|
51
|
+
text = text
|
|
52
|
+
.replace(/React\.ReactNode/g, 'ReactNode')
|
|
53
|
+
.replace(/React\.ReactElement/g, 'ReactElement')
|
|
54
|
+
.replace(/React\.CSSProperties/g, 'CSSProperties')
|
|
55
|
+
.replace(/React\.HTMLAttributes<.*?>/g, 'HTMLAttributes')
|
|
56
|
+
.replace(/React\.ComponentPropsWithoutRef<.*?>/g, 'ComponentProps')
|
|
57
|
+
.replace(/import\(".*?"\)\./g, '');
|
|
58
|
+
// Truncate very long types
|
|
59
|
+
if (text.length > 200) {
|
|
60
|
+
text = text.slice(0, 200) + '...';
|
|
61
|
+
}
|
|
62
|
+
return text;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Check if an interface name matches the props pattern.
|
|
66
|
+
* @example "DialogProps" -> true, "DialogState" -> false
|
|
67
|
+
*/
|
|
68
|
+
export function isPropsInterface(name) {
|
|
69
|
+
return name.endsWith('Props');
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Extract the component name from a props interface name.
|
|
73
|
+
* @example "DialogContentProps" -> "DialogContent"
|
|
74
|
+
*/
|
|
75
|
+
export function componentNameFromProps(propsName) {
|
|
76
|
+
return propsName.replace(/Props$/, '');
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=props.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"props.js","sourceRoot":"","sources":["../../src/extractor/props.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,KAA2B;IAE3B,MAAM,KAAK,GAAc,EAAE,CAAC;IAE5B,qBAAqB;IACrB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,aAAa,EAAE,EAAE,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IAChC,CAAC;IAED,6BAA6B;IAC7B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,mBAAmB,EAAE,EAAE,CAAC;QAC/C,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,sBAAsB,EAAE,CAAC;YAClD,MAAM,aAAa,GAAG,IAA4B,CAAC;YACnD,MAAM,SAAS,GAAG,yBAAyB,CAAC,aAAa,CAAC,CAAC;YAE3D,yDAAyD;YACzD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBACjD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAuB;IACjD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAEjC,OAAO;QACL,IAAI;QACJ,IAAI;QACJ,QAAQ;QACR,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,WAAW,EAAE,KAAK,CAAC,WAAW;KAC/B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,IAAU;IAC7B,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAE1B,uBAAuB;IACvB,IAAI,GAAG,IAAI;SACR,OAAO,CAAC,mBAAmB,EAAE,WAAW,CAAC;SACzC,OAAO,CAAC,sBAAsB,EAAE,cAAc,CAAC;SAC/C,OAAO,CAAC,uBAAuB,EAAE,eAAe,CAAC;SACjD,OAAO,CAAC,6BAA6B,EAAE,gBAAgB,CAAC;SACxD,OAAO,CAAC,uCAAuC,EAAE,gBAAgB,CAAC;SAClE,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;IAErC,2BAA2B;IAC3B,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACtB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IACpC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,SAAiB;IACtD,OAAO,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type alias resolution and intersection merging.
|
|
3
|
+
* Handles complex type patterns in .d.ts files.
|
|
4
|
+
*/
|
|
5
|
+
import type { SourceFile, TypeAliasDeclaration, InterfaceDeclaration } from 'ts-morph';
|
|
6
|
+
import type { RawProp } from '../types/index.js';
|
|
7
|
+
/**
|
|
8
|
+
* Resolve a type alias to its underlying properties.
|
|
9
|
+
* Handles intersections, references to interfaces, and inline object types.
|
|
10
|
+
*
|
|
11
|
+
* @returns Array of RawProp or null if type not found
|
|
12
|
+
*/
|
|
13
|
+
export declare function resolveTypeAlias(sourceFile: SourceFile, aliasName: string): RawProp[] | null;
|
|
14
|
+
/**
|
|
15
|
+
* Merge all parts of an intersection type into a single props array.
|
|
16
|
+
*/
|
|
17
|
+
export declare function mergeIntersectionTypes(_sourceFile: SourceFile, typeAlias: TypeAliasDeclaration): RawProp[];
|
|
18
|
+
/**
|
|
19
|
+
* Resolve a type reference to its interface or type alias.
|
|
20
|
+
*/
|
|
21
|
+
export declare function resolveTypeReference(sourceFile: SourceFile, typeName: string): InterfaceDeclaration | TypeAliasDeclaration | null;
|
|
22
|
+
/**
|
|
23
|
+
* Filter out React internal props.
|
|
24
|
+
* Keeps `children` as it's compositionally relevant.
|
|
25
|
+
*/
|
|
26
|
+
export declare function filterReactInternals(props: RawProp[]): RawProp[];
|
|
27
|
+
/**
|
|
28
|
+
* Extract property names from an intersection type node.
|
|
29
|
+
* Useful for debugging and understanding type structure.
|
|
30
|
+
*/
|
|
31
|
+
export declare function getIntersectionParts(typeAlias: TypeAliasDeclaration): string[];
|
|
32
|
+
//# sourceMappingURL=type-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-resolver.d.ts","sourceRoot":"","sources":["../../src/extractor/type-resolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAcjD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,MAAM,GAChB,OAAO,EAAE,GAAG,IAAI,CAclB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,UAAU,EACvB,SAAS,EAAE,oBAAoB,GAC9B,OAAO,EAAE,CAyCX;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,MAAM,GACf,oBAAoB,GAAG,oBAAoB,GAAG,IAAI,CAUpD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAEhE;AAiBD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,oBAAoB,GAC9B,MAAM,EAAE,CAeV"}
|