mozaic-mcp-server 1.0.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/INSTALLATION.md +232 -0
- package/README.md +262 -0
- package/SKILLS.md +411 -0
- package/bin/install-skills.js +171 -0
- package/data/mozaic.db +0 -0
- package/data/mozaic.db-shm +0 -0
- package/data/mozaic.db-wal +0 -0
- package/dist/__tests__/sanity-check.test.d.ts +2 -0
- package/dist/__tests__/sanity-check.test.d.ts.map +1 -0
- package/dist/__tests__/sanity-check.test.js +167 -0
- package/dist/__tests__/sanity-check.test.js.map +1 -0
- package/dist/__tests__/tools.integration.test.d.ts +2 -0
- package/dist/__tests__/tools.integration.test.d.ts.map +1 -0
- package/dist/__tests__/tools.integration.test.js +220 -0
- package/dist/__tests__/tools.integration.test.js.map +1 -0
- package/dist/db/queries.d.ts +144 -0
- package/dist/db/queries.d.ts.map +1 -0
- package/dist/db/queries.js +536 -0
- package/dist/db/queries.js.map +1 -0
- package/dist/db/schema.d.ts +4 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +253 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +416 -0
- package/dist/index.js.map +1 -0
- package/dist/parsers/__tests__/docs-parser.test.d.ts +2 -0
- package/dist/parsers/__tests__/docs-parser.test.d.ts.map +1 -0
- package/dist/parsers/__tests__/docs-parser.test.js +251 -0
- package/dist/parsers/__tests__/docs-parser.test.js.map +1 -0
- package/dist/parsers/__tests__/icons-parser.test.d.ts +2 -0
- package/dist/parsers/__tests__/icons-parser.test.d.ts.map +1 -0
- package/dist/parsers/__tests__/icons-parser.test.js +169 -0
- package/dist/parsers/__tests__/icons-parser.test.js.map +1 -0
- package/dist/parsers/__tests__/react-parser.test.d.ts +2 -0
- package/dist/parsers/__tests__/react-parser.test.d.ts.map +1 -0
- package/dist/parsers/__tests__/react-parser.test.js +274 -0
- package/dist/parsers/__tests__/react-parser.test.js.map +1 -0
- package/dist/parsers/__tests__/scss-parser.test.d.ts +2 -0
- package/dist/parsers/__tests__/scss-parser.test.d.ts.map +1 -0
- package/dist/parsers/__tests__/scss-parser.test.js +364 -0
- package/dist/parsers/__tests__/scss-parser.test.js.map +1 -0
- package/dist/parsers/__tests__/tokens-parser.test.d.ts +2 -0
- package/dist/parsers/__tests__/tokens-parser.test.d.ts.map +1 -0
- package/dist/parsers/__tests__/tokens-parser.test.js +172 -0
- package/dist/parsers/__tests__/tokens-parser.test.js.map +1 -0
- package/dist/parsers/__tests__/vue-parser.test.d.ts +2 -0
- package/dist/parsers/__tests__/vue-parser.test.d.ts.map +1 -0
- package/dist/parsers/__tests__/vue-parser.test.js +207 -0
- package/dist/parsers/__tests__/vue-parser.test.js.map +1 -0
- package/dist/parsers/docs-parser.d.ts +4 -0
- package/dist/parsers/docs-parser.d.ts.map +1 -0
- package/dist/parsers/docs-parser.js +237 -0
- package/dist/parsers/docs-parser.js.map +1 -0
- package/dist/parsers/icons-parser.d.ts +33 -0
- package/dist/parsers/icons-parser.d.ts.map +1 -0
- package/dist/parsers/icons-parser.js +125 -0
- package/dist/parsers/icons-parser.js.map +1 -0
- package/dist/parsers/react-parser.d.ts +3 -0
- package/dist/parsers/react-parser.d.ts.map +1 -0
- package/dist/parsers/react-parser.js +406 -0
- package/dist/parsers/react-parser.js.map +1 -0
- package/dist/parsers/scss-parser.d.ts +9 -0
- package/dist/parsers/scss-parser.d.ts.map +1 -0
- package/dist/parsers/scss-parser.js +351 -0
- package/dist/parsers/scss-parser.js.map +1 -0
- package/dist/parsers/tokens/border-parser.d.ts +3 -0
- package/dist/parsers/tokens/border-parser.d.ts.map +1 -0
- package/dist/parsers/tokens/border-parser.js +83 -0
- package/dist/parsers/tokens/border-parser.js.map +1 -0
- package/dist/parsers/tokens/color-parser.d.ts +3 -0
- package/dist/parsers/tokens/color-parser.d.ts.map +1 -0
- package/dist/parsers/tokens/color-parser.js +88 -0
- package/dist/parsers/tokens/color-parser.js.map +1 -0
- package/dist/parsers/tokens/grid-parser.d.ts +3 -0
- package/dist/parsers/tokens/grid-parser.d.ts.map +1 -0
- package/dist/parsers/tokens/grid-parser.js +97 -0
- package/dist/parsers/tokens/grid-parser.js.map +1 -0
- package/dist/parsers/tokens/index.d.ts +9 -0
- package/dist/parsers/tokens/index.d.ts.map +1 -0
- package/dist/parsers/tokens/index.js +10 -0
- package/dist/parsers/tokens/index.js.map +1 -0
- package/dist/parsers/tokens/screen-parser.d.ts +3 -0
- package/dist/parsers/tokens/screen-parser.d.ts.map +1 -0
- package/dist/parsers/tokens/screen-parser.js +54 -0
- package/dist/parsers/tokens/screen-parser.js.map +1 -0
- package/dist/parsers/tokens/shadow-parser.d.ts +3 -0
- package/dist/parsers/tokens/shadow-parser.d.ts.map +1 -0
- package/dist/parsers/tokens/shadow-parser.js +62 -0
- package/dist/parsers/tokens/shadow-parser.js.map +1 -0
- package/dist/parsers/tokens/spacing-parser.d.ts +4 -0
- package/dist/parsers/tokens/spacing-parser.d.ts.map +1 -0
- package/dist/parsers/tokens/spacing-parser.js +85 -0
- package/dist/parsers/tokens/spacing-parser.js.map +1 -0
- package/dist/parsers/tokens/types.d.ts +33 -0
- package/dist/parsers/tokens/types.d.ts.map +1 -0
- package/dist/parsers/tokens/types.js +42 -0
- package/dist/parsers/tokens/types.js.map +1 -0
- package/dist/parsers/tokens/typography-parser.d.ts +3 -0
- package/dist/parsers/tokens/typography-parser.d.ts.map +1 -0
- package/dist/parsers/tokens/typography-parser.js +76 -0
- package/dist/parsers/tokens/typography-parser.js.map +1 -0
- package/dist/parsers/tokens-parser.d.ts +18 -0
- package/dist/parsers/tokens-parser.d.ts.map +1 -0
- package/dist/parsers/tokens-parser.js +57 -0
- package/dist/parsers/tokens-parser.js.map +1 -0
- package/dist/parsers/vue-parser.d.ts +3 -0
- package/dist/parsers/vue-parser.d.ts.map +1 -0
- package/dist/parsers/vue-parser.js +343 -0
- package/dist/parsers/vue-parser.js.map +1 -0
- package/dist/tools/generate-react-component.d.ts +35 -0
- package/dist/tools/generate-react-component.d.ts.map +1 -0
- package/dist/tools/generate-react-component.js +81 -0
- package/dist/tools/generate-react-component.js.map +1 -0
- package/dist/tools/generate-vue-component.d.ts +35 -0
- package/dist/tools/generate-vue-component.d.ts.map +1 -0
- package/dist/tools/generate-vue-component.js +81 -0
- package/dist/tools/generate-vue-component.js.map +1 -0
- package/dist/tools/get-component-info.d.ts +52 -0
- package/dist/tools/get-component-info.d.ts.map +1 -0
- package/dist/tools/get-component-info.js +94 -0
- package/dist/tools/get-component-info.js.map +1 -0
- package/dist/tools/get-css-utility.d.ts +41 -0
- package/dist/tools/get-css-utility.d.ts.map +1 -0
- package/dist/tools/get-css-utility.js +57 -0
- package/dist/tools/get-css-utility.js.map +1 -0
- package/dist/tools/get-design-tokens.d.ts +44 -0
- package/dist/tools/get-design-tokens.d.ts.map +1 -0
- package/dist/tools/get-design-tokens.js +124 -0
- package/dist/tools/get-design-tokens.js.map +1 -0
- package/dist/tools/get-icon.d.ts +32 -0
- package/dist/tools/get-icon.d.ts.map +1 -0
- package/dist/tools/get-icon.js +108 -0
- package/dist/tools/get-icon.js.map +1 -0
- package/dist/tools/get-install-info.d.ts +39 -0
- package/dist/tools/get-install-info.d.ts.map +1 -0
- package/dist/tools/get-install-info.js +160 -0
- package/dist/tools/get-install-info.js.map +1 -0
- package/dist/tools/list-components.d.ts +32 -0
- package/dist/tools/list-components.d.ts.map +1 -0
- package/dist/tools/list-components.js +62 -0
- package/dist/tools/list-components.js.map +1 -0
- package/dist/tools/list-css-utilities.d.ts +27 -0
- package/dist/tools/list-css-utilities.d.ts.map +1 -0
- package/dist/tools/list-css-utilities.js +48 -0
- package/dist/tools/list-css-utilities.js.map +1 -0
- package/dist/tools/search-documentation.d.ts +37 -0
- package/dist/tools/search-documentation.d.ts.map +1 -0
- package/dist/tools/search-documentation.js +120 -0
- package/dist/tools/search-documentation.js.map +1 -0
- package/dist/tools/search-icons.d.ts +41 -0
- package/dist/tools/search-icons.d.ts.map +1 -0
- package/dist/tools/search-icons.js +134 -0
- package/dist/tools/search-icons.js.map +1 -0
- package/package.json +98 -0
- package/skills/mozaic-css-utilities/skill.md +633 -0
- package/skills/mozaic-design-tokens/skill.md +621 -0
- package/skills/mozaic-icons/skill.md +624 -0
- package/skills/mozaic-react-builder/skill.md +652 -0
- package/skills/mozaic-vue-builder/skill.md +491 -0
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
import { readFileSync, existsSync, readdirSync, statSync } from "fs";
|
|
2
|
+
import { join, basename } from "path";
|
|
3
|
+
// Extract const arrays like: const sizes = ['s', 'm', 'l'] as const
|
|
4
|
+
function extractConstArrays(content) {
|
|
5
|
+
const constArrays = new Map();
|
|
6
|
+
// Match: const sizes = ['s', 'm', 'l'] as const
|
|
7
|
+
const constRegex = /const\s+(\w+)\s*=\s*\[([^\]]+)\]\s*as\s+const/g;
|
|
8
|
+
let match;
|
|
9
|
+
while ((match = constRegex.exec(content)) !== null) {
|
|
10
|
+
const name = match[1];
|
|
11
|
+
const values = match[2]
|
|
12
|
+
.split(",")
|
|
13
|
+
.map((s) => s.trim().replace(/['"]/g, ""))
|
|
14
|
+
.filter((s) => s.length > 0);
|
|
15
|
+
constArrays.set(name, values);
|
|
16
|
+
}
|
|
17
|
+
return constArrays;
|
|
18
|
+
}
|
|
19
|
+
// Extract props from a types file content
|
|
20
|
+
function extractPropsFromInterface(content, interfaceName, constArrays, allInterfaces) {
|
|
21
|
+
const props = [];
|
|
22
|
+
const seenProps = new Set();
|
|
23
|
+
// Find the target interface
|
|
24
|
+
const interfaceRegex = new RegExp(`interface\\s+${interfaceName}\\s*(?:extends\\s+([^{]+))?\\s*\\{([\\s\\S]*?)\\}`, "g");
|
|
25
|
+
const match = interfaceRegex.exec(content);
|
|
26
|
+
if (!match)
|
|
27
|
+
return props;
|
|
28
|
+
const extendsClause = match[1];
|
|
29
|
+
const interfaceBody = match[2];
|
|
30
|
+
// First, recursively get props from extended interfaces
|
|
31
|
+
if (extendsClause) {
|
|
32
|
+
const extendedInterfaces = extendsClause
|
|
33
|
+
.split(",")
|
|
34
|
+
.map((s) => s.trim().replace(/<[^>]+>/, "")) // Remove generics like Omit<...>
|
|
35
|
+
.filter((s) => s.length > 0 && !s.startsWith("Omit") && !s.includes("HTMLAttributes"));
|
|
36
|
+
for (const extInterface of extendedInterfaces) {
|
|
37
|
+
const extProps = extractPropsFromInterface(content, extInterface, constArrays, allInterfaces);
|
|
38
|
+
for (const prop of extProps) {
|
|
39
|
+
if (!seenProps.has(prop.name)) {
|
|
40
|
+
seenProps.add(prop.name);
|
|
41
|
+
props.push(prop);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Parse props from this interface
|
|
47
|
+
const propRegex = /(\w+)(\?)?:\s*([^;\n]+)/g;
|
|
48
|
+
let propMatch;
|
|
49
|
+
while ((propMatch = propRegex.exec(interfaceBody)) !== null) {
|
|
50
|
+
const propName = propMatch[1];
|
|
51
|
+
const isOptional = !!propMatch[2];
|
|
52
|
+
const propType = propMatch[3].trim();
|
|
53
|
+
// Skip already seen, callbacks, children
|
|
54
|
+
if (seenProps.has(propName))
|
|
55
|
+
continue;
|
|
56
|
+
if (propType.includes("=>") || propName.startsWith("on"))
|
|
57
|
+
continue;
|
|
58
|
+
if (propName === "children" || propName === "className")
|
|
59
|
+
continue;
|
|
60
|
+
seenProps.add(propName);
|
|
61
|
+
// Check if type references a const array type (e.g., TButtonSize)
|
|
62
|
+
let options;
|
|
63
|
+
const typeRefMatch = propType.match(/^T(\w+)$/);
|
|
64
|
+
if (typeRefMatch) {
|
|
65
|
+
// Look for corresponding const array (e.g., TButtonSize -> sizes)
|
|
66
|
+
const typeName = typeRefMatch[1].toLowerCase();
|
|
67
|
+
for (const [constName, values] of constArrays) {
|
|
68
|
+
if (typeName.includes(constName.toLowerCase())) {
|
|
69
|
+
options = values;
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Handle inline union types
|
|
75
|
+
if (propType.includes("|") && propType.includes("'")) {
|
|
76
|
+
options = propType
|
|
77
|
+
.split("|")
|
|
78
|
+
.map((s) => s.trim().replace(/['"]/g, ""))
|
|
79
|
+
.filter((s) => s && s !== "undefined");
|
|
80
|
+
}
|
|
81
|
+
props.push({
|
|
82
|
+
name: propName,
|
|
83
|
+
type: propType,
|
|
84
|
+
required: !isOptional,
|
|
85
|
+
options: options && options.length > 1 ? options : undefined,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
return props;
|
|
89
|
+
}
|
|
90
|
+
// Extract props from React component - checks both inline and external .types.ts files
|
|
91
|
+
function extractProps(content, componentDir) {
|
|
92
|
+
let props = [];
|
|
93
|
+
// First try to find imported Props type and load external types file
|
|
94
|
+
if (componentDir) {
|
|
95
|
+
// Match: import { IButtonProps } from './Button.types'
|
|
96
|
+
const importMatch = content.match(/import\s*\{[^}]*?(I\w*Props)\s*[^}]*\}\s*from\s*['"]\.\/(\w+)\.types['"]/);
|
|
97
|
+
if (importMatch) {
|
|
98
|
+
const propsInterface = importMatch[1];
|
|
99
|
+
const typesFileName = importMatch[2];
|
|
100
|
+
const typesFilePath = join(componentDir, `${typesFileName}.types.ts`);
|
|
101
|
+
if (existsSync(typesFilePath)) {
|
|
102
|
+
try {
|
|
103
|
+
const typesContent = readFileSync(typesFilePath, "utf-8");
|
|
104
|
+
const constArrays = extractConstArrays(typesContent);
|
|
105
|
+
const allInterfaces = new Map();
|
|
106
|
+
props = extractPropsFromInterface(typesContent, propsInterface, constArrays, allInterfaces);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// Fall through to inline extraction
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// Fallback: extract from inline interfaces in the component file
|
|
115
|
+
if (props.length === 0) {
|
|
116
|
+
const interfacePatterns = [
|
|
117
|
+
/interface\s+\w*Props\w*\s*(?:extends[^{]+)?{([\s\S]*?)}/g,
|
|
118
|
+
/type\s+\w*Props\w*\s*=\s*{([\s\S]*?)}/g,
|
|
119
|
+
];
|
|
120
|
+
for (const pattern of interfacePatterns) {
|
|
121
|
+
let interfaceMatch;
|
|
122
|
+
while ((interfaceMatch = pattern.exec(content)) !== null) {
|
|
123
|
+
const interfaceContent = interfaceMatch[1];
|
|
124
|
+
const propRegex = /(\w+)(\?)?:\s*([^;\n]+)/g;
|
|
125
|
+
let match;
|
|
126
|
+
while ((match = propRegex.exec(interfaceContent)) !== null) {
|
|
127
|
+
const propName = match[1];
|
|
128
|
+
const isOptional = !!match[2];
|
|
129
|
+
const propType = match[3].trim();
|
|
130
|
+
if (propType.includes("=>") || propName.startsWith("on"))
|
|
131
|
+
continue;
|
|
132
|
+
if (propName === "children")
|
|
133
|
+
continue;
|
|
134
|
+
if (propType.includes("|")) {
|
|
135
|
+
const options = propType
|
|
136
|
+
.split("|")
|
|
137
|
+
.map((s) => s.trim().replace(/['"]/g, ""))
|
|
138
|
+
.filter((s) => s && s !== "undefined");
|
|
139
|
+
props.push({
|
|
140
|
+
name: propName,
|
|
141
|
+
type: "string",
|
|
142
|
+
required: !isOptional,
|
|
143
|
+
options: options.length > 1 ? options : undefined,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
props.push({
|
|
148
|
+
name: propName,
|
|
149
|
+
type: propType.toLowerCase(),
|
|
150
|
+
required: !isOptional,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return props;
|
|
158
|
+
}
|
|
159
|
+
// Extract callback props as events
|
|
160
|
+
function extractCallbacks(content) {
|
|
161
|
+
const events = [];
|
|
162
|
+
const seenEvents = new Set();
|
|
163
|
+
// Match callback props: onSomething?: (args) => void
|
|
164
|
+
const callbackPatterns = [
|
|
165
|
+
/(\bon[A-Z]\w*)\??:\s*\([^)]*\)\s*=>\s*\w+/g,
|
|
166
|
+
/(\bon[A-Z]\w*)\??:\s*\w*EventHandler/g,
|
|
167
|
+
];
|
|
168
|
+
for (const pattern of callbackPatterns) {
|
|
169
|
+
let match;
|
|
170
|
+
while ((match = pattern.exec(content)) !== null) {
|
|
171
|
+
const eventName = match[1];
|
|
172
|
+
if (!seenEvents.has(eventName)) {
|
|
173
|
+
seenEvents.add(eventName);
|
|
174
|
+
events.push({
|
|
175
|
+
name: eventName,
|
|
176
|
+
description: `${eventName.replace(/^on/, "")} event callback`,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return events;
|
|
182
|
+
}
|
|
183
|
+
// Check if component accepts children
|
|
184
|
+
function hasChildrenProp(content) {
|
|
185
|
+
return (content.includes("children") ||
|
|
186
|
+
content.includes("PropsWithChildren") ||
|
|
187
|
+
content.includes("ReactNode"));
|
|
188
|
+
}
|
|
189
|
+
// Extract CSS classes from component
|
|
190
|
+
function extractCssClasses(content) {
|
|
191
|
+
const classes = [];
|
|
192
|
+
const seenClasses = new Set();
|
|
193
|
+
// Match mc- prefixed classes (Mozaic convention)
|
|
194
|
+
const classRegex = /['"`](mc-[a-z0-9-]+)['"`]/g;
|
|
195
|
+
let match;
|
|
196
|
+
while ((match = classRegex.exec(content)) !== null) {
|
|
197
|
+
if (!seenClasses.has(match[1])) {
|
|
198
|
+
seenClasses.add(match[1]);
|
|
199
|
+
classes.push(match[1]);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return classes;
|
|
203
|
+
}
|
|
204
|
+
function parseReactFile(filePath, componentDir) {
|
|
205
|
+
try {
|
|
206
|
+
const content = readFileSync(filePath, "utf-8");
|
|
207
|
+
const fileName = basename(filePath, ".tsx");
|
|
208
|
+
// Also try to extract callbacks from types file
|
|
209
|
+
let callbacks = extractCallbacks(content);
|
|
210
|
+
const typesFilePath = join(componentDir, `${fileName}.types.ts`);
|
|
211
|
+
if (existsSync(typesFilePath)) {
|
|
212
|
+
const typesContent = readFileSync(typesFilePath, "utf-8");
|
|
213
|
+
callbacks = [...callbacks, ...extractCallbacks(typesContent)];
|
|
214
|
+
}
|
|
215
|
+
return {
|
|
216
|
+
name: fileName,
|
|
217
|
+
props: extractProps(content, componentDir),
|
|
218
|
+
callbacks,
|
|
219
|
+
hasChildren: hasChildrenProp(content),
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
catch (error) {
|
|
223
|
+
console.warn(`Warning: Could not parse ${filePath}:`, error);
|
|
224
|
+
return null;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
// Parse storybook stories for examples
|
|
228
|
+
function parseStoriesFile(filePath) {
|
|
229
|
+
const examples = [];
|
|
230
|
+
try {
|
|
231
|
+
const content = readFileSync(filePath, "utf-8");
|
|
232
|
+
// First, find all exported story names
|
|
233
|
+
const exportedStories = [];
|
|
234
|
+
const exportRegex = /export\s+const\s+(\w+)\s*=/g;
|
|
235
|
+
let exportMatch;
|
|
236
|
+
while ((exportMatch = exportRegex.exec(content)) !== null) {
|
|
237
|
+
const storyName = exportMatch[1];
|
|
238
|
+
// Skip default export and non-story exports
|
|
239
|
+
if (storyName !== "default" && storyName !== "Default" && /^[A-Z]/.test(storyName)) {
|
|
240
|
+
exportedStories.push(storyName);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
// For each story, find its args (React CSF format: StoryName.args = {...})
|
|
244
|
+
for (const storyName of exportedStories) {
|
|
245
|
+
// Match StoryName.args = {...} - handle nested objects with balanced braces
|
|
246
|
+
const argsPattern = new RegExp(`${storyName}\\.args\\s*=\\s*\\{([^}]*(?:\\{[^}]*\\}[^}]*)*)\\}`, "s");
|
|
247
|
+
const argsMatch = content.match(argsPattern);
|
|
248
|
+
if (argsMatch) {
|
|
249
|
+
examples.push({
|
|
250
|
+
title: storyName.replace(/([A-Z])/g, " $1").trim(),
|
|
251
|
+
code: argsMatch[1].trim(),
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
// Also try inline args format: export const Story = { args: {...} }
|
|
256
|
+
const inlineArgsRegex = /export\s+const\s+(\w+)\s*=\s*\{[\s\S]*?args\s*:\s*\{([^}]*)\}/g;
|
|
257
|
+
let match;
|
|
258
|
+
while ((match = inlineArgsRegex.exec(content)) !== null) {
|
|
259
|
+
const storyName = match[1];
|
|
260
|
+
const args = match[2];
|
|
261
|
+
// Skip Default story and already captured stories
|
|
262
|
+
if (storyName !== "Default" && !exportedStories.includes(storyName)) {
|
|
263
|
+
examples.push({
|
|
264
|
+
title: storyName.replace(/([A-Z])/g, " $1").trim(),
|
|
265
|
+
code: args.trim(),
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
// Also try to extract render functions
|
|
270
|
+
const renderRegex = /render\s*:\s*\([^)]*\)\s*=>\s*(<[\s\S]*?>)/g;
|
|
271
|
+
while ((match = renderRegex.exec(content)) !== null) {
|
|
272
|
+
examples.push({
|
|
273
|
+
title: "Example",
|
|
274
|
+
code: match[1].trim(),
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
catch (error) {
|
|
279
|
+
console.warn(`Warning: Could not parse stories ${filePath}:`, error);
|
|
280
|
+
}
|
|
281
|
+
return examples;
|
|
282
|
+
}
|
|
283
|
+
function findComponentDirs(baseDir) {
|
|
284
|
+
const dirs = [];
|
|
285
|
+
if (!existsSync(baseDir)) {
|
|
286
|
+
return dirs;
|
|
287
|
+
}
|
|
288
|
+
const entries = readdirSync(baseDir);
|
|
289
|
+
for (const entry of entries) {
|
|
290
|
+
const fullPath = join(baseDir, entry);
|
|
291
|
+
const stat = statSync(fullPath);
|
|
292
|
+
// React components typically use PascalCase directory names
|
|
293
|
+
if (stat.isDirectory() && /^[A-Z]/.test(entry)) {
|
|
294
|
+
dirs.push(fullPath);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return dirs;
|
|
298
|
+
}
|
|
299
|
+
// Component category mapping based on name patterns
|
|
300
|
+
function inferCategory(componentName) {
|
|
301
|
+
const name = componentName.toLowerCase();
|
|
302
|
+
if (["button", "link", "optionbutton", "optioncard"].some((n) => name.includes(n))) {
|
|
303
|
+
return "action";
|
|
304
|
+
}
|
|
305
|
+
if ([
|
|
306
|
+
"input",
|
|
307
|
+
"select",
|
|
308
|
+
"checkbox",
|
|
309
|
+
"radio",
|
|
310
|
+
"toggle",
|
|
311
|
+
"textarea",
|
|
312
|
+
"field",
|
|
313
|
+
"autocomplete",
|
|
314
|
+
"datepicker",
|
|
315
|
+
"dropdown",
|
|
316
|
+
"fileuploader",
|
|
317
|
+
"password",
|
|
318
|
+
"phone",
|
|
319
|
+
"quantity",
|
|
320
|
+
].some((n) => name.includes(n))) {
|
|
321
|
+
return "form";
|
|
322
|
+
}
|
|
323
|
+
if (["accordion", "breadcrumb", "menu", "pagination", "sidebar", "stepper", "tabs"].some((n) => name.includes(n))) {
|
|
324
|
+
return "navigation";
|
|
325
|
+
}
|
|
326
|
+
if (["badge", "flag", "loader", "modal", "notification", "progress", "tooltip"].some((n) => name.includes(n))) {
|
|
327
|
+
return "feedback";
|
|
328
|
+
}
|
|
329
|
+
if (["card", "divider", "layer"].some((n) => name.includes(n))) {
|
|
330
|
+
return "layout";
|
|
331
|
+
}
|
|
332
|
+
if (["table", "heading", "hero", "listbox", "rating", "tag"].some((n) => name.includes(n))) {
|
|
333
|
+
return "data-display";
|
|
334
|
+
}
|
|
335
|
+
return "other";
|
|
336
|
+
}
|
|
337
|
+
export async function parseReactComponents(componentsPath) {
|
|
338
|
+
const components = [];
|
|
339
|
+
const componentDirs = findComponentDirs(componentsPath);
|
|
340
|
+
for (const dir of componentDirs) {
|
|
341
|
+
const componentName = basename(dir);
|
|
342
|
+
// React components are typically named Component.tsx or index.tsx
|
|
343
|
+
const possibleFiles = [join(dir, `${componentName}.tsx`), join(dir, "index.tsx")];
|
|
344
|
+
let tsxFile = null;
|
|
345
|
+
for (const file of possibleFiles) {
|
|
346
|
+
if (existsSync(file)) {
|
|
347
|
+
tsxFile = file;
|
|
348
|
+
break;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
if (tsxFile) {
|
|
352
|
+
const parsed = parseReactFile(tsxFile, dir);
|
|
353
|
+
if (parsed) {
|
|
354
|
+
const component = {
|
|
355
|
+
name: componentName,
|
|
356
|
+
slug: componentName.toLowerCase(),
|
|
357
|
+
category: inferCategory(componentName),
|
|
358
|
+
frameworks: ["react"],
|
|
359
|
+
props: parsed.props,
|
|
360
|
+
slots: parsed.hasChildren
|
|
361
|
+
? [{ name: "children", description: "Component children" }]
|
|
362
|
+
: [],
|
|
363
|
+
events: parsed.callbacks,
|
|
364
|
+
examples: [],
|
|
365
|
+
cssClasses: [],
|
|
366
|
+
};
|
|
367
|
+
// Try to find stories file
|
|
368
|
+
const storiesPatterns = [
|
|
369
|
+
join(dir, "stories", `${componentName}.stories.tsx`),
|
|
370
|
+
join(dir, `${componentName}.stories.tsx`),
|
|
371
|
+
join(dir, "stories", "index.stories.tsx"),
|
|
372
|
+
];
|
|
373
|
+
for (const storiesPath of storiesPatterns) {
|
|
374
|
+
if (existsSync(storiesPath)) {
|
|
375
|
+
const stories = parseStoriesFile(storiesPath);
|
|
376
|
+
component.examples?.push(...stories.map((s) => ({
|
|
377
|
+
framework: "react",
|
|
378
|
+
title: s.title,
|
|
379
|
+
code: s.code,
|
|
380
|
+
})));
|
|
381
|
+
break;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
// Also check for stories directory
|
|
385
|
+
const storiesDir = join(dir, "stories");
|
|
386
|
+
if (existsSync(storiesDir)) {
|
|
387
|
+
const storyFiles = readdirSync(storiesDir).filter((f) => f.endsWith(".stories.tsx"));
|
|
388
|
+
for (const storyFile of storyFiles) {
|
|
389
|
+
const stories = parseStoriesFile(join(storiesDir, storyFile));
|
|
390
|
+
component.examples?.push(...stories.map((s) => ({
|
|
391
|
+
framework: "react",
|
|
392
|
+
title: s.title,
|
|
393
|
+
code: s.code,
|
|
394
|
+
})));
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
// Extract CSS classes from the TSX file
|
|
398
|
+
const tsxContent = readFileSync(tsxFile, "utf-8");
|
|
399
|
+
component.cssClasses = extractCssClasses(tsxContent);
|
|
400
|
+
components.push(component);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
return components;
|
|
405
|
+
}
|
|
406
|
+
//# sourceMappingURL=react-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react-parser.js","sourceRoot":"","sources":["../../src/parsers/react-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CssUtility } from "../db/queries.js";
|
|
2
|
+
export interface ParseScssOptions {
|
|
3
|
+
stylesPath: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Parse SCSS files to extract CSS-only utilities (layouts and spacing)
|
|
7
|
+
*/
|
|
8
|
+
export declare function parseCssUtilities(stylesPath: string): Promise<CssUtility[]>;
|
|
9
|
+
//# sourceMappingURL=scss-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scss-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/scss-parser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAqB,MAAM,kBAAkB,CAAC;AAwCtE,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAoBjF"}
|