@shoplix-ai/sdui-schema 1.0.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/LICENSE +21 -0
- package/dist/action.d.ts +26 -0
- package/dist/action.d.ts.map +1 -0
- package/dist/action.js +27 -0
- package/dist/action.js.map +1 -0
- package/dist/assets.d.ts +80 -0
- package/dist/assets.d.ts.map +1 -0
- package/dist/assets.js +101 -0
- package/dist/assets.js.map +1 -0
- package/dist/binding.d.ts +144 -0
- package/dist/binding.d.ts.map +1 -0
- package/dist/binding.js +80 -0
- package/dist/binding.js.map +1 -0
- package/dist/block-definition.d.ts +1639 -0
- package/dist/block-definition.d.ts.map +1 -0
- package/dist/block-definition.js +527 -0
- package/dist/block-definition.js.map +1 -0
- package/dist/block-type-id.d.ts +15 -0
- package/dist/block-type-id.d.ts.map +1 -0
- package/dist/block-type-id.js +43 -0
- package/dist/block-type-id.js.map +1 -0
- package/dist/block-type.d.ts +21 -0
- package/dist/block-type.d.ts.map +1 -0
- package/dist/block-type.js +24 -0
- package/dist/block-type.js.map +1 -0
- package/dist/blocks.d.ts +922 -0
- package/dist/blocks.d.ts.map +1 -0
- package/dist/blocks.js +353 -0
- package/dist/blocks.js.map +1 -0
- package/dist/definition-validator.d.ts +47 -0
- package/dist/definition-validator.d.ts.map +1 -0
- package/dist/definition-validator.js +340 -0
- package/dist/definition-validator.js.map +1 -0
- package/dist/display.d.ts +139 -0
- package/dist/display.d.ts.map +1 -0
- package/dist/display.js +118 -0
- package/dist/display.js.map +1 -0
- package/dist/envelope.d.ts +2721 -0
- package/dist/envelope.d.ts.map +1 -0
- package/dist/envelope.js +116 -0
- package/dist/envelope.js.map +1 -0
- package/dist/icons.d.ts +10 -0
- package/dist/icons.d.ts.map +1 -0
- package/dist/icons.js +49 -0
- package/dist/icons.js.map +1 -0
- package/dist/index.d.ts +38 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/locale.d.ts +11 -0
- package/dist/locale.d.ts.map +1 -0
- package/dist/locale.js +15 -0
- package/dist/locale.js.map +1 -0
- package/dist/manifest.d.ts +28 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +242 -0
- package/dist/manifest.js.map +1 -0
- package/dist/parse.d.ts +33 -0
- package/dist/parse.d.ts.map +1 -0
- package/dist/parse.js +61 -0
- package/dist/parse.js.map +1 -0
- package/dist/path.d.ts +3 -0
- package/dist/path.d.ts.map +1 -0
- package/dist/path.js +14 -0
- package/dist/path.js.map +1 -0
- package/dist/primitives.d.ts +1206 -0
- package/dist/primitives.d.ts.map +1 -0
- package/dist/primitives.js +631 -0
- package/dist/primitives.js.map +1 -0
- package/dist/props.d.ts +9 -0
- package/dist/props.d.ts.map +1 -0
- package/dist/props.js +12 -0
- package/dist/props.js.map +1 -0
- package/dist/screen.d.ts +57 -0
- package/dist/screen.d.ts.map +1 -0
- package/dist/screen.js +76 -0
- package/dist/screen.js.map +1 -0
- package/dist/starters/electronics.d.ts +3 -0
- package/dist/starters/electronics.d.ts.map +1 -0
- package/dist/starters/electronics.js +235 -0
- package/dist/starters/electronics.js.map +1 -0
- package/dist/starters/fashion.d.ts +3 -0
- package/dist/starters/fashion.d.ts.map +1 -0
- package/dist/starters/fashion.js +232 -0
- package/dist/starters/fashion.js.map +1 -0
- package/dist/starters/index.d.ts +5 -0
- package/dist/starters/index.d.ts.map +1 -0
- package/dist/starters/index.js +10 -0
- package/dist/starters/index.js.map +1 -0
- package/dist/starters/minimal.d.ts +3 -0
- package/dist/starters/minimal.d.ts.map +1 -0
- package/dist/starters/minimal.js +232 -0
- package/dist/starters/minimal.js.map +1 -0
- package/dist/starters/starter-seed.d.ts +17 -0
- package/dist/starters/starter-seed.d.ts.map +1 -0
- package/dist/starters/starter-seed.js +2 -0
- package/dist/starters/starter-seed.js.map +1 -0
- package/dist/theme.d.ts +54 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +68 -0
- package/dist/theme.js.map +1 -0
- package/dist/tokens.d.ts +115 -0
- package/dist/tokens.d.ts.map +1 -0
- package/dist/tokens.js +349 -0
- package/dist/tokens.js.map +1 -0
- package/dist/version.d.ts +11 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +10 -0
- package/dist/version.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../src/blocks.ts"],"names":[],"mappings":"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"}
|
package/dist/blocks.js
ADDED
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { blockTypeIdProblem } from './block-type-id.js';
|
|
3
|
+
import { localizedTextSchema } from './locale.js';
|
|
4
|
+
import { actionSchema } from './action.js';
|
|
5
|
+
import { collectionsBindingSchema, literalProductBindingSchema, productsBindingSchema, subjectProductBindingSchema, } from './binding.js';
|
|
6
|
+
/** JSON-safe, for an editor that has to shape an id before the parse sees it. */
|
|
7
|
+
export const BLOCK_ID_PATTERN = '^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$';
|
|
8
|
+
const blockIdSchema = z
|
|
9
|
+
.string()
|
|
10
|
+
.regex(new RegExp(BLOCK_ID_PATTERN), 'expected a block id of up to 64 url-safe characters');
|
|
11
|
+
/** Present so document shapes never churn when containers unlock; empty until then. */
|
|
12
|
+
const childrenSchema = z.array(z.unknown()).max(0, 'container children are locked in v1');
|
|
13
|
+
/**
|
|
14
|
+
* Media a block carries is optional in the document, because a block the
|
|
15
|
+
* merchant has just dropped has no picture yet and the draft still has to
|
|
16
|
+
* save. Publishing is where an unfilled block is refused.
|
|
17
|
+
*/
|
|
18
|
+
const imageRefSchema = z.object({
|
|
19
|
+
assetId: z.uuid(),
|
|
20
|
+
alt: localizedTextSchema,
|
|
21
|
+
});
|
|
22
|
+
const columnsSchema = z.union([z.literal(2), z.literal(3)]);
|
|
23
|
+
const iconSchema = z.string().min(1).max(64);
|
|
24
|
+
export const textBlockSchema = z.object({
|
|
25
|
+
id: blockIdSchema,
|
|
26
|
+
type: z.literal('text'),
|
|
27
|
+
props: z.object({
|
|
28
|
+
text: localizedTextSchema,
|
|
29
|
+
size: z.enum(['sm', 'md', 'lg', 'xl']).optional(),
|
|
30
|
+
weight: z.enum(['regular', 'medium', 'bold']).optional(),
|
|
31
|
+
align: z.enum(['start', 'center', 'end']).optional(),
|
|
32
|
+
}),
|
|
33
|
+
children: childrenSchema.optional(),
|
|
34
|
+
});
|
|
35
|
+
export const imageBlockSchema = z.object({
|
|
36
|
+
id: blockIdSchema,
|
|
37
|
+
type: z.literal('image'),
|
|
38
|
+
props: z.object({
|
|
39
|
+
image: imageRefSchema.optional(),
|
|
40
|
+
action: actionSchema,
|
|
41
|
+
}),
|
|
42
|
+
children: childrenSchema.optional(),
|
|
43
|
+
});
|
|
44
|
+
export const buttonBlockSchema = z.object({
|
|
45
|
+
id: blockIdSchema,
|
|
46
|
+
type: z.literal('button'),
|
|
47
|
+
props: z.object({
|
|
48
|
+
label: localizedTextSchema,
|
|
49
|
+
action: actionSchema,
|
|
50
|
+
}),
|
|
51
|
+
children: childrenSchema.optional(),
|
|
52
|
+
});
|
|
53
|
+
export const spacerBlockSchema = z.object({
|
|
54
|
+
id: blockIdSchema,
|
|
55
|
+
type: z.literal('spacer'),
|
|
56
|
+
props: z.object({
|
|
57
|
+
size: z.enum(['xs', 'sm', 'md', 'lg', 'xl']),
|
|
58
|
+
}),
|
|
59
|
+
children: childrenSchema.optional(),
|
|
60
|
+
});
|
|
61
|
+
export const dividerBlockSchema = z.object({
|
|
62
|
+
id: blockIdSchema,
|
|
63
|
+
type: z.literal('divider'),
|
|
64
|
+
props: z.object({
|
|
65
|
+
label: localizedTextSchema.optional(),
|
|
66
|
+
}),
|
|
67
|
+
children: childrenSchema.optional(),
|
|
68
|
+
});
|
|
69
|
+
export const sectionHeaderBlockSchema = z.object({
|
|
70
|
+
id: blockIdSchema,
|
|
71
|
+
type: z.literal('section_header'),
|
|
72
|
+
props: z.object({
|
|
73
|
+
title: localizedTextSchema,
|
|
74
|
+
action: actionSchema,
|
|
75
|
+
}),
|
|
76
|
+
children: childrenSchema.optional(),
|
|
77
|
+
});
|
|
78
|
+
export const searchBarBlockSchema = z.object({
|
|
79
|
+
id: blockIdSchema,
|
|
80
|
+
type: z.literal('search_bar'),
|
|
81
|
+
props: z.object({
|
|
82
|
+
placeholder: localizedTextSchema.optional(),
|
|
83
|
+
}),
|
|
84
|
+
children: childrenSchema.optional(),
|
|
85
|
+
});
|
|
86
|
+
export const videoBlockSchema = z.object({
|
|
87
|
+
id: blockIdSchema,
|
|
88
|
+
type: z.literal('video'),
|
|
89
|
+
props: z.object({
|
|
90
|
+
assetId: z.uuid().optional(),
|
|
91
|
+
poster: imageRefSchema.optional(),
|
|
92
|
+
}),
|
|
93
|
+
children: childrenSchema.optional(),
|
|
94
|
+
});
|
|
95
|
+
export const heroBannerBlockSchema = z.object({
|
|
96
|
+
id: blockIdSchema,
|
|
97
|
+
type: z.literal('hero_banner'),
|
|
98
|
+
props: z.object({
|
|
99
|
+
title: localizedTextSchema,
|
|
100
|
+
subtitle: localizedTextSchema.optional(),
|
|
101
|
+
image: imageRefSchema.optional(),
|
|
102
|
+
action: actionSchema,
|
|
103
|
+
}),
|
|
104
|
+
children: childrenSchema.optional(),
|
|
105
|
+
});
|
|
106
|
+
export const promoBannerBlockSchema = z.object({
|
|
107
|
+
id: blockIdSchema,
|
|
108
|
+
type: z.literal('promo_banner'),
|
|
109
|
+
props: z.object({
|
|
110
|
+
image: imageRefSchema.optional(),
|
|
111
|
+
title: localizedTextSchema.optional(),
|
|
112
|
+
action: actionSchema,
|
|
113
|
+
}),
|
|
114
|
+
children: childrenSchema.optional(),
|
|
115
|
+
});
|
|
116
|
+
export const announcementBarBlockSchema = z.object({
|
|
117
|
+
id: blockIdSchema,
|
|
118
|
+
type: z.literal('announcement_bar'),
|
|
119
|
+
props: z.object({
|
|
120
|
+
text: localizedTextSchema,
|
|
121
|
+
}),
|
|
122
|
+
children: childrenSchema.optional(),
|
|
123
|
+
});
|
|
124
|
+
export const countdownBlockSchema = z.object({
|
|
125
|
+
id: blockIdSchema,
|
|
126
|
+
type: z.literal('countdown'),
|
|
127
|
+
props: z.object({
|
|
128
|
+
endsAt: z.iso.datetime(),
|
|
129
|
+
title: localizedTextSchema.optional(),
|
|
130
|
+
}),
|
|
131
|
+
children: childrenSchema.optional(),
|
|
132
|
+
});
|
|
133
|
+
export const featureStripBlockSchema = z.object({
|
|
134
|
+
id: blockIdSchema,
|
|
135
|
+
type: z.literal('feature_strip'),
|
|
136
|
+
props: z.object({
|
|
137
|
+
items: z
|
|
138
|
+
.array(z.object({ icon: iconSchema, label: localizedTextSchema }))
|
|
139
|
+
.min(1)
|
|
140
|
+
.max(6),
|
|
141
|
+
}),
|
|
142
|
+
children: childrenSchema.optional(),
|
|
143
|
+
});
|
|
144
|
+
export const productCardBlockSchema = z.object({
|
|
145
|
+
id: blockIdSchema,
|
|
146
|
+
type: z.literal('product_card'),
|
|
147
|
+
binding: literalProductBindingSchema,
|
|
148
|
+
props: z.object({
|
|
149
|
+
layout: z.enum(['standard', 'compact']).optional(),
|
|
150
|
+
}),
|
|
151
|
+
children: childrenSchema.optional(),
|
|
152
|
+
});
|
|
153
|
+
export const productCarouselBlockSchema = z.object({
|
|
154
|
+
id: blockIdSchema,
|
|
155
|
+
type: z.literal('product_carousel'),
|
|
156
|
+
binding: productsBindingSchema,
|
|
157
|
+
props: z.object({
|
|
158
|
+
title: localizedTextSchema.optional(),
|
|
159
|
+
}),
|
|
160
|
+
children: childrenSchema.optional(),
|
|
161
|
+
});
|
|
162
|
+
export const productGridBlockSchema = z.object({
|
|
163
|
+
id: blockIdSchema,
|
|
164
|
+
type: z.literal('product_grid'),
|
|
165
|
+
binding: productsBindingSchema,
|
|
166
|
+
props: z.object({
|
|
167
|
+
title: localizedTextSchema.optional(),
|
|
168
|
+
columns: columnsSchema,
|
|
169
|
+
}),
|
|
170
|
+
children: childrenSchema.optional(),
|
|
171
|
+
});
|
|
172
|
+
export const productListBlockSchema = z.object({
|
|
173
|
+
id: blockIdSchema,
|
|
174
|
+
type: z.literal('product_list'),
|
|
175
|
+
binding: productsBindingSchema,
|
|
176
|
+
props: z.object({
|
|
177
|
+
title: localizedTextSchema.optional(),
|
|
178
|
+
}),
|
|
179
|
+
children: childrenSchema.optional(),
|
|
180
|
+
});
|
|
181
|
+
export const collectionCirclesBlockSchema = z.object({
|
|
182
|
+
id: blockIdSchema,
|
|
183
|
+
type: z.literal('collection_circles'),
|
|
184
|
+
binding: collectionsBindingSchema,
|
|
185
|
+
props: z.object({
|
|
186
|
+
title: localizedTextSchema.optional(),
|
|
187
|
+
}),
|
|
188
|
+
children: childrenSchema.optional(),
|
|
189
|
+
});
|
|
190
|
+
export const collectionGridBlockSchema = z.object({
|
|
191
|
+
id: blockIdSchema,
|
|
192
|
+
type: z.literal('collection_grid'),
|
|
193
|
+
binding: collectionsBindingSchema,
|
|
194
|
+
props: z.object({
|
|
195
|
+
title: localizedTextSchema.optional(),
|
|
196
|
+
columns: columnsSchema,
|
|
197
|
+
}),
|
|
198
|
+
children: childrenSchema.optional(),
|
|
199
|
+
});
|
|
200
|
+
export const collectionRowBlockSchema = z.object({
|
|
201
|
+
id: blockIdSchema,
|
|
202
|
+
type: z.literal('collection_row'),
|
|
203
|
+
binding: collectionsBindingSchema,
|
|
204
|
+
props: z.object({
|
|
205
|
+
title: localizedTextSchema.optional(),
|
|
206
|
+
}),
|
|
207
|
+
children: childrenSchema.optional(),
|
|
208
|
+
});
|
|
209
|
+
export const productGalleryBlockSchema = z.object({
|
|
210
|
+
id: blockIdSchema,
|
|
211
|
+
type: z.literal('product_gallery'),
|
|
212
|
+
binding: subjectProductBindingSchema,
|
|
213
|
+
props: z.object({}),
|
|
214
|
+
children: childrenSchema.optional(),
|
|
215
|
+
});
|
|
216
|
+
export const productSummaryBlockSchema = z.object({
|
|
217
|
+
id: blockIdSchema,
|
|
218
|
+
type: z.literal('product_summary'),
|
|
219
|
+
binding: subjectProductBindingSchema,
|
|
220
|
+
props: z.object({}),
|
|
221
|
+
children: childrenSchema.optional(),
|
|
222
|
+
});
|
|
223
|
+
/**
|
|
224
|
+
* The two buying blocks (variant_picker, add_to_cart) carry strict props —
|
|
225
|
+
* unlike the other welded slots, a wiring attempt fails loudly instead of
|
|
226
|
+
* being stripped. Capabilities are code, never document content.
|
|
227
|
+
*/
|
|
228
|
+
export const variantPickerBlockSchema = z.object({
|
|
229
|
+
id: blockIdSchema,
|
|
230
|
+
type: z.literal('variant_picker'),
|
|
231
|
+
binding: subjectProductBindingSchema,
|
|
232
|
+
props: z.strictObject({
|
|
233
|
+
presentation: z.enum(['chips', 'dropdown']).optional(),
|
|
234
|
+
}),
|
|
235
|
+
children: childrenSchema.optional(),
|
|
236
|
+
});
|
|
237
|
+
export const addToCartBlockSchema = z.object({
|
|
238
|
+
id: blockIdSchema,
|
|
239
|
+
type: z.literal('add_to_cart'),
|
|
240
|
+
binding: subjectProductBindingSchema,
|
|
241
|
+
props: z.strictObject({
|
|
242
|
+
label: localizedTextSchema.optional(),
|
|
243
|
+
}),
|
|
244
|
+
children: childrenSchema.optional(),
|
|
245
|
+
});
|
|
246
|
+
export const productSpecsBlockSchema = z.object({
|
|
247
|
+
id: blockIdSchema,
|
|
248
|
+
type: z.literal('product_specs'),
|
|
249
|
+
binding: subjectProductBindingSchema,
|
|
250
|
+
props: z.object({}),
|
|
251
|
+
children: childrenSchema.optional(),
|
|
252
|
+
});
|
|
253
|
+
export const reviewsSlotBlockSchema = z.object({
|
|
254
|
+
id: blockIdSchema,
|
|
255
|
+
type: z.literal('reviews_slot'),
|
|
256
|
+
binding: subjectProductBindingSchema,
|
|
257
|
+
props: z.object({}),
|
|
258
|
+
children: childrenSchema.optional(),
|
|
259
|
+
});
|
|
260
|
+
export const BLOCK_TYPES = [
|
|
261
|
+
'text',
|
|
262
|
+
'image',
|
|
263
|
+
'button',
|
|
264
|
+
'spacer',
|
|
265
|
+
'divider',
|
|
266
|
+
'section_header',
|
|
267
|
+
'search_bar',
|
|
268
|
+
'video',
|
|
269
|
+
'hero_banner',
|
|
270
|
+
'promo_banner',
|
|
271
|
+
'announcement_bar',
|
|
272
|
+
'countdown',
|
|
273
|
+
'feature_strip',
|
|
274
|
+
'product_card',
|
|
275
|
+
'product_carousel',
|
|
276
|
+
'product_grid',
|
|
277
|
+
'product_list',
|
|
278
|
+
'collection_circles',
|
|
279
|
+
'collection_grid',
|
|
280
|
+
'collection_row',
|
|
281
|
+
'product_gallery',
|
|
282
|
+
'product_summary',
|
|
283
|
+
'variant_picker',
|
|
284
|
+
'add_to_cart',
|
|
285
|
+
'product_specs',
|
|
286
|
+
'reviews_slot',
|
|
287
|
+
];
|
|
288
|
+
export const KNOWN_BLOCK_SCHEMAS = {
|
|
289
|
+
text: textBlockSchema,
|
|
290
|
+
image: imageBlockSchema,
|
|
291
|
+
button: buttonBlockSchema,
|
|
292
|
+
spacer: spacerBlockSchema,
|
|
293
|
+
divider: dividerBlockSchema,
|
|
294
|
+
section_header: sectionHeaderBlockSchema,
|
|
295
|
+
search_bar: searchBarBlockSchema,
|
|
296
|
+
video: videoBlockSchema,
|
|
297
|
+
hero_banner: heroBannerBlockSchema,
|
|
298
|
+
promo_banner: promoBannerBlockSchema,
|
|
299
|
+
announcement_bar: announcementBarBlockSchema,
|
|
300
|
+
countdown: countdownBlockSchema,
|
|
301
|
+
feature_strip: featureStripBlockSchema,
|
|
302
|
+
product_card: productCardBlockSchema,
|
|
303
|
+
product_carousel: productCarouselBlockSchema,
|
|
304
|
+
product_grid: productGridBlockSchema,
|
|
305
|
+
product_list: productListBlockSchema,
|
|
306
|
+
collection_circles: collectionCirclesBlockSchema,
|
|
307
|
+
collection_grid: collectionGridBlockSchema,
|
|
308
|
+
collection_row: collectionRowBlockSchema,
|
|
309
|
+
product_gallery: productGalleryBlockSchema,
|
|
310
|
+
product_summary: productSummaryBlockSchema,
|
|
311
|
+
variant_picker: variantPickerBlockSchema,
|
|
312
|
+
add_to_cart: addToCartBlockSchema,
|
|
313
|
+
product_specs: productSpecsBlockSchema,
|
|
314
|
+
reviews_slot: reviewsSlotBlockSchema,
|
|
315
|
+
};
|
|
316
|
+
const blockTypeIdSchema = z.string().superRefine((type, ctx) => {
|
|
317
|
+
const problem = blockTypeIdProblem(type);
|
|
318
|
+
if (problem !== null)
|
|
319
|
+
ctx.addIssue({ code: 'custom', message: problem });
|
|
320
|
+
});
|
|
321
|
+
/**
|
|
322
|
+
* A block whose type this schema version does not know: a newer platform
|
|
323
|
+
* type, or a Shop's own. It parses and keeps its content so renderers can
|
|
324
|
+
* skip it and re-serialization loses nothing — the permanent no-crash
|
|
325
|
+
* guarantee for additive versioning. Only the id's grammar is held here.
|
|
326
|
+
*/
|
|
327
|
+
const unknownBlockSchema = z.looseObject({
|
|
328
|
+
id: blockIdSchema,
|
|
329
|
+
type: blockTypeIdSchema,
|
|
330
|
+
});
|
|
331
|
+
const knownSchemaFor = (type) => typeof type === 'string'
|
|
332
|
+
? KNOWN_BLOCK_SCHEMAS[type]
|
|
333
|
+
: undefined;
|
|
334
|
+
/**
|
|
335
|
+
* Known types parse strictly; unknown types fall back to the tolerant shape.
|
|
336
|
+
* A malformed known block never slips through as "unknown".
|
|
337
|
+
*/
|
|
338
|
+
export const blockSchema = z.unknown().transform((value, ctx) => {
|
|
339
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
340
|
+
ctx.addIssue({ code: 'custom', message: 'expected a block object' });
|
|
341
|
+
return z.NEVER;
|
|
342
|
+
}
|
|
343
|
+
const schema = knownSchemaFor(value.type) ?? unknownBlockSchema;
|
|
344
|
+
const parsed = schema.safeParse(value);
|
|
345
|
+
if (!parsed.success) {
|
|
346
|
+
for (const issue of parsed.error.issues) {
|
|
347
|
+
ctx.addIssue({ code: 'custom', message: issue.message, path: [...issue.path] });
|
|
348
|
+
}
|
|
349
|
+
return z.NEVER;
|
|
350
|
+
}
|
|
351
|
+
return parsed.data;
|
|
352
|
+
});
|
|
353
|
+
//# sourceMappingURL=blocks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocks.js","sourceRoot":"","sources":["../src/blocks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { type BlockDefinition } from './block-definition.js';
|
|
2
|
+
/**
|
|
3
|
+
* What a pushed Block Definition is held to, wherever it is held: the api
|
|
4
|
+
* refuses with these, and a developer's own machine refuses the same way
|
|
5
|
+
* before anything leaves it.
|
|
6
|
+
*/
|
|
7
|
+
export declare const DEFINITION_LIMITS: {
|
|
8
|
+
readonly maxDefinitionNodes: 200;
|
|
9
|
+
readonly maxDefinitionDepth: 6;
|
|
10
|
+
readonly maxDefinitionSettings: 40;
|
|
11
|
+
readonly maxSettingRows: 20;
|
|
12
|
+
readonly maxDefinitionBytes: 200000;
|
|
13
|
+
};
|
|
14
|
+
export declare const DEFINITION_ISSUE: {
|
|
15
|
+
readonly parse: "SDUI_DEFINITION_PARSE";
|
|
16
|
+
readonly unknownPrimitive: "SDUI_DEFINITION_UNKNOWN_PRIMITIVE";
|
|
17
|
+
readonly unknownSettingType: "SDUI_DEFINITION_UNKNOWN_SETTING_TYPE";
|
|
18
|
+
readonly unresolvedSetting: "SDUI_DEFINITION_UNRESOLVED_SETTING";
|
|
19
|
+
readonly unresolvedToken: "SDUI_DEFINITION_UNRESOLVED_TOKEN";
|
|
20
|
+
readonly unresolvedCondition: "SDUI_DEFINITION_UNRESOLVED_CONDITION";
|
|
21
|
+
readonly itemOutsideRepeater: "SDUI_DEFINITION_ITEM_OUTSIDE_REPEATER";
|
|
22
|
+
readonly repeaterWithoutBinding: "SDUI_DEFINITION_REPEATER_WITHOUT_BINDING";
|
|
23
|
+
readonly nestedRepeater: "SDUI_DEFINITION_NESTED_REPEATER";
|
|
24
|
+
readonly limitNodes: "SDUI_LIMIT_DEFINITION_NODES";
|
|
25
|
+
readonly limitDepth: "SDUI_LIMIT_DEFINITION_DEPTH";
|
|
26
|
+
readonly limitSettings: "SDUI_LIMIT_DEFINITION_SETTINGS";
|
|
27
|
+
readonly limitSettingRows: "SDUI_LIMIT_SETTING_ROWS";
|
|
28
|
+
readonly limitBytes: "SDUI_LIMIT_DEFINITION_BYTES";
|
|
29
|
+
};
|
|
30
|
+
export type DefinitionIssueCode = (typeof DEFINITION_ISSUE)[keyof typeof DEFINITION_ISSUE];
|
|
31
|
+
export interface DefinitionIssue {
|
|
32
|
+
readonly code: DefinitionIssueCode;
|
|
33
|
+
readonly path: string;
|
|
34
|
+
readonly message: string;
|
|
35
|
+
}
|
|
36
|
+
export interface DefinitionValidation {
|
|
37
|
+
readonly issues: readonly DefinitionIssue[];
|
|
38
|
+
/** The canonical parsed definition, present only when nothing was refused. */
|
|
39
|
+
readonly definition?: BlockDefinition;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The one validator a Block Definition meets, on the developer's machine and
|
|
43
|
+
* at the api's door alike. Each step runs only once the one before it found
|
|
44
|
+
* nothing, so a refusal names one cause.
|
|
45
|
+
*/
|
|
46
|
+
export declare function definitionIssues(raw: unknown): DefinitionValidation;
|
|
47
|
+
//# sourceMappingURL=definition-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definition-validator.d.ts","sourceRoot":"","sources":["../src/definition-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,eAAe,EAIrB,MAAM,uBAAuB,CAAC;AAkB/B;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;;;;CAMpB,CAAC;AAEX,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;CAenB,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,OAAO,gBAAgB,CAAC,CAAC;AAE3F,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IAC5C,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC;CACvC;AAwSD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,oBAAoB,CAiCnE"}
|