@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 CHANGED
@@ -30,10 +30,38 @@ npm install -g @metrostar/comet-mcp
30
30
 
31
31
  ## Available Tools
32
32
 
33
- | Tool | Description | Parameters |
34
- | ------------------- | ------------------------------------------------------ | ------------------------------------------------------------------------------- |
35
- | `get_comet_version` | Get the current version of Comet Packages and Versions | None |
36
- | `init_project` | Initialize a new Comet project (UI or API) | `type`: Project type ("ui" or "api")<br>`name`: Project name and directory name |
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.0.0',
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
- // eslint-disable-next-line no-console
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
- // eslint-disable-next-line no-console
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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
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
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,GAAG;;;CAAc,CAAC;AAC/B,eAAO,MAAM,KAAK;;;CAAgB,CAAC;AAEnC,eAAO,MAAM,wBAAwB,GAAI,MAAM,MAAM,WAEpD,CAAC"}
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
- export const log = console.log;
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,GAAG,CAAC;AAC/B,MAAM,CAAC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;AAEnC,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,IAAY,EAAE,EAAE;IACvD,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;AAChE,CAAC,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}