@spartan-ng/mcp 0.0.1-alpha.707
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 +149 -0
- package/package.json +40 -0
- package/src/index.d.ts +1 -0
- package/src/index.js +2 -0
- package/src/index.js.map +1 -0
- package/src/server.d.ts +2 -0
- package/src/server.js +32 -0
- package/src/server.js.map +1 -0
- package/src/tools/analysis.d.ts +2 -0
- package/src/tools/analysis.js +269 -0
- package/src/tools/analysis.js.map +1 -0
- package/src/tools/blocks.d.ts +2 -0
- package/src/tools/blocks.js +173 -0
- package/src/tools/blocks.js.map +1 -0
- package/src/tools/cache-tools.d.ts +2 -0
- package/src/tools/cache-tools.js +175 -0
- package/src/tools/cache-tools.js.map +1 -0
- package/src/tools/cache-warmup.d.ts +40 -0
- package/src/tools/cache-warmup.js +156 -0
- package/src/tools/cache-warmup.js.map +1 -0
- package/src/tools/cache.d.ts +99 -0
- package/src/tools/cache.js +361 -0
- package/src/tools/cache.js.map +1 -0
- package/src/tools/components.d.ts +2 -0
- package/src/tools/components.js +126 -0
- package/src/tools/components.js.map +1 -0
- package/src/tools/docs.d.ts +2 -0
- package/src/tools/docs.js +91 -0
- package/src/tools/docs.js.map +1 -0
- package/src/tools/health.d.ts +2 -0
- package/src/tools/health.js +103 -0
- package/src/tools/health.js.map +1 -0
- package/src/tools/meta.d.ts +2 -0
- package/src/tools/meta.js +47 -0
- package/src/tools/meta.js.map +1 -0
- package/src/tools/prompts.d.ts +2 -0
- package/src/tools/prompts.js +299 -0
- package/src/tools/prompts.js.map +1 -0
- package/src/tools/resources.d.ts +2 -0
- package/src/tools/resources.js +178 -0
- package/src/tools/resources.js.map +1 -0
- package/src/tools/utils.d.ts +84 -0
- package/src/tools/utils.js +581 -0
- package/src/tools/utils.js.map +1 -0
|
@@ -0,0 +1,581 @@
|
|
|
1
|
+
import crypto from 'crypto';
|
|
2
|
+
// Base URLs for Spartan UI docs
|
|
3
|
+
export const SPARTAN_DOCS_BASE = 'https://www.spartan.ng/documentation';
|
|
4
|
+
export const SPARTAN_COMPONENTS_BASE = 'https://www.spartan.ng/components';
|
|
5
|
+
export const SPARTAN_BLOCKS_BASE = 'https://www.spartan.ng/blocks';
|
|
6
|
+
/**
|
|
7
|
+
* Known Spartan components (from docs navigation). Keep this list updated.
|
|
8
|
+
* Some entries may be marked as "soon" on the site.
|
|
9
|
+
*/
|
|
10
|
+
export const KNOWN_COMPONENTS = [
|
|
11
|
+
'accordion',
|
|
12
|
+
'alert',
|
|
13
|
+
'alert-dialog',
|
|
14
|
+
'aspect-ratio',
|
|
15
|
+
'autocomplete',
|
|
16
|
+
'avatar',
|
|
17
|
+
'badge',
|
|
18
|
+
'breadcrumb',
|
|
19
|
+
'button',
|
|
20
|
+
'button-group',
|
|
21
|
+
'calendar',
|
|
22
|
+
'card',
|
|
23
|
+
'carousel',
|
|
24
|
+
'checkbox',
|
|
25
|
+
'collapsible',
|
|
26
|
+
'combobox',
|
|
27
|
+
'command',
|
|
28
|
+
'context-menu',
|
|
29
|
+
'data-table',
|
|
30
|
+
'date-picker',
|
|
31
|
+
'dialog',
|
|
32
|
+
'dropdown-menu',
|
|
33
|
+
'empty',
|
|
34
|
+
'field',
|
|
35
|
+
'form-field',
|
|
36
|
+
'hover-card',
|
|
37
|
+
'icon',
|
|
38
|
+
'input',
|
|
39
|
+
'input-group',
|
|
40
|
+
'input-otp',
|
|
41
|
+
'item',
|
|
42
|
+
'kbd',
|
|
43
|
+
'label',
|
|
44
|
+
'menubar',
|
|
45
|
+
'native-select',
|
|
46
|
+
'navigation-menu',
|
|
47
|
+
'pagination',
|
|
48
|
+
'popover',
|
|
49
|
+
'progress',
|
|
50
|
+
'radio-group',
|
|
51
|
+
'resizable',
|
|
52
|
+
'scroll-area',
|
|
53
|
+
'select',
|
|
54
|
+
'separator',
|
|
55
|
+
'sheet',
|
|
56
|
+
'sidebar',
|
|
57
|
+
'skeleton',
|
|
58
|
+
'slider',
|
|
59
|
+
'sonner',
|
|
60
|
+
'spinner',
|
|
61
|
+
'switch',
|
|
62
|
+
'table',
|
|
63
|
+
'tabs',
|
|
64
|
+
'textarea',
|
|
65
|
+
'toggle',
|
|
66
|
+
'toggle-group',
|
|
67
|
+
'tooltip',
|
|
68
|
+
];
|
|
69
|
+
/**
|
|
70
|
+
* Known Spartan blocks (pre-built UI patterns).
|
|
71
|
+
*/
|
|
72
|
+
export const KNOWN_BLOCKS = ['sidebar', 'login', 'signup', 'calendar'];
|
|
73
|
+
/**
|
|
74
|
+
* Known documentation topics.
|
|
75
|
+
*/
|
|
76
|
+
export const DOCUMENTATION_TOPICS = [
|
|
77
|
+
'installation',
|
|
78
|
+
'cli',
|
|
79
|
+
'theming',
|
|
80
|
+
'dark-mode',
|
|
81
|
+
'typography',
|
|
82
|
+
'health-checks',
|
|
83
|
+
'update-guide',
|
|
84
|
+
];
|
|
85
|
+
/**
|
|
86
|
+
* Minimal HTML -> text converter for callers that want plain text.
|
|
87
|
+
*/
|
|
88
|
+
export function htmlToText(html) {
|
|
89
|
+
const withoutScripts = html.replace(/<script[\s\S]*?<\/script>/gi, '');
|
|
90
|
+
const withoutStyles = withoutScripts.replace(/<style[\s\S]*?<\/style>/gi, '');
|
|
91
|
+
const withBreaks = withoutStyles
|
|
92
|
+
.replace(/<\/(p|div|section|article|li|h[1-6]|br|pre)>/gi, '\n')
|
|
93
|
+
.replace(/<(br|hr)\s*\/?>/gi, '\n');
|
|
94
|
+
const stripped = withBreaks.replace(/<[^>]+>/g, '');
|
|
95
|
+
const decoded = stripped
|
|
96
|
+
.replace(/ /g, ' ')
|
|
97
|
+
.replace(/&/g, '&')
|
|
98
|
+
.replace(/</g, '<')
|
|
99
|
+
.replace(/>/g, '>')
|
|
100
|
+
.replace(/"/g, '"')
|
|
101
|
+
.replace(/'/g, "'");
|
|
102
|
+
return decoded.replace(/\n{3,}/g, '\n\n').trim();
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Simple in-memory cache for fetched pages.
|
|
106
|
+
*/
|
|
107
|
+
const responseCache = new Map();
|
|
108
|
+
/**
|
|
109
|
+
* Fetch a URL and return HTML or text with basic caching.
|
|
110
|
+
*/
|
|
111
|
+
export async function fetchContent(url, format = 'html', noCache = false) {
|
|
112
|
+
const ttlMs = Number(process.env.SPARTAN_CACHE_TTL_MS || 5 * 60 * 1000);
|
|
113
|
+
const cacheKey = `${url}::${format}`;
|
|
114
|
+
const now = Date.now();
|
|
115
|
+
if (!noCache && responseCache.has(cacheKey)) {
|
|
116
|
+
const entry = responseCache.get(cacheKey);
|
|
117
|
+
if (now - entry.timestampMs < ttlMs) {
|
|
118
|
+
return entry.content;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
const controller = new AbortController();
|
|
122
|
+
const timeout = setTimeout(() => controller.abort(), 10000);
|
|
123
|
+
let res;
|
|
124
|
+
try {
|
|
125
|
+
res = await fetch(url, {
|
|
126
|
+
headers: { 'User-Agent': 'spartan-mcp/1.0' },
|
|
127
|
+
signal: controller.signal,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
if (err instanceof DOMException && err.name === 'AbortError') {
|
|
132
|
+
throw new Error(`Request timed out: ${url}`);
|
|
133
|
+
}
|
|
134
|
+
throw err;
|
|
135
|
+
}
|
|
136
|
+
finally {
|
|
137
|
+
clearTimeout(timeout);
|
|
138
|
+
}
|
|
139
|
+
if (!res.ok) {
|
|
140
|
+
throw new Error(`Failed to fetch ${url}: ${res.status} ${res.statusText}`);
|
|
141
|
+
}
|
|
142
|
+
const html = await res.text();
|
|
143
|
+
const result = format === 'text' ? htmlToText(html) : html;
|
|
144
|
+
if (!noCache) {
|
|
145
|
+
responseCache.set(cacheKey, { content: result, timestampMs: now });
|
|
146
|
+
}
|
|
147
|
+
return result;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Detect language from code content and HTML attributes.
|
|
151
|
+
*/
|
|
152
|
+
function detectLanguageFromContext(code, openingTags) {
|
|
153
|
+
// Check HTML class attribute first (e.g., <code class="language-typescript">)
|
|
154
|
+
const langMatch = openingTags.match(/language-(\w+)/i) || openingTags.match(/lang-(\w+)/i);
|
|
155
|
+
if (langMatch) {
|
|
156
|
+
const lang = langMatch[1].toLowerCase();
|
|
157
|
+
if (['typescript', 'javascript', 'html', 'css', 'bash', 'json', 'shell'].includes(lang)) {
|
|
158
|
+
return lang;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return detectLanguage(code);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Extract a title from the code block's HTML context (e.g., preceding heading).
|
|
165
|
+
*/
|
|
166
|
+
function extractTitleFromContext(html, matchIndex) {
|
|
167
|
+
// Look for a heading before this code block
|
|
168
|
+
const beforeCode = html.slice(Math.max(0, matchIndex - 1000), matchIndex);
|
|
169
|
+
const headingMatch = beforeCode.match(/<h[1-6][^>]*>([^<]+)<\/h[1-6]>\s*$/i);
|
|
170
|
+
if (headingMatch) {
|
|
171
|
+
return htmlToText(headingMatch[1]).trim();
|
|
172
|
+
}
|
|
173
|
+
// Look for a caption or label
|
|
174
|
+
const captionMatch = beforeCode.match(/<(caption|summary|label)[^>]*>([^<]+)<\/\1>\s*$/i);
|
|
175
|
+
if (captionMatch) {
|
|
176
|
+
return htmlToText(captionMatch[2]).trim();
|
|
177
|
+
}
|
|
178
|
+
return '';
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Remove common leading whitespace from code (like ES6 dedent).
|
|
182
|
+
*/
|
|
183
|
+
function dedent(code) {
|
|
184
|
+
const lines = code.split('\n');
|
|
185
|
+
// Find minimum indentation (ignoring empty lines)
|
|
186
|
+
let minIndent = Infinity;
|
|
187
|
+
for (const line of lines) {
|
|
188
|
+
if (line.trim().length === 0)
|
|
189
|
+
continue;
|
|
190
|
+
const match = line.match(/^(\s*)/);
|
|
191
|
+
if (match) {
|
|
192
|
+
minIndent = Math.min(minIndent, match[1].length);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
if (minIndent === Infinity || minIndent === 0) {
|
|
196
|
+
return code;
|
|
197
|
+
}
|
|
198
|
+
// Remove common indentation
|
|
199
|
+
return lines
|
|
200
|
+
.map((line) => (line.trim().length > 0 ? line.slice(minIndent) : line))
|
|
201
|
+
.join('\n')
|
|
202
|
+
.trim();
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Clean up code: fix HTML entities, normalize line endings, dedent.
|
|
206
|
+
*/
|
|
207
|
+
function cleanCode(raw) {
|
|
208
|
+
let code = raw;
|
|
209
|
+
// Normalize line endings
|
|
210
|
+
code = code.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
|
|
211
|
+
// Fix HTML entities that might remain
|
|
212
|
+
code = code
|
|
213
|
+
.replace(/ /g, ' ')
|
|
214
|
+
.replace(/&/g, '&')
|
|
215
|
+
.replace(/</g, '<')
|
|
216
|
+
.replace(/>/g, '>')
|
|
217
|
+
.replace(/"/g, '"')
|
|
218
|
+
.replace(/'/g, "'")
|
|
219
|
+
.replace(/'/g, "'");
|
|
220
|
+
// Remove trailing whitespace on each line
|
|
221
|
+
code = code
|
|
222
|
+
.split('\n')
|
|
223
|
+
.map((line) => line.trimEnd())
|
|
224
|
+
.join('\n');
|
|
225
|
+
// Remove leading/trailing blank lines
|
|
226
|
+
code = code.replace(/^\n+/, '').replace(/\n+$/, '');
|
|
227
|
+
// Dedent
|
|
228
|
+
code = dedent(code);
|
|
229
|
+
// Collapse excessive blank lines (max 1 consecutive)
|
|
230
|
+
code = code.replace(/\n{3,}/g, '\n\n');
|
|
231
|
+
return code;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Generate an ID from code content for deduplication.
|
|
235
|
+
*/
|
|
236
|
+
function generateCodeId(code) {
|
|
237
|
+
const hash = crypto.createHash('sha256').update(code).digest('hex').slice(0, 12);
|
|
238
|
+
return `${hash}-${code.length}`;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Extract code blocks from HTML and return as an array of CodeBlock objects.
|
|
242
|
+
*/
|
|
243
|
+
export function extractCodeBlocks(html) {
|
|
244
|
+
const blocks = [];
|
|
245
|
+
const seenIds = new Set();
|
|
246
|
+
// Match <pre><code> blocks with position tracking
|
|
247
|
+
const preCodeRegex = /<pre[^>]*>\s*<code[^>]*>([\s\S]*?)<\/code>\s*<\/pre>/gi;
|
|
248
|
+
let match;
|
|
249
|
+
while ((match = preCodeRegex.exec(html)) !== null) {
|
|
250
|
+
// Capture both the <pre ...> and <code ...> opening tags so language classes
|
|
251
|
+
// (typically on the <code> element, e.g. class="language-typescript") are seen.
|
|
252
|
+
const openingTags = /<pre[^>]*>\s*<code[^>]*>/i.exec(match[0])?.[0] ?? '';
|
|
253
|
+
const rawInner = match[1];
|
|
254
|
+
// Strip nested HTML tags (like syntax highlighting spans) but keep text
|
|
255
|
+
const strippedInner = rawInner.replace(/<[^>]+>/g, '');
|
|
256
|
+
const rawCode = htmlToText(strippedInner);
|
|
257
|
+
const lines = rawCode.split('\n').filter((line) => line.trim().length > 0);
|
|
258
|
+
// Skip very short blocks (single imports, snippets)
|
|
259
|
+
if (lines.length < 3)
|
|
260
|
+
continue;
|
|
261
|
+
const code = cleanCode(rawCode);
|
|
262
|
+
if (code.length < 20)
|
|
263
|
+
continue;
|
|
264
|
+
const id = generateCodeId(code);
|
|
265
|
+
if (seenIds.has(id))
|
|
266
|
+
continue;
|
|
267
|
+
seenIds.add(id);
|
|
268
|
+
const language = detectLanguageFromContext(rawCode, openingTags);
|
|
269
|
+
const title = extractTitleFromContext(html, match.index);
|
|
270
|
+
blocks.push({ code, language, title, id });
|
|
271
|
+
}
|
|
272
|
+
return blocks;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Extract headings (h1-h3) and return as plain text in order.
|
|
276
|
+
*/
|
|
277
|
+
export function extractHeadings(html) {
|
|
278
|
+
const regex = /<(h[1-3])[^>]*>([\s\S]*?)<\/\1>/gi;
|
|
279
|
+
const headings = [];
|
|
280
|
+
let match;
|
|
281
|
+
while ((match = regex.exec(html)) !== null)
|
|
282
|
+
headings.push(htmlToText(match[2]));
|
|
283
|
+
return headings;
|
|
284
|
+
}
|
|
285
|
+
export function extractLinks(html) {
|
|
286
|
+
const regex = /<a[^>]*href=["']([^"']+)["'][^>]*>([\s\S]*?)<\/a>/gi;
|
|
287
|
+
const links = [];
|
|
288
|
+
let match;
|
|
289
|
+
while ((match = regex.exec(html)) !== null) {
|
|
290
|
+
links.push({ href: match[1], text: htmlToText(match[2]) });
|
|
291
|
+
}
|
|
292
|
+
return links;
|
|
293
|
+
}
|
|
294
|
+
function normalizeInlineWhitespace(value) {
|
|
295
|
+
return value.replace(/\s+/g, ' ').trim();
|
|
296
|
+
}
|
|
297
|
+
function getHeadingMatches(html) {
|
|
298
|
+
const matches = [];
|
|
299
|
+
const regex = /<h([1-6])[^>]*>([\s\S]*?)<\/h\1>/gi;
|
|
300
|
+
let match;
|
|
301
|
+
while ((match = regex.exec(html)) !== null) {
|
|
302
|
+
matches.push({
|
|
303
|
+
text: normalizeInlineWhitespace(htmlToText(match[2])),
|
|
304
|
+
start: match.index,
|
|
305
|
+
end: regex.lastIndex,
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
return matches;
|
|
309
|
+
}
|
|
310
|
+
function extractSectionContent(html, heading, stopHeadings) {
|
|
311
|
+
const headings = getHeadingMatches(html);
|
|
312
|
+
const startHeading = headings.find((item) => item.text === heading);
|
|
313
|
+
if (!startHeading) {
|
|
314
|
+
return null;
|
|
315
|
+
}
|
|
316
|
+
const stopHeading = headings.find((item) => item.start > startHeading.start && stopHeadings.includes(item.text));
|
|
317
|
+
return html.slice(startHeading.end, stopHeading?.start ?? html.length);
|
|
318
|
+
}
|
|
319
|
+
function buildAPIExamples(html) {
|
|
320
|
+
return extractCodeBlocks(html)
|
|
321
|
+
.slice(0, 10)
|
|
322
|
+
.map((block, index) => ({
|
|
323
|
+
title: block.title || `Example ${index + 1}`,
|
|
324
|
+
code: block.code,
|
|
325
|
+
language: block.language,
|
|
326
|
+
}));
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Extract structured API information from component documentation
|
|
330
|
+
*/
|
|
331
|
+
export function extractAPIInfo(html) {
|
|
332
|
+
const apiInfo = {
|
|
333
|
+
brainAPI: [],
|
|
334
|
+
helmAPI: [],
|
|
335
|
+
examples: [],
|
|
336
|
+
};
|
|
337
|
+
try {
|
|
338
|
+
const brainAPISection = extractSectionContent(html, 'Brain API', ['Helm API', 'On this page']);
|
|
339
|
+
const helmAPISection = extractSectionContent(html, 'Helm API', ['On this page']);
|
|
340
|
+
if (brainAPISection) {
|
|
341
|
+
apiInfo.brainAPI = extractAPIComponents(brainAPISection);
|
|
342
|
+
}
|
|
343
|
+
if (helmAPISection) {
|
|
344
|
+
apiInfo.helmAPI = extractAPIComponents(helmAPISection);
|
|
345
|
+
}
|
|
346
|
+
apiInfo.examples = buildAPIExamples(html);
|
|
347
|
+
}
|
|
348
|
+
catch (error) {
|
|
349
|
+
console.error('Error extracting API info:', error);
|
|
350
|
+
}
|
|
351
|
+
return apiInfo;
|
|
352
|
+
}
|
|
353
|
+
function extractAPIComponents(html) {
|
|
354
|
+
const componentHeadings = getHeadingMatches(html).filter((item) => /^(Brn|Hlm)\w+$/.test(item.text));
|
|
355
|
+
if (componentHeadings.length === 0) {
|
|
356
|
+
return extractAPIComponentsFromText(htmlToText(html));
|
|
357
|
+
}
|
|
358
|
+
return componentHeadings.map((heading, index) => {
|
|
359
|
+
const nextHeading = componentHeadings[index + 1];
|
|
360
|
+
const content = html.slice(heading.end, nextHeading?.start ?? html.length);
|
|
361
|
+
return {
|
|
362
|
+
name: heading.text,
|
|
363
|
+
selector: extractSelector(content),
|
|
364
|
+
inputs: extractInputsFromTable(content),
|
|
365
|
+
outputs: extractOutputsFromTable(content),
|
|
366
|
+
};
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
function extractInputsFromTable(html) {
|
|
370
|
+
const props = [];
|
|
371
|
+
const tableSection = extractSectionContent(html, 'Inputs', ['Outputs']);
|
|
372
|
+
if (!tableSection)
|
|
373
|
+
return extractInputsFromText(htmlToText(html));
|
|
374
|
+
const rowRegex = /<tr[^>]*>([\s\S]*?)<\/tr>/gi;
|
|
375
|
+
let rowMatch;
|
|
376
|
+
let isHeaderRow = true;
|
|
377
|
+
while ((rowMatch = rowRegex.exec(tableSection)) !== null) {
|
|
378
|
+
const rowContent = rowMatch[1];
|
|
379
|
+
if (isHeaderRow) {
|
|
380
|
+
isHeaderRow = false;
|
|
381
|
+
continue;
|
|
382
|
+
}
|
|
383
|
+
const cells = [];
|
|
384
|
+
const cellRegex = /<t[dh][^>]*>([\s\S]*?)<\/t[dh]>/gi;
|
|
385
|
+
let cellMatch;
|
|
386
|
+
while ((cellMatch = cellRegex.exec(rowContent)) !== null) {
|
|
387
|
+
cells.push(htmlToText(cellMatch[1]).trim());
|
|
388
|
+
}
|
|
389
|
+
if (cells.length >= 3) {
|
|
390
|
+
props.push({
|
|
391
|
+
prop: cells[0],
|
|
392
|
+
type: cells[1],
|
|
393
|
+
default: cells[2],
|
|
394
|
+
description: cells[3] || '',
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
return props.length > 0
|
|
399
|
+
? props
|
|
400
|
+
: extractInputRowsFromSectionText(htmlToText(tableSection))
|
|
401
|
+
.map(parseInputRow)
|
|
402
|
+
.filter((row) => row !== null);
|
|
403
|
+
}
|
|
404
|
+
function extractOutputsFromTable(html) {
|
|
405
|
+
const props = [];
|
|
406
|
+
const tableSection = extractSectionContent(html, 'Outputs', []);
|
|
407
|
+
if (!tableSection)
|
|
408
|
+
return extractOutputsFromText(htmlToText(html));
|
|
409
|
+
const rowRegex = /<tr[^>]*>([\s\S]*?)<\/tr>/gi;
|
|
410
|
+
let rowMatch;
|
|
411
|
+
let isHeaderRow = true;
|
|
412
|
+
while ((rowMatch = rowRegex.exec(tableSection)) !== null) {
|
|
413
|
+
const rowContent = rowMatch[1];
|
|
414
|
+
if (isHeaderRow) {
|
|
415
|
+
isHeaderRow = false;
|
|
416
|
+
continue;
|
|
417
|
+
}
|
|
418
|
+
const cells = [];
|
|
419
|
+
const cellRegex = /<t[dh][^>]*>([\s\S]*?)<\/t[dh]>/gi;
|
|
420
|
+
let cellMatch;
|
|
421
|
+
while ((cellMatch = cellRegex.exec(rowContent)) !== null) {
|
|
422
|
+
cells.push(htmlToText(cellMatch[1]).trim());
|
|
423
|
+
}
|
|
424
|
+
if (cells.length >= 3) {
|
|
425
|
+
props.push({
|
|
426
|
+
prop: cells[0],
|
|
427
|
+
type: cells[1],
|
|
428
|
+
description: (cells.length >= 4 ? cells.slice(3) : cells.slice(2)).join(' ').trim(),
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
return props.length > 0
|
|
433
|
+
? props
|
|
434
|
+
: extractInputRowsFromSectionText(htmlToText(tableSection))
|
|
435
|
+
.map(parseOutputRow)
|
|
436
|
+
.filter((row) => row !== null);
|
|
437
|
+
}
|
|
438
|
+
function extractSelector(html) {
|
|
439
|
+
const selectorMatch = htmlToText(html).match(/Selector:\s*([^\n]+)/i);
|
|
440
|
+
return selectorMatch ? selectorMatch[1].replace(/`/g, '').trim() : '';
|
|
441
|
+
}
|
|
442
|
+
function extractAPIComponentsFromText(text) {
|
|
443
|
+
const lines = text
|
|
444
|
+
.split('\n')
|
|
445
|
+
.map((line) => line.trim())
|
|
446
|
+
.filter(Boolean);
|
|
447
|
+
const components = [];
|
|
448
|
+
let currentName = null;
|
|
449
|
+
let currentBlock = [];
|
|
450
|
+
const flush = () => {
|
|
451
|
+
if (!currentName) {
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
454
|
+
const blockText = currentBlock.join('\n');
|
|
455
|
+
components.push({
|
|
456
|
+
name: currentName,
|
|
457
|
+
selector: extractSelector(blockText),
|
|
458
|
+
inputs: extractInputsFromText(blockText),
|
|
459
|
+
outputs: extractOutputsFromText(blockText),
|
|
460
|
+
});
|
|
461
|
+
};
|
|
462
|
+
for (const line of lines) {
|
|
463
|
+
if (/^(Brn|Hlm)\w+$/.test(line)) {
|
|
464
|
+
flush();
|
|
465
|
+
currentName = line;
|
|
466
|
+
currentBlock = [];
|
|
467
|
+
continue;
|
|
468
|
+
}
|
|
469
|
+
if (currentName) {
|
|
470
|
+
currentBlock.push(line);
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
flush();
|
|
474
|
+
return components;
|
|
475
|
+
}
|
|
476
|
+
function extractInputsFromText(text) {
|
|
477
|
+
const rows = extractSectionRows(text, 'Inputs', 'Outputs');
|
|
478
|
+
return rows.map(parseInputRow).filter((row) => row !== null);
|
|
479
|
+
}
|
|
480
|
+
function extractOutputsFromText(text) {
|
|
481
|
+
const rows = extractSectionRows(text, 'Outputs');
|
|
482
|
+
return rows.map(parseOutputRow).filter((row) => row !== null);
|
|
483
|
+
}
|
|
484
|
+
function parseInputRow(row) {
|
|
485
|
+
const wideParts = row.split(/\s{2,}/).map((part) => part.trim());
|
|
486
|
+
if (wideParts.length >= 4) {
|
|
487
|
+
const [prop, type, defaultValue, ...description] = wideParts;
|
|
488
|
+
return {
|
|
489
|
+
prop,
|
|
490
|
+
type,
|
|
491
|
+
default: defaultValue,
|
|
492
|
+
description: description.join(' ').trim(),
|
|
493
|
+
};
|
|
494
|
+
}
|
|
495
|
+
const compactMatch = row.match(/^(\S+)\s+(.+?)\s+(-|true|false|null|undefined|\d+(?:\.\d+)?|["'][^"']*["'])\s+(.+)$/);
|
|
496
|
+
if (!compactMatch) {
|
|
497
|
+
return null;
|
|
498
|
+
}
|
|
499
|
+
return {
|
|
500
|
+
prop: compactMatch[1],
|
|
501
|
+
type: compactMatch[2],
|
|
502
|
+
default: compactMatch[3],
|
|
503
|
+
description: compactMatch[4].trim(),
|
|
504
|
+
};
|
|
505
|
+
}
|
|
506
|
+
function parseOutputRow(row) {
|
|
507
|
+
const wideParts = row.split(/\s{2,}/).map((part) => part.trim());
|
|
508
|
+
if (wideParts.length >= 4) {
|
|
509
|
+
return {
|
|
510
|
+
prop: wideParts[0],
|
|
511
|
+
type: wideParts[1],
|
|
512
|
+
description: wideParts.slice(3).join(' ').trim(),
|
|
513
|
+
};
|
|
514
|
+
}
|
|
515
|
+
if (wideParts.length === 3) {
|
|
516
|
+
return {
|
|
517
|
+
prop: wideParts[0],
|
|
518
|
+
type: wideParts[1],
|
|
519
|
+
description: wideParts[2],
|
|
520
|
+
};
|
|
521
|
+
}
|
|
522
|
+
const compactMatch = row.match(/^(\S+)\s+(.+?)\s+(-|true|false|null|undefined|\d+(?:\.\d+)?|["'][^"']*["'])\s+(.+)$/);
|
|
523
|
+
if (!compactMatch) {
|
|
524
|
+
return null;
|
|
525
|
+
}
|
|
526
|
+
return {
|
|
527
|
+
prop: compactMatch[1],
|
|
528
|
+
type: compactMatch[2],
|
|
529
|
+
description: compactMatch[4].trim(),
|
|
530
|
+
};
|
|
531
|
+
}
|
|
532
|
+
function extractSectionRows(text, heading, stopHeading) {
|
|
533
|
+
const lines = text
|
|
534
|
+
.split('\n')
|
|
535
|
+
.map((line) => line.trim())
|
|
536
|
+
.filter(Boolean);
|
|
537
|
+
const startIndex = lines.findIndex((line) => line === heading);
|
|
538
|
+
if (startIndex === -1) {
|
|
539
|
+
return [];
|
|
540
|
+
}
|
|
541
|
+
const rows = [];
|
|
542
|
+
for (let index = startIndex + 1; index < lines.length; index += 1) {
|
|
543
|
+
const line = lines[index];
|
|
544
|
+
if (stopHeading && line === stopHeading) {
|
|
545
|
+
break;
|
|
546
|
+
}
|
|
547
|
+
if (/^(Brn|Hlm)\w+$/.test(line)) {
|
|
548
|
+
break;
|
|
549
|
+
}
|
|
550
|
+
if (/^Prop\s+Type/i.test(line)) {
|
|
551
|
+
continue;
|
|
552
|
+
}
|
|
553
|
+
rows.push(line);
|
|
554
|
+
}
|
|
555
|
+
return rows;
|
|
556
|
+
}
|
|
557
|
+
function extractInputRowsFromSectionText(text) {
|
|
558
|
+
return text
|
|
559
|
+
.split('\n')
|
|
560
|
+
.map((line) => line.trim())
|
|
561
|
+
.filter((line) => line.length > 0 && !/^Prop\s+Type/i.test(line));
|
|
562
|
+
}
|
|
563
|
+
/**
|
|
564
|
+
* Simple language detection based on code content
|
|
565
|
+
*/
|
|
566
|
+
export function detectLanguage(code) {
|
|
567
|
+
if (code.includes('import') && code.includes('Component')) {
|
|
568
|
+
return 'typescript';
|
|
569
|
+
}
|
|
570
|
+
if (code.includes('import') && code.includes('from')) {
|
|
571
|
+
return 'javascript';
|
|
572
|
+
}
|
|
573
|
+
if (code.includes('<') && code.includes('>') && code.includes('hlm')) {
|
|
574
|
+
return 'html';
|
|
575
|
+
}
|
|
576
|
+
if (code.includes('npm') || code.includes('npx') || code.includes('ng ')) {
|
|
577
|
+
return 'bash';
|
|
578
|
+
}
|
|
579
|
+
return 'typescript';
|
|
580
|
+
}
|
|
581
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../libs/mcp/src/tools/utils.ts"],"names":[],"mappings":"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"}
|