@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,480 @@
1
+ import * as fs from 'node:fs/promises';
2
+ import * as path from 'node:path';
3
+ import { SvelteDocsParser } from '../../parsers/SvelteDocsParser';
4
+ /**
5
+ * Minimal LLM documentation generator
6
+ * - Focuses on API quick reference; optionally includes variants and examples
7
+ * - Respects SvelteDocsConfig.llm (include, priority, excludeTypes, maxSections)
8
+ * - Supports file or directory output depending on config.llm.outputPath
9
+ */
10
+ export class LLMDocumentationGenerator {
11
+ config;
12
+ docsParser = new SvelteDocsParser();
13
+ constructor(config) {
14
+ this.config = config;
15
+ }
16
+ async generate(enrichedComponents, apiData) {
17
+ const outputPath = this.config.outputPath;
18
+ const ext = path.extname(outputPath).toLowerCase();
19
+ // Determine if we write a single file or a directory with per-component files
20
+ const writeAsDirectory = ext === '';
21
+ if (writeAsDirectory) {
22
+ // Clean previous output to prevent stale files from accumulating
23
+ // (e.g. moved components, renamed groups, phantom barrel-export entries)
24
+ try {
25
+ await fs.rm(outputPath, { recursive: true, force: true });
26
+ }
27
+ catch {
28
+ /* ignore */
29
+ }
30
+ await fs.mkdir(outputPath, { recursive: true });
31
+ const writtenFiles = [];
32
+ for (const component of enrichedComponents) {
33
+ const componentApi = apiData.components[component.name];
34
+ if (!componentApi)
35
+ continue;
36
+ const docsConfig = await this.loadDocsConfig(component);
37
+ if (docsConfig.llm?.include === false)
38
+ continue;
39
+ const content = await this.generateComponentContent(component, componentApi, docsConfig);
40
+ // Write to mirrored route structure with fixed file name "llm.txt"
41
+ const group = componentApi.group;
42
+ const slug = this.toSlug(component.name);
43
+ const dir = group ? path.join(outputPath, group, slug) : path.join(outputPath, slug);
44
+ await fs.mkdir(dir, { recursive: true });
45
+ const filePath = path.join(dir, 'llm.txt');
46
+ await fs.writeFile(filePath, content, 'utf-8');
47
+ writtenFiles.push(filePath);
48
+ }
49
+ // Write a per-scope llms.txt manifest for convenience (llms.txt proposal)
50
+ const indexContent = this.generateLlmsTxt(enrichedComponents, outputPath);
51
+ const indexPath = path.join(outputPath, 'llms.txt');
52
+ await fs.writeFile(indexPath, indexContent, 'utf-8');
53
+ writtenFiles.push(indexPath);
54
+ // Also maintain a global aggregator at the static root (one level up)
55
+ try {
56
+ const staticRoot = path.resolve(outputPath, '..');
57
+ const globalIndex = this.generateGlobalLlmsTxt(staticRoot);
58
+ const globalIndexPath = path.join(staticRoot, 'llms.txt');
59
+ await fs.writeFile(globalIndexPath, globalIndex, 'utf-8');
60
+ writtenFiles.push(globalIndexPath);
61
+ }
62
+ catch {
63
+ /* ignore */
64
+ }
65
+ const totalSize = await this.calculateTotalSize(writtenFiles);
66
+ return {
67
+ type: 'llm',
68
+ path: outputPath,
69
+ size: totalSize,
70
+ components: enrichedComponents.map((c) => c.name)
71
+ };
72
+ }
73
+ // Single-file output (markdown|text|json) for backward compatibility
74
+ const format = this.config.format || 'markdown';
75
+ const content = await this.generateSingleFileContent(enrichedComponents, apiData, format);
76
+ await fs.mkdir(path.dirname(outputPath), { recursive: true });
77
+ await fs.writeFile(outputPath, content, 'utf-8');
78
+ const stats = await fs.stat(outputPath);
79
+ return {
80
+ type: 'llm',
81
+ path: outputPath,
82
+ size: stats.size,
83
+ components: enrichedComponents.map((c) => c.name)
84
+ };
85
+ }
86
+ // ==========================================
87
+ // CONTENT GENERATION
88
+ // ==========================================
89
+ async generateSingleFileContent(components, apiData, format) {
90
+ if (format === 'json') {
91
+ const payload = await Promise.all(components.map(async (c) => {
92
+ const cfg = await this.loadDocsConfig(c);
93
+ const compApi = apiData.components[c.name];
94
+ return this.buildComponentJson(c, compApi, cfg);
95
+ }));
96
+ return JSON.stringify({ generated: new Date().toISOString(), components: payload }, null, 2);
97
+ }
98
+ const blocks = [];
99
+ blocks.push(`# Urbicon UI - LLM Documentation\n`);
100
+ blocks.push(`Generated: ${new Date().toISOString()}\n`);
101
+ blocks.push(this.renderContextHeader());
102
+ blocks.push('');
103
+ for (const component of components) {
104
+ const compApi = apiData.components[component.name];
105
+ if (!compApi)
106
+ continue;
107
+ const docsConfig = await this.loadDocsConfig(component);
108
+ if (docsConfig.llm?.include === false)
109
+ continue;
110
+ const md = await this.generateComponentContent(component, compApi, docsConfig);
111
+ blocks.push(md);
112
+ blocks.push('');
113
+ }
114
+ blocks.push(this.renderPatternsSection());
115
+ const markdown = blocks.join('\n');
116
+ if (format === 'text') {
117
+ return markdown.replace(/^#\s+/gm, '').replace(/^##\s+/gm, '');
118
+ }
119
+ return markdown;
120
+ }
121
+ async generateComponentContent(component, componentApiData, docsConfig) {
122
+ const title = docsConfig.meta?.title || component.name;
123
+ const description = docsConfig.meta?.description || component.description || '';
124
+ const sections = [];
125
+ // Candidate sections
126
+ const overviewAllowed = this.shouldIncludeInLLM('overview', 'overview', docsConfig);
127
+ if (overviewAllowed) {
128
+ sections.push({
129
+ id: 'overview',
130
+ type: 'overview',
131
+ content: this.renderOverviewMarkdown(title, description)
132
+ });
133
+ }
134
+ const apiAllowed = this.shouldIncludeInLLM('api', 'api', docsConfig);
135
+ if (apiAllowed) {
136
+ sections.push({ id: 'api', type: 'api', content: this.renderApiMarkdown(componentApiData) });
137
+ }
138
+ const variantsAllowed = componentApiData.variants.length > 0 &&
139
+ this.shouldIncludeInLLM('variants', 'variants', docsConfig);
140
+ if (variantsAllowed) {
141
+ sections.push({
142
+ id: 'variants',
143
+ type: 'variants',
144
+ content: this.renderVariantsMarkdown(componentApiData)
145
+ });
146
+ }
147
+ const examplesAllowed = componentApiData.examples.length > 0 &&
148
+ this.shouldIncludeInLLM('examples', 'examples', docsConfig);
149
+ if (examplesAllowed) {
150
+ sections.push({
151
+ id: 'examples',
152
+ type: 'examples',
153
+ content: this.renderExamplesMarkdown(componentApiData)
154
+ });
155
+ }
156
+ // Order and limit by priority
157
+ const ordered = this.orderAndLimitSections(sections, docsConfig);
158
+ const lines = [];
159
+ lines.push(`\n---\n`);
160
+ lines.push(`## ${title}`);
161
+ if (description)
162
+ lines.push(`${description}`);
163
+ lines.push('');
164
+ lines.push(`**Import:** \`import { ${component.name} } from '${component.packageName}';\``);
165
+ lines.push('');
166
+ for (const sec of ordered) {
167
+ if (sec.id === 'overview')
168
+ continue;
169
+ lines.push(`### ${this.capitalize(sec.id)}`);
170
+ lines.push(sec.content);
171
+ lines.push('');
172
+ }
173
+ // Add slot classes info if available from variants
174
+ const slotInfo = this.extractSlotInfo(componentApiData);
175
+ if (slotInfo) {
176
+ lines.push('### Slots (slotClasses keys)');
177
+ lines.push(slotInfo);
178
+ lines.push('');
179
+ }
180
+ return lines.join('\n');
181
+ }
182
+ // ==========================================
183
+ // RENDER HELPERS
184
+ // ==========================================
185
+ renderOverviewMarkdown(title, description) {
186
+ const parts = [];
187
+ parts.push(`**Component**: ${title}`);
188
+ if (description)
189
+ parts.push(description);
190
+ return parts.join('\n\n');
191
+ }
192
+ renderApiMarkdown(componentApiData) {
193
+ const lines = [];
194
+ lines.push('| Prop | Type | Required | Default | Description |');
195
+ lines.push('| --- | --- | :---: | --- | --- |');
196
+ for (const prop of componentApiData.props) {
197
+ const required = prop.required ? 'yes' : 'no';
198
+ const def = prop.defaultValue ?? '';
199
+ const desc = (prop.description || '').replace(/\n/g, ' ').trim();
200
+ lines.push(`| ${prop.name} | \`${prop.type}\` | ${required} | ${def} | ${desc} |`);
201
+ }
202
+ // Inheritance summary
203
+ if (componentApiData.inheritance.length > 0) {
204
+ lines.push('');
205
+ lines.push('Inherited from:');
206
+ for (const inh of componentApiData.inheritance) {
207
+ lines.push(`- ${inh.typeName}${inh.source ? ` (${inh.source})` : ''}`);
208
+ }
209
+ }
210
+ return lines.join('\n');
211
+ }
212
+ renderVariantsMarkdown(componentApiData) {
213
+ const lines = [];
214
+ for (const variant of componentApiData.variants) {
215
+ const values = variant.values.join(', ');
216
+ const def = variant.defaultValue ? ` (default: ${variant.defaultValue})` : '';
217
+ lines.push(`- ${variant.name}: ${values}${def}`);
218
+ }
219
+ return lines.join('\n');
220
+ }
221
+ renderExamplesMarkdown(componentApiData) {
222
+ // Normalize examples and strip accidental nested fences (e.g., if example already contains ```svelte)
223
+ const blocks = (componentApiData.examples || []).map((raw) => {
224
+ const code = (raw || '').trim();
225
+ // If snippet already starts with a fence, return as-is to avoid nesting
226
+ if (/^```/.test(code))
227
+ return code;
228
+ // Also strip any leading ```svelte/``` markers inside the snippet to avoid double markers
229
+ const inner = code.replace(/^```\w*\n([\s\S]*?)```\s*$/m, '$1').trim();
230
+ return ['```svelte', inner, '```'].join('\n');
231
+ });
232
+ return blocks.join('\n\n');
233
+ }
234
+ // ==========================================
235
+ // UTILITIES
236
+ // ==========================================
237
+ async loadDocsConfig(component) {
238
+ const docsFilePath = await this.resolveDocsFilePath(component);
239
+ const result = await this.docsParser.parseDocsFile(component.name, docsFilePath || undefined);
240
+ return result.docsConfig;
241
+ }
242
+ async resolveDocsFilePath(component) {
243
+ try {
244
+ const baseDir = path.dirname(component.filePath ?? component.filePath);
245
+ const candidateA = path.join(baseDir, 'docs.svelte');
246
+ try {
247
+ await fs.access(candidateA);
248
+ return candidateA;
249
+ }
250
+ catch {
251
+ /* not found */
252
+ }
253
+ const candidateB = path.join(baseDir, 'docs', 'docs.svelte');
254
+ try {
255
+ await fs.access(candidateB);
256
+ return candidateB;
257
+ }
258
+ catch {
259
+ /* not found */
260
+ }
261
+ return null;
262
+ }
263
+ catch {
264
+ return null;
265
+ }
266
+ }
267
+ shouldIncludeInLLM(sectionId, sectionType, docsConfig) {
268
+ if (docsConfig.llm?.include === false)
269
+ return false;
270
+ if (docsConfig.llm?.excludeTypes?.includes(sectionType))
271
+ return false;
272
+ if (docsConfig.llm?.priority && docsConfig.llm.priority.length > 0) {
273
+ return docsConfig.llm.priority.includes(sectionId);
274
+ }
275
+ const defaultExclude = ['playground'];
276
+ return !defaultExclude.includes(sectionType);
277
+ }
278
+ orderAndLimitSections(sections, docsConfig) {
279
+ const priority = docsConfig.llm?.priority || ['overview', 'api', 'variants', 'examples'];
280
+ const max = docsConfig.llm?.maxSections ?? sections.length;
281
+ const byId = new Map(sections.map((s) => [s.id, s]));
282
+ const ordered = [];
283
+ for (const id of priority) {
284
+ const s = byId.get(id);
285
+ if (s)
286
+ ordered.push(s);
287
+ }
288
+ // Append remaining in original order
289
+ for (const s of sections) {
290
+ if (!ordered.find((o) => o.id === s.id))
291
+ ordered.push(s);
292
+ }
293
+ return ordered.slice(0, max);
294
+ }
295
+ async calculateTotalSize(filePaths) {
296
+ let total = 0;
297
+ for (const fp of filePaths) {
298
+ try {
299
+ const st = await fs.stat(fp);
300
+ total += st.size;
301
+ }
302
+ catch {
303
+ // ignore
304
+ }
305
+ }
306
+ return total;
307
+ }
308
+ generateLlmsTxt(components, _scopeDir) {
309
+ const lines = [];
310
+ // H1 title as per llms.txt informal spec
311
+ lines.push('# Urbicon UI');
312
+ lines.push('');
313
+ lines.push('> LLM-friendly documentation files for components.');
314
+ lines.push('');
315
+ lines.push('## Components');
316
+ for (const c of components) {
317
+ // We do not have direct access to group here from enriched component; skip grouping in index
318
+ const slug = this.toSlug(c.name);
319
+ lines.push(`- [${c.name}](./${slug}/llm.txt): Component LLM context`);
320
+ }
321
+ return lines.join('\n');
322
+ }
323
+ generateGlobalLlmsTxt(_staticRoot) {
324
+ const lines = [];
325
+ lines.push('# Urbicon UI');
326
+ lines.push('');
327
+ lines.push('> Global LLM resources index.');
328
+ lines.push('');
329
+ lines.push('- [Full API Reference](./llms-full.txt): Complete component props, variants, tokens, and patterns');
330
+ lines.push('');
331
+ lines.push('## Scopes');
332
+ const scopes = [
333
+ { name: 'Blocks', path: 'blocks/llms.txt' },
334
+ { name: 'Docs', path: 'docs/llms.txt' },
335
+ { name: 'Table', path: 'table/llms.txt' },
336
+ { name: 'Auth', path: 'auth/llms.txt' }
337
+ ];
338
+ for (const s of scopes) {
339
+ lines.push(`- [${s.name}](./${s.path}): Scope index`);
340
+ }
341
+ return lines.join('\n');
342
+ }
343
+ buildComponentJson(component, componentApiData, docsConfig) {
344
+ return {
345
+ name: component.name,
346
+ title: docsConfig.meta?.title || component.name,
347
+ description: docsConfig.meta?.description || component.description || '',
348
+ api: {
349
+ props: componentApiData?.props ?? [],
350
+ inheritance: componentApiData?.inheritance ?? [],
351
+ variants: componentApiData?.variants ?? []
352
+ },
353
+ examples: componentApiData?.examples ?? []
354
+ };
355
+ }
356
+ renderContextHeader() {
357
+ return [
358
+ '## Context for LLM Code Generation',
359
+ '',
360
+ 'Urbicon UI is a Svelte 5 + Tailwind CSS 4 component library.',
361
+ 'All components import from `@urbicon-ui/blocks`.',
362
+ 'Components use Svelte 5 runes ($props, $state, $derived) and Snippets (not slots).',
363
+ '',
364
+ '**Shared props:** intent, variant, size, unstyled, slotClasses, mint, class, disabled.',
365
+ '',
366
+ '**Design tokens (use instead of hardcoded values):**',
367
+ '- Surfaces: `bg-surface-base`, `bg-surface-elevated`, `bg-surface-overlay`',
368
+ '- Text: `text-text-primary`, `text-text-secondary`, `text-text-tertiary`',
369
+ '- Borders: `border-border-subtle`, `border-border-default`',
370
+ '- Shadows: `shadow-[var(--blocks-shadow-sm)]` through `shadow-[var(--blocks-shadow-lg)]`',
371
+ '- Z-index: `z-[var(--z-modal)]`, `z-[var(--z-popover)]`, `z-[var(--z-tooltip)]`',
372
+ '',
373
+ '**NEVER use:** `dark:` prefixed classes, hardcoded colors, `focus:` (use `focus-visible:`).',
374
+ ''
375
+ ].join('\n');
376
+ }
377
+ renderPatternsSection() {
378
+ return [
379
+ '---',
380
+ '',
381
+ '## Common Combination Patterns',
382
+ '',
383
+ '### Form with validation',
384
+ '```svelte',
385
+ '<script>',
386
+ " import { Input, Checkbox, Button } from '@urbicon-ui/blocks';",
387
+ '</script>',
388
+ '',
389
+ '<form onsubmit={handleSubmit}>',
390
+ ' <Input label="Email" type="email" bind:value={email} error={errors.email} required />',
391
+ ' <Input label="Password" type="password" bind:value={password} error={errors.password} required />',
392
+ ' <Checkbox label="Remember me" bind:checked={remember} />',
393
+ ' <Button intent="primary" type="submit" loading={submitting}>Sign In</Button>',
394
+ '</form>',
395
+ '```',
396
+ '',
397
+ '### Confirmation dialog',
398
+ '```svelte',
399
+ '<Dialog bind:open={showConfirm} title="Delete Item?" intent="danger" size="sm">',
400
+ ' <p>This action cannot be undone.</p>',
401
+ ' {#snippet footer()}',
402
+ ' <Button variant="ghost" onclick={() => showConfirm = false}>Cancel</Button>',
403
+ ' <Button intent="danger" onclick={handleDelete}>Delete</Button>',
404
+ ' {/snippet}',
405
+ '</Dialog>',
406
+ '```',
407
+ '',
408
+ '### Card with header and badge',
409
+ '```svelte',
410
+ '<Card variant="outlined" padding="lg">',
411
+ ' {#snippet header()}',
412
+ ' <div class="flex items-center justify-between">',
413
+ ' <h3 class="text-text-primary font-semibold">Revenue</h3>',
414
+ ' <Badge intent="success" variant="soft">+12%</Badge>',
415
+ ' </div>',
416
+ ' {/snippet}',
417
+ ' <p class="text-3xl font-bold text-text-primary">$48,200</p>',
418
+ '</Card>',
419
+ '```',
420
+ '',
421
+ '### Menu with custom items (action pattern)',
422
+ '```svelte',
423
+ '<Menu items={actions} getItemLabel={(a) => a.label} getItemValue={(a) => a.id}>',
424
+ ' {#snippet customItem(action, activate)}',
425
+ ' <button type="button" onclick={activate} class="flex items-center gap-2 p-2">',
426
+ ' <Icon name={action.icon} />',
427
+ ' <span>{action.label}</span>',
428
+ ' </button>',
429
+ ' {/snippet}',
430
+ '</Menu>',
431
+ '```',
432
+ ''
433
+ ].join('\n');
434
+ }
435
+ extractSlotInfo(componentApiData) {
436
+ const variants = componentApiData.variants || [];
437
+ const slotNames = new Set();
438
+ for (const v of variants) {
439
+ if (v.name === 'slot' || v.name === 'slots') {
440
+ for (const val of v.values)
441
+ slotNames.add(val);
442
+ }
443
+ }
444
+ // Also extract from props that mention slot
445
+ for (const prop of componentApiData.props) {
446
+ if (prop.name === 'slotClasses' && prop.type) {
447
+ const match = prop.type.match(/Record<['"]([\w\s|']+)['"],/);
448
+ if (match?.[1]) {
449
+ const keys = match[1]
450
+ .split(/[|']/)
451
+ .filter(Boolean)
452
+ .map((s) => s.trim());
453
+ keys.forEach((k) => {
454
+ slotNames.add(k);
455
+ });
456
+ }
457
+ }
458
+ }
459
+ if (slotNames.size === 0)
460
+ return null;
461
+ // Filter out empty slot names that can occur from regex extraction
462
+ const validSlots = Array.from(slotNames).filter((s) => s.trim() !== '');
463
+ if (validSlots.length === 0)
464
+ return null;
465
+ return validSlots.map((s) => `\`${s}\``).join(', ');
466
+ }
467
+ capitalize(input) {
468
+ if (!input)
469
+ return input;
470
+ return input.charAt(0).toUpperCase() + input.slice(1);
471
+ }
472
+ toSlug(input) {
473
+ return input
474
+ .replace(/([a-z0-9])([A-Z])/g, '$1-$2')
475
+ .replace(/_/g, '-')
476
+ .replace(/\s+/g, '-')
477
+ .toLowerCase();
478
+ }
479
+ }
480
+ //# sourceMappingURL=LLMDocumentationGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LLMDocumentationGenerator.js","sourceRoot":"","sources":["../../../src/generators/llm/LLMDocumentationGenerator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare class LLMFormatter {
2
+ static toText(markdown: string): string;
3
+ }
4
+ //# sourceMappingURL=LLMFormatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LLMFormatter.d.ts","sourceRoot":"","sources":["../../../src/generators/llm/LLMFormatter.ts"],"names":[],"mappings":"AAEA,qBAAa,YAAY;IACvB,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CAGxC"}
@@ -0,0 +1,8 @@
1
+ // Placeholder for future advanced formatting/simplification.
2
+ // Currently, formatting happens directly inside LLMDocumentationGenerator.
3
+ export class LLMFormatter {
4
+ static toText(markdown) {
5
+ return markdown.replace(/^#\s+/gm, '').replace(/^##\s+/gm, '');
6
+ }
7
+ }
8
+ //# sourceMappingURL=LLMFormatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LLMFormatter.js","sourceRoot":"","sources":["../../../src/generators/llm/LLMFormatter.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,2EAA2E;AAC3E,MAAM,OAAO,YAAY;IACvB,MAAM,CAAC,MAAM,CAAC,QAAgB;QAC5B,OAAO,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACjE,CAAC;CACF"}
@@ -0,0 +1,20 @@
1
+ export interface LlmsFullAssemblerConfig {
2
+ templatePath: string;
3
+ staticDirs: string[];
4
+ outputPaths: string[];
5
+ }
6
+ /**
7
+ * Assembles the llms-full.txt by combining a hand-curated template
8
+ * with auto-generated per-component LLM docs from the static output directories.
9
+ */
10
+ export declare class LlmsFullAssembler {
11
+ private config;
12
+ constructor(config: LlmsFullAssemblerConfig);
13
+ assemble(): Promise<{
14
+ outputPaths: string[];
15
+ componentCount: number;
16
+ }>;
17
+ private loadTemplate;
18
+ private collectComponentSections;
19
+ }
20
+ //# sourceMappingURL=LlmsFullAssembler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LlmsFullAssembler.d.ts","sourceRoot":"","sources":["../../../src/generators/llm/LlmsFullAssembler.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAA0B;gBAE5B,MAAM,EAAE,uBAAuB;IAIrC,QAAQ,IAAI,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,EAAE,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;YAkB9D,YAAY;YAQZ,wBAAwB;CA8BvC"}
@@ -0,0 +1,63 @@
1
+ import * as fs from 'node:fs/promises';
2
+ import * as path from 'node:path';
3
+ import { glob } from 'glob';
4
+ const PLACEHOLDER = '{{COMPONENTS}}';
5
+ /**
6
+ * Assembles the llms-full.txt by combining a hand-curated template
7
+ * with auto-generated per-component LLM docs from the static output directories.
8
+ */
9
+ export class LlmsFullAssembler {
10
+ config;
11
+ constructor(config) {
12
+ this.config = config;
13
+ }
14
+ async assemble() {
15
+ const template = await this.loadTemplate();
16
+ const componentSections = await this.collectComponentSections();
17
+ const assembled = template.replace(PLACEHOLDER, componentSections.content);
18
+ for (const outputPath of this.config.outputPaths) {
19
+ await fs.mkdir(path.dirname(outputPath), { recursive: true });
20
+ await fs.writeFile(outputPath, assembled, 'utf-8');
21
+ }
22
+ console.log(`📝 llms-full.txt assembled: ${componentSections.count} components → ${this.config.outputPaths.join(', ')}`);
23
+ return { outputPaths: this.config.outputPaths, componentCount: componentSections.count };
24
+ }
25
+ async loadTemplate() {
26
+ try {
27
+ return await fs.readFile(this.config.templatePath, 'utf-8');
28
+ }
29
+ catch {
30
+ throw new Error(`Template not found: ${this.config.templatePath}`);
31
+ }
32
+ }
33
+ async collectComponentSections() {
34
+ const allFiles = [];
35
+ for (const dir of this.config.staticDirs) {
36
+ try {
37
+ const files = await glob(path.join(dir, '**/llm.txt'), { absolute: true });
38
+ allFiles.push(...files);
39
+ }
40
+ catch {
41
+ console.warn(`⚠️ Could not read LLM files from ${dir}`);
42
+ }
43
+ }
44
+ allFiles.sort((a, b) => {
45
+ const nameA = path.basename(path.dirname(a));
46
+ const nameB = path.basename(path.dirname(b));
47
+ return nameA.localeCompare(nameB);
48
+ });
49
+ const sections = [];
50
+ for (const file of allFiles) {
51
+ try {
52
+ const content = (await fs.readFile(file, 'utf-8')).trim();
53
+ if (content)
54
+ sections.push(content);
55
+ }
56
+ catch {
57
+ console.warn(`⚠️ Could not read ${file}`);
58
+ }
59
+ }
60
+ return { content: sections.join('\n\n'), count: sections.length };
61
+ }
62
+ }
63
+ //# sourceMappingURL=LlmsFullAssembler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LlmsFullAssembler.js","sourceRoot":"","sources":["../../../src/generators/llm/LlmsFullAssembler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generators/llm/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generators/llm/index.ts"],"names":[],"mappings":""}