@ryndesign/cli 0.1.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/LICENSE +21 -0
- package/dist/add-ZYIVP5Z5.js +111 -0
- package/dist/add-ZYIVP5Z5.js.map +1 -0
- package/dist/bin.cjs +1332 -0
- package/dist/bin.cjs.map +1 -0
- package/dist/bin.d.cts +1 -0
- package/dist/bin.d.ts +1 -0
- package/dist/bin.js +28 -0
- package/dist/bin.js.map +1 -0
- package/dist/chunk-DGUM43GV.js +11 -0
- package/dist/chunk-DGUM43GV.js.map +1 -0
- package/dist/chunk-TU5AB45W.js +76 -0
- package/dist/chunk-TU5AB45W.js.map +1 -0
- package/dist/eject-WIEISNL6.js +143 -0
- package/dist/eject-WIEISNL6.js.map +1 -0
- package/dist/figma-VTZWLYWQ.js +23 -0
- package/dist/figma-VTZWLYWQ.js.map +1 -0
- package/dist/figma-diff-SNSMOAZX.js +97 -0
- package/dist/figma-diff-SNSMOAZX.js.map +1 -0
- package/dist/figma-pull-RCRG6D5G.js +130 -0
- package/dist/figma-pull-RCRG6D5G.js.map +1 -0
- package/dist/figma-push-X4PSMN62.js +71 -0
- package/dist/figma-push-X4PSMN62.js.map +1 -0
- package/dist/generate-LES4SXIM.js +199 -0
- package/dist/generate-LES4SXIM.js.map +1 -0
- package/dist/index.cjs +115 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +6 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/init-AIT7XEQS.js +254 -0
- package/dist/init-AIT7XEQS.js.map +1 -0
- package/dist/preview-AXCPYQ53.js +40 -0
- package/dist/preview-AXCPYQ53.js.map +1 -0
- package/dist/validate-RGTQQSUE.js +87 -0
- package/dist/validate-RGTQQSUE.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
import "./chunk-DGUM43GV.js";
|
|
2
|
+
|
|
3
|
+
// src/commands/init.ts
|
|
4
|
+
import { defineCommand } from "citty";
|
|
5
|
+
import * as p from "@clack/prompts";
|
|
6
|
+
import pc from "picocolors";
|
|
7
|
+
import fs from "fs/promises";
|
|
8
|
+
import path from "path";
|
|
9
|
+
var init_default = defineCommand({
|
|
10
|
+
meta: {
|
|
11
|
+
name: "init",
|
|
12
|
+
description: "Initialize a new RynDesign project"
|
|
13
|
+
},
|
|
14
|
+
args: {
|
|
15
|
+
template: {
|
|
16
|
+
type: "string",
|
|
17
|
+
description: "Template to use (minimal or full)",
|
|
18
|
+
default: "minimal"
|
|
19
|
+
},
|
|
20
|
+
platforms: {
|
|
21
|
+
type: "string",
|
|
22
|
+
description: "Comma-separated list of target platforms"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
async run({ args }) {
|
|
26
|
+
p.intro(pc.bgCyan(pc.black(" RynDesign Init ")));
|
|
27
|
+
const template = args.template || await p.select({
|
|
28
|
+
message: "Choose a template:",
|
|
29
|
+
options: [
|
|
30
|
+
{ value: "minimal", label: "Minimal", hint: "Basic color, spacing, typography tokens" },
|
|
31
|
+
{ value: "full", label: "Full", hint: "Complete token set with shadows, borders, gradients" }
|
|
32
|
+
]
|
|
33
|
+
});
|
|
34
|
+
if (p.isCancel(template)) {
|
|
35
|
+
p.cancel("Operation cancelled.");
|
|
36
|
+
process.exit(0);
|
|
37
|
+
}
|
|
38
|
+
const platformsInput = args.platforms || await p.multiselect({
|
|
39
|
+
message: "Select target platforms:",
|
|
40
|
+
initialValues: ["react", "swiftui"],
|
|
41
|
+
options: [
|
|
42
|
+
{ value: "react", label: "React", hint: "recommended" },
|
|
43
|
+
{ value: "swiftui", label: "SwiftUI", hint: "recommended" },
|
|
44
|
+
{ value: "vue", label: "Vue" },
|
|
45
|
+
{ value: "svelte", label: "Svelte" },
|
|
46
|
+
{ value: "rails", label: "Rails" },
|
|
47
|
+
{ value: "uikit", label: "UIKit" },
|
|
48
|
+
{ value: "compose", label: "Jetpack Compose" },
|
|
49
|
+
{ value: "android-view", label: "Android View" }
|
|
50
|
+
],
|
|
51
|
+
required: true
|
|
52
|
+
});
|
|
53
|
+
if (p.isCancel(platformsInput)) {
|
|
54
|
+
p.cancel("Operation cancelled.");
|
|
55
|
+
process.exit(0);
|
|
56
|
+
}
|
|
57
|
+
const platforms = Array.isArray(platformsInput) ? platformsInput : platformsInput.split(",").map((s2) => s2.trim());
|
|
58
|
+
const darkMode = await p.confirm({
|
|
59
|
+
message: "Enable dark mode support?",
|
|
60
|
+
initialValue: true
|
|
61
|
+
});
|
|
62
|
+
if (p.isCancel(darkMode)) {
|
|
63
|
+
p.cancel("Operation cancelled.");
|
|
64
|
+
process.exit(0);
|
|
65
|
+
}
|
|
66
|
+
const s = p.spinner();
|
|
67
|
+
s.start("Creating project files...");
|
|
68
|
+
const cwd = process.cwd();
|
|
69
|
+
await fs.mkdir(path.join(cwd, "tokens"), { recursive: true });
|
|
70
|
+
await fs.mkdir(path.join(cwd, "components"), { recursive: true });
|
|
71
|
+
await fs.mkdir(path.join(cwd, "generated"), { recursive: true });
|
|
72
|
+
const templateDir = path.resolve(
|
|
73
|
+
typeof __dirname !== "undefined" ? path.resolve(__dirname, "../../templates") : path.resolve(new URL(".", import.meta.url).pathname, "../../templates")
|
|
74
|
+
);
|
|
75
|
+
const templateFile = template === "full" ? "full.tokens.json" : "minimal.tokens.json";
|
|
76
|
+
try {
|
|
77
|
+
const templateContent = await fs.readFile(
|
|
78
|
+
path.join(templateDir, templateFile),
|
|
79
|
+
"utf-8"
|
|
80
|
+
);
|
|
81
|
+
await fs.writeFile(
|
|
82
|
+
path.join(cwd, "tokens", "base.tokens.json"),
|
|
83
|
+
templateContent
|
|
84
|
+
);
|
|
85
|
+
} catch {
|
|
86
|
+
await fs.writeFile(
|
|
87
|
+
path.join(cwd, "tokens", "base.tokens.json"),
|
|
88
|
+
JSON.stringify(getDefaultTokens(), null, 2)
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
await fs.writeFile(
|
|
92
|
+
path.join(cwd, "tokens", "semantic.tokens.json"),
|
|
93
|
+
JSON.stringify(getSemanticTokens(), null, 2)
|
|
94
|
+
);
|
|
95
|
+
if (darkMode) {
|
|
96
|
+
try {
|
|
97
|
+
const darkContent = await fs.readFile(
|
|
98
|
+
path.join(templateDir, "dark.tokens.json"),
|
|
99
|
+
"utf-8"
|
|
100
|
+
);
|
|
101
|
+
await fs.writeFile(
|
|
102
|
+
path.join(cwd, "tokens", "dark.tokens.json"),
|
|
103
|
+
darkContent
|
|
104
|
+
);
|
|
105
|
+
} catch {
|
|
106
|
+
await fs.writeFile(
|
|
107
|
+
path.join(cwd, "tokens", "dark.tokens.json"),
|
|
108
|
+
JSON.stringify(getDarkTokens(), null, 2)
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
const configContent = generateConfig(platforms, darkMode);
|
|
113
|
+
await fs.writeFile(path.join(cwd, "ryndesign.config.ts"), configContent);
|
|
114
|
+
try {
|
|
115
|
+
const buttonComp = await fs.readFile(
|
|
116
|
+
path.join(templateDir, "../components/button.component.json"),
|
|
117
|
+
"utf-8"
|
|
118
|
+
);
|
|
119
|
+
await fs.writeFile(
|
|
120
|
+
path.join(cwd, "components", "button.component.json"),
|
|
121
|
+
buttonComp
|
|
122
|
+
);
|
|
123
|
+
} catch {
|
|
124
|
+
}
|
|
125
|
+
const gitignorePath = path.join(cwd, ".gitignore");
|
|
126
|
+
try {
|
|
127
|
+
let gitignore = "";
|
|
128
|
+
try {
|
|
129
|
+
gitignore = await fs.readFile(gitignorePath, "utf-8");
|
|
130
|
+
} catch {
|
|
131
|
+
}
|
|
132
|
+
if (!gitignore.includes("generated/")) {
|
|
133
|
+
gitignore += (gitignore.endsWith("\n") || gitignore === "" ? "" : "\n") + "generated/\n";
|
|
134
|
+
await fs.writeFile(gitignorePath, gitignore);
|
|
135
|
+
}
|
|
136
|
+
} catch {
|
|
137
|
+
}
|
|
138
|
+
try {
|
|
139
|
+
const pkgJsonPath = path.join(cwd, "package.json");
|
|
140
|
+
const pkgContent = await fs.readFile(pkgJsonPath, "utf-8");
|
|
141
|
+
const pkg = JSON.parse(pkgContent);
|
|
142
|
+
if (!pkg.scripts) pkg.scripts = {};
|
|
143
|
+
if (!pkg.scripts["generate"]) pkg.scripts["generate"] = "ryndesign generate";
|
|
144
|
+
if (!pkg.scripts["preview"]) pkg.scripts["preview"] = "ryndesign preview";
|
|
145
|
+
await fs.writeFile(pkgJsonPath, JSON.stringify(pkg, null, 2) + "\n");
|
|
146
|
+
} catch {
|
|
147
|
+
}
|
|
148
|
+
s.stop("Project files created!");
|
|
149
|
+
p.note(
|
|
150
|
+
[
|
|
151
|
+
`${pc.green("tokens/")} - Your design tokens`,
|
|
152
|
+
`${pc.green("components/")} - Component definitions`,
|
|
153
|
+
`${pc.green("generated/")} - Generated output (gitignored)`,
|
|
154
|
+
`${pc.green("ryndesign.config.ts")} - Configuration`
|
|
155
|
+
].join("\n"),
|
|
156
|
+
"Project structure"
|
|
157
|
+
);
|
|
158
|
+
p.outro(pc.green("Run `ryndesign generate` to generate your design system!"));
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
function generateConfig(platforms, darkMode) {
|
|
162
|
+
const imports = [];
|
|
163
|
+
const generators = [];
|
|
164
|
+
for (const platform of platforms) {
|
|
165
|
+
const pkgName = `@ryndesign/generator-${platform}`;
|
|
166
|
+
const varName = platform.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
|
|
167
|
+
imports.push(`import ${varName} from '${pkgName}';`);
|
|
168
|
+
if (["react", "vue", "svelte"].includes(platform)) {
|
|
169
|
+
generators.push(` ${varName}({
|
|
170
|
+
outDir: 'generated/${platform}',
|
|
171
|
+
cssStrategy: 'css-variables',
|
|
172
|
+
typescript: true,${darkMode ? "\n darkMode: 'media+class'," : ""}
|
|
173
|
+
})`);
|
|
174
|
+
} else {
|
|
175
|
+
generators.push(` ${varName}({
|
|
176
|
+
outDir: 'generated/${platform}',
|
|
177
|
+
})`);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return `import { defineConfig } from '@ryndesign/cli';
|
|
181
|
+
${imports.join("\n")}
|
|
182
|
+
|
|
183
|
+
export default defineConfig({
|
|
184
|
+
tokens: ['tokens/**/*.tokens.json'],
|
|
185
|
+
components: ['components/**/*.component.json'],
|
|
186
|
+
outDir: 'generated',
|
|
187
|
+
${darkMode ? `
|
|
188
|
+
themes: {
|
|
189
|
+
default: 'light',
|
|
190
|
+
dark: { file: 'tokens/dark.tokens.json' },
|
|
191
|
+
},
|
|
192
|
+
` : ""}
|
|
193
|
+
generators: [
|
|
194
|
+
${generators.join(",\n")}
|
|
195
|
+
],
|
|
196
|
+
|
|
197
|
+
preview: { port: 4400, open: true },
|
|
198
|
+
});
|
|
199
|
+
`;
|
|
200
|
+
}
|
|
201
|
+
function getDefaultTokens() {
|
|
202
|
+
return {
|
|
203
|
+
color: {
|
|
204
|
+
$type: "color",
|
|
205
|
+
primary: { $value: "#3B82F6" },
|
|
206
|
+
white: { $value: "#FFFFFF" },
|
|
207
|
+
black: { $value: "#000000" },
|
|
208
|
+
gray: {
|
|
209
|
+
50: { $value: "#F9FAFB" },
|
|
210
|
+
900: { $value: "#111827" }
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
spacing: {
|
|
214
|
+
$type: "dimension",
|
|
215
|
+
sm: { $value: "8px" },
|
|
216
|
+
md: { $value: "16px" },
|
|
217
|
+
lg: { $value: "24px" }
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
function getSemanticTokens() {
|
|
222
|
+
return {
|
|
223
|
+
color: {
|
|
224
|
+
$type: "color",
|
|
225
|
+
background: {
|
|
226
|
+
primary: { $value: "{color.white}" },
|
|
227
|
+
secondary: { $value: "{color.gray.50}" }
|
|
228
|
+
},
|
|
229
|
+
text: {
|
|
230
|
+
primary: { $value: "{color.gray.900}" }
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
function getDarkTokens() {
|
|
236
|
+
return {
|
|
237
|
+
$description: "Dark theme overrides",
|
|
238
|
+
$extensions: { "com.ryndesign.theme": { name: "dark", extends: "default" } },
|
|
239
|
+
color: {
|
|
240
|
+
$type: "color",
|
|
241
|
+
background: {
|
|
242
|
+
primary: { $value: "{color.gray.900}" },
|
|
243
|
+
secondary: { $value: "{color.gray.800}" }
|
|
244
|
+
},
|
|
245
|
+
text: {
|
|
246
|
+
primary: { $value: "{color.gray.50}" }
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
export {
|
|
252
|
+
init_default as default
|
|
253
|
+
};
|
|
254
|
+
//# sourceMappingURL=init-AIT7XEQS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/init.ts"],"sourcesContent":["import { defineCommand } from 'citty';\nimport * as p from '@clack/prompts';\nimport pc from 'picocolors';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\n\nexport default defineCommand({\n meta: {\n name: 'init',\n description: 'Initialize a new RynDesign project',\n },\n args: {\n template: {\n type: 'string',\n description: 'Template to use (minimal or full)',\n default: 'minimal',\n },\n platforms: {\n type: 'string',\n description: 'Comma-separated list of target platforms',\n },\n },\n async run({ args }) {\n p.intro(pc.bgCyan(pc.black(' RynDesign Init ')));\n\n const template = args.template || await p.select({\n message: 'Choose a template:',\n options: [\n { value: 'minimal', label: 'Minimal', hint: 'Basic color, spacing, typography tokens' },\n { value: 'full', label: 'Full', hint: 'Complete token set with shadows, borders, gradients' },\n ],\n }) as string;\n\n if (p.isCancel(template)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n const platformsInput = args.platforms || await p.multiselect({\n message: 'Select target platforms:',\n initialValues: ['react', 'swiftui'],\n options: [\n { value: 'react', label: 'React', hint: 'recommended' },\n { value: 'swiftui', label: 'SwiftUI', hint: 'recommended' },\n { value: 'vue', label: 'Vue' },\n { value: 'svelte', label: 'Svelte' },\n { value: 'rails', label: 'Rails' },\n { value: 'uikit', label: 'UIKit' },\n { value: 'compose', label: 'Jetpack Compose' },\n { value: 'android-view', label: 'Android View' },\n ],\n required: true,\n }) as string[];\n\n if (p.isCancel(platformsInput)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n const platforms = Array.isArray(platformsInput)\n ? platformsInput\n : (platformsInput as string).split(',').map(s => s.trim());\n\n const darkMode = await p.confirm({\n message: 'Enable dark mode support?',\n initialValue: true,\n });\n\n if (p.isCancel(darkMode)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n const s = p.spinner();\n s.start('Creating project files...');\n\n const cwd = process.cwd();\n\n // Create directories\n await fs.mkdir(path.join(cwd, 'tokens'), { recursive: true });\n await fs.mkdir(path.join(cwd, 'components'), { recursive: true });\n await fs.mkdir(path.join(cwd, 'generated'), { recursive: true });\n\n // Copy template tokens\n // ESM-compatible path resolution\n const templateDir = path.resolve(\n typeof __dirname !== 'undefined'\n ? path.resolve(__dirname, '../../templates')\n : path.resolve(new URL('.', import.meta.url).pathname, '../../templates')\n );\n const templateFile = template === 'full' ? 'full.tokens.json' : 'minimal.tokens.json';\n\n try {\n const templateContent = await fs.readFile(\n path.join(templateDir, templateFile),\n 'utf-8'\n );\n await fs.writeFile(\n path.join(cwd, 'tokens', 'base.tokens.json'),\n templateContent\n );\n } catch {\n // If templates not found, create a basic one inline\n await fs.writeFile(\n path.join(cwd, 'tokens', 'base.tokens.json'),\n JSON.stringify(getDefaultTokens(), null, 2)\n );\n }\n\n // Create semantic tokens\n await fs.writeFile(\n path.join(cwd, 'tokens', 'semantic.tokens.json'),\n JSON.stringify(getSemanticTokens(), null, 2)\n );\n\n // Create dark theme if enabled\n if (darkMode) {\n try {\n const darkContent = await fs.readFile(\n path.join(templateDir, 'dark.tokens.json'),\n 'utf-8'\n );\n await fs.writeFile(\n path.join(cwd, 'tokens', 'dark.tokens.json'),\n darkContent\n );\n } catch {\n await fs.writeFile(\n path.join(cwd, 'tokens', 'dark.tokens.json'),\n JSON.stringify(getDarkTokens(), null, 2)\n );\n }\n }\n\n // Create config file\n const configContent = generateConfig(platforms, darkMode as boolean);\n await fs.writeFile(path.join(cwd, 'ryndesign.config.ts'), configContent);\n\n // Copy button component\n try {\n const buttonComp = await fs.readFile(\n path.join(templateDir, '../components/button.component.json'),\n 'utf-8'\n );\n await fs.writeFile(\n path.join(cwd, 'components', 'button.component.json'),\n buttonComp\n );\n } catch {\n // Skip if not found\n }\n\n // Add generated/ to .gitignore\n const gitignorePath = path.join(cwd, '.gitignore');\n try {\n let gitignore = '';\n try {\n gitignore = await fs.readFile(gitignorePath, 'utf-8');\n } catch {\n // File doesn't exist yet\n }\n if (!gitignore.includes('generated/')) {\n gitignore += (gitignore.endsWith('\\n') || gitignore === '' ? '' : '\\n') + 'generated/\\n';\n await fs.writeFile(gitignorePath, gitignore);\n }\n } catch {\n // Skip if can't write .gitignore\n }\n\n // Add scripts to package.json if it exists\n try {\n const pkgJsonPath = path.join(cwd, 'package.json');\n const pkgContent = await fs.readFile(pkgJsonPath, 'utf-8');\n const pkg = JSON.parse(pkgContent);\n if (!pkg.scripts) pkg.scripts = {};\n if (!pkg.scripts['generate']) pkg.scripts['generate'] = 'ryndesign generate';\n if (!pkg.scripts['preview']) pkg.scripts['preview'] = 'ryndesign preview';\n await fs.writeFile(pkgJsonPath, JSON.stringify(pkg, null, 2) + '\\n');\n } catch {\n // Skip if no package.json or can't modify\n }\n\n s.stop('Project files created!');\n\n p.note(\n [\n `${pc.green('tokens/')} - Your design tokens`,\n `${pc.green('components/')} - Component definitions`,\n `${pc.green('generated/')} - Generated output (gitignored)`,\n `${pc.green('ryndesign.config.ts')} - Configuration`,\n ].join('\\n'),\n 'Project structure'\n );\n\n p.outro(pc.green('Run `ryndesign generate` to generate your design system!'));\n },\n});\n\nfunction generateConfig(platforms: string[], darkMode: boolean): string {\n const imports: string[] = [];\n const generators: string[] = [];\n\n for (const platform of platforms) {\n const pkgName = `@ryndesign/generator-${platform}`;\n const varName = platform.replace(/-([a-z])/g, (_, c) => c.toUpperCase());\n imports.push(`import ${varName} from '${pkgName}';`);\n\n if (['react', 'vue', 'svelte'].includes(platform)) {\n generators.push(` ${varName}({\n outDir: 'generated/${platform}',\n cssStrategy: 'css-variables',\n typescript: true,${darkMode ? \"\\n darkMode: 'media+class',\" : ''}\n })`);\n } else {\n generators.push(` ${varName}({\n outDir: 'generated/${platform}',\n })`);\n }\n }\n\n return `import { defineConfig } from '@ryndesign/cli';\n${imports.join('\\n')}\n\nexport default defineConfig({\n tokens: ['tokens/**/*.tokens.json'],\n components: ['components/**/*.component.json'],\n outDir: 'generated',\n${darkMode ? `\n themes: {\n default: 'light',\n dark: { file: 'tokens/dark.tokens.json' },\n },\n` : ''}\n generators: [\n${generators.join(',\\n')}\n ],\n\n preview: { port: 4400, open: true },\n});\n`;\n}\n\nfunction getDefaultTokens() {\n return {\n color: {\n $type: 'color',\n primary: { $value: '#3B82F6' },\n white: { $value: '#FFFFFF' },\n black: { $value: '#000000' },\n gray: {\n 50: { $value: '#F9FAFB' },\n 900: { $value: '#111827' },\n },\n },\n spacing: {\n $type: 'dimension',\n sm: { $value: '8px' },\n md: { $value: '16px' },\n lg: { $value: '24px' },\n },\n };\n}\n\nfunction getSemanticTokens() {\n return {\n color: {\n $type: 'color',\n background: {\n primary: { $value: '{color.white}' },\n secondary: { $value: '{color.gray.50}' },\n },\n text: {\n primary: { $value: '{color.gray.900}' },\n },\n },\n };\n}\n\nfunction getDarkTokens() {\n return {\n $description: 'Dark theme overrides',\n $extensions: { 'com.ryndesign.theme': { name: 'dark', extends: 'default' } },\n color: {\n $type: 'color',\n background: {\n primary: { $value: '{color.gray.900}' },\n secondary: { $value: '{color.gray.800}' },\n },\n text: {\n primary: { $value: '{color.gray.50}' },\n },\n },\n };\n}\n"],"mappings":"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","names":["s"]}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import "./chunk-DGUM43GV.js";
|
|
2
|
+
|
|
3
|
+
// src/commands/preview.ts
|
|
4
|
+
import { defineCommand } from "citty";
|
|
5
|
+
import pc from "picocolors";
|
|
6
|
+
var preview_default = defineCommand({
|
|
7
|
+
meta: {
|
|
8
|
+
name: "preview",
|
|
9
|
+
description: "Start the design system preview server"
|
|
10
|
+
},
|
|
11
|
+
args: {
|
|
12
|
+
port: {
|
|
13
|
+
type: "string",
|
|
14
|
+
description: "Port to run the preview server on",
|
|
15
|
+
default: "4400"
|
|
16
|
+
},
|
|
17
|
+
open: {
|
|
18
|
+
type: "boolean",
|
|
19
|
+
description: "Open browser automatically",
|
|
20
|
+
default: true
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
async run({ args }) {
|
|
24
|
+
console.log(pc.cyan("\u{1F5A5} RynDesign Preview\n"));
|
|
25
|
+
try {
|
|
26
|
+
const { startPreviewServer } = await import("@ryndesign/preview");
|
|
27
|
+
await startPreviewServer({
|
|
28
|
+
port: parseInt(args.port, 10),
|
|
29
|
+
open: args.open
|
|
30
|
+
});
|
|
31
|
+
} catch {
|
|
32
|
+
console.log(pc.yellow("Preview package not found. Install @ryndesign/preview"));
|
|
33
|
+
console.log(pc.gray(" pnpm add @ryndesign/preview"));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
export {
|
|
38
|
+
preview_default as default
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=preview-AXCPYQ53.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/preview.ts"],"sourcesContent":["import { defineCommand } from 'citty';\nimport pc from 'picocolors';\n\nexport default defineCommand({\n meta: {\n name: 'preview',\n description: 'Start the design system preview server',\n },\n args: {\n port: {\n type: 'string',\n description: 'Port to run the preview server on',\n default: '4400',\n },\n open: {\n type: 'boolean',\n description: 'Open browser automatically',\n default: true,\n },\n },\n async run({ args }) {\n console.log(pc.cyan('🖥 RynDesign Preview\\n'));\n\n try {\n const { startPreviewServer } = await import('@ryndesign/preview');\n await startPreviewServer({\n port: parseInt(args.port as string, 10),\n open: args.open as boolean,\n });\n } catch {\n console.log(pc.yellow('Preview package not found. Install @ryndesign/preview'));\n console.log(pc.gray(' pnpm add @ryndesign/preview'));\n }\n },\n});\n"],"mappings":";;;AAAA,SAAS,qBAAqB;AAC9B,OAAO,QAAQ;AAEf,IAAO,kBAAQ,cAAc;AAAA,EAC3B,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,YAAQ,IAAI,GAAG,KAAK,gCAAyB,CAAC;AAE9C,QAAI;AACF,YAAM,EAAE,mBAAmB,IAAI,MAAM,OAAO,oBAAoB;AAChE,YAAM,mBAAmB;AAAA,QACvB,MAAM,SAAS,KAAK,MAAgB,EAAE;AAAA,QACtC,MAAM,KAAK;AAAA,MACb,CAAC;AAAA,IACH,QAAQ;AACN,cAAQ,IAAI,GAAG,OAAO,uDAAuD,CAAC;AAC9E,cAAQ,IAAI,GAAG,KAAK,+BAA+B,CAAC;AAAA,IACtD;AAAA,EACF;AACF,CAAC;","names":[]}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import "./chunk-DGUM43GV.js";
|
|
2
|
+
|
|
3
|
+
// src/commands/validate.ts
|
|
4
|
+
import { defineCommand } from "citty";
|
|
5
|
+
import pc from "picocolors";
|
|
6
|
+
import { readAndMergeTokenFiles, validateTree, buildTokenSet, postValidate, TokenValidationError } from "@ryndesign/core";
|
|
7
|
+
var validate_default = defineCommand({
|
|
8
|
+
meta: {
|
|
9
|
+
name: "validate",
|
|
10
|
+
description: "Validate design token files"
|
|
11
|
+
},
|
|
12
|
+
args: {
|
|
13
|
+
path: {
|
|
14
|
+
type: "positional",
|
|
15
|
+
description: "Path to token file(s)",
|
|
16
|
+
required: false
|
|
17
|
+
},
|
|
18
|
+
strict: {
|
|
19
|
+
type: "boolean",
|
|
20
|
+
description: "Treat warnings as errors",
|
|
21
|
+
default: false
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
async run({ args }) {
|
|
25
|
+
console.log(pc.cyan(" RynDesign Validate\n"));
|
|
26
|
+
const patterns = args.path ? [args.path] : ["tokens/**/*.tokens.json"];
|
|
27
|
+
try {
|
|
28
|
+
const tree = await readAndMergeTokenFiles(patterns);
|
|
29
|
+
validateTree(tree);
|
|
30
|
+
const tokenSet = await buildTokenSet({
|
|
31
|
+
tokens: patterns,
|
|
32
|
+
basePath: process.cwd()
|
|
33
|
+
});
|
|
34
|
+
const issues = postValidate(tokenSet.tokens, tokenSet.themes);
|
|
35
|
+
const errors = issues.filter((i) => i.severity === "error");
|
|
36
|
+
const warnings = issues.filter((i) => i.severity === "warning");
|
|
37
|
+
console.log(pc.green(` ${tokenSet.tokens.length} tokens resolved`));
|
|
38
|
+
console.log(pc.green(` ${tokenSet.groups.length} groups`));
|
|
39
|
+
const themeCount = Object.keys(tokenSet.themes.themes).length;
|
|
40
|
+
if (themeCount > 0) {
|
|
41
|
+
console.log(pc.green(` ${themeCount} theme(s): ${Object.keys(tokenSet.themes.themes).join(", ")}`));
|
|
42
|
+
}
|
|
43
|
+
if (errors.length > 0) {
|
|
44
|
+
console.error(pc.red(`
|
|
45
|
+
${errors.length} error(s):
|
|
46
|
+
`));
|
|
47
|
+
for (const issue of errors) {
|
|
48
|
+
console.error(` ${pc.red("x")} ${issue.path}: ${issue.message}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (warnings.length > 0) {
|
|
52
|
+
console.log(pc.yellow(`
|
|
53
|
+
${warnings.length} warning(s):
|
|
54
|
+
`));
|
|
55
|
+
for (const issue of warnings) {
|
|
56
|
+
console.log(` ${pc.yellow("!")} ${issue.path}: ${issue.message}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (errors.length === 0 && warnings.length === 0) {
|
|
60
|
+
console.log(pc.green("\n All tokens are valid!"));
|
|
61
|
+
} else if (errors.length === 0) {
|
|
62
|
+
console.log(pc.green("\n Tokens are valid (with warnings)"));
|
|
63
|
+
}
|
|
64
|
+
if (args.strict && (errors.length > 0 || warnings.length > 0)) {
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
if (errors.length > 0) {
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
} catch (err) {
|
|
71
|
+
if (err instanceof TokenValidationError) {
|
|
72
|
+
console.error(pc.red(` Validation failed with ${err.errors.length} issue(s):
|
|
73
|
+
`));
|
|
74
|
+
for (const issue of err.errors) {
|
|
75
|
+
const icon = issue.severity === "error" ? pc.red("x") : pc.yellow("!");
|
|
76
|
+
console.error(` ${icon} ${issue.path.join(".")}: ${issue.message}`);
|
|
77
|
+
}
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
throw err;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
export {
|
|
85
|
+
validate_default as default
|
|
86
|
+
};
|
|
87
|
+
//# sourceMappingURL=validate-RGTQQSUE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/validate.ts"],"sourcesContent":["import { defineCommand } from 'citty';\nimport pc from 'picocolors';\nimport { readAndMergeTokenFiles, validateTree, buildTokenSet, postValidate, TokenValidationError } from '@ryndesign/core';\n\nexport default defineCommand({\n meta: {\n name: 'validate',\n description: 'Validate design token files',\n },\n args: {\n path: {\n type: 'positional',\n description: 'Path to token file(s)',\n required: false,\n },\n strict: {\n type: 'boolean',\n description: 'Treat warnings as errors',\n default: false,\n },\n },\n async run({ args }) {\n console.log(pc.cyan(' RynDesign Validate\\n'));\n\n const patterns = args.path ? [args.path as string] : ['tokens/**/*.tokens.json'];\n\n try {\n // Step 1: Parse and validate structure\n const tree = await readAndMergeTokenFiles(patterns);\n validateTree(tree);\n\n // Step 2: Build full token set for post-validation\n const tokenSet = await buildTokenSet({\n tokens: patterns,\n basePath: process.cwd(),\n });\n\n // Step 3: Post-resolution validation\n const issues = postValidate(tokenSet.tokens, tokenSet.themes);\n const errors = issues.filter(i => i.severity === 'error');\n const warnings = issues.filter(i => i.severity === 'warning');\n\n // Summary\n console.log(pc.green(` ${tokenSet.tokens.length} tokens resolved`));\n console.log(pc.green(` ${tokenSet.groups.length} groups`));\n const themeCount = Object.keys(tokenSet.themes.themes).length;\n if (themeCount > 0) {\n console.log(pc.green(` ${themeCount} theme(s): ${Object.keys(tokenSet.themes.themes).join(', ')}`));\n }\n\n if (errors.length > 0) {\n console.error(pc.red(`\\n ${errors.length} error(s):\\n`));\n for (const issue of errors) {\n console.error(` ${pc.red('x')} ${issue.path}: ${issue.message}`);\n }\n }\n\n if (warnings.length > 0) {\n console.log(pc.yellow(`\\n ${warnings.length} warning(s):\\n`));\n for (const issue of warnings) {\n console.log(` ${pc.yellow('!')} ${issue.path}: ${issue.message}`);\n }\n }\n\n if (errors.length === 0 && warnings.length === 0) {\n console.log(pc.green('\\n All tokens are valid!'));\n } else if (errors.length === 0) {\n console.log(pc.green('\\n Tokens are valid (with warnings)'));\n }\n\n // --strict: exit with error if any warnings\n if (args.strict && (errors.length > 0 || warnings.length > 0)) {\n process.exit(1);\n }\n if (errors.length > 0) {\n process.exit(1);\n }\n } catch (err) {\n if (err instanceof TokenValidationError) {\n console.error(pc.red(` Validation failed with ${err.errors.length} issue(s):\\n`));\n for (const issue of err.errors) {\n const icon = issue.severity === 'error' ? pc.red('x') : pc.yellow('!');\n console.error(` ${icon} ${issue.path.join('.')}: ${issue.message}`);\n }\n process.exit(1);\n }\n throw err;\n }\n },\n});\n"],"mappings":";;;AAAA,SAAS,qBAAqB;AAC9B,OAAO,QAAQ;AACf,SAAS,wBAAwB,cAAc,eAAe,cAAc,4BAA4B;AAExG,IAAO,mBAAQ,cAAc;AAAA,EAC3B,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,IACA,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,YAAQ,IAAI,GAAG,KAAK,wBAAwB,CAAC;AAE7C,UAAM,WAAW,KAAK,OAAO,CAAC,KAAK,IAAc,IAAI,CAAC,yBAAyB;AAE/E,QAAI;AAEF,YAAM,OAAO,MAAM,uBAAuB,QAAQ;AAClD,mBAAa,IAAI;AAGjB,YAAM,WAAW,MAAM,cAAc;AAAA,QACnC,QAAQ;AAAA,QACR,UAAU,QAAQ,IAAI;AAAA,MACxB,CAAC;AAGD,YAAM,SAAS,aAAa,SAAS,QAAQ,SAAS,MAAM;AAC5D,YAAM,SAAS,OAAO,OAAO,OAAK,EAAE,aAAa,OAAO;AACxD,YAAM,WAAW,OAAO,OAAO,OAAK,EAAE,aAAa,SAAS;AAG5D,cAAQ,IAAI,GAAG,MAAM,KAAK,SAAS,OAAO,MAAM,kBAAkB,CAAC;AACnE,cAAQ,IAAI,GAAG,MAAM,KAAK,SAAS,OAAO,MAAM,SAAS,CAAC;AAC1D,YAAM,aAAa,OAAO,KAAK,SAAS,OAAO,MAAM,EAAE;AACvD,UAAI,aAAa,GAAG;AAClB,gBAAQ,IAAI,GAAG,MAAM,KAAK,UAAU,cAAc,OAAO,KAAK,SAAS,OAAO,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,MACrG;AAEA,UAAI,OAAO,SAAS,GAAG;AACrB,gBAAQ,MAAM,GAAG,IAAI;AAAA,IAAO,OAAO,MAAM;AAAA,CAAc,CAAC;AACxD,mBAAW,SAAS,QAAQ;AAC1B,kBAAQ,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,MAAM,IAAI,KAAK,MAAM,OAAO,EAAE;AAAA,QAClE;AAAA,MACF;AAEA,UAAI,SAAS,SAAS,GAAG;AACvB,gBAAQ,IAAI,GAAG,OAAO;AAAA,IAAO,SAAS,MAAM;AAAA,CAAgB,CAAC;AAC7D,mBAAW,SAAS,UAAU;AAC5B,kBAAQ,IAAI,KAAK,GAAG,OAAO,GAAG,CAAC,IAAI,MAAM,IAAI,KAAK,MAAM,OAAO,EAAE;AAAA,QACnE;AAAA,MACF;AAEA,UAAI,OAAO,WAAW,KAAK,SAAS,WAAW,GAAG;AAChD,gBAAQ,IAAI,GAAG,MAAM,2BAA2B,CAAC;AAAA,MACnD,WAAW,OAAO,WAAW,GAAG;AAC9B,gBAAQ,IAAI,GAAG,MAAM,sCAAsC,CAAC;AAAA,MAC9D;AAGA,UAAI,KAAK,WAAW,OAAO,SAAS,KAAK,SAAS,SAAS,IAAI;AAC7D,gBAAQ,KAAK,CAAC;AAAA,MAChB;AACA,UAAI,OAAO,SAAS,GAAG;AACrB,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,IACF,SAAS,KAAK;AACZ,UAAI,eAAe,sBAAsB;AACvC,gBAAQ,MAAM,GAAG,IAAI,4BAA4B,IAAI,OAAO,MAAM;AAAA,CAAc,CAAC;AACjF,mBAAW,SAAS,IAAI,QAAQ;AAC9B,gBAAM,OAAO,MAAM,aAAa,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,OAAO,GAAG;AACrE,kBAAQ,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,GAAG,CAAC,KAAK,MAAM,OAAO,EAAE;AAAA,QACrE;AACA,gBAAQ,KAAK,CAAC;AAAA,MAChB;AACA,YAAM;AAAA,IACR;AAAA,EACF;AACF,CAAC;","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ryndesign/cli",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "CLI for RynDesign design system generator",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/devryner/RynDesign.git",
|
|
9
|
+
"directory": "packages/cli"
|
|
10
|
+
},
|
|
11
|
+
"type": "module",
|
|
12
|
+
"bin": {
|
|
13
|
+
"ryndesign": "./dist/bin.js"
|
|
14
|
+
},
|
|
15
|
+
"main": "./dist/index.cjs",
|
|
16
|
+
"module": "./dist/index.js",
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"exports": {
|
|
19
|
+
".": {
|
|
20
|
+
"import": {
|
|
21
|
+
"types": "./dist/index.d.ts",
|
|
22
|
+
"default": "./dist/index.js"
|
|
23
|
+
},
|
|
24
|
+
"require": {
|
|
25
|
+
"types": "./dist/index.d.cts",
|
|
26
|
+
"default": "./dist/index.cjs"
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"files": [
|
|
31
|
+
"dist"
|
|
32
|
+
],
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"citty": "^0.1.6",
|
|
35
|
+
"@clack/prompts": "^0.8.0",
|
|
36
|
+
"picocolors": "^1.1.0",
|
|
37
|
+
"jiti": "^2.4.0",
|
|
38
|
+
"chokidar": "^4.0.0",
|
|
39
|
+
"fast-glob": "^3.3.0",
|
|
40
|
+
"@ryndesign/core": "0.1.1",
|
|
41
|
+
"@ryndesign/plugin-api": "0.1.1"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"tsup": "^8.3.0",
|
|
45
|
+
"typescript": "~5.5.0",
|
|
46
|
+
"vitest": "^2.1.0"
|
|
47
|
+
},
|
|
48
|
+
"scripts": {
|
|
49
|
+
"build": "tsup",
|
|
50
|
+
"dev": "tsup --watch",
|
|
51
|
+
"test": "vitest run",
|
|
52
|
+
"lint": "eslint src/",
|
|
53
|
+
"clean": "rm -rf dist"
|
|
54
|
+
}
|
|
55
|
+
}
|