sh-ui-cli 0.51.0 → 0.52.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.
|
@@ -2,6 +2,30 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$description": "sh-ui 릴리즈 노트 단일 소스. docs(React)와 showcase(Flutter)가 함께 읽는다. 새 릴리즈마다 맨 앞에 추가.",
|
|
4
4
|
"versions": [
|
|
5
|
+
{
|
|
6
|
+
"version": "0.52.1",
|
|
7
|
+
"date": "2026-05-04",
|
|
8
|
+
"title": "zod v4 호환 + MCP describe 텍스트 최신화",
|
|
9
|
+
"type": "patch",
|
|
10
|
+
"highlights": [
|
|
11
|
+
"**zod 3 → 4 호환** — `packages/cli/src/create/plugins/pluginSchema.js` 의 `z.function().args().returns()` 패턴이 zod v4 에서 제거됨. 함수 시그니처는 런타임에 의미 있게 검증할 수 없으므로 `z.custom((val) => typeof val === 'function')` 으로 단순화. 사용자 영향 없음 — plugin manifest 의 `wrapExport` 가 함수인지만 확인하던 동작 그대로.",
|
|
12
|
+
"**MCP describe 텍스트 최신화** — `mcp.mjs` 의 `cssFramework` 옵션 안내가 `(향후 tailwind 등 추가 예정)` 으로 outdated 였음. 4 변종 모두 SUPPORTED 된 현재 상태로 갱신 — 각 옵션별 한 줄 설명 (plain/tailwind/css-modules/vanilla-extract) + fallback 안내."
|
|
13
|
+
],
|
|
14
|
+
"url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.52.1"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"version": "0.52.0",
|
|
18
|
+
"date": "2026-05-04",
|
|
19
|
+
"title": "Flutter 위젯 golden 시각 회귀 테스트",
|
|
20
|
+
"type": "minor",
|
|
21
|
+
"highlights": [
|
|
22
|
+
"**Flutter 골든 테스트 인프라** — `apps/showcase/test/golden_test.dart`. button(2개 variant) · card · input · checkbox · radio · switch · skeleton · slider · label 10개 위젯의 기본 상태를 골든 이미지로 비교. 의도하지 않은 시각 변경을 PR 에서 잡음.",
|
|
23
|
+
"**macOS CI 워크플로우** — `.github/workflows/showcase-visual.yml` — apps/showcase 또는 packages/registry/flutter 변경 시에만 트리거. macos-latest 러너에서 `flutter test` 실행, 실패 시 diff 를 artifact 로 업로드.",
|
|
24
|
+
"**기준 골든 commit** — 10개 png 가 `test/goldens/` 에 commit. 새 위젯 추가는 `golden_test.dart` 안에 testWidgets 한 줄 + `flutter test --update-goldens` 갱신.",
|
|
25
|
+
"이로써 sh-ui 양쪽 플랫폼 (React docs · Flutter showcase) 모두 시각 회귀 가드가 깔림. v0.51.0 의 Playwright 작업과 한 쌍."
|
|
26
|
+
],
|
|
27
|
+
"url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.52.0"
|
|
28
|
+
},
|
|
5
29
|
{
|
|
6
30
|
"version": "0.51.0",
|
|
7
31
|
"date": "2026-05-04",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sh-ui-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.52.1",
|
|
4
4
|
"description": "sh-ui CLI — 프로젝트 스캐폴드(create) + 컴포넌트 추가(add/list/remove) + IDE-내 AI용 MCP 서버",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"@inquirer/prompts": "^7.0.0",
|
|
29
29
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
30
30
|
"fs-extra": "^11.2.0",
|
|
31
|
-
"zod": "^3.
|
|
31
|
+
"zod": "^4.3.6"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"vitest": "^3.2.4"
|
|
@@ -23,10 +23,12 @@ const filePath = z
|
|
|
23
23
|
"Use 'middleware.ts' instead of 'src/middleware.ts'.",
|
|
24
24
|
});
|
|
25
25
|
|
|
26
|
+
// zod 4 에서 z.function 의 .args/.returns 체이닝 API 가 제거됨.
|
|
27
|
+
// 함수 시그니처는 런타임에 의미 있게 검증할 수 없으므로 custom 으로 type 만 확인.
|
|
26
28
|
const wrapperFn = z
|
|
27
|
-
.
|
|
28
|
-
|
|
29
|
-
|
|
29
|
+
.custom((val) => typeof val === "function", {
|
|
30
|
+
message: "wrapExport must be a function (expr: string) => string",
|
|
31
|
+
})
|
|
30
32
|
.optional();
|
|
31
33
|
|
|
32
34
|
export const PluginSchema = z.object({
|
package/src/mcp.mjs
CHANGED
|
@@ -74,7 +74,9 @@ const INIT_DESCRIPTIONS = {
|
|
|
74
74
|
},
|
|
75
75
|
cssFramework: {
|
|
76
76
|
plain: "플레인 CSS — CSS custom properties + 일반 .css 파일 (모든 컴포넌트 지원)",
|
|
77
|
-
tailwind: "Tailwind v4 utility class — class-variance-authority
|
|
77
|
+
tailwind: "Tailwind v4 utility class — class-variance-authority 기반",
|
|
78
|
+
"css-modules": "CSS Modules — .module.css + styles.X 참조, 빌드 타임 hash 격리",
|
|
79
|
+
"vanilla-extract": "vanilla-extract — TS 안에서 CSS 작성 (.css.ts), 빌드 타임 정적 컴파일 (bundler 플러그인 셋업 필요)",
|
|
78
80
|
},
|
|
79
81
|
};
|
|
80
82
|
|
|
@@ -205,7 +207,7 @@ export async function startMcpServer() {
|
|
|
205
207
|
theme: z.string().optional()
|
|
206
208
|
.describe(`프리셋 이름 (${THEME_PRESETS_LIST}) 또는 playground 에서 생성한 base64 (선택)`),
|
|
207
209
|
cssFramework: z.enum(CSS_FRAMEWORKS).optional()
|
|
208
|
-
.describe(`CSS 프레임워크. 기본 plain. 현재 ${CSS_FRAMEWORKS.join('/')} 지원
|
|
210
|
+
.describe(`CSS 프레임워크. 기본 plain. 현재 ${CSS_FRAMEWORKS.join('/')} 지원 — 변종 미보유 컴포넌트는 add 시 plain 으로 자동 fallback`),
|
|
209
211
|
cwd: z.string().optional()
|
|
210
212
|
.describe("부모 디렉토리. 기본 process.cwd()"),
|
|
211
213
|
force: z.boolean().optional()
|
|
@@ -276,7 +278,7 @@ export async function startMcpServer() {
|
|
|
276
278
|
mode: z.enum(MODES).optional()
|
|
277
279
|
.describe("색 모드. 기본 light-dark"),
|
|
278
280
|
cssFramework: z.enum(CSS_FRAMEWORKS).optional()
|
|
279
|
-
.describe(`CSS 프레임워크. 기본 plain. 현재 ${CSS_FRAMEWORKS.join('/')} 지원
|
|
281
|
+
.describe(`CSS 프레임워크. 기본 plain. 현재 ${CSS_FRAMEWORKS.join('/')} 지원 — 변종 미보유 컴포넌트는 add 시 plain 으로 자동 fallback`),
|
|
280
282
|
cwd: z.string().optional()
|
|
281
283
|
.describe("작업 디렉토리. 기본 process.cwd()"),
|
|
282
284
|
force: z.boolean().optional()
|