@defai.digital/ax-cli 3.14.9 → 3.14.11
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/README.md +17 -2
- package/dist/agent/execution/tool-executor.d.ts +6 -0
- package/dist/agent/execution/tool-executor.js +72 -0
- package/dist/agent/execution/tool-executor.js.map +1 -1
- package/dist/commands/design.d.ts +18 -0
- package/dist/commands/design.js +495 -0
- package/dist/commands/design.js.map +1 -0
- package/dist/commands/vscode.js +1 -1
- package/dist/commands/vscode.js.map +1 -1
- package/dist/design/figma-alias.d.ts +88 -0
- package/dist/design/figma-alias.js +324 -0
- package/dist/design/figma-alias.js.map +1 -0
- package/dist/design/figma-audit.d.ts +40 -0
- package/dist/design/figma-audit.js +375 -0
- package/dist/design/figma-audit.js.map +1 -0
- package/dist/design/figma-client.d.ts +123 -0
- package/dist/design/figma-client.js +316 -0
- package/dist/design/figma-client.js.map +1 -0
- package/dist/design/figma-map.d.ts +29 -0
- package/dist/design/figma-map.js +274 -0
- package/dist/design/figma-map.js.map +1 -0
- package/dist/design/figma-tokens.d.ts +73 -0
- package/dist/design/figma-tokens.js +431 -0
- package/dist/design/figma-tokens.js.map +1 -0
- package/dist/design/index.d.ts +13 -0
- package/dist/design/index.js +18 -0
- package/dist/design/index.js.map +1 -0
- package/dist/design/types.d.ts +89 -0
- package/dist/design/types.js +9 -0
- package/dist/design/types.js.map +1 -0
- package/dist/hooks/hook-runner.js +2 -2
- package/dist/hooks/hook-runner.js.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/ipc/vscode-client.js +1 -1
- package/dist/ipc/vscode-client.js.map +1 -1
- package/dist/llm/tools.js +170 -0
- package/dist/llm/tools.js.map +1 -1
- package/dist/mcp/client-v2.js +1 -1
- package/dist/mcp/client-v2.js.map +1 -1
- package/dist/mcp/validation.js +1 -1
- package/dist/mcp/validation.js.map +1 -1
- package/dist/permissions/permission-manager.js +2 -2
- package/dist/permissions/permission-manager.js.map +1 -1
- package/dist/tools/design-tool.d.ts +59 -0
- package/dist/tools/design-tool.js +258 -0
- package/dist/tools/design-tool.js.map +1 -0
- package/dist/ui/hooks/use-input-history.js +1 -1
- package/dist/ui/hooks/use-input-history.js.map +1 -1
- package/dist/ui/utils/image-handler.js +1 -1
- package/dist/ui/utils/image-handler.js.map +1 -1
- package/dist/utils/path-security.js +2 -2
- package/dist/utils/path-security.js.map +1 -1
- package/dist/utils/progress-tracker.js +1 -1
- package/dist/utils/progress-tracker.js.map +1 -1
- package/dist/utils/settings-manager.js +8 -3
- package/dist/utils/settings-manager.js.map +1 -1
- package/node_modules/@ax-cli/schemas/dist/index.d.ts +1 -0
- package/node_modules/@ax-cli/schemas/dist/index.d.ts.map +1 -1
- package/node_modules/@ax-cli/schemas/dist/index.js +2 -2
- package/node_modules/@ax-cli/schemas/dist/index.js.map +1 -1
- package/node_modules/@ax-cli/schemas/dist/public/design/alias-types.d.ts +346 -0
- package/node_modules/@ax-cli/schemas/dist/public/design/alias-types.d.ts.map +1 -0
- package/node_modules/@ax-cli/schemas/dist/public/design/alias-types.js +171 -0
- package/node_modules/@ax-cli/schemas/dist/public/design/alias-types.js.map +1 -0
- package/node_modules/@ax-cli/schemas/dist/public/design/audit-types.d.ts +545 -0
- package/node_modules/@ax-cli/schemas/dist/public/design/audit-types.d.ts.map +1 -0
- package/node_modules/@ax-cli/schemas/dist/public/design/audit-types.js +307 -0
- package/node_modules/@ax-cli/schemas/dist/public/design/audit-types.js.map +1 -0
- package/node_modules/@ax-cli/schemas/dist/public/design/figma-types.d.ts +1306 -0
- package/node_modules/@ax-cli/schemas/dist/public/design/figma-types.d.ts.map +1 -0
- package/node_modules/@ax-cli/schemas/dist/public/design/figma-types.js +428 -0
- package/node_modules/@ax-cli/schemas/dist/public/design/figma-types.js.map +1 -0
- package/node_modules/@ax-cli/schemas/dist/public/design/index.d.ts +13 -0
- package/node_modules/@ax-cli/schemas/dist/public/design/index.d.ts.map +1 -0
- package/node_modules/@ax-cli/schemas/dist/public/design/index.js +82 -0
- package/node_modules/@ax-cli/schemas/dist/public/design/index.js.map +1 -0
- package/node_modules/@ax-cli/schemas/dist/public/design/token-types.d.ts +1245 -0
- package/node_modules/@ax-cli/schemas/dist/public/design/token-types.d.ts.map +1 -0
- package/node_modules/@ax-cli/schemas/dist/public/design/token-types.js +282 -0
- package/node_modules/@ax-cli/schemas/dist/public/design/token-types.js.map +1 -0
- package/package.json +2 -2
- package/packages/schemas/dist/index.d.ts +1 -0
- package/packages/schemas/dist/index.d.ts.map +1 -1
- package/packages/schemas/dist/index.js +2 -2
- package/packages/schemas/dist/index.js.map +1 -1
- package/packages/schemas/dist/public/design/alias-types.d.ts +346 -0
- package/packages/schemas/dist/public/design/alias-types.d.ts.map +1 -0
- package/packages/schemas/dist/public/design/alias-types.js +171 -0
- package/packages/schemas/dist/public/design/alias-types.js.map +1 -0
- package/packages/schemas/dist/public/design/audit-types.d.ts +545 -0
- package/packages/schemas/dist/public/design/audit-types.d.ts.map +1 -0
- package/packages/schemas/dist/public/design/audit-types.js +307 -0
- package/packages/schemas/dist/public/design/audit-types.js.map +1 -0
- package/packages/schemas/dist/public/design/figma-types.d.ts +1306 -0
- package/packages/schemas/dist/public/design/figma-types.d.ts.map +1 -0
- package/packages/schemas/dist/public/design/figma-types.js +428 -0
- package/packages/schemas/dist/public/design/figma-types.js.map +1 -0
- package/packages/schemas/dist/public/design/index.d.ts +13 -0
- package/packages/schemas/dist/public/design/index.d.ts.map +1 -0
- package/packages/schemas/dist/public/design/index.js +82 -0
- package/packages/schemas/dist/public/design/index.js.map +1 -0
- package/packages/schemas/dist/public/design/token-types.d.ts +1245 -0
- package/packages/schemas/dist/public/design/token-types.d.ts.map +1 -0
- package/packages/schemas/dist/public/design/token-types.js +282 -0
- package/packages/schemas/dist/public/design/token-types.js.map +1 -0
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Design Alias Schemas
|
|
3
|
+
*
|
|
4
|
+
* Zod schemas for the alias system that maps human-readable names
|
|
5
|
+
* to Figma file keys and node IDs.
|
|
6
|
+
*
|
|
7
|
+
* @module design/alias-types
|
|
8
|
+
*/
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
import { type Brand } from '../core/brand-types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Design alias name - dot-separated path (e.g., "landing.hero", "ds.colors.primary")
|
|
13
|
+
*/
|
|
14
|
+
export type DesignAlias = Brand<string, 'DesignAlias'>;
|
|
15
|
+
/**
|
|
16
|
+
* Validate alias format: lowercase letters, numbers, dots, hyphens
|
|
17
|
+
* Examples: "landing.hero", "ds.colors.primary", "button-primary"
|
|
18
|
+
*
|
|
19
|
+
* Note: This schema validates but does NOT transform to branded type
|
|
20
|
+
* to avoid TypeScript declaration emit issues with __brand symbol.
|
|
21
|
+
* Use `createDesignAlias()` to create branded values.
|
|
22
|
+
*/
|
|
23
|
+
export declare const DesignAliasSchema: z.ZodString;
|
|
24
|
+
/**
|
|
25
|
+
* Create a branded DesignAlias from a validated string
|
|
26
|
+
*/
|
|
27
|
+
export declare function createDesignAlias(value: string): DesignAlias;
|
|
28
|
+
/**
|
|
29
|
+
* Safely parse and create a DesignAlias
|
|
30
|
+
*/
|
|
31
|
+
export declare function parseDesignAlias(value: unknown): {
|
|
32
|
+
success: true;
|
|
33
|
+
data: DesignAlias;
|
|
34
|
+
} | {
|
|
35
|
+
success: false;
|
|
36
|
+
error: z.ZodError;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Target reference for an alias
|
|
40
|
+
*/
|
|
41
|
+
export declare const AliasTargetSchema: z.ZodObject<{
|
|
42
|
+
/** Figma file key */
|
|
43
|
+
fileKey: z.ZodString;
|
|
44
|
+
/** Node ID within the file */
|
|
45
|
+
nodeId: z.ZodString;
|
|
46
|
+
/** Optional description of this alias */
|
|
47
|
+
description: z.ZodOptional<z.ZodString>;
|
|
48
|
+
/** When this alias was created/updated */
|
|
49
|
+
updatedAt: z.ZodOptional<z.ZodString>;
|
|
50
|
+
}, "strip", z.ZodTypeAny, {
|
|
51
|
+
nodeId: string;
|
|
52
|
+
fileKey: string;
|
|
53
|
+
description?: string | undefined;
|
|
54
|
+
updatedAt?: string | undefined;
|
|
55
|
+
}, {
|
|
56
|
+
nodeId: string;
|
|
57
|
+
fileKey: string;
|
|
58
|
+
description?: string | undefined;
|
|
59
|
+
updatedAt?: string | undefined;
|
|
60
|
+
}>;
|
|
61
|
+
export type AliasTarget = z.infer<typeof AliasTargetSchema>;
|
|
62
|
+
/**
|
|
63
|
+
* Complete alias configuration stored in .ax-cli/design.json
|
|
64
|
+
*/
|
|
65
|
+
export declare const DesignConfigSchema: z.ZodObject<{
|
|
66
|
+
/** Schema version for future migrations */
|
|
67
|
+
version: z.ZodLiteral<1>;
|
|
68
|
+
/** Default file key when not specified in alias */
|
|
69
|
+
defaultFile: z.ZodOptional<z.ZodString>;
|
|
70
|
+
/** Optional design system file key (for DS-specific operations) */
|
|
71
|
+
dsFile: z.ZodOptional<z.ZodString>;
|
|
72
|
+
/** Map of alias names to targets */
|
|
73
|
+
aliases: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
74
|
+
/** Figma file key */
|
|
75
|
+
fileKey: z.ZodString;
|
|
76
|
+
/** Node ID within the file */
|
|
77
|
+
nodeId: z.ZodString;
|
|
78
|
+
/** Optional description of this alias */
|
|
79
|
+
description: z.ZodOptional<z.ZodString>;
|
|
80
|
+
/** When this alias was created/updated */
|
|
81
|
+
updatedAt: z.ZodOptional<z.ZodString>;
|
|
82
|
+
}, "strip", z.ZodTypeAny, {
|
|
83
|
+
nodeId: string;
|
|
84
|
+
fileKey: string;
|
|
85
|
+
description?: string | undefined;
|
|
86
|
+
updatedAt?: string | undefined;
|
|
87
|
+
}, {
|
|
88
|
+
nodeId: string;
|
|
89
|
+
fileKey: string;
|
|
90
|
+
description?: string | undefined;
|
|
91
|
+
updatedAt?: string | undefined;
|
|
92
|
+
}>>;
|
|
93
|
+
/** Metadata about the configuration */
|
|
94
|
+
meta: z.ZodOptional<z.ZodObject<{
|
|
95
|
+
/** When config was last modified */
|
|
96
|
+
lastModified: z.ZodOptional<z.ZodString>;
|
|
97
|
+
/** Figma file names for display */
|
|
98
|
+
fileNames: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
99
|
+
}, "strip", z.ZodTypeAny, {
|
|
100
|
+
lastModified?: string | undefined;
|
|
101
|
+
fileNames?: Record<string, string> | undefined;
|
|
102
|
+
}, {
|
|
103
|
+
lastModified?: string | undefined;
|
|
104
|
+
fileNames?: Record<string, string> | undefined;
|
|
105
|
+
}>>;
|
|
106
|
+
}, "strip", z.ZodTypeAny, {
|
|
107
|
+
version: 1;
|
|
108
|
+
aliases: Record<string, {
|
|
109
|
+
nodeId: string;
|
|
110
|
+
fileKey: string;
|
|
111
|
+
description?: string | undefined;
|
|
112
|
+
updatedAt?: string | undefined;
|
|
113
|
+
}>;
|
|
114
|
+
meta?: {
|
|
115
|
+
lastModified?: string | undefined;
|
|
116
|
+
fileNames?: Record<string, string> | undefined;
|
|
117
|
+
} | undefined;
|
|
118
|
+
defaultFile?: string | undefined;
|
|
119
|
+
dsFile?: string | undefined;
|
|
120
|
+
}, {
|
|
121
|
+
version: 1;
|
|
122
|
+
aliases: Record<string, {
|
|
123
|
+
nodeId: string;
|
|
124
|
+
fileKey: string;
|
|
125
|
+
description?: string | undefined;
|
|
126
|
+
updatedAt?: string | undefined;
|
|
127
|
+
}>;
|
|
128
|
+
meta?: {
|
|
129
|
+
lastModified?: string | undefined;
|
|
130
|
+
fileNames?: Record<string, string> | undefined;
|
|
131
|
+
} | undefined;
|
|
132
|
+
defaultFile?: string | undefined;
|
|
133
|
+
dsFile?: string | undefined;
|
|
134
|
+
}>;
|
|
135
|
+
export type DesignConfig = z.infer<typeof DesignConfigSchema>;
|
|
136
|
+
/**
|
|
137
|
+
* Create empty design config
|
|
138
|
+
*/
|
|
139
|
+
export declare function createEmptyDesignConfig(): DesignConfig;
|
|
140
|
+
/**
|
|
141
|
+
* Input for adding a new alias
|
|
142
|
+
*/
|
|
143
|
+
export declare const AddAliasInputSchema: z.ZodObject<{
|
|
144
|
+
alias: z.ZodString;
|
|
145
|
+
fileKey: z.ZodString;
|
|
146
|
+
nodeId: z.ZodString;
|
|
147
|
+
description: z.ZodOptional<z.ZodString>;
|
|
148
|
+
}, "strip", z.ZodTypeAny, {
|
|
149
|
+
nodeId: string;
|
|
150
|
+
fileKey: string;
|
|
151
|
+
alias: string;
|
|
152
|
+
description?: string | undefined;
|
|
153
|
+
}, {
|
|
154
|
+
nodeId: string;
|
|
155
|
+
fileKey: string;
|
|
156
|
+
alias: string;
|
|
157
|
+
description?: string | undefined;
|
|
158
|
+
}>;
|
|
159
|
+
export type AddAliasInput = z.infer<typeof AddAliasInputSchema>;
|
|
160
|
+
/**
|
|
161
|
+
* Result of alias operations
|
|
162
|
+
*/
|
|
163
|
+
export declare const AliasOperationResultSchema: z.ZodObject<{
|
|
164
|
+
success: z.ZodBoolean;
|
|
165
|
+
alias: z.ZodString;
|
|
166
|
+
message: z.ZodString;
|
|
167
|
+
target: z.ZodOptional<z.ZodObject<{
|
|
168
|
+
/** Figma file key */
|
|
169
|
+
fileKey: z.ZodString;
|
|
170
|
+
/** Node ID within the file */
|
|
171
|
+
nodeId: z.ZodString;
|
|
172
|
+
/** Optional description of this alias */
|
|
173
|
+
description: z.ZodOptional<z.ZodString>;
|
|
174
|
+
/** When this alias was created/updated */
|
|
175
|
+
updatedAt: z.ZodOptional<z.ZodString>;
|
|
176
|
+
}, "strip", z.ZodTypeAny, {
|
|
177
|
+
nodeId: string;
|
|
178
|
+
fileKey: string;
|
|
179
|
+
description?: string | undefined;
|
|
180
|
+
updatedAt?: string | undefined;
|
|
181
|
+
}, {
|
|
182
|
+
nodeId: string;
|
|
183
|
+
fileKey: string;
|
|
184
|
+
description?: string | undefined;
|
|
185
|
+
updatedAt?: string | undefined;
|
|
186
|
+
}>>;
|
|
187
|
+
}, "strip", z.ZodTypeAny, {
|
|
188
|
+
message: string;
|
|
189
|
+
alias: string;
|
|
190
|
+
success: boolean;
|
|
191
|
+
target?: {
|
|
192
|
+
nodeId: string;
|
|
193
|
+
fileKey: string;
|
|
194
|
+
description?: string | undefined;
|
|
195
|
+
updatedAt?: string | undefined;
|
|
196
|
+
} | undefined;
|
|
197
|
+
}, {
|
|
198
|
+
message: string;
|
|
199
|
+
alias: string;
|
|
200
|
+
success: boolean;
|
|
201
|
+
target?: {
|
|
202
|
+
nodeId: string;
|
|
203
|
+
fileKey: string;
|
|
204
|
+
description?: string | undefined;
|
|
205
|
+
updatedAt?: string | undefined;
|
|
206
|
+
} | undefined;
|
|
207
|
+
}>;
|
|
208
|
+
export type AliasOperationResult = z.infer<typeof AliasOperationResultSchema>;
|
|
209
|
+
/**
|
|
210
|
+
* Resolved alias with all information
|
|
211
|
+
*/
|
|
212
|
+
export declare const ResolvedAliasSchema: z.ZodObject<{
|
|
213
|
+
/** Original alias name */
|
|
214
|
+
alias: z.ZodString;
|
|
215
|
+
/** Resolved file key */
|
|
216
|
+
fileKey: z.ZodString;
|
|
217
|
+
/** Resolved node ID */
|
|
218
|
+
nodeId: z.ZodString;
|
|
219
|
+
/** Whether this was explicitly defined or derived */
|
|
220
|
+
source: z.ZodEnum<["explicit", "default-file", "ds-file"]>;
|
|
221
|
+
/** Description if available */
|
|
222
|
+
description: z.ZodOptional<z.ZodString>;
|
|
223
|
+
}, "strip", z.ZodTypeAny, {
|
|
224
|
+
nodeId: string;
|
|
225
|
+
fileKey: string;
|
|
226
|
+
alias: string;
|
|
227
|
+
source: "explicit" | "default-file" | "ds-file";
|
|
228
|
+
description?: string | undefined;
|
|
229
|
+
}, {
|
|
230
|
+
nodeId: string;
|
|
231
|
+
fileKey: string;
|
|
232
|
+
alias: string;
|
|
233
|
+
source: "explicit" | "default-file" | "ds-file";
|
|
234
|
+
description?: string | undefined;
|
|
235
|
+
}>;
|
|
236
|
+
export type ResolvedAlias = z.infer<typeof ResolvedAliasSchema>;
|
|
237
|
+
/**
|
|
238
|
+
* Alias resolution error
|
|
239
|
+
*/
|
|
240
|
+
export declare const AliasResolutionErrorSchema: z.ZodObject<{
|
|
241
|
+
alias: z.ZodString;
|
|
242
|
+
error: z.ZodEnum<["not_found", "no_default_file", "invalid_format", "ambiguous"]>;
|
|
243
|
+
message: z.ZodString;
|
|
244
|
+
suggestions: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
245
|
+
}, "strip", z.ZodTypeAny, {
|
|
246
|
+
error: "not_found" | "no_default_file" | "invalid_format" | "ambiguous";
|
|
247
|
+
message: string;
|
|
248
|
+
alias: string;
|
|
249
|
+
suggestions?: string[] | undefined;
|
|
250
|
+
}, {
|
|
251
|
+
error: "not_found" | "no_default_file" | "invalid_format" | "ambiguous";
|
|
252
|
+
message: string;
|
|
253
|
+
alias: string;
|
|
254
|
+
suggestions?: string[] | undefined;
|
|
255
|
+
}>;
|
|
256
|
+
export type AliasResolutionError = z.infer<typeof AliasResolutionErrorSchema>;
|
|
257
|
+
/**
|
|
258
|
+
* Alias entry for display in list command
|
|
259
|
+
*/
|
|
260
|
+
export declare const AliasListEntrySchema: z.ZodObject<{
|
|
261
|
+
alias: z.ZodString;
|
|
262
|
+
fileKey: z.ZodString;
|
|
263
|
+
nodeId: z.ZodString;
|
|
264
|
+
fileName: z.ZodOptional<z.ZodString>;
|
|
265
|
+
nodeName: z.ZodOptional<z.ZodString>;
|
|
266
|
+
description: z.ZodOptional<z.ZodString>;
|
|
267
|
+
updatedAt: z.ZodOptional<z.ZodString>;
|
|
268
|
+
}, "strip", z.ZodTypeAny, {
|
|
269
|
+
nodeId: string;
|
|
270
|
+
fileKey: string;
|
|
271
|
+
alias: string;
|
|
272
|
+
description?: string | undefined;
|
|
273
|
+
updatedAt?: string | undefined;
|
|
274
|
+
fileName?: string | undefined;
|
|
275
|
+
nodeName?: string | undefined;
|
|
276
|
+
}, {
|
|
277
|
+
nodeId: string;
|
|
278
|
+
fileKey: string;
|
|
279
|
+
alias: string;
|
|
280
|
+
description?: string | undefined;
|
|
281
|
+
updatedAt?: string | undefined;
|
|
282
|
+
fileName?: string | undefined;
|
|
283
|
+
nodeName?: string | undefined;
|
|
284
|
+
}>;
|
|
285
|
+
export type AliasListEntry = z.infer<typeof AliasListEntrySchema>;
|
|
286
|
+
/**
|
|
287
|
+
* Full alias list response
|
|
288
|
+
*/
|
|
289
|
+
export declare const AliasListResponseSchema: z.ZodObject<{
|
|
290
|
+
defaultFile: z.ZodOptional<z.ZodString>;
|
|
291
|
+
dsFile: z.ZodOptional<z.ZodString>;
|
|
292
|
+
aliases: z.ZodArray<z.ZodObject<{
|
|
293
|
+
alias: z.ZodString;
|
|
294
|
+
fileKey: z.ZodString;
|
|
295
|
+
nodeId: z.ZodString;
|
|
296
|
+
fileName: z.ZodOptional<z.ZodString>;
|
|
297
|
+
nodeName: z.ZodOptional<z.ZodString>;
|
|
298
|
+
description: z.ZodOptional<z.ZodString>;
|
|
299
|
+
updatedAt: z.ZodOptional<z.ZodString>;
|
|
300
|
+
}, "strip", z.ZodTypeAny, {
|
|
301
|
+
nodeId: string;
|
|
302
|
+
fileKey: string;
|
|
303
|
+
alias: string;
|
|
304
|
+
description?: string | undefined;
|
|
305
|
+
updatedAt?: string | undefined;
|
|
306
|
+
fileName?: string | undefined;
|
|
307
|
+
nodeName?: string | undefined;
|
|
308
|
+
}, {
|
|
309
|
+
nodeId: string;
|
|
310
|
+
fileKey: string;
|
|
311
|
+
alias: string;
|
|
312
|
+
description?: string | undefined;
|
|
313
|
+
updatedAt?: string | undefined;
|
|
314
|
+
fileName?: string | undefined;
|
|
315
|
+
nodeName?: string | undefined;
|
|
316
|
+
}>, "many">;
|
|
317
|
+
total: z.ZodNumber;
|
|
318
|
+
}, "strip", z.ZodTypeAny, {
|
|
319
|
+
aliases: {
|
|
320
|
+
nodeId: string;
|
|
321
|
+
fileKey: string;
|
|
322
|
+
alias: string;
|
|
323
|
+
description?: string | undefined;
|
|
324
|
+
updatedAt?: string | undefined;
|
|
325
|
+
fileName?: string | undefined;
|
|
326
|
+
nodeName?: string | undefined;
|
|
327
|
+
}[];
|
|
328
|
+
total: number;
|
|
329
|
+
defaultFile?: string | undefined;
|
|
330
|
+
dsFile?: string | undefined;
|
|
331
|
+
}, {
|
|
332
|
+
aliases: {
|
|
333
|
+
nodeId: string;
|
|
334
|
+
fileKey: string;
|
|
335
|
+
alias: string;
|
|
336
|
+
description?: string | undefined;
|
|
337
|
+
updatedAt?: string | undefined;
|
|
338
|
+
fileName?: string | undefined;
|
|
339
|
+
nodeName?: string | undefined;
|
|
340
|
+
}[];
|
|
341
|
+
total: number;
|
|
342
|
+
defaultFile?: string | undefined;
|
|
343
|
+
dsFile?: string | undefined;
|
|
344
|
+
}>;
|
|
345
|
+
export type AliasListResponse = z.infer<typeof AliasListResponseSchema>;
|
|
346
|
+
//# sourceMappingURL=alias-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alias-types.d.ts","sourceRoot":"","sources":["../../../src/public/design/alias-types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAS,KAAK,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAM3D;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAOvD;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,aAO3B,CAAC;AAEJ;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAG5D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAA;CAAE,CAM7H;AAMD;;GAEG;AACH,eAAO,MAAM,iBAAiB;IAC5B,qBAAqB;;IAErB,8BAA8B;;IAE9B,yCAAyC;;IAEzC,0CAA0C;;;;;;;;;;;;EAE1C,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAM5D;;GAEG;AACH,eAAO,MAAM,kBAAkB;IAC7B,2CAA2C;;IAG3C,mDAAmD;;IAGnD,mEAAmE;;IAGnE,oCAAoC;;QA5BpC,qBAAqB;;QAErB,8BAA8B;;QAE9B,yCAAyC;;QAEzC,0CAA0C;;;;;;;;;;;;;IA4B1C,uCAAuC;;QAErC,oCAAoC;;QAEpC,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGrC,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,YAAY,CAKtD;AAMD;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;EAK9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE;;GAEG;AACH,eAAO,MAAM,0BAA0B;;;;;QAxErC,qBAAqB;;QAErB,8BAA8B;;QAE9B,yCAAyC;;QAEzC,0CAA0C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuE1C,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAM9E;;GAEG;AACH,eAAO,MAAM,mBAAmB;IAC9B,0BAA0B;;IAE1B,wBAAwB;;IAExB,uBAAuB;;IAEvB,qDAAqD;;IAErD,+BAA+B;;;;;;;;;;;;;;EAE/B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE;;GAEG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;EAUrC,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAM9E;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;EAQ/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKlC,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Design Alias Schemas
|
|
3
|
+
*
|
|
4
|
+
* Zod schemas for the alias system that maps human-readable names
|
|
5
|
+
* to Figma file keys and node IDs.
|
|
6
|
+
*
|
|
7
|
+
* @module design/alias-types
|
|
8
|
+
*/
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
import { brand } from '../core/brand-types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Alias format pattern
|
|
13
|
+
*/
|
|
14
|
+
const ALIAS_PATTERN = /^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)*(-[a-z0-9]+)*$/;
|
|
15
|
+
/**
|
|
16
|
+
* Validate alias format: lowercase letters, numbers, dots, hyphens
|
|
17
|
+
* Examples: "landing.hero", "ds.colors.primary", "button-primary"
|
|
18
|
+
*
|
|
19
|
+
* Note: This schema validates but does NOT transform to branded type
|
|
20
|
+
* to avoid TypeScript declaration emit issues with __brand symbol.
|
|
21
|
+
* Use `createDesignAlias()` to create branded values.
|
|
22
|
+
*/
|
|
23
|
+
export const DesignAliasSchema = z
|
|
24
|
+
.string()
|
|
25
|
+
.min(1, 'Alias cannot be empty')
|
|
26
|
+
.max(100, 'Alias too long (max 100 characters)')
|
|
27
|
+
.regex(ALIAS_PATTERN, 'Alias must start with lowercase letter, use dots for hierarchy (e.g., "landing.hero")');
|
|
28
|
+
/**
|
|
29
|
+
* Create a branded DesignAlias from a validated string
|
|
30
|
+
*/
|
|
31
|
+
export function createDesignAlias(value) {
|
|
32
|
+
const validated = DesignAliasSchema.parse(value);
|
|
33
|
+
return brand(validated);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Safely parse and create a DesignAlias
|
|
37
|
+
*/
|
|
38
|
+
export function parseDesignAlias(value) {
|
|
39
|
+
const result = DesignAliasSchema.safeParse(value);
|
|
40
|
+
if (result.success) {
|
|
41
|
+
return { success: true, data: brand(result.data) };
|
|
42
|
+
}
|
|
43
|
+
return { success: false, error: result.error };
|
|
44
|
+
}
|
|
45
|
+
// =============================================================================
|
|
46
|
+
// Alias Target Schema
|
|
47
|
+
// =============================================================================
|
|
48
|
+
/**
|
|
49
|
+
* Target reference for an alias
|
|
50
|
+
*/
|
|
51
|
+
export const AliasTargetSchema = z.object({
|
|
52
|
+
/** Figma file key */
|
|
53
|
+
fileKey: z.string().min(1, 'File key required'),
|
|
54
|
+
/** Node ID within the file */
|
|
55
|
+
nodeId: z.string().regex(/^\d+:\d+$/, 'Invalid node ID format'),
|
|
56
|
+
/** Optional description of this alias */
|
|
57
|
+
description: z.string().optional(),
|
|
58
|
+
/** When this alias was created/updated */
|
|
59
|
+
updatedAt: z.string().datetime().optional(),
|
|
60
|
+
});
|
|
61
|
+
// =============================================================================
|
|
62
|
+
// Alias Configuration File Schema
|
|
63
|
+
// =============================================================================
|
|
64
|
+
/**
|
|
65
|
+
* Complete alias configuration stored in .ax-cli/design.json
|
|
66
|
+
*/
|
|
67
|
+
export const DesignConfigSchema = z.object({
|
|
68
|
+
/** Schema version for future migrations */
|
|
69
|
+
version: z.literal(1),
|
|
70
|
+
/** Default file key when not specified in alias */
|
|
71
|
+
defaultFile: z.string().min(1).optional(),
|
|
72
|
+
/** Optional design system file key (for DS-specific operations) */
|
|
73
|
+
dsFile: z.string().min(1).optional(),
|
|
74
|
+
/** Map of alias names to targets */
|
|
75
|
+
aliases: z.record(z.string(), // Key is the alias name (validated separately)
|
|
76
|
+
AliasTargetSchema),
|
|
77
|
+
/** Metadata about the configuration */
|
|
78
|
+
meta: z.object({
|
|
79
|
+
/** When config was last modified */
|
|
80
|
+
lastModified: z.string().datetime().optional(),
|
|
81
|
+
/** Figma file names for display */
|
|
82
|
+
fileNames: z.record(z.string(), z.string()).optional(),
|
|
83
|
+
}).optional(),
|
|
84
|
+
});
|
|
85
|
+
/**
|
|
86
|
+
* Create empty design config
|
|
87
|
+
*/
|
|
88
|
+
export function createEmptyDesignConfig() {
|
|
89
|
+
return {
|
|
90
|
+
version: 1,
|
|
91
|
+
aliases: {},
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
// =============================================================================
|
|
95
|
+
// Alias Operation Schemas
|
|
96
|
+
// =============================================================================
|
|
97
|
+
/**
|
|
98
|
+
* Input for adding a new alias
|
|
99
|
+
*/
|
|
100
|
+
export const AddAliasInputSchema = z.object({
|
|
101
|
+
alias: DesignAliasSchema,
|
|
102
|
+
fileKey: z.string().min(1, 'File key required'),
|
|
103
|
+
nodeId: z.string().regex(/^\d+:\d+$/, 'Invalid node ID format'),
|
|
104
|
+
description: z.string().optional(),
|
|
105
|
+
});
|
|
106
|
+
/**
|
|
107
|
+
* Result of alias operations
|
|
108
|
+
*/
|
|
109
|
+
export const AliasOperationResultSchema = z.object({
|
|
110
|
+
success: z.boolean(),
|
|
111
|
+
alias: z.string(),
|
|
112
|
+
message: z.string(),
|
|
113
|
+
target: AliasTargetSchema.optional(),
|
|
114
|
+
});
|
|
115
|
+
// =============================================================================
|
|
116
|
+
// Alias Resolution Schema
|
|
117
|
+
// =============================================================================
|
|
118
|
+
/**
|
|
119
|
+
* Resolved alias with all information
|
|
120
|
+
*/
|
|
121
|
+
export const ResolvedAliasSchema = z.object({
|
|
122
|
+
/** Original alias name */
|
|
123
|
+
alias: z.string(),
|
|
124
|
+
/** Resolved file key */
|
|
125
|
+
fileKey: z.string(),
|
|
126
|
+
/** Resolved node ID */
|
|
127
|
+
nodeId: z.string(),
|
|
128
|
+
/** Whether this was explicitly defined or derived */
|
|
129
|
+
source: z.enum(['explicit', 'default-file', 'ds-file']),
|
|
130
|
+
/** Description if available */
|
|
131
|
+
description: z.string().optional(),
|
|
132
|
+
});
|
|
133
|
+
/**
|
|
134
|
+
* Alias resolution error
|
|
135
|
+
*/
|
|
136
|
+
export const AliasResolutionErrorSchema = z.object({
|
|
137
|
+
alias: z.string(),
|
|
138
|
+
error: z.enum([
|
|
139
|
+
'not_found',
|
|
140
|
+
'no_default_file',
|
|
141
|
+
'invalid_format',
|
|
142
|
+
'ambiguous',
|
|
143
|
+
]),
|
|
144
|
+
message: z.string(),
|
|
145
|
+
suggestions: z.array(z.string()).optional(),
|
|
146
|
+
});
|
|
147
|
+
// =============================================================================
|
|
148
|
+
// Alias List Display Schema
|
|
149
|
+
// =============================================================================
|
|
150
|
+
/**
|
|
151
|
+
* Alias entry for display in list command
|
|
152
|
+
*/
|
|
153
|
+
export const AliasListEntrySchema = z.object({
|
|
154
|
+
alias: z.string(),
|
|
155
|
+
fileKey: z.string(),
|
|
156
|
+
nodeId: z.string(),
|
|
157
|
+
fileName: z.string().optional(),
|
|
158
|
+
nodeName: z.string().optional(),
|
|
159
|
+
description: z.string().optional(),
|
|
160
|
+
updatedAt: z.string().optional(),
|
|
161
|
+
});
|
|
162
|
+
/**
|
|
163
|
+
* Full alias list response
|
|
164
|
+
*/
|
|
165
|
+
export const AliasListResponseSchema = z.object({
|
|
166
|
+
defaultFile: z.string().optional(),
|
|
167
|
+
dsFile: z.string().optional(),
|
|
168
|
+
aliases: z.array(AliasListEntrySchema),
|
|
169
|
+
total: z.number(),
|
|
170
|
+
});
|
|
171
|
+
//# sourceMappingURL=alias-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alias-types.js","sourceRoot":"","sources":["../../../src/public/design/alias-types.ts"],"names":[],"mappings":"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"}
|