@framingui/mcp-server 0.6.0 → 0.6.2

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.
Files changed (56) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +24 -40
  3. package/dist/__tests__/data-client.test.d.ts +4 -4
  4. package/dist/__tests__/data-client.test.js +158 -66
  5. package/dist/__tests__/data-client.test.js.map +1 -1
  6. package/dist/api/api-result.d.ts +30 -0
  7. package/dist/api/api-result.d.ts.map +1 -0
  8. package/dist/api/api-result.js +50 -0
  9. package/dist/api/api-result.js.map +1 -0
  10. package/dist/api/data-client.d.ts +24 -26
  11. package/dist/api/data-client.d.ts.map +1 -1
  12. package/dist/api/data-client.js +209 -220
  13. package/dist/api/data-client.js.map +1 -1
  14. package/dist/data/recipe-resolver.d.ts.map +1 -1
  15. package/dist/data/recipe-resolver.js +6 -4
  16. package/dist/data/recipe-resolver.js.map +1 -1
  17. package/dist/data/template-matcher.d.ts.map +1 -1
  18. package/dist/data/template-matcher.js +2 -1
  19. package/dist/data/template-matcher.js.map +1 -1
  20. package/dist/generators/css-generator.js +4 -4
  21. package/dist/generators/css-generator.js.map +1 -1
  22. package/dist/index.js +0 -0
  23. package/dist/tools/get-screen-generation-context.d.ts.map +1 -1
  24. package/dist/tools/get-screen-generation-context.js +9 -6
  25. package/dist/tools/get-screen-generation-context.js.map +1 -1
  26. package/dist/tools/list-components.d.ts.map +1 -1
  27. package/dist/tools/list-components.js +6 -1
  28. package/dist/tools/list-components.js.map +1 -1
  29. package/dist/tools/list-icon-libraries.d.ts.map +1 -1
  30. package/dist/tools/list-icon-libraries.js +5 -8
  31. package/dist/tools/list-icon-libraries.js.map +1 -1
  32. package/dist/tools/list-screen-templates.d.ts.map +1 -1
  33. package/dist/tools/list-screen-templates.js +8 -2
  34. package/dist/tools/list-screen-templates.js.map +1 -1
  35. package/dist/tools/list-themes.d.ts.map +1 -1
  36. package/dist/tools/list-themes.js +6 -1
  37. package/dist/tools/list-themes.js.map +1 -1
  38. package/dist/tools/list-tokens.d.ts.map +1 -1
  39. package/dist/tools/list-tokens.js +6 -1
  40. package/dist/tools/list-tokens.js.map +1 -1
  41. package/dist/tools/preview-component.d.ts.map +1 -1
  42. package/dist/tools/preview-component.js +16 -9
  43. package/dist/tools/preview-component.js.map +1 -1
  44. package/dist/tools/preview-icon-library.d.ts.map +1 -1
  45. package/dist/tools/preview-icon-library.js +5 -7
  46. package/dist/tools/preview-icon-library.js.map +1 -1
  47. package/dist/tools/preview-screen-template.d.ts.map +1 -1
  48. package/dist/tools/preview-screen-template.js +17 -10
  49. package/dist/tools/preview-screen-template.js.map +1 -1
  50. package/dist/tools/preview-theme.d.ts.map +1 -1
  51. package/dist/tools/preview-theme.js +6 -15
  52. package/dist/tools/preview-theme.js.map +1 -1
  53. package/dist/tools/validate-screen-definition.d.ts.map +1 -1
  54. package/dist/tools/validate-screen-definition.js +8 -4
  55. package/dist/tools/validate-screen-definition.js.map +1 -1
  56. package/package.json +17 -16
@@ -1,24 +1,30 @@
1
1
  /**
2
- * MCP 서버 API 데이터 클라이언트
3
- * 로컬 파일 시스템 읽기를 framingui.com API fetch로 대체
2
+ * MCP 서버 API 데이터 클라이언트 (v2 - ApiResult 기반)
3
+ *
4
+ * 변경 이력:
5
+ * - v1: T | null 반환 → 모든 실패가 null로 통일되어 에러 유형 구분 불가
6
+ * - v2: ApiResult<T> 반환 → 에러 코드 기반 분류로 tool이 적절한 메시지 제공
4
7
  *
5
8
  * 기존 인프라 재사용:
6
9
  * - resolveFraminguiApiUrl(): base URL 결정
7
- * - getAuthData(): API key 가져오기
8
- * - MemoryCache: 인메모리 캐시 (TTL: 10분)
10
+ * - getAuthData(): 인증 상태 확인
11
+ * - getRawApiKey(): Bearer 토큰
12
+ * - MemoryCache: 인메모리 캐시 (TTL: 10분, stale fallback 지원)
9
13
  */
10
14
  import { resolveFraminguiApiUrl } from '../utils/api-url.js';
11
15
  import { getAuthData, getRawApiKey } from '../auth/state.js';
12
16
  import { MemoryCache } from '../auth/cache.js';
13
17
  import { info, error as logError } from '../utils/logger.js';
18
+ import { mapStatusToErrorCode } from './api-result.js';
14
19
  // 캐시 TTL: 10분
15
20
  const CACHE_TTL_MS = 10 * 60 * 1000;
16
- // 인메모리 캐시 인스턴스
21
+ // ============================================================================
22
+ // 캐시 인스턴스
23
+ // ============================================================================
17
24
  const themeListCache = new MemoryCache();
18
- const themeCache = new MemoryCache(); // ThemeV2 전체 JSON
25
+ const themeCache = new MemoryCache();
19
26
  const iconLibListCache = new MemoryCache();
20
- const iconLibCache = new MemoryCache(); // IconLibrary 전체 JSON
21
- // SPEC-MCP-007: 신규 캐시 인스턴스
27
+ const iconLibCache = new MemoryCache();
22
28
  const templateListCache = new MemoryCache();
23
29
  const templateCache = new MemoryCache();
24
30
  const componentListCache = new MemoryCache();
@@ -26,19 +32,43 @@ const componentCache = new MemoryCache();
26
32
  const tokenCache = new MemoryCache();
27
33
  const cssCache = new MemoryCache();
28
34
  const screenExamplesCache = new MemoryCache();
35
+ // ============================================================================
36
+ // API 요청 핵심 함수
37
+ // ============================================================================
29
38
  /**
30
- * API 요청 공통 헬퍼
39
+ * API 요청 공통 헬퍼 (v2: ApiResult 반환)
40
+ *
41
+ * 기존 null 반환 대신 에러 유형을 명확히 구분:
42
+ * - NOT_AUTHENTICATED: 로컬 인증 미완료
43
+ * - AUTH_FAILED (401): API key 만료/무효
44
+ * - FORBIDDEN (403): 라이선스 미보유
45
+ * - NOT_FOUND (404): 리소스 없음
46
+ * - RATE_LIMITED (429): 요청 한도 초과
47
+ * - SERVER_ERROR (5xx): 서버 오류
48
+ * - NETWORK_ERROR: 네트워크 연결 실패
31
49
  */
32
50
  async function apiFetch(path) {
33
51
  const authData = getAuthData();
34
52
  if (!authData?.valid) {
35
53
  logError(`[data-client] Not authenticated, cannot fetch ${path}`);
36
- return null;
54
+ return {
55
+ ok: false,
56
+ error: {
57
+ code: 'NOT_AUTHENTICATED',
58
+ message: 'Not authenticated. Run whoami first.',
59
+ },
60
+ };
37
61
  }
38
62
  const apiKey = getRawApiKey();
39
63
  if (!apiKey) {
40
64
  logError('[data-client] No raw API key available');
41
- return null;
65
+ return {
66
+ ok: false,
67
+ error: {
68
+ code: 'NOT_AUTHENTICATED',
69
+ message: 'No API key available. Run whoami or re-authenticate.',
70
+ },
71
+ };
42
72
  }
43
73
  const { apiUrl } = resolveFraminguiApiUrl(process.env.FRAMINGUI_API_URL);
44
74
  const url = `${apiUrl}${path}`;
@@ -52,108 +82,144 @@ async function apiFetch(path) {
52
82
  },
53
83
  });
54
84
  if (!response.ok) {
55
- logError(`[data-client] API error: ${response.status} ${response.statusText} for ${path}`);
56
- return null;
85
+ const errorCode = mapStatusToErrorCode(response.status);
86
+ let message = `${response.status} ${response.statusText}`;
87
+ // API 응답 본문에서 상세 에러 메시지 추출
88
+ try {
89
+ const body = (await response.json());
90
+ if (typeof body.error === 'string') {
91
+ message = body.error;
92
+ }
93
+ else if (typeof body.message === 'string') {
94
+ message = body.message;
95
+ }
96
+ }
97
+ catch {
98
+ // JSON 파싱 실패 시 기본 메시지 유지
99
+ }
100
+ logError(`[data-client] API error for ${path}: [${errorCode}] ${message}`);
101
+ return {
102
+ ok: false,
103
+ error: { code: errorCode, status: response.status, message },
104
+ };
57
105
  }
58
- const data = await response.json();
59
- return data;
106
+ const data = (await response.json());
107
+ return { ok: true, data };
60
108
  }
61
109
  catch (err) {
62
110
  const msg = err instanceof Error ? err.message : String(err);
63
111
  logError(`[data-client] Network error for ${path}: ${msg}`);
64
- return null;
112
+ return {
113
+ ok: false,
114
+ error: { code: 'NETWORK_ERROR', message: msg },
115
+ };
65
116
  }
66
117
  }
118
+ // ============================================================================
119
+ // 캐시 + Stale Fallback 헬퍼
120
+ // ============================================================================
67
121
  /**
68
- * 테마 목록 조회 (라이선스 보유 테마만)
122
+ * 캐시 조회 API 호출 → stale fallback 통합 패턴
69
123
  */
70
- export async function fetchThemeList() {
71
- // 캐시 확인
72
- const cached = themeListCache.get('list');
73
- if (cached) {
74
- info('[data-client] Using cached theme list');
75
- return cached;
124
+ async function fetchWithCache(options) {
125
+ const { cache, cacheKey, apiPath, extract, validate } = options;
126
+ // 1. 캐시 확인
127
+ const cached = cache.get(cacheKey);
128
+ if (cached !== null) {
129
+ info(`[data-client] Cache hit: ${cacheKey}`);
130
+ return { ok: true, data: cached };
76
131
  }
77
- const data = await apiFetch('/api/mcp/themes');
78
- if (!data?.success || !data.themes) {
79
- logError(`[data-client] Failed to fetch theme list: ${data?.error || 'unknown'}`);
80
- return [];
132
+ // 2. API 호출
133
+ const result = await apiFetch(apiPath);
134
+ if (!result.ok) {
135
+ // 3. API 실패 시 stale 캐시 fallback
136
+ const stale = cache.getStale(cacheKey);
137
+ if (stale !== null) {
138
+ info(`[data-client] Using stale cache fallback: ${cacheKey}`);
139
+ return { ok: true, data: stale };
140
+ }
141
+ return result;
142
+ }
143
+ // 4. API 응답 검증
144
+ const data = result.data;
145
+ if (validate && !validate(data)) {
146
+ const stale = cache.getStale(cacheKey);
147
+ if (stale !== null) {
148
+ info(`[data-client] API response invalid, using stale: ${cacheKey}`);
149
+ return { ok: true, data: stale };
150
+ }
151
+ return {
152
+ ok: false,
153
+ error: { code: 'SERVER_ERROR', message: `Invalid API response for ${apiPath}` },
154
+ };
81
155
  }
82
- themeListCache.set('list', data.themes, CACHE_TTL_MS);
83
- info(`[data-client] Cached ${data.themes.length} themes`);
84
- return data.themes;
156
+ // 5. 데이터 추출 + 캐시 저장
157
+ const extracted = extract(data);
158
+ if (extracted === null) {
159
+ return {
160
+ ok: false,
161
+ error: { code: 'NOT_FOUND', message: `No data returned from ${apiPath}` },
162
+ };
163
+ }
164
+ cache.set(cacheKey, extracted, CACHE_TTL_MS);
165
+ info(`[data-client] Cached: ${cacheKey}`);
166
+ return { ok: true, data: extracted };
167
+ }
168
+ // ============================================================================
169
+ // Public API 함수들
170
+ // ============================================================================
171
+ /**
172
+ * 테마 목록 조회 (라이선스 보유 테마만)
173
+ */
174
+ export async function fetchThemeList() {
175
+ return fetchWithCache({
176
+ cache: themeListCache,
177
+ cacheKey: 'list',
178
+ apiPath: '/api/mcp/themes',
179
+ validate: data => data.success === true,
180
+ extract: data => data.themes ?? null,
181
+ });
85
182
  }
86
183
  /**
87
184
  * 단일 테마 상세 조회 (전체 ThemeV2 JSON)
88
185
  */
89
186
  export async function fetchTheme(themeId) {
90
- // 캐시 확인
91
- const cached = themeCache.get(themeId);
92
- if (cached) {
93
- info(`[data-client] Using cached theme: ${themeId}`);
94
- return cached;
95
- }
96
- const data = await apiFetch(`/api/mcp/themes/${encodeURIComponent(themeId)}`);
97
- if (!data?.success || !data.theme) {
98
- logError(`[data-client] Failed to fetch theme "${themeId}": ${data?.error || 'unknown'}`);
99
- return null;
100
- }
101
- themeCache.set(themeId, data.theme, CACHE_TTL_MS);
102
- info(`[data-client] Cached theme: ${themeId}`);
103
- return data.theme;
187
+ return fetchWithCache({
188
+ cache: themeCache,
189
+ cacheKey: themeId,
190
+ apiPath: `/api/mcp/themes/${encodeURIComponent(themeId)}`,
191
+ validate: data => data.success === true,
192
+ extract: data => data.theme ?? null,
193
+ });
104
194
  }
105
195
  /**
106
196
  * 아이콘 라이브러리 목록 조회
107
197
  */
108
198
  export async function fetchIconLibraryList() {
109
- const cached = iconLibListCache.get('list');
110
- if (cached) {
111
- info('[data-client] Using cached icon library list');
112
- return cached;
113
- }
114
- const data = await apiFetch('/api/mcp/icon-libraries');
115
- if (!data?.success || !data.libraries) {
116
- logError(`[data-client] Failed to fetch icon library list: ${data?.error || 'unknown'}`);
117
- return [];
118
- }
119
- iconLibListCache.set('list', data.libraries, CACHE_TTL_MS);
120
- info(`[data-client] Cached ${data.libraries.length} icon libraries`);
121
- return data.libraries;
199
+ return fetchWithCache({
200
+ cache: iconLibListCache,
201
+ cacheKey: 'list',
202
+ apiPath: '/api/mcp/icon-libraries',
203
+ validate: data => data.success === true,
204
+ extract: data => data.libraries ?? null,
205
+ });
122
206
  }
123
207
  /**
124
- * 단일 아이콘 라이브러리 상세 조회 (전체 IconLibrary JSON)
208
+ * 단일 아이콘 라이브러리 상세 조회
125
209
  */
126
210
  export async function fetchIconLibrary(libraryId) {
127
- const cached = iconLibCache.get(libraryId);
128
- if (cached) {
129
- info(`[data-client] Using cached icon library: ${libraryId}`);
130
- return cached;
131
- }
132
- const data = await apiFetch(`/api/mcp/icon-libraries/${encodeURIComponent(libraryId)}`);
133
- if (!data?.success || !data.library) {
134
- logError(`[data-client] Failed to fetch icon library "${libraryId}": ${data?.error || 'unknown'}`);
135
- return null;
136
- }
137
- iconLibCache.set(libraryId, data.library, CACHE_TTL_MS);
138
- info(`[data-client] Cached icon library: ${libraryId}`);
139
- return data.library;
211
+ return fetchWithCache({
212
+ cache: iconLibCache,
213
+ cacheKey: libraryId,
214
+ apiPath: `/api/mcp/icon-libraries/${encodeURIComponent(libraryId)}`,
215
+ validate: data => data.success === true,
216
+ extract: data => data.library ?? null,
217
+ });
140
218
  }
141
- // ============================================================================
142
- // SPEC-MCP-007: Phase 2 - 추가 데이터 소스 API 함수
143
- // ============================================================================
144
219
  /**
145
220
  * 스크린 템플릿 목록 조회
146
- * [SPEC-MCP-007:E-001]
147
221
  */
148
222
  export async function fetchTemplateList(params) {
149
- const cacheKey = params?.category
150
- ? `list:${params.category}${params.search ? `:${params.search}` : ''}`
151
- : 'list';
152
- const cached = templateListCache.get(cacheKey);
153
- if (cached) {
154
- info('[data-client] Using cached template list');
155
- return cached;
156
- }
157
223
  const queryParams = new URLSearchParams();
158
224
  if (params?.category) {
159
225
  queryParams.set('category', params.category);
@@ -162,170 +228,93 @@ export async function fetchTemplateList(params) {
162
228
  queryParams.set('search', params.search);
163
229
  }
164
230
  const query = queryParams.toString() ? `?${queryParams.toString()}` : '';
165
- const data = await apiFetch(`/api/mcp/templates${query}`);
166
- if (!data?.success || !data.templates) {
167
- logError(`[data-client] Failed to fetch template list: ${data?.error || 'unknown'}`);
168
- // stale 캐시 fallback [SPEC-MCP-007:S-004]
169
- const stale = templateListCache.getStale(cacheKey);
170
- if (stale) {
171
- info('[data-client] Using stale template list cache as fallback');
172
- return stale;
173
- }
174
- return [];
175
- }
176
- templateListCache.set(cacheKey, data.templates, CACHE_TTL_MS);
177
- info(`[data-client] Cached ${data.templates.length} templates`);
178
- return data.templates;
231
+ const cacheKey = params?.category
232
+ ? `list:${params.category}${params.search ? `:${params.search}` : ''}`
233
+ : 'list';
234
+ return fetchWithCache({
235
+ cache: templateListCache,
236
+ cacheKey,
237
+ apiPath: `/api/mcp/templates${query}`,
238
+ validate: data => data.success === true,
239
+ extract: data => data.templates ?? null,
240
+ });
179
241
  }
180
242
  /**
181
243
  * 단일 스크린 템플릿 상세 조회
182
- * [SPEC-MCP-007:E-002]
183
244
  */
184
245
  export async function fetchTemplate(templateId) {
185
- const cached = templateCache.get(templateId);
186
- if (cached) {
187
- info(`[data-client] Using cached template: ${templateId}`);
188
- return cached;
189
- }
190
- const data = await apiFetch(`/api/mcp/templates/${encodeURIComponent(templateId)}`);
191
- if (!data?.success || !data.template) {
192
- logError(`[data-client] Failed to fetch template "${templateId}": ${data?.error || 'unknown'}`);
193
- const stale = templateCache.getStale(templateId);
194
- if (stale) {
195
- info(`[data-client] Using stale template cache as fallback: ${templateId}`);
196
- return stale;
197
- }
198
- return null;
199
- }
200
- templateCache.set(templateId, data.template, CACHE_TTL_MS);
201
- info(`[data-client] Cached template: ${templateId}`);
202
- return data.template;
246
+ return fetchWithCache({
247
+ cache: templateCache,
248
+ cacheKey: templateId,
249
+ apiPath: `/api/mcp/templates/${encodeURIComponent(templateId)}`,
250
+ validate: data => data.success === true,
251
+ extract: data => data.template ?? null,
252
+ });
203
253
  }
204
254
  /**
205
- * UI 컴포넌트 목록 조회 (전체 카탈로그)
206
- * [SPEC-MCP-007:E-003]
255
+ * UI 컴포넌트 목록 조회
207
256
  */
208
257
  export async function fetchComponentList() {
209
- const cached = componentListCache.get('list');
210
- if (cached) {
211
- info('[data-client] Using cached component list');
212
- return cached;
213
- }
214
- const data = await apiFetch('/api/mcp/components');
215
- if (!data?.success || !data.components) {
216
- logError(`[data-client] Failed to fetch component list: ${data?.error || 'unknown'}`);
217
- const stale = componentListCache.getStale('list');
218
- if (stale) {
219
- info('[data-client] Using stale component list cache as fallback');
220
- return stale;
221
- }
222
- return [];
223
- }
224
- componentListCache.set('list', data.components, CACHE_TTL_MS);
225
- info(`[data-client] Cached ${data.components.length} components`);
226
- return data.components;
258
+ return fetchWithCache({
259
+ cache: componentListCache,
260
+ cacheKey: 'list',
261
+ apiPath: '/api/mcp/components',
262
+ validate: data => data.success === true,
263
+ extract: data => data.components ?? null,
264
+ });
227
265
  }
228
266
  /**
229
- * 단일 컴포넌트 상세 정보 조회 (props + variants + examples 포함)
230
- * [SPEC-MCP-007:E-004]
267
+ * 단일 컴포넌트 상세 조회
231
268
  */
232
269
  export async function fetchComponent(componentId) {
233
- const cached = componentCache.get(componentId);
234
- if (cached) {
235
- info(`[data-client] Using cached component: ${componentId}`);
236
- return cached;
237
- }
238
- const data = await apiFetch(`/api/mcp/components/${encodeURIComponent(componentId)}`);
239
- if (!data?.success || !data.component) {
240
- logError(`[data-client] Failed to fetch component "${componentId}": ${data?.error || 'unknown'}`);
241
- const stale = componentCache.getStale(componentId);
242
- if (stale) {
243
- info(`[data-client] Using stale component cache as fallback: ${componentId}`);
244
- return stale;
245
- }
246
- return null;
247
- }
248
- componentCache.set(componentId, data.component, CACHE_TTL_MS);
249
- info(`[data-client] Cached component: ${componentId}`);
250
- return data.component;
270
+ return fetchWithCache({
271
+ cache: componentCache,
272
+ cacheKey: componentId,
273
+ apiPath: `/api/mcp/components/${encodeURIComponent(componentId)}`,
274
+ validate: data => data.success === true,
275
+ extract: data => data.component ?? null,
276
+ });
251
277
  }
252
278
  /**
253
- * 레이아웃 토큰 목록 조회 (shell / page / section)
254
- * [SPEC-MCP-007:E-005]
279
+ * 레이아웃 토큰 목록 조회
255
280
  */
256
281
  export async function fetchTokenList(tokenType) {
257
282
  const type = tokenType ?? 'all';
258
- const cached = tokenCache.get(type);
259
- if (cached) {
260
- info(`[data-client] Using cached token list: ${type}`);
261
- return cached;
262
- }
263
- const data = await apiFetch(`/api/mcp/tokens?type=${type}`);
264
- if (!data?.success) {
265
- logError(`[data-client] Failed to fetch token list: ${data?.error || 'unknown'}`);
266
- const stale = tokenCache.getStale(type);
267
- if (stale) {
268
- info('[data-client] Using stale token list cache as fallback');
269
- return stale;
270
- }
271
- return { metadata: { total: 0 } };
272
- }
273
- const result = {
274
- shells: data.shells,
275
- pages: data.pages,
276
- sections: data.sections,
277
- metadata: data.metadata ?? { total: 0 },
278
- };
279
- tokenCache.set(type, result, CACHE_TTL_MS);
280
- info(`[data-client] Cached token list: ${type} (total: ${result.metadata.total})`);
281
- return result;
283
+ return fetchWithCache({
284
+ cache: tokenCache,
285
+ cacheKey: type,
286
+ apiPath: `/api/mcp/tokens?type=${type}`,
287
+ validate: data => data.success === true,
288
+ extract: data => ({
289
+ shells: data.shells,
290
+ pages: data.pages,
291
+ sections: data.sections,
292
+ metadata: data.metadata ?? { total: 0 },
293
+ }),
294
+ });
282
295
  }
283
296
  /**
284
297
  * 테마 CSS 변수 문자열 조회
285
- * [SPEC-MCP-007:E-006]
286
298
  */
287
299
  export async function fetchCSSVariables(themeId) {
288
- const cached = cssCache.get(themeId);
289
- if (cached) {
290
- info(`[data-client] Using cached CSS variables: ${themeId}`);
291
- return cached;
292
- }
293
- const data = await apiFetch(`/api/mcp/themes/${encodeURIComponent(themeId)}/css`);
294
- if (!data?.success || !data.css) {
295
- logError(`[data-client] Failed to fetch CSS variables for "${themeId}": ${data?.error || 'unknown'}`);
296
- const stale = cssCache.getStale(themeId);
297
- if (stale) {
298
- info(`[data-client] Using stale CSS cache as fallback: ${themeId}`);
299
- return stale;
300
- }
301
- return null;
302
- }
303
- cssCache.set(themeId, data.css, CACHE_TTL_MS);
304
- info(`[data-client] Cached CSS variables: ${themeId}`);
305
- return data.css;
300
+ return fetchWithCache({
301
+ cache: cssCache,
302
+ cacheKey: themeId,
303
+ apiPath: `/api/mcp/themes/${encodeURIComponent(themeId)}/css`,
304
+ validate: data => data.success === true,
305
+ extract: data => data.css ?? null,
306
+ });
306
307
  }
307
308
  /**
308
309
  * 스크린 예제 정의 목록 조회
309
- * [SPEC-MCP-007:E-007]
310
310
  */
311
311
  export async function fetchScreenExamples() {
312
- const cached = screenExamplesCache.get('list');
313
- if (cached) {
314
- info('[data-client] Using cached screen examples');
315
- return cached;
316
- }
317
- const data = await apiFetch('/api/mcp/examples/screens');
318
- if (!data?.success || !data.examples) {
319
- logError(`[data-client] Failed to fetch screen examples: ${data?.error || 'unknown'}`);
320
- const stale = screenExamplesCache.getStale('list');
321
- if (stale) {
322
- info('[data-client] Using stale screen examples cache as fallback');
323
- return stale;
324
- }
325
- return [];
326
- }
327
- screenExamplesCache.set('list', data.examples, CACHE_TTL_MS);
328
- info(`[data-client] Cached ${data.examples.length} screen examples`);
329
- return data.examples;
312
+ return fetchWithCache({
313
+ cache: screenExamplesCache,
314
+ cacheKey: 'list',
315
+ apiPath: '/api/mcp/examples/screens',
316
+ validate: data => data.success === true,
317
+ extract: data => data.examples ?? null,
318
+ });
330
319
  }
331
320
  //# sourceMappingURL=data-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"data-client.js","sourceRoot":"","sources":["../../src/api/data-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data-client.js","sourceRoot":"","sources":["../../src/api/data-client.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"recipe-resolver.d.ts","sourceRoot":"","sources":["../../src/data/recipe-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAwDrD;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA2C7B;AAyBD;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,CAAC,CAkCxB;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,aAAa,EAAE,EAC3B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,EAAE,CAAC,CAE1B;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,aAAa,EAAE,EAC3B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAiCpF"}
1
+ {"version":3,"file":"recipe-resolver.d.ts","sourceRoot":"","sources":["../../src/data/recipe-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAwDrD;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA4C7B;AAyBD;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,CAAC,CAkCxB;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,aAAa,EAAE,EAC3B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,EAAE,CAAC,CAE1B;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,aAAa,EAAE,EAC3B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAkCpF"}
@@ -63,10 +63,11 @@ function getNestedValue(obj, path) {
63
63
  */
64
64
  export async function resolveRecipe(themeId, componentType, variant) {
65
65
  try {
66
- const theme = (await fetchTheme(themeId));
67
- if (!theme) {
66
+ const themeResult = await fetchTheme(themeId);
67
+ if (!themeResult.ok) {
68
68
  return undefined;
69
69
  }
70
+ const theme = themeResult.data;
70
71
  // recipes는 tokens 내부가 아니라 최상위 필드
71
72
  const recipes = theme.recipes || theme.tokens?.recipes;
72
73
  if (!recipes) {
@@ -199,10 +200,11 @@ export async function countAppliedRecipes(components, themeId) {
199
200
  */
200
201
  export async function getAllRecipes(themeId) {
201
202
  try {
202
- const theme = (await fetchTheme(themeId));
203
- if (!theme) {
203
+ const themeResult = await fetchTheme(themeId);
204
+ if (!themeResult.ok) {
204
205
  return {};
205
206
  }
207
+ const theme = themeResult.data;
206
208
  // recipes는 tokens 내부가 아니라 최상위 필드
207
209
  const recipes = theme.recipes || theme.tokens?.recipes;
208
210
  if (!recipes) {
@@ -1 +1 @@
1
- {"version":3,"file":"recipe-resolver.js","sourceRoot":"","sources":["../../src/data/recipe-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGnD;;;;;;;;GAQG;AACH,SAAS,aAAa,CAAC,aAAqB,EAAE,OAAgB;IAC5D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,WAAW,aAAa,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,IAAI,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;IACzC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,+CAA+C;IAC/C,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,sBAAsB,OAAO,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,UAAU;SACL,CAAC;QACJ,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,8BAA8B;IAC9B,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,UAAU,CAAC,CAAC;IACtC,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IAE9B,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CAAC,GAAQ,EAAE,IAAY;IAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,OAAO,GAAG,GAAG,CAAC;IAElB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,GAAG,IAAI,OAAO,EAAE,CAAC;YAC7D,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAe,EACf,aAAqB,EACrB,OAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,CAAQ,CAAC;QACjD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,iCAAiC;QACjC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC;QACvD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,KAAK,GAAG,aAAa,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAEpD,mBAAmB;QACnB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;YAErE,gBAAgB;YAChB,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,oCAAoC;YACpC,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACzC,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACpC,OAAO,MAAM,CAAC,IAAI,CAAC;gBACrB,CAAC;gBACD,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;oBACvC,OAAO,MAAM,CAAC,OAAO,CAAC;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CACV,kDAAkD,aAAa,IAAI,OAAO,GAAG,EAC7E,KAAK,CACN,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,cAAc,CAAC,QAA4B,EAAE,MAAc;IAClE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,mBAAmB;IACnB,MAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9D,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAE1D,6CAA6C;IAC7C,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,aAAa,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IAEpE,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAmB,EACnB,OAAe;IAEf,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;IAE3B,sBAAsB;IACtB,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,OAAO,GAAI,MAAM,CAAC,KAAa,EAAE,OAAO,CAAC;QAC/C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAElE,IAAI,MAAM,EAAE,CAAC;YACX,6BAA6B;YAC7B,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;YACxC,MAAM,iBAAiB,GAAI,YAAoB,CAAC,SAAS,CAAC;YAE1D,MAAM,CAAC,KAAK,GAAG;gBACb,GAAG,YAAY;gBACf,SAAS,EAAE,cAAc,CAAC,iBAAiB,EAAE,MAAM,CAAC;aACrD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,iBAAiB;IACjB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,MAAM,gBAAgB,GAAG,EAAE,CAAC;QAC5B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;gBACnE,gBAAgB,CAAC,IAAI,CAAC,MAAM,iBAAiB,CAAC,KAAsB,EAAE,OAAO,CAAC,CAAC,CAAC;YAClF,CAAC;iBAAM,CAAC;gBACN,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,MAAM,CAAC,QAAQ,GAAG,gBAAgB,CAAC;IACrC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,UAA2B,EAC3B,OAAe;IAEf,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,iBAAiB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACzF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,UAA2B,EAC3B,OAAe;IAEf,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,UAAU,QAAQ,CAAC,IAAmB;QACzC,MAAM,OAAO,GAAI,IAAI,CAAC,KAAa,EAAE,OAAO,CAAC;QAC7C,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;YACpE,KAAK,EAAE,CAAC;QACV,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;oBACnE,MAAM,QAAQ,CAAC,KAAsB,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAe;IACjD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,CAAQ,CAAC;QACjD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,iCAAiC;QACjC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC;QACvD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,MAAM,GAA2B,EAAE,CAAC;QAE1C,SAAS,QAAQ,CAAC,GAAQ,EAAE,OAAe,SAAS;YAClD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;gBAElD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC9B,MAAM,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC;gBAC9B,CAAC;qBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBACvD,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;QACH,CAAC;QAED,QAAQ,CAAC,OAAO,CAAC,CAAC;QAClB,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,mDAAmD,OAAO,GAAG,EAAE,KAAK,CAAC,CAAC;QACnF,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"recipe-resolver.js","sourceRoot":"","sources":["../../src/data/recipe-resolver.ts"],"names":[],"mappings":"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"}