@smart-coder-labs/apple-design-system 1.2.2 → 1.3.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/dist/cli/commands/add.d.ts.map +1 -1
- package/dist/cli/commands/add.js +35 -28
- package/dist/cli/commands/add.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +94 -27
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/update-components.d.ts.map +1 -1
- package/dist/cli/commands/update-components.js +25 -42
- package/dist/cli/commands/update-components.js.map +1 -1
- package/dist/cli/utils/config.d.ts +30 -0
- package/dist/cli/utils/config.d.ts.map +1 -0
- package/dist/cli/utils/config.js +88 -0
- package/dist/cli/utils/config.js.map +1 -0
- package/dist/cli/utils/framework.d.ts +9 -0
- package/dist/cli/utils/framework.d.ts.map +1 -0
- package/dist/cli/utils/framework.js +68 -0
- package/dist/cli/utils/framework.js.map +1 -0
- package/dist/cli/utils/registry.d.ts +1 -0
- package/dist/cli/utils/registry.d.ts.map +1 -1
- package/dist/cli/utils/registry.js +12 -10
- package/dist/cli/utils/registry.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../cli/commands/add.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,GAAG,GAAU,YAAY,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../cli/commands/add.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,GAAG,GAAU,YAAY,MAAM,EAAE,kBAoF7C,CAAC"}
|
package/dist/cli/commands/add.js
CHANGED
|
@@ -10,36 +10,40 @@ const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
|
10
10
|
const chalk_1 = __importDefault(require("chalk"));
|
|
11
11
|
const ora_1 = __importDefault(require("ora"));
|
|
12
12
|
const registry_1 = require("../utils/registry");
|
|
13
|
+
const config_1 = require("../utils/config");
|
|
13
14
|
const add = async (components) => {
|
|
15
|
+
const available = await (0, registry_1.getAvailableComponents)();
|
|
14
16
|
if (!components || components.length === 0) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
17
|
+
const modeResponse = await (0, prompts_1.default)({
|
|
18
|
+
type: "select",
|
|
19
|
+
name: "mode",
|
|
20
|
+
message: "What would you like to do?",
|
|
21
|
+
choices: [
|
|
22
|
+
{ title: "Add all components", value: "all" },
|
|
23
|
+
{ title: "Select specific components", value: "select" },
|
|
24
|
+
],
|
|
23
25
|
});
|
|
24
|
-
|
|
26
|
+
if (modeResponse.mode === "all") {
|
|
27
|
+
components = available;
|
|
28
|
+
console.log(chalk_1.default.green(`\n✓ Selected all ${available.length} components`));
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
const response = await (0, prompts_1.default)({
|
|
32
|
+
type: "multiselect",
|
|
33
|
+
name: "items",
|
|
34
|
+
message: "Which components would you like to add?",
|
|
35
|
+
choices: available.map((c) => ({ title: c, value: c })),
|
|
36
|
+
min: 1,
|
|
37
|
+
});
|
|
38
|
+
components = response.items;
|
|
39
|
+
}
|
|
25
40
|
}
|
|
26
41
|
if (!components || components.length === 0) {
|
|
27
42
|
console.log(chalk_1.default.yellow("No components selected."));
|
|
28
43
|
return;
|
|
29
44
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
if (fs_extra_1.default.existsSync("design-system.json")) {
|
|
33
|
-
try {
|
|
34
|
-
config = await fs_extra_1.default.readJSON("design-system.json");
|
|
35
|
-
}
|
|
36
|
-
catch (e) {
|
|
37
|
-
console.warn("Could not read design-system.json, using defaults.");
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
console.warn("design-system.json not found. Using default ./components/ui");
|
|
42
|
-
}
|
|
45
|
+
const config = await (0, config_1.loadConfig)();
|
|
46
|
+
const dsVersion = await (0, registry_1.getRegistryVersion)();
|
|
43
47
|
const spinner = (0, ora_1.default)("Installing components...").start();
|
|
44
48
|
const queue = [...components];
|
|
45
49
|
const processed = new Set();
|
|
@@ -54,26 +58,29 @@ const add = async (components) => {
|
|
|
54
58
|
spinner.warn(`Component '${component}' not found.`);
|
|
55
59
|
continue;
|
|
56
60
|
}
|
|
57
|
-
//
|
|
61
|
+
// Detect local dependencies from main file
|
|
58
62
|
const mainFile = files.find((f) => f.name === `${component}.tsx`);
|
|
59
63
|
if (mainFile) {
|
|
60
64
|
const localImportRegex = /from\s+['"]\.\.\/([A-Z][a-zA-Z0-9]*)['"]/g;
|
|
61
65
|
let match;
|
|
62
66
|
while ((match = localImportRegex.exec(mainFile.content)) !== null) {
|
|
63
|
-
const
|
|
64
|
-
if (!processed.has(
|
|
65
|
-
queue.push(
|
|
66
|
-
spinner.info(`Detected dependency: ${
|
|
67
|
+
const dep = match[1];
|
|
68
|
+
if (!processed.has(dep) && !queue.includes(dep)) {
|
|
69
|
+
queue.push(dep);
|
|
70
|
+
spinner.info(`Detected dependency: ${dep}`);
|
|
67
71
|
}
|
|
68
72
|
}
|
|
69
73
|
}
|
|
70
74
|
const componentDir = path_1.default.resolve(process.cwd(), config.componentsDir, component);
|
|
71
75
|
await fs_extra_1.default.ensureDir(componentDir);
|
|
72
76
|
for (const file of files) {
|
|
73
|
-
|
|
77
|
+
const content = config.rsc ? file.content : (0, config_1.stripUseClient)(file.content);
|
|
78
|
+
await fs_extra_1.default.writeFile(path_1.default.join(componentDir, file.name), content);
|
|
74
79
|
}
|
|
80
|
+
await (0, config_1.recordInstall)(config, component, dsVersion, "folder");
|
|
75
81
|
spinner.succeed(`Installed ${component}`);
|
|
76
82
|
}
|
|
83
|
+
await (0, config_1.saveConfig)(config);
|
|
77
84
|
spinner.stop();
|
|
78
85
|
console.log(chalk_1.default.bold.green("\nDone!"));
|
|
79
86
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../../cli/commands/add.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../../cli/commands/add.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../cli/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../cli/commands/init.ts"],"names":[],"mappings":"AAuBA,eAAO,MAAM,IAAI,qBA0LhB,CAAC"}
|
|
@@ -10,49 +10,109 @@ const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
|
10
10
|
const chalk_1 = __importDefault(require("chalk"));
|
|
11
11
|
const ora_1 = __importDefault(require("ora"));
|
|
12
12
|
const registry_1 = require("../utils/registry");
|
|
13
|
+
const framework_1 = require("../utils/framework");
|
|
14
|
+
const FRAMEWORK_CHOICES = [
|
|
15
|
+
{ title: "Next.js (App Router)", value: "next-app" },
|
|
16
|
+
{ title: "Next.js (Pages Router)", value: "next-pages" },
|
|
17
|
+
{ title: "Vite", value: "vite" },
|
|
18
|
+
{ title: "Astro", value: "astro" },
|
|
19
|
+
{ title: "Remix / React Router", value: "remix" },
|
|
20
|
+
{ title: "Other", value: "unknown" },
|
|
21
|
+
];
|
|
22
|
+
function resolveRsc(value) {
|
|
23
|
+
if (value === "next-app")
|
|
24
|
+
return { framework: "next", rsc: true };
|
|
25
|
+
if (value === "next-pages")
|
|
26
|
+
return { framework: "next", rsc: false };
|
|
27
|
+
return { framework: value, rsc: false };
|
|
28
|
+
}
|
|
13
29
|
const init = async () => {
|
|
14
|
-
console.log(chalk_1.default.bold.green("🍏 Apple Design System Initialization"));
|
|
15
|
-
|
|
30
|
+
console.log(chalk_1.default.bold.green("\n🍏 Apple Design System — Initialization\n"));
|
|
31
|
+
// ── 1. Auto-detect framework ──────────────────────────────────────────────
|
|
32
|
+
const detected = (0, framework_1.detectFramework)(process.cwd());
|
|
33
|
+
if (detected.framework !== "unknown") {
|
|
34
|
+
const rscNote = detected.rsc ? chalk_1.default.gray(" (App Router — RSC enabled)") : "";
|
|
35
|
+
console.log(chalk_1.default.cyan(`Detected framework: `) +
|
|
36
|
+
chalk_1.default.bold(detected.label) +
|
|
37
|
+
rscNote);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
console.log(chalk_1.default.yellow("Could not auto-detect framework."));
|
|
41
|
+
}
|
|
42
|
+
// ── 2. Confirm or override ────────────────────────────────────────────────
|
|
43
|
+
let framework = detected.framework;
|
|
44
|
+
let rsc = detected.rsc;
|
|
45
|
+
if (detected.framework !== "unknown") {
|
|
46
|
+
const { confirm } = await (0, prompts_1.default)({
|
|
47
|
+
type: "confirm",
|
|
48
|
+
name: "confirm",
|
|
49
|
+
message: `Is this correct?`,
|
|
50
|
+
initial: true,
|
|
51
|
+
});
|
|
52
|
+
if (!confirm) {
|
|
53
|
+
const { choice } = await (0, prompts_1.default)({
|
|
54
|
+
type: "select",
|
|
55
|
+
name: "choice",
|
|
56
|
+
message: "Select your framework:",
|
|
57
|
+
choices: FRAMEWORK_CHOICES,
|
|
58
|
+
});
|
|
59
|
+
const resolved = resolveRsc(choice);
|
|
60
|
+
framework = resolved.framework;
|
|
61
|
+
rsc = resolved.rsc;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
const { choice } = await (0, prompts_1.default)({
|
|
66
|
+
type: "select",
|
|
67
|
+
name: "choice",
|
|
68
|
+
message: "Select your framework:",
|
|
69
|
+
choices: FRAMEWORK_CHOICES,
|
|
70
|
+
});
|
|
71
|
+
const resolved = resolveRsc(choice);
|
|
72
|
+
framework = resolved.framework;
|
|
73
|
+
rsc = resolved.rsc;
|
|
74
|
+
}
|
|
75
|
+
// ── 3. Rest of project config ─────────────────────────────────────────────
|
|
16
76
|
const response = await (0, prompts_1.default)([
|
|
17
77
|
{
|
|
18
78
|
type: "text",
|
|
19
79
|
name: "projectRoot",
|
|
20
|
-
message: "
|
|
80
|
+
message: "Project root directory?",
|
|
21
81
|
initial: "./src",
|
|
22
82
|
},
|
|
23
83
|
{
|
|
24
84
|
type: "text",
|
|
25
85
|
name: "componentsDir",
|
|
26
|
-
message: "Where
|
|
86
|
+
message: "Where to install components?",
|
|
27
87
|
initial: (prev) => `${prev}/components/ui`,
|
|
28
88
|
},
|
|
29
89
|
{
|
|
30
90
|
type: "text",
|
|
31
91
|
name: "globalCss",
|
|
32
|
-
message: "
|
|
33
|
-
initial: (
|
|
92
|
+
message: "Global CSS file path?",
|
|
93
|
+
initial: (_prev, values) => `${values.projectRoot}/index.css`,
|
|
34
94
|
},
|
|
35
95
|
{
|
|
36
96
|
type: "confirm",
|
|
37
97
|
name: "installDeps",
|
|
38
|
-
message: "
|
|
98
|
+
message: "Install required dependencies now?",
|
|
39
99
|
initial: true,
|
|
40
100
|
},
|
|
41
101
|
]);
|
|
42
102
|
const spin = (0, ora_1.default)("Configuring project...").start();
|
|
43
|
-
//
|
|
103
|
+
// ── 4. Write design-system.json ───────────────────────────────────────────
|
|
44
104
|
const config = {
|
|
105
|
+
framework,
|
|
106
|
+
rsc,
|
|
45
107
|
componentsDir: response.componentsDir,
|
|
46
108
|
globalCss: response.globalCss,
|
|
109
|
+
components: {},
|
|
47
110
|
};
|
|
48
111
|
await fs_extra_1.default.writeJSON("design-system.json", config, { spaces: 2 });
|
|
49
|
-
spin.succeed("
|
|
50
|
-
//
|
|
112
|
+
spin.succeed("Created design-system.json");
|
|
113
|
+
// ── 5. Ensure directories ─────────────────────────────────────────────────
|
|
51
114
|
const resolvedComponentsDir = path_1.default.resolve(process.cwd(), response.componentsDir);
|
|
52
115
|
await fs_extra_1.default.ensureDir(resolvedComponentsDir);
|
|
53
|
-
// Also create a lib/utils.ts for cn helper if it doesn't exist
|
|
54
|
-
// We try to infer lib location from componentsDir or projectRoot
|
|
55
|
-
// If components are in src/components/ui, lib should be src/lib
|
|
56
116
|
const utilsDir = path_1.default.resolve(process.cwd(), response.projectRoot, "lib");
|
|
57
117
|
const utilsPath = path_1.default.resolve(utilsDir, "utils.ts");
|
|
58
118
|
if (!fs_extra_1.default.existsSync(utilsPath)) {
|
|
@@ -64,9 +124,9 @@ export function cn(...inputs: ClassValue[]) {
|
|
|
64
124
|
return twMerge(clsx(inputs))
|
|
65
125
|
}
|
|
66
126
|
`);
|
|
67
|
-
console.log(chalk_1.default.green(`Created ${path_1.default.relative(process.cwd(), utilsPath)}
|
|
127
|
+
console.log(chalk_1.default.green(`Created ${path_1.default.relative(process.cwd(), utilsPath)}`));
|
|
68
128
|
}
|
|
69
|
-
// Fetch and
|
|
129
|
+
// ── 6. Fetch and write global CSS ─────────────────────────────────────────
|
|
70
130
|
spin.text = "Fetching global styles...";
|
|
71
131
|
const cssContent = await (0, registry_1.getGlobalCss)();
|
|
72
132
|
if (cssContent) {
|
|
@@ -75,45 +135,52 @@ export function cn(...inputs: ClassValue[]) {
|
|
|
75
135
|
const cssPath = path_1.default.resolve(stylesDir, "apple-ds.css");
|
|
76
136
|
await fs_extra_1.default.writeFile(cssPath, cssContent);
|
|
77
137
|
console.log(chalk_1.default.green(`Created ${path_1.default.relative(process.cwd(), cssPath)}`));
|
|
78
|
-
// Inject CSS import into global CSS if provided
|
|
79
138
|
if (response.globalCss) {
|
|
80
139
|
const globalCssPath = path_1.default.resolve(process.cwd(), response.globalCss);
|
|
81
140
|
if (fs_extra_1.default.existsSync(globalCssPath)) {
|
|
82
141
|
let existingCss = await fs_extra_1.default.readFile(globalCssPath, "utf-8");
|
|
83
|
-
// Calculate relative path from global CSS to apple-ds.css
|
|
84
142
|
const globalCssDir = path_1.default.dirname(globalCssPath);
|
|
85
143
|
const relativePath = path_1.default.relative(globalCssDir, cssPath);
|
|
86
|
-
// Ensure it starts with ./ or ../
|
|
87
144
|
const importPath = relativePath.startsWith(".") ? relativePath : `./${relativePath}`;
|
|
88
145
|
const importStatement = `@import '${importPath}';`;
|
|
89
146
|
if (!existingCss.includes("apple-ds.css")) {
|
|
90
|
-
// Prepend to file
|
|
91
147
|
await fs_extra_1.default.writeFile(globalCssPath, `${importStatement}\n${existingCss}`);
|
|
92
148
|
console.log(chalk_1.default.green(`Updated ${response.globalCss} with design system styles.`));
|
|
93
149
|
}
|
|
94
150
|
}
|
|
95
151
|
else {
|
|
96
|
-
console.log(chalk_1.default.yellow(`
|
|
152
|
+
console.log(chalk_1.default.yellow(`CSS file not found at ${response.globalCss}. Skipping import.`));
|
|
97
153
|
}
|
|
98
154
|
}
|
|
99
155
|
}
|
|
100
156
|
else {
|
|
101
|
-
spin.warn("Failed to fetch global styles.
|
|
157
|
+
spin.warn("Failed to fetch global styles. Install styles manually.");
|
|
102
158
|
}
|
|
159
|
+
// ── 7. Install deps ───────────────────────────────────────────────────────
|
|
103
160
|
if (response.installDeps) {
|
|
104
161
|
spin.start("Installing dependencies...");
|
|
105
162
|
try {
|
|
106
|
-
const { execSync } = require(
|
|
107
|
-
execSync(
|
|
163
|
+
const { execSync } = require("child_process");
|
|
164
|
+
execSync("npm install clsx tailwind-merge cva framer-motion lucide-react", {
|
|
165
|
+
stdio: "inherit",
|
|
166
|
+
});
|
|
108
167
|
spin.succeed("Dependencies installed.");
|
|
109
168
|
}
|
|
110
|
-
catch
|
|
111
|
-
spin.fail("Failed to install dependencies.
|
|
169
|
+
catch {
|
|
170
|
+
spin.fail("Failed to install dependencies. Run manually:");
|
|
112
171
|
console.log(chalk_1.default.cyan("npm install clsx tailwind-merge cva framer-motion lucide-react"));
|
|
113
172
|
}
|
|
114
173
|
}
|
|
115
|
-
|
|
116
|
-
|
|
174
|
+
// ── 8. Framework-specific hints ───────────────────────────────────────────
|
|
175
|
+
if (framework === "astro") {
|
|
176
|
+
console.log(chalk_1.default.yellow("\n⚠ Astro: Components use React — make sure to add the React integration\n" +
|
|
177
|
+
" and use client:* directives when mounting them in .astro files."));
|
|
178
|
+
}
|
|
179
|
+
if (!rsc && framework !== "astro") {
|
|
180
|
+
console.log(chalk_1.default.gray("\nℹ 'use client' directives are stripped from components (not needed outside Next.js App Router)."));
|
|
181
|
+
}
|
|
182
|
+
console.log(chalk_1.default.bold.green("\n✓ Project initialized."));
|
|
183
|
+
console.log(`Run ${chalk_1.default.cyan("npx apple-design-system add")} to install components.`);
|
|
117
184
|
};
|
|
118
185
|
exports.init = init;
|
|
119
186
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../cli/commands/init.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA8B;AAC9B,gDAAwB;AACxB,wDAA0B;AAC1B,kDAA0B;AAC1B,8CAAsB;AACtB,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../cli/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-components.d.ts","sourceRoot":"","sources":["../../../cli/commands/update-components.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update-components.d.ts","sourceRoot":"","sources":["../../../cli/commands/update-components.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,gBAAgB,qBAwG5B,CAAC"}
|
|
@@ -10,65 +10,44 @@ const chalk_1 = __importDefault(require("chalk"));
|
|
|
10
10
|
const ora_1 = __importDefault(require("ora"));
|
|
11
11
|
const prompts_1 = __importDefault(require("prompts"));
|
|
12
12
|
const registry_1 = require("../utils/registry");
|
|
13
|
+
const config_1 = require("../utils/config");
|
|
13
14
|
const updateComponents = async () => {
|
|
14
|
-
|
|
15
|
-
let config = { componentsDir: "./components/ui" };
|
|
16
|
-
if (fs_extra_1.default.existsSync("design-system.json")) {
|
|
17
|
-
try {
|
|
18
|
-
config = await fs_extra_1.default.readJSON("design-system.json");
|
|
19
|
-
}
|
|
20
|
-
catch (e) {
|
|
21
|
-
console.warn("Could not read design-system.json, using defaults.");
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
console.warn("design-system.json not found. Using default ./components/ui");
|
|
26
|
-
}
|
|
15
|
+
const config = await (0, config_1.loadConfig)();
|
|
27
16
|
const resolvedComponentsDir = path_1.default.resolve(process.cwd(), config.componentsDir);
|
|
28
|
-
//
|
|
29
|
-
if (!fs_extra_1.default.existsSync(resolvedComponentsDir)) {
|
|
30
|
-
console.log(chalk_1.default.yellow(`Components directory not found at ${config.componentsDir}`));
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
// 3. Get installed components
|
|
17
|
+
// 1. Scan installed components (folders + flat files + config tracking)
|
|
34
18
|
const spinner = (0, ora_1.default)("Scanning for installed components...").start();
|
|
35
|
-
const entries = await fs_extra_1.default.readdir(resolvedComponentsDir, { withFileTypes: true });
|
|
36
19
|
const availableComponents = await (0, registry_1.getAvailableComponents)();
|
|
37
|
-
const installedComponents =
|
|
38
|
-
.filter((e) => e.isDirectory())
|
|
39
|
-
.map((e) => e.name)
|
|
40
|
-
.filter((name) => availableComponents.includes(name))
|
|
41
|
-
.sort();
|
|
20
|
+
const installedComponents = await (0, config_1.detectInstalledComponents)(resolvedComponentsDir, availableComponents, config);
|
|
42
21
|
spinner.stop();
|
|
43
22
|
if (installedComponents.length === 0) {
|
|
44
23
|
console.log(chalk_1.default.yellow("No installed components found."));
|
|
45
24
|
return;
|
|
46
25
|
}
|
|
47
26
|
console.log(chalk_1.default.blue(`\nFound ${installedComponents.length} installed components:\n`));
|
|
48
|
-
//
|
|
49
|
-
const response = await (0, prompts_1.default)(
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
},
|
|
59
|
-
]);
|
|
27
|
+
// 2. Selection
|
|
28
|
+
const response = await (0, prompts_1.default)({
|
|
29
|
+
type: "select",
|
|
30
|
+
name: "updateMode",
|
|
31
|
+
message: "What would you like to do?",
|
|
32
|
+
choices: [
|
|
33
|
+
{ title: "Update all components", value: "all" },
|
|
34
|
+
{ title: "Select specific components", value: "select" },
|
|
35
|
+
],
|
|
36
|
+
});
|
|
60
37
|
let componentsToUpdate = [];
|
|
61
38
|
if (response.updateMode === "all") {
|
|
62
39
|
componentsToUpdate = installedComponents;
|
|
63
40
|
console.log(chalk_1.default.green(`\n✓ Selected all ${installedComponents.length} components`));
|
|
64
41
|
}
|
|
65
42
|
else {
|
|
66
|
-
// Let user select specific components
|
|
67
43
|
const selectResponse = await (0, prompts_1.default)({
|
|
68
44
|
type: "multiselect",
|
|
69
45
|
name: "items",
|
|
70
46
|
message: "Which components would you like to update?",
|
|
71
|
-
choices: installedComponents.map((c) => ({
|
|
47
|
+
choices: installedComponents.map((c) => ({
|
|
48
|
+
title: `${c}${config.components[c] ? chalk_1.default.gray(` (v${config.components[c].version})`) : ""}`,
|
|
49
|
+
value: c,
|
|
50
|
+
})),
|
|
72
51
|
min: 1,
|
|
73
52
|
});
|
|
74
53
|
componentsToUpdate = selectResponse.items;
|
|
@@ -78,7 +57,8 @@ const updateComponents = async () => {
|
|
|
78
57
|
}
|
|
79
58
|
console.log(chalk_1.default.green(`\n✓ Selected ${componentsToUpdate.length} components`));
|
|
80
59
|
}
|
|
81
|
-
//
|
|
60
|
+
// 3. Fetch and update
|
|
61
|
+
const dsVersion = await (0, registry_1.getRegistryVersion)();
|
|
82
62
|
const updateSpinner = (0, ora_1.default)("Updating components...").start();
|
|
83
63
|
let successCount = 0;
|
|
84
64
|
let failCount = 0;
|
|
@@ -94,8 +74,10 @@ const updateComponents = async () => {
|
|
|
94
74
|
const componentDir = path_1.default.resolve(resolvedComponentsDir, component);
|
|
95
75
|
await fs_extra_1.default.ensureDir(componentDir);
|
|
96
76
|
for (const file of files) {
|
|
97
|
-
|
|
77
|
+
const content = config.rsc ? file.content : (0, config_1.stripUseClient)(file.content);
|
|
78
|
+
await fs_extra_1.default.writeFile(path_1.default.join(componentDir, file.name), content);
|
|
98
79
|
}
|
|
80
|
+
await (0, config_1.recordInstall)(config, component, dsVersion, "folder");
|
|
99
81
|
updateSpinner.succeed(`Updated ${component}`);
|
|
100
82
|
successCount++;
|
|
101
83
|
}
|
|
@@ -105,7 +87,8 @@ const updateComponents = async () => {
|
|
|
105
87
|
}
|
|
106
88
|
}
|
|
107
89
|
updateSpinner.stop();
|
|
108
|
-
|
|
90
|
+
await (0, config_1.saveConfig)(config);
|
|
91
|
+
// 4. Summary
|
|
109
92
|
console.log(chalk_1.default.bold("\n=== Update Summary ==="));
|
|
110
93
|
console.log(chalk_1.default.green(`✓ Successfully updated: ${successCount} components`));
|
|
111
94
|
if (failCount > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-components.js","sourceRoot":"","sources":["../../../cli/commands/update-components.ts"],"names":[],"mappings":";;;;;;AAAA,wDAA0B;AAC1B,gDAAwB;AACxB,kDAA0B;AAC1B,8CAAsB;AACtB,sDAA8B;AAC9B,
|
|
1
|
+
{"version":3,"file":"update-components.js","sourceRoot":"","sources":["../../../cli/commands/update-components.ts"],"names":[],"mappings":";;;;;;AAAA,wDAA0B;AAC1B,gDAAwB;AACxB,kDAA0B;AAC1B,8CAAsB;AACtB,sDAA8B;AAC9B,gDAAkG;AAClG,4CAAmH;AAE5G,MAAM,gBAAgB,GAAG,KAAK,IAAI,EAAE;IACzC,MAAM,MAAM,GAAG,MAAM,IAAA,mBAAU,GAAE,CAAC;IAClC,MAAM,qBAAqB,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAEhF,wEAAwE;IACxE,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,sCAAsC,CAAC,CAAC,KAAK,EAAE,CAAC;IACpE,MAAM,mBAAmB,GAAG,MAAM,IAAA,iCAAsB,GAAE,CAAC;IAC3D,MAAM,mBAAmB,GAAG,MAAM,IAAA,kCAAyB,EACzD,qBAAqB,EACrB,mBAAmB,EACnB,MAAM,CACP,CAAC;IACF,OAAO,CAAC,IAAI,EAAE,CAAC;IAEf,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,WAAW,mBAAmB,CAAC,MAAM,0BAA0B,CAAC,CAAC,CAAC;IAEzF,eAAe;IACf,MAAM,QAAQ,GAAG,MAAM,IAAA,iBAAO,EAAC;QAC7B,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,4BAA4B;QACrC,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,uBAAuB,EAAE,KAAK,EAAE,KAAK,EAAE;YAChD,EAAE,KAAK,EAAE,4BAA4B,EAAE,KAAK,EAAE,QAAQ,EAAE;SACzD;KACF,CAAC,CAAC;IAEH,IAAI,kBAAkB,GAAa,EAAE,CAAC;IAEtC,IAAI,QAAQ,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;QAClC,kBAAkB,GAAG,mBAAmB,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,oBAAoB,mBAAmB,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC;IACxF,CAAC;SAAM,CAAC;QACN,MAAM,cAAc,GAAG,MAAM,IAAA,iBAAO,EAAC;YACnC,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,4CAA4C;YACrD,OAAO,EAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACvC,KAAK,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAK,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC7F,KAAK,EAAE,CAAC;aACT,CAAC,CAAC;YACH,GAAG,EAAE,CAAC;SACP,CAAC,CAAC;QAEH,kBAAkB,GAAG,cAAc,CAAC,KAAK,CAAC;QAE1C,IAAI,CAAC,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,gBAAgB,kBAAkB,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC;IACnF,CAAC;IAED,sBAAsB;IACtB,MAAM,SAAS,GAAG,MAAM,IAAA,6BAAkB,GAAE,CAAC;IAC7C,MAAM,aAAa,GAAG,IAAA,aAAG,EAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE,CAAC;IAC5D,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,MAAM,SAAS,IAAI,kBAAkB,EAAE,CAAC;QAC3C,aAAa,CAAC,IAAI,GAAG,YAAY,SAAS,KAAK,CAAC;QAEhD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAA,4BAAiB,EAAC,SAAS,CAAC,CAAC;YAEjD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,aAAa,CAAC,IAAI,CAAC,cAAc,SAAS,0BAA0B,CAAC,CAAC;gBACtE,SAAS,EAAE,CAAC;gBACZ,SAAS;YACX,CAAC;YAED,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;YACpE,MAAM,kBAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YAEjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAA,uBAAc,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACzE,MAAM,kBAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YAClE,CAAC;YAED,MAAM,IAAA,sBAAa,EAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC5D,aAAa,CAAC,OAAO,CAAC,WAAW,SAAS,EAAE,CAAC,CAAC;YAC9C,YAAY,EAAE,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,aAAa,CAAC,IAAI,CAAC,oBAAoB,SAAS,KAAK,KAAK,EAAE,CAAC,CAAC;YAC9D,SAAS,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAED,aAAa,CAAC,IAAI,EAAE,CAAC;IACrB,MAAM,IAAA,mBAAU,EAAC,MAAM,CAAC,CAAC;IAEzB,aAAa;IACb,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,2BAA2B,YAAY,aAAa,CAAC,CAAC,CAAC;IAC/E,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,uBAAuB,SAAS,aAAa,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;AAC3C,CAAC,CAAC;AAxGW,QAAA,gBAAgB,oBAwG3B"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface ComponentRecord {
|
|
2
|
+
version: string;
|
|
3
|
+
type: "folder" | "flat";
|
|
4
|
+
installedAt: string;
|
|
5
|
+
updatedAt: string;
|
|
6
|
+
}
|
|
7
|
+
import type { Framework } from "./framework";
|
|
8
|
+
export interface DesignSystemConfig {
|
|
9
|
+
componentsDir: string;
|
|
10
|
+
globalCss?: string;
|
|
11
|
+
framework: Framework;
|
|
12
|
+
/** True when using React Server Components (Next.js App Router). */
|
|
13
|
+
rsc: boolean;
|
|
14
|
+
components: Record<string, ComponentRecord>;
|
|
15
|
+
}
|
|
16
|
+
export declare function loadConfig(): Promise<DesignSystemConfig>;
|
|
17
|
+
export declare function saveConfig(config: DesignSystemConfig): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Strips the `'use client'` directive from a file's content.
|
|
20
|
+
* Used for non-RSC projects (Vite, Astro, Remix, Next.js Pages Router).
|
|
21
|
+
*/
|
|
22
|
+
export declare function stripUseClient(content: string): string;
|
|
23
|
+
export declare function recordInstall(config: DesignSystemConfig, componentName: string, version: string, type: "folder" | "flat"): Promise<DesignSystemConfig>;
|
|
24
|
+
/**
|
|
25
|
+
* Detect installed components from disk.
|
|
26
|
+
* Supports both folder structure (ComponentName/) and flat files (ComponentName.tsx).
|
|
27
|
+
* Also merges components tracked in design-system.json.
|
|
28
|
+
*/
|
|
29
|
+
export declare function detectInstalledComponents(resolvedComponentsDir: string, availableComponents: string[], config: DesignSystemConfig): Promise<string[]>;
|
|
30
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../cli/utils/config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,oEAAoE;IACpE,GAAG,EAAE,OAAO,CAAC;IACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC7C;AAUD,wBAAsB,UAAU,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAY9D;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1E;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAItD;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,kBAAkB,EAC1B,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,QAAQ,GAAG,MAAM,GACtB,OAAO,CAAC,kBAAkB,CAAC,CAU7B;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAC7C,qBAAqB,EAAE,MAAM,EAC7B,mBAAmB,EAAE,MAAM,EAAE,EAC7B,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,MAAM,EAAE,CAAC,CA8BnB"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.loadConfig = loadConfig;
|
|
7
|
+
exports.saveConfig = saveConfig;
|
|
8
|
+
exports.stripUseClient = stripUseClient;
|
|
9
|
+
exports.recordInstall = recordInstall;
|
|
10
|
+
exports.detectInstalledComponents = detectInstalledComponents;
|
|
11
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
12
|
+
const path_1 = __importDefault(require("path"));
|
|
13
|
+
const CONFIG_FILE = "design-system.json";
|
|
14
|
+
const DEFAULT_CONFIG = {
|
|
15
|
+
componentsDir: "./components/ui",
|
|
16
|
+
framework: "unknown",
|
|
17
|
+
rsc: false,
|
|
18
|
+
components: {},
|
|
19
|
+
};
|
|
20
|
+
async function loadConfig() {
|
|
21
|
+
if (!fs_extra_1.default.existsSync(CONFIG_FILE)) {
|
|
22
|
+
console.warn("design-system.json not found. Using defaults.");
|
|
23
|
+
return { ...DEFAULT_CONFIG };
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
const raw = await fs_extra_1.default.readJSON(CONFIG_FILE);
|
|
27
|
+
return { ...DEFAULT_CONFIG, ...raw, components: raw.components ?? {} };
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
console.warn("Could not read design-system.json. Using defaults.");
|
|
31
|
+
return { ...DEFAULT_CONFIG };
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async function saveConfig(config) {
|
|
35
|
+
await fs_extra_1.default.writeJSON(CONFIG_FILE, config, { spaces: 2 });
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Strips the `'use client'` directive from a file's content.
|
|
39
|
+
* Used for non-RSC projects (Vite, Astro, Remix, Next.js Pages Router).
|
|
40
|
+
*/
|
|
41
|
+
function stripUseClient(content) {
|
|
42
|
+
return content
|
|
43
|
+
.replace(/^['"]use client['"]\s*\n?/m, "")
|
|
44
|
+
.trimStart();
|
|
45
|
+
}
|
|
46
|
+
async function recordInstall(config, componentName, version, type) {
|
|
47
|
+
const now = new Date().toISOString();
|
|
48
|
+
const existing = config.components[componentName];
|
|
49
|
+
config.components[componentName] = {
|
|
50
|
+
version,
|
|
51
|
+
type,
|
|
52
|
+
installedAt: existing?.installedAt ?? now,
|
|
53
|
+
updatedAt: now,
|
|
54
|
+
};
|
|
55
|
+
return config;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Detect installed components from disk.
|
|
59
|
+
* Supports both folder structure (ComponentName/) and flat files (ComponentName.tsx).
|
|
60
|
+
* Also merges components tracked in design-system.json.
|
|
61
|
+
*/
|
|
62
|
+
async function detectInstalledComponents(resolvedComponentsDir, availableComponents, config) {
|
|
63
|
+
const found = new Set();
|
|
64
|
+
// 1. From disk
|
|
65
|
+
if (fs_extra_1.default.existsSync(resolvedComponentsDir)) {
|
|
66
|
+
const entries = await fs_extra_1.default.readdir(resolvedComponentsDir, { withFileTypes: true });
|
|
67
|
+
for (const entry of entries) {
|
|
68
|
+
if (entry.isDirectory() && availableComponents.includes(entry.name)) {
|
|
69
|
+
found.add(entry.name);
|
|
70
|
+
}
|
|
71
|
+
else if (entry.isFile()) {
|
|
72
|
+
const name = path_1.default.basename(entry.name, path_1.default.extname(entry.name));
|
|
73
|
+
if ((entry.name.endsWith(".tsx") || entry.name.endsWith(".ts")) &&
|
|
74
|
+
availableComponents.includes(name)) {
|
|
75
|
+
found.add(name);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// 2. From config tracking (catches components installed elsewhere)
|
|
81
|
+
for (const name of Object.keys(config.components)) {
|
|
82
|
+
if (availableComponents.includes(name)) {
|
|
83
|
+
found.add(name);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return Array.from(found).sort();
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../cli/utils/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type Framework = "next" | "vite" | "astro" | "remix" | "unknown";
|
|
2
|
+
export interface FrameworkInfo {
|
|
3
|
+
framework: Framework;
|
|
4
|
+
/** True when the project uses React Server Components (Next.js App Router). */
|
|
5
|
+
rsc: boolean;
|
|
6
|
+
label: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function detectFramework(cwd?: string): FrameworkInfo;
|
|
9
|
+
//# sourceMappingURL=framework.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework.d.ts","sourceRoot":"","sources":["../../../cli/utils/framework.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;AAExE,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,SAAS,CAAC;IACrB,+EAA+E;IAC/E,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAwDD,wBAAgB,eAAe,CAAC,GAAG,GAAE,MAAsB,GAAG,aAAa,CAW1E"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.detectFramework = detectFramework;
|
|
7
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const CONFIG_FILES = [
|
|
10
|
+
{ file: ["next.config.js", "next.config.ts", "next.config.mjs", "next.config.cjs"], framework: "next" },
|
|
11
|
+
{ file: ["astro.config.mjs", "astro.config.ts", "astro.config.js"], framework: "astro" },
|
|
12
|
+
{ file: ["react-router.config.ts", "react-router.config.js", "remix.config.js"], framework: "remix" },
|
|
13
|
+
{ file: ["vite.config.ts", "vite.config.js", "vite.config.mts", "vite.config.mjs"], framework: "vite" },
|
|
14
|
+
];
|
|
15
|
+
const FRAMEWORK_LABELS = {
|
|
16
|
+
next: "Next.js",
|
|
17
|
+
vite: "Vite",
|
|
18
|
+
astro: "Astro",
|
|
19
|
+
remix: "Remix / React Router",
|
|
20
|
+
unknown: "Unknown",
|
|
21
|
+
};
|
|
22
|
+
function hasAppRouter(cwd) {
|
|
23
|
+
return (fs_extra_1.default.existsSync(path_1.default.join(cwd, "app")) ||
|
|
24
|
+
fs_extra_1.default.existsSync(path_1.default.join(cwd, "src", "app")));
|
|
25
|
+
}
|
|
26
|
+
function detectFromConfigFiles(cwd) {
|
|
27
|
+
for (const { file, framework } of CONFIG_FILES) {
|
|
28
|
+
const files = Array.isArray(file) ? file : [file];
|
|
29
|
+
if (files.some((f) => fs_extra_1.default.existsSync(path_1.default.join(cwd, f)))) {
|
|
30
|
+
return framework;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
function detectFromPackageJson(cwd) {
|
|
36
|
+
const pkgPath = path_1.default.join(cwd, "package.json");
|
|
37
|
+
if (!fs_extra_1.default.existsSync(pkgPath))
|
|
38
|
+
return null;
|
|
39
|
+
try {
|
|
40
|
+
const pkg = fs_extra_1.default.readJSONSync(pkgPath);
|
|
41
|
+
const deps = {
|
|
42
|
+
...pkg.dependencies,
|
|
43
|
+
...pkg.devDependencies,
|
|
44
|
+
};
|
|
45
|
+
if (deps["next"])
|
|
46
|
+
return "next";
|
|
47
|
+
if (deps["astro"])
|
|
48
|
+
return "astro";
|
|
49
|
+
if (deps["@remix-run/react"] || deps["react-router"])
|
|
50
|
+
return "remix";
|
|
51
|
+
if (deps["vite"])
|
|
52
|
+
return "vite";
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// ignore
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
function detectFramework(cwd = process.cwd()) {
|
|
60
|
+
const framework = detectFromConfigFiles(cwd) ?? detectFromPackageJson(cwd) ?? "unknown";
|
|
61
|
+
const rsc = framework === "next" && hasAppRouter(cwd);
|
|
62
|
+
return {
|
|
63
|
+
framework,
|
|
64
|
+
rsc,
|
|
65
|
+
label: FRAMEWORK_LABELS[framework],
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=framework.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework.js","sourceRoot":"","sources":["../../../cli/utils/framework.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../cli/utils/registry.ts"],"names":[],"mappings":"AAuCA,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAGhE;AAED,wBAAsB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../cli/utils/registry.ts"],"names":[],"mappings":"AAuCA,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAG1D;AAED,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAGhE;AAED,wBAAsB,iBAAiB,CACrC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,CAAC,CAuB1D;AAED,wBAAsB,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAIvF;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAW3D"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// This registry.ts now fetches from a remote JSON file on GitHub Raw.
|
|
3
|
-
// It replaces local file system calls with fetch.
|
|
4
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getRegistryVersion = getRegistryVersion;
|
|
5
4
|
exports.getAvailableComponents = getAvailableComponents;
|
|
6
5
|
exports.getComponentFiles = getComponentFiles;
|
|
7
6
|
exports.getComponentDependencies = getComponentDependencies;
|
|
8
7
|
exports.getGlobalCss = getGlobalCss;
|
|
9
|
-
//
|
|
8
|
+
// Fetches from a remote JSON registry on GitHub Raw.
|
|
10
9
|
const REGISTRY_URL = "https://raw.githubusercontent.com/smart-coder-labs/design-system/refs/heads/main/registry.json";
|
|
11
10
|
const CSS_URL = "https://raw.githubusercontent.com/smart-coder-labs/design-system/refs/heads/main/globals.css";
|
|
12
11
|
let cachedRegistry = null;
|
|
@@ -16,10 +15,9 @@ async function fetchRegistry() {
|
|
|
16
15
|
try {
|
|
17
16
|
const res = await fetch(REGISTRY_URL);
|
|
18
17
|
if (!res.ok) {
|
|
19
|
-
throw new Error(`Failed to fetch registry
|
|
18
|
+
throw new Error(`Failed to fetch registry: ${res.statusText}`);
|
|
20
19
|
}
|
|
21
|
-
|
|
22
|
-
cachedRegistry = data;
|
|
20
|
+
cachedRegistry = (await res.json());
|
|
23
21
|
return cachedRegistry;
|
|
24
22
|
}
|
|
25
23
|
catch (error) {
|
|
@@ -27,9 +25,13 @@ async function fetchRegistry() {
|
|
|
27
25
|
return {};
|
|
28
26
|
}
|
|
29
27
|
}
|
|
28
|
+
async function getRegistryVersion() {
|
|
29
|
+
const registry = await fetchRegistry();
|
|
30
|
+
return registry._version ?? "unknown";
|
|
31
|
+
}
|
|
30
32
|
async function getAvailableComponents() {
|
|
31
33
|
const registry = await fetchRegistry();
|
|
32
|
-
return Object.keys(registry);
|
|
34
|
+
return Object.keys(registry).filter((k) => k !== "_version");
|
|
33
35
|
}
|
|
34
36
|
async function getComponentFiles(componentName) {
|
|
35
37
|
const registry = await fetchRegistry();
|
|
@@ -41,7 +43,7 @@ async function getComponentFiles(componentName) {
|
|
|
41
43
|
const results = await Promise.all(component.files.map(async (file) => {
|
|
42
44
|
const res = await fetch(file.url);
|
|
43
45
|
if (!res.ok) {
|
|
44
|
-
throw new Error(`Failed to fetch ${file.name}
|
|
46
|
+
throw new Error(`Failed to fetch ${file.name}: ${res.statusText}`);
|
|
45
47
|
}
|
|
46
48
|
return { name: file.name, content: await res.text() };
|
|
47
49
|
}));
|
|
@@ -55,13 +57,13 @@ async function getComponentFiles(componentName) {
|
|
|
55
57
|
async function getComponentDependencies(componentName) {
|
|
56
58
|
const registry = await fetchRegistry();
|
|
57
59
|
const component = registry[componentName];
|
|
58
|
-
return component?.dependencies
|
|
60
|
+
return component?.dependencies ?? [];
|
|
59
61
|
}
|
|
60
62
|
async function getGlobalCss() {
|
|
61
63
|
try {
|
|
62
64
|
const res = await fetch(CSS_URL);
|
|
63
65
|
if (!res.ok) {
|
|
64
|
-
throw new Error(`Failed to fetch global css
|
|
66
|
+
throw new Error(`Failed to fetch global css: ${res.statusText}`);
|
|
65
67
|
}
|
|
66
68
|
return await res.text();
|
|
67
69
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../cli/utils/registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../cli/utils/registry.ts"],"names":[],"mappings":"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"}
|