@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.
Files changed (263) hide show
  1. package/README.md +92 -0
  2. package/dist/cli/CLI.d.ts +10 -0
  3. package/dist/cli/CLI.d.ts.map +1 -0
  4. package/dist/cli/CLI.js +340 -0
  5. package/dist/cli/CLI.js.map +1 -0
  6. package/dist/cli/index.d.ts +2 -0
  7. package/dist/cli/index.d.ts.map +1 -0
  8. package/dist/cli/index.js +7 -0
  9. package/dist/cli/index.js.map +1 -0
  10. package/dist/core/discovery/ComponentFinder.d.ts +43 -0
  11. package/dist/core/discovery/ComponentFinder.d.ts.map +1 -0
  12. package/dist/core/discovery/ComponentFinder.js +421 -0
  13. package/dist/core/discovery/ComponentFinder.js.map +1 -0
  14. package/dist/core/discovery/FileStructureAnalyzer.d.ts +15 -0
  15. package/dist/core/discovery/FileStructureAnalyzer.d.ts.map +1 -0
  16. package/dist/core/discovery/FileStructureAnalyzer.js +35 -0
  17. package/dist/core/discovery/FileStructureAnalyzer.js.map +1 -0
  18. package/dist/core/discovery/MetadataExtractor.d.ts +15 -0
  19. package/dist/core/discovery/MetadataExtractor.d.ts.map +1 -0
  20. package/dist/core/discovery/MetadataExtractor.js +47 -0
  21. package/dist/core/discovery/MetadataExtractor.js.map +1 -0
  22. package/dist/core/discovery/index.d.ts +2 -0
  23. package/dist/core/discovery/index.d.ts.map +1 -0
  24. package/dist/core/discovery/index.js +2 -0
  25. package/dist/core/discovery/index.js.map +1 -0
  26. package/dist/core/enrichment/APIDataGenerator.d.ts +77 -0
  27. package/dist/core/enrichment/APIDataGenerator.d.ts.map +1 -0
  28. package/dist/core/enrichment/APIDataGenerator.js +663 -0
  29. package/dist/core/enrichment/APIDataGenerator.js.map +1 -0
  30. package/dist/core/enrichment/index.d.ts +2 -0
  31. package/dist/core/enrichment/index.d.ts.map +1 -0
  32. package/dist/core/enrichment/index.js +6 -0
  33. package/dist/core/enrichment/index.js.map +1 -0
  34. package/dist/core/extraction/ExtractionCoordinator.d.ts +53 -0
  35. package/dist/core/extraction/ExtractionCoordinator.d.ts.map +1 -0
  36. package/dist/core/extraction/ExtractionCoordinator.js +352 -0
  37. package/dist/core/extraction/ExtractionCoordinator.js.map +1 -0
  38. package/dist/core/extraction/index.d.ts +2 -0
  39. package/dist/core/extraction/index.d.ts.map +1 -0
  40. package/dist/core/extraction/index.js +2 -0
  41. package/dist/core/extraction/index.js.map +1 -0
  42. package/dist/core/generation/GenerationCoordinator.d.ts +51 -0
  43. package/dist/core/generation/GenerationCoordinator.d.ts.map +1 -0
  44. package/dist/core/generation/GenerationCoordinator.js +206 -0
  45. package/dist/core/generation/GenerationCoordinator.js.map +1 -0
  46. package/dist/core/generation/index.d.ts +2 -0
  47. package/dist/core/generation/index.d.ts.map +1 -0
  48. package/dist/core/generation/index.js +2 -0
  49. package/dist/core/generation/index.js.map +1 -0
  50. package/dist/core/index.d.ts +7 -0
  51. package/dist/core/index.d.ts.map +1 -0
  52. package/dist/core/index.js +16 -0
  53. package/dist/core/index.js.map +1 -0
  54. package/dist/core/pipeline/ErrorHandler.d.ts +129 -0
  55. package/dist/core/pipeline/ErrorHandler.d.ts.map +1 -0
  56. package/dist/core/pipeline/ErrorHandler.js +321 -0
  57. package/dist/core/pipeline/ErrorHandler.js.map +1 -0
  58. package/dist/core/pipeline/PipelineOrchestrator.d.ts +45 -0
  59. package/dist/core/pipeline/PipelineOrchestrator.d.ts.map +1 -0
  60. package/dist/core/pipeline/PipelineOrchestrator.js +216 -0
  61. package/dist/core/pipeline/PipelineOrchestrator.js.map +1 -0
  62. package/dist/core/pipeline/index.d.ts +1 -0
  63. package/dist/core/pipeline/index.d.ts.map +1 -0
  64. package/dist/core/pipeline/index.js +2 -0
  65. package/dist/core/pipeline/index.js.map +1 -0
  66. package/dist/extractors/BaseExtractor.d.ts +33 -0
  67. package/dist/extractors/BaseExtractor.d.ts.map +1 -0
  68. package/dist/extractors/BaseExtractor.js +68 -0
  69. package/dist/extractors/BaseExtractor.js.map +1 -0
  70. package/dist/extractors/ExtractorFactory.d.ts +35 -0
  71. package/dist/extractors/ExtractorFactory.d.ts.map +1 -0
  72. package/dist/extractors/ExtractorFactory.js +88 -0
  73. package/dist/extractors/ExtractorFactory.js.map +1 -0
  74. package/dist/extractors/documentation/index.d.ts +1 -0
  75. package/dist/extractors/documentation/index.d.ts.map +1 -0
  76. package/dist/extractors/documentation/index.js +2 -0
  77. package/dist/extractors/documentation/index.js.map +1 -0
  78. package/dist/extractors/index.d.ts +1 -0
  79. package/dist/extractors/index.d.ts.map +1 -0
  80. package/dist/extractors/index.js +2 -0
  81. package/dist/extractors/index.js.map +1 -0
  82. package/dist/extractors/typescript/ExamplesExtractor.d.ts +32 -0
  83. package/dist/extractors/typescript/ExamplesExtractor.d.ts.map +1 -0
  84. package/dist/extractors/typescript/ExamplesExtractor.js +209 -0
  85. package/dist/extractors/typescript/ExamplesExtractor.js.map +1 -0
  86. package/dist/extractors/typescript/InheritanceExtractor.d.ts +45 -0
  87. package/dist/extractors/typescript/InheritanceExtractor.d.ts.map +1 -0
  88. package/dist/extractors/typescript/InheritanceExtractor.js +368 -0
  89. package/dist/extractors/typescript/InheritanceExtractor.js.map +1 -0
  90. package/dist/extractors/typescript/LocalTypesExtractor.d.ts +20 -0
  91. package/dist/extractors/typescript/LocalTypesExtractor.d.ts.map +1 -0
  92. package/dist/extractors/typescript/LocalTypesExtractor.js +100 -0
  93. package/dist/extractors/typescript/LocalTypesExtractor.js.map +1 -0
  94. package/dist/extractors/typescript/PropsExtractor.d.ts +142 -0
  95. package/dist/extractors/typescript/PropsExtractor.d.ts.map +1 -0
  96. package/dist/extractors/typescript/PropsExtractor.js +709 -0
  97. package/dist/extractors/typescript/PropsExtractor.js.map +1 -0
  98. package/dist/extractors/typescript/TypeScriptBaseExtractor.d.ts +74 -0
  99. package/dist/extractors/typescript/TypeScriptBaseExtractor.d.ts.map +1 -0
  100. package/dist/extractors/typescript/TypeScriptBaseExtractor.js +249 -0
  101. package/dist/extractors/typescript/TypeScriptBaseExtractor.js.map +1 -0
  102. package/dist/extractors/typescript/index.d.ts +1 -0
  103. package/dist/extractors/typescript/index.d.ts.map +1 -0
  104. package/dist/extractors/typescript/index.js +2 -0
  105. package/dist/extractors/typescript/index.js.map +1 -0
  106. package/dist/extractors/variants/TailwindVariantsParser.d.ts +16 -0
  107. package/dist/extractors/variants/TailwindVariantsParser.d.ts.map +1 -0
  108. package/dist/extractors/variants/TailwindVariantsParser.js +53 -0
  109. package/dist/extractors/variants/TailwindVariantsParser.js.map +1 -0
  110. package/dist/extractors/variants/VariantsExtractor.d.ts +45 -0
  111. package/dist/extractors/variants/VariantsExtractor.d.ts.map +1 -0
  112. package/dist/extractors/variants/VariantsExtractor.js +340 -0
  113. package/dist/extractors/variants/VariantsExtractor.js.map +1 -0
  114. package/dist/extractors/variants/index.d.ts +2 -0
  115. package/dist/extractors/variants/index.d.ts.map +1 -0
  116. package/dist/extractors/variants/index.js +2 -0
  117. package/dist/extractors/variants/index.js.map +1 -0
  118. package/dist/generators/api/APIFileGenerator.d.ts +32 -0
  119. package/dist/generators/api/APIFileGenerator.d.ts.map +1 -0
  120. package/dist/generators/api/APIFileGenerator.js +450 -0
  121. package/dist/generators/api/APIFileGenerator.js.map +1 -0
  122. package/dist/generators/api/TypeDefinitionGenerator.d.ts +1 -0
  123. package/dist/generators/api/TypeDefinitionGenerator.d.ts.map +1 -0
  124. package/dist/generators/api/TypeDefinitionGenerator.js +2 -0
  125. package/dist/generators/api/TypeDefinitionGenerator.js.map +1 -0
  126. package/dist/generators/api/index.d.ts +2 -0
  127. package/dist/generators/api/index.d.ts.map +1 -0
  128. package/dist/generators/api/index.js +2 -0
  129. package/dist/generators/api/index.js.map +1 -0
  130. package/dist/generators/index.d.ts +5 -0
  131. package/dist/generators/index.d.ts.map +1 -0
  132. package/dist/generators/index.js +4 -0
  133. package/dist/generators/index.js.map +1 -0
  134. package/dist/generators/llm/LLMDocumentationGenerator.d.ts +34 -0
  135. package/dist/generators/llm/LLMDocumentationGenerator.d.ts.map +1 -0
  136. package/dist/generators/llm/LLMDocumentationGenerator.js +480 -0
  137. package/dist/generators/llm/LLMDocumentationGenerator.js.map +1 -0
  138. package/dist/generators/llm/LLMFormatter.d.ts +4 -0
  139. package/dist/generators/llm/LLMFormatter.d.ts.map +1 -0
  140. package/dist/generators/llm/LLMFormatter.js +8 -0
  141. package/dist/generators/llm/LLMFormatter.js.map +1 -0
  142. package/dist/generators/llm/LlmsFullAssembler.d.ts +20 -0
  143. package/dist/generators/llm/LlmsFullAssembler.d.ts.map +1 -0
  144. package/dist/generators/llm/LlmsFullAssembler.js +63 -0
  145. package/dist/generators/llm/LlmsFullAssembler.js.map +1 -0
  146. package/dist/generators/llm/index.d.ts +1 -0
  147. package/dist/generators/llm/index.d.ts.map +1 -0
  148. package/dist/generators/llm/index.js +2 -0
  149. package/dist/generators/llm/index.js.map +1 -0
  150. package/dist/generators/mcp/MCPCatalogAssembler.d.ts +27 -0
  151. package/dist/generators/mcp/MCPCatalogAssembler.d.ts.map +1 -0
  152. package/dist/generators/mcp/MCPCatalogAssembler.js +147 -0
  153. package/dist/generators/mcp/MCPCatalogAssembler.js.map +1 -0
  154. package/dist/generators/mcp/MCPCatalogGenerator.d.ts +55 -0
  155. package/dist/generators/mcp/MCPCatalogGenerator.d.ts.map +1 -0
  156. package/dist/generators/mcp/MCPCatalogGenerator.js +153 -0
  157. package/dist/generators/mcp/MCPCatalogGenerator.js.map +1 -0
  158. package/dist/generators/svelte/PageGenerator.d.ts +82 -0
  159. package/dist/generators/svelte/PageGenerator.d.ts.map +1 -0
  160. package/dist/generators/svelte/PageGenerator.js +557 -0
  161. package/dist/generators/svelte/PageGenerator.js.map +1 -0
  162. package/dist/generators/svelte/PlaygroundPresets.d.ts +2 -0
  163. package/dist/generators/svelte/PlaygroundPresets.d.ts.map +1 -0
  164. package/dist/generators/svelte/PlaygroundPresets.js +4 -0
  165. package/dist/generators/svelte/PlaygroundPresets.js.map +1 -0
  166. package/dist/generators/svelte/SectionMerger.d.ts +38 -0
  167. package/dist/generators/svelte/SectionMerger.d.ts.map +1 -0
  168. package/dist/generators/svelte/SectionMerger.js +154 -0
  169. package/dist/generators/svelte/SectionMerger.js.map +1 -0
  170. package/dist/generators/svelte/TemplateEngine.d.ts +91 -0
  171. package/dist/generators/svelte/TemplateEngine.d.ts.map +1 -0
  172. package/dist/generators/svelte/TemplateEngine.js +500 -0
  173. package/dist/generators/svelte/TemplateEngine.js.map +1 -0
  174. package/dist/generators/svelte/index.d.ts +8 -0
  175. package/dist/generators/svelte/index.d.ts.map +1 -0
  176. package/dist/generators/svelte/index.js +11 -0
  177. package/dist/generators/svelte/index.js.map +1 -0
  178. package/dist/generators/svelte/renderers/ApiRenderer.d.ts +17 -0
  179. package/dist/generators/svelte/renderers/ApiRenderer.d.ts.map +1 -0
  180. package/dist/generators/svelte/renderers/ApiRenderer.js +44 -0
  181. package/dist/generators/svelte/renderers/ApiRenderer.js.map +1 -0
  182. package/dist/generators/svelte/renderers/ExampleRenderer.d.ts +33 -0
  183. package/dist/generators/svelte/renderers/ExampleRenderer.d.ts.map +1 -0
  184. package/dist/generators/svelte/renderers/ExampleRenderer.js +137 -0
  185. package/dist/generators/svelte/renderers/ExampleRenderer.js.map +1 -0
  186. package/dist/generators/svelte/renderers/OverviewRenderer.d.ts +9 -0
  187. package/dist/generators/svelte/renderers/OverviewRenderer.d.ts.map +1 -0
  188. package/dist/generators/svelte/renderers/OverviewRenderer.js +45 -0
  189. package/dist/generators/svelte/renderers/OverviewRenderer.js.map +1 -0
  190. package/dist/generators/svelte/renderers/PlaygroundRenderer.d.ts +35 -0
  191. package/dist/generators/svelte/renderers/PlaygroundRenderer.d.ts.map +1 -0
  192. package/dist/generators/svelte/renderers/PlaygroundRenderer.js +319 -0
  193. package/dist/generators/svelte/renderers/PlaygroundRenderer.js.map +1 -0
  194. package/dist/generators/svelte/renderers/TypesRenderer.d.ts +9 -0
  195. package/dist/generators/svelte/renderers/TypesRenderer.d.ts.map +1 -0
  196. package/dist/generators/svelte/renderers/TypesRenderer.js +23 -0
  197. package/dist/generators/svelte/renderers/TypesRenderer.js.map +1 -0
  198. package/dist/generators/svelte/renderers/UsageRenderer.d.ts +14 -0
  199. package/dist/generators/svelte/renderers/UsageRenderer.d.ts.map +1 -0
  200. package/dist/generators/svelte/renderers/UsageRenderer.js +91 -0
  201. package/dist/generators/svelte/renderers/UsageRenderer.js.map +1 -0
  202. package/dist/generators/svelte/renderers/VariantsRenderer.d.ts +43 -0
  203. package/dist/generators/svelte/renderers/VariantsRenderer.d.ts.map +1 -0
  204. package/dist/generators/svelte/renderers/VariantsRenderer.js +277 -0
  205. package/dist/generators/svelte/renderers/VariantsRenderer.js.map +1 -0
  206. package/dist/generators/svelte/renderers/index.d.ts +8 -0
  207. package/dist/generators/svelte/renderers/index.d.ts.map +1 -0
  208. package/dist/generators/svelte/renderers/index.js +8 -0
  209. package/dist/generators/svelte/renderers/index.js.map +1 -0
  210. package/dist/generators/svelte/types.d.ts +13 -0
  211. package/dist/generators/svelte/types.d.ts.map +1 -0
  212. package/dist/generators/svelte/types.js +2 -0
  213. package/dist/generators/svelte/types.js.map +1 -0
  214. package/dist/index.d.ts +5 -0
  215. package/dist/index.d.ts.map +1 -0
  216. package/dist/index.js +4 -0
  217. package/dist/index.js.map +1 -0
  218. package/dist/parsers/SvelteDocsParser.d.ts +44 -0
  219. package/dist/parsers/SvelteDocsParser.d.ts.map +1 -0
  220. package/dist/parsers/SvelteDocsParser.js +141 -0
  221. package/dist/parsers/SvelteDocsParser.js.map +1 -0
  222. package/dist/parsers/index.d.ts +2 -0
  223. package/dist/parsers/index.d.ts.map +1 -0
  224. package/dist/parsers/index.js +6 -0
  225. package/dist/parsers/index.js.map +1 -0
  226. package/dist/schema/ConfigurationBuilder.d.ts +55 -0
  227. package/dist/schema/ConfigurationBuilder.d.ts.map +1 -0
  228. package/dist/schema/ConfigurationBuilder.js +447 -0
  229. package/dist/schema/ConfigurationBuilder.js.map +1 -0
  230. package/dist/schema/index.d.ts +1 -0
  231. package/dist/schema/index.d.ts.map +1 -0
  232. package/dist/schema/index.js +2 -0
  233. package/dist/schema/index.js.map +1 -0
  234. package/dist/tsconfig.tsbuildinfo +1 -0
  235. package/dist/types/configuration.d.ts +255 -0
  236. package/dist/types/configuration.d.ts.map +1 -0
  237. package/dist/types/configuration.js +2 -0
  238. package/dist/types/configuration.js.map +1 -0
  239. package/dist/types/core.d.ts +96 -0
  240. package/dist/types/core.d.ts.map +1 -0
  241. package/dist/types/core.js +2 -0
  242. package/dist/types/core.js.map +1 -0
  243. package/dist/types/docs-config.d.ts +5 -0
  244. package/dist/types/docs-config.d.ts.map +1 -0
  245. package/dist/types/docs-config.js +51 -0
  246. package/dist/types/docs-config.js.map +1 -0
  247. package/dist/types/index.d.ts +6 -0
  248. package/dist/types/index.d.ts.map +1 -0
  249. package/dist/types/index.js +9 -0
  250. package/dist/types/index.js.map +1 -0
  251. package/dist/types/validation.d.ts +321 -0
  252. package/dist/types/validation.d.ts.map +1 -0
  253. package/dist/types/validation.js +2 -0
  254. package/dist/types/validation.js.map +1 -0
  255. package/dist/utils/DeploymentManager.d.ts +80 -0
  256. package/dist/utils/DeploymentManager.d.ts.map +1 -0
  257. package/dist/utils/DeploymentManager.js +360 -0
  258. package/dist/utils/DeploymentManager.js.map +1 -0
  259. package/dist/utils/index.d.ts +1 -0
  260. package/dist/utils/index.d.ts.map +1 -0
  261. package/dist/utils/index.js +2 -0
  262. package/dist/utils/index.js.map +1 -0
  263. package/package.json +74 -0
@@ -0,0 +1,421 @@
1
+ import * as fs from 'node:fs/promises';
2
+ import * as path from 'node:path';
3
+ import { glob } from 'glob';
4
+ import * as ts from 'typescript';
5
+ /**
6
+ * Finds and analyzes components in packages using glob patterns
7
+ */
8
+ export class ComponentFinder {
9
+ cache = new Map();
10
+ /**
11
+ * Find all components in a package
12
+ */
13
+ async findComponents(packageConfig) {
14
+ const cacheKey = `${packageConfig.name}:${packageConfig.path}`;
15
+ if (this.cache.has(cacheKey)) {
16
+ console.log(`📦 Using cached results for ${packageConfig.name}`);
17
+ return this.cache.get(cacheKey);
18
+ }
19
+ console.log(`🔍 Discovering components in ${packageConfig.name}`);
20
+ try {
21
+ const manifests = await this.discoverComponents(packageConfig);
22
+ this.cache.set(cacheKey, manifests);
23
+ console.log(`✅ Found ${manifests.length} components in ${packageConfig.name}`);
24
+ return manifests;
25
+ }
26
+ catch (error) {
27
+ console.error(`❌ Failed to discover components in ${packageConfig.name}:`, error);
28
+ throw new Error(`Component discovery failed for ${packageConfig.name}: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
29
+ }
30
+ }
31
+ /**
32
+ * Clear the cache (useful for watch mode)
33
+ */
34
+ clearCache() {
35
+ this.cache.clear();
36
+ }
37
+ /**
38
+ * Get package info from package.json
39
+ */
40
+ async getPackageInfo(packagePath) {
41
+ try {
42
+ const packageJsonPath = path.join(packagePath, 'package.json');
43
+ const content = await fs.readFile(packageJsonPath, 'utf-8');
44
+ const packageJson = JSON.parse(content);
45
+ return {
46
+ name: packageJson.name,
47
+ version: packageJson.version || '0.0.0',
48
+ description: packageJson.description,
49
+ homepage: packageJson.homepage,
50
+ repository: typeof packageJson.repository === 'string'
51
+ ? packageJson.repository
52
+ : packageJson.repository?.url
53
+ };
54
+ }
55
+ catch (_error) {
56
+ console.warn(`⚠️ Could not read package.json from ${packagePath}, using defaults`);
57
+ return {
58
+ name: path.basename(packagePath),
59
+ version: '0.0.0'
60
+ };
61
+ }
62
+ }
63
+ // ==========================================
64
+ // PRIVATE METHODS
65
+ // ==========================================
66
+ async discoverComponents(packageConfig) {
67
+ const manifests = [];
68
+ // Find component files using glob pattern
69
+ const componentFiles = await this.findComponentFiles(packageConfig);
70
+ if (componentFiles.length === 0) {
71
+ console.warn(`⚠️ No component files found in ${packageConfig.name} using pattern: ${packageConfig.glob.components}`);
72
+ return manifests;
73
+ }
74
+ console.log(`📁 Found ${componentFiles.length} component files`);
75
+ // Get package info once
76
+ const packageInfo = await this.getPackageInfo(packageConfig.path);
77
+ // Process each component file
78
+ for (const componentFile of componentFiles) {
79
+ try {
80
+ const manifest = await this.createComponentManifest(componentFile, packageConfig, packageInfo);
81
+ if (manifest) {
82
+ manifests.push(manifest);
83
+ console.log(` ✅ ${manifest.component.name}`);
84
+ // A multi-component index.ts can opt additional exports into the catalog via a
85
+ // `@standalone` JSDoc tag on their `<Name>Props` interface (e.g. the Guide surfaces).
86
+ // Each one becomes a full manifest pointing at the same index.ts — the extractors
87
+ // already work per (filePath, componentName) pair.
88
+ const standaloneNames = await this.findStandaloneComponentNames(componentFile, manifest.component.name);
89
+ for (const standaloneName of standaloneNames) {
90
+ const standaloneManifest = await this.createComponentManifest(componentFile, packageConfig, packageInfo, standaloneName);
91
+ if (standaloneManifest) {
92
+ manifests.push(standaloneManifest);
93
+ console.log(` ✅ ${standaloneName} (@standalone in ${manifest.component.name})`);
94
+ }
95
+ }
96
+ }
97
+ }
98
+ catch (error) {
99
+ console.warn(` ⚠️ Failed to process ${componentFile}:`, error instanceof Error ? error.message : String(error));
100
+ // Continue with other components
101
+ }
102
+ }
103
+ return manifests;
104
+ }
105
+ /**
106
+ * Find component exports in an index.ts that opt into their own catalog entry.
107
+ *
108
+ * An export qualifies when both hold:
109
+ * 1. it is re-exported from a Svelte file: `export { default as X } from './X.svelte'`
110
+ * 2. a local `interface XProps` carries the `@standalone` JSDoc tag
111
+ *
112
+ * The tag is the explicit opt-in that separates independent surfaces (Guide family) from
113
+ * compound subcomponents (TabItem, MenuItem, CalendarDay, …), which carry the same
114
+ * `@description`/`@tag` metadata but must NOT become standalone catalog entries.
115
+ */
116
+ async findStandaloneComponentNames(indexFilePath, primaryComponentName) {
117
+ let content;
118
+ try {
119
+ content = await fs.readFile(indexFilePath, 'utf-8');
120
+ }
121
+ catch {
122
+ return [];
123
+ }
124
+ // Cheap pre-filter before paying for an AST parse.
125
+ if (!content.includes('@standalone'))
126
+ return [];
127
+ const sourceFile = ts.createSourceFile(indexFilePath, content, ts.ScriptTarget.Latest,
128
+ /* setParentNodes */ true);
129
+ const svelteExports = [];
130
+ const standaloneProps = new Set();
131
+ for (const statement of sourceFile.statements) {
132
+ // `export { default as X } from './X.svelte'`
133
+ if (ts.isExportDeclaration(statement) &&
134
+ statement.exportClause &&
135
+ ts.isNamedExports(statement.exportClause) &&
136
+ statement.moduleSpecifier &&
137
+ ts.isStringLiteral(statement.moduleSpecifier) &&
138
+ statement.moduleSpecifier.text.endsWith('.svelte')) {
139
+ for (const element of statement.exportClause.elements) {
140
+ if (element.propertyName?.text === 'default') {
141
+ svelteExports.push(element.name.text);
142
+ }
143
+ }
144
+ }
145
+ // `interface XProps { … }` or `type XProps = …` (discriminated-union pattern,
146
+ // e.g. TabProps/BadgeProps) with an `@standalone` JSDoc tag
147
+ if ((ts.isInterfaceDeclaration(statement) || ts.isTypeAliasDeclaration(statement)) &&
148
+ statement.name.text.endsWith('Props')) {
149
+ const hasTag = ts.getJSDocTags(statement).some((tag) => tag.tagName.text === 'standalone');
150
+ if (hasTag) {
151
+ standaloneProps.add(statement.name.text.slice(0, -'Props'.length));
152
+ }
153
+ }
154
+ }
155
+ const names = [];
156
+ for (const exportName of svelteExports) {
157
+ if (exportName === primaryComponentName)
158
+ continue; // already the primary manifest
159
+ if (standaloneProps.has(exportName)) {
160
+ names.push(exportName);
161
+ standaloneProps.delete(exportName);
162
+ }
163
+ }
164
+ standaloneProps.delete(primaryComponentName);
165
+ for (const orphan of standaloneProps) {
166
+ console.warn(` ⚠️ @standalone on ${orphan}Props in ${indexFilePath} has no matching ` +
167
+ `\`export { default as ${orphan} } from './${orphan}.svelte'\` — entry skipped.`);
168
+ }
169
+ return names;
170
+ }
171
+ async findComponentFiles(packageConfig) {
172
+ const pattern = path.join(packageConfig.path, packageConfig.glob.components);
173
+ // Debug logging
174
+ console.log(`🔍 Searching for components:`);
175
+ console.log(` 📦 Package: ${packageConfig.name}`);
176
+ console.log(` 📂 Path: ${packageConfig.path}`);
177
+ console.log(` 🔍 Glob: ${packageConfig.glob.components}`);
178
+ console.log(` 📋 Pattern: ${pattern}`);
179
+ console.log(` 🏠 CWD: ${process.cwd()}`);
180
+ try {
181
+ const files = await glob(pattern, {
182
+ ignore: packageConfig.exclude || [],
183
+ absolute: true
184
+ });
185
+ console.log(` ✅ Found ${files.length} files`);
186
+ if (files.length === 0) {
187
+ console.log(` 🔍 Debug: Trying to resolve pattern...`);
188
+ const resolvedPattern = path.resolve(pattern);
189
+ console.log(` 📍 Resolved pattern: ${resolvedPattern}`);
190
+ }
191
+ // Filter by include patterns if specified
192
+ if (packageConfig.include?.length) {
193
+ return files.filter((file) => packageConfig.include.some((includePattern) => file.includes(includePattern)));
194
+ }
195
+ return files;
196
+ }
197
+ catch (error) {
198
+ throw new Error(`Glob pattern failed: ${pattern} - ${error instanceof Error ? error.message : String(error)}`, { cause: error });
199
+ }
200
+ }
201
+ async createComponentManifest(componentFilePath, packageConfig, packageInfo, nameOverride) {
202
+ // Extract component name from file path (or take the @standalone export's name —
203
+ // related-file discovery below still keys on the path-derived family name, so a
204
+ // surface shares its family's variants/docs files, e.g. Guide/guide.variants.ts).
205
+ const componentName = nameOverride ?? this.extractComponentName(componentFilePath);
206
+ if (!componentName) {
207
+ console.warn(`⚠️ Could not extract component name from ${componentFilePath}`);
208
+ return null;
209
+ }
210
+ // Verify the file exists and is readable
211
+ try {
212
+ await fs.access(componentFilePath);
213
+ }
214
+ catch (error) {
215
+ throw new Error(`Component file not accessible: ${componentFilePath}`, { cause: error });
216
+ }
217
+ // Create component info
218
+ const componentInfo = {
219
+ name: componentName,
220
+ packageName: packageConfig.name,
221
+ filePath: componentFilePath,
222
+ version: packageInfo.version,
223
+ description: `${componentName} component`, // TODO: Extract from JSDoc
224
+ props: [], // Will be populated by TypeScript extractor
225
+ variants: [], // Will be populated by variants extractor
226
+ inheritance: [], // Will be populated by inheritance extractor
227
+ stats: {
228
+ // Basic stats, will be enriched later
229
+ totalProps: 0,
230
+ directProps: 0,
231
+ variantProps: 0,
232
+ inheritedProps: 0
233
+ }
234
+ };
235
+ // Discover related files
236
+ const files = await this.discoverRelatedFiles(componentFilePath, packageConfig);
237
+ return {
238
+ component: componentInfo,
239
+ files,
240
+ packageInfo
241
+ };
242
+ }
243
+ extractComponentName(filePath) {
244
+ const basename = path.basename(filePath, path.extname(filePath));
245
+ // Handle index.ts files - use parent directory name
246
+ if (basename === 'index') {
247
+ const parentDir = path.basename(path.dirname(filePath));
248
+ // Skip group root aggregators like src/lib/components/index.ts or src/lib/primitives/index.ts
249
+ if (parentDir.toLowerCase() === 'components' || parentDir.toLowerCase() === 'primitives') {
250
+ return null;
251
+ }
252
+ // 🔧 FIX: Better PascalCase handling
253
+ if (parentDir.match(/^[A-Z]/)) {
254
+ // Already PascalCase: Button, Badge, etc.
255
+ return parentDir;
256
+ }
257
+ else {
258
+ // Convert to PascalCase: button -> Button
259
+ return parentDir.charAt(0).toUpperCase() + parentDir.slice(1);
260
+ }
261
+ }
262
+ // Handle direct component files
263
+ if (basename.match(/^[A-Z]/)) {
264
+ return basename;
265
+ }
266
+ // Handle kebab-case or snake_case
267
+ const pascalCase = basename
268
+ .split(/[-_]/)
269
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
270
+ .join('');
271
+ return pascalCase || null;
272
+ }
273
+ async discoverRelatedFiles(componentFilePath, packageConfig) {
274
+ const componentName = this.extractComponentName(componentFilePath);
275
+ const files = {
276
+ main: componentFilePath
277
+ };
278
+ // Look for variants file
279
+ if (packageConfig.glob.variants) {
280
+ const variantsFile = await this.findRelatedFile(packageConfig.path, // ← FIX: Use package path instead of component dir
281
+ packageConfig.glob.variants, componentName);
282
+ if (variantsFile) {
283
+ files.variants = variantsFile;
284
+ console.log(` 🎨 Found variants: ${path.relative(packageConfig.path, variantsFile)}`);
285
+ }
286
+ }
287
+ // Look for documentation file
288
+ if (packageConfig.glob.documentation) {
289
+ const docFile = await this.findRelatedFile(packageConfig.path, packageConfig.glob.documentation, componentName);
290
+ if (docFile) {
291
+ files.documentation = docFile;
292
+ console.log(` 📚 Found docs: ${path.relative(packageConfig.path, docFile)}`);
293
+ }
294
+ }
295
+ // Look for test files
296
+ if (packageConfig.glob.tests) {
297
+ const testFiles = await this.findRelatedFiles(packageConfig.path, packageConfig.glob.tests, componentName);
298
+ if (testFiles.length > 0) {
299
+ files.tests = testFiles;
300
+ console.log(` 🧪 Found tests: ${testFiles.length} files`);
301
+ }
302
+ }
303
+ return files;
304
+ }
305
+ async findRelatedFile(baseDir, globPattern, componentName) {
306
+ const files = await this.findRelatedFiles(baseDir, globPattern, componentName);
307
+ return files[0]; // Return first match
308
+ }
309
+ async findRelatedFiles(baseDir, globPattern, componentName) {
310
+ try {
311
+ // Replace {component} placeholder with actual component name
312
+ let pattern = globPattern;
313
+ if (componentName) {
314
+ pattern = pattern.replace(/\{component\}/g, componentName.toLowerCase());
315
+ }
316
+ // 🔧 FIX: Try multiple patterns for better coverage
317
+ const patterns = [
318
+ path.join(baseDir, pattern),
319
+ // Also try without ** if it exists (for direct files)
320
+ path.join(baseDir, pattern.replace('/**/', '/')),
321
+ // Try with PascalCase component name too
322
+ componentName
323
+ ? path.join(baseDir, globPattern.replace(/\{component\}/g, componentName))
324
+ : null
325
+ ].filter(Boolean);
326
+ console.log(` 🔍 Searching for related files with patterns:`, patterns.map((p) => path.relative(baseDir, p)));
327
+ let allFiles = [];
328
+ for (const patternToTry of patterns) {
329
+ try {
330
+ const files = await glob(patternToTry, { absolute: true });
331
+ allFiles.push(...files);
332
+ if (files.length > 0) {
333
+ console.log(` ✅ Pattern "${path.relative(baseDir, patternToTry)}" found:`, files.map((f) => path.relative(baseDir, f)));
334
+ }
335
+ }
336
+ catch (error) {
337
+ console.log(` ⚠️ Pattern "${path.relative(baseDir, patternToTry)}" failed:`, error);
338
+ }
339
+ }
340
+ // Remove duplicates
341
+ allFiles = [...new Set(allFiles)];
342
+ // Enhanced filtering logic
343
+ if (componentName && allFiles.length > 0) {
344
+ const componentDirName = componentName;
345
+ const componentFileNameLower = componentName.toLowerCase();
346
+ return allFiles.filter((file) => {
347
+ const relativePath = path.relative(baseDir, file);
348
+ const fileName = path.basename(file);
349
+ return (
350
+ // File is in component directory (PascalCase): src/lib/primitives/Button/...
351
+ relativePath.includes(`/${componentDirName}/`) ||
352
+ // File is in component directory (lowercase): src/lib/primitives/button/...
353
+ relativePath.includes(`/${componentFileNameLower}/`) ||
354
+ // File matches component name pattern: button.variants.ts
355
+ fileName.startsWith(`${componentFileNameLower}.`) ||
356
+ // File matches component name pattern: Button.variants.ts
357
+ fileName.startsWith(`${componentDirName}.`) ||
358
+ // Special case for common docs files: docs.svelte, docs.md, etc.
359
+ fileName.startsWith('docs.'));
360
+ });
361
+ }
362
+ return allFiles;
363
+ }
364
+ catch (error) {
365
+ console.warn(` ⚠️ Failed to find related files with pattern ${globPattern}:`, error);
366
+ return [];
367
+ }
368
+ }
369
+ /**
370
+ * Validate that a component manifest is complete and valid
371
+ */
372
+ async validateManifest(manifest) {
373
+ const errors = [];
374
+ const warnings = [];
375
+ // Validate main component file exists
376
+ try {
377
+ await fs.access(manifest.files.main);
378
+ }
379
+ catch {
380
+ errors.push({
381
+ type: 'missing_file',
382
+ message: `Main component file does not exist: ${manifest.files.main}`,
383
+ location: { file: manifest.files.main, line: 0, column: 0 }
384
+ });
385
+ }
386
+ // Validate component name
387
+ if (!manifest.component.name.match(/^[A-Z][a-zA-Z0-9]*$/)) {
388
+ warnings.push({
389
+ type: 'naming_convention',
390
+ message: `Component name should be PascalCase: ${manifest.component.name}`,
391
+ suggestion: 'Use PascalCase naming convention for components'
392
+ });
393
+ }
394
+ // Check if variants file exists
395
+ if (manifest.files.variants) {
396
+ try {
397
+ await fs.access(manifest.files.variants);
398
+ }
399
+ catch {
400
+ warnings.push({
401
+ type: 'missing_variants',
402
+ message: `Variants file claimed but not found: ${manifest.files.variants}`,
403
+ suggestion: 'Remove variants glob pattern or create the variants file'
404
+ });
405
+ }
406
+ }
407
+ return {
408
+ success: errors.length === 0,
409
+ data: manifest,
410
+ errors,
411
+ warnings,
412
+ metadata: {
413
+ duration: 0,
414
+ extractorVersion: '2.0.0',
415
+ sourceFile: manifest.files.main,
416
+ timestamp: new Date().toISOString()
417
+ }
418
+ };
419
+ }
420
+ }
421
+ //# sourceMappingURL=ComponentFinder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComponentFinder.js","sourceRoot":"","sources":["../../../src/core/discovery/ComponentFinder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export declare class FileStructureAnalyzer {
2
+ /**
3
+ * Analyze the file structure of a component directory
4
+ */
5
+ analyzeStructure(componentPath: string): Promise<{
6
+ hasIndex: boolean;
7
+ hasComponent: boolean;
8
+ hasVariants: boolean;
9
+ hasDocs: boolean;
10
+ hasTests: boolean;
11
+ structure: 'flat' | 'nested' | 'mixed';
12
+ }>;
13
+ private determineStructure;
14
+ }
15
+ //# sourceMappingURL=FileStructureAnalyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileStructureAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/core/discovery/FileStructureAnalyzer.ts"],"names":[],"mappings":"AAGA,qBAAa,qBAAqB;IACjC;;OAEG;IACG,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC;QACtD,QAAQ,EAAE,OAAO,CAAC;QAClB,YAAY,EAAE,OAAO,CAAC;QACtB,WAAW,EAAE,OAAO,CAAC;QACrB,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,OAAO,CAAC;QAClB,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;KACvC,CAAC;IAqBF,OAAO,CAAC,kBAAkB;CAQ1B"}
@@ -0,0 +1,35 @@
1
+ import * as path from 'path';
2
+ import * as fs from 'fs/promises';
3
+ export class FileStructureAnalyzer {
4
+ /**
5
+ * Analyze the file structure of a component directory
6
+ */
7
+ async analyzeStructure(componentPath) {
8
+ const dir = path.dirname(componentPath);
9
+ try {
10
+ const files = await fs.readdir(dir);
11
+ const analysis = {
12
+ hasIndex: files.includes('index.ts') || files.includes('index.js'),
13
+ hasComponent: files.some((f) => f.endsWith('.svelte') || f.endsWith('.tsx')),
14
+ hasVariants: files.some((f) => f.includes('variants')),
15
+ hasDocs: files.some((f) => f.includes('docs') || f.includes('documentation')),
16
+ hasTests: files.some((f) => f.includes('test') || f.includes('spec')),
17
+ structure: this.determineStructure(files)
18
+ };
19
+ return analysis;
20
+ }
21
+ catch (error) {
22
+ throw new Error(`Failed to analyze directory structure: ${dir}`);
23
+ }
24
+ }
25
+ determineStructure(files) {
26
+ const hasSubdirectories = files.some((f) => !f.includes('.'));
27
+ const hasFiles = files.some((f) => f.includes('.'));
28
+ if (hasSubdirectories && hasFiles)
29
+ return 'mixed';
30
+ if (hasSubdirectories)
31
+ return 'nested';
32
+ return 'flat';
33
+ }
34
+ }
35
+ //# sourceMappingURL=FileStructureAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileStructureAnalyzer.js","sourceRoot":"","sources":["../../../src/core/discovery/FileStructureAnalyzer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAElC,MAAM,OAAO,qBAAqB;IACjC;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,aAAqB;QAQ3C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAExC,IAAI,CAAC;YACJ,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEpC,MAAM,QAAQ,GAAG;gBAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAClE,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC5E,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACtD,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;gBAC7E,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACrE,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;aACzC,CAAC;YAEF,OAAO,QAAQ,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,0CAA0C,GAAG,EAAE,CAAC,CAAC;QAClE,CAAC;IACF,CAAC;IAEO,kBAAkB,CAAC,KAAe;QACzC,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAEpD,IAAI,iBAAiB,IAAI,QAAQ;YAAE,OAAO,OAAO,CAAC;QAClD,IAAI,iBAAiB;YAAE,OAAO,QAAQ,CAAC;QACvC,OAAO,MAAM,CAAC;IACf,CAAC;CACD"}
@@ -0,0 +1,15 @@
1
+ export declare class MetadataExtractor {
2
+ /**
3
+ * Extract basic metadata from component file without full TypeScript parsing
4
+ */
5
+ extractBasicMetadata(filePath: string): Promise<{
6
+ hasInterface: boolean;
7
+ hasExports: boolean;
8
+ linesOfCode: number;
9
+ imports: string[];
10
+ exports: string[];
11
+ }>;
12
+ private extractImports;
13
+ private extractExports;
14
+ }
15
+ //# sourceMappingURL=MetadataExtractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetadataExtractor.d.ts","sourceRoot":"","sources":["../../../src/core/discovery/MetadataExtractor.ts"],"names":[],"mappings":"AAEA,qBAAa,iBAAiB;IAC7B;;OAEG;IACG,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QACrD,YAAY,EAAE,OAAO,CAAC;QACtB,UAAU,EAAE,OAAO,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,OAAO,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IAsBF,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,cAAc;CAatB"}
@@ -0,0 +1,47 @@
1
+ import { readFile } from 'fs/promises';
2
+ export class MetadataExtractor {
3
+ /**
4
+ * Extract basic metadata from component file without full TypeScript parsing
5
+ */
6
+ async extractBasicMetadata(filePath) {
7
+ try {
8
+ const content = await readFile(filePath, 'utf-8');
9
+ const lines = content.split('\n');
10
+ const metadata = {
11
+ hasInterface: /interface\s+\w+Props/.test(content),
12
+ hasExports: /export\s+(interface|type|const|function|class)/.test(content),
13
+ linesOfCode: lines.filter((line) => line.trim() && !line.trim().startsWith('//'))
14
+ .length,
15
+ imports: this.extractImports(content),
16
+ exports: this.extractExports(content)
17
+ };
18
+ return metadata;
19
+ }
20
+ catch (error) {
21
+ throw new Error(`Failed to extract metadata from ${filePath}: ${error instanceof Error ? error.message : String(error)}`);
22
+ }
23
+ }
24
+ extractImports(content) {
25
+ const importRegex = /import\s+.*?\s+from\s+['"`]([^'"`]+)['"`]/g;
26
+ const imports = [];
27
+ let match;
28
+ while ((match = importRegex.exec(content)) !== null) {
29
+ if (match[1]) {
30
+ imports.push(match[1]);
31
+ }
32
+ }
33
+ return imports;
34
+ }
35
+ extractExports(content) {
36
+ const exportRegex = /export\s+(?:interface|type|const|function|class)\s+(\w+)/g;
37
+ const exports = [];
38
+ let match;
39
+ while ((match = exportRegex.exec(content)) !== null) {
40
+ if (match[1]) {
41
+ exports.push(match[1]);
42
+ }
43
+ }
44
+ return exports;
45
+ }
46
+ }
47
+ //# sourceMappingURL=MetadataExtractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetadataExtractor.js","sourceRoot":"","sources":["../../../src/core/discovery/MetadataExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,OAAO,iBAAiB;IAC7B;;OAEG;IACH,KAAK,CAAC,oBAAoB,CAAC,QAAgB;QAO1C,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAClD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAElC,MAAM,QAAQ,GAAG;gBAChB,YAAY,EAAE,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC;gBAClD,UAAU,EAAE,gDAAgD,CAAC,IAAI,CAAC,OAAO,CAAC;gBAC1E,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;qBACvF,MAAM;gBACR,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;gBACrC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;aACrC,CAAC;YAEF,OAAO,QAAQ,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CACd,mCAAmC,QAAQ,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACxG,CAAC;QACH,CAAC;IACF,CAAC;IAEO,cAAc,CAAC,OAAe;QACrC,MAAM,WAAW,GAAG,4CAA4C,CAAC;QACjE,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,KAA6B,CAAC;QAElC,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACrD,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACxB,CAAC;QACF,CAAC;QAED,OAAO,OAAO,CAAC;IAChB,CAAC;IAEO,cAAc,CAAC,OAAe;QACrC,MAAM,WAAW,GAAG,2DAA2D,CAAC;QAChF,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,KAA6B,CAAC;QAElC,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACrD,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACxB,CAAC;QACF,CAAC;QAED,OAAO,OAAO,CAAC;IAChB,CAAC;CACD"}
@@ -0,0 +1,2 @@
1
+ export { ComponentFinder } from './ComponentFinder';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/discovery/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { ComponentFinder } from './ComponentFinder';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/discovery/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}