@metrostar/comet-mcp 1.0.0 → 1.1.0
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 +32 -4
- package/dist/index.js +167 -6
- package/dist/index.js.map +1 -1
- package/dist/utils.d.ts +43 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +198 -1
- package/dist/utils.js.map +1 -1
- package/dist/utils.test.js +1076 -2
- package/dist/utils.test.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -30,10 +30,38 @@ npm install -g @metrostar/comet-mcp
|
|
|
30
30
|
|
|
31
31
|
## Available Tools
|
|
32
32
|
|
|
33
|
-
| Tool
|
|
34
|
-
|
|
|
35
|
-
| `
|
|
36
|
-
| `
|
|
33
|
+
| Tool | Description | Parameters |
|
|
34
|
+
| ----------------------- | ------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------- |
|
|
35
|
+
| `init_project` | Initialize a new Comet project (UI or API) | `type`: Project type ("ui" or "api")<br>`name`: Project name and directory name |
|
|
36
|
+
| `get_comet_version` | Get the current version of Comet Packages and Versions | None |
|
|
37
|
+
| `list_components` | Get a list of all available Comet components | `package`: Filter by package ("all", "comet-uswds", "comet-extras", "comet-data-viz") - optional, defaults to "all" |
|
|
38
|
+
| `get_component_details` | Get detailed information about a specific component | `componentName`: The name of the component to get details for (required) |
|
|
39
|
+
| `get_env_variables` | Get current Node.js environment variables | `filter`: Optional filter to search for specific variables (case-insensitive) |
|
|
40
|
+
|
|
41
|
+
### Component Tools
|
|
42
|
+
|
|
43
|
+
The `list_components` tool provides a comprehensive list of all components available across the three main Comet packages:
|
|
44
|
+
|
|
45
|
+
- **@metrostar/comet-uswds**: Core USWDS-based components
|
|
46
|
+
- **@metrostar/comet-extras**: Additional utility components
|
|
47
|
+
- **@metrostar/comet-data-viz**: Data visualization components
|
|
48
|
+
|
|
49
|
+
The `get_component_details` tool provides detailed information about a specific component including:
|
|
50
|
+
|
|
51
|
+
- Package information
|
|
52
|
+
- Component description (from JSDoc comments)
|
|
53
|
+
- File path location
|
|
54
|
+
- Available props (extracted from TypeScript interfaces)
|
|
55
|
+
- Exported types and interfaces
|
|
56
|
+
|
|
57
|
+
### Environment Variables Tool
|
|
58
|
+
|
|
59
|
+
The `get_env_variables` tool helps inspect the current Node.js environment variables:
|
|
60
|
+
|
|
61
|
+
- **Filtering**: Use the `filter` parameter to search for specific variables by name (case-insensitive)
|
|
62
|
+
- **Truncation**: Long values are truncated to 100 characters for readability
|
|
63
|
+
|
|
64
|
+
This tool is useful for debugging environment configuration, checking if required variables are set, and understanding the runtime environment.
|
|
37
65
|
|
|
38
66
|
## Running the Project Locally
|
|
39
67
|
|
package/dist/index.js
CHANGED
|
@@ -7,11 +7,11 @@ import path from 'path';
|
|
|
7
7
|
import { exec } from 'child_process';
|
|
8
8
|
import { promisify } from 'util';
|
|
9
9
|
import { API_REPO_URL, PROJECT_TYPES, UI_REPO_URL } from './constants.js';
|
|
10
|
-
import { log } from './utils.js';
|
|
10
|
+
import { log, getComponentsFromPackage, getComponentDetails } from './utils.js';
|
|
11
11
|
const execAsync = promisify(exec);
|
|
12
12
|
const server = new Server({
|
|
13
13
|
name: 'comet-mcp',
|
|
14
|
-
version: '1.
|
|
14
|
+
version: '1.1.0',
|
|
15
15
|
}, {
|
|
16
16
|
capabilities: {
|
|
17
17
|
tools: {},
|
|
@@ -48,6 +48,47 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
48
48
|
required: ['type', 'name'],
|
|
49
49
|
},
|
|
50
50
|
},
|
|
51
|
+
{
|
|
52
|
+
name: 'list_components',
|
|
53
|
+
description: 'Get a list of all available Comet components from comet-uswds, comet-extras, and comet-data-viz packages',
|
|
54
|
+
inputSchema: {
|
|
55
|
+
type: 'object',
|
|
56
|
+
properties: {
|
|
57
|
+
package: {
|
|
58
|
+
type: 'string',
|
|
59
|
+
enum: ['all', 'comet-uswds', 'comet-extras', 'comet-data-viz'],
|
|
60
|
+
description: 'Filter components by package (default: all)',
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
name: 'get_component_details',
|
|
67
|
+
description: 'Get detailed information about a specific Comet component',
|
|
68
|
+
inputSchema: {
|
|
69
|
+
type: 'object',
|
|
70
|
+
properties: {
|
|
71
|
+
componentName: {
|
|
72
|
+
type: 'string',
|
|
73
|
+
description: 'The name of the component to get details for',
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
required: ['componentName'],
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
name: 'get_env_variables',
|
|
81
|
+
description: 'Get current Node.js environment variables',
|
|
82
|
+
inputSchema: {
|
|
83
|
+
type: 'object',
|
|
84
|
+
properties: {
|
|
85
|
+
filter: {
|
|
86
|
+
type: 'string',
|
|
87
|
+
description: 'Optional filter to search for specific environment variables (case-insensitive)',
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
},
|
|
51
92
|
],
|
|
52
93
|
};
|
|
53
94
|
});
|
|
@@ -128,6 +169,128 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
128
169
|
],
|
|
129
170
|
};
|
|
130
171
|
}
|
|
172
|
+
case 'list_components': {
|
|
173
|
+
const { package: packageFilter = 'all' } = args;
|
|
174
|
+
const cometUswdsComponents = getComponentsFromPackage('@metrostar/comet-uswds');
|
|
175
|
+
const cometExtrasComponents = getComponentsFromPackage('@metrostar/comet-extras');
|
|
176
|
+
const cometDataVizComponents = getComponentsFromPackage('@metrostar/comet-data-viz');
|
|
177
|
+
let result = '';
|
|
178
|
+
if (packageFilter === 'all' || packageFilter === 'comet-uswds') {
|
|
179
|
+
result += `## @metrostar/comet-uswds (${cometUswdsComponents.length} components)\n`;
|
|
180
|
+
result += cometUswdsComponents.map((component) => `- ${component}`).join('\n');
|
|
181
|
+
result += '\n\n';
|
|
182
|
+
}
|
|
183
|
+
if (packageFilter === 'all' || packageFilter === 'comet-extras') {
|
|
184
|
+
result += `## @metrostar/comet-extras (${cometExtrasComponents.length} components)\n`;
|
|
185
|
+
result += cometExtrasComponents.map((component) => `- ${component}`).join('\n');
|
|
186
|
+
result += '\n\n';
|
|
187
|
+
}
|
|
188
|
+
if (packageFilter === 'all' || packageFilter === 'comet-data-viz') {
|
|
189
|
+
result += `## @metrostar/comet-data-viz (${cometDataVizComponents.length} components)\n`;
|
|
190
|
+
result += cometDataVizComponents.map((component) => `- ${component}`).join('\n');
|
|
191
|
+
result += '\n\n';
|
|
192
|
+
}
|
|
193
|
+
if (packageFilter === 'all') {
|
|
194
|
+
const totalComponents = cometUswdsComponents.length +
|
|
195
|
+
cometExtrasComponents.length +
|
|
196
|
+
cometDataVizComponents.length;
|
|
197
|
+
result = `# Comet Components (${totalComponents} total)\n\n${result}`;
|
|
198
|
+
}
|
|
199
|
+
return {
|
|
200
|
+
content: [
|
|
201
|
+
{
|
|
202
|
+
type: 'text',
|
|
203
|
+
text: result.trim(),
|
|
204
|
+
},
|
|
205
|
+
],
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
case 'get_component_details': {
|
|
209
|
+
const { componentName } = args;
|
|
210
|
+
const details = getComponentDetails(componentName);
|
|
211
|
+
if (!details) {
|
|
212
|
+
return {
|
|
213
|
+
content: [
|
|
214
|
+
{
|
|
215
|
+
type: 'text',
|
|
216
|
+
text: `Component "${componentName}" not found in any Comet package.`,
|
|
217
|
+
},
|
|
218
|
+
],
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
let result = `# ${details.name}\n\n`;
|
|
222
|
+
result += `**Package:** ${details.package}\n\n`;
|
|
223
|
+
if (details.description) {
|
|
224
|
+
result += `**Description:** ${details.description}\n\n`;
|
|
225
|
+
}
|
|
226
|
+
if (details.filePath) {
|
|
227
|
+
result += `**File Path:** ${details.filePath}\n\n`;
|
|
228
|
+
}
|
|
229
|
+
if (details.props && details.props.length > 0) {
|
|
230
|
+
result += `**Props:** (${details.props.length})\n`;
|
|
231
|
+
result += details.props.map((prop) => `- ${prop}`).join('\n');
|
|
232
|
+
result += '\n\n';
|
|
233
|
+
}
|
|
234
|
+
if (details.types && details.types.length > 0) {
|
|
235
|
+
result += `**Exported Types:** (${details.types.length})\n`;
|
|
236
|
+
result += details.types.map((type) => `- ${type}`).join('\n');
|
|
237
|
+
result += '\n\n';
|
|
238
|
+
}
|
|
239
|
+
return {
|
|
240
|
+
content: [
|
|
241
|
+
{
|
|
242
|
+
type: 'text',
|
|
243
|
+
text: result.trim(),
|
|
244
|
+
},
|
|
245
|
+
],
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
case 'get_env_variables': {
|
|
249
|
+
const { filter } = args;
|
|
250
|
+
const envVars = process.env;
|
|
251
|
+
const filteredVars = {};
|
|
252
|
+
Object.keys(envVars).forEach((key) => {
|
|
253
|
+
const value = envVars[key];
|
|
254
|
+
// Skip undefined values
|
|
255
|
+
if (value === undefined)
|
|
256
|
+
return;
|
|
257
|
+
// Filter by search term if provided
|
|
258
|
+
if (filter && !key.toLowerCase().includes(filter.toLowerCase())) {
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
filteredVars[key] = value;
|
|
262
|
+
});
|
|
263
|
+
const sortedKeys = Object.keys(filteredVars).sort();
|
|
264
|
+
if (sortedKeys.length === 0) {
|
|
265
|
+
const filterText = filter ? ` matching "${filter}"` : '';
|
|
266
|
+
return {
|
|
267
|
+
content: [
|
|
268
|
+
{
|
|
269
|
+
type: 'text',
|
|
270
|
+
text: `No environment variables found${filterText}.`,
|
|
271
|
+
},
|
|
272
|
+
],
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
let result = `# Environment Variables (${sortedKeys.length} found)\n\n`;
|
|
276
|
+
if (filter) {
|
|
277
|
+
result += `**Filter:** "${filter}"\n\n`;
|
|
278
|
+
}
|
|
279
|
+
sortedKeys.forEach((key) => {
|
|
280
|
+
const value = filteredVars[key];
|
|
281
|
+
// Truncate very long values for readability
|
|
282
|
+
const displayValue = value.length > 100 ? `${value.substring(0, 100)}...` : value;
|
|
283
|
+
result += `**${key}:** \`${displayValue}\`\n\n`;
|
|
284
|
+
});
|
|
285
|
+
return {
|
|
286
|
+
content: [
|
|
287
|
+
{
|
|
288
|
+
type: 'text',
|
|
289
|
+
text: result.trim(),
|
|
290
|
+
},
|
|
291
|
+
],
|
|
292
|
+
};
|
|
293
|
+
}
|
|
131
294
|
default:
|
|
132
295
|
throw new Error(`Unknown tool: ${name}`);
|
|
133
296
|
}
|
|
@@ -149,12 +312,10 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
149
312
|
async function main() {
|
|
150
313
|
const transport = new StdioServerTransport();
|
|
151
314
|
await server.connect(transport);
|
|
152
|
-
//
|
|
153
|
-
console.error('Comet MCP server running on stdio');
|
|
315
|
+
log('Comet MCP server running on stdio'); // Now uses stderr via updated log function
|
|
154
316
|
}
|
|
155
317
|
main().catch((error) => {
|
|
156
|
-
|
|
157
|
-
console.error('Server failed to start:', error);
|
|
318
|
+
log('Server failed to start:', error);
|
|
158
319
|
process.exit(1);
|
|
159
320
|
});
|
|
160
321
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GAEvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GAEvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,GAAG,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEhF,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;IACE,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,OAAO;CACjB,EACD;IACE,YAAY,EAAE;QACZ,KAAK,EAAE,EAAE;KACV;CACF,CACF,CAAC;AAEF,mBAAmB;AACnB,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;IAC1D,OAAO;QACL,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,mBAAmB;gBACzB,WAAW,EAAE,8DAA8D;gBAC3E,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,EAAE;iBACf;aACF;YACD;gBACE,IAAI,EAAE,cAAc;gBACpB,WAAW,EAAE,4CAA4C;gBACzD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,IAAI,EAAE;4BACJ,IAAI,EAAE,QAAQ;4BACd,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC;4BACnB,WAAW,EAAE,uCAAuC;yBACrD;wBACD,IAAI,EAAE;4BACJ,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,iCAAiC;yBAC/C;qBACF;oBACD,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;iBAC3B;aACF;YACD;gBACE,IAAI,EAAE,iBAAiB;gBACvB,WAAW,EACT,0GAA0G;gBAC5G,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,OAAO,EAAE;4BACP,IAAI,EAAE,QAAQ;4BACd,IAAI,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,CAAC;4BAC9D,WAAW,EAAE,6CAA6C;yBAC3D;qBACF;iBACF;aACF;YACD;gBACE,IAAI,EAAE,uBAAuB;gBAC7B,WAAW,EAAE,2DAA2D;gBACxE,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,aAAa,EAAE;4BACb,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,8CAA8C;yBAC5D;qBACF;oBACD,QAAQ,EAAE,CAAC,eAAe,CAAC;iBAC5B;aACF;YACD;gBACE,IAAI,EAAE,mBAAmB;gBACzB,WAAW,EAAE,2CAA2C;gBACxD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,MAAM,EAAE;4BACN,IAAI,EAAE,QAAQ;4BACd,WAAW,EACT,iFAAiF;yBACpF;qBACF;iBACF;aACF;SACF;KACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,uBAAuB;AACvB,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAwB,EAAE,EAAE;IACjF,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAEjD,IAAI,CAAC;QACH,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,mBAAmB,CAAC,CAAC,CAAC;gBACzB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;gBAC7D,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;gBAE9D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;oBACpC,MAAM,IAAI,KAAK,CAAC,+CAA+C,UAAU,EAAE,CAAC,CAAC;gBAC/E,CAAC;gBAED,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;gBACzE,MAAM,YAAY,GAAG,EAAE,GAAG,WAAW,CAAC,YAAY,EAAE,GAAG,WAAW,CAAC,eAAe,EAAE,CAAC;gBAErF,MAAM,aAAa,GAAG;oBACpB,wBAAwB;oBACxB,yBAAyB;oBACzB,2BAA2B;iBAC5B,CAAC;gBAEF,MAAM,WAAW,GAA2B,EAAE,CAAC;gBAC/C,IAAI,aAAa,GAAG,CAAC,CAAC;gBAEtB,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;oBAC5B,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;wBACtB,WAAW,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;wBACrC,aAAa,EAAE,CAAC;oBAClB,CAAC;gBACH,CAAC,CAAC,CAAC;gBAEH,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;oBACxB,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,sEAAsE,UAAU,EAAE;6BACzF;yBACF;qBACF,CAAC;gBACJ,CAAC;gBAED,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;qBAC5C,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,OAAO,EAAE,CAAC;qBAC7C,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEd,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,gCAAgC,UAAU,OAAO,WAAW,EAAE;yBACrE;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,cAAc,CAAC,CAAC,CAAC;gBACpB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,IAAsC,CAAC;gBAE3E,GAAG,CAAC,uCAAuC,IAAI,cAAc,WAAW,EAAE,CAAC,CAAC;gBAE5E,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC/B,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;gBAC/C,CAAC;gBAED,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBAClC,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;gBAC3C,CAAC;gBAED,GAAG,CAAC,mCAAmC,CAAC,CAAC;gBACzC,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;gBAC1B,GAAG,CAAC,qCAAqC,CAAC,CAAC;gBAE3C,MAAM,OAAO,GACX,IAAI,KAAK,IAAI;oBACX,CAAC,CAAC,aAAa,WAAW,IAAI,WAAW,EAAE;oBAC3C,CAAC,CAAC,aAAa,YAAY,IAAI,WAAW,EAAE,CAAC;gBAEjD,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;gBAEzB,6DAA6D;gBAC7D,MAAM,iBAAiB,GAAG,MAAM,WAAW,4EAA4E,CAAC;gBACxH,MAAM,SAAS,CAAC,iBAAiB,CAAC,CAAC;gBAEnC,GAAG,CAAC,0DAA0D,CAAC,CAAC;gBAEhE,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,4BAA4B,IAAI,aAAa,WAAW,EAAE;yBACjE;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,KAAK,EAAE,GAAG,IAA4B,CAAC;gBAExE,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,wBAAwB,CAAC,CAAC;gBAChF,MAAM,qBAAqB,GAAG,wBAAwB,CAAC,yBAAyB,CAAC,CAAC;gBAClF,MAAM,sBAAsB,GAAG,wBAAwB,CAAC,2BAA2B,CAAC,CAAC;gBAErF,IAAI,MAAM,GAAG,EAAE,CAAC;gBAEhB,IAAI,aAAa,KAAK,KAAK,IAAI,aAAa,KAAK,aAAa,EAAE,CAAC;oBAC/D,MAAM,IAAI,8BAA8B,oBAAoB,CAAC,MAAM,gBAAgB,CAAC;oBACpF,MAAM,IAAI,oBAAoB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC/E,MAAM,IAAI,MAAM,CAAC;gBACnB,CAAC;gBAED,IAAI,aAAa,KAAK,KAAK,IAAI,aAAa,KAAK,cAAc,EAAE,CAAC;oBAChE,MAAM,IAAI,+BAA+B,qBAAqB,CAAC,MAAM,gBAAgB,CAAC;oBACtF,MAAM,IAAI,qBAAqB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAChF,MAAM,IAAI,MAAM,CAAC;gBACnB,CAAC;gBAED,IAAI,aAAa,KAAK,KAAK,IAAI,aAAa,KAAK,gBAAgB,EAAE,CAAC;oBAClE,MAAM,IAAI,iCAAiC,sBAAsB,CAAC,MAAM,gBAAgB,CAAC;oBACzF,MAAM,IAAI,sBAAsB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACjF,MAAM,IAAI,MAAM,CAAC;gBACnB,CAAC;gBAED,IAAI,aAAa,KAAK,KAAK,EAAE,CAAC;oBAC5B,MAAM,eAAe,GACnB,oBAAoB,CAAC,MAAM;wBAC3B,qBAAqB,CAAC,MAAM;wBAC5B,sBAAsB,CAAC,MAAM,CAAC;oBAChC,MAAM,GAAG,uBAAuB,eAAe,cAAc,MAAM,EAAE,CAAC;gBACxE,CAAC;gBAED,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;yBACpB;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,uBAAuB,CAAC,CAAC,CAAC;gBAC7B,MAAM,EAAE,aAAa,EAAE,GAAG,IAAiC,CAAC;gBAE5D,MAAM,OAAO,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC;gBAEnD,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,cAAc,aAAa,mCAAmC;6BACrE;yBACF;qBACF,CAAC;gBACJ,CAAC;gBAED,IAAI,MAAM,GAAG,KAAK,OAAO,CAAC,IAAI,MAAM,CAAC;gBACrC,MAAM,IAAI,gBAAgB,OAAO,CAAC,OAAO,MAAM,CAAC;gBAEhD,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;oBACxB,MAAM,IAAI,oBAAoB,OAAO,CAAC,WAAW,MAAM,CAAC;gBAC1D,CAAC;gBAED,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;oBACrB,MAAM,IAAI,kBAAkB,OAAO,CAAC,QAAQ,MAAM,CAAC;gBACrD,CAAC;gBAED,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC9C,MAAM,IAAI,eAAe,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;oBACnD,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC9D,MAAM,IAAI,MAAM,CAAC;gBACnB,CAAC;gBAED,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC9C,MAAM,IAAI,wBAAwB,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;oBAC5D,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC9D,MAAM,IAAI,MAAM,CAAC;gBACnB,CAAC;gBAED,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;yBACpB;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,mBAAmB,CAAC,CAAC,CAAC;gBACzB,MAAM,EAAE,MAAM,EAAE,GAAG,IAElB,CAAC;gBAEF,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;gBAC5B,MAAM,YAAY,GAA2B,EAAE,CAAC;gBAEhD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;oBACnC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;oBAE3B,wBAAwB;oBACxB,IAAI,KAAK,KAAK,SAAS;wBAAE,OAAO;oBAEhC,oCAAoC;oBACpC,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;wBAChE,OAAO;oBACT,CAAC;oBAED,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBAC5B,CAAC,CAAC,CAAC;gBAEH,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC;gBAEpD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,cAAc,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzD,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,iCAAiC,UAAU,GAAG;6BACrD;yBACF;qBACF,CAAC;gBACJ,CAAC;gBAED,IAAI,MAAM,GAAG,4BAA4B,UAAU,CAAC,MAAM,aAAa,CAAC;gBAExE,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,IAAI,gBAAgB,MAAM,OAAO,CAAC;gBAC1C,CAAC;gBAED,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;oBACzB,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;oBAChC,4CAA4C;oBAC5C,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;oBAClF,MAAM,IAAI,KAAK,GAAG,SAAS,YAAY,QAAQ,CAAC;gBAClD,CAAC,CAAC,CAAC;gBAEH,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;yBACpB;qBACF;iBACF,CAAC;YACJ,CAAC;YAED;gBACE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,YAAY,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACtE,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,UAAU,YAAY,EAAE;iBAC/B;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,mBAAmB;AACnB,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAC,2CAA2C;AACvF,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,GAAG,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -7,4 +7,47 @@ export declare const error: {
|
|
|
7
7
|
(message?: any, ...optionalParams: any[]): void;
|
|
8
8
|
};
|
|
9
9
|
export declare const getFriendlyDirectoryName: (name: string) => string;
|
|
10
|
+
/**
|
|
11
|
+
* Gets components from a Comet package by reading its source files
|
|
12
|
+
* @param packageName - The package name (e.g., '@metrostar/comet-uswds')
|
|
13
|
+
* @returns Array of component names found in the package
|
|
14
|
+
*/
|
|
15
|
+
export declare const getComponentsFromPackage: (packageName: string) => string[];
|
|
16
|
+
/**
|
|
17
|
+
* Component details interface
|
|
18
|
+
*/
|
|
19
|
+
export interface ComponentDetails {
|
|
20
|
+
name: string;
|
|
21
|
+
package: string;
|
|
22
|
+
description?: string;
|
|
23
|
+
props?: string[];
|
|
24
|
+
types?: string[];
|
|
25
|
+
filePath?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Gets detailed information about a specific Comet component
|
|
29
|
+
* @param componentName - The component name to search for
|
|
30
|
+
* @returns Component details or null if not found
|
|
31
|
+
*/
|
|
32
|
+
export declare const getComponentDetails: (componentName: string) => ComponentDetails | null;
|
|
33
|
+
/**
|
|
34
|
+
* Finds the component directory based on the component name
|
|
35
|
+
*/
|
|
36
|
+
export declare const findComponentDirectory: (packagePath: string, componentName: string, isLocalDev: boolean) => string | null;
|
|
37
|
+
/**
|
|
38
|
+
* Finds the main component file
|
|
39
|
+
*/
|
|
40
|
+
export declare const findComponentFile: (componentDir: string, componentName: string, isLocalDev: boolean) => string | null;
|
|
41
|
+
/**
|
|
42
|
+
* Extracts JSDoc description from component file
|
|
43
|
+
*/
|
|
44
|
+
export declare const extractJSDocDescription: (content: string) => string | undefined;
|
|
45
|
+
/**
|
|
46
|
+
* Extracts prop names from TypeScript interface definitions
|
|
47
|
+
*/
|
|
48
|
+
export declare const extractProps: (content: string) => string[];
|
|
49
|
+
/**
|
|
50
|
+
* Extracts exported type names from the file
|
|
51
|
+
*/
|
|
52
|
+
export declare const extractTypes: (content: string) => string[];
|
|
10
53
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,GAAG;;;CAAgB,CAAC;AACjC,eAAO,MAAM,KAAK;;;CAAgB,CAAC;AAEnC,eAAO,MAAM,wBAAwB,GAAI,MAAM,MAAM,WAEpD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,GAAI,aAAa,MAAM,KAAG,MAAM,EAqDpE,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAI,eAAe,MAAM,KAAG,gBAAgB,GAAG,IA2D9E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,GACjC,aAAa,MAAM,EACnB,eAAe,MAAM,EACrB,YAAY,OAAO,KAClB,MAAM,GAAG,IAsBX,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAC5B,cAAc,MAAM,EACpB,eAAe,MAAM,EACrB,YAAY,OAAO,KAClB,MAAM,GAAG,IAgBX,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,uBAAuB,GAAI,SAAS,MAAM,KAAG,MAAM,GAAG,SAOlE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,KAAG,MAAM,EAoBpD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,KAAG,MAAM,EAcpD,CAAC"}
|
package/dist/utils.js
CHANGED
|
@@ -1,7 +1,204 @@
|
|
|
1
1
|
/* eslint-disable no-console */
|
|
2
|
-
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
export const log = console.error; // Use stderr for logging in MCP servers
|
|
3
5
|
export const error = console.error;
|
|
4
6
|
export const getFriendlyDirectoryName = (name) => {
|
|
5
7
|
return name.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
|
|
6
8
|
};
|
|
9
|
+
/**
|
|
10
|
+
* Gets components from a Comet package by reading its source files
|
|
11
|
+
* @param packageName - The package name (e.g., '@metrostar/comet-uswds')
|
|
12
|
+
* @returns Array of component names found in the package
|
|
13
|
+
*/
|
|
14
|
+
export const getComponentsFromPackage = (packageName) => {
|
|
15
|
+
try {
|
|
16
|
+
const currentDir = process.env.PROJECT_ROOT || process.cwd();
|
|
17
|
+
// Try to find the package in the monorepo structure
|
|
18
|
+
const packagePath = path.join(currentDir, 'node_modules', packageName);
|
|
19
|
+
if (!fs.existsSync(packagePath)) {
|
|
20
|
+
log(`Package ${packageName} not found at ${packagePath}`);
|
|
21
|
+
return [];
|
|
22
|
+
}
|
|
23
|
+
// Read the source index.ts file to get component exports
|
|
24
|
+
const sourceIndexPath = path.join(packagePath, 'dist', 'index.d.ts');
|
|
25
|
+
if (!fs.existsSync(sourceIndexPath)) {
|
|
26
|
+
log(`Source index file not found for ${packageName}: ${sourceIndexPath}`);
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
// Read the source index file and extract export statements
|
|
30
|
+
const indexContent = fs.readFileSync(sourceIndexPath, 'utf8');
|
|
31
|
+
const components = [];
|
|
32
|
+
// Match export patterns like "export { default as ComponentName }"
|
|
33
|
+
const defaultExportMatches = indexContent.match(/export\s*{\s*default\s+as\s+(\w+)/g) || [];
|
|
34
|
+
defaultExportMatches.forEach((match) => {
|
|
35
|
+
const componentName = match.match(/as\s+(\w+)/)?.[1];
|
|
36
|
+
if (componentName) {
|
|
37
|
+
components.push(componentName);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
// Match export patterns like "export { ComponentName, OtherComponent }"
|
|
41
|
+
const namedExportMatches = indexContent.match(/export\s*{\s*([^}]+)\s*}/g) || [];
|
|
42
|
+
namedExportMatches.forEach((match) => {
|
|
43
|
+
const exportContent = match.replace(/export\s*{\s*/, '').replace(/\s*}/, '');
|
|
44
|
+
const exports = exportContent.split(',').map((exp) => {
|
|
45
|
+
// Clean up the export name, handling "default as Name" patterns
|
|
46
|
+
const cleaned = exp
|
|
47
|
+
.trim()
|
|
48
|
+
.replace(/default\s+as\s+/, '')
|
|
49
|
+
.replace(/\s+as\s+\w+/, '');
|
|
50
|
+
return cleaned;
|
|
51
|
+
});
|
|
52
|
+
components.push(...exports.filter(Boolean));
|
|
53
|
+
});
|
|
54
|
+
return [...new Set(components)].sort();
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
log(`Error reading package ${packageName}:`, error);
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Gets detailed information about a specific Comet component
|
|
63
|
+
* @param componentName - The component name to search for
|
|
64
|
+
* @returns Component details or null if not found
|
|
65
|
+
*/
|
|
66
|
+
export const getComponentDetails = (componentName) => {
|
|
67
|
+
try {
|
|
68
|
+
const currentDir = process.env.PROJECT_ROOT || process.cwd();
|
|
69
|
+
const packages = [
|
|
70
|
+
'@metrostar/comet-uswds',
|
|
71
|
+
'@metrostar/comet-extras',
|
|
72
|
+
'@metrostar/comet-data-viz',
|
|
73
|
+
];
|
|
74
|
+
for (const packageName of packages) {
|
|
75
|
+
const components = getComponentsFromPackage(packageName);
|
|
76
|
+
if (components.includes(componentName)) {
|
|
77
|
+
const packageShortName = packageName.replace('@metrostar/', '');
|
|
78
|
+
// Try to find the component in the monorepo structure
|
|
79
|
+
let packagePath = path.join(currentDir, 'node_modules', packageName);
|
|
80
|
+
let isLocalDev = false;
|
|
81
|
+
if (!fs.existsSync(packagePath)) {
|
|
82
|
+
packagePath = path.join(currentDir, 'packages', packageShortName);
|
|
83
|
+
isLocalDev = true;
|
|
84
|
+
}
|
|
85
|
+
if (!fs.existsSync(packagePath)) {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
// Look for component directory
|
|
89
|
+
const componentDir = findComponentDirectory(packagePath, componentName, isLocalDev);
|
|
90
|
+
if (!componentDir) {
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
const details = {
|
|
94
|
+
name: componentName,
|
|
95
|
+
package: packageName,
|
|
96
|
+
filePath: componentDir,
|
|
97
|
+
};
|
|
98
|
+
// Try to extract description and props from the component file
|
|
99
|
+
const componentFile = findComponentFile(componentDir, componentName, isLocalDev);
|
|
100
|
+
if (componentFile) {
|
|
101
|
+
const fileContent = fs.readFileSync(componentFile, 'utf8');
|
|
102
|
+
details.description = extractJSDocDescription(fileContent);
|
|
103
|
+
details.props = extractProps(fileContent);
|
|
104
|
+
details.types = extractTypes(fileContent);
|
|
105
|
+
}
|
|
106
|
+
return details;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
log(`Error getting component details for ${componentName}:`, error);
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* Finds the component directory based on the component name
|
|
118
|
+
*/
|
|
119
|
+
export const findComponentDirectory = (packagePath, componentName, isLocalDev) => {
|
|
120
|
+
if (isLocalDev) {
|
|
121
|
+
// In local development, look in src/components
|
|
122
|
+
const componentsDir = path.join(packagePath, 'src', 'components');
|
|
123
|
+
if (!fs.existsSync(componentsDir))
|
|
124
|
+
return null;
|
|
125
|
+
const dirs = fs
|
|
126
|
+
.readdirSync(componentsDir, { withFileTypes: true })
|
|
127
|
+
.filter((dirent) => dirent.isDirectory())
|
|
128
|
+
.map((dirent) => dirent.name);
|
|
129
|
+
// Look for exact match or kebab-case version
|
|
130
|
+
const kebabName = componentName.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
|
|
131
|
+
const matchingDir = dirs.find((dir) => dir === kebabName || dir === componentName.toLowerCase() || dir === componentName);
|
|
132
|
+
return matchingDir ? path.join(componentsDir, matchingDir) : null;
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
// In node_modules, components might be in different structure
|
|
136
|
+
return packagePath;
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
/**
|
|
140
|
+
* Finds the main component file
|
|
141
|
+
*/
|
|
142
|
+
export const findComponentFile = (componentDir, componentName, isLocalDev) => {
|
|
143
|
+
if (isLocalDev) {
|
|
144
|
+
const possibleFiles = [
|
|
145
|
+
path.join(componentDir, 'index.tsx'),
|
|
146
|
+
path.join(componentDir, `${componentName}.tsx`),
|
|
147
|
+
path.join(componentDir, `${componentName.toLowerCase()}.tsx`),
|
|
148
|
+
];
|
|
149
|
+
for (const file of possibleFiles) {
|
|
150
|
+
if (fs.existsSync(file)) {
|
|
151
|
+
return file;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return null;
|
|
156
|
+
};
|
|
157
|
+
/**
|
|
158
|
+
* Extracts JSDoc description from component file
|
|
159
|
+
*/
|
|
160
|
+
export const extractJSDocDescription = (content) => {
|
|
161
|
+
const jsdocMatch = content.match(/\/\*\*\s*\n\s*\*\s*([^\n*@]+)/);
|
|
162
|
+
if (jsdocMatch) {
|
|
163
|
+
const description = jsdocMatch[1].trim();
|
|
164
|
+
return description.length > 0 ? description : undefined;
|
|
165
|
+
}
|
|
166
|
+
return undefined;
|
|
167
|
+
};
|
|
168
|
+
/**
|
|
169
|
+
* Extracts prop names from TypeScript interface definitions
|
|
170
|
+
*/
|
|
171
|
+
export const extractProps = (content) => {
|
|
172
|
+
const props = [];
|
|
173
|
+
// Look for interface definitions
|
|
174
|
+
const interfaceMatches = content.match(/interface\s+\w*Props\s*{([^}]+)}/g) || [];
|
|
175
|
+
interfaceMatches.forEach((match) => {
|
|
176
|
+
const propsBlock = match.match(/{([^}]+)}/)?.[1];
|
|
177
|
+
if (propsBlock) {
|
|
178
|
+
const propLines = propsBlock.split('\n');
|
|
179
|
+
propLines.forEach((line) => {
|
|
180
|
+
const propMatch = line.trim().match(/^(\w+)[?:]?\s*:/);
|
|
181
|
+
if (propMatch) {
|
|
182
|
+
props.push(propMatch[1]);
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
return [...new Set(props)].sort();
|
|
188
|
+
};
|
|
189
|
+
/**
|
|
190
|
+
* Extracts exported type names from the file
|
|
191
|
+
*/
|
|
192
|
+
export const extractTypes = (content) => {
|
|
193
|
+
const types = [];
|
|
194
|
+
// Look for exported types and interfaces
|
|
195
|
+
const typeMatches = content.match(/export\s+(?:type|interface)\s+(\w+)/g) || [];
|
|
196
|
+
typeMatches.forEach((match) => {
|
|
197
|
+
const typeName = match.match(/(?:type|interface)\s+(\w+)/)?.[1];
|
|
198
|
+
if (typeName) {
|
|
199
|
+
types.push(typeName);
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
return types.sort();
|
|
203
|
+
};
|
|
7
204
|
//# sourceMappingURL=utils.js.map
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAE/B,MAAM,CAAC,MAAM,GAAG,GAAG,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|