@axis-ds/cli 1.2.0 → 1.2.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/dist/{chunk-GCOWKKXG.js → chunk-AHQT77FJ.js} +4 -4
- package/dist/{chunk-D26GW2HO.js → chunk-QORBOSUA.js} +1 -1
- package/dist/{chunk-WRDOGNSG.js → chunk-ZVVACWEW.js} +3 -3
- package/dist/index.js +395 -112
- package/dist/monet.d.ts +3 -3
- package/dist/monet.js +1 -1
- package/dist/sync/index.js +1 -1
- package/dist/v0.d.ts +3 -3
- package/dist/v0.js +1 -1
- package/package.json +1 -1
|
@@ -84,7 +84,7 @@ ${result}`;
|
|
|
84
84
|
console.log(chalk.bold("\uBC29\uBC95 3: \uCF54\uB4DC \uBCF5\uC0AC"));
|
|
85
85
|
console.log(chalk.gray(" 1. v0.app\uC5D0\uC11C \uCF54\uB4DC \uD0ED \uC5F4\uAE30"));
|
|
86
86
|
console.log(chalk.gray(" 2. \uD30C\uC77C\uBCC4\uB85C \uCF54\uB4DC \uBCF5\uC0AC"));
|
|
87
|
-
console.log(chalk.gray(" 3. axis-cli v0 convert\uB85C \uBCC0\uD658\n"));
|
|
87
|
+
console.log(chalk.gray(" 3. npx @axis-ds/cli v0 convert\uB85C \uBCC0\uD658\n"));
|
|
88
88
|
const { method } = await prompts({
|
|
89
89
|
type: "select",
|
|
90
90
|
name: "method",
|
|
@@ -118,7 +118,7 @@ ${result}`;
|
|
|
118
118
|
console.log(chalk.bold("3. \uB85C\uCEEC\uC5D0\uC11C \uD074\uB860:"));
|
|
119
119
|
console.log(chalk.cyan(" git clone https://github.com/your-org/v0-project.git\n"));
|
|
120
120
|
console.log(chalk.bold("4. AXIS \uBCC0\uD658:"));
|
|
121
|
-
console.log(chalk.cyan(" axis-cli v0 convert ./v0-project/components/*.tsx\n"));
|
|
121
|
+
console.log(chalk.cyan(" npx @axis-ds/cli v0 convert ./v0-project/components/*.tsx\n"));
|
|
122
122
|
console.log(chalk.gray("\uD301: GitHub Actions\uB85C \uC790\uB3D9 \uBCC0\uD658 \uC6CC\uD06C\uD50C\uB85C\uB3C4 \uC124\uC815 \uAC00\uB2A5\uD569\uB2C8\uB2E4.\n"));
|
|
123
123
|
}
|
|
124
124
|
// ZIP 파일에서 변환
|
|
@@ -134,7 +134,7 @@ ${result}`;
|
|
|
134
134
|
console.log(chalk.yellow("\nZIP \uBCC0\uD658 \uAE30\uB2A5\uC740 \uCD94\uD6C4 \uAD6C\uD604 \uC608\uC815\uC785\uB2C8\uB2E4."));
|
|
135
135
|
console.log(chalk.gray("\uD604\uC7AC\uB294 \uC218\uB3D9\uC73C\uB85C \uC555\uCD95 \uD574\uC81C \uD6C4 convert \uBA85\uB839\uC5B4\uB97C \uC0AC\uC6A9\uD558\uC138\uC694:\n"));
|
|
136
136
|
console.log(chalk.cyan(" unzip v0-project.zip -d ./v0-project"));
|
|
137
|
-
console.log(chalk.cyan(" axis-cli v0 convert ./v0-project/components/*.tsx\n"));
|
|
137
|
+
console.log(chalk.cyan(" npx @axis-ds/cli v0 convert ./v0-project/components/*.tsx\n"));
|
|
138
138
|
}
|
|
139
139
|
// 클립보드에서 변환
|
|
140
140
|
async convertFromClipboard() {
|
|
@@ -185,7 +185,7 @@ ${result}`;
|
|
|
185
185
|
console.log(chalk.gray(" AI/LLM \uAD00\uB828 UI\uC5D0\uB294 @axis-ds/agentic-ui \uC0AC\uC6A9:"));
|
|
186
186
|
console.log(chalk.cyan(" import { StreamingText } from '@axis-ds/agentic-ui'\n"));
|
|
187
187
|
console.log(chalk.bold("5. \uC790\uB3D9 \uBCC0\uD658"));
|
|
188
|
-
console.log(chalk.cyan(" axis-cli v0 convert <file.tsx>\n"));
|
|
188
|
+
console.log(chalk.cyan(" npx @axis-ds/cli v0 convert <file.tsx>\n"));
|
|
189
189
|
}
|
|
190
190
|
};
|
|
191
191
|
function getV0Url(path2 = "") {
|
|
@@ -852,7 +852,7 @@ async function initSync(owner, repo, projectNumber) {
|
|
|
852
852
|
console.log(chalk.gray(` \uD504\uB85C\uC81D\uD2B8: #${projectNumber}`));
|
|
853
853
|
console.log();
|
|
854
854
|
console.log(chalk.cyan("\uB2E4\uC74C \uBA85\uB839\uC5B4\uB85C \uB3D9\uAE30\uD654\uB97C \uC2DC\uC791\uD558\uC138\uC694:"));
|
|
855
|
-
console.log(chalk.cyan(" npx axis-cli sync"));
|
|
855
|
+
console.log(chalk.cyan(" npx @axis-ds/cli sync"));
|
|
856
856
|
console.log();
|
|
857
857
|
} catch (error) {
|
|
858
858
|
spinner.fail(`\uC624\uB958: ${error.message}`);
|
|
@@ -35,8 +35,8 @@ var MonetClient = class {
|
|
|
35
35
|
);
|
|
36
36
|
}
|
|
37
37
|
console.log(chalk.gray("\n\uC0AC\uC6A9\uBC95:"));
|
|
38
|
-
console.log(chalk.gray(" axis-cli monet browse <category> # \uCE74\uD14C\uACE0\uB9AC \uCEF4\uD3EC\uB10C\uD2B8 \uBCF4\uAE30"));
|
|
39
|
-
console.log(chalk.gray(" axis-cli monet search <query> # \uCEF4\uD3EC\uB10C\uD2B8 \uAC80\uC0C9\n"));
|
|
38
|
+
console.log(chalk.gray(" npx @axis-ds/cli monet browse <category> # \uCE74\uD14C\uACE0\uB9AC \uCEF4\uD3EC\uB10C\uD2B8 \uBCF4\uAE30"));
|
|
39
|
+
console.log(chalk.gray(" npx @axis-ds/cli monet search <query> # \uCEF4\uD3EC\uB10C\uD2B8 \uAC80\uC0C9\n"));
|
|
40
40
|
}
|
|
41
41
|
// 컴포넌트 검색 (웹 URL 안내)
|
|
42
42
|
async searchComponents(query) {
|
|
@@ -82,7 +82,7 @@ var MonetClient = class {
|
|
|
82
82
|
console.log(chalk.gray("\n\uCEF4\uD3EC\uB10C\uD2B8 \uAC00\uC838\uC624\uAE30:"));
|
|
83
83
|
console.log(chalk.gray(" 1. \uC6F9\uC5D0\uC11C \uCEF4\uD3EC\uB10C\uD2B8 \uC120\uD0DD"));
|
|
84
84
|
console.log(chalk.gray(" 2. Copy Code \uBC84\uD2BC \uD074\uB9AD"));
|
|
85
|
-
console.log(chalk.gray(" 3. axis-cli monet import \uC2E4\uD589\n"));
|
|
85
|
+
console.log(chalk.gray(" 3. npx @axis-ds/cli monet import \uC2E4\uD589\n"));
|
|
86
86
|
}
|
|
87
87
|
// 카테고리별 예시 컴포넌트
|
|
88
88
|
getCategoryExamples(category) {
|
package/dist/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
MonetClient
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-ZVVACWEW.js";
|
|
5
5
|
import {
|
|
6
6
|
V0Client
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-AHQT77FJ.js";
|
|
8
8
|
import {
|
|
9
9
|
registerSyncCommand
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-QORBOSUA.js";
|
|
11
11
|
import {
|
|
12
12
|
fetchTemplateDetail,
|
|
13
13
|
fetchTemplateIndex
|
|
@@ -15,12 +15,12 @@ import {
|
|
|
15
15
|
|
|
16
16
|
// src/index.ts
|
|
17
17
|
import { Command } from "commander";
|
|
18
|
-
import
|
|
18
|
+
import chalk11 from "chalk";
|
|
19
19
|
import ora6 from "ora";
|
|
20
|
-
import
|
|
21
|
-
import
|
|
20
|
+
import fs11 from "fs-extra";
|
|
21
|
+
import path12 from "path";
|
|
22
22
|
import { createRequire as createRequire2 } from "module";
|
|
23
|
-
import
|
|
23
|
+
import prompts3 from "prompts";
|
|
24
24
|
|
|
25
25
|
// src/library/base-collector.ts
|
|
26
26
|
import crypto from "crypto";
|
|
@@ -484,11 +484,11 @@ var ShadcnCollector = class extends BaseCollector {
|
|
|
484
484
|
/**
|
|
485
485
|
* 파일 타입 추론
|
|
486
486
|
*/
|
|
487
|
-
getFileType(
|
|
488
|
-
if (
|
|
489
|
-
if (
|
|
490
|
-
if (
|
|
491
|
-
if (
|
|
487
|
+
getFileType(path13) {
|
|
488
|
+
if (path13.includes("hook") || path13.startsWith("use")) return "hook";
|
|
489
|
+
if (path13.includes("util") || path13.includes("lib")) return "util";
|
|
490
|
+
if (path13.endsWith(".css")) return "style";
|
|
491
|
+
if (path13.endsWith(".d.ts") || path13.includes("types")) return "type";
|
|
492
492
|
return "component";
|
|
493
493
|
}
|
|
494
494
|
};
|
|
@@ -1474,7 +1474,7 @@ var LibraryCurator = class {
|
|
|
1474
1474
|
const index = await this.loadIndex();
|
|
1475
1475
|
if (!index) {
|
|
1476
1476
|
console.log(chalk2.yellow("\n\u26A0\uFE0F \uB77C\uC774\uBE0C\uB7EC\uB9AC \uC778\uB371\uC2A4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."));
|
|
1477
|
-
console.log(chalk2.gray(" axis-cli library collect \uBA85\uB839\uC5B4\uB85C \uC218\uC9D1\uC744 \uBA3C\uC800 \uC2E4\uD589\uD558\uC138\uC694.\n"));
|
|
1477
|
+
console.log(chalk2.gray(" npx @axis-ds/cli library collect \uBA85\uB839\uC5B4\uB85C \uC218\uC9D1\uC744 \uBA3C\uC800 \uC2E4\uD589\uD558\uC138\uC694.\n"));
|
|
1478
1478
|
return;
|
|
1479
1479
|
}
|
|
1480
1480
|
console.log(chalk2.blue("\n\u{1F4CA} Library Curator - \uD1B5\uACC4\n"));
|
|
@@ -2985,74 +2985,357 @@ function registerThemeCommand(program2) {
|
|
|
2985
2985
|
});
|
|
2986
2986
|
}
|
|
2987
2987
|
|
|
2988
|
-
// src/index.ts
|
|
2989
|
-
|
|
2990
|
-
|
|
2991
|
-
|
|
2992
|
-
|
|
2993
|
-
|
|
2994
|
-
|
|
2995
|
-
|
|
2996
|
-
|
|
2997
|
-
|
|
2998
|
-
|
|
2999
|
-
|
|
3000
|
-
|
|
3001
|
-
|
|
3002
|
-
|
|
3003
|
-
|
|
3004
|
-
|
|
3005
|
-
|
|
3006
|
-
|
|
3007
|
-
|
|
3008
|
-
|
|
3009
|
-
|
|
3010
|
-
|
|
3011
|
-
|
|
3012
|
-
|
|
3013
|
-
|
|
3014
|
-
|
|
3015
|
-
|
|
3016
|
-
|
|
2988
|
+
// src/init/index.ts
|
|
2989
|
+
import chalk10 from "chalk";
|
|
2990
|
+
import prompts2 from "prompts";
|
|
2991
|
+
|
|
2992
|
+
// src/init/init.ts
|
|
2993
|
+
import { accessSync as accessSync2, constants as constants2, existsSync as existsSync3, readFileSync as readFileSync3, writeFileSync as writeFileSync2 } from "fs";
|
|
2994
|
+
import path11 from "path";
|
|
2995
|
+
import chalk9 from "chalk";
|
|
2996
|
+
import fs10 from "fs-extra";
|
|
2997
|
+
var CLSX_RANGE = "^2.1.1";
|
|
2998
|
+
var TAILWIND_MERGE_RANGES = {
|
|
2999
|
+
tailwind4: "^3.4.0",
|
|
3000
|
+
tailwind3: "^2.6.0"
|
|
3001
|
+
};
|
|
3002
|
+
var VERSION = String.raw`v?(\d+)(?:\.(\d+|[xX*]))?(?:\.(\d+|[xX*]))?(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?`;
|
|
3003
|
+
function versionParts(token) {
|
|
3004
|
+
const m = new RegExp(`^${VERSION}$`).exec(token);
|
|
3005
|
+
if (!m) return void 0;
|
|
3006
|
+
if (/^v?0\.0\.0-/.test(token)) return void 0;
|
|
3007
|
+
return { major: Number(m[1]), minor: m[2], patch: m[3] };
|
|
3008
|
+
}
|
|
3009
|
+
var isWild = (part) => part === void 0 || /^[xX*]$/.test(part);
|
|
3010
|
+
function comparatorBounds(op, v) {
|
|
3011
|
+
switch (op) {
|
|
3012
|
+
case ">=":
|
|
3013
|
+
return { lower: v.major };
|
|
3014
|
+
case ">":
|
|
3015
|
+
return { lower: isWild(v.minor) ? v.major + 1 : v.major };
|
|
3016
|
+
case "<=":
|
|
3017
|
+
return { upper: v.major };
|
|
3018
|
+
case "<": {
|
|
3019
|
+
const zeroOrWild = (part) => isWild(part) || Number(part) === 0;
|
|
3020
|
+
return { upper: zeroOrWild(v.minor) && zeroOrWild(v.patch) ? v.major - 1 : v.major };
|
|
3021
|
+
}
|
|
3022
|
+
default:
|
|
3023
|
+
return { lower: v.major, upper: v.major };
|
|
3024
|
+
}
|
|
3025
|
+
}
|
|
3026
|
+
function tailwindMajorBounds(range) {
|
|
3027
|
+
const r = range.trim();
|
|
3028
|
+
if (r === "" || r.includes("||")) return void 0;
|
|
3029
|
+
const simple = new RegExp(`^(?:\\^|~|=)?\\s*(${VERSION})$`).exec(r);
|
|
3030
|
+
if (simple) {
|
|
3031
|
+
const v = versionParts(simple[1]);
|
|
3032
|
+
return v ? { lower: v.major, upper: v.major } : void 0;
|
|
3033
|
+
}
|
|
3034
|
+
const hyphen = new RegExp(`^(${VERSION})\\s+-\\s+(${VERSION})$`).exec(r);
|
|
3035
|
+
if (hyphen) {
|
|
3036
|
+
const tokens2 = r.split(/\s+-\s+/);
|
|
3037
|
+
const a = versionParts(tokens2[0]);
|
|
3038
|
+
const b = versionParts(tokens2[1]);
|
|
3039
|
+
return a && b && a.major <= b.major ? { lower: a.major, upper: b.major } : void 0;
|
|
3040
|
+
}
|
|
3041
|
+
const tokens = r.replace(/(>=|<=|>|<|=)\s+/g, "$1").split(/\s+/);
|
|
3042
|
+
const lowers = [];
|
|
3043
|
+
const uppers = [];
|
|
3044
|
+
for (const t of tokens) {
|
|
3045
|
+
const c = /^(>=|<=|>|<|=)(.+)$/.exec(t);
|
|
3046
|
+
if (!c) return void 0;
|
|
3047
|
+
const v = versionParts(c[2]);
|
|
3048
|
+
if (v === void 0) return void 0;
|
|
3049
|
+
const b = comparatorBounds(c[1], v);
|
|
3050
|
+
if (b.lower !== void 0) lowers.push(b.lower);
|
|
3051
|
+
if (b.upper !== void 0) uppers.push(b.upper);
|
|
3052
|
+
}
|
|
3053
|
+
if (lowers.length === 0) return void 0;
|
|
3054
|
+
const lower = Math.max(...lowers);
|
|
3055
|
+
const upper = uppers.length > 0 ? Math.min(...uppers) : void 0;
|
|
3056
|
+
if (upper !== void 0 && upper < lower) return void 0;
|
|
3057
|
+
return upper !== void 0 ? { lower, upper } : { lower };
|
|
3058
|
+
}
|
|
3059
|
+
function majorWithin(major, bounds) {
|
|
3060
|
+
return major >= bounds.lower && (bounds.upper === void 0 || major <= bounds.upper);
|
|
3061
|
+
}
|
|
3062
|
+
function majorFromVersion(version) {
|
|
3063
|
+
if (typeof version !== "string") return void 0;
|
|
3064
|
+
const v = version.trim();
|
|
3065
|
+
const m = /^v?(\d+)\.\d+\.\d+(?:[-+][0-9A-Za-z.+-]*)?$/.exec(v);
|
|
3066
|
+
if (!m || /^v?0\.0\.0-/.test(v)) return void 0;
|
|
3067
|
+
return Number(m[1]);
|
|
3068
|
+
}
|
|
3069
|
+
function detectTailwind(baseDirInput, pkg) {
|
|
3070
|
+
const baseDir = path11.resolve(baseDirInput);
|
|
3071
|
+
const installedFile = path11.join(baseDir, "node_modules", "tailwindcss", "package.json");
|
|
3072
|
+
const declared = pkg ? hasDependency(pkg, "tailwindcss") : void 0;
|
|
3073
|
+
const bounds = declared !== void 0 ? tailwindMajorBounds(declared) : void 0;
|
|
3074
|
+
const declaredMajor = bounds?.lower;
|
|
3075
|
+
try {
|
|
3076
|
+
const installed = JSON.parse(readFileSync3(installedFile, "utf8"));
|
|
3077
|
+
const version = isPlainObject(installed) ? installed.version : void 0;
|
|
3078
|
+
const major = majorFromVersion(version);
|
|
3079
|
+
if (major !== void 0) {
|
|
3080
|
+
const found = { major, source: "installed", value: String(version) };
|
|
3081
|
+
if (declared !== void 0 && bounds !== void 0 && !majorWithin(major, bounds)) {
|
|
3082
|
+
found.mismatch = { declared, declaredMajor: bounds.lower };
|
|
3083
|
+
}
|
|
3084
|
+
return found;
|
|
3017
3085
|
}
|
|
3018
|
-
|
|
3086
|
+
} catch {
|
|
3087
|
+
}
|
|
3088
|
+
if (declared !== void 0) {
|
|
3089
|
+
if (declaredMajor !== void 0) return { major: declaredMajor, source: "declared", value: declared };
|
|
3090
|
+
return { source: "none", value: declared };
|
|
3091
|
+
}
|
|
3092
|
+
return { source: "none" };
|
|
3093
|
+
}
|
|
3094
|
+
function selectUtilsDependencies(tailwind) {
|
|
3095
|
+
return {
|
|
3096
|
+
clsx: CLSX_RANGE,
|
|
3097
|
+
"tailwind-merge": tailwind.major !== void 0 && tailwind.major >= 4 ? TAILWIND_MERGE_RANGES.tailwind4 : TAILWIND_MERGE_RANGES.tailwind3
|
|
3098
|
+
};
|
|
3099
|
+
}
|
|
3100
|
+
function tailwindWarnings(tailwind, installCommand) {
|
|
3101
|
+
const out = [];
|
|
3102
|
+
if (tailwind.source === "none" && tailwind.value !== void 0) {
|
|
3103
|
+
out.push(
|
|
3104
|
+
`! tailwindcss \uC120\uC5B8(${tailwind.value})\uC740 \uD310\uC815 \uBD88\uAC00 - \uAE30\uBCF8\uAC12 \uC0AC\uC6A9(Tailwind 3, tailwind-merge ${TAILWIND_MERGE_RANGES.tailwind3}). Tailwind 4 \uC774\uC0C1\uC774\uBA74 tailwind-merge \uB97C ${TAILWIND_MERGE_RANGES.tailwind4} \uC73C\uB85C \uBC14\uAFB8\uC138\uC694.`
|
|
3105
|
+
);
|
|
3106
|
+
}
|
|
3107
|
+
if (tailwind.mismatch) {
|
|
3108
|
+
out.push(
|
|
3109
|
+
`! \uC124\uCE58\uBCF8 tailwindcss ${tailwind.value}(major ${tailwind.major})\uC640 package.json \uC120\uC5B8 ${tailwind.mismatch.declared}(major ${tailwind.mismatch.declaredMajor})\uAC00 \uB2E4\uB984 - \uC124\uCE58\uBCF8\uC744 \uB530\uB790\uC2B5\uB2C8\uB2E4. ${installCommand} \uB4A4 tailwind-merge \uBC94\uC704\uB97C \uB2E4\uC2DC \uD655\uC778\uD558\uC138\uC694.`
|
|
3110
|
+
);
|
|
3111
|
+
}
|
|
3112
|
+
return out;
|
|
3113
|
+
}
|
|
3114
|
+
function describeTailwindBasis(tailwind) {
|
|
3115
|
+
if (tailwind.source === "installed") return `\uC124\uCE58\uB41C tailwindcss ${tailwind.value}`;
|
|
3116
|
+
if (tailwind.source === "declared") return `package.json \uC758 tailwindcss ${tailwind.value}`;
|
|
3117
|
+
if (tailwind.value !== void 0) {
|
|
3118
|
+
return `package.json \uC758 tailwindcss ${tailwind.value} \uB85C \uBC84\uC804\uC744 \uD310\uC815\uD558\uC9C0 \uBABB\uD574 \uAE30\uBCF8\uAC12(Tailwind 3)`;
|
|
3119
|
+
}
|
|
3120
|
+
return "tailwindcss \uB97C \uCC3E\uC9C0 \uBABB\uD574 \uAE30\uBCF8\uAC12(Tailwind 3)";
|
|
3121
|
+
}
|
|
3122
|
+
var UTILS_TS_CONTENT = `import { type ClassValue, clsx } from "clsx";
|
|
3123
|
+
import { twMerge } from "tailwind-merge";
|
|
3124
|
+
|
|
3125
|
+
export function cn(...inputs: ClassValue[]) {
|
|
3126
|
+
return twMerge(clsx(inputs));
|
|
3127
|
+
}
|
|
3128
|
+
`;
|
|
3129
|
+
var INIT_DEFAULTS = {
|
|
3130
|
+
componentsDir: "./src/components/ui",
|
|
3131
|
+
tailwindConfig: "./tailwind.config.ts",
|
|
3132
|
+
globalCss: "./src/app/globals.css"
|
|
3133
|
+
};
|
|
3134
|
+
var INIT_NEXT_STEP_COMMAND = "npx @axis-ds/cli add button";
|
|
3135
|
+
var BOM = "\uFEFF";
|
|
3136
|
+
function addCommandFor(installCommand, deps) {
|
|
3137
|
+
const specs = Object.entries(deps).map(([name, range]) => `"${name}@${range}"`).join(" ");
|
|
3138
|
+
if (installCommand.startsWith("yarn")) return `yarn add ${specs}`;
|
|
3139
|
+
if (installCommand.startsWith("npm")) return `npm install ${specs}`;
|
|
3140
|
+
return `pnpm add ${specs}`;
|
|
3141
|
+
}
|
|
3142
|
+
function planUtilsDependencies(baseDirInput) {
|
|
3143
|
+
const baseDir = path11.resolve(baseDirInput);
|
|
3144
|
+
const installCommand = detectInstallCommand(baseDir);
|
|
3145
|
+
const tailwind0 = detectTailwind(baseDir);
|
|
3146
|
+
const ranges0 = selectUtilsDependencies(tailwind0);
|
|
3147
|
+
const plan = {
|
|
3148
|
+
action: "no-package-json",
|
|
3149
|
+
added: [],
|
|
3150
|
+
present: [],
|
|
3151
|
+
ranges: ranges0,
|
|
3152
|
+
tailwind: tailwind0,
|
|
3153
|
+
installCommand,
|
|
3154
|
+
addCommand: addCommandFor(installCommand, ranges0)
|
|
3155
|
+
};
|
|
3156
|
+
const pkgFile = path11.join(baseDir, "package.json");
|
|
3157
|
+
if (!existsSync3(pkgFile)) return plan;
|
|
3158
|
+
const unwritable = (reason) => ({ ...plan, action: "unwritable", reason });
|
|
3159
|
+
let where;
|
|
3160
|
+
try {
|
|
3161
|
+
where = realPathInside(baseDir, pkgFile);
|
|
3162
|
+
} catch (err) {
|
|
3163
|
+
return unwritable(err.message);
|
|
3164
|
+
}
|
|
3165
|
+
if (!where.inside) return unwritable(`\uC2E4\uC81C \uC704\uCE58(${where.realPath})\uAC00 \uD504\uB85C\uC81D\uD2B8 \uB514\uB809\uD130\uB9AC \uBC16\uC785\uB2C8\uB2E4`);
|
|
3166
|
+
let text;
|
|
3167
|
+
try {
|
|
3168
|
+
text = readFileSync3(pkgFile, "utf8");
|
|
3169
|
+
} catch (err) {
|
|
3170
|
+
return unwritable(err.message);
|
|
3171
|
+
}
|
|
3172
|
+
const bom = text.startsWith(BOM) ? BOM : "";
|
|
3173
|
+
const body = bom ? text.slice(1) : text;
|
|
3174
|
+
let pkg;
|
|
3175
|
+
try {
|
|
3176
|
+
const parsed = JSON.parse(body);
|
|
3177
|
+
if (!isPlainObject(parsed)) throw new Error("\uCD5C\uC0C1\uC704\uAC00 \uAC1D\uCCB4\uAC00 \uC544\uB2D9\uB2C8\uB2E4");
|
|
3178
|
+
pkg = parsed;
|
|
3179
|
+
} catch (err) {
|
|
3180
|
+
return unwritable(`JSON \uC744 \uC77D\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: ${err.message}`);
|
|
3181
|
+
}
|
|
3182
|
+
plan.tailwind = detectTailwind(baseDir, pkg);
|
|
3183
|
+
plan.ranges = selectUtilsDependencies(plan.tailwind);
|
|
3184
|
+
plan.addCommand = addCommandFor(installCommand, plan.ranges);
|
|
3185
|
+
const missing = {};
|
|
3186
|
+
for (const [name, range] of Object.entries(plan.ranges)) {
|
|
3187
|
+
const declared = hasDependency(pkg, name);
|
|
3188
|
+
if (declared !== void 0) plan.present.push({ name, range: declared });
|
|
3189
|
+
else missing[name] = range;
|
|
3190
|
+
}
|
|
3191
|
+
plan.added = Object.keys(missing);
|
|
3192
|
+
plan.addCommand = addCommandFor(installCommand, plan.added.length > 0 ? missing : plan.ranges);
|
|
3193
|
+
if (plan.added.length === 0) return { ...plan, action: "present" };
|
|
3194
|
+
if (pkg.dependencies !== void 0 && !isPlainObject(pkg.dependencies)) {
|
|
3195
|
+
return unwritable("dependencies \uAC00 \uAC1D\uCCB4\uAC00 \uC544\uB2D9\uB2C8\uB2E4");
|
|
3196
|
+
}
|
|
3197
|
+
try {
|
|
3198
|
+
accessSync2(pkgFile, constants2.W_OK);
|
|
3199
|
+
} catch (err) {
|
|
3200
|
+
return unwritable(`\uC4F8 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4(${err.message})`);
|
|
3201
|
+
}
|
|
3202
|
+
const deps = { ...pkg.dependencies ?? {}, ...missing };
|
|
3203
|
+
const after = bom + formatJsonLike(body, { ...pkg, dependencies: deps });
|
|
3204
|
+
return { ...plan, action: "add", write: { file: pkgFile, before: text, after } };
|
|
3205
|
+
}
|
|
3206
|
+
var defaultWriteFile = (file, data) => writeFileSync2(file, data);
|
|
3207
|
+
function applyUtilsDependencies(baseDirInput, plan, writeFile = defaultWriteFile) {
|
|
3208
|
+
const w = plan.write;
|
|
3209
|
+
if (plan.action !== "add" || !w) return false;
|
|
3210
|
+
const baseDir = path11.resolve(baseDirInput);
|
|
3211
|
+
const current = existsSync3(w.file) ? readFileSync3(w.file, "utf8") : null;
|
|
3212
|
+
if (current !== w.before) {
|
|
3213
|
+
throw new Error(`${w.file} \uC774 \uACC4\uD68D \uB4A4\uC5D0 \uBC14\uB00C\uC5C8\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2E4\uD589\uD558\uC138\uC694.`);
|
|
3214
|
+
}
|
|
3215
|
+
const where = realPathInside(baseDir, w.file);
|
|
3216
|
+
if (!where.inside) {
|
|
3217
|
+
throw new Error(`${w.file} \uC758 \uC2E4\uC81C \uC704\uCE58(${where.realPath})\uAC00 \uD504\uB85C\uC81D\uD2B8 \uB514\uB809\uD130\uB9AC \uBC16\uC785\uB2C8\uB2E4. \uC4F0\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.`);
|
|
3218
|
+
}
|
|
3219
|
+
JSON.parse(w.after.startsWith(BOM) ? w.after.slice(1) : w.after);
|
|
3220
|
+
try {
|
|
3221
|
+
writeFile(w.file, w.after);
|
|
3222
|
+
} catch (err) {
|
|
3223
|
+
const cause = err.message;
|
|
3224
|
+
let restored;
|
|
3225
|
+
try {
|
|
3226
|
+
writeFile(w.file, w.before);
|
|
3227
|
+
if (readFileSync3(w.file, "utf8") !== w.before) throw new Error("\uB418\uB3CC\uB9B0 \uB0B4\uC6A9\uC774 \uC6D0\uB798 \uB0B4\uC6A9\uACFC \uB2E4\uB985\uB2C8\uB2E4");
|
|
3228
|
+
restored = "\uC6D0\uB798 \uB0B4\uC6A9\uC73C\uB85C \uB418\uB3CC\uB838\uC2B5\uB2C8\uB2E4";
|
|
3229
|
+
} catch (restoreErr) {
|
|
3230
|
+
restored = `\uC6D0\uB798 \uB0B4\uC6A9\uC73C\uB85C \uB418\uB3CC\uB9AC\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4(${restoreErr.message}). \uD30C\uC77C\uC774 \uC798\uB838\uAC70\uB098 \uBE44\uC5C8\uC744 \uC218 \uC788\uC73C\uB2C8 \uBC84\uC804 \uAD00\uB9AC \uB3C4\uAD6C \uB4F1\uC73C\uB85C \uBCF5\uAD6C\uD558\uC138\uC694`;
|
|
3231
|
+
}
|
|
3232
|
+
throw new Error(`${w.file} \uC744 \uC4F0\uB294 \uB3C4\uC911 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4(${cause}). ${restored}.`);
|
|
3233
|
+
}
|
|
3234
|
+
return true;
|
|
3235
|
+
}
|
|
3236
|
+
function reportDependencies(plan, log) {
|
|
3237
|
+
const presentText = plan.present.map((p) => `${p.name} (${p.range})`).join(", ");
|
|
3238
|
+
const basis = ` tailwind-merge \uBC94\uC704 \uAE30\uC900: ${describeTailwindBasis(plan.tailwind)}`;
|
|
3239
|
+
const logBasis = () => {
|
|
3240
|
+
log(chalk9.gray(basis));
|
|
3241
|
+
for (const w of tailwindWarnings(plan.tailwind, plan.installCommand)) log(chalk9.yellow(` ${w}`));
|
|
3242
|
+
};
|
|
3243
|
+
if (plan.action === "add") {
|
|
3244
|
+
const addedText = plan.added.map((n) => `${n}@${plan.ranges[n]}`).join(", ");
|
|
3245
|
+
log(chalk9.green(`\u2713 package.json dependencies \uC5D0 \uCD94\uAC00: ${addedText}`));
|
|
3246
|
+
if (plan.present.length > 0) log(chalk9.gray(` \uC774\uBBF8 \uC788\uC74C(\uBC84\uC804 \uC720\uC9C0): ${presentText}`));
|
|
3247
|
+
if (plan.added.includes("tailwind-merge")) logBasis();
|
|
3248
|
+
log(chalk9.yellow(` \uC124\uCE58\uB294 \uC2E4\uD589\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. \uC124\uCE58: ${chalk9.cyan(plan.installCommand)}`));
|
|
3249
|
+
} else if (plan.action === "present") {
|
|
3250
|
+
log(chalk9.green(`\u2713 utils.ts \uC758\uC874\uC131\uC774 package.json \uC5D0 \uC774\uBBF8 \uC788\uC2B5\uB2C8\uB2E4(\uBC84\uC804 \uC720\uC9C0): ${presentText}`));
|
|
3251
|
+
log(chalk9.yellow(` \uC124\uCE58\uB294 \uC2E4\uD589\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. \uC124\uCE58: ${chalk9.cyan(plan.installCommand)}`));
|
|
3252
|
+
} else if (plan.action === "no-package-json") {
|
|
3253
|
+
log(chalk9.yellow("! package.json \uC774 \uC5C6\uC5B4 utils.ts \uC758\uC874\uC131(clsx, tailwind-merge)\uC744 \uCD94\uAC00\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4."));
|
|
3254
|
+
log(chalk9.yellow(` \uC124\uCE58: ${chalk9.cyan(plan.addCommand)}`));
|
|
3255
|
+
logBasis();
|
|
3256
|
+
} else {
|
|
3257
|
+
log(chalk9.yellow(`! package.json \uC744 \uBC14\uAFB8\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4(${plan.reason}).`));
|
|
3258
|
+
log(chalk9.yellow(` utils.ts \uC758\uC874\uC131 \uC124\uCE58: ${chalk9.cyan(plan.addCommand)}`));
|
|
3259
|
+
if (plan.addCommand.includes('"tailwind-merge@')) logBasis();
|
|
3260
|
+
}
|
|
3261
|
+
}
|
|
3262
|
+
async function runInit(baseDirInput, answers, registryUrl, log = console.log) {
|
|
3263
|
+
const baseDir = path11.resolve(baseDirInput);
|
|
3019
3264
|
const axisConfig = createInitConfig(
|
|
3020
3265
|
{
|
|
3021
|
-
componentsDir:
|
|
3022
|
-
tailwindConfig:
|
|
3023
|
-
globalCss:
|
|
3266
|
+
componentsDir: answers.componentsDir,
|
|
3267
|
+
tailwindConfig: answers.tailwindConfig,
|
|
3268
|
+
globalCss: answers.globalCss
|
|
3024
3269
|
},
|
|
3025
|
-
|
|
3270
|
+
registryUrl
|
|
3026
3271
|
);
|
|
3027
|
-
await fs10.writeJSON("axis.config.json", axisConfig, { spaces: 2 });
|
|
3028
|
-
|
|
3029
|
-
const utilsPath = path11.
|
|
3272
|
+
await fs10.writeJSON(path11.join(baseDir, "axis.config.json"), axisConfig, { spaces: 2 });
|
|
3273
|
+
log(chalk9.green("\u2713 axis.config.json \uC0DD\uC131 \uC644\uB8CC"));
|
|
3274
|
+
const utilsPath = path11.resolve(baseDir, answers.componentsDir, "utils.ts");
|
|
3030
3275
|
await fs10.ensureDir(path11.dirname(utilsPath));
|
|
3031
|
-
await fs10.writeFile(
|
|
3032
|
-
|
|
3033
|
-
|
|
3034
|
-
|
|
3276
|
+
await fs10.writeFile(utilsPath, UTILS_TS_CONTENT);
|
|
3277
|
+
log(chalk9.green("\u2713 utils.ts \uC0DD\uC131 \uC644\uB8CC"));
|
|
3278
|
+
const plan = planUtilsDependencies(baseDir);
|
|
3279
|
+
try {
|
|
3280
|
+
applyUtilsDependencies(baseDir, plan);
|
|
3281
|
+
} catch (err) {
|
|
3282
|
+
log(chalk9.red(`\u2717 package.json \uC744 \uC4F0\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4: ${err.message}`));
|
|
3283
|
+
log(chalk9.yellow(" axis.config.json \uACFC utils.ts \uB294 \uC774\uBBF8 \uB9CC\uB4E4\uC5B4\uC84C\uC2B5\uB2C8\uB2E4."));
|
|
3284
|
+
log(chalk9.yellow(` utils.ts \uC758\uC874\uC131 \uC124\uCE58: ${chalk9.cyan(plan.addCommand)}`));
|
|
3285
|
+
process.exitCode = 1;
|
|
3286
|
+
return;
|
|
3287
|
+
}
|
|
3288
|
+
reportDependencies(plan, log);
|
|
3289
|
+
log(chalk9.blue("\n\uCD08\uAE30\uD654 \uC644\uB8CC! \uC774\uC81C \uB2E4\uC74C \uBA85\uB839\uC5B4\uB85C \uCEF4\uD3EC\uB10C\uD2B8\uB97C \uCD94\uAC00\uD558\uC138\uC694:"));
|
|
3290
|
+
log(chalk9.cyan(` ${INIT_NEXT_STEP_COMMAND}
|
|
3291
|
+
`));
|
|
3292
|
+
}
|
|
3035
3293
|
|
|
3036
|
-
|
|
3037
|
-
|
|
3294
|
+
// src/init/index.ts
|
|
3295
|
+
function registerInitCommand(program2, registryUrl) {
|
|
3296
|
+
program2.command("init").description("\uD504\uB85C\uC81D\uD2B8\uC5D0 AXIS Design System \uCD08\uAE30\uD654").option("-y, --yes", "\uAE30\uBCF8\uAC12\uC73C\uB85C \uC790\uB3D9 \uC124\uC815").action(async (options) => {
|
|
3297
|
+
console.log(chalk10.blue("\n\u{1F3A8} AXIS Design System \uCD08\uAE30\uD654\n"));
|
|
3298
|
+
const config = options.yes ? { ...INIT_DEFAULTS } : await prompts2([
|
|
3299
|
+
{
|
|
3300
|
+
type: "text",
|
|
3301
|
+
name: "componentsDir",
|
|
3302
|
+
message: "\uCEF4\uD3EC\uB10C\uD2B8 \uB514\uB809\uD1A0\uB9AC:",
|
|
3303
|
+
initial: INIT_DEFAULTS.componentsDir
|
|
3304
|
+
},
|
|
3305
|
+
{
|
|
3306
|
+
type: "text",
|
|
3307
|
+
name: "tailwindConfig",
|
|
3308
|
+
message: "Tailwind \uC124\uC815 \uD30C\uC77C:",
|
|
3309
|
+
initial: INIT_DEFAULTS.tailwindConfig
|
|
3310
|
+
},
|
|
3311
|
+
{
|
|
3312
|
+
type: "text",
|
|
3313
|
+
name: "globalCss",
|
|
3314
|
+
message: "\uAE00\uB85C\uBC8C CSS \uD30C\uC77C:",
|
|
3315
|
+
initial: INIT_DEFAULTS.globalCss
|
|
3316
|
+
}
|
|
3317
|
+
]);
|
|
3318
|
+
await runInit(process.cwd(), config, registryUrl);
|
|
3319
|
+
});
|
|
3038
3320
|
}
|
|
3039
|
-
|
|
3040
|
-
|
|
3041
|
-
|
|
3042
|
-
|
|
3043
|
-
|
|
3044
|
-
|
|
3321
|
+
|
|
3322
|
+
// src/index.ts
|
|
3323
|
+
var { version: CLI_VERSION } = createRequire2(import.meta.url)("../package.json");
|
|
3324
|
+
var REGISTRY_URL = process.env.AXIS_REGISTRY_URL || "https://axis.minu.best/r";
|
|
3325
|
+
var program = new Command();
|
|
3326
|
+
program.name("axis").description("AXIS Design System CLI - shadcn \uD638\uD658 \uCEF4\uD3EC\uB10C\uD2B8 \uC124\uCE58 \uB3C4\uAD6C").version(CLI_VERSION);
|
|
3327
|
+
registerInitCommand(program, REGISTRY_URL);
|
|
3045
3328
|
program.command("add <component>").description("\uCEF4\uD3EC\uB10C\uD2B8 \uCD94\uAC00").option("--agentic", "Agentic UI \uCEF4\uD3EC\uB10C\uD2B8 \uCD94\uAC00").option("-y, --yes", "\uD655\uC778 \uC5C6\uC774 \uB36E\uC5B4\uC4F0\uAE30").action(async (component, options) => {
|
|
3046
3329
|
const spinner = ora6(`${component} \uCEF4\uD3EC\uB10C\uD2B8 \uAC00\uC838\uC624\uB294 \uC911...`).start();
|
|
3047
3330
|
try {
|
|
3048
|
-
const configPath =
|
|
3049
|
-
if (!await
|
|
3331
|
+
const configPath = path12.resolve("axis.config.json");
|
|
3332
|
+
if (!await fs11.pathExists(configPath)) {
|
|
3050
3333
|
spinner.fail(
|
|
3051
3334
|
"axis.config.json\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\n \uD574\uACB0: \uD504\uB85C\uC81D\uD2B8 \uB8E8\uD2B8\uC5D0\uC11C 'npx @axis-ds/cli init'\uC744 \uC2E4\uD589\uD558\uC138\uC694.\n \uCC38\uACE0: https://axis.minu.best/docs/guides/quick-start"
|
|
3052
3335
|
);
|
|
3053
3336
|
process.exit(1);
|
|
3054
3337
|
}
|
|
3055
|
-
const config = await
|
|
3338
|
+
const config = await fs11.readJSON(configPath);
|
|
3056
3339
|
const category = options.agentic ? "agentic" : "ui";
|
|
3057
3340
|
const componentInfo = await getComponentInfo(component, category);
|
|
3058
3341
|
if (!componentInfo) {
|
|
@@ -3065,10 +3348,10 @@ program.command("add <component>").description("\uCEF4\uD3EC\uB10C\uD2B8 \uCD94\
|
|
|
3065
3348
|
}
|
|
3066
3349
|
spinner.text = `${component} \uCEF4\uD3EC\uB10C\uD2B8 \uC124\uCE58 \uC911...`;
|
|
3067
3350
|
for (const file of componentInfo.files) {
|
|
3068
|
-
const filePath =
|
|
3069
|
-
if (await
|
|
3351
|
+
const filePath = path12.join(config.componentsDir, file.path);
|
|
3352
|
+
if (await fs11.pathExists(filePath)) {
|
|
3070
3353
|
if (!options.yes) {
|
|
3071
|
-
const { overwrite } = await
|
|
3354
|
+
const { overwrite } = await prompts3({
|
|
3072
3355
|
type: "confirm",
|
|
3073
3356
|
name: "overwrite",
|
|
3074
3357
|
message: `${file.path}\uC774(\uAC00) \uC774\uBBF8 \uC874\uC7AC\uD569\uB2C8\uB2E4. \uB36E\uC5B4\uC4F0\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?`,
|
|
@@ -3077,13 +3360,13 @@ program.command("add <component>").description("\uCEF4\uD3EC\uB10C\uD2B8 \uCD94\
|
|
|
3077
3360
|
if (!overwrite) continue;
|
|
3078
3361
|
}
|
|
3079
3362
|
}
|
|
3080
|
-
await
|
|
3081
|
-
await
|
|
3363
|
+
await fs11.ensureDir(path12.dirname(filePath));
|
|
3364
|
+
await fs11.writeFile(filePath, file.content);
|
|
3082
3365
|
}
|
|
3083
|
-
spinner.succeed(
|
|
3366
|
+
spinner.succeed(chalk11.green(`${component} \uCEF4\uD3EC\uB10C\uD2B8 \uCD94\uAC00 \uC644\uB8CC`));
|
|
3084
3367
|
if (componentInfo.dependencies.length > 0) {
|
|
3085
|
-
console.log(
|
|
3086
|
-
console.log(
|
|
3368
|
+
console.log(chalk11.yellow("\n\uD544\uC694\uD55C \uC758\uC874\uC131:"));
|
|
3369
|
+
console.log(chalk11.cyan(` pnpm add ${componentInfo.dependencies.join(" ")}`));
|
|
3087
3370
|
}
|
|
3088
3371
|
} catch (error) {
|
|
3089
3372
|
spinner.fail(
|
|
@@ -3095,7 +3378,7 @@ program.command("add <component>").description("\uCEF4\uD3EC\uB10C\uD2B8 \uCD94\
|
|
|
3095
3378
|
}
|
|
3096
3379
|
});
|
|
3097
3380
|
program.command("list").description("\uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uCEF4\uD3EC\uB10C\uD2B8 \uBAA9\uB85D").option("--category <type>", "\uCE74\uD14C\uACE0\uB9AC \uD544\uD130 (ui, agentic)").action(async (options) => {
|
|
3098
|
-
console.log(
|
|
3381
|
+
console.log(chalk11.blue("\n\u{1F4E6} AXIS Design System \uCEF4\uD3EC\uB10C\uD2B8\n"));
|
|
3099
3382
|
const components = {
|
|
3100
3383
|
ui: [
|
|
3101
3384
|
{ name: "button", description: "\uAE30\uBCF8 \uBC84\uD2BC \uCEF4\uD3EC\uB10C\uD2B8" },
|
|
@@ -3123,9 +3406,9 @@ program.command("list").description("\uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uCEF4\uD3E
|
|
|
3123
3406
|
]
|
|
3124
3407
|
};
|
|
3125
3408
|
const showCategory = (category, items) => {
|
|
3126
|
-
console.log(
|
|
3409
|
+
console.log(chalk11.bold(category === "ui" ? "Core UI" : "Agentic UI"));
|
|
3127
3410
|
items.forEach((c) => {
|
|
3128
|
-
console.log(` ${
|
|
3411
|
+
console.log(` ${chalk11.cyan(c.name.padEnd(20))} ${chalk11.gray(c.description)}`);
|
|
3129
3412
|
});
|
|
3130
3413
|
console.log();
|
|
3131
3414
|
};
|
|
@@ -3135,8 +3418,8 @@ program.command("list").description("\uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uCEF4\uD3E
|
|
|
3135
3418
|
if (!options.category || options.category === "agentic") {
|
|
3136
3419
|
showCategory("agentic", components.agentic);
|
|
3137
3420
|
}
|
|
3138
|
-
console.log(
|
|
3139
|
-
console.log(
|
|
3421
|
+
console.log(chalk11.gray("\uC0AC\uC6A9\uBC95: npx @axis-ds/cli add <component-name>"));
|
|
3422
|
+
console.log(chalk11.gray("Agentic: npx @axis-ds/cli add <component-name> --agentic\n"));
|
|
3140
3423
|
});
|
|
3141
3424
|
var monetCmd = program.command("monet").description("Monet Design \uCEF4\uD3EC\uB10C\uD2B8 \uAD00\uB9AC (https://monet.design)");
|
|
3142
3425
|
monetCmd.command("list").alias("ls").description("Monet \uCE74\uD14C\uACE0\uB9AC \uBAA9\uB85D").action(async () => {
|
|
@@ -3156,24 +3439,24 @@ monetCmd.command("import").alias("i").description("\uD074\uB9BD\uBCF4\uB4DC\uC5D
|
|
|
3156
3439
|
await client.importFromClipboard();
|
|
3157
3440
|
});
|
|
3158
3441
|
monetCmd.command("setup").description("Monet MCP \uC11C\uBC84 \uC124\uC815 \uC548\uB0B4").action(() => {
|
|
3159
|
-
console.log(
|
|
3160
|
-
console.log(
|
|
3161
|
-
console.log(
|
|
3162
|
-
console.log(
|
|
3163
|
-
console.log(
|
|
3164
|
-
console.log(
|
|
3165
|
-
console.log(
|
|
3166
|
-
console.log(
|
|
3442
|
+
console.log(chalk11.blue("\n\u{1F527} Monet MCP \uC11C\uBC84 \uC124\uC815\n"));
|
|
3443
|
+
console.log(chalk11.bold("1. API \uD0A4 \uBC1C\uAE09:"));
|
|
3444
|
+
console.log(chalk11.cyan(" https://monet.design/mcp\n"));
|
|
3445
|
+
console.log(chalk11.bold("2. \uD658\uACBD \uBCC0\uC218 \uC124\uC815:"));
|
|
3446
|
+
console.log(chalk11.gray(" .env \uD30C\uC77C\uC5D0 \uCD94\uAC00:"));
|
|
3447
|
+
console.log(chalk11.cyan(" MONET_API_KEY=your-api-key-here\n"));
|
|
3448
|
+
console.log(chalk11.bold("3. Claude Code MCP \uC124\uC815:"));
|
|
3449
|
+
console.log(chalk11.gray(" .claude/mcp.json\uC5D0\uC11C monet \uC11C\uBC84 \uD65C\uC131\uD654:\n"));
|
|
3167
3450
|
console.log(
|
|
3168
|
-
|
|
3451
|
+
chalk11.cyan(` "monet": {
|
|
3169
3452
|
"url": "https://www.monet.design/api/remote/mcp",
|
|
3170
3453
|
"headers": { "Authorization": "Bearer \${MONET_API_KEY}" },
|
|
3171
3454
|
"disabled": false
|
|
3172
3455
|
}
|
|
3173
3456
|
`)
|
|
3174
3457
|
);
|
|
3175
|
-
console.log(
|
|
3176
|
-
console.log(
|
|
3458
|
+
console.log(chalk11.bold("4. Claude Code \uC7AC\uC2DC\uC791 \uD6C4 \uC0AC\uC6A9:"));
|
|
3459
|
+
console.log(chalk11.gray(' "monet\uC5D0\uC11C hero \uCEF4\uD3EC\uB10C\uD2B8 \uCC3E\uC544\uC918"\n'));
|
|
3177
3460
|
});
|
|
3178
3461
|
var v0Cmd = program.command("v0").description("V0 (v0.app) \uCF54\uB4DC \uBCC0\uD658 \uBC0F \uD1B5\uD569");
|
|
3179
3462
|
v0Cmd.command("convert <file>").alias("c").description("V0 \uCF54\uB4DC\uB97C AXIS \uC2A4\uD0C0\uC77C\uB85C \uBCC0\uD658").option("-o, --output <path>", "\uCD9C\uB825 \uD30C\uC77C \uACBD\uB85C").action(async (file, options) => {
|
|
@@ -3210,18 +3493,18 @@ libraryCmd.command("collect").alias("c").description("\uC678\uBD80 \uC18C\uC2A4\
|
|
|
3210
3493
|
total += result.collected;
|
|
3211
3494
|
failed += result.failed;
|
|
3212
3495
|
}
|
|
3213
|
-
console.log(
|
|
3496
|
+
console.log(chalk11.blue(`
|
|
3214
3497
|
\u{1F4CA} \uC218\uC9D1 \uC644\uB8CC: ${total}\uAC1C \uCEF4\uD3EC\uB10C\uD2B8`));
|
|
3215
3498
|
if (failed > 0) {
|
|
3216
|
-
console.log(
|
|
3499
|
+
console.log(chalk11.yellow(` \uC2E4\uD328: ${failed}\uAC1C`));
|
|
3217
3500
|
}
|
|
3218
3501
|
});
|
|
3219
3502
|
libraryCmd.command("list").alias("ls").description("\uB77C\uC774\uBE0C\uB7EC\uB9AC \uCEF4\uD3EC\uB10C\uD2B8 \uBAA9\uB85D").option("-c, --category <category>", "\uCE74\uD14C\uACE0\uB9AC \uD544\uD130").option("-s, --source <source>", "\uC18C\uC2A4 \uD544\uD130").action(async (options) => {
|
|
3220
3503
|
const curator = new LibraryCurator();
|
|
3221
3504
|
const index = await curator.loadIndex();
|
|
3222
3505
|
if (!index) {
|
|
3223
|
-
console.log(
|
|
3224
|
-
console.log(
|
|
3506
|
+
console.log(chalk11.yellow("\n\u26A0\uFE0F \uB77C\uC774\uBE0C\uB7EC\uB9AC \uC778\uB371\uC2A4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."));
|
|
3507
|
+
console.log(chalk11.gray(" \uD574\uACB0: npx @axis-ds/cli library collect \uBA85\uB839\uC5B4\uB85C \uC218\uC9D1\uC744 \uBA3C\uC800 \uC2E4\uD589\uD558\uC138\uC694.\n"));
|
|
3225
3508
|
return;
|
|
3226
3509
|
}
|
|
3227
3510
|
let components = index.components;
|
|
@@ -3231,7 +3514,7 @@ libraryCmd.command("list").alias("ls").description("\uB77C\uC774\uBE0C\uB7EC\uB9
|
|
|
3231
3514
|
if (options.source) {
|
|
3232
3515
|
components = components.filter((c) => c.source.type === options.source);
|
|
3233
3516
|
}
|
|
3234
|
-
console.log(
|
|
3517
|
+
console.log(chalk11.blue(`
|
|
3235
3518
|
\u{1F4E6} Library Components (${components.length}\uAC1C)
|
|
3236
3519
|
`));
|
|
3237
3520
|
const byCategory = /* @__PURE__ */ new Map();
|
|
@@ -3243,14 +3526,14 @@ libraryCmd.command("list").alias("ls").description("\uB77C\uC774\uBE0C\uB7EC\uB9
|
|
|
3243
3526
|
byCategory.get(cat).push(comp);
|
|
3244
3527
|
}
|
|
3245
3528
|
for (const [category, items] of byCategory) {
|
|
3246
|
-
console.log(
|
|
3529
|
+
console.log(chalk11.bold(`${category} (${items.length})`));
|
|
3247
3530
|
for (const item of items.slice(0, 10)) {
|
|
3248
3531
|
console.log(
|
|
3249
|
-
` ${
|
|
3532
|
+
` ${chalk11.cyan(item.name.padEnd(25))} ${chalk11.gray(item.source.type.padEnd(8))} ${chalk11.gray(item.description.slice(0, 40))}`
|
|
3250
3533
|
);
|
|
3251
3534
|
}
|
|
3252
3535
|
if (items.length > 10) {
|
|
3253
|
-
console.log(
|
|
3536
|
+
console.log(chalk11.gray(` ... \uC678 ${items.length - 10}\uAC1C`));
|
|
3254
3537
|
}
|
|
3255
3538
|
console.log();
|
|
3256
3539
|
}
|
|
@@ -3262,21 +3545,21 @@ libraryCmd.command("search <query>").alias("s").description("\uCEF4\uD3EC\uB10C\
|
|
|
3262
3545
|
source: options.source
|
|
3263
3546
|
});
|
|
3264
3547
|
if (results.length === 0) {
|
|
3265
|
-
console.log(
|
|
3548
|
+
console.log(chalk11.yellow(`
|
|
3266
3549
|
'${query}'\uC5D0 \uB300\uD55C \uAC80\uC0C9 \uACB0\uACFC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.
|
|
3267
3550
|
`));
|
|
3268
3551
|
return;
|
|
3269
3552
|
}
|
|
3270
|
-
console.log(
|
|
3553
|
+
console.log(chalk11.blue(`
|
|
3271
3554
|
\u{1F50D} '${query}' \uAC80\uC0C9 \uACB0\uACFC (${results.length}\uAC1C)
|
|
3272
3555
|
`));
|
|
3273
3556
|
for (const comp of results.slice(0, 20)) {
|
|
3274
3557
|
console.log(
|
|
3275
|
-
` ${
|
|
3558
|
+
` ${chalk11.cyan(comp.name.padEnd(25))} ${chalk11.gray(comp.source.type.padEnd(8))} ${chalk11.gray(comp.category.padEnd(12))} ${chalk11.gray(comp.description.slice(0, 30))}`
|
|
3276
3559
|
);
|
|
3277
3560
|
}
|
|
3278
3561
|
if (results.length > 20) {
|
|
3279
|
-
console.log(
|
|
3562
|
+
console.log(chalk11.gray(`
|
|
3280
3563
|
... \uC678 ${results.length - 20}\uAC1C`));
|
|
3281
3564
|
}
|
|
3282
3565
|
console.log();
|
|
@@ -3290,12 +3573,12 @@ libraryCmd.command("publish").description("\uC0AC\uC774\uD2B8\uC5D0 \uB77C\uC774
|
|
|
3290
3573
|
const publisher2 = new Publisher();
|
|
3291
3574
|
const index = await curator.loadIndex();
|
|
3292
3575
|
if (!index) {
|
|
3293
|
-
console.log(
|
|
3294
|
-
console.log(
|
|
3576
|
+
console.log(chalk11.yellow("\n\u26A0\uFE0F \uB77C\uC774\uBE0C\uB7EC\uB9AC \uC778\uB371\uC2A4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."));
|
|
3577
|
+
console.log(chalk11.gray(" \uD574\uACB0: npx @axis-ds/cli library collect \uBA85\uB839\uC5B4\uB85C \uC218\uC9D1\uC744 \uBA3C\uC800 \uC2E4\uD589\uD558\uC138\uC694.\n"));
|
|
3295
3578
|
return;
|
|
3296
3579
|
}
|
|
3297
|
-
console.log(
|
|
3298
|
-
console.log(
|
|
3580
|
+
console.log(chalk11.blue("\n\u{1F4E4} Library \uBC30\uCE58\n"));
|
|
3581
|
+
console.log(chalk11.gray(`\uCD1D ${index.stats.total}\uAC1C \uCEF4\uD3EC\uB10C\uD2B8
|
|
3299
3582
|
`));
|
|
3300
3583
|
if (options.clean) {
|
|
3301
3584
|
await publisher2.clean(options.output);
|
|
@@ -3306,17 +3589,17 @@ libraryCmd.command("publish").description("\uC0AC\uC774\uD2B8\uC5D0 \uB77C\uC774
|
|
|
3306
3589
|
generateSearchIndex: true
|
|
3307
3590
|
});
|
|
3308
3591
|
if (result.success) {
|
|
3309
|
-
console.log(
|
|
3592
|
+
console.log(chalk11.green(`
|
|
3310
3593
|
\u2713 \uBC30\uCE58 \uC644\uB8CC`));
|
|
3311
|
-
console.log(
|
|
3312
|
-
console.log(
|
|
3313
|
-
console.log(
|
|
3314
|
-
console.log(
|
|
3594
|
+
console.log(chalk11.gray(` - \uCD9C\uB825 \uB514\uB809\uD1A0\uB9AC: ${result.outputDir}`));
|
|
3595
|
+
console.log(chalk11.gray(` - \uC0DD\uC131\uB41C \uD30C\uC77C: ${result.files.length}\uAC1C`));
|
|
3596
|
+
console.log(chalk11.gray(` - \uCE74\uD14C\uACE0\uB9AC: ${result.stats.categoriesPublished}\uAC1C`));
|
|
3597
|
+
console.log(chalk11.gray(` - \uAC80\uC0C9 \uC778\uB371\uC2A4: ${result.stats.searchIndexSize}\uAC1C \uD56D\uBAA9`));
|
|
3315
3598
|
} else {
|
|
3316
|
-
console.log(
|
|
3599
|
+
console.log(chalk11.red(`
|
|
3317
3600
|
\u2717 \uBC30\uCE58 \uC2E4\uD328`));
|
|
3318
3601
|
for (const error of result.errors) {
|
|
3319
|
-
console.log(
|
|
3602
|
+
console.log(chalk11.red(` - ${error}`));
|
|
3320
3603
|
}
|
|
3321
3604
|
}
|
|
3322
3605
|
console.log();
|
package/dist/monet.d.ts
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* Monet (https://monet.design) 컴포넌트를 검색하고 AXIS 프로젝트에 가져옵니다.
|
|
5
5
|
*
|
|
6
6
|
* 사용법:
|
|
7
|
-
* axis-cli monet list # 카테고리 목록
|
|
8
|
-
* axis-cli monet search <query> # 컴포넌트 검색
|
|
9
|
-
* axis-cli monet add <id> # 컴포넌트 추가
|
|
7
|
+
* npx @axis-ds/cli monet list # 카테고리 목록
|
|
8
|
+
* npx @axis-ds/cli monet search <query> # 컴포넌트 검색
|
|
9
|
+
* npx @axis-ds/cli monet add <id> # 컴포넌트 추가
|
|
10
10
|
*/
|
|
11
11
|
declare const MONET_CATEGORIES: readonly [{
|
|
12
12
|
readonly id: "hero";
|
package/dist/monet.js
CHANGED
package/dist/sync/index.js
CHANGED
package/dist/v0.d.ts
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* V0 (https://v0.app) 생성 코드를 AXIS 프로젝트에 통합합니다.
|
|
5
5
|
*
|
|
6
6
|
* 사용법:
|
|
7
|
-
* axis-cli v0 convert <file> # V0 코드를 AXIS 스타일로 변환
|
|
8
|
-
* axis-cli v0 import <url> # V0 URL에서 가져오기
|
|
9
|
-
* axis-cli v0 setup # GitHub 연동 안내
|
|
7
|
+
* npx @axis-ds/cli v0 convert <file> # V0 코드를 AXIS 스타일로 변환
|
|
8
|
+
* npx @axis-ds/cli v0 import <url> # V0 URL에서 가져오기
|
|
9
|
+
* npx @axis-ds/cli v0 setup # GitHub 연동 안내
|
|
10
10
|
*/
|
|
11
11
|
declare class V0Client {
|
|
12
12
|
convertCode(code: string, options?: {
|
package/dist/v0.js
CHANGED