@rohzzn/uidna-schema 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +36 -0
- package/README.md +25 -2
- package/dist/scripts/json-schema.d.ts +1 -0
- package/dist/scripts/json-schema.js +27 -0
- package/dist/scripts/json-schema.js.map +1 -0
- package/dist/src/index.d.ts +22 -0
- package/dist/src/index.js +28 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/provenance.d.ts +377 -0
- package/dist/src/provenance.js +163 -0
- package/dist/src/provenance.js.map +1 -0
- package/dist/src/schema.d.ts +30184 -0
- package/dist/src/schema.js +621 -0
- package/dist/src/schema.js.map +1 -0
- package/dist/ui-dna.schema.json +23997 -0
- package/package.json +50 -4
|
@@ -0,0 +1,621 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The UI DNA document schema. Framework neutral: it describes what an
|
|
3
|
+
* interface is made of and how it behaves, never how to render it.
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { attributed, MeasuredProvenanceSchema, ObservedProvenanceSchema, InferredProvenanceSchema, ProvenanceSchema, ViewportSchema, } from './provenance.js';
|
|
7
|
+
/** Current schema version. Documents carry it as `dnaVersion`. */
|
|
8
|
+
export const UI_DNA_VERSION = '0.2.0';
|
|
9
|
+
const Id = z.string().min(1);
|
|
10
|
+
const IsoDateTime = z.iso.datetime({ offset: true });
|
|
11
|
+
const NonNegativeInt = z.number().int().min(0);
|
|
12
|
+
/** Structural path of a node from `<body>`: element-child indices joined by `/`, e.g. `0/2/1`. `<body>` itself is the empty string. */
|
|
13
|
+
export const NodePathSchema = z.string().regex(/^(\d+(\/\d+)*)?$/, 'node path: element-child indices joined by "/"');
|
|
14
|
+
/** Axis-aligned box in CSS pixels, relative to the page (not the viewport). */
|
|
15
|
+
export const BoxSchema = z.strictObject({
|
|
16
|
+
x: z.number(),
|
|
17
|
+
y: z.number(),
|
|
18
|
+
width: z.number().min(0),
|
|
19
|
+
height: z.number().min(0),
|
|
20
|
+
});
|
|
21
|
+
/** Budget limits (null = unlimited) and what was used. */
|
|
22
|
+
export const BudgetSchema = z.strictObject({
|
|
23
|
+
limits: z.strictObject({
|
|
24
|
+
timeMs: z.number().int().positive().nullable(),
|
|
25
|
+
pages: z.number().int().positive().nullable(),
|
|
26
|
+
actions: z.number().int().positive().nullable(),
|
|
27
|
+
resources: z.number().int().positive().nullable(),
|
|
28
|
+
}),
|
|
29
|
+
used: z.strictObject({
|
|
30
|
+
timeMs: NonNegativeInt,
|
|
31
|
+
pages: NonNegativeInt,
|
|
32
|
+
actions: NonNegativeInt,
|
|
33
|
+
resources: NonNegativeInt,
|
|
34
|
+
}),
|
|
35
|
+
});
|
|
36
|
+
/* ------------------------------------------------------------------ target */
|
|
37
|
+
/** What was scanned, when, with which budget and which tool version. */
|
|
38
|
+
export const TargetSchema = z.strictObject({
|
|
39
|
+
kind: z.enum(['url', 'cdp']),
|
|
40
|
+
/** Page URL for `url` targets; the page URL seen through CDP for `cdp` targets. */
|
|
41
|
+
url: z.string().min(1),
|
|
42
|
+
/** CDP endpoint and target id for `cdp` targets. Never contains credentials. */
|
|
43
|
+
cdp: z.strictObject({ endpoint: z.string().min(1), targetId: z.string().optional() }).optional(),
|
|
44
|
+
scanId: Id,
|
|
45
|
+
scannedAt: IsoDateTime,
|
|
46
|
+
viewports: z.array(ViewportSchema).min(1),
|
|
47
|
+
budget: BudgetSchema,
|
|
48
|
+
tool: z.strictObject({ name: z.string().min(1), version: z.string().min(1) }),
|
|
49
|
+
});
|
|
50
|
+
/* --------------------------------------------------------------------- app */
|
|
51
|
+
/** A page of the application. Phase 1 scans observe one page. */
|
|
52
|
+
export const PageSchema = z.strictObject({
|
|
53
|
+
id: Id,
|
|
54
|
+
url: z.string().min(1),
|
|
55
|
+
title: attributed(z.string()),
|
|
56
|
+
stateIds: z.array(Id),
|
|
57
|
+
/** Crawl depth from the seed page (0 for the page that was scanned first). */
|
|
58
|
+
depth: NonNegativeInt.optional(),
|
|
59
|
+
/** Navigation edge that led the crawl to this page, when it was not the seed. */
|
|
60
|
+
discoveredVia: Id.nullable().optional(),
|
|
61
|
+
/** Interactive elements found on the page's base states versus interactions attempted and changes observed. */
|
|
62
|
+
coverage: z
|
|
63
|
+
.strictObject({
|
|
64
|
+
discovered: NonNegativeInt,
|
|
65
|
+
explored: NonNegativeInt,
|
|
66
|
+
changed: NonNegativeInt,
|
|
67
|
+
skipped: NonNegativeInt,
|
|
68
|
+
})
|
|
69
|
+
.optional(),
|
|
70
|
+
});
|
|
71
|
+
/** A route pattern that maps to a page. */
|
|
72
|
+
export const RouteSchema = z.strictObject({
|
|
73
|
+
id: Id,
|
|
74
|
+
pattern: z.string().min(1),
|
|
75
|
+
pageId: Id,
|
|
76
|
+
provenance: ProvenanceSchema,
|
|
77
|
+
});
|
|
78
|
+
/** A landmark region shared by pages (header, nav, main, footer). */
|
|
79
|
+
export const LayoutRegionSchema = z.strictObject({
|
|
80
|
+
role: z.string().min(1),
|
|
81
|
+
name: z.string().nullable(),
|
|
82
|
+
nodePath: NodePathSchema,
|
|
83
|
+
nodeId: Id,
|
|
84
|
+
});
|
|
85
|
+
/** A layout shared across pages, described by its landmark regions. */
|
|
86
|
+
export const SharedLayoutSchema = z.strictObject({
|
|
87
|
+
id: Id,
|
|
88
|
+
pageIds: z.array(Id).min(1),
|
|
89
|
+
regions: z.array(LayoutRegionSchema),
|
|
90
|
+
provenance: ProvenanceSchema,
|
|
91
|
+
});
|
|
92
|
+
/** A navigation edge discovered from links. Edges to other origins are recorded, never followed. */
|
|
93
|
+
export const NavigationEdgeSchema = z.strictObject({
|
|
94
|
+
id: Id,
|
|
95
|
+
fromPageId: Id,
|
|
96
|
+
to: z.strictObject({
|
|
97
|
+
url: z.string().min(1),
|
|
98
|
+
pageId: Id.nullable(),
|
|
99
|
+
sameOrigin: z.boolean(),
|
|
100
|
+
fragment: z.boolean(),
|
|
101
|
+
}),
|
|
102
|
+
via: z.strictObject({
|
|
103
|
+
nodeId: Id,
|
|
104
|
+
nodePath: NodePathSchema,
|
|
105
|
+
role: z.string().nullable(),
|
|
106
|
+
name: z.string().nullable(),
|
|
107
|
+
}),
|
|
108
|
+
followed: z.boolean(),
|
|
109
|
+
provenance: ProvenanceSchema,
|
|
110
|
+
});
|
|
111
|
+
export const AppSchema = z.strictObject({
|
|
112
|
+
pages: z.array(PageSchema),
|
|
113
|
+
routes: z.array(RouteSchema),
|
|
114
|
+
layouts: z.array(SharedLayoutSchema),
|
|
115
|
+
navigation: z.array(NavigationEdgeSchema),
|
|
116
|
+
});
|
|
117
|
+
/* ------------------------------------------------------------------ states */
|
|
118
|
+
/** Reference to a stored screenshot. Paths are relative to the scan directory. */
|
|
119
|
+
export const ScreenshotRefSchema = z.strictObject({
|
|
120
|
+
path: z.string().min(1),
|
|
121
|
+
width: z.number().int().positive(),
|
|
122
|
+
height: z.number().int().positive(),
|
|
123
|
+
digest: z.string().min(1),
|
|
124
|
+
/** True when the page was taller than the captured height. */
|
|
125
|
+
truncated: z.boolean(),
|
|
126
|
+
});
|
|
127
|
+
/** Accessibility properties of a node beyond role and name. */
|
|
128
|
+
export const A11yPropsSchema = z.strictObject({
|
|
129
|
+
description: z.string().optional(),
|
|
130
|
+
expanded: z.boolean().optional(),
|
|
131
|
+
pressed: z.union([z.boolean(), z.literal('mixed')]).optional(),
|
|
132
|
+
selected: z.boolean().optional(),
|
|
133
|
+
checked: z.union([z.boolean(), z.literal('mixed')]).optional(),
|
|
134
|
+
disabled: z.boolean().optional(),
|
|
135
|
+
hidden: z.boolean().optional(),
|
|
136
|
+
focusable: z.boolean().optional(),
|
|
137
|
+
focused: z.boolean().optional(),
|
|
138
|
+
level: z.number().int().optional(),
|
|
139
|
+
haspopup: z.string().optional(),
|
|
140
|
+
modal: z.boolean().optional(),
|
|
141
|
+
controls: z.array(z.string()).optional(),
|
|
142
|
+
/** aria-invalid or the control's native validity when it was reported. */
|
|
143
|
+
invalid: z.boolean().optional(),
|
|
144
|
+
/** Text of the element referenced by aria-errormessage or aria-describedby when the control is invalid. */
|
|
145
|
+
errorMessage: z.string().optional(),
|
|
146
|
+
/** Role tree position for replay locators: nth element with this role and name in the state. */
|
|
147
|
+
nth: z.number().int().min(0).optional(),
|
|
148
|
+
});
|
|
149
|
+
/** Generated pseudo-element content that renders visibly (e.g. an accordion marker). */
|
|
150
|
+
export const PseudoElementSchema = z.strictObject({
|
|
151
|
+
content: z.string(),
|
|
152
|
+
styleId: z.string(),
|
|
153
|
+
});
|
|
154
|
+
/** A normalized element of a captured state. Values inherit the state's `provenance`. */
|
|
155
|
+
export const UiNodeSchema = z.strictObject({
|
|
156
|
+
id: Id,
|
|
157
|
+
parentId: Id.nullable(),
|
|
158
|
+
path: NodePathSchema,
|
|
159
|
+
depth: NonNegativeInt,
|
|
160
|
+
tag: z.string().min(1),
|
|
161
|
+
/** Computed accessibility role, or null when the node is ignored by the accessibility tree. */
|
|
162
|
+
role: z.string().nullable(),
|
|
163
|
+
/** Computed accessible name, or null when none. */
|
|
164
|
+
name: z.string().nullable(),
|
|
165
|
+
/** Allowlisted attributes, values truncated. */
|
|
166
|
+
attrs: z.record(z.string(), z.string()),
|
|
167
|
+
/** Own text content (direct text children, whitespace collapsed), or null. */
|
|
168
|
+
text: z.string().nullable(),
|
|
169
|
+
/** Bounding box, or null when the node is not rendered. */
|
|
170
|
+
box: BoxSchema.nullable(),
|
|
171
|
+
/** Key into the state's deduplicated style table. */
|
|
172
|
+
styleId: z.string().min(1),
|
|
173
|
+
a11y: A11yPropsSchema,
|
|
174
|
+
visible: z.boolean(),
|
|
175
|
+
interactive: z.boolean(),
|
|
176
|
+
inForm: z.boolean(),
|
|
177
|
+
childIds: z.array(Id),
|
|
178
|
+
pseudo: z
|
|
179
|
+
.strictObject({
|
|
180
|
+
before: PseudoElementSchema.optional(),
|
|
181
|
+
after: PseudoElementSchema.optional(),
|
|
182
|
+
})
|
|
183
|
+
.optional(),
|
|
184
|
+
/** Form-control facts for input, select, textarea and button elements. */
|
|
185
|
+
form: z
|
|
186
|
+
.strictObject({
|
|
187
|
+
/** Native constraint validity (`checkValidity()`), or null when the control has no validity state. */
|
|
188
|
+
valid: z.boolean().nullable(),
|
|
189
|
+
/** The browser's validation message when the control is invalid, or null. */
|
|
190
|
+
validationMessage: z.string().nullable(),
|
|
191
|
+
required: z.boolean(),
|
|
192
|
+
/** Control type (`email`, `password`, `checkbox`, `select-one`, ...), or null. */
|
|
193
|
+
type: z.string().nullable(),
|
|
194
|
+
/** Whether a value was present; values themselves are never stored for sensitive controls. */
|
|
195
|
+
hasValue: z.boolean(),
|
|
196
|
+
})
|
|
197
|
+
.optional(),
|
|
198
|
+
});
|
|
199
|
+
/** One node of the flattened role tree used for digests and replay. */
|
|
200
|
+
export const RoleTreeNodeSchema = z.strictObject({
|
|
201
|
+
nodeId: Id.nullable(),
|
|
202
|
+
role: z.string().min(1),
|
|
203
|
+
name: z.string(),
|
|
204
|
+
depth: NonNegativeInt,
|
|
205
|
+
states: z.record(z.string(), z.union([z.string(), z.boolean(), z.number()])),
|
|
206
|
+
});
|
|
207
|
+
/** A captured UI state: one page, one viewport, one moment. */
|
|
208
|
+
export const UiStateSchema = z.strictObject({
|
|
209
|
+
id: Id,
|
|
210
|
+
pageId: Id,
|
|
211
|
+
/** `base` states are the page as loaded; `derived` states follow a transition. */
|
|
212
|
+
kind: z.enum(['base', 'derived']),
|
|
213
|
+
parentStateId: Id.nullable(),
|
|
214
|
+
url: z.string().min(1),
|
|
215
|
+
title: z.string(),
|
|
216
|
+
viewport: ViewportSchema,
|
|
217
|
+
capturedAt: IsoDateTime,
|
|
218
|
+
evidenceId: Id,
|
|
219
|
+
screenshot: ScreenshotRefSchema.nullable(),
|
|
220
|
+
roleTreeDigest: z.string().min(1),
|
|
221
|
+
domDigest: z.string().min(1),
|
|
222
|
+
document: z.strictObject({
|
|
223
|
+
width: NonNegativeInt,
|
|
224
|
+
height: NonNegativeInt,
|
|
225
|
+
scrollHeight: NonNegativeInt,
|
|
226
|
+
}),
|
|
227
|
+
nodeCount: NonNegativeInt,
|
|
228
|
+
nodes: z.array(UiNodeSchema),
|
|
229
|
+
/** Deduplicated computed styles, filtered to rendering properties. */
|
|
230
|
+
styles: z.record(z.string(), z.record(z.string(), z.string())),
|
|
231
|
+
roleTree: z.array(RoleTreeNodeSchema),
|
|
232
|
+
/** Provenance of every node, style and role-tree entry in this state. */
|
|
233
|
+
provenance: MeasuredProvenanceSchema,
|
|
234
|
+
});
|
|
235
|
+
/** Reference to the element an action targeted. */
|
|
236
|
+
export const ActionTargetSchema = z.strictObject({
|
|
237
|
+
nodeId: Id,
|
|
238
|
+
nodePath: NodePathSchema,
|
|
239
|
+
role: z.string().nullable(),
|
|
240
|
+
name: z.string().nullable(),
|
|
241
|
+
tag: z.string().min(1),
|
|
242
|
+
/** Position among elements with the same role and name in the originating state. */
|
|
243
|
+
nth: NonNegativeInt,
|
|
244
|
+
});
|
|
245
|
+
/** An interaction performed by the explorer. */
|
|
246
|
+
export const ActionSchema = z.strictObject({
|
|
247
|
+
type: z.enum(['click', 'hover', 'focus', 'key', 'fill', 'submit']),
|
|
248
|
+
target: ActionTargetSchema.nullable(),
|
|
249
|
+
key: z.string().optional(),
|
|
250
|
+
/** Synthetic value typed by a `fill` action (never user data). */
|
|
251
|
+
value: z.string().optional(),
|
|
252
|
+
});
|
|
253
|
+
/** An observed transition between two states. */
|
|
254
|
+
export const TransitionSchema = z.strictObject({
|
|
255
|
+
id: Id,
|
|
256
|
+
from: Id,
|
|
257
|
+
action: ActionSchema,
|
|
258
|
+
to: Id,
|
|
259
|
+
/** True when the action triggered a non-GET request or a navigation. Never repeated. */
|
|
260
|
+
sideEffects: z.boolean(),
|
|
261
|
+
network: z.strictObject({ requests: NonNegativeInt, nonGet: NonNegativeInt }),
|
|
262
|
+
revert: z.strictObject({
|
|
263
|
+
method: z.enum(['escape', 'toggle', 'reload', 'none']),
|
|
264
|
+
succeeded: z.boolean(),
|
|
265
|
+
}),
|
|
266
|
+
/** What changed: counts from the DOM diff and the screenshot diff. */
|
|
267
|
+
change: z.strictObject({
|
|
268
|
+
domChanged: z.boolean(),
|
|
269
|
+
roleTreeChanged: z.boolean(),
|
|
270
|
+
screenshotChanged: z.boolean(),
|
|
271
|
+
changedNodeIds: z.array(Id),
|
|
272
|
+
}),
|
|
273
|
+
/** Set when the action led to another page of the same origin; `to` is then a base state of that page. */
|
|
274
|
+
navigation: z
|
|
275
|
+
.strictObject({
|
|
276
|
+
toPageId: Id,
|
|
277
|
+
url: z.string().min(1),
|
|
278
|
+
})
|
|
279
|
+
.nullable()
|
|
280
|
+
.optional(),
|
|
281
|
+
provenance: ObservedProvenanceSchema,
|
|
282
|
+
});
|
|
283
|
+
export const StatesSchema = z.strictObject({
|
|
284
|
+
items: z.array(UiStateSchema),
|
|
285
|
+
transitions: z.array(TransitionSchema),
|
|
286
|
+
});
|
|
287
|
+
/* -------------------------------------------------------------- components */
|
|
288
|
+
/** A slot of a component that varies between instances. */
|
|
289
|
+
export const ComponentPropSchema = z.strictObject({
|
|
290
|
+
name: z.string().min(1),
|
|
291
|
+
kind: z.enum(['text', 'image', 'link', 'boolean', 'enum', 'number']),
|
|
292
|
+
/** Path of the varying node relative to the component root. */
|
|
293
|
+
relativePath: NodePathSchema,
|
|
294
|
+
/** Distinct values seen across instances. */
|
|
295
|
+
values: z.array(z.string()),
|
|
296
|
+
});
|
|
297
|
+
/** A visual variant of a component. */
|
|
298
|
+
export const ComponentVariantSchema = z.strictObject({
|
|
299
|
+
id: Id,
|
|
300
|
+
instanceIds: z.array(Id).min(1),
|
|
301
|
+
differences: z.array(z.strictObject({
|
|
302
|
+
property: z.string().min(1),
|
|
303
|
+
values: z.array(z.string()).min(1),
|
|
304
|
+
})),
|
|
305
|
+
});
|
|
306
|
+
/** A component candidate found by fingerprint matching. Naming is left to the agent. */
|
|
307
|
+
export const ComponentDefinitionSchema = z.strictObject({
|
|
308
|
+
id: Id,
|
|
309
|
+
fingerprint: z.string().min(1),
|
|
310
|
+
/** Deterministic placeholder name such as `Component03`. */
|
|
311
|
+
generatedName: z.string().min(1),
|
|
312
|
+
/** Agent-given name, when annotated. */
|
|
313
|
+
name: attributed(z.string()).optional(),
|
|
314
|
+
structure: z.strictObject({
|
|
315
|
+
tag: z.string().min(1),
|
|
316
|
+
role: z.string().nullable(),
|
|
317
|
+
/** Human-readable structure signature, e.g. `article>div+h3+p`. */
|
|
318
|
+
signature: z.string().min(1),
|
|
319
|
+
depth: NonNegativeInt,
|
|
320
|
+
childCount: NonNegativeInt,
|
|
321
|
+
}),
|
|
322
|
+
props: z.array(ComponentPropSchema),
|
|
323
|
+
variants: z.array(ComponentVariantSchema),
|
|
324
|
+
instanceCount: NonNegativeInt,
|
|
325
|
+
/** Instances per state id. */
|
|
326
|
+
matchesByState: z.record(z.string(), NonNegativeInt),
|
|
327
|
+
/** Pages on which the candidate appears (cross-page components span more than one). */
|
|
328
|
+
pageIds: z.array(Id).optional(),
|
|
329
|
+
confidence: z.number().min(0).max(1),
|
|
330
|
+
provenance: ProvenanceSchema,
|
|
331
|
+
});
|
|
332
|
+
/** A concrete occurrence of a component in a state. */
|
|
333
|
+
export const ComponentInstanceSchema = z.strictObject({
|
|
334
|
+
id: Id,
|
|
335
|
+
definitionId: Id,
|
|
336
|
+
stateId: Id,
|
|
337
|
+
nodeId: Id,
|
|
338
|
+
nodePath: NodePathSchema,
|
|
339
|
+
box: attributed(BoxSchema),
|
|
340
|
+
variantId: Id.nullable(),
|
|
341
|
+
props: z.record(z.string(), z.string()),
|
|
342
|
+
});
|
|
343
|
+
export const ComponentsSchema = z.strictObject({
|
|
344
|
+
definitions: z.array(ComponentDefinitionSchema),
|
|
345
|
+
instances: z.array(ComponentInstanceSchema),
|
|
346
|
+
});
|
|
347
|
+
/* ------------------------------------------------------------------ visual */
|
|
348
|
+
/** Evidence behind a token: which measured values were clustered and how often each occurred. */
|
|
349
|
+
export const TokenClusterSchema = z.strictObject({
|
|
350
|
+
sampleCount: z.number().int().min(1),
|
|
351
|
+
members: z.array(z.strictObject({ value: z.string(), count: z.number().int().min(1) })).min(1),
|
|
352
|
+
/** CSS properties the samples came from. */
|
|
353
|
+
properties: z.array(z.string()),
|
|
354
|
+
/** Largest distance between members in the clustering metric, when more than one member. */
|
|
355
|
+
spread: z.number().min(0).optional(),
|
|
356
|
+
});
|
|
357
|
+
export const TOKEN_KINDS = [
|
|
358
|
+
'color',
|
|
359
|
+
'font-family',
|
|
360
|
+
'font-size',
|
|
361
|
+
'font-weight',
|
|
362
|
+
'line-height',
|
|
363
|
+
'letter-spacing',
|
|
364
|
+
'spacing',
|
|
365
|
+
'radius',
|
|
366
|
+
'shadow',
|
|
367
|
+
'breakpoint',
|
|
368
|
+
];
|
|
369
|
+
/** A design token backed by cluster evidence. */
|
|
370
|
+
export const TokenSchema = z.strictObject({
|
|
371
|
+
id: Id,
|
|
372
|
+
kind: z.enum(TOKEN_KINDS),
|
|
373
|
+
generatedName: z.string().min(1),
|
|
374
|
+
name: attributed(z.string()).optional(),
|
|
375
|
+
value: attributed(z.string()),
|
|
376
|
+
cluster: TokenClusterSchema,
|
|
377
|
+
usage: z.strictObject({
|
|
378
|
+
count: NonNegativeInt,
|
|
379
|
+
stateIds: z.array(Id),
|
|
380
|
+
nodeIds: z.array(Id).optional(),
|
|
381
|
+
}),
|
|
382
|
+
});
|
|
383
|
+
/** A composite typography style (family, size, weight, line height) seen on text nodes. */
|
|
384
|
+
export const TypographyStyleSchema = z.strictObject({
|
|
385
|
+
id: Id,
|
|
386
|
+
generatedName: z.string().min(1),
|
|
387
|
+
name: attributed(z.string()).optional(),
|
|
388
|
+
fontFamily: attributed(z.string()),
|
|
389
|
+
fontSize: attributed(z.string()),
|
|
390
|
+
fontWeight: attributed(z.string()),
|
|
391
|
+
lineHeight: attributed(z.string()),
|
|
392
|
+
letterSpacing: attributed(z.string()).optional(),
|
|
393
|
+
textTransform: attributed(z.string()).optional(),
|
|
394
|
+
sampleCount: z.number().int().min(1),
|
|
395
|
+
nodeIds: z.array(Id).optional(),
|
|
396
|
+
stateIds: z.array(Id),
|
|
397
|
+
});
|
|
398
|
+
export const TokensSchema = z.strictObject({
|
|
399
|
+
colors: z.array(TokenSchema),
|
|
400
|
+
typography: z.array(TypographyStyleSchema),
|
|
401
|
+
fontFamilies: z.array(TokenSchema),
|
|
402
|
+
fontSizes: z.array(TokenSchema),
|
|
403
|
+
spacing: z.array(TokenSchema),
|
|
404
|
+
radii: z.array(TokenSchema),
|
|
405
|
+
shadows: z.array(TokenSchema),
|
|
406
|
+
breakpoints: z.array(TokenSchema),
|
|
407
|
+
});
|
|
408
|
+
const AttrString = attributed(z.string());
|
|
409
|
+
/** Layout constraints of a container node in one state. */
|
|
410
|
+
export const LayoutConstraintSchema = z.strictObject({
|
|
411
|
+
stateId: Id,
|
|
412
|
+
nodeId: Id,
|
|
413
|
+
nodePath: NodePathSchema,
|
|
414
|
+
box: attributed(BoxSchema),
|
|
415
|
+
display: AttrString,
|
|
416
|
+
position: AttrString,
|
|
417
|
+
flow: z
|
|
418
|
+
.strictObject({
|
|
419
|
+
direction: AttrString.optional(),
|
|
420
|
+
wrap: AttrString.optional(),
|
|
421
|
+
justify: AttrString.optional(),
|
|
422
|
+
align: AttrString.optional(),
|
|
423
|
+
gap: AttrString.optional(),
|
|
424
|
+
})
|
|
425
|
+
.optional(),
|
|
426
|
+
grid: z
|
|
427
|
+
.strictObject({
|
|
428
|
+
templateColumns: AttrString.optional(),
|
|
429
|
+
templateRows: AttrString.optional(),
|
|
430
|
+
autoFlow: AttrString.optional(),
|
|
431
|
+
gap: AttrString.optional(),
|
|
432
|
+
})
|
|
433
|
+
.optional(),
|
|
434
|
+
sizing: z.strictObject({
|
|
435
|
+
width: AttrString,
|
|
436
|
+
height: AttrString,
|
|
437
|
+
minWidth: AttrString.optional(),
|
|
438
|
+
maxWidth: AttrString.optional(),
|
|
439
|
+
minHeight: AttrString.optional(),
|
|
440
|
+
maxHeight: AttrString.optional(),
|
|
441
|
+
}),
|
|
442
|
+
spacing: z.strictObject({
|
|
443
|
+
margin: AttrString,
|
|
444
|
+
padding: AttrString,
|
|
445
|
+
}),
|
|
446
|
+
});
|
|
447
|
+
export const VisualSchema = z.strictObject({
|
|
448
|
+
tokens: TokensSchema,
|
|
449
|
+
layout: z.array(LayoutConstraintSchema),
|
|
450
|
+
});
|
|
451
|
+
/* ---------------------------------------------------------------- behavior */
|
|
452
|
+
/** What a transition did to the page, as far as it could be determined. */
|
|
453
|
+
export const BehaviorEffectSchema = z.strictObject({
|
|
454
|
+
kind: z.enum([
|
|
455
|
+
'toggle-attribute',
|
|
456
|
+
'set-attribute',
|
|
457
|
+
'show',
|
|
458
|
+
'hide',
|
|
459
|
+
'toggle-class',
|
|
460
|
+
'style-change',
|
|
461
|
+
'navigate',
|
|
462
|
+
'unknown',
|
|
463
|
+
]),
|
|
464
|
+
attribute: z.string().optional(),
|
|
465
|
+
from: z.string().optional(),
|
|
466
|
+
to: z.string().optional(),
|
|
467
|
+
/** Node whose attribute, class or visibility changed. */
|
|
468
|
+
targetNodeId: Id.optional(),
|
|
469
|
+
targetNodePath: NodePathSchema.optional(),
|
|
470
|
+
details: z.string().optional(),
|
|
471
|
+
});
|
|
472
|
+
/** An event → transition pair, observed by the explorer or inferred by the agent. */
|
|
473
|
+
export const BehaviorRuleSchema = z.strictObject({
|
|
474
|
+
id: Id,
|
|
475
|
+
event: z.strictObject({
|
|
476
|
+
type: z.enum(['click', 'hover', 'focus', 'key', 'fill', 'submit']),
|
|
477
|
+
target: ActionTargetSchema,
|
|
478
|
+
key: z.string().optional(),
|
|
479
|
+
/** Synthetic value a `fill` event typed. */
|
|
480
|
+
value: z.string().optional(),
|
|
481
|
+
}),
|
|
482
|
+
transitionId: Id.nullable(),
|
|
483
|
+
effects: z.array(BehaviorEffectSchema),
|
|
484
|
+
provenance: z.discriminatedUnion('kind', [ObservedProvenanceSchema, InferredProvenanceSchema]),
|
|
485
|
+
});
|
|
486
|
+
/* ------------------------------------------------------------------ assets */
|
|
487
|
+
export const AssetSchema = z.strictObject({
|
|
488
|
+
id: Id,
|
|
489
|
+
/** `data` is a captured JSON response (opt-in), stored redacted under `localPath`. */
|
|
490
|
+
kind: z.enum(['font', 'image', 'svg', 'video', 'icon', 'data', 'other']),
|
|
491
|
+
url: z.string().min(1),
|
|
492
|
+
origin: z.enum(['same-origin', 'cross-origin', 'inline', 'data']),
|
|
493
|
+
mime: z.string().optional(),
|
|
494
|
+
bytes: NonNegativeInt.optional(),
|
|
495
|
+
digest: z.string().optional(),
|
|
496
|
+
width: NonNegativeInt.optional(),
|
|
497
|
+
height: NonNegativeInt.optional(),
|
|
498
|
+
/** Local copy relative to the scan directory, when one was stored. */
|
|
499
|
+
localPath: z.string().optional(),
|
|
500
|
+
/** For `data` assets: the request that produced the response (URL redacted). */
|
|
501
|
+
request: z.strictObject({ method: z.string().min(1), status: z.number().int().nullable(), mime: z.string().nullable() }).optional(),
|
|
502
|
+
/** Authorization to reuse the asset. `unknown` by default; only the user or agent may set `authorized`. */
|
|
503
|
+
authorization: z.enum(['unknown', 'authorized', 'unauthorized']),
|
|
504
|
+
usage: z.array(z.strictObject({ stateId: Id, nodeId: Id, nodePath: NodePathSchema })),
|
|
505
|
+
provenance: ProvenanceSchema,
|
|
506
|
+
});
|
|
507
|
+
/* ------------------------------------------------------------- limitations */
|
|
508
|
+
export const LimitationSchema = z.strictObject({
|
|
509
|
+
kind: z.enum(['not-observed', 'not-accessible', 'not-reconstructable']),
|
|
510
|
+
subject: z.string().min(1),
|
|
511
|
+
reason: z.string().min(1),
|
|
512
|
+
stateId: Id.optional(),
|
|
513
|
+
nodeId: Id.optional(),
|
|
514
|
+
nodePath: NodePathSchema.optional(),
|
|
515
|
+
evidenceId: Id.optional(),
|
|
516
|
+
});
|
|
517
|
+
/* ---------------------------------------------------------------- evidence */
|
|
518
|
+
/** Index entry pointing at artifacts that back values in the document. */
|
|
519
|
+
export const EvidenceRefSchema = z.strictObject({
|
|
520
|
+
id: Id,
|
|
521
|
+
kind: z.string().min(1),
|
|
522
|
+
artifacts: z.array(z.string()),
|
|
523
|
+
capturedAt: IsoDateTime,
|
|
524
|
+
inputs: z.record(z.string(), z.unknown()).optional(),
|
|
525
|
+
});
|
|
526
|
+
/** Record of an agent annotation applied through `annotate_dna`. */
|
|
527
|
+
export const AnnotationRecordSchema = z.strictObject({
|
|
528
|
+
id: Id,
|
|
529
|
+
appliedAt: IsoDateTime,
|
|
530
|
+
/** JSON pointer to the annotated location. */
|
|
531
|
+
path: z.string().min(1),
|
|
532
|
+
op: z.enum(['annotate', 'name', 'authorize', 'limitation', 'behavior']),
|
|
533
|
+
value: z.unknown(),
|
|
534
|
+
provenance: InferredProvenanceSchema,
|
|
535
|
+
});
|
|
536
|
+
/* ---------------------------------------------------------------- document */
|
|
537
|
+
const SemverPattern = /^\d+\.\d+\.\d+(-[0-9A-Za-z.-]+)?(\+[0-9A-Za-z.-]+)?$/;
|
|
538
|
+
const UiDnaDocumentBase = z.strictObject({
|
|
539
|
+
dnaVersion: z.string().regex(SemverPattern, 'dnaVersion must be semver'),
|
|
540
|
+
target: TargetSchema,
|
|
541
|
+
app: AppSchema,
|
|
542
|
+
states: StatesSchema,
|
|
543
|
+
components: ComponentsSchema,
|
|
544
|
+
visual: VisualSchema,
|
|
545
|
+
behavior: z.array(BehaviorRuleSchema),
|
|
546
|
+
assets: z.array(AssetSchema),
|
|
547
|
+
limitations: z.array(LimitationSchema),
|
|
548
|
+
evidence: z.array(EvidenceRefSchema),
|
|
549
|
+
annotations: z.array(AnnotationRecordSchema),
|
|
550
|
+
});
|
|
551
|
+
/** Cross-reference checks that the structural schema cannot express. */
|
|
552
|
+
function checkReferences(doc, ctx) {
|
|
553
|
+
const stateIds = new Set(doc.states.items.map((s) => s.id));
|
|
554
|
+
const pageIds = new Set(doc.app.pages.map((p) => p.id));
|
|
555
|
+
const definitionIds = new Set(doc.components.definitions.map((d) => d.id));
|
|
556
|
+
const transitionIds = new Set(doc.states.transitions.map((t) => t.id));
|
|
557
|
+
const issue = (path, message) => {
|
|
558
|
+
ctx.addIssue({ code: 'custom', path, message });
|
|
559
|
+
};
|
|
560
|
+
if (stateIds.size !== doc.states.items.length)
|
|
561
|
+
issue(['states', 'items'], 'duplicate state ids');
|
|
562
|
+
doc.states.items.forEach((state, i) => {
|
|
563
|
+
if (!pageIds.has(state.pageId))
|
|
564
|
+
issue(['states', 'items', i, 'pageId'], `unknown page ${state.pageId}`);
|
|
565
|
+
if (state.parentStateId !== null && !stateIds.has(state.parentStateId)) {
|
|
566
|
+
issue(['states', 'items', i, 'parentStateId'], `unknown state ${state.parentStateId}`);
|
|
567
|
+
}
|
|
568
|
+
if (state.nodeCount !== state.nodes.length)
|
|
569
|
+
issue(['states', 'items', i, 'nodeCount'], 'nodeCount must equal nodes.length');
|
|
570
|
+
const nodeIds = new Set(state.nodes.map((n) => n.id));
|
|
571
|
+
state.nodes.forEach((node, j) => {
|
|
572
|
+
if (!(node.styleId in state.styles))
|
|
573
|
+
issue(['states', 'items', i, 'nodes', j, 'styleId'], `unknown style ${node.styleId}`);
|
|
574
|
+
if (node.parentId !== null && !nodeIds.has(node.parentId)) {
|
|
575
|
+
issue(['states', 'items', i, 'nodes', j, 'parentId'], `unknown parent ${node.parentId}`);
|
|
576
|
+
}
|
|
577
|
+
});
|
|
578
|
+
if (state.provenance.stateId !== undefined && state.provenance.stateId !== state.id) {
|
|
579
|
+
issue(['states', 'items', i, 'provenance', 'stateId'], 'state provenance must point at the state itself');
|
|
580
|
+
}
|
|
581
|
+
});
|
|
582
|
+
doc.app.pages.forEach((page, i) => {
|
|
583
|
+
page.stateIds.forEach((id, j) => {
|
|
584
|
+
if (!stateIds.has(id))
|
|
585
|
+
issue(['app', 'pages', i, 'stateIds', j], `unknown state ${id}`);
|
|
586
|
+
});
|
|
587
|
+
});
|
|
588
|
+
doc.states.transitions.forEach((t, i) => {
|
|
589
|
+
if (!stateIds.has(t.from))
|
|
590
|
+
issue(['states', 'transitions', i, 'from'], `unknown state ${t.from}`);
|
|
591
|
+
if (!stateIds.has(t.to))
|
|
592
|
+
issue(['states', 'transitions', i, 'to'], `unknown state ${t.to}`);
|
|
593
|
+
});
|
|
594
|
+
doc.components.instances.forEach((inst, i) => {
|
|
595
|
+
if (!definitionIds.has(inst.definitionId)) {
|
|
596
|
+
issue(['components', 'instances', i, 'definitionId'], `unknown component ${inst.definitionId}`);
|
|
597
|
+
}
|
|
598
|
+
if (!stateIds.has(inst.stateId))
|
|
599
|
+
issue(['components', 'instances', i, 'stateId'], `unknown state ${inst.stateId}`);
|
|
600
|
+
});
|
|
601
|
+
doc.visual.layout.forEach((c, i) => {
|
|
602
|
+
if (!stateIds.has(c.stateId))
|
|
603
|
+
issue(['visual', 'layout', i, 'stateId'], `unknown state ${c.stateId}`);
|
|
604
|
+
});
|
|
605
|
+
doc.behavior.forEach((rule, i) => {
|
|
606
|
+
if (rule.transitionId !== null && !transitionIds.has(rule.transitionId)) {
|
|
607
|
+
issue(['behavior', i, 'transitionId'], `unknown transition ${rule.transitionId}`);
|
|
608
|
+
}
|
|
609
|
+
});
|
|
610
|
+
doc.assets.forEach((asset, i) => {
|
|
611
|
+
asset.usage.forEach((u, j) => {
|
|
612
|
+
if (!stateIds.has(u.stateId))
|
|
613
|
+
issue(['assets', i, 'usage', j, 'stateId'], `unknown state ${u.stateId}`);
|
|
614
|
+
});
|
|
615
|
+
});
|
|
616
|
+
}
|
|
617
|
+
/** The UI DNA document, structurally and referentially validated. */
|
|
618
|
+
export const UiDnaDocumentSchema = UiDnaDocumentBase.superRefine(checkReferences);
|
|
619
|
+
/** The structural schema without cross-reference checks (used for JSON Schema generation). */
|
|
620
|
+
export const UiDnaDocumentStructureSchema = UiDnaDocumentBase;
|
|
621
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"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"}
|