@taiga-ui/mcp 0.1.0 → 0.2.1
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 +40 -4
- package/package.json +7 -7
- package/dist/index.js +0 -8
- package/dist/index.js.map +0 -1
- package/dist/schemas/doc-types.js +0 -2
- package/dist/schemas/doc-types.js.map +0 -1
- package/dist/server/fetch.js +0 -33
- package/dist/server/fetch.js.map +0 -1
- package/dist/server/server.js +0 -52
- package/dist/server/server.js.map +0 -1
- package/dist/tools/get-component-example.js +0 -37
- package/dist/tools/get-component-example.js.map +0 -1
- package/dist/tools/get-list-components.js +0 -32
- package/dist/tools/get-list-components.js.map +0 -1
- package/dist/tools/get-overview.js +0 -102
- package/dist/tools/get-overview.js.map +0 -1
- package/dist/tools/index.js +0 -9
- package/dist/tools/index.js.map +0 -1
- package/dist/utils/extract-header.js +0 -407
- package/dist/utils/extract-header.js.map +0 -1
- package/dist/utils/find-section.js +0 -97
- package/dist/utils/find-section.js.map +0 -1
- package/dist/utils/list-components.js +0 -19
- package/dist/utils/list-components.js.map +0 -1
- package/dist/utils/logger.js +0 -10
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/parse-content.js +0 -53
- package/dist/utils/parse-content.js.map +0 -1
- package/dist/utils/query-results.js +0 -42
- package/dist/utils/query-results.js.map +0 -1
package/README.md
CHANGED
|
@@ -12,8 +12,8 @@ development workflow.
|
|
|
12
12
|
### Key Features
|
|
13
13
|
|
|
14
14
|
- **Docs + code snippets**. Full Taiga UI markdown plus ready Angular examples in one place.
|
|
15
|
-
- **
|
|
16
|
-
via `get_component_example`.
|
|
15
|
+
- **Four MCP tools**. Get structured overview with `get_overview`, discover with `get_list_components`, fetch examples
|
|
16
|
+
via `get_component_example`, and access migration guides with `get_migration_guide`.
|
|
17
17
|
- **Configurable & lightweight**. Swap source URL (stable/next) without local Angular install.
|
|
18
18
|
|
|
19
19
|
### Requirements
|
|
@@ -143,8 +143,44 @@ get_component_example({names: ['Alert']});
|
|
|
143
143
|
}
|
|
144
144
|
```
|
|
145
145
|
|
|
146
|
-
|
|
147
|
-
|
|
146
|
+
4. `get_migration_guide`
|
|
147
|
+
- Returns the complete Migration Guide for Taiga UI version updates with pre-update checklist, migration instructions
|
|
148
|
+
via schematics, and troubleshooting for common issues.
|
|
149
|
+
- Use this tool when you need to migrate between Taiga UI major versions or understand the migration process.
|
|
150
|
+
- Input: none (no parameters required).
|
|
151
|
+
- Output: `title`, `introduction` with version info, and `sections` array with migration guidance, code blocks for
|
|
152
|
+
CLI commands, and solutions for common problems.
|
|
153
|
+
|
|
154
|
+
```ts
|
|
155
|
+
get_migration_guide();
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
```json
|
|
159
|
+
{
|
|
160
|
+
"title": "Migration Guide",
|
|
161
|
+
"introduction": [
|
|
162
|
+
"**Guide to update Taiga UI v{CURRENT_MAJOR} -> v{NEXT_MAJOR}**"
|
|
163
|
+
],
|
|
164
|
+
"sections": [
|
|
165
|
+
{
|
|
166
|
+
"title": "Before You Update",
|
|
167
|
+
"content": [...]
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"title": "Updating",
|
|
171
|
+
"content": [...],
|
|
172
|
+
"codeBlocks": [...]
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"title": "Troubleshooting",
|
|
176
|
+
"content": [...]
|
|
177
|
+
}
|
|
178
|
+
]
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
> Tip: Start with `get_overview` to get import map and common mistakes, then use `get_list_components` to discover IDs,
|
|
183
|
+
> `get_component_example` to fetch full implementation snippets, and `get_migration_guide` for version upgrade guidance.
|
|
148
184
|
|
|
149
185
|
</details>
|
|
150
186
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@taiga-ui/mcp",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Model Context Protocol server providing Taiga UI documentation search and scaffolding tools.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mcp",
|
|
@@ -24,12 +24,12 @@
|
|
|
24
24
|
"license": "Apache-2.0",
|
|
25
25
|
"contributors": [
|
|
26
26
|
{
|
|
27
|
-
"
|
|
28
|
-
"
|
|
27
|
+
"email": "vladimir.potekh@gmail.com",
|
|
28
|
+
"name": "Vladimir Potekhin"
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
|
-
"
|
|
32
|
-
"
|
|
31
|
+
"email": "zidakbew@gmail.com",
|
|
32
|
+
"name": "German Panov"
|
|
33
33
|
}
|
|
34
34
|
],
|
|
35
35
|
"type": "module",
|
|
@@ -72,8 +72,8 @@
|
|
|
72
72
|
"zod": "3.25.76"
|
|
73
73
|
},
|
|
74
74
|
"devDependencies": {
|
|
75
|
-
"@taiga-ui/configs": "0.
|
|
76
|
-
"@types/node": "24.
|
|
75
|
+
"@taiga-ui/configs": "0.526.0",
|
|
76
|
+
"@types/node": "24.12.2",
|
|
77
77
|
"husky": "9.1.7",
|
|
78
78
|
"typescript": "5.9.3"
|
|
79
79
|
},
|
package/dist/index.js
DELETED
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAC,KAAK,EAAC,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAC,QAAQ,EAAC,MAAM,mBAAmB,CAAC;AAE3C,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC3B,QAAQ,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC;IAEzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"doc-types.js","sourceRoot":"","sources":["../../src/schemas/doc-types.ts"],"names":[],"mappings":""}
|
package/dist/server/fetch.js
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { parseContent } from '../utils/parse-content.js';
|
|
2
|
-
import { state } from './server.js';
|
|
3
|
-
// 6-hour refresh window
|
|
4
|
-
const REFRESH_INTERVAL_MS = 6 * 60 * 60 * 1000;
|
|
5
|
-
export async function fetchSource() {
|
|
6
|
-
const argProvidedUrl = process.argv
|
|
7
|
-
.find((arg) => arg.startsWith('--source-url='))
|
|
8
|
-
?.split('=')[1];
|
|
9
|
-
const sourceUrl = argProvidedUrl ?? process.env.SOURCE_URL;
|
|
10
|
-
if (!sourceUrl) {
|
|
11
|
-
throw new Error('Source URL not provided. Set SOURCE_URL or pass --source-url=...');
|
|
12
|
-
}
|
|
13
|
-
const response = await fetch(sourceUrl).catch((error) => {
|
|
14
|
-
throw new Error(`Network error fetching documentation source: ${error instanceof Error ? error.message : String(error)}`);
|
|
15
|
-
});
|
|
16
|
-
if (!response.ok) {
|
|
17
|
-
throw new Error(`Failed to fetch documentation (HTTP ${response.status} ${response.statusText}) from ${sourceUrl}`);
|
|
18
|
-
}
|
|
19
|
-
const content = await response.text();
|
|
20
|
-
if (!content.trim()) {
|
|
21
|
-
throw new Error(`Fetched documentation from ${sourceUrl} is empty.`);
|
|
22
|
-
}
|
|
23
|
-
return { url: sourceUrl, content };
|
|
24
|
-
}
|
|
25
|
-
export async function ensureSourceLoaded() {
|
|
26
|
-
const isContentStale = !state.lastLoadedAt || Date.now() - state.lastLoadedAt > REFRESH_INTERVAL_MS;
|
|
27
|
-
if (!state.sections.length || isContentStale) {
|
|
28
|
-
const { url, content } = await fetchSource();
|
|
29
|
-
parseContent(content, url);
|
|
30
|
-
state.lastLoadedAt = Date.now();
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
//# sourceMappingURL=fetch.js.map
|
package/dist/server/fetch.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/server/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAC;AAElC,wBAAwB;AACxB,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,WAAW;IAC7B,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI;SAC9B,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;QAC/C,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpB,MAAM,SAAS,GAAG,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IAE3D,IAAI,CAAC,SAAS,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACX,kEAAkE,CACrE,CAAC;IACN,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QAC7D,MAAM,IAAI,KAAK,CACX,gDAAgD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC3G,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACX,uCAAuC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,UAAU,SAAS,EAAE,CACrG,CAAC;IACN,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEtC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,8BAA8B,SAAS,YAAY,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,EAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAC,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACpC,MAAM,cAAc,GAChB,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,YAAY,GAAG,mBAAmB,CAAC;IAEjF,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC;QAC3C,MAAM,EAAC,GAAG,EAAE,OAAO,EAAC,GAAG,MAAM,WAAW,EAAE,CAAC;QAE3C,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAE3B,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACpC,CAAC;AACL,CAAC"}
|
package/dist/server/server.js
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
|
-
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
4
|
-
import packageJson from '../../package.json' with { type: 'json' };
|
|
5
|
-
import { registerAllTools } from '../tools/index.js';
|
|
6
|
-
import { logError, logInfo } from '../utils/logger.js';
|
|
7
|
-
import { ensureSourceLoaded } from './fetch.js';
|
|
8
|
-
export const state = {
|
|
9
|
-
sections: [],
|
|
10
|
-
overview: undefined,
|
|
11
|
-
sourceUrl: undefined,
|
|
12
|
-
lastLoadedAt: undefined,
|
|
13
|
-
};
|
|
14
|
-
const server = new McpServer({
|
|
15
|
-
name: 'taiga-ui-mcp',
|
|
16
|
-
version: packageJson.version,
|
|
17
|
-
}, {
|
|
18
|
-
capabilities: { tools: {} },
|
|
19
|
-
instructions: `
|
|
20
|
-
<General Purpose>
|
|
21
|
-
This server provides programmatic access to Taiga UI component documentation for AI assistants.
|
|
22
|
-
Use these tools to discover, understand, and retrieve usage examples for Taiga UI components.
|
|
23
|
-
</General Purpose>
|
|
24
|
-
|
|
25
|
-
<Core Workflows & Tool Guide>
|
|
26
|
-
* **1. Get Documentation Overview (Start Here):** Always begin by calling \`get_overview\` to retrieve the structured documentation header with installation instructions, critical notices, and general guidance.
|
|
27
|
-
|
|
28
|
-
* **2. Discover Components:** Call \`get_list_components\` to see all available Taiga UI components. Use the optional \`query\` parameter for fuzzy filtering to find specific components.
|
|
29
|
-
|
|
30
|
-
* **3. Get Component Examples:** Once you identify needed component(s), call \`get_component_example\` with component name(s) to retrieve full documentation and code examples.
|
|
31
|
-
</Core Workflows & Tool Guide>
|
|
32
|
-
|
|
33
|
-
<Key Concepts>
|
|
34
|
-
* **Component Categories:** Components are organized by category (UI elements, forms, layouts, etc.)
|
|
35
|
-
* **Packages:** Components belong to different packages (CORE, KIT, etc.)
|
|
36
|
-
* **Fuzzy Matching:** Component queries support fuzzy matching for flexible searching.
|
|
37
|
-
</Key Concepts>
|
|
38
|
-
`,
|
|
39
|
-
});
|
|
40
|
-
registerAllTools(server);
|
|
41
|
-
export async function start() {
|
|
42
|
-
try {
|
|
43
|
-
await ensureSourceLoaded();
|
|
44
|
-
}
|
|
45
|
-
catch (error) {
|
|
46
|
-
logError('Initial source load failed', error);
|
|
47
|
-
}
|
|
48
|
-
const transport = new StdioServerTransport();
|
|
49
|
-
await server.connect(transport);
|
|
50
|
-
logInfo(`Angular Taiga UI MCP Server running. Fetched source components: ${state.sections.length}`);
|
|
51
|
-
}
|
|
52
|
-
//# sourceMappingURL=server.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":";AACA,OAAO,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAClE,OAAO,EAAC,oBAAoB,EAAC,MAAM,2CAA2C,CAAC;AAE/E,OAAO,WAAW,MAAM,oBAAoB,CAAC,OAAM,IAAI,EAAE,MAAM,EAAC,CAAC;AAEjE,OAAO,EAAC,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAC,QAAQ,EAAE,OAAO,EAAC,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAC,kBAAkB,EAAC,MAAM,YAAY,CAAC;AAS9C,MAAM,CAAC,MAAM,KAAK,GAAe;IAC7B,QAAQ,EAAE,EAAE;IACZ,QAAQ,EAAE,SAAS;IACnB,SAAS,EAAE,SAAS;IACpB,YAAY,EAAE,SAAS;CAC1B,CAAC;AAEF,MAAM,MAAM,GAAG,IAAI,SAAS,CACxB;IACI,IAAI,EAAE,cAAc;IACpB,OAAO,EAAE,WAAW,CAAC,OAAO;CAC/B,EACD;IACI,YAAY,EAAE,EAAC,KAAK,EAAE,EAAE,EAAC;IACzB,YAAY,EAAE;;;;;;;;;;;;;;;;;;;CAmBrB;CACI,CACJ,CAAC;AAEF,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAEzB,MAAM,CAAC,KAAK,UAAU,KAAK;IACvB,IAAI,CAAC;QACD,MAAM,kBAAkB,EAAE,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,QAAQ,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAE7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,OAAO,CACH,mEAAmE,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAC7F,CAAC;AACN,CAAC"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { ensureSourceLoaded } from '../server/fetch.js';
|
|
3
|
-
import { buildQueryResults } from '../utils/query-results.js';
|
|
4
|
-
export function registerGetComponentExampleTool(server) {
|
|
5
|
-
server.registerTool('get_component_example', {
|
|
6
|
-
title: 'Get Component Example',
|
|
7
|
-
description: 'Return section-related content snippets (formerly examples) for specified documentation section name(s). The presence of id indicates a successful match.',
|
|
8
|
-
inputSchema: { names: z.array(z.string().min(2)).min(1) },
|
|
9
|
-
outputSchema: {
|
|
10
|
-
results: z.array(z.object({
|
|
11
|
-
query: z.string(),
|
|
12
|
-
id: z.string().optional(),
|
|
13
|
-
package: z.string().nullable().optional(),
|
|
14
|
-
type: z.string().nullable().optional(),
|
|
15
|
-
suggestions: z.array(z.string()).optional(),
|
|
16
|
-
content: z.array(z.string()).optional(),
|
|
17
|
-
})),
|
|
18
|
-
matched: z.number(),
|
|
19
|
-
},
|
|
20
|
-
}, async ({ names }) => {
|
|
21
|
-
if (!names.length) {
|
|
22
|
-
const output = { error: 'Provide at least one name in names array.' };
|
|
23
|
-
return {
|
|
24
|
-
content: [{ type: 'text', text: JSON.stringify(output, null, 2) }],
|
|
25
|
-
structuredContent: output,
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
await ensureSourceLoaded();
|
|
29
|
-
const { results, matches } = buildQueryResults(names);
|
|
30
|
-
const output = { results, matched: matches };
|
|
31
|
-
return {
|
|
32
|
-
content: [{ type: 'text', text: JSON.stringify(output, null, 2) }],
|
|
33
|
-
structuredContent: output,
|
|
34
|
-
};
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=get-component-example.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-component-example.js","sourceRoot":"","sources":["../../src/tools/get-component-example.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAC,kBAAkB,EAAC,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAC,iBAAiB,EAAC,MAAM,2BAA2B,CAAC;AAE5D,MAAM,UAAU,+BAA+B,CAAC,MAAiB;IAC7D,MAAM,CAAC,YAAY,CACf,uBAAuB,EACvB;QACI,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EACP,2JAA2J;QAC/J,WAAW,EAAE,EAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAC;QACvD,YAAY,EAAE;YACV,OAAO,EAAE,CAAC,CAAC,KAAK,CACZ,CAAC,CAAC,MAAM,CAAC;gBACL,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;gBACjB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBACzB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;gBACzC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;gBACtC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;gBAC3C,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;aAC1C,CAAC,CACL;YACD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;SACtB;KACJ,EACD,KAAK,EAAE,EAAC,KAAK,EAAoB,EAAE,EAAE;QACjC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,EAAC,KAAK,EAAE,2CAA2C,EAAC,CAAC;YAEpE,OAAO;gBACH,OAAO,EAAE,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAC,CAAC;gBAChE,iBAAiB,EAAE,MAAM;aAC5B,CAAC;QACN,CAAC;QAED,MAAM,kBAAkB,EAAE,CAAC;QAE3B,MAAM,EAAC,OAAO,EAAE,OAAO,EAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,EAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAC,CAAC;QAE3C,OAAO;YACH,OAAO,EAAE,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAC,CAAC;YAChE,iBAAiB,EAAE,MAAM;SAC5B,CAAC;IACN,CAAC,CACJ,CAAC;AACN,CAAC"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { ensureSourceLoaded } from '../server/fetch.js';
|
|
3
|
-
import { constructComponentsList } from '../utils/list-components.js';
|
|
4
|
-
export function registerGetListComponentsTool(server) {
|
|
5
|
-
server.registerTool('get_list_components', {
|
|
6
|
-
title: 'List Components',
|
|
7
|
-
description: 'List all Taiga UI documentation section IDs (structured JSON only).',
|
|
8
|
-
inputSchema: { query: z.string().optional().default('') },
|
|
9
|
-
outputSchema: {
|
|
10
|
-
items: z.array(z.object({
|
|
11
|
-
id: z.string(),
|
|
12
|
-
name: z.string(),
|
|
13
|
-
category: z.string(),
|
|
14
|
-
package: z.string().nullable(),
|
|
15
|
-
type: z.string().nullable(),
|
|
16
|
-
})),
|
|
17
|
-
},
|
|
18
|
-
}, async ({ query }) => {
|
|
19
|
-
await ensureSourceLoaded();
|
|
20
|
-
const output = { items: constructComponentsList(query) };
|
|
21
|
-
return {
|
|
22
|
-
content: [
|
|
23
|
-
{
|
|
24
|
-
type: 'text',
|
|
25
|
-
text: JSON.stringify(output, null, 2),
|
|
26
|
-
},
|
|
27
|
-
],
|
|
28
|
-
structuredContent: output,
|
|
29
|
-
};
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
//# sourceMappingURL=get-list-components.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-list-components.js","sourceRoot":"","sources":["../../src/tools/get-list-components.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAC,kBAAkB,EAAC,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAC,uBAAuB,EAAC,MAAM,6BAA6B,CAAC;AAEpE,MAAM,UAAU,6BAA6B,CAAC,MAAiB;IAC3D,MAAM,CAAC,YAAY,CACf,qBAAqB,EACrB;QACI,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACP,qEAAqE;QACzE,WAAW,EAAE,EAAC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,EAAC;QACvD,YAAY,EAAE;YACV,KAAK,EAAE,CAAC,CAAC,KAAK,CACV,CAAC,CAAC,MAAM,CAAC;gBACL,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;gBACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;gBAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;gBACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC9B,CAAC,CACL;SACJ;KACJ,EACD,KAAK,EAAE,EAAC,KAAK,EAAmB,EAAE,EAAE;QAChC,MAAM,kBAAkB,EAAE,CAAC;QAE3B,MAAM,MAAM,GAAG,EAAC,KAAK,EAAE,uBAAuB,CAAC,KAAK,CAAC,EAAC,CAAC;QAEvD,OAAO;YACH,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;iBACxC;aACJ;YACD,iBAAiB,EAAE,MAAM;SAC5B,CAAC;IACN,CAAC,CACJ,CAAC;AACN,CAAC"}
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { ensureSourceLoaded } from '../server/fetch.js';
|
|
3
|
-
import { state } from '../server/server.js';
|
|
4
|
-
import { parseHeaderSections, } from '../utils/extract-header.js';
|
|
5
|
-
export function registerGetOverviewTool(server) {
|
|
6
|
-
server.registerTool('get_overview', {
|
|
7
|
-
title: 'Get Documentation Overview',
|
|
8
|
-
description: 'Call this tool FIRST to retrieve the fully structured documentation header as JSON. Returns hierarchical sections with parsed content (no raw markdown). Includes installation instructions, critical notices, and subsections with their content and code blocks. This provides essential context before exploring specific components.',
|
|
9
|
-
inputSchema: z.object({}).optional(),
|
|
10
|
-
outputSchema: {
|
|
11
|
-
title: z.string(),
|
|
12
|
-
sections: z.array(z.object({
|
|
13
|
-
title: z.string(),
|
|
14
|
-
description: z.string().optional(),
|
|
15
|
-
criticalNotices: z.array(z.string()),
|
|
16
|
-
subsections: z.array(z.object({
|
|
17
|
-
title: z.string(),
|
|
18
|
-
content: z.array(z.string()),
|
|
19
|
-
sections: z
|
|
20
|
-
.array(z.object({
|
|
21
|
-
section: z.string(),
|
|
22
|
-
code: z.string().optional(),
|
|
23
|
-
}))
|
|
24
|
-
.optional(),
|
|
25
|
-
items: z
|
|
26
|
-
.array(z.object({
|
|
27
|
-
title: z.string(),
|
|
28
|
-
content: z.array(z.string()),
|
|
29
|
-
code: z.string().optional(),
|
|
30
|
-
sections: z
|
|
31
|
-
.array(z.object({
|
|
32
|
-
section: z.string(),
|
|
33
|
-
code: z.string().optional(),
|
|
34
|
-
}))
|
|
35
|
-
.optional(),
|
|
36
|
-
}))
|
|
37
|
-
.optional(),
|
|
38
|
-
})),
|
|
39
|
-
})),
|
|
40
|
-
totalComponents: z.number(),
|
|
41
|
-
sourceUrl: z.string().optional(),
|
|
42
|
-
},
|
|
43
|
-
}, async () => {
|
|
44
|
-
await ensureSourceLoaded();
|
|
45
|
-
const headerInfo = state.overview
|
|
46
|
-
? parseHeaderSections(state.overview)
|
|
47
|
-
: {
|
|
48
|
-
title: 'Taiga UI Documentation',
|
|
49
|
-
sections: [],
|
|
50
|
-
};
|
|
51
|
-
const output = {
|
|
52
|
-
title: headerInfo.title,
|
|
53
|
-
sections: headerInfo.sections.map((section) => {
|
|
54
|
-
const sectionData = { title: section.title };
|
|
55
|
-
if (section.description) {
|
|
56
|
-
sectionData.description = section.description;
|
|
57
|
-
}
|
|
58
|
-
sectionData.criticalNotices = section.criticalNotices;
|
|
59
|
-
sectionData.subsections = section.subsections.map((sub) => {
|
|
60
|
-
const subData = {
|
|
61
|
-
title: sub.title,
|
|
62
|
-
content: sub.content,
|
|
63
|
-
};
|
|
64
|
-
// Only include sections if not empty
|
|
65
|
-
if (sub.sections && sub.sections.length > 0) {
|
|
66
|
-
subData.sections = sub.sections;
|
|
67
|
-
}
|
|
68
|
-
// Only include items if not empty
|
|
69
|
-
if (sub.items && sub.items.length > 0) {
|
|
70
|
-
subData.items = sub.items.map((item) => {
|
|
71
|
-
const itemData = {
|
|
72
|
-
title: item.title,
|
|
73
|
-
content: item.content,
|
|
74
|
-
};
|
|
75
|
-
if (item.code) {
|
|
76
|
-
itemData.code = item.code;
|
|
77
|
-
}
|
|
78
|
-
if (item.sections && item.sections.length > 0) {
|
|
79
|
-
itemData.sections = item.sections;
|
|
80
|
-
}
|
|
81
|
-
return itemData;
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
return subData;
|
|
85
|
-
});
|
|
86
|
-
return sectionData;
|
|
87
|
-
}),
|
|
88
|
-
totalComponents: state.sections.length,
|
|
89
|
-
sourceUrl: state.sourceUrl,
|
|
90
|
-
};
|
|
91
|
-
return {
|
|
92
|
-
content: [
|
|
93
|
-
{
|
|
94
|
-
type: 'text',
|
|
95
|
-
text: JSON.stringify(output, null, 2),
|
|
96
|
-
},
|
|
97
|
-
],
|
|
98
|
-
structuredContent: output,
|
|
99
|
-
};
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
//# sourceMappingURL=get-overview.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-overview.js","sourceRoot":"","sources":["../../src/tools/get-overview.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/index.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { registerGetComponentExampleTool } from './get-component-example.js';
|
|
2
|
-
import { registerGetListComponentsTool } from './get-list-components.js';
|
|
3
|
-
import { registerGetOverviewTool } from './get-overview.js';
|
|
4
|
-
export function registerAllTools(server) {
|
|
5
|
-
registerGetOverviewTool(server);
|
|
6
|
-
registerGetListComponentsTool(server);
|
|
7
|
-
registerGetComponentExampleTool(server);
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=index.js.map
|
package/dist/tools/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,+BAA+B,EAAC,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAC,6BAA6B,EAAC,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAC,uBAAuB,EAAC,MAAM,mBAAmB,CAAC;AAE1D,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAC9C,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChC,6BAA6B,CAAC,MAAM,CAAC,CAAC;IACtC,+BAA+B,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -1,407 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Extracts the documentation header from raw content.
|
|
3
|
-
* Header is everything before the first "# components/" heading.
|
|
4
|
-
*/
|
|
5
|
-
export function extractHeaderContent(rawContent) {
|
|
6
|
-
const lines = rawContent.split(/\r?\n/);
|
|
7
|
-
const headerLines = [];
|
|
8
|
-
for (const line of lines) {
|
|
9
|
-
if (/^#\s+components\//.test(line)) {
|
|
10
|
-
break;
|
|
11
|
-
}
|
|
12
|
-
headerLines.push(line);
|
|
13
|
-
}
|
|
14
|
-
return headerLines.join('\n').trim();
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Finds the line number where components section starts.
|
|
18
|
-
*/
|
|
19
|
-
export function findComponentsSectionStart(rawContent) {
|
|
20
|
-
const lines = rawContent.split(/\r?\n/);
|
|
21
|
-
for (let i = 0; i < lines.length; i++) {
|
|
22
|
-
const line = lines[i];
|
|
23
|
-
if (line && /^#\s+components\//.test(line)) {
|
|
24
|
-
return i;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
return lines.length;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Parses code blocks from content lines.
|
|
31
|
-
*/
|
|
32
|
-
function extractCodeBlocks(content) {
|
|
33
|
-
const codeBlocks = [];
|
|
34
|
-
const lines = content.split('\n');
|
|
35
|
-
let inCodeBlock = false;
|
|
36
|
-
let currentLang = '';
|
|
37
|
-
let currentCode = [];
|
|
38
|
-
for (const line of lines) {
|
|
39
|
-
if (line.startsWith('```')) {
|
|
40
|
-
if (inCodeBlock) {
|
|
41
|
-
// End of code block
|
|
42
|
-
codeBlocks.push({
|
|
43
|
-
language: currentLang,
|
|
44
|
-
code: currentCode.join('\n').trim(),
|
|
45
|
-
});
|
|
46
|
-
currentCode = [];
|
|
47
|
-
inCodeBlock = false;
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
// Start of code block
|
|
51
|
-
currentLang = line.slice(3).trim() || 'plaintext';
|
|
52
|
-
inCodeBlock = true;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
else if (inCodeBlock) {
|
|
56
|
-
currentCode.push(line);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
return codeBlocks;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Extracts plain text content (removes markdown formatting, code blocks, etc).
|
|
63
|
-
*/
|
|
64
|
-
function extractPlainContent(content) {
|
|
65
|
-
const lines = content.split('\n');
|
|
66
|
-
const plainLines = [];
|
|
67
|
-
let inCodeBlock = false;
|
|
68
|
-
for (const line of lines) {
|
|
69
|
-
// Skip code blocks
|
|
70
|
-
if (line.startsWith('```')) {
|
|
71
|
-
inCodeBlock = !inCodeBlock;
|
|
72
|
-
continue;
|
|
73
|
-
}
|
|
74
|
-
if (inCodeBlock) {
|
|
75
|
-
continue;
|
|
76
|
-
}
|
|
77
|
-
// Skip empty lines
|
|
78
|
-
if (!line.trim()) {
|
|
79
|
-
continue;
|
|
80
|
-
}
|
|
81
|
-
// Skip markdown headings (they're already captured)
|
|
82
|
-
if (/^#{1,6}\s+/.test(line)) {
|
|
83
|
-
continue;
|
|
84
|
-
}
|
|
85
|
-
// Skip horizontal rules
|
|
86
|
-
if (/^-{3,}\s*$/.test(line)) {
|
|
87
|
-
continue;
|
|
88
|
-
}
|
|
89
|
-
// Skip blockquotes with **Critical** or **Auto-generated** (already extracted)
|
|
90
|
-
if (line.includes('**Critical**:') || line.includes('**Auto-generated**:')) {
|
|
91
|
-
continue;
|
|
92
|
-
}
|
|
93
|
-
// Clean up other blockquotes
|
|
94
|
-
let cleaned = line.replace(/^>\s*/, '').trim();
|
|
95
|
-
// Remove bold/italic markers
|
|
96
|
-
cleaned = cleaned.replaceAll(/\*\*([^*]+)\*\*/g, '$1');
|
|
97
|
-
cleaned = cleaned.replaceAll(/\*([^*]+)\*/g, '$1');
|
|
98
|
-
// Remove inline code markers
|
|
99
|
-
cleaned = cleaned.replaceAll(/`([^`]+)`/g, '$1');
|
|
100
|
-
if (cleaned) {
|
|
101
|
-
plainLines.push(cleaned);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
return plainLines;
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Parses a section into structured data.
|
|
108
|
-
*/
|
|
109
|
-
function parseSection(content) {
|
|
110
|
-
const lines = content.split('\n');
|
|
111
|
-
const subsections = [];
|
|
112
|
-
const description = [];
|
|
113
|
-
const criticalNotices = [];
|
|
114
|
-
let title = '';
|
|
115
|
-
// Find all headings (both markdown # and **bold:** patterns)
|
|
116
|
-
const headings = [];
|
|
117
|
-
for (let i = 0; i < lines.length; i++) {
|
|
118
|
-
const line = lines[i];
|
|
119
|
-
if (!line) {
|
|
120
|
-
continue;
|
|
121
|
-
}
|
|
122
|
-
// Extract title from first heading
|
|
123
|
-
const h1Match = /^#\s+([^#]\S.*)$/.exec(line);
|
|
124
|
-
if (h1Match?.[1] && !title) {
|
|
125
|
-
title = h1Match[1].trim();
|
|
126
|
-
headings.push({ line: i, level: 1, title: h1Match[1].trim() });
|
|
127
|
-
continue;
|
|
128
|
-
}
|
|
129
|
-
// Extract subsections (##, ###, etc)
|
|
130
|
-
const hMatch = /^(#{2,6})\s+(\S.*)$/.exec(line);
|
|
131
|
-
if (hMatch?.[1] && hMatch[2]) {
|
|
132
|
-
const level = hMatch[1].length;
|
|
133
|
-
headings.push({ line: i, level, title: hMatch[2].trim() });
|
|
134
|
-
continue;
|
|
135
|
-
}
|
|
136
|
-
// Extract **Bold:** headings (treat as level 2)
|
|
137
|
-
const boldMatch = /^\*\*(.+):\*\*$/.exec(line);
|
|
138
|
-
if (boldMatch?.[1]) {
|
|
139
|
-
headings.push({ line: i, level: 2, title: `${boldMatch[1].trim()}:` });
|
|
140
|
-
}
|
|
141
|
-
// Extract critical notices
|
|
142
|
-
if (line.startsWith('> **Critical**:')) {
|
|
143
|
-
const notice = line.replace(/^>\s*\*\*Critical\*\*:\s*/, '').trim();
|
|
144
|
-
if (notice) {
|
|
145
|
-
criticalNotices.push(notice);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
// Extract description (content before first subsection)
|
|
150
|
-
if (headings.length > 0 && headings[0]) {
|
|
151
|
-
const firstSubsectionLine = headings.find((h) => h.level > 1)?.line;
|
|
152
|
-
const descEnd = firstSubsectionLine ?? lines.length;
|
|
153
|
-
const descContent = lines.slice(headings[0].line + 1, descEnd).join('\n');
|
|
154
|
-
description.push(...extractPlainContent(descContent));
|
|
155
|
-
}
|
|
156
|
-
// Parse subsections - group bold headings under level-3, level-3 under level-2
|
|
157
|
-
let currentSubsection = null;
|
|
158
|
-
let currentItem = null;
|
|
159
|
-
let currentGroup = null;
|
|
160
|
-
const pushCurrentItem = () => {
|
|
161
|
-
if (!currentItem || !currentSubsection) {
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
if (currentItem.content.length > 0 ||
|
|
165
|
-
currentItem.code ||
|
|
166
|
-
(currentItem.sections && currentItem.sections.length > 0)) {
|
|
167
|
-
currentSubsection.items = currentSubsection.items || [];
|
|
168
|
-
currentSubsection.items.push(currentItem);
|
|
169
|
-
}
|
|
170
|
-
currentItem = null;
|
|
171
|
-
};
|
|
172
|
-
const pushCurrentGroup = () => {
|
|
173
|
-
if (!currentGroup || !currentSubsection) {
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
|
-
if (currentGroup.content.length > 0 ||
|
|
177
|
-
(currentGroup.sections && currentGroup.sections.length > 0)) {
|
|
178
|
-
currentSubsection.items = currentSubsection.items || [];
|
|
179
|
-
currentSubsection.items.push(currentGroup);
|
|
180
|
-
}
|
|
181
|
-
currentGroup = null;
|
|
182
|
-
};
|
|
183
|
-
const addSectionToItem = (item, sectionItem, plainContent) => {
|
|
184
|
-
item.sections = item.sections || [];
|
|
185
|
-
item.sections.push(sectionItem);
|
|
186
|
-
if (plainContent.length > 0) {
|
|
187
|
-
item.content.push(...plainContent);
|
|
188
|
-
}
|
|
189
|
-
};
|
|
190
|
-
for (let i = 1; i < headings.length; i++) {
|
|
191
|
-
const current = headings[i];
|
|
192
|
-
if (!current) {
|
|
193
|
-
continue;
|
|
194
|
-
}
|
|
195
|
-
const start = current.line;
|
|
196
|
-
const end = headings[i + 1]?.line ?? lines.length;
|
|
197
|
-
const subsectionContent = lines.slice(start + 1, end).join('\n');
|
|
198
|
-
// Level 2 heading (##) - create new subsection
|
|
199
|
-
if (current.level === 2 && !current.title.endsWith(':')) {
|
|
200
|
-
// Save previous subsection and item (only if they have content)
|
|
201
|
-
pushCurrentItem();
|
|
202
|
-
pushCurrentGroup();
|
|
203
|
-
if (currentSubsection) {
|
|
204
|
-
// Only push if has content
|
|
205
|
-
if (currentSubsection.content.length > 0 ||
|
|
206
|
-
(currentSubsection.sections &&
|
|
207
|
-
currentSubsection.sections.length > 0) ||
|
|
208
|
-
(currentSubsection.items && currentSubsection.items.length > 0)) {
|
|
209
|
-
subsections.push(currentSubsection);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
const [block] = extractCodeBlocks(subsectionContent);
|
|
213
|
-
const subsectionSections = block
|
|
214
|
-
? [
|
|
215
|
-
{
|
|
216
|
-
section: current.title,
|
|
217
|
-
code: block.code,
|
|
218
|
-
},
|
|
219
|
-
]
|
|
220
|
-
: [];
|
|
221
|
-
currentSubsection = {
|
|
222
|
-
title: current.title,
|
|
223
|
-
content: extractPlainContent(subsectionContent),
|
|
224
|
-
sections: subsectionSections,
|
|
225
|
-
items: [],
|
|
226
|
-
};
|
|
227
|
-
}
|
|
228
|
-
// Level 3 heading (###) - create new nested item
|
|
229
|
-
else if (current.level === 3 && !current.title.endsWith(':')) {
|
|
230
|
-
const plainContent = extractPlainContent(subsectionContent);
|
|
231
|
-
const codeBlocks = extractCodeBlocks(subsectionContent);
|
|
232
|
-
const code = codeBlocks.length > 0 ? codeBlocks[0]?.code : undefined;
|
|
233
|
-
if (currentGroup && currentSubsection) {
|
|
234
|
-
const sectionItem = {
|
|
235
|
-
section: current.title,
|
|
236
|
-
code,
|
|
237
|
-
};
|
|
238
|
-
currentGroup.sections = currentGroup.sections || [];
|
|
239
|
-
currentGroup.sections.push(sectionItem);
|
|
240
|
-
if (plainContent.length > 0) {
|
|
241
|
-
currentGroup.content.push(...plainContent);
|
|
242
|
-
}
|
|
243
|
-
continue;
|
|
244
|
-
}
|
|
245
|
-
// Save previous item (only if it has content or sections)
|
|
246
|
-
pushCurrentItem();
|
|
247
|
-
currentItem = {
|
|
248
|
-
title: current.title,
|
|
249
|
-
content: plainContent,
|
|
250
|
-
...(code ? { code } : {}),
|
|
251
|
-
sections: [],
|
|
252
|
-
};
|
|
253
|
-
}
|
|
254
|
-
// Bold heading (ends with :) - add to current context
|
|
255
|
-
else if (current.title.endsWith(':')) {
|
|
256
|
-
const codeBlocks = extractCodeBlocks(subsectionContent);
|
|
257
|
-
const code = codeBlocks.length > 0 ? codeBlocks[0]?.code : undefined;
|
|
258
|
-
const plainContent = extractPlainContent(subsectionContent);
|
|
259
|
-
const nextHeading = headings[i + 1];
|
|
260
|
-
if (currentSubsection && !currentItem && nextHeading?.level === 3) {
|
|
261
|
-
pushCurrentGroup();
|
|
262
|
-
currentGroup = {
|
|
263
|
-
title: current.title.replace(/:\s*$/, ''),
|
|
264
|
-
content: plainContent,
|
|
265
|
-
...(code ? { code } : {}),
|
|
266
|
-
sections: [],
|
|
267
|
-
};
|
|
268
|
-
currentItem = null;
|
|
269
|
-
}
|
|
270
|
-
else {
|
|
271
|
-
const sectionItem = {
|
|
272
|
-
section: current.title,
|
|
273
|
-
code,
|
|
274
|
-
};
|
|
275
|
-
if (currentItem) {
|
|
276
|
-
addSectionToItem(currentItem, sectionItem, plainContent);
|
|
277
|
-
continue;
|
|
278
|
-
}
|
|
279
|
-
if (currentSubsection) {
|
|
280
|
-
currentSubsection.sections = currentSubsection.sections || [];
|
|
281
|
-
currentSubsection.sections.push(sectionItem);
|
|
282
|
-
continue;
|
|
283
|
-
}
|
|
284
|
-
// Standalone bold heading
|
|
285
|
-
subsections.push({
|
|
286
|
-
title: current.title,
|
|
287
|
-
content: plainContent,
|
|
288
|
-
sections: code ? [sectionItem] : undefined,
|
|
289
|
-
});
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
// Other headings - handle as needed
|
|
293
|
-
else {
|
|
294
|
-
pushCurrentItem();
|
|
295
|
-
pushCurrentGroup();
|
|
296
|
-
if (currentSubsection) {
|
|
297
|
-
subsections.push(currentSubsection);
|
|
298
|
-
currentSubsection = null;
|
|
299
|
-
}
|
|
300
|
-
const plainContent = extractPlainContent(subsectionContent);
|
|
301
|
-
const codeBlocks = extractCodeBlocks(subsectionContent);
|
|
302
|
-
subsections.push({
|
|
303
|
-
title: current.title,
|
|
304
|
-
content: plainContent,
|
|
305
|
-
sections: codeBlocks.length > 0
|
|
306
|
-
? [{ section: current.title, code: codeBlocks[0]?.code }]
|
|
307
|
-
: undefined,
|
|
308
|
-
});
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
// Push last item/group and subsection (only if they have content)
|
|
312
|
-
pushCurrentItem();
|
|
313
|
-
pushCurrentGroup();
|
|
314
|
-
if (currentSubsection) {
|
|
315
|
-
// Only push subsection if it has content, sections, or items
|
|
316
|
-
if (currentSubsection.content.length > 0 ||
|
|
317
|
-
(currentSubsection.sections && currentSubsection.sections.length > 0) ||
|
|
318
|
-
(currentSubsection.items && currentSubsection.items.length > 0)) {
|
|
319
|
-
subsections.push(currentSubsection);
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
// Special handling for .md files: if no subsections were created but there's code content
|
|
323
|
-
// (typical for installation guide files), create a subsection with the code
|
|
324
|
-
if (subsections.length === 0 && headings.length === 1 && headings[0]) {
|
|
325
|
-
// Get content after the title heading
|
|
326
|
-
const contentAfterTitle = lines.slice(headings[0].line + 1).join('\n');
|
|
327
|
-
const codeBlocks = extractCodeBlocks(contentAfterTitle);
|
|
328
|
-
if (codeBlocks.length > 0 && codeBlocks[0]) {
|
|
329
|
-
// Create a subsection with code directly in content
|
|
330
|
-
subsections.push({
|
|
331
|
-
title: '', // Empty title for direct code under h1
|
|
332
|
-
content: [codeBlocks[0].code], // Put code as single string in content
|
|
333
|
-
});
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
const descriptionText = description.join('\n');
|
|
337
|
-
return {
|
|
338
|
-
title,
|
|
339
|
-
description: descriptionText || '',
|
|
340
|
-
criticalNotices,
|
|
341
|
-
subsections,
|
|
342
|
-
};
|
|
343
|
-
}
|
|
344
|
-
/**
|
|
345
|
-
* Parses the header content into fully structured JSON.
|
|
346
|
-
*/
|
|
347
|
-
export function parseHeaderSections(headerContent) {
|
|
348
|
-
const lines = headerContent.split(/\r?\n/);
|
|
349
|
-
const sections = [];
|
|
350
|
-
const title = 'Taiga UI - Complete Documentation';
|
|
351
|
-
// Find main sections (level-1 headings)
|
|
352
|
-
const sectionIndices = [];
|
|
353
|
-
for (let i = 0; i < lines.length; i++) {
|
|
354
|
-
const line = lines[i];
|
|
355
|
-
if (!line) {
|
|
356
|
-
continue;
|
|
357
|
-
}
|
|
358
|
-
// Level-1 heading
|
|
359
|
-
const h1Match = /^#\s+([^#]\S.*)$/.exec(line);
|
|
360
|
-
if (h1Match?.[1]) {
|
|
361
|
-
sectionIndices.push({
|
|
362
|
-
line: i,
|
|
363
|
-
title: h1Match[1].trim(),
|
|
364
|
-
});
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
// Parse each section
|
|
368
|
-
for (let i = 0; i < sectionIndices.length; i++) {
|
|
369
|
-
const currentSection = sectionIndices[i];
|
|
370
|
-
if (!currentSection) {
|
|
371
|
-
continue;
|
|
372
|
-
}
|
|
373
|
-
const start = currentSection.line;
|
|
374
|
-
const end = sectionIndices[i + 1]?.line ?? lines.length;
|
|
375
|
-
const sectionContent = lines.slice(start, end).join('\n');
|
|
376
|
-
const parsedSection = parseSection(sectionContent);
|
|
377
|
-
sections.push(parsedSection);
|
|
378
|
-
}
|
|
379
|
-
const compactSections = sections.map((section) => {
|
|
380
|
-
const hasMarkdownSubsections = section.subsections.some((subsection) => subsection.title.endsWith('.md'));
|
|
381
|
-
if (!hasMarkdownSubsections) {
|
|
382
|
-
return section;
|
|
383
|
-
}
|
|
384
|
-
return {
|
|
385
|
-
...section,
|
|
386
|
-
subsections: section.subsections.map((subsection) => {
|
|
387
|
-
const redundantSingleCodeSection = subsection.content.length === 0 &&
|
|
388
|
-
!subsection.items?.length &&
|
|
389
|
-
subsection.sections?.length === 1 &&
|
|
390
|
-
subsection.sections[0]?.section === subsection.title &&
|
|
391
|
-
Boolean(subsection.sections[0].code);
|
|
392
|
-
if (!redundantSingleCodeSection) {
|
|
393
|
-
return subsection;
|
|
394
|
-
}
|
|
395
|
-
return {
|
|
396
|
-
title: subsection.title,
|
|
397
|
-
content: [subsection.sections?.[0]?.code ?? ''],
|
|
398
|
-
};
|
|
399
|
-
}),
|
|
400
|
-
};
|
|
401
|
-
});
|
|
402
|
-
return {
|
|
403
|
-
title,
|
|
404
|
-
sections: compactSections,
|
|
405
|
-
};
|
|
406
|
-
}
|
|
407
|
-
//# sourceMappingURL=extract-header.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"extract-header.js","sourceRoot":"","sources":["../../src/utils/extract-header.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import { state } from '../server/server.js';
|
|
2
|
-
const GENERIC_SUFFIXES = new Set([
|
|
3
|
-
'component',
|
|
4
|
-
'context',
|
|
5
|
-
'directive',
|
|
6
|
-
'guard',
|
|
7
|
-
'interceptor',
|
|
8
|
-
'module',
|
|
9
|
-
'options',
|
|
10
|
-
'pipe',
|
|
11
|
-
'service',
|
|
12
|
-
]);
|
|
13
|
-
function normalizeToKebab(name) {
|
|
14
|
-
const stripped = name.replace(/^[Tt]ui[-_]?/, '');
|
|
15
|
-
return stripped.replaceAll(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
|
|
16
|
-
}
|
|
17
|
-
export function findSection(name) {
|
|
18
|
-
const stripped = name.replace(/^[Tt]ui[-_]?/, '');
|
|
19
|
-
const kebab = normalizeToKebab(name);
|
|
20
|
-
// Last word of kebab: "icon-button" → "button" (useful for compound names like TuiIconButton)
|
|
21
|
-
// Exclude generic Angular suffixes that match too broadly
|
|
22
|
-
const kebabParts = kebab.split('-').filter(Boolean);
|
|
23
|
-
const lastWordCandidate = kebabParts.length > 1 ? (kebabParts[kebabParts.length - 1] ?? '') : '';
|
|
24
|
-
const lastWord = GENERIC_SUFFIXES.has(lastWordCandidate) ? '' : lastWordCandidate;
|
|
25
|
-
const pascalCase = (stripped || name)
|
|
26
|
-
.toLowerCase()
|
|
27
|
-
.split(/[-_\s]+/)
|
|
28
|
-
.filter(Boolean)
|
|
29
|
-
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
30
|
-
.join('');
|
|
31
|
-
const tuiVariant = pascalCase.startsWith('Tui') ? pascalCase : `Tui${pascalCase}`;
|
|
32
|
-
// All variants pre-lowercased to avoid repeated .toLowerCase() in loops
|
|
33
|
-
const variants = [
|
|
34
|
-
name.toLowerCase(),
|
|
35
|
-
stripped.toLowerCase(),
|
|
36
|
-
kebab,
|
|
37
|
-
lastWord,
|
|
38
|
-
pascalCase.toLowerCase(),
|
|
39
|
-
tuiVariant.toLowerCase(),
|
|
40
|
-
].filter(Boolean);
|
|
41
|
-
// Pre-compute per-section data once per call
|
|
42
|
-
const sections = state.sections.map((section) => ({
|
|
43
|
-
section,
|
|
44
|
-
id: section.id.toLowerCase(),
|
|
45
|
-
segment: section.id.split('/').pop()?.toLowerCase() ?? '',
|
|
46
|
-
}));
|
|
47
|
-
// Exact match
|
|
48
|
-
for (const variant of variants) {
|
|
49
|
-
const match = sections.find((s) => s.id === variant);
|
|
50
|
-
if (match) {
|
|
51
|
-
return match.section;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
// Last path segment match
|
|
55
|
-
for (const variant of variants) {
|
|
56
|
-
const match = sections.find((s) => s.segment === variant);
|
|
57
|
-
if (match) {
|
|
58
|
-
return match.section;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
// Ends-with match
|
|
62
|
-
for (const variant of variants) {
|
|
63
|
-
const match = sections.find((s) => s.id.endsWith(`/${variant}`));
|
|
64
|
-
if (match) {
|
|
65
|
-
return match.section;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
// Substring fallback — check all variants including stripped/kebab
|
|
69
|
-
for (const variant of variants) {
|
|
70
|
-
const match = sections.find((s) => s.id.includes(variant));
|
|
71
|
-
if (match) {
|
|
72
|
-
return match.section;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
return undefined;
|
|
76
|
-
}
|
|
77
|
-
export function suggestSections(query) {
|
|
78
|
-
const kebab = normalizeToKebab(query);
|
|
79
|
-
const parts = kebab
|
|
80
|
-
.split('-')
|
|
81
|
-
.filter((p) => !GENERIC_SUFFIXES.has(p) && p.length > 1);
|
|
82
|
-
// Try full kebab first, then without generic suffixes
|
|
83
|
-
const normalizedQuery = (parts.join('-') || kebab || query).toLowerCase();
|
|
84
|
-
const results = [];
|
|
85
|
-
for (const section of state.sections) {
|
|
86
|
-
const idLower = section.id.toLowerCase();
|
|
87
|
-
const matchIndex = idLower.indexOf(normalizedQuery);
|
|
88
|
-
if (matchIndex !== -1) {
|
|
89
|
-
results.push({
|
|
90
|
-
id: section.id,
|
|
91
|
-
score: matchIndex * 10 + Math.abs(idLower.length - normalizedQuery.length),
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
return results.sort((a, b) => a.score - b.score).map((r) => r.id);
|
|
96
|
-
}
|
|
97
|
-
//# sourceMappingURL=find-section.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"find-section.js","sourceRoot":"","sources":["../../src/utils/find-section.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { state } from '../server/server.js';
|
|
2
|
-
export function constructComponentsList(query = '') {
|
|
3
|
-
const normalizedQuery = query.toLowerCase().replace(/^tui/, '');
|
|
4
|
-
return state.sections
|
|
5
|
-
.filter((section) => !normalizedQuery || section.id.toLowerCase().includes(normalizedQuery))
|
|
6
|
-
.map((section) => {
|
|
7
|
-
const idParts = section.id.split('/');
|
|
8
|
-
const name = idParts[idParts.length - 1] ?? section.id;
|
|
9
|
-
const category = idParts[0] ?? '';
|
|
10
|
-
return {
|
|
11
|
-
id: section.id,
|
|
12
|
-
name,
|
|
13
|
-
category,
|
|
14
|
-
package: section.package ?? null,
|
|
15
|
-
type: section.kind ?? null,
|
|
16
|
-
};
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=list-components.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list-components.js","sourceRoot":"","sources":["../../src/utils/list-components.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,qBAAqB,CAAC;AAU1C,MAAM,UAAU,uBAAuB,CAAC,KAAK,GAAG,EAAE;IAC9C,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAEhE,OAAO,KAAK,CAAC,QAAQ;SAChB,MAAM,CACH,CAAC,OAAO,EAAE,EAAE,CACR,CAAC,eAAe,IAAI,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAC7E;SACA,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QACb,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC;QACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAElC,OAAO;YACH,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI;YACJ,QAAQ;YACR,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;YAChC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI;SAC7B,CAAC;IACN,CAAC,CAAC,CAAC;AACX,CAAC"}
|
package/dist/utils/logger.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
// In STDIO-based MCP servers can use only stderr for logging
|
|
2
|
-
// https://modelcontextprotocol.io/docs/develop/build-server#logging-in-mcp-servers
|
|
3
|
-
export function logError(message, err) {
|
|
4
|
-
const stack = err instanceof Error ? (err.stack ?? err.message) : String(err);
|
|
5
|
-
console.error(`[ERROR] ${message}: ${stack}`);
|
|
6
|
-
}
|
|
7
|
-
export function logInfo(message) {
|
|
8
|
-
console.warn(`[INFO] ${message}`);
|
|
9
|
-
}
|
|
10
|
-
//# sourceMappingURL=logger.js.map
|
package/dist/utils/logger.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,mFAAmF;AAEnF,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,GAAY;IAClD,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAE9E,OAAO,CAAC,KAAK,CAAC,WAAW,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAe;IACnC,OAAO,CAAC,IAAI,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { state } from '../server/server.js';
|
|
2
|
-
import { extractHeaderContent, findComponentsSectionStart } from './extract-header.js';
|
|
3
|
-
function extractMeta(text) {
|
|
4
|
-
let pkg;
|
|
5
|
-
let kind;
|
|
6
|
-
const pkgMatch = /\*\*Package\*\*:\s*`([^`]+)`/i.exec(text);
|
|
7
|
-
if (pkgMatch?.[1]) {
|
|
8
|
-
pkg = pkgMatch[1];
|
|
9
|
-
}
|
|
10
|
-
const typeMatch = /\*\*Type\*\*:\s*([^\n]+)/i.exec(text);
|
|
11
|
-
if (typeMatch?.[1]) {
|
|
12
|
-
kind = typeMatch[1].trim();
|
|
13
|
-
}
|
|
14
|
-
return { package: pkg, kind };
|
|
15
|
-
}
|
|
16
|
-
export function parseContent(rawContent, sourceUrl) {
|
|
17
|
-
state.sourceUrl = sourceUrl;
|
|
18
|
-
// Extract and store header separately
|
|
19
|
-
const headerContent = extractHeaderContent(rawContent);
|
|
20
|
-
state.overview = headerContent;
|
|
21
|
-
const lines = rawContent.split(/\r?\n/);
|
|
22
|
-
const componentsStartLine = findComponentsSectionStart(rawContent);
|
|
23
|
-
const headerIndices = [];
|
|
24
|
-
// Find all level-1 headings that are components (starting after the horizontal rule)
|
|
25
|
-
for (let lineIndex = componentsStartLine; lineIndex < lines.length; lineIndex++) {
|
|
26
|
-
const line = lines[lineIndex];
|
|
27
|
-
if (line === undefined) {
|
|
28
|
-
continue;
|
|
29
|
-
}
|
|
30
|
-
// Match level-1 headings for components (# ...)
|
|
31
|
-
const headerMatch = /^#\s+(\S.*)$/.exec(line);
|
|
32
|
-
if (headerMatch?.[1]) {
|
|
33
|
-
headerIndices.push({
|
|
34
|
-
line: lineIndex,
|
|
35
|
-
title: headerMatch[1].trim(),
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
state.sections = headerIndices.map((header, headerIndex) => {
|
|
40
|
-
const start = header.line;
|
|
41
|
-
const end = headerIndices[headerIndex + 1]?.line ?? lines.length;
|
|
42
|
-
const content = lines.slice(start, end).join('\n');
|
|
43
|
-
const meta = extractMeta(content);
|
|
44
|
-
return {
|
|
45
|
-
id: header.title,
|
|
46
|
-
title: header.title,
|
|
47
|
-
content,
|
|
48
|
-
package: meta.package,
|
|
49
|
-
kind: meta.kind,
|
|
50
|
-
};
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
//# sourceMappingURL=parse-content.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parse-content.js","sourceRoot":"","sources":["../../src/utils/parse-content.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAC,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAC,oBAAoB,EAAE,0BAA0B,EAAC,MAAM,qBAAqB,CAAC;AAErF,SAAS,WAAW,CAAC,IAAY;IAC7B,IAAI,GAAuB,CAAC;IAC5B,IAAI,IAAwB,CAAC;IAE7B,MAAM,QAAQ,GAAG,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE5D,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChB,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IAED,MAAM,SAAS,GAAG,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEzD,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjB,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,OAAO,EAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,UAAkB,EAAE,SAAiB;IAC9D,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IAE5B,sCAAsC;IACtC,MAAM,aAAa,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAEvD,KAAK,CAAC,QAAQ,GAAG,aAAa,CAAC;IAE/B,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,mBAAmB,GAAG,0BAA0B,CAAC,UAAU,CAAC,CAAC;IAEnE,MAAM,aAAa,GAAyC,EAAE,CAAC;IAE/D,qFAAqF;IACrF,KAAK,IAAI,SAAS,GAAG,mBAAmB,EAAE,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC;QAC9E,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QAE9B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACrB,SAAS;QACb,CAAC;QAED,gDAAgD;QAChD,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE9C,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnB,aAAa,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;aAC/B,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAc,EAAE;QACnE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;QAC1B,MAAM,GAAG,GAAG,aAAa,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC;QACjE,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QAElC,OAAO;YACH,EAAE,EAAE,MAAM,CAAC,KAAK;YAChB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,OAAO;YACP,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;SAClB,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { findSection, suggestSections } from './find-section.js';
|
|
2
|
-
export function extractContentSnippets(section) {
|
|
3
|
-
const text = section.content || '';
|
|
4
|
-
const trimmed = text.trim();
|
|
5
|
-
if (!trimmed) {
|
|
6
|
-
return [];
|
|
7
|
-
}
|
|
8
|
-
const cleaned = trimmed
|
|
9
|
-
.split(/\r?\n/)
|
|
10
|
-
.map((line) => line.replace(/^#{1,6}\s*/, ''))
|
|
11
|
-
.join('\n')
|
|
12
|
-
.trim();
|
|
13
|
-
return cleaned ? [cleaned] : [];
|
|
14
|
-
}
|
|
15
|
-
export function buildQueryResults(names) {
|
|
16
|
-
const results = [];
|
|
17
|
-
for (const queryName of names) {
|
|
18
|
-
const section = findSection(queryName);
|
|
19
|
-
if (!section) {
|
|
20
|
-
const notFound = {
|
|
21
|
-
query: queryName,
|
|
22
|
-
suggestions: suggestSections(queryName),
|
|
23
|
-
};
|
|
24
|
-
results.push(notFound);
|
|
25
|
-
continue;
|
|
26
|
-
}
|
|
27
|
-
const snippets = extractContentSnippets(section);
|
|
28
|
-
const foundResult = {
|
|
29
|
-
query: queryName,
|
|
30
|
-
id: section.id,
|
|
31
|
-
package: section.package ?? null,
|
|
32
|
-
type: section.kind ?? null,
|
|
33
|
-
};
|
|
34
|
-
if (snippets.length) {
|
|
35
|
-
foundResult.content = snippets;
|
|
36
|
-
}
|
|
37
|
-
results.push(foundResult);
|
|
38
|
-
}
|
|
39
|
-
const matches = results.filter((result) => !!result.id).length;
|
|
40
|
-
return { results, matches };
|
|
41
|
-
}
|
|
42
|
-
//# sourceMappingURL=query-results.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"query-results.js","sourceRoot":"","sources":["../../src/utils/query-results.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAE,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAE/D,MAAM,UAAU,sBAAsB,CAAC,OAAmB;IACtD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAE5B,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,OAAO;SAClB,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;SAC7C,IAAI,CAAC,IAAI,CAAC;SACV,IAAI,EAAE,CAAC;IAEZ,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAe;IAI7C,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;QAEvC,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,MAAM,QAAQ,GAAgB;gBAC1B,KAAK,EAAE,SAAS;gBAChB,WAAW,EAAE,eAAe,CAAC,SAAS,CAAC;aAC1C,CAAC;YAEF,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAEvB,SAAS;QACb,CAAC;QAED,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAEjD,MAAM,WAAW,GAAgB;YAC7B,KAAK,EAAE,SAAS;YAChB,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;YAChC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI;SAC7B,CAAC;QAEF,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YAClB,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;QACnC,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;IAE/D,OAAO,EAAC,OAAO,EAAE,OAAO,EAAC,CAAC;AAC9B,CAAC"}
|