@urbicon-ui/docs-gen 6.1.4
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/README.md +92 -0
- package/dist/cli/CLI.d.ts +10 -0
- package/dist/cli/CLI.d.ts.map +1 -0
- package/dist/cli/CLI.js +340 -0
- package/dist/cli/CLI.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +7 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/discovery/ComponentFinder.d.ts +43 -0
- package/dist/core/discovery/ComponentFinder.d.ts.map +1 -0
- package/dist/core/discovery/ComponentFinder.js +421 -0
- package/dist/core/discovery/ComponentFinder.js.map +1 -0
- package/dist/core/discovery/FileStructureAnalyzer.d.ts +15 -0
- package/dist/core/discovery/FileStructureAnalyzer.d.ts.map +1 -0
- package/dist/core/discovery/FileStructureAnalyzer.js +35 -0
- package/dist/core/discovery/FileStructureAnalyzer.js.map +1 -0
- package/dist/core/discovery/MetadataExtractor.d.ts +15 -0
- package/dist/core/discovery/MetadataExtractor.d.ts.map +1 -0
- package/dist/core/discovery/MetadataExtractor.js +47 -0
- package/dist/core/discovery/MetadataExtractor.js.map +1 -0
- package/dist/core/discovery/index.d.ts +2 -0
- package/dist/core/discovery/index.d.ts.map +1 -0
- package/dist/core/discovery/index.js +2 -0
- package/dist/core/discovery/index.js.map +1 -0
- package/dist/core/enrichment/APIDataGenerator.d.ts +77 -0
- package/dist/core/enrichment/APIDataGenerator.d.ts.map +1 -0
- package/dist/core/enrichment/APIDataGenerator.js +663 -0
- package/dist/core/enrichment/APIDataGenerator.js.map +1 -0
- package/dist/core/enrichment/index.d.ts +2 -0
- package/dist/core/enrichment/index.d.ts.map +1 -0
- package/dist/core/enrichment/index.js +6 -0
- package/dist/core/enrichment/index.js.map +1 -0
- package/dist/core/extraction/ExtractionCoordinator.d.ts +53 -0
- package/dist/core/extraction/ExtractionCoordinator.d.ts.map +1 -0
- package/dist/core/extraction/ExtractionCoordinator.js +352 -0
- package/dist/core/extraction/ExtractionCoordinator.js.map +1 -0
- package/dist/core/extraction/index.d.ts +2 -0
- package/dist/core/extraction/index.d.ts.map +1 -0
- package/dist/core/extraction/index.js +2 -0
- package/dist/core/extraction/index.js.map +1 -0
- package/dist/core/generation/GenerationCoordinator.d.ts +51 -0
- package/dist/core/generation/GenerationCoordinator.d.ts.map +1 -0
- package/dist/core/generation/GenerationCoordinator.js +206 -0
- package/dist/core/generation/GenerationCoordinator.js.map +1 -0
- package/dist/core/generation/index.d.ts +2 -0
- package/dist/core/generation/index.d.ts.map +1 -0
- package/dist/core/generation/index.js +2 -0
- package/dist/core/generation/index.js.map +1 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +16 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/pipeline/ErrorHandler.d.ts +129 -0
- package/dist/core/pipeline/ErrorHandler.d.ts.map +1 -0
- package/dist/core/pipeline/ErrorHandler.js +321 -0
- package/dist/core/pipeline/ErrorHandler.js.map +1 -0
- package/dist/core/pipeline/PipelineOrchestrator.d.ts +45 -0
- package/dist/core/pipeline/PipelineOrchestrator.d.ts.map +1 -0
- package/dist/core/pipeline/PipelineOrchestrator.js +216 -0
- package/dist/core/pipeline/PipelineOrchestrator.js.map +1 -0
- package/dist/core/pipeline/index.d.ts +1 -0
- package/dist/core/pipeline/index.d.ts.map +1 -0
- package/dist/core/pipeline/index.js +2 -0
- package/dist/core/pipeline/index.js.map +1 -0
- package/dist/extractors/BaseExtractor.d.ts +33 -0
- package/dist/extractors/BaseExtractor.d.ts.map +1 -0
- package/dist/extractors/BaseExtractor.js +68 -0
- package/dist/extractors/BaseExtractor.js.map +1 -0
- package/dist/extractors/ExtractorFactory.d.ts +35 -0
- package/dist/extractors/ExtractorFactory.d.ts.map +1 -0
- package/dist/extractors/ExtractorFactory.js +88 -0
- package/dist/extractors/ExtractorFactory.js.map +1 -0
- package/dist/extractors/documentation/index.d.ts +1 -0
- package/dist/extractors/documentation/index.d.ts.map +1 -0
- package/dist/extractors/documentation/index.js +2 -0
- package/dist/extractors/documentation/index.js.map +1 -0
- package/dist/extractors/index.d.ts +1 -0
- package/dist/extractors/index.d.ts.map +1 -0
- package/dist/extractors/index.js +2 -0
- package/dist/extractors/index.js.map +1 -0
- package/dist/extractors/typescript/ExamplesExtractor.d.ts +32 -0
- package/dist/extractors/typescript/ExamplesExtractor.d.ts.map +1 -0
- package/dist/extractors/typescript/ExamplesExtractor.js +209 -0
- package/dist/extractors/typescript/ExamplesExtractor.js.map +1 -0
- package/dist/extractors/typescript/InheritanceExtractor.d.ts +45 -0
- package/dist/extractors/typescript/InheritanceExtractor.d.ts.map +1 -0
- package/dist/extractors/typescript/InheritanceExtractor.js +368 -0
- package/dist/extractors/typescript/InheritanceExtractor.js.map +1 -0
- package/dist/extractors/typescript/LocalTypesExtractor.d.ts +20 -0
- package/dist/extractors/typescript/LocalTypesExtractor.d.ts.map +1 -0
- package/dist/extractors/typescript/LocalTypesExtractor.js +100 -0
- package/dist/extractors/typescript/LocalTypesExtractor.js.map +1 -0
- package/dist/extractors/typescript/PropsExtractor.d.ts +142 -0
- package/dist/extractors/typescript/PropsExtractor.d.ts.map +1 -0
- package/dist/extractors/typescript/PropsExtractor.js +709 -0
- package/dist/extractors/typescript/PropsExtractor.js.map +1 -0
- package/dist/extractors/typescript/TypeScriptBaseExtractor.d.ts +74 -0
- package/dist/extractors/typescript/TypeScriptBaseExtractor.d.ts.map +1 -0
- package/dist/extractors/typescript/TypeScriptBaseExtractor.js +249 -0
- package/dist/extractors/typescript/TypeScriptBaseExtractor.js.map +1 -0
- package/dist/extractors/typescript/index.d.ts +1 -0
- package/dist/extractors/typescript/index.d.ts.map +1 -0
- package/dist/extractors/typescript/index.js +2 -0
- package/dist/extractors/typescript/index.js.map +1 -0
- package/dist/extractors/variants/TailwindVariantsParser.d.ts +16 -0
- package/dist/extractors/variants/TailwindVariantsParser.d.ts.map +1 -0
- package/dist/extractors/variants/TailwindVariantsParser.js +53 -0
- package/dist/extractors/variants/TailwindVariantsParser.js.map +1 -0
- package/dist/extractors/variants/VariantsExtractor.d.ts +45 -0
- package/dist/extractors/variants/VariantsExtractor.d.ts.map +1 -0
- package/dist/extractors/variants/VariantsExtractor.js +340 -0
- package/dist/extractors/variants/VariantsExtractor.js.map +1 -0
- package/dist/extractors/variants/index.d.ts +2 -0
- package/dist/extractors/variants/index.d.ts.map +1 -0
- package/dist/extractors/variants/index.js +2 -0
- package/dist/extractors/variants/index.js.map +1 -0
- package/dist/generators/api/APIFileGenerator.d.ts +32 -0
- package/dist/generators/api/APIFileGenerator.d.ts.map +1 -0
- package/dist/generators/api/APIFileGenerator.js +450 -0
- package/dist/generators/api/APIFileGenerator.js.map +1 -0
- package/dist/generators/api/TypeDefinitionGenerator.d.ts +1 -0
- package/dist/generators/api/TypeDefinitionGenerator.d.ts.map +1 -0
- package/dist/generators/api/TypeDefinitionGenerator.js +2 -0
- package/dist/generators/api/TypeDefinitionGenerator.js.map +1 -0
- package/dist/generators/api/index.d.ts +2 -0
- package/dist/generators/api/index.d.ts.map +1 -0
- package/dist/generators/api/index.js +2 -0
- package/dist/generators/api/index.js.map +1 -0
- package/dist/generators/index.d.ts +5 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +4 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/generators/llm/LLMDocumentationGenerator.d.ts +34 -0
- package/dist/generators/llm/LLMDocumentationGenerator.d.ts.map +1 -0
- package/dist/generators/llm/LLMDocumentationGenerator.js +480 -0
- package/dist/generators/llm/LLMDocumentationGenerator.js.map +1 -0
- package/dist/generators/llm/LLMFormatter.d.ts +4 -0
- package/dist/generators/llm/LLMFormatter.d.ts.map +1 -0
- package/dist/generators/llm/LLMFormatter.js +8 -0
- package/dist/generators/llm/LLMFormatter.js.map +1 -0
- package/dist/generators/llm/LlmsFullAssembler.d.ts +20 -0
- package/dist/generators/llm/LlmsFullAssembler.d.ts.map +1 -0
- package/dist/generators/llm/LlmsFullAssembler.js +63 -0
- package/dist/generators/llm/LlmsFullAssembler.js.map +1 -0
- package/dist/generators/llm/index.d.ts +1 -0
- package/dist/generators/llm/index.d.ts.map +1 -0
- package/dist/generators/llm/index.js +2 -0
- package/dist/generators/llm/index.js.map +1 -0
- package/dist/generators/mcp/MCPCatalogAssembler.d.ts +27 -0
- package/dist/generators/mcp/MCPCatalogAssembler.d.ts.map +1 -0
- package/dist/generators/mcp/MCPCatalogAssembler.js +147 -0
- package/dist/generators/mcp/MCPCatalogAssembler.js.map +1 -0
- package/dist/generators/mcp/MCPCatalogGenerator.d.ts +55 -0
- package/dist/generators/mcp/MCPCatalogGenerator.d.ts.map +1 -0
- package/dist/generators/mcp/MCPCatalogGenerator.js +153 -0
- package/dist/generators/mcp/MCPCatalogGenerator.js.map +1 -0
- package/dist/generators/svelte/PageGenerator.d.ts +82 -0
- package/dist/generators/svelte/PageGenerator.d.ts.map +1 -0
- package/dist/generators/svelte/PageGenerator.js +557 -0
- package/dist/generators/svelte/PageGenerator.js.map +1 -0
- package/dist/generators/svelte/PlaygroundPresets.d.ts +2 -0
- package/dist/generators/svelte/PlaygroundPresets.d.ts.map +1 -0
- package/dist/generators/svelte/PlaygroundPresets.js +4 -0
- package/dist/generators/svelte/PlaygroundPresets.js.map +1 -0
- package/dist/generators/svelte/SectionMerger.d.ts +38 -0
- package/dist/generators/svelte/SectionMerger.d.ts.map +1 -0
- package/dist/generators/svelte/SectionMerger.js +154 -0
- package/dist/generators/svelte/SectionMerger.js.map +1 -0
- package/dist/generators/svelte/TemplateEngine.d.ts +91 -0
- package/dist/generators/svelte/TemplateEngine.d.ts.map +1 -0
- package/dist/generators/svelte/TemplateEngine.js +500 -0
- package/dist/generators/svelte/TemplateEngine.js.map +1 -0
- package/dist/generators/svelte/index.d.ts +8 -0
- package/dist/generators/svelte/index.d.ts.map +1 -0
- package/dist/generators/svelte/index.js +11 -0
- package/dist/generators/svelte/index.js.map +1 -0
- package/dist/generators/svelte/renderers/ApiRenderer.d.ts +17 -0
- package/dist/generators/svelte/renderers/ApiRenderer.d.ts.map +1 -0
- package/dist/generators/svelte/renderers/ApiRenderer.js +44 -0
- package/dist/generators/svelte/renderers/ApiRenderer.js.map +1 -0
- package/dist/generators/svelte/renderers/ExampleRenderer.d.ts +33 -0
- package/dist/generators/svelte/renderers/ExampleRenderer.d.ts.map +1 -0
- package/dist/generators/svelte/renderers/ExampleRenderer.js +137 -0
- package/dist/generators/svelte/renderers/ExampleRenderer.js.map +1 -0
- package/dist/generators/svelte/renderers/OverviewRenderer.d.ts +9 -0
- package/dist/generators/svelte/renderers/OverviewRenderer.d.ts.map +1 -0
- package/dist/generators/svelte/renderers/OverviewRenderer.js +45 -0
- package/dist/generators/svelte/renderers/OverviewRenderer.js.map +1 -0
- package/dist/generators/svelte/renderers/PlaygroundRenderer.d.ts +35 -0
- package/dist/generators/svelte/renderers/PlaygroundRenderer.d.ts.map +1 -0
- package/dist/generators/svelte/renderers/PlaygroundRenderer.js +319 -0
- package/dist/generators/svelte/renderers/PlaygroundRenderer.js.map +1 -0
- package/dist/generators/svelte/renderers/TypesRenderer.d.ts +9 -0
- package/dist/generators/svelte/renderers/TypesRenderer.d.ts.map +1 -0
- package/dist/generators/svelte/renderers/TypesRenderer.js +23 -0
- package/dist/generators/svelte/renderers/TypesRenderer.js.map +1 -0
- package/dist/generators/svelte/renderers/UsageRenderer.d.ts +14 -0
- package/dist/generators/svelte/renderers/UsageRenderer.d.ts.map +1 -0
- package/dist/generators/svelte/renderers/UsageRenderer.js +91 -0
- package/dist/generators/svelte/renderers/UsageRenderer.js.map +1 -0
- package/dist/generators/svelte/renderers/VariantsRenderer.d.ts +43 -0
- package/dist/generators/svelte/renderers/VariantsRenderer.d.ts.map +1 -0
- package/dist/generators/svelte/renderers/VariantsRenderer.js +277 -0
- package/dist/generators/svelte/renderers/VariantsRenderer.js.map +1 -0
- package/dist/generators/svelte/renderers/index.d.ts +8 -0
- package/dist/generators/svelte/renderers/index.d.ts.map +1 -0
- package/dist/generators/svelte/renderers/index.js +8 -0
- package/dist/generators/svelte/renderers/index.js.map +1 -0
- package/dist/generators/svelte/types.d.ts +13 -0
- package/dist/generators/svelte/types.d.ts.map +1 -0
- package/dist/generators/svelte/types.js +2 -0
- package/dist/generators/svelte/types.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/parsers/SvelteDocsParser.d.ts +44 -0
- package/dist/parsers/SvelteDocsParser.d.ts.map +1 -0
- package/dist/parsers/SvelteDocsParser.js +141 -0
- package/dist/parsers/SvelteDocsParser.js.map +1 -0
- package/dist/parsers/index.d.ts +2 -0
- package/dist/parsers/index.d.ts.map +1 -0
- package/dist/parsers/index.js +6 -0
- package/dist/parsers/index.js.map +1 -0
- package/dist/schema/ConfigurationBuilder.d.ts +55 -0
- package/dist/schema/ConfigurationBuilder.d.ts.map +1 -0
- package/dist/schema/ConfigurationBuilder.js +447 -0
- package/dist/schema/ConfigurationBuilder.js.map +1 -0
- package/dist/schema/index.d.ts +1 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +2 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types/configuration.d.ts +255 -0
- package/dist/types/configuration.d.ts.map +1 -0
- package/dist/types/configuration.js +2 -0
- package/dist/types/configuration.js.map +1 -0
- package/dist/types/core.d.ts +96 -0
- package/dist/types/core.d.ts.map +1 -0
- package/dist/types/core.js +2 -0
- package/dist/types/core.js.map +1 -0
- package/dist/types/docs-config.d.ts +5 -0
- package/dist/types/docs-config.d.ts.map +1 -0
- package/dist/types/docs-config.js +51 -0
- package/dist/types/docs-config.js.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +9 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/validation.d.ts +321 -0
- package/dist/types/validation.d.ts.map +1 -0
- package/dist/types/validation.js +2 -0
- package/dist/types/validation.js.map +1 -0
- package/dist/utils/DeploymentManager.d.ts +80 -0
- package/dist/utils/DeploymentManager.d.ts.map +1 -0
- package/dist/utils/DeploymentManager.js +360 -0
- package/dist/utils/DeploymentManager.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
import * as ts from 'typescript';
|
|
2
|
+
import { TypeScriptBaseExtractor } from './TypeScriptBaseExtractor';
|
|
3
|
+
/**
|
|
4
|
+
* Resolves interface inheritance, including HTML attributes, external types, and Omit patterns
|
|
5
|
+
*/
|
|
6
|
+
export class InheritanceExtractor extends TypeScriptBaseExtractor {
|
|
7
|
+
config;
|
|
8
|
+
knownInterfaces;
|
|
9
|
+
constructor(tsConfig) {
|
|
10
|
+
super(tsConfig);
|
|
11
|
+
const ext = tsConfig?.extraction?.inheritance;
|
|
12
|
+
this.config = {
|
|
13
|
+
resolveExternalTypes: true,
|
|
14
|
+
includeHTMLAttributes: true,
|
|
15
|
+
maxDepth: 5,
|
|
16
|
+
knownInterfaces: [],
|
|
17
|
+
...ext
|
|
18
|
+
};
|
|
19
|
+
// Build known interfaces map
|
|
20
|
+
this.knownInterfaces = new Map();
|
|
21
|
+
this.config.knownInterfaces?.forEach((iface) => {
|
|
22
|
+
this.knownInterfaces.set(iface.name, iface);
|
|
23
|
+
});
|
|
24
|
+
// Add default known interfaces
|
|
25
|
+
this.addDefaultKnownInterfaces();
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Extract inheritance information from component interface
|
|
29
|
+
*/
|
|
30
|
+
async extract(input) {
|
|
31
|
+
const startTime = Date.now();
|
|
32
|
+
if (!this.validateInput(input)) {
|
|
33
|
+
return this.handleError(new Error('Invalid input for inheritance extraction'), input);
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
console.log(`🔗 Extracting inheritance for ${input.componentName}`);
|
|
37
|
+
const sourceFile = await this.getSourceFile(input.filePath);
|
|
38
|
+
if (!sourceFile) {
|
|
39
|
+
return this.handleError(new Error(`Could not load source file: ${input.filePath}`), input);
|
|
40
|
+
}
|
|
41
|
+
// Find the main interface
|
|
42
|
+
const interfaceName = input.interfaceName || `${input.componentName}Props`;
|
|
43
|
+
const mainInterface = this.findInterface(sourceFile, interfaceName);
|
|
44
|
+
if (!mainInterface) {
|
|
45
|
+
const warning = this.addWarning('no_interface', `No ${interfaceName} interface found`, `Create a ${interfaceName} interface to document inheritance`);
|
|
46
|
+
return this.createSuccessResult([], [warning], input.filePath, Date.now() - startTime);
|
|
47
|
+
}
|
|
48
|
+
console.log(`✅ Found ${interfaceName} interface`);
|
|
49
|
+
// Extract inheritance information
|
|
50
|
+
const inheritance = await this.extractInheritanceFromInterface(mainInterface, sourceFile, 0);
|
|
51
|
+
console.log(`🔗 Extracted ${inheritance.length} inheritance sources`);
|
|
52
|
+
const duration = Date.now() - startTime;
|
|
53
|
+
return this.createSuccessResult(inheritance, [], input.filePath, duration);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
return this.handleError(error, input);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// ==========================================
|
|
60
|
+
// INHERITANCE EXTRACTION
|
|
61
|
+
// ==========================================
|
|
62
|
+
async extractInheritanceFromInterface(interfaceNode, sourceFile, depth) {
|
|
63
|
+
if (depth >= this.config.maxDepth) {
|
|
64
|
+
console.warn(`⚠️ Max inheritance depth (${this.config.maxDepth}) reached`);
|
|
65
|
+
return [];
|
|
66
|
+
}
|
|
67
|
+
const inheritance = [];
|
|
68
|
+
if (!interfaceNode.heritageClauses) {
|
|
69
|
+
return inheritance;
|
|
70
|
+
}
|
|
71
|
+
for (const heritageClause of interfaceNode.heritageClauses) {
|
|
72
|
+
for (const heritageType of heritageClause.types) {
|
|
73
|
+
const inheritanceInfo = await this.processHeritageType(heritageType, sourceFile, depth + 1);
|
|
74
|
+
if (inheritanceInfo) {
|
|
75
|
+
inheritance.push(inheritanceInfo);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return inheritance;
|
|
80
|
+
}
|
|
81
|
+
async processHeritageType(heritageType, sourceFile, depth) {
|
|
82
|
+
const typeName = heritageType.expression.getText();
|
|
83
|
+
console.log(`🔍 Processing heritage type: ${typeName} (depth: ${depth})`);
|
|
84
|
+
// Handle different inheritance patterns
|
|
85
|
+
if (this.isOmitPattern(heritageType)) {
|
|
86
|
+
return this.handleOmitPattern(heritageType);
|
|
87
|
+
}
|
|
88
|
+
if (this.isHTMLAttributes(typeName)) {
|
|
89
|
+
return this.handleHTMLAttributes(typeName);
|
|
90
|
+
}
|
|
91
|
+
if (this.isKnownInterface(typeName)) {
|
|
92
|
+
return this.handleKnownInterface(typeName);
|
|
93
|
+
}
|
|
94
|
+
// Try to find local interface
|
|
95
|
+
const localInterface = this.findInterface(sourceFile, typeName);
|
|
96
|
+
if (localInterface) {
|
|
97
|
+
return this.handleLocalInterface(localInterface, typeName, sourceFile, depth);
|
|
98
|
+
}
|
|
99
|
+
// Handle external types if enabled
|
|
100
|
+
if (this.config.resolveExternalTypes) {
|
|
101
|
+
return this.handleExternalType(typeName, heritageType);
|
|
102
|
+
}
|
|
103
|
+
// Create placeholder for unresolved inheritance
|
|
104
|
+
console.log(`❓ Creating placeholder for unresolved type: ${typeName}`);
|
|
105
|
+
return {
|
|
106
|
+
typeName,
|
|
107
|
+
source: 'unknown',
|
|
108
|
+
props: []
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
// ==========================================
|
|
112
|
+
// INHERITANCE PATTERN HANDLERS
|
|
113
|
+
// ==========================================
|
|
114
|
+
handleOmitPattern(heritageType) {
|
|
115
|
+
const fullType = heritageType.getText();
|
|
116
|
+
console.log(`✂️ Handling Omit pattern: ${fullType}`);
|
|
117
|
+
// Parse Omit<BaseType, Keys> pattern
|
|
118
|
+
const match = fullType.match(/Omit<([^,]+),\s*([^>]+)>/);
|
|
119
|
+
if (!match) {
|
|
120
|
+
throw new Error(`Invalid Omit pattern: ${fullType}`);
|
|
121
|
+
}
|
|
122
|
+
const baseType = (match[1] || '').trim();
|
|
123
|
+
const omittedKeys = (match[2] || '').trim();
|
|
124
|
+
// Extract omitted key names
|
|
125
|
+
const omittedKeyList = this.parseOmittedKeys(omittedKeys);
|
|
126
|
+
let props = [];
|
|
127
|
+
let url;
|
|
128
|
+
// Handle base type
|
|
129
|
+
if (this.isHTMLAttributes(baseType)) {
|
|
130
|
+
const elementType = this.extractElementType(baseType);
|
|
131
|
+
url = `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/${elementType.toLowerCase()}`;
|
|
132
|
+
props = [
|
|
133
|
+
{
|
|
134
|
+
name: `...${elementType}Attributes`,
|
|
135
|
+
type: 'HTMLAttributes',
|
|
136
|
+
required: false,
|
|
137
|
+
description: `HTML ${elementType.toLowerCase()} attributes${omittedKeyList.length > 0 ? ` (excluding: ${omittedKeyList.join(', ')})` : ''}`,
|
|
138
|
+
source: {
|
|
139
|
+
type: 'inherited',
|
|
140
|
+
name: baseType,
|
|
141
|
+
package: 'svelte/elements'
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
];
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
typeName: fullType,
|
|
148
|
+
source: 'omit-pattern',
|
|
149
|
+
props,
|
|
150
|
+
...(url ? { url } : {})
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
handleHTMLAttributes(typeName) {
|
|
154
|
+
console.log(`🌐 Handling HTML attributes: ${typeName}`);
|
|
155
|
+
const elementType = this.extractElementType(typeName);
|
|
156
|
+
const url = `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/${elementType.toLowerCase()}`;
|
|
157
|
+
const props = [
|
|
158
|
+
{
|
|
159
|
+
name: `...${elementType}Attributes`,
|
|
160
|
+
type: 'HTMLAttributes',
|
|
161
|
+
required: false,
|
|
162
|
+
description: `All standard HTML ${elementType.toLowerCase()} attributes`,
|
|
163
|
+
source: {
|
|
164
|
+
type: 'inherited',
|
|
165
|
+
name: typeName,
|
|
166
|
+
package: 'svelte/elements',
|
|
167
|
+
...(url ? { url } : {})
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
];
|
|
171
|
+
return {
|
|
172
|
+
typeName,
|
|
173
|
+
source: 'html-attributes',
|
|
174
|
+
props,
|
|
175
|
+
...(url ? { url } : {})
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
handleKnownInterface(typeName) {
|
|
179
|
+
const knownInterface = this.knownInterfaces.get(typeName);
|
|
180
|
+
console.log(`📚 Handling known interface: ${typeName} from ${knownInterface.package}`);
|
|
181
|
+
const props = [
|
|
182
|
+
{
|
|
183
|
+
name: `...${typeName}`,
|
|
184
|
+
type: typeName,
|
|
185
|
+
required: false,
|
|
186
|
+
description: knownInterface.description || `Properties from ${typeName}`,
|
|
187
|
+
source: {
|
|
188
|
+
type: 'inherited',
|
|
189
|
+
name: typeName,
|
|
190
|
+
package: knownInterface.package,
|
|
191
|
+
...(knownInterface.url ? { url: knownInterface.url } : {})
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
];
|
|
195
|
+
return {
|
|
196
|
+
typeName,
|
|
197
|
+
source: knownInterface.package,
|
|
198
|
+
props,
|
|
199
|
+
...(knownInterface.url ? { url: knownInterface.url } : {})
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
async handleLocalInterface(interfaceNode, typeName, sourceFile, depth) {
|
|
203
|
+
console.log(`📋 Handling local interface: ${typeName}`);
|
|
204
|
+
const props = [];
|
|
205
|
+
// Extract props from local interface
|
|
206
|
+
for (const member of interfaceNode.members) {
|
|
207
|
+
if (ts.isPropertySignature(member)) {
|
|
208
|
+
const prop = this.extractPropFromMember(member);
|
|
209
|
+
if (prop) {
|
|
210
|
+
prop.source = {
|
|
211
|
+
type: 'inherited',
|
|
212
|
+
name: typeName
|
|
213
|
+
};
|
|
214
|
+
props.push(prop);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
// Recursively extract inheritance from this interface
|
|
219
|
+
const nestedInheritance = await this.extractInheritanceFromInterface(interfaceNode, sourceFile, depth);
|
|
220
|
+
// Flatten nested inheritance props
|
|
221
|
+
nestedInheritance.forEach((inheritance) => {
|
|
222
|
+
props.push(...inheritance.props);
|
|
223
|
+
});
|
|
224
|
+
return {
|
|
225
|
+
typeName,
|
|
226
|
+
source: 'local-interface',
|
|
227
|
+
props
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
handleExternalType(typeName, _heritageType) {
|
|
231
|
+
console.log(`🌍 Handling external type: ${typeName}`);
|
|
232
|
+
// Try to resolve common external types
|
|
233
|
+
const packageName = this.getPackageForType(typeName);
|
|
234
|
+
const url = this.getUrlForType(typeName);
|
|
235
|
+
const props = [
|
|
236
|
+
{
|
|
237
|
+
name: `...${typeName}`,
|
|
238
|
+
type: typeName,
|
|
239
|
+
required: false,
|
|
240
|
+
description: `Properties inherited from ${typeName}`,
|
|
241
|
+
source: {
|
|
242
|
+
type: 'inherited',
|
|
243
|
+
name: typeName,
|
|
244
|
+
...(packageName ? { package: packageName } : {}),
|
|
245
|
+
...(url ? { url } : {})
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
];
|
|
249
|
+
return {
|
|
250
|
+
typeName,
|
|
251
|
+
source: packageName || 'external',
|
|
252
|
+
props,
|
|
253
|
+
...(url ? { url } : {})
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
// ==========================================
|
|
257
|
+
// UTILITY METHODS
|
|
258
|
+
// ==========================================
|
|
259
|
+
isOmitPattern(heritageType) {
|
|
260
|
+
return heritageType.expression.getText().startsWith('Omit');
|
|
261
|
+
}
|
|
262
|
+
isHTMLAttributes(typeName) {
|
|
263
|
+
return typeName.includes('HTML') && typeName.includes('Attributes');
|
|
264
|
+
}
|
|
265
|
+
isKnownInterface(typeName) {
|
|
266
|
+
return this.knownInterfaces.has(typeName);
|
|
267
|
+
}
|
|
268
|
+
extractElementType(typeName) {
|
|
269
|
+
const match = typeName?.match(/HTML(\w+)Attributes/);
|
|
270
|
+
return match?.[1] ? match[1] : 'Element';
|
|
271
|
+
}
|
|
272
|
+
parseOmittedKeys(omittedKeys) {
|
|
273
|
+
// Handle union types: 'key1' | 'key2' | 'key3'
|
|
274
|
+
const keys = omittedKeys
|
|
275
|
+
.split('|')
|
|
276
|
+
.map((key) => key.trim().replace(/['"]/g, ''))
|
|
277
|
+
.filter((key) => key.length > 0);
|
|
278
|
+
return keys;
|
|
279
|
+
}
|
|
280
|
+
getPackageForType(typeName) {
|
|
281
|
+
const packageMap = {
|
|
282
|
+
Snippet: 'svelte',
|
|
283
|
+
ComponentEvents: 'svelte',
|
|
284
|
+
MintProp: '@urbicon-ui/blocks',
|
|
285
|
+
ComponentIntent: '@urbicon-ui/blocks',
|
|
286
|
+
ComponentSize: '@urbicon-ui/blocks',
|
|
287
|
+
HTMLButtonAttributes: 'svelte/elements',
|
|
288
|
+
HTMLInputAttributes: 'svelte/elements',
|
|
289
|
+
HTMLDivAttributes: 'svelte/elements'
|
|
290
|
+
};
|
|
291
|
+
return packageMap[typeName];
|
|
292
|
+
}
|
|
293
|
+
getUrlForType(typeName) {
|
|
294
|
+
const urlMap = {
|
|
295
|
+
Snippet: 'https://svelte.dev/docs/svelte/snippet',
|
|
296
|
+
ComponentEvents: 'https://svelte.dev/docs/svelte/component-events',
|
|
297
|
+
MintProp: '/docs/mint-system',
|
|
298
|
+
ComponentIntent: '/docs/design-tokens#intent',
|
|
299
|
+
ComponentSize: '/docs/design-tokens#size'
|
|
300
|
+
};
|
|
301
|
+
return urlMap[typeName];
|
|
302
|
+
}
|
|
303
|
+
extractPropFromMember(member) {
|
|
304
|
+
const propName = this.getPropertyName(member);
|
|
305
|
+
if (!propName)
|
|
306
|
+
return null;
|
|
307
|
+
const propType = this.getTypeString(member.type);
|
|
308
|
+
const isRequired = this.isPropertyRequired(member);
|
|
309
|
+
const description = this.extractJSDocComment(member) || `${propName} property`;
|
|
310
|
+
return {
|
|
311
|
+
name: propName,
|
|
312
|
+
type: propType,
|
|
313
|
+
required: isRequired,
|
|
314
|
+
description,
|
|
315
|
+
source: { type: 'inherited' } // Will be updated by caller
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
addDefaultKnownInterfaces() {
|
|
319
|
+
const defaultInterfaces = [
|
|
320
|
+
{
|
|
321
|
+
name: 'Snippet',
|
|
322
|
+
package: 'svelte',
|
|
323
|
+
url: 'https://svelte.dev/docs/svelte/snippet',
|
|
324
|
+
description: 'Svelte snippet for reusable content'
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
name: 'ComponentEvents',
|
|
328
|
+
package: 'svelte',
|
|
329
|
+
url: 'https://svelte.dev/docs/svelte/component-events',
|
|
330
|
+
description: 'Svelte component event handlers'
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
name: 'MintProp',
|
|
334
|
+
package: '@urbicon-ui/blocks',
|
|
335
|
+
url: '/docs/mint-system',
|
|
336
|
+
description: 'Urbicon Mint micro-interaction system'
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
name: 'ComponentIntent',
|
|
340
|
+
package: '@urbicon-ui/blocks',
|
|
341
|
+
url: '/docs/design-tokens#intent',
|
|
342
|
+
description: 'Urbicon component intent colors'
|
|
343
|
+
},
|
|
344
|
+
{
|
|
345
|
+
name: 'ComponentSize',
|
|
346
|
+
package: '@urbicon-ui/blocks',
|
|
347
|
+
url: '/docs/design-tokens#size',
|
|
348
|
+
description: 'Urbicon component sizes'
|
|
349
|
+
}
|
|
350
|
+
];
|
|
351
|
+
defaultInterfaces.forEach((iface) => {
|
|
352
|
+
this.knownInterfaces.set(iface.name, iface);
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Add a known interface configuration
|
|
357
|
+
*/
|
|
358
|
+
addKnownInterface(config) {
|
|
359
|
+
this.knownInterfaces.set(config.name, config);
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Clear any caches
|
|
363
|
+
*/
|
|
364
|
+
clearCache() {
|
|
365
|
+
// No persistent cache in this implementation
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
//# sourceMappingURL=InheritanceExtractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InheritanceExtractor.js","sourceRoot":"","sources":["../../../src/extractors/typescript/InheritanceExtractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { TypeDefinition } from '../../types';
|
|
2
|
+
import { TypeScriptBaseExtractor } from './TypeScriptBaseExtractor';
|
|
3
|
+
interface LocalTypesExtractionInput {
|
|
4
|
+
filePath: string;
|
|
5
|
+
componentName: string;
|
|
6
|
+
packageName: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Extracts exported local type/interface definitions from a component's index.ts file.
|
|
10
|
+
* Focus: concrete business-relevant types (e.g., MenuItemType, MenuObjectOption, ...)
|
|
11
|
+
* Does not follow re-exports in this first iteration.
|
|
12
|
+
*/
|
|
13
|
+
export declare class LocalTypesExtractor extends TypeScriptBaseExtractor<LocalTypesExtractionInput, TypeDefinition[]> {
|
|
14
|
+
extract(input: LocalTypesExtractionInput): Promise<import("../..").ExtractionResult<TypeDefinition[]>>;
|
|
15
|
+
private collectExportedTypesFromSource;
|
|
16
|
+
private hasExportModifier;
|
|
17
|
+
private findVariantsFile;
|
|
18
|
+
}
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=LocalTypesExtractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalTypesExtractor.d.ts","sourceRoot":"","sources":["../../../src/extractors/typescript/LocalTypesExtractor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,UAAU,yBAAyB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,qBAAa,mBAAoB,SAAQ,uBAAuB,CAC9D,yBAAyB,EACzB,cAAc,EAAE,CACjB;IACO,OAAO,CAAC,KAAK,EAAE,yBAAyB;IA4B9C,OAAO,CAAC,8BAA8B;IAyCtC,OAAO,CAAC,iBAAiB;YAMX,gBAAgB;CAuB/B"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import * as path from 'node:path';
|
|
2
|
+
import * as ts from 'typescript';
|
|
3
|
+
import { TypeScriptBaseExtractor } from './TypeScriptBaseExtractor';
|
|
4
|
+
/**
|
|
5
|
+
* Extracts exported local type/interface definitions from a component's index.ts file.
|
|
6
|
+
* Focus: concrete business-relevant types (e.g., MenuItemType, MenuObjectOption, ...)
|
|
7
|
+
* Does not follow re-exports in this first iteration.
|
|
8
|
+
*/
|
|
9
|
+
export class LocalTypesExtractor extends TypeScriptBaseExtractor {
|
|
10
|
+
async extract(input) {
|
|
11
|
+
const start = Date.now();
|
|
12
|
+
try {
|
|
13
|
+
const sourceFile = await this.getSourceFile(input.filePath);
|
|
14
|
+
if (!sourceFile) {
|
|
15
|
+
return this.createSuccessResult([], [], input.filePath, Date.now() - start);
|
|
16
|
+
}
|
|
17
|
+
const typeDefs = [];
|
|
18
|
+
// collect from component index/source file
|
|
19
|
+
this.collectExportedTypesFromSource(sourceFile, typeDefs, input.packageName);
|
|
20
|
+
// optionally collect types from variants file (e.g., menu.variants.ts)
|
|
21
|
+
const variantsFilePath = await this.findVariantsFile(input.filePath, input.componentName);
|
|
22
|
+
if (variantsFilePath) {
|
|
23
|
+
const variantsSource = await this.getSourceFile(variantsFilePath);
|
|
24
|
+
if (variantsSource) {
|
|
25
|
+
this.collectExportedTypesFromSource(variantsSource, typeDefs, input.packageName);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return this.createSuccessResult(typeDefs, [], input.filePath, Date.now() - start);
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
return this.handleError(error, input);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
collectExportedTypesFromSource(sourceFile, out, packageName) {
|
|
35
|
+
const existing = new Set(out.map((t) => t.name));
|
|
36
|
+
sourceFile.forEachChild((node) => {
|
|
37
|
+
// type alias: export type Name = ...
|
|
38
|
+
if (ts.isTypeAliasDeclaration(node) && this.hasExportModifier(node)) {
|
|
39
|
+
const name = node.name?.getText() || '';
|
|
40
|
+
if (!name || existing.has(name))
|
|
41
|
+
return;
|
|
42
|
+
const rhs = node.type?.getText() || 'unknown';
|
|
43
|
+
out.push({
|
|
44
|
+
name,
|
|
45
|
+
type: 'type',
|
|
46
|
+
definition: rhs,
|
|
47
|
+
package: packageName,
|
|
48
|
+
documentation: this.extractJSDocComment(node) || ''
|
|
49
|
+
});
|
|
50
|
+
existing.add(name);
|
|
51
|
+
}
|
|
52
|
+
// interface: export interface Name { ... }
|
|
53
|
+
if (ts.isInterfaceDeclaration(node) && this.hasExportModifier(node)) {
|
|
54
|
+
const name = node.name?.getText() || '';
|
|
55
|
+
if (!name || existing.has(name))
|
|
56
|
+
return;
|
|
57
|
+
const body = node.members?.length
|
|
58
|
+
? sourceFile.text.slice(node.members.pos, node.members.end)
|
|
59
|
+
: ' {}';
|
|
60
|
+
out.push({
|
|
61
|
+
name,
|
|
62
|
+
type: 'interface',
|
|
63
|
+
definition: body.trim(),
|
|
64
|
+
package: packageName,
|
|
65
|
+
documentation: this.extractJSDocComment(node) || ''
|
|
66
|
+
});
|
|
67
|
+
existing.add(name);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
hasExportModifier(node) {
|
|
72
|
+
if (!ts.canHaveModifiers(node))
|
|
73
|
+
return false;
|
|
74
|
+
const modifiers = ts.getModifiers(node);
|
|
75
|
+
return (modifiers ?? []).some((m) => m.kind === ts.SyntaxKind.ExportKeyword);
|
|
76
|
+
}
|
|
77
|
+
async findVariantsFile(componentFilePath, componentName) {
|
|
78
|
+
const dir = path.dirname(componentFilePath);
|
|
79
|
+
const patterns = [
|
|
80
|
+
`${componentName.toLowerCase()}.variants.ts`,
|
|
81
|
+
`${componentName}.variants.ts`,
|
|
82
|
+
'variants.ts',
|
|
83
|
+
`${componentName.toLowerCase()}.variants.js`,
|
|
84
|
+
`${componentName}.variants.js`
|
|
85
|
+
];
|
|
86
|
+
for (const p of patterns) {
|
|
87
|
+
const candidate = path.join(dir, p);
|
|
88
|
+
try {
|
|
89
|
+
const sf = await this.getSourceFile(candidate);
|
|
90
|
+
if (sf)
|
|
91
|
+
return candidate;
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// ignore
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=LocalTypesExtractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalTypesExtractor.js","sourceRoot":"","sources":["../../../src/extractors/typescript/LocalTypesExtractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import type { ExtractionResult, PropInfo, TypeScriptExtractionConfig } from '../../types';
|
|
2
|
+
import { TypeScriptBaseExtractor } from './TypeScriptBaseExtractor';
|
|
3
|
+
interface PropsExtractionInput {
|
|
4
|
+
filePath: string;
|
|
5
|
+
componentName: string;
|
|
6
|
+
/** Optional list of variant prop keys (from VariantsExtractor) to exclude in Omit<... , keyof Variants> */
|
|
7
|
+
variantKeys?: string[];
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Extracts props from TypeScript interfaces using AST parsing
|
|
11
|
+
* Supports JSDoc comments, type analysis, and prop categorization
|
|
12
|
+
*/
|
|
13
|
+
export declare class PropsExtractor extends TypeScriptBaseExtractor<PropsExtractionInput, PropInfo[]> {
|
|
14
|
+
config: TypeScriptExtractionConfig;
|
|
15
|
+
private currentVariantKeys;
|
|
16
|
+
constructor(tsConfig?: Record<string, unknown>);
|
|
17
|
+
/**
|
|
18
|
+
* Extract props from TypeScript interface
|
|
19
|
+
*/
|
|
20
|
+
extract(input: PropsExtractionInput): Promise<ExtractionResult<PropInfo[]>>;
|
|
21
|
+
/**
|
|
22
|
+
* Extract the component description from the JSDoc on the *Props declaration.
|
|
23
|
+
* Checks @description tag first, then falls back to leading prose text.
|
|
24
|
+
*/
|
|
25
|
+
extractDescription(input: {
|
|
26
|
+
filePath: string;
|
|
27
|
+
componentName: string;
|
|
28
|
+
}): Promise<string | null>;
|
|
29
|
+
/**
|
|
30
|
+
* Extract all @tag values from the *Props declaration JSDoc.
|
|
31
|
+
*/
|
|
32
|
+
extractTags(input: {
|
|
33
|
+
filePath: string;
|
|
34
|
+
componentName: string;
|
|
35
|
+
}): Promise<string[]>;
|
|
36
|
+
/**
|
|
37
|
+
* Extract all @related values from the *Props declaration JSDoc.
|
|
38
|
+
*/
|
|
39
|
+
extractRelated(input: {
|
|
40
|
+
filePath: string;
|
|
41
|
+
componentName: string;
|
|
42
|
+
}): Promise<string[]>;
|
|
43
|
+
/**
|
|
44
|
+
* Extract the `@stability` tag from the *Props declaration JSDoc.
|
|
45
|
+
* Accepts `experimental | beta | stable | deprecated`; unknown
|
|
46
|
+
* values are dropped so a typo doesn't silently propagate into the
|
|
47
|
+
* Editorial badge.
|
|
48
|
+
*/
|
|
49
|
+
extractStability(input: {
|
|
50
|
+
filePath: string;
|
|
51
|
+
componentName: string;
|
|
52
|
+
}): Promise<'experimental' | 'beta' | 'stable' | 'deprecated' | null>;
|
|
53
|
+
/**
|
|
54
|
+
* Locate the component's props declaration. Either:
|
|
55
|
+
* - an `interface FooProps { ... }` → kind: 'interface'
|
|
56
|
+
* - a `type FooProps = A | B | …` → kind: 'union'
|
|
57
|
+
*
|
|
58
|
+
* `node` is the AST node whose members get walked for props; `jsDocHost`
|
|
59
|
+
* is the declaration that owns the leading JSDoc block (for an interface
|
|
60
|
+
* they're the same; for a union the JSDoc lives on the type-alias, not
|
|
61
|
+
* on the `UnionTypeNode` itself). Other type-alias shapes (intersection,
|
|
62
|
+
* single reference, mapped types, etc.) aren't supported here and fall
|
|
63
|
+
* through to `null`.
|
|
64
|
+
*/
|
|
65
|
+
private findPropsDeclaration;
|
|
66
|
+
/**
|
|
67
|
+
* Extract props from a discriminated-union type alias.
|
|
68
|
+
*
|
|
69
|
+
* Algorithm (generic — no hard-coded discriminator name):
|
|
70
|
+
* 1. Resolve each union member to a local interface. Members that
|
|
71
|
+
* can't be resolved (anonymous type literals, external refs,
|
|
72
|
+
* intersections, etc.) are dropped with a warning.
|
|
73
|
+
* 2. Extract props from each resolved interface (reusing the
|
|
74
|
+
* interface path so heritage / Omit / variants are honoured).
|
|
75
|
+
* 3. Detect the discriminator: a property that exists in every
|
|
76
|
+
* member with a single string-literal type, and whose literal
|
|
77
|
+
* value differs across members.
|
|
78
|
+
* 4. Merge the per-member prop sets:
|
|
79
|
+
* - Props that appear in every member → unconditional.
|
|
80
|
+
* - Props that appear in only some members → `conditionalOn`
|
|
81
|
+
* records the discriminator and the values where they apply.
|
|
82
|
+
* - The discriminator prop itself is collapsed into one entry
|
|
83
|
+
* whose `values` array enumerates every literal it can take.
|
|
84
|
+
*/
|
|
85
|
+
private extractPropsFromUnion;
|
|
86
|
+
/**
|
|
87
|
+
* Pick the most informative occurrence of a prop across union members.
|
|
88
|
+
* Prefers occurrences whose type isn't `never`, whose description isn't
|
|
89
|
+
* an auto-generated placeholder (`'<name> property'`), and which carry
|
|
90
|
+
* a `defaultValue` over those that don't. This keeps
|
|
91
|
+
* `<Badge variant="dot" removable>` extracting as `removable: boolean`
|
|
92
|
+
* (from `BadgeStandardProps`) rather than `removable?: never` (from
|
|
93
|
+
* `BadgeDotProps`) — and, when collapsing the discriminator, picks the
|
|
94
|
+
* arm whose `@default` JSDoc is set so the docs site renders a real
|
|
95
|
+
* default value in the API table.
|
|
96
|
+
*/
|
|
97
|
+
private pickInformativeOccurrence;
|
|
98
|
+
/**
|
|
99
|
+
* Resolve a union-member type to a local interface declaration. Currently
|
|
100
|
+
* supports plain TypeReferenceNode shapes (`A`, `Foo<T>`). Returns null for
|
|
101
|
+
* anonymous type literals, intersections, external references the file
|
|
102
|
+
* doesn't import directly, etc.
|
|
103
|
+
*/
|
|
104
|
+
private resolveUnionMemberInterface;
|
|
105
|
+
/**
|
|
106
|
+
* Detect the discriminator property. A discriminator must:
|
|
107
|
+
* - exist in every union member,
|
|
108
|
+
* - have a string-literal-union type in each member (one or more
|
|
109
|
+
* `'x' | 'y'` values),
|
|
110
|
+
* - have non-overlapping value-sets across members (so the literal
|
|
111
|
+
* uniquely identifies which member a value belongs to).
|
|
112
|
+
*
|
|
113
|
+
* Returns null if no such property exists.
|
|
114
|
+
*/
|
|
115
|
+
private detectDiscriminator;
|
|
116
|
+
private extractPropsFromInterface;
|
|
117
|
+
private extractPropFromMember;
|
|
118
|
+
private extractInheritedProps;
|
|
119
|
+
private handleVariantInheritance;
|
|
120
|
+
private handleOmitPattern;
|
|
121
|
+
private handleHTMLAttributes;
|
|
122
|
+
private extractPropsFromLocalInterface;
|
|
123
|
+
private isVariantInterface;
|
|
124
|
+
private isOmitPattern;
|
|
125
|
+
/**
|
|
126
|
+
* Parse the keys argument of `Omit<X, K>` into a flat string-literal list.
|
|
127
|
+
* Handles `'a'`, `'a' | 'b' | 'c'`, double-quoted, and ignores `keyof T`
|
|
128
|
+
* patterns (those are handled separately via `currentVariantKeys`).
|
|
129
|
+
*/
|
|
130
|
+
private extractOmittedLiteralKeys;
|
|
131
|
+
private isHTMLAttributes;
|
|
132
|
+
private extractElementType;
|
|
133
|
+
private getPackageForType;
|
|
134
|
+
private extractJSDocExamples;
|
|
135
|
+
private sortProps;
|
|
136
|
+
/**
|
|
137
|
+
* Clear any caches
|
|
138
|
+
*/
|
|
139
|
+
clearCache(): void;
|
|
140
|
+
}
|
|
141
|
+
export {};
|
|
142
|
+
//# sourceMappingURL=PropsExtractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PropsExtractor.d.ts","sourceRoot":"","sources":["../../../src/extractors/typescript/PropsExtractor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,UAAU,oBAAoB;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,2GAA2G;IAC3G,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAMD;;;GAGG;AACH,qBAAa,cAAe,SAAQ,uBAAuB,CAAC,oBAAoB,EAAE,QAAQ,EAAE,CAAC;IACpF,MAAM,EAAE,0BAA0B,CAAC;IAC1C,OAAO,CAAC,kBAAkB,CAAgB;gBAE9B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAe9C;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC;IA2DjF;;;OAGG;IACG,kBAAkB,CAAC,KAAK,EAAE;QAC9B,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;KACvB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAa1B;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAUxF;;OAEG;IACG,cAAc,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAU3F;;;;;OAKG;IACG,gBAAgB,CAAC,KAAK,EAAE;QAC5B,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;KACvB,GAAG,OAAO,CAAC,cAAc,GAAG,MAAM,GAAG,QAAQ,GAAG,YAAY,GAAG,IAAI,CAAC;IA0BrE;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,oBAAoB;IA2B5B;;;;;;;;;;;;;;;;;;OAkBG;YACW,qBAAqB;IA0HnC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,yBAAyB;IAgBjC;;;;;OAKG;IACH,OAAO,CAAC,2BAA2B;IAWnC;;;;;;;;;OASG;IACH,OAAO,CAAC,mBAAmB;YAwCb,yBAAyB;IAuCvC,OAAO,CAAC,qBAAqB;YAiFf,qBAAqB;IA2CnC,OAAO,CAAC,wBAAwB;IAmBhC,OAAO,CAAC,iBAAiB;IA6EzB,OAAO,CAAC,oBAAoB;IAmB5B,OAAO,CAAC,8BAA8B;IA2BtC,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,aAAa;IAIrB;;;;OAIG;IACH,OAAO,CAAC,yBAAyB;IAMjC,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,oBAAoB;IAsB5B,OAAO,CAAC,SAAS;IAajB;;OAEG;IACH,UAAU,IAAI,IAAI;CAGnB"}
|