@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":"block-definition.d.ts","sourceRoot":"","sources":["../src/block-definition.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,527 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { actionSchema } from './action.js';
|
|
3
|
+
import { BINDING_TARGET_FORMS } from './binding.js';
|
|
4
|
+
import { localeCodeSchema, localizedTextSchema } from './locale.js';
|
|
5
|
+
import { SCREEN_KINDS } from './screen.js';
|
|
6
|
+
import { SEMANTIC_TOKENS } from './tokens.js';
|
|
7
|
+
import { HEX_COLOR_PATTERN, envelopePrimitiveNodeSchema, hexColorSchema, isTokenRole, primitiveNodeSchema, settingKeySchema, tokenReferenceSchema, } from './primitives.js';
|
|
8
|
+
/** The closed set of what a merchant can set on a Composed Block. */
|
|
9
|
+
export const SETTING_TYPES = [
|
|
10
|
+
'text',
|
|
11
|
+
'toggle',
|
|
12
|
+
'select',
|
|
13
|
+
'number',
|
|
14
|
+
'color',
|
|
15
|
+
'image',
|
|
16
|
+
'action',
|
|
17
|
+
'rows',
|
|
18
|
+
'section',
|
|
19
|
+
];
|
|
20
|
+
/** The types a repeatable row may hold: the leaves, never another rows or a header. */
|
|
21
|
+
export const ROW_FIELD_TYPES = [
|
|
22
|
+
'text',
|
|
23
|
+
'toggle',
|
|
24
|
+
'select',
|
|
25
|
+
'number',
|
|
26
|
+
'color',
|
|
27
|
+
'image',
|
|
28
|
+
'action',
|
|
29
|
+
];
|
|
30
|
+
const colorTokenSchema = tokenReferenceSchema.refine((ref) => isTokenRole(ref.token) && SEMANTIC_TOKENS[ref.token].type === 'color', { message: 'expected a color token role', path: ['token'] });
|
|
31
|
+
/** A color the merchant chose: a token role by default, a custom hex when they insist. */
|
|
32
|
+
export const colorChoiceSchema = z.union([hexColorSchema, colorTokenSchema]);
|
|
33
|
+
const settingBase = { key: settingKeySchema, label: localizedTextSchema };
|
|
34
|
+
export const textSettingSchema = z.strictObject({
|
|
35
|
+
...settingBase,
|
|
36
|
+
type: z.literal('text'),
|
|
37
|
+
maxLength: z.int().min(1).max(2000).optional(),
|
|
38
|
+
default: localizedTextSchema.optional(),
|
|
39
|
+
});
|
|
40
|
+
export const toggleSettingSchema = z.strictObject({
|
|
41
|
+
...settingBase,
|
|
42
|
+
type: z.literal('toggle'),
|
|
43
|
+
default: z.boolean().optional(),
|
|
44
|
+
});
|
|
45
|
+
export const selectSettingSchema = z
|
|
46
|
+
.strictObject({
|
|
47
|
+
...settingBase,
|
|
48
|
+
type: z.literal('select'),
|
|
49
|
+
options: z
|
|
50
|
+
.array(z.strictObject({ value: z.string().min(1).max(64), label: localizedTextSchema }))
|
|
51
|
+
.min(1)
|
|
52
|
+
.max(50),
|
|
53
|
+
default: z.string().optional(),
|
|
54
|
+
})
|
|
55
|
+
.superRefine((setting, ctx) => {
|
|
56
|
+
const seen = new Set();
|
|
57
|
+
setting.options.forEach((option, index) => {
|
|
58
|
+
if (seen.has(option.value)) {
|
|
59
|
+
ctx.addIssue({
|
|
60
|
+
code: 'custom',
|
|
61
|
+
message: `duplicate option "${option.value}"`,
|
|
62
|
+
path: ['options', index, 'value'],
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
seen.add(option.value);
|
|
66
|
+
});
|
|
67
|
+
if (setting.default !== undefined && !seen.has(setting.default)) {
|
|
68
|
+
ctx.addIssue({
|
|
69
|
+
code: 'custom',
|
|
70
|
+
message: `default "${setting.default}" is not one of the options`,
|
|
71
|
+
path: ['default'],
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
export const numberSettingSchema = z
|
|
76
|
+
.strictObject({
|
|
77
|
+
...settingBase,
|
|
78
|
+
type: z.literal('number'),
|
|
79
|
+
min: z.number().finite().optional(),
|
|
80
|
+
max: z.number().finite().optional(),
|
|
81
|
+
step: z.number().positive().finite().optional(),
|
|
82
|
+
unit: z.string().min(1).max(8).optional(),
|
|
83
|
+
default: z.number().finite().optional(),
|
|
84
|
+
})
|
|
85
|
+
.superRefine((setting, ctx) => {
|
|
86
|
+
if (setting.min !== undefined && setting.max !== undefined && setting.min > setting.max) {
|
|
87
|
+
ctx.addIssue({ code: 'custom', message: 'min is above max', path: ['min'] });
|
|
88
|
+
}
|
|
89
|
+
if (setting.default !== undefined && !withinBounds(setting, setting.default)) {
|
|
90
|
+
ctx.addIssue({
|
|
91
|
+
code: 'custom',
|
|
92
|
+
message: 'default is outside min and max',
|
|
93
|
+
path: ['default'],
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
export const colorSettingSchema = z.strictObject({
|
|
98
|
+
...settingBase,
|
|
99
|
+
type: z.literal('color'),
|
|
100
|
+
default: colorChoiceSchema.optional(),
|
|
101
|
+
});
|
|
102
|
+
/** One asset out of the Shop's library; null until the merchant picks one. */
|
|
103
|
+
export const imageSettingSchema = z.strictObject({
|
|
104
|
+
...settingBase,
|
|
105
|
+
type: z.literal('image'),
|
|
106
|
+
default: z.uuid().nullable().optional(),
|
|
107
|
+
});
|
|
108
|
+
/** Where a tap goes, from the same closed action set a platform block carries. */
|
|
109
|
+
export const actionSettingSchema = z.strictObject({
|
|
110
|
+
...settingBase,
|
|
111
|
+
type: z.literal('action'),
|
|
112
|
+
default: actionSchema.optional(),
|
|
113
|
+
});
|
|
114
|
+
/** A heading in the panel, grouping the settings under it. It carries no value. */
|
|
115
|
+
export const sectionSettingSchema = z.strictObject({
|
|
116
|
+
...settingBase,
|
|
117
|
+
type: z.literal('section'),
|
|
118
|
+
});
|
|
119
|
+
export const rowFieldSchema = z.discriminatedUnion('type', [
|
|
120
|
+
textSettingSchema,
|
|
121
|
+
toggleSettingSchema,
|
|
122
|
+
selectSettingSchema,
|
|
123
|
+
numberSettingSchema,
|
|
124
|
+
colorSettingSchema,
|
|
125
|
+
imageSettingSchema,
|
|
126
|
+
actionSettingSchema,
|
|
127
|
+
]);
|
|
128
|
+
/**
|
|
129
|
+
* A repeatable group of the leaf types with a ceiling on how many rows the
|
|
130
|
+
* merchant may add. The ceiling itself is held against the platform's own
|
|
131
|
+
* maximum where every other limit is held, so raising it is one number in one
|
|
132
|
+
* place rather than a schema change.
|
|
133
|
+
*/
|
|
134
|
+
export const rowsSettingSchema = z
|
|
135
|
+
.strictObject({
|
|
136
|
+
...settingBase,
|
|
137
|
+
type: z.literal('rows'),
|
|
138
|
+
max: z.int().min(1),
|
|
139
|
+
fields: z.array(rowFieldSchema).min(1).max(20),
|
|
140
|
+
})
|
|
141
|
+
.superRefine((setting, ctx) => {
|
|
142
|
+
const seen = new Set();
|
|
143
|
+
setting.fields.forEach((field, index) => {
|
|
144
|
+
if (seen.has(field.key)) {
|
|
145
|
+
ctx.addIssue({
|
|
146
|
+
code: 'custom',
|
|
147
|
+
message: `duplicate row field "${field.key}"`,
|
|
148
|
+
path: ['fields', index, 'key'],
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
seen.add(field.key);
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
export const blockSettingSchema = z.discriminatedUnion('type', [
|
|
155
|
+
textSettingSchema,
|
|
156
|
+
toggleSettingSchema,
|
|
157
|
+
selectSettingSchema,
|
|
158
|
+
numberSettingSchema,
|
|
159
|
+
colorSettingSchema,
|
|
160
|
+
imageSettingSchema,
|
|
161
|
+
actionSettingSchema,
|
|
162
|
+
rowsSettingSchema,
|
|
163
|
+
sectionSettingSchema,
|
|
164
|
+
]);
|
|
165
|
+
const blockSettingsSchema = z.array(blockSettingSchema).superRefine((settings, ctx) => {
|
|
166
|
+
const seen = new Set();
|
|
167
|
+
settings.forEach((setting, index) => {
|
|
168
|
+
if (seen.has(setting.key)) {
|
|
169
|
+
ctx.addIssue({
|
|
170
|
+
code: 'custom',
|
|
171
|
+
message: `duplicate setting key "${setting.key}"`,
|
|
172
|
+
path: [index, 'key'],
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
seen.add(setting.key);
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
/** A header names a group; it never names a value, so nothing may read it. */
|
|
179
|
+
export function carriesValue(setting) {
|
|
180
|
+
return setting.type !== 'section';
|
|
181
|
+
}
|
|
182
|
+
/** The Binding kinds a Private Block Type may declare, beside declaring none. */
|
|
183
|
+
export const BLOCK_BINDING_KINDS = ['product', 'products', 'collection', 'collections'];
|
|
184
|
+
function targetFormsOf(forms) {
|
|
185
|
+
return z
|
|
186
|
+
.array(z.enum(forms))
|
|
187
|
+
.min(1)
|
|
188
|
+
.max(forms.length)
|
|
189
|
+
.refine((chosen) => new Set(chosen).size === chosen.length, {
|
|
190
|
+
message: 'duplicate target form',
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
function boundDeclaration(kind, forms) {
|
|
194
|
+
return z.strictObject({ kind: z.literal(kind), targetForms: targetFormsOf(forms) });
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Products and collections are never settings: the Binding slot is declared
|
|
198
|
+
* here, apart from them, with the kind and the target forms it accepts. The
|
|
199
|
+
* shape mirrors a platform block's manifest entry, so the pickers, the Screen
|
|
200
|
+
* Subject rules, the publish-time live check and the per-screen batched
|
|
201
|
+
* request work for a Shop's own block unchanged. A collections Binding names
|
|
202
|
+
* ids only, so it never accepts the subject form.
|
|
203
|
+
*/
|
|
204
|
+
export const blockBindingDeclarationSchema = z.discriminatedUnion('kind', [
|
|
205
|
+
z.strictObject({ kind: z.literal('none') }),
|
|
206
|
+
boundDeclaration('product', BINDING_TARGET_FORMS),
|
|
207
|
+
boundDeclaration('products', BINDING_TARGET_FORMS),
|
|
208
|
+
boundDeclaration('collection', BINDING_TARGET_FORMS),
|
|
209
|
+
boundDeclaration('collections', ['literal']),
|
|
210
|
+
]);
|
|
211
|
+
/** The declaration as the ladder and the palette read it; null when the block binds nothing. */
|
|
212
|
+
export function declaredBinding(declaration) {
|
|
213
|
+
return declaration.kind === 'none'
|
|
214
|
+
? null
|
|
215
|
+
: { kind: declaration.kind, targetForms: declaration.targetForms };
|
|
216
|
+
}
|
|
217
|
+
export const blockPlacementSchema = z.strictObject({
|
|
218
|
+
allowedScreenKinds: z.array(z.enum(SCREEN_KINDS)).min(1).nullable(),
|
|
219
|
+
maxPerScreen: z.int().min(1).nullable(),
|
|
220
|
+
});
|
|
221
|
+
/**
|
|
222
|
+
* The closed capability set a Code Block may declare. It is code on the phone,
|
|
223
|
+
* never document content, and it does not grow without a new contract major:
|
|
224
|
+
* the contract package pins its own list to this one.
|
|
225
|
+
*/
|
|
226
|
+
export const BLOCK_CAPABILITY_NAMES = ['addToCart', 'openCart', 'beginCheckout'];
|
|
227
|
+
const blockDefinitionBase = {
|
|
228
|
+
label: z.string().min(1).max(80),
|
|
229
|
+
settings: blockSettingsSchema,
|
|
230
|
+
binding: blockBindingDeclarationSchema,
|
|
231
|
+
placement: blockPlacementSchema,
|
|
232
|
+
};
|
|
233
|
+
/**
|
|
234
|
+
* The versioned description of a Composed Block: what the merchant sets, what
|
|
235
|
+
* the block binds, where it may stand, and the body of Primitives it draws.
|
|
236
|
+
*/
|
|
237
|
+
export const composedBlockDefinitionSchema = z.strictObject({
|
|
238
|
+
kind: z.literal('composed'),
|
|
239
|
+
...blockDefinitionBase,
|
|
240
|
+
body: primitiveNodeSchema,
|
|
241
|
+
});
|
|
242
|
+
/**
|
|
243
|
+
* The versioned description of a Code Block: the same settings, Binding and
|
|
244
|
+
* placement, the capabilities its renderer may reach for, the version of that
|
|
245
|
+
* renderer, and a height hint for the canvas card. No body ever: the code is
|
|
246
|
+
* compiled into the Shop's app and reaches phones on the code train alone.
|
|
247
|
+
*/
|
|
248
|
+
export const codeBlockDefinitionSchema = z.strictObject({
|
|
249
|
+
kind: z.literal('code'),
|
|
250
|
+
...blockDefinitionBase,
|
|
251
|
+
capabilities: z
|
|
252
|
+
.array(z.enum(BLOCK_CAPABILITY_NAMES))
|
|
253
|
+
.max(BLOCK_CAPABILITY_NAMES.length)
|
|
254
|
+
.refine((chosen) => new Set(chosen).size === chosen.length, {
|
|
255
|
+
message: 'duplicate capability',
|
|
256
|
+
}),
|
|
257
|
+
rendererVersion: z.int().min(1),
|
|
258
|
+
heightHint: z.int().min(24).max(2000).optional(),
|
|
259
|
+
});
|
|
260
|
+
export const blockDefinitionSchema = z.discriminatedUnion('kind', [
|
|
261
|
+
composedBlockDefinitionSchema,
|
|
262
|
+
codeBlockDefinitionSchema,
|
|
263
|
+
]);
|
|
264
|
+
/** A definition as a Release froze it: unlike the push schema, an unknown Primitive is kept. */
|
|
265
|
+
export const envelopeComposedBlockDefinitionSchema = composedBlockDefinitionSchema.extend({
|
|
266
|
+
body: envelopePrimitiveNodeSchema,
|
|
267
|
+
});
|
|
268
|
+
export const envelopeBlockDefinitionSchema = z.discriminatedUnion('kind', [
|
|
269
|
+
envelopeComposedBlockDefinitionSchema,
|
|
270
|
+
codeBlockDefinitionSchema,
|
|
271
|
+
]);
|
|
272
|
+
function withinBounds(setting, value) {
|
|
273
|
+
if (setting.min !== undefined && value < setting.min)
|
|
274
|
+
return false;
|
|
275
|
+
if (setting.max !== undefined && value > setting.max)
|
|
276
|
+
return false;
|
|
277
|
+
return true;
|
|
278
|
+
}
|
|
279
|
+
function isLocalizedText(value) {
|
|
280
|
+
return localizedTextSchema.safeParse(value).success;
|
|
281
|
+
}
|
|
282
|
+
const assetIdSchema = z.uuid();
|
|
283
|
+
/** An asset id as the library mints them; the one rule both the panel and the walker ask. */
|
|
284
|
+
function isAssetId(value) {
|
|
285
|
+
return assetIdSchema.safeParse(value).success;
|
|
286
|
+
}
|
|
287
|
+
/** What is wrong with one placed value, in the setting's own terms; null when it fits. */
|
|
288
|
+
function settingValueProblem(setting, value) {
|
|
289
|
+
switch (setting.type) {
|
|
290
|
+
case 'text': {
|
|
291
|
+
if (!isLocalizedText(value))
|
|
292
|
+
return 'expected a localized text';
|
|
293
|
+
if (setting.maxLength !== undefined) {
|
|
294
|
+
const tooLong = Object.values(value).some((text) => text.length > setting.maxLength);
|
|
295
|
+
if (tooLong)
|
|
296
|
+
return `text longer than ${setting.maxLength} characters`;
|
|
297
|
+
}
|
|
298
|
+
return null;
|
|
299
|
+
}
|
|
300
|
+
case 'toggle':
|
|
301
|
+
return typeof value === 'boolean' ? null : 'expected true or false';
|
|
302
|
+
case 'select':
|
|
303
|
+
return setting.options.some((option) => option.value === value)
|
|
304
|
+
? null
|
|
305
|
+
: `expected one of ${setting.options.map((option) => `"${option.value}"`).join(', ')}`;
|
|
306
|
+
case 'number': {
|
|
307
|
+
if (typeof value !== 'number' || !Number.isFinite(value))
|
|
308
|
+
return 'expected a number';
|
|
309
|
+
if (!withinBounds(setting, value)) {
|
|
310
|
+
return `expected a number between ${setting.min ?? '-∞'} and ${setting.max ?? '∞'}`;
|
|
311
|
+
}
|
|
312
|
+
return null;
|
|
313
|
+
}
|
|
314
|
+
case 'color': {
|
|
315
|
+
if (typeof value === 'string') {
|
|
316
|
+
return HEX_COLOR_PATTERN.test(value) ? null : 'expected "#rrggbb", "#rrggbbaa" or a token';
|
|
317
|
+
}
|
|
318
|
+
const parsed = tokenReferenceSchema.safeParse(value);
|
|
319
|
+
if (!parsed.success)
|
|
320
|
+
return 'expected "#rrggbb", "#rrggbbaa" or a token';
|
|
321
|
+
const role = parsed.data.token;
|
|
322
|
+
if (!isTokenRole(role))
|
|
323
|
+
return `unknown token role "${role}"`;
|
|
324
|
+
return SEMANTIC_TOKENS[role].type === 'color' ? null : `token role "${role}" is not a color`;
|
|
325
|
+
}
|
|
326
|
+
case 'image':
|
|
327
|
+
if (value === null)
|
|
328
|
+
return null;
|
|
329
|
+
return isAssetId(value) ? null : 'expected an asset id, or null for no picture';
|
|
330
|
+
case 'action':
|
|
331
|
+
return actionSchema.safeParse(value).success
|
|
332
|
+
? null
|
|
333
|
+
: 'expected an action: nothing, a screen, the cart or a link';
|
|
334
|
+
case 'rows':
|
|
335
|
+
return Array.isArray(value) ? null : 'expected a list of rows';
|
|
336
|
+
case 'section':
|
|
337
|
+
return 'a section header carries no value';
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
/** One row of a rows setting, field by field; the same rules one level down. */
|
|
341
|
+
function rowIssues(setting, index, row) {
|
|
342
|
+
const at = `${setting.key}[${index}]`;
|
|
343
|
+
if (typeof row !== 'object' || row === null || Array.isArray(row)) {
|
|
344
|
+
return [{ path: at, message: 'expected a row object' }];
|
|
345
|
+
}
|
|
346
|
+
const bag = row;
|
|
347
|
+
const issues = [];
|
|
348
|
+
const declared = new Set(setting.fields.map((field) => field.key));
|
|
349
|
+
for (const field of setting.fields) {
|
|
350
|
+
if (!(field.key in bag)) {
|
|
351
|
+
issues.push({ path: `${at}.${field.key}`, message: `missing field "${field.key}"` });
|
|
352
|
+
continue;
|
|
353
|
+
}
|
|
354
|
+
const problem = settingValueProblem(field, bag[field.key]);
|
|
355
|
+
if (problem !== null)
|
|
356
|
+
issues.push({ path: `${at}.${field.key}`, message: problem });
|
|
357
|
+
}
|
|
358
|
+
for (const key of Object.keys(bag)) {
|
|
359
|
+
if (!declared.has(key))
|
|
360
|
+
issues.push({ path: `${at}.${key}`, message: `unknown field "${key}"` });
|
|
361
|
+
}
|
|
362
|
+
return issues;
|
|
363
|
+
}
|
|
364
|
+
/** A rows value: no more rows than the setting allows, each row whole. */
|
|
365
|
+
function rowsIssues(setting, value) {
|
|
366
|
+
if (value.length > setting.max) {
|
|
367
|
+
return [
|
|
368
|
+
{
|
|
369
|
+
path: setting.key,
|
|
370
|
+
message: `"${setting.key}" holds at most ${setting.max} ${setting.max === 1 ? 'row' : 'rows'}`,
|
|
371
|
+
code: 'rows_over_max',
|
|
372
|
+
},
|
|
373
|
+
];
|
|
374
|
+
}
|
|
375
|
+
return value.flatMap((row, index) => rowIssues(setting, index, row));
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* A placed Composed Block's props held against its live definition: every
|
|
379
|
+
* setting present, nothing undeclared, each value in its setting's shape.
|
|
380
|
+
*/
|
|
381
|
+
export function composedBlockPropsIssues(settings, props) {
|
|
382
|
+
if (typeof props !== 'object' || props === null || Array.isArray(props)) {
|
|
383
|
+
return [{ path: '(root)', message: 'expected a props object' }];
|
|
384
|
+
}
|
|
385
|
+
const bag = props;
|
|
386
|
+
const issues = [];
|
|
387
|
+
const declared = new Set(settings.filter(carriesValue).map((setting) => setting.key));
|
|
388
|
+
for (const setting of settings) {
|
|
389
|
+
if (!carriesValue(setting))
|
|
390
|
+
continue;
|
|
391
|
+
if (!(setting.key in bag)) {
|
|
392
|
+
issues.push({ path: setting.key, message: `missing setting "${setting.key}"` });
|
|
393
|
+
continue;
|
|
394
|
+
}
|
|
395
|
+
const value = bag[setting.key];
|
|
396
|
+
const problem = settingValueProblem(setting, value);
|
|
397
|
+
if (problem !== null) {
|
|
398
|
+
issues.push({ path: setting.key, message: problem });
|
|
399
|
+
continue;
|
|
400
|
+
}
|
|
401
|
+
if (setting.type === 'rows')
|
|
402
|
+
issues.push(...rowsIssues(setting, value));
|
|
403
|
+
}
|
|
404
|
+
for (const key of Object.keys(bag)) {
|
|
405
|
+
if (!declared.has(key))
|
|
406
|
+
issues.push({ path: key, message: `unknown setting "${key}"` });
|
|
407
|
+
}
|
|
408
|
+
return issues;
|
|
409
|
+
}
|
|
410
|
+
/** The zod shape one setting's value takes, the same rules the walker above applies. */
|
|
411
|
+
function settingValueSchema(setting) {
|
|
412
|
+
switch (setting.type) {
|
|
413
|
+
case 'text':
|
|
414
|
+
return setting.maxLength === undefined
|
|
415
|
+
? localizedTextSchema
|
|
416
|
+
: z.record(localeCodeSchema, z.string().max(setting.maxLength));
|
|
417
|
+
case 'toggle':
|
|
418
|
+
return z.boolean();
|
|
419
|
+
case 'select':
|
|
420
|
+
return z.enum(setting.options.map((option) => option.value));
|
|
421
|
+
case 'number': {
|
|
422
|
+
let schema = z.number();
|
|
423
|
+
if (setting.min !== undefined)
|
|
424
|
+
schema = schema.min(setting.min);
|
|
425
|
+
if (setting.max !== undefined)
|
|
426
|
+
schema = schema.max(setting.max);
|
|
427
|
+
return schema;
|
|
428
|
+
}
|
|
429
|
+
case 'color':
|
|
430
|
+
return colorChoiceSchema;
|
|
431
|
+
case 'image':
|
|
432
|
+
return assetIdSchema.nullable();
|
|
433
|
+
case 'action':
|
|
434
|
+
return actionSchema;
|
|
435
|
+
case 'rows':
|
|
436
|
+
return z
|
|
437
|
+
.array(z.strictObject(Object.fromEntries(setting.fields.map((field) => [field.key, settingValueSchema(field)]))))
|
|
438
|
+
.max(setting.max);
|
|
439
|
+
case 'section':
|
|
440
|
+
return z.never();
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* The props of a placed Composed Block as a JSON Schema, generated from the
|
|
445
|
+
* same zod rules the validator applies, for an editor completing a mock or
|
|
446
|
+
* a props file by hand.
|
|
447
|
+
*/
|
|
448
|
+
export function describeComposedBlockProps(settings) {
|
|
449
|
+
const shape = Object.fromEntries(settings.filter(carriesValue).map((setting) => [setting.key, settingValueSchema(setting)]));
|
|
450
|
+
return z.toJSONSchema(z.strictObject(shape), { unrepresentable: 'any' });
|
|
451
|
+
}
|
|
452
|
+
const NO_ACTION = { type: 'none' };
|
|
453
|
+
/** One field's starting value; a row the merchant adds starts the same way a block does. */
|
|
454
|
+
function defaultSettingValue(setting) {
|
|
455
|
+
switch (setting.type) {
|
|
456
|
+
case 'text':
|
|
457
|
+
return setting.default ?? { en: '' };
|
|
458
|
+
case 'toggle':
|
|
459
|
+
return setting.default ?? false;
|
|
460
|
+
case 'select':
|
|
461
|
+
return setting.default ?? setting.options[0].value;
|
|
462
|
+
case 'number':
|
|
463
|
+
return setting.default ?? setting.min ?? 0;
|
|
464
|
+
case 'color':
|
|
465
|
+
return setting.default ?? { token: 'accent' };
|
|
466
|
+
case 'image':
|
|
467
|
+
return setting.default ?? null;
|
|
468
|
+
case 'action':
|
|
469
|
+
return setting.default ?? NO_ACTION;
|
|
470
|
+
case 'rows':
|
|
471
|
+
return [];
|
|
472
|
+
case 'section':
|
|
473
|
+
return undefined;
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
/** The props a fresh drop starts with: each setting's default, or the plainest value it accepts. */
|
|
477
|
+
export function defaultComposedBlockProps(settings) {
|
|
478
|
+
const props = {};
|
|
479
|
+
for (const setting of settings) {
|
|
480
|
+
if (!carriesValue(setting))
|
|
481
|
+
continue;
|
|
482
|
+
props[setting.key] = defaultSettingValue(setting);
|
|
483
|
+
}
|
|
484
|
+
return props;
|
|
485
|
+
}
|
|
486
|
+
/** What one fresh row of a repeatable setting holds, so the panel can add one. */
|
|
487
|
+
export function defaultRowValue(setting) {
|
|
488
|
+
const row = {};
|
|
489
|
+
for (const field of setting.fields)
|
|
490
|
+
row[field.key] = defaultSettingValue(field);
|
|
491
|
+
return row;
|
|
492
|
+
}
|
|
493
|
+
/**
|
|
494
|
+
* Every asset a placed Composed Block's props name, rows included, each with
|
|
495
|
+
* the prop path that names it — so a refusal can point the merchant at the
|
|
496
|
+
* field they still have to fill.
|
|
497
|
+
*/
|
|
498
|
+
export function composedPropAssetReferences(settings, props) {
|
|
499
|
+
if (typeof props !== 'object' || props === null || Array.isArray(props))
|
|
500
|
+
return [];
|
|
501
|
+
const bag = props;
|
|
502
|
+
const found = [];
|
|
503
|
+
const take = (value, path) => {
|
|
504
|
+
if (isAssetId(value))
|
|
505
|
+
found.push({ assetId: value, path });
|
|
506
|
+
};
|
|
507
|
+
for (const setting of settings) {
|
|
508
|
+
if (setting.type === 'image')
|
|
509
|
+
take(bag[setting.key], ['props', setting.key]);
|
|
510
|
+
if (setting.type !== 'rows')
|
|
511
|
+
continue;
|
|
512
|
+
const rows = bag[setting.key];
|
|
513
|
+
if (!Array.isArray(rows))
|
|
514
|
+
continue;
|
|
515
|
+
rows.forEach((row, index) => {
|
|
516
|
+
if (typeof row !== 'object' || row === null)
|
|
517
|
+
return;
|
|
518
|
+
for (const field of setting.fields) {
|
|
519
|
+
if (field.type !== 'image')
|
|
520
|
+
continue;
|
|
521
|
+
take(row[field.key], ['props', setting.key, index, field.key]);
|
|
522
|
+
}
|
|
523
|
+
});
|
|
524
|
+
}
|
|
525
|
+
return found;
|
|
526
|
+
}
|
|
527
|
+
//# sourceMappingURL=block-definition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block-definition.js","sourceRoot":"","sources":["../src/block-definition.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The grammar of a block type id. A platform id is one word of lowercase
|
|
3
|
+
* letters, digits and underscores. A Shop's own id is the Shop's slug, one
|
|
4
|
+
* separator, and a block name in the platform form, so it can never collide
|
|
5
|
+
* with a platform id or with another Shop's id.
|
|
6
|
+
*/
|
|
7
|
+
export declare const BLOCK_TYPE_SEPARATOR = "/";
|
|
8
|
+
export declare const BLOCK_TYPE_ID_MAX_LENGTH: number;
|
|
9
|
+
/** JSON-safe, for boundaries that validate with a pattern rather than a call. */
|
|
10
|
+
export declare const BLOCK_TYPE_ID_PATTERN = "^(?:[a-z][a-z0-9_]{0,63}|(?=[a-z0-9-]{1,64}/)[a-z0-9]+(?:-[a-z0-9]+)*/[a-z][a-z0-9_]{0,63})$";
|
|
11
|
+
export declare function isWellFormedBlockName(name: string): boolean;
|
|
12
|
+
export declare function isWellFormedShopSlug(slug: string): boolean;
|
|
13
|
+
/** The rule a malformed id breaks, in the words a parse issue carries; null when well formed. */
|
|
14
|
+
export declare function blockTypeIdProblem(type: string): string | null;
|
|
15
|
+
//# sourceMappingURL=block-type-id.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block-type-id.d.ts","sourceRoot":"","sources":["../src/block-type-id.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAIxC,eAAO,MAAM,wBAAwB,QAAgD,CAAC;AAMtF,iFAAiF;AACjF,eAAO,MAAM,qBAAqB,iGAA0C,CAAC;AAK7E,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,iGAAiG;AACjG,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkB9D"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The grammar of a block type id. A platform id is one word of lowercase
|
|
3
|
+
* letters, digits and underscores. A Shop's own id is the Shop's slug, one
|
|
4
|
+
* separator, and a block name in the platform form, so it can never collide
|
|
5
|
+
* with a platform id or with another Shop's id.
|
|
6
|
+
*/
|
|
7
|
+
export const BLOCK_TYPE_SEPARATOR = '/';
|
|
8
|
+
const SEGMENT_MAX = 64;
|
|
9
|
+
export const BLOCK_TYPE_ID_MAX_LENGTH = SEGMENT_MAX * 2 + BLOCK_TYPE_SEPARATOR.length;
|
|
10
|
+
const NAME = '[a-z][a-z0-9_]{0,63}';
|
|
11
|
+
const SLUG = '[a-z0-9]+(?:-[a-z0-9]+)*';
|
|
12
|
+
const SLUG_BOUNDED = `(?=[a-z0-9-]{1,${SEGMENT_MAX}}/)${SLUG}`;
|
|
13
|
+
/** JSON-safe, for boundaries that validate with a pattern rather than a call. */
|
|
14
|
+
export const BLOCK_TYPE_ID_PATTERN = `^(?:${NAME}|${SLUG_BOUNDED}/${NAME})$`;
|
|
15
|
+
const NAME_RE = new RegExp(`^${NAME}$`);
|
|
16
|
+
const SHOP_SLUG_RE = new RegExp(`^${SLUG}$`);
|
|
17
|
+
export function isWellFormedBlockName(name) {
|
|
18
|
+
return NAME_RE.test(name);
|
|
19
|
+
}
|
|
20
|
+
export function isWellFormedShopSlug(slug) {
|
|
21
|
+
return slug.length <= SEGMENT_MAX && SHOP_SLUG_RE.test(slug);
|
|
22
|
+
}
|
|
23
|
+
/** The rule a malformed id breaks, in the words a parse issue carries; null when well formed. */
|
|
24
|
+
export function blockTypeIdProblem(type) {
|
|
25
|
+
const parts = type.split(BLOCK_TYPE_SEPARATOR);
|
|
26
|
+
if (parts.length > 2) {
|
|
27
|
+
return `a namespaced block type id holds one "${BLOCK_TYPE_SEPARATOR}" between the Shop slug and the block name`;
|
|
28
|
+
}
|
|
29
|
+
if (parts.length === 2) {
|
|
30
|
+
const [shopSlug, name] = parts;
|
|
31
|
+
if (!isWellFormedShopSlug(shopSlug)) {
|
|
32
|
+
return `the Shop slug before "${BLOCK_TYPE_SEPARATOR}" must be lowercase letters and digits joined by single hyphens, up to ${SEGMENT_MAX} characters`;
|
|
33
|
+
}
|
|
34
|
+
if (!isWellFormedBlockName(name)) {
|
|
35
|
+
return `the block name after "${BLOCK_TYPE_SEPARATOR}" must start with a letter and hold lowercase letters, digits and underscores, up to ${SEGMENT_MAX} characters`;
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
return isWellFormedBlockName(type)
|
|
40
|
+
? null
|
|
41
|
+
: `expected a block type id: lowercase letters, digits and underscores up to ${SEGMENT_MAX} characters, or "<shop-slug>${BLOCK_TYPE_SEPARATOR}<block_name>"`;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=block-type-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block-type-id.js","sourceRoot":"","sources":["../src/block-type-id.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAExC,MAAM,WAAW,GAAG,EAAE,CAAC;AAEvB,MAAM,CAAC,MAAM,wBAAwB,GAAG,WAAW,GAAG,CAAC,GAAG,oBAAoB,CAAC,MAAM,CAAC;AAEtF,MAAM,IAAI,GAAG,sBAAsB,CAAC;AACpC,MAAM,IAAI,GAAG,0BAA0B,CAAC;AACxC,MAAM,YAAY,GAAG,kBAAkB,WAAW,MAAM,IAAI,EAAE,CAAC;AAE/D,iFAAiF;AACjF,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,IAAI,IAAI,YAAY,IAAI,IAAI,IAAI,CAAC;AAE7E,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;AACxC,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;AAE7C,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,IAAI,CAAC,MAAM,IAAI,WAAW,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/D,CAAC;AAED,iGAAiG;AACjG,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC/C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,yCAAyC,oBAAoB,4CAA4C,CAAC;IACnH,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,KAAyB,CAAC;QACnD,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpC,OAAO,yBAAyB,oBAAoB,0EAA0E,WAAW,aAAa,CAAC;QACzJ,CAAC;QACD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,OAAO,yBAAyB,oBAAoB,wFAAwF,WAAW,aAAa,CAAC;QACvK,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,qBAAqB,CAAC,IAAI,CAAC;QAChC,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,6EAA6E,WAAW,+BAA+B,oBAAoB,eAAe,CAAC;AACjK,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type BlockType } from './blocks.js';
|
|
2
|
+
export interface PlatformBlockTypeIdentity {
|
|
3
|
+
readonly kind: 'platform';
|
|
4
|
+
readonly type: BlockType;
|
|
5
|
+
}
|
|
6
|
+
/** Platform-shaped, but not in this build's catalog: a newer platform type, or a typo. */
|
|
7
|
+
export interface UnlistedBlockTypeIdentity {
|
|
8
|
+
readonly kind: 'unlisted';
|
|
9
|
+
readonly type: string;
|
|
10
|
+
}
|
|
11
|
+
export interface PrivateBlockTypeIdentity {
|
|
12
|
+
readonly kind: 'private';
|
|
13
|
+
readonly type: string;
|
|
14
|
+
readonly shopSlug: string;
|
|
15
|
+
readonly name: string;
|
|
16
|
+
}
|
|
17
|
+
export type BlockTypeIdentity = PlatformBlockTypeIdentity | UnlistedBlockTypeIdentity | PrivateBlockTypeIdentity;
|
|
18
|
+
/** Who a block type id belongs to; undefined when the id breaks the grammar. */
|
|
19
|
+
export declare function parseBlockTypeId(type: string): BlockTypeIdentity | undefined;
|
|
20
|
+
export declare function privateBlockTypeId(shopSlug: string, name: string): string;
|
|
21
|
+
//# sourceMappingURL=block-type.d.ts.map
|