@pagefront/lint-commerce 0.10.0 → 0.12.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.
Files changed (106) hide show
  1. package/README.md +49 -16
  2. package/dist/catalogue.js +4 -2
  3. package/dist/generated/release-manifest.d.ts +30 -0
  4. package/dist/generated/release-manifest.js +36 -0
  5. package/dist/generated/schema-ids.d.ts +1 -0
  6. package/dist/generated/schema-ids.js +9 -0
  7. package/dist/generated/schema-properties.d.ts +1 -0
  8. package/dist/{schema-properties.js → generated/schema-properties.js} +2 -10
  9. package/dist/generated/schemas.d.ts +1 -0
  10. package/dist/generated/schemas.js +7326 -0
  11. package/dist/index.d.ts +8 -5
  12. package/dist/index.js +8 -5
  13. package/dist/organization-catalogue.js +3 -2
  14. package/dist/releases.d.ts +12 -26
  15. package/dist/releases.js +16 -30
  16. package/dist/rules/org-e-001.js +2 -0
  17. package/dist/rules/org-e-002.js +2 -0
  18. package/dist/rules/org-e-003.js +2 -0
  19. package/dist/rules/org-e-004.d.ts +11 -0
  20. package/dist/rules/org-e-004.js +18 -0
  21. package/dist/rules/org-w-001.js +2 -0
  22. package/dist/rules/org-w-002.js +2 -0
  23. package/dist/rules/org-w-003.js +2 -0
  24. package/dist/rules/org-w-004.js +2 -0
  25. package/dist/rules/org-w-005.js +2 -0
  26. package/dist/rules/org-w-006.js +2 -0
  27. package/dist/rules/pdp-e-001.js +2 -0
  28. package/dist/rules/pdp-e-002.js +2 -0
  29. package/dist/rules/pdp-e-003.js +2 -0
  30. package/dist/rules/pdp-e-004.js +2 -0
  31. package/dist/rules/pdp-e-005.js +2 -0
  32. package/dist/rules/pdp-e-006.js +2 -0
  33. package/dist/rules/pdp-e-007.js +2 -0
  34. package/dist/rules/pdp-e-008.js +2 -0
  35. package/dist/rules/pdp-e-009.js +2 -0
  36. package/dist/rules/pdp-e-010.js +2 -0
  37. package/dist/rules/pdp-e-011.js +2 -0
  38. package/dist/rules/pdp-e-012.js +2 -0
  39. package/dist/rules/pdp-e-013.js +2 -0
  40. package/dist/rules/pdp-e-014.js +2 -0
  41. package/dist/rules/pdp-e-015.js +2 -0
  42. package/dist/rules/pdp-e-016.js +2 -0
  43. package/dist/rules/pdp-e-017.d.ts +2 -0
  44. package/dist/rules/pdp-e-017.js +80 -0
  45. package/dist/rules/pdp-e-018.d.ts +11 -0
  46. package/dist/rules/pdp-e-018.js +18 -0
  47. package/dist/rules/pdp-i-001.js +5 -2
  48. package/dist/rules/pdp-w-001.js +2 -0
  49. package/dist/rules/pdp-w-002.js +2 -0
  50. package/dist/rules/pdp-w-003.js +2 -0
  51. package/dist/rules/pdp-w-004.js +2 -0
  52. package/dist/rules/pdp-w-005.js +2 -0
  53. package/dist/rules/pdp-w-006.js +2 -0
  54. package/dist/rules/pdp-w-007.js +2 -0
  55. package/dist/rules/pdp-w-008.js +2 -0
  56. package/dist/rules/pdp-w-009.js +2 -0
  57. package/dist/rules/pdp-w-010.js +2 -0
  58. package/dist/rules/pdp-w-011.js +2 -0
  59. package/dist/rules/pdp-w-012.js +2 -0
  60. package/dist/rules/pdp-w-013.js +2 -0
  61. package/dist/rules/pdp-w-014.js +2 -0
  62. package/dist/rules/pdp-w-015.js +2 -0
  63. package/dist/rules/pdp-w-016.js +2 -0
  64. package/dist/rules/pdp-w-017.js +2 -0
  65. package/dist/rules/pdp-w-018.js +2 -0
  66. package/dist/rules/pdp-w-019.js +2 -0
  67. package/dist/rules/pdp-w-020.js +2 -0
  68. package/dist/rules/pdp-w-021.js +2 -0
  69. package/dist/rules/pdp-w-022.js +2 -0
  70. package/dist/rules/pdp-w-023.js +2 -0
  71. package/dist/rules/pdp-w-024.js +2 -0
  72. package/dist/rules/pdp-w-025.js +2 -0
  73. package/dist/rules/pdp-w-026.js +2 -0
  74. package/dist/rules/pdp-w-027.js +2 -0
  75. package/dist/rules/pdp-w-028.js +2 -0
  76. package/dist/rules/pdp-w-029.js +2 -0
  77. package/dist/rules/pdp-w-030.js +2 -0
  78. package/dist/rules/pdp-w-031.js +2 -0
  79. package/dist/rules/pdp-w-032.js +2 -0
  80. package/dist/rules/pdp-w-033.js +2 -0
  81. package/dist/rules/pdp-w-034.js +2 -0
  82. package/dist/rules/pdp-w-035.js +2 -0
  83. package/dist/rules/pdp-w-036.js +2 -0
  84. package/dist/rules/pdp-w-037.js +2 -0
  85. package/dist/rules/pdp-w-038.js +2 -0
  86. package/dist/rules/pdp-w-039.js +2 -0
  87. package/dist/rules/release-schema.d.ts +18 -7
  88. package/dist/rules/release-schema.js +55 -15
  89. package/dist/schema-registry.d.ts +42 -0
  90. package/dist/schema-registry.js +52 -0
  91. package/dist/schema-validators.d.ts +7 -8
  92. package/dist/schema-validators.js +18 -4
  93. package/dist/validate-and-lint.d.ts +28 -21
  94. package/dist/validate-and-lint.js +60 -36
  95. package/dist/validate-organization.d.ts +5 -5
  96. package/dist/validate-organization.js +8 -18
  97. package/dist/version.d.ts +1 -1
  98. package/dist/version.js +1 -1
  99. package/package.json +3 -3
  100. package/dist/legacy-schemas.d.ts +0 -9
  101. package/dist/legacy-schemas.js +0 -2446
  102. package/dist/organization-schema.d.ts +0 -10
  103. package/dist/organization-schema.js +0 -443
  104. package/dist/product-schema.d.ts +0 -9
  105. package/dist/product-schema.js +0 -2015
  106. package/dist/schema-properties.d.ts +0 -10
@@ -1,2015 +0,0 @@
1
- /**
2
- * The Pagefront Product Sheet JSON Schema (commerce/spec/product.json,
3
- * the current sheet-spec version on the release line), bundled verbatim so the published package can run
4
- * Layer 1 validation without the monorepo checkout. Generated from
5
- * the spec file; the schema drift test (test/schema.test.mjs) fails
6
- * when the two diverge. Regenerate on any schema change, in the same
7
- * change that motivates it.
8
- */
9
- export const PRODUCT_SCHEMA = {
10
- "$schema": "https://json-schema.org/draft/2020-12/schema",
11
- "$id": "https://themachineweb.org/pagefront/spec/commerce/product/v0.9.0.json",
12
- "title": "Pagefront Product Sheet 0.9.0",
13
- "description": "Formal schema for the Pagefront Product Sheet, sheet spec version 0.9.0, a member of commerce release 0.3.0. The envelope carries release in place of format_version: release names the commerce release the sheet is written against, and $schema names this sheet-spec version. A sheet carrying format_version belongs to the legacy draft line and validates against the legacy schema at .../product/v0.9.json, which is otherwise identical. History, in legacy format versions: revision of 2026-10-01 (breaking, within v0.9): configurator pricing moves from pagefront:configurator to the offer. The configurator loses basePrice, basePriceCurrency and priceFormula, its options lose priceModifier and currency, and it gains an optional @id and an exclusions[] array; configurator dimensions gain affectsPrice, inputType (select or text, for free-text dimensions) and maxLength; Offer and AggregateOffer accept pagefront:configuratorPricing, which names the configurator it prices and carries baseConfiguration, basePrice, modifiers, optional adjustments[] and a pricing completeness flag; every amount field (Offer price, AggregateOffer lowPrice and highPrice, variant price hints, promotion discountAmount, and the pricing block's basePrice, modifiers and adjustment amounts) references a shared definition, a JSON number or a plain decimal string: nonNegativeAmount for prices, bounds, base prices, price hints and discount amounts, and the signed amount for modifiers and adjustment amounts. v0.9 sheets that carried prices inside the configurator no longer validate. v0.9 was otherwise an additive release on top of v0.8: the legalEntity entry's organization now also validates in reference-stub form (@type + @id, no name) so entries can reference a Commerce Organization Sheet; the inline form and all other constraints are unchanged, and v0.8 sheets remain valid once their format_version is updated. v0.8 is an additive release on top of v0.7: it adds a pagefront:featureGroup[] array for grouped, ordered technical specifications (groups of Schema.org PropertyValue entries, with an optional pagefront:presentationValue display variant per entry), a pagefront:productHighlights[] array of ordered publisher-authored selling-point strings, and a pagefront:legalEntity[] array for role-typed legal entities behind a product (closed role enum: brand_owner, licensee, authorized_representative, importer, manufacturer — EU GPSR responsible persons and similar). gtin and gtin13 now accept a string or an array of strings (regional packaging, re-releases); category now accepts the display string, a Schema.org CategoryCode object, or a mixed array of both. The pagefront:Document role enum gains repairability_index, recall_notice, and declaration_of_conformity; the pagefront:RelatedProduct relationship enum gains service. v0.8 also adds two GPSR-driven safety fields: a pagefront:safetyWarning[] array for typed, language-scoped safety warnings (text required; optional pictogram URL and open-vocabulary hazardCategory) and a pagefront:safetyNotice[] array for structured recall/safety notices (closed noticeType enum: recall, warning; closed remedy enum: repair, replacement, refund). v0.7 sheets remain valid under v0.8 once their format_version is updated. Validates the envelope and pagefront-namespaced extensions strictly; Schema.org-typed blocks permit additional unspecified properties.",
14
- "type": "object",
15
- "required": [
16
- "release",
17
- "schema_org_version",
18
- "canonical_url",
19
- "sheet_url",
20
- "generated_at",
21
- "data"
22
- ],
23
- "properties": {
24
- "$schema": {
25
- "type": "string",
26
- "format": "uri"
27
- },
28
- "release": {
29
- "type": "string",
30
- "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)$"
31
- },
32
- "schema_org_version": {
33
- "type": "string",
34
- "pattern": "^\\d+(\\.\\d+)?$"
35
- },
36
- "canonical_url": {
37
- "type": "string",
38
- "format": "uri"
39
- },
40
- "sheet_url": {
41
- "type": "string",
42
- "format": "uri"
43
- },
44
- "generated_at": {
45
- "type": "string",
46
- "format": "date-time"
47
- },
48
- "expires_at": {
49
- "type": "string",
50
- "format": "date-time"
51
- },
52
- "data": {
53
- "$ref": "#/$defs/dataBlock"
54
- }
55
- },
56
- "additionalProperties": false,
57
- "$defs": {
58
- "dataBlock": {
59
- "type": "object",
60
- "required": [
61
- "@context",
62
- "@type",
63
- "@id",
64
- "name",
65
- "inLanguage"
66
- ],
67
- "properties": {
68
- "@context": {
69
- "oneOf": [
70
- {
71
- "const": "https://schema.org"
72
- },
73
- {
74
- "type": "array",
75
- "items": {
76
- "oneOf": [
77
- {
78
- "type": "string",
79
- "format": "uri"
80
- },
81
- {
82
- "type": "object"
83
- }
84
- ]
85
- },
86
- "minItems": 1
87
- }
88
- ]
89
- },
90
- "@type": {
91
- "type": "string"
92
- },
93
- "@id": {
94
- "type": "string",
95
- "format": "uri"
96
- },
97
- "url": {
98
- "type": "string",
99
- "format": "uri"
100
- },
101
- "name": {
102
- "type": "string",
103
- "minLength": 1
104
- },
105
- "inLanguage": {
106
- "type": "string"
107
- },
108
- "sku": {
109
- "type": "string"
110
- },
111
- "gtin13": {
112
- "$ref": "#/$defs/gtin13Value"
113
- },
114
- "gtin": {
115
- "$ref": "#/$defs/gtinValue"
116
- },
117
- "mpn": {
118
- "type": "string"
119
- },
120
- "productID": {
121
- "type": "string"
122
- },
123
- "productGroupID": {
124
- "type": "string"
125
- },
126
- "variesBy": {
127
- "type": "array",
128
- "items": {
129
- "type": "string"
130
- }
131
- },
132
- "hasVariant": {
133
- "type": "array",
134
- "items": {
135
- "$ref": "#/$defs/variantEntry"
136
- }
137
- },
138
- "brand": {
139
- "type": "object",
140
- "properties": {
141
- "pagefront:sheetUrl": {
142
- "type": "string",
143
- "format": "uri"
144
- }
145
- }
146
- },
147
- "description": {
148
- "type": "string"
149
- },
150
- "category": {
151
- "oneOf": [
152
- {
153
- "type": "string"
154
- },
155
- {
156
- "$ref": "#/$defs/categoryCode"
157
- },
158
- {
159
- "type": "array",
160
- "items": {
161
- "oneOf": [
162
- {
163
- "type": "string"
164
- },
165
- {
166
- "$ref": "#/$defs/categoryCode"
167
- }
168
- ]
169
- },
170
- "minItems": 1
171
- }
172
- ]
173
- },
174
- "color": {
175
- "type": "string"
176
- },
177
- "material": {
178
- "type": "string"
179
- },
180
- "weight": {
181
- "type": "object"
182
- },
183
- "height": {
184
- "type": "object"
185
- },
186
- "width": {
187
- "type": "object"
188
- },
189
- "depth": {
190
- "type": "object"
191
- },
192
- "countryOfOrigin": {
193
- "type": "string",
194
- "pattern": "^[A-Z]{2}$"
195
- },
196
- "image": {
197
- "type": "array",
198
- "items": {
199
- "$ref": "#/$defs/imageObject"
200
- }
201
- },
202
- "video": {
203
- "type": "array",
204
- "items": {
205
- "$ref": "#/$defs/videoObject"
206
- }
207
- },
208
- "additionalProperty": {
209
- "type": "array"
210
- },
211
- "hasCertification": {
212
- "type": "array",
213
- "items": {
214
- "$ref": "#/$defs/certification"
215
- }
216
- },
217
- "manufacturer": {
218
- "type": "object"
219
- },
220
- "offers": {
221
- "type": "array",
222
- "items": {
223
- "oneOf": [
224
- {
225
- "$ref": "#/$defs/offer"
226
- },
227
- {
228
- "$ref": "#/$defs/aggregateOffer"
229
- }
230
- ]
231
- },
232
- "minItems": 1
233
- },
234
- "aggregateRating": {
235
- "type": "object"
236
- },
237
- "review": {
238
- "type": "array"
239
- },
240
- "isVariantOf": {
241
- "type": "object"
242
- },
243
- "isRelatedTo": {
244
- "type": "array"
245
- },
246
- "isSimilarTo": {
247
- "type": "array"
248
- },
249
- "isPartOf": {
250
- "oneOf": [
251
- {
252
- "type": "object"
253
- },
254
- {
255
- "type": "array"
256
- }
257
- ]
258
- },
259
- "hasPart": {
260
- "oneOf": [
261
- {
262
- "type": "object"
263
- },
264
- {
265
- "type": "array"
266
- }
267
- ]
268
- },
269
- "question": {
270
- "type": "array",
271
- "items": {
272
- "$ref": "#/$defs/questionObject"
273
- }
274
- },
275
- "pagefront:document": {
276
- "type": "array",
277
- "items": {
278
- "$ref": "#/$defs/documentObject"
279
- }
280
- },
281
- "pagefront:relatedProduct": {
282
- "type": "array",
283
- "items": {
284
- "$ref": "#/$defs/relatedProductObject"
285
- }
286
- },
287
- "pagefront:featureGroup": {
288
- "type": "array",
289
- "items": {
290
- "$ref": "#/$defs/featureGroup"
291
- },
292
- "minItems": 1
293
- },
294
- "pagefront:productHighlights": {
295
- "type": "array",
296
- "items": {
297
- "type": "string"
298
- },
299
- "minItems": 1
300
- },
301
- "pagefront:legalEntity": {
302
- "type": "array",
303
- "items": {
304
- "$ref": "#/$defs/legalEntity"
305
- },
306
- "minItems": 1
307
- },
308
- "pagefront:safetyWarning": {
309
- "type": "array",
310
- "items": {
311
- "$ref": "#/$defs/safetyWarning"
312
- },
313
- "minItems": 1
314
- },
315
- "pagefront:safetyNotice": {
316
- "type": "array",
317
- "items": {
318
- "$ref": "#/$defs/safetyNotice"
319
- },
320
- "minItems": 1
321
- },
322
- "pagefront:sizeChart": {
323
- "$ref": "#/$defs/sizeChart"
324
- },
325
- "pagefront:sizeRecommendation": {
326
- "$ref": "#/$defs/sizeRecommendation"
327
- },
328
- "pagefront:materialComposition": {
329
- "type": "array",
330
- "items": {
331
- "$ref": "#/$defs/material"
332
- }
333
- },
334
- "pagefront:fabricComposition": {
335
- "type": "array",
336
- "items": {
337
- "$ref": "#/$defs/material"
338
- }
339
- },
340
- "pagefront:construction": {
341
- "$ref": "#/$defs/construction"
342
- },
343
- "pagefront:manufacturingChain": {
344
- "type": "array",
345
- "items": {
346
- "$ref": "#/$defs/manufacturingStage"
347
- }
348
- },
349
- "pagefront:gemstone": {
350
- "$ref": "#/$defs/gemstone"
351
- },
352
- "pagefront:configurator": {
353
- "$ref": "#/$defs/configurator"
354
- },
355
- "pagefront:madeToOrderTerms": {
356
- "$ref": "#/$defs/madeToOrderTerms"
357
- },
358
- "pagefront:manufacturerWarranty": {
359
- "type": "object"
360
- },
361
- "pagefront:careInstructions": {
362
- "type": "array",
363
- "items": {
364
- "type": "string"
365
- }
366
- },
367
- "pagefront:availableLanguages": {
368
- "type": "array",
369
- "items": {
370
- "type": "object",
371
- "required": [
372
- "lang",
373
- "url"
374
- ],
375
- "properties": {
376
- "lang": {
377
- "type": "string"
378
- },
379
- "url": {
380
- "type": "string",
381
- "format": "uri"
382
- }
383
- },
384
- "additionalProperties": false
385
- }
386
- }
387
- },
388
- "if": {
389
- "properties": {
390
- "@type": {
391
- "const": "ProductGroup"
392
- }
393
- },
394
- "required": [
395
- "@type"
396
- ]
397
- },
398
- "then": {
399
- "required": [
400
- "productGroupID"
401
- ]
402
- },
403
- "else": {
404
- "required": [
405
- "url"
406
- ],
407
- "anyOf": [
408
- {
409
- "required": [
410
- "sku"
411
- ]
412
- },
413
- {
414
- "required": [
415
- "gtin13"
416
- ]
417
- },
418
- {
419
- "required": [
420
- "gtin"
421
- ]
422
- },
423
- {
424
- "required": [
425
- "mpn"
426
- ]
427
- },
428
- {
429
- "required": [
430
- "productID"
431
- ]
432
- }
433
- ]
434
- },
435
- "additionalProperties": true
436
- },
437
- "amount": {
438
- "description": "A currency amount: a JSON number, or a decimal string with a dot as decimal point, no thousands separators and no currency symbol. A Sheet uses one of the two carriers for all its amounts.",
439
- "oneOf": [
440
- {
441
- "type": "number"
442
- },
443
- {
444
- "type": "string",
445
- "pattern": "^-?\\d+(\\.\\d+)?$"
446
- }
447
- ]
448
- },
449
- "nonNegativeAmount": {
450
- "description": "An amount that is zero or positive: the same two carriers as amount, with no leading minus. Used for prices, price bounds, base prices, price hints and discount amounts; only modifiers and adjustment amounts are signed.",
451
- "oneOf": [
452
- {
453
- "type": "number",
454
- "minimum": 0
455
- },
456
- {
457
- "type": "string",
458
- "pattern": "^\\d+(\\.\\d+)?$"
459
- }
460
- ]
461
- },
462
- "variantEntry": {
463
- "type": "object",
464
- "required": [
465
- "@type"
466
- ],
467
- "properties": {
468
- "@type": {
469
- "type": "string"
470
- },
471
- "@id": {
472
- "type": "string",
473
- "format": "uri"
474
- },
475
- "url": {
476
- "type": "string",
477
- "format": "uri"
478
- },
479
- "sheet_url": {
480
- "type": "string",
481
- "format": "uri"
482
- },
483
- "name": {
484
- "type": "string"
485
- },
486
- "sku": {
487
- "type": "string"
488
- },
489
- "gtin13": {
490
- "$ref": "#/$defs/gtin13Value"
491
- },
492
- "gtin": {
493
- "$ref": "#/$defs/gtinValue"
494
- },
495
- "mpn": {
496
- "type": "string"
497
- },
498
- "productID": {
499
- "type": "string"
500
- },
501
- "color": {
502
- "type": "string"
503
- },
504
- "size": {
505
- "type": "string"
506
- },
507
- "material": {
508
- "type": "string"
509
- },
510
- "price": {
511
- "$ref": "#/$defs/nonNegativeAmount"
512
- },
513
- "image": {
514
- "type": "string",
515
- "format": "uri"
516
- },
517
- "additionalProperty": {
518
- "type": "array"
519
- }
520
- },
521
- "additionalProperties": true
522
- },
523
- "imageObject": {
524
- "type": "object",
525
- "required": [
526
- "@type",
527
- "url"
528
- ],
529
- "properties": {
530
- "@type": {
531
- "const": "ImageObject"
532
- },
533
- "url": {
534
- "type": "string",
535
- "format": "uri"
536
- },
537
- "caption": {
538
- "type": "string"
539
- },
540
- "additionalProperty": {
541
- "type": "array",
542
- "items": {
543
- "type": "object",
544
- "properties": {
545
- "@type": {
546
- "const": "PropertyValue"
547
- },
548
- "name": {
549
- "type": "string"
550
- },
551
- "value": {
552
- "type": "string"
553
- }
554
- },
555
- "allOf": [
556
- {
557
- "if": {
558
- "properties": {
559
- "name": {
560
- "const": "role"
561
- }
562
- },
563
- "required": [
564
- "name"
565
- ]
566
- },
567
- "then": {
568
- "properties": {
569
- "value": {
570
- "enum": [
571
- "hero",
572
- "packshot",
573
- "lifestyle",
574
- "detail",
575
- "flatlay",
576
- "swatch",
577
- "size_chart",
578
- "context"
579
- ]
580
- }
581
- }
582
- }
583
- }
584
- ]
585
- }
586
- }
587
- },
588
- "additionalProperties": true
589
- },
590
- "videoObject": {
591
- "type": "object",
592
- "required": [
593
- "@type"
594
- ],
595
- "properties": {
596
- "@type": {
597
- "const": "VideoObject"
598
- },
599
- "url": {
600
- "type": "string",
601
- "format": "uri"
602
- },
603
- "contentUrl": {
604
- "type": "string",
605
- "format": "uri"
606
- },
607
- "embedUrl": {
608
- "type": "string",
609
- "format": "uri"
610
- },
611
- "thumbnailUrl": {
612
- "type": "string",
613
- "format": "uri"
614
- },
615
- "duration": {
616
- "type": "string",
617
- "pattern": "^P(?:\\d+Y)?(?:\\d+M)?(?:\\d+D)?(?:T(?:\\d+H)?(?:\\d+M)?(?:\\d+(?:\\.\\d+)?S)?)?$"
618
- },
619
- "uploadDate": {
620
- "type": "string"
621
- },
622
- "caption": {
623
- "type": "string"
624
- },
625
- "transcript": {
626
- "type": "string"
627
- },
628
- "description": {
629
- "type": "string"
630
- },
631
- "name": {
632
- "type": "string"
633
- },
634
- "additionalProperty": {
635
- "type": "array",
636
- "items": {
637
- "type": "object",
638
- "properties": {
639
- "@type": {
640
- "const": "PropertyValue"
641
- },
642
- "name": {
643
- "type": "string"
644
- },
645
- "value": {
646
- "type": "string"
647
- }
648
- },
649
- "allOf": [
650
- {
651
- "if": {
652
- "properties": {
653
- "name": {
654
- "const": "role"
655
- }
656
- },
657
- "required": [
658
- "name"
659
- ]
660
- },
661
- "then": {
662
- "properties": {
663
- "value": {
664
- "enum": [
665
- "overview",
666
- "tutorial",
667
- "lifestyle",
668
- "construction",
669
- "demonstration",
670
- "comparison",
671
- "unboxing",
672
- "spin"
673
- ]
674
- }
675
- }
676
- }
677
- }
678
- ]
679
- }
680
- }
681
- },
682
- "anyOf": [
683
- {
684
- "required": [
685
- "url"
686
- ]
687
- },
688
- {
689
- "required": [
690
- "contentUrl"
691
- ]
692
- },
693
- {
694
- "required": [
695
- "embedUrl"
696
- ]
697
- }
698
- ],
699
- "additionalProperties": true
700
- },
701
- "questionObject": {
702
- "type": "object",
703
- "required": [
704
- "@type",
705
- "name",
706
- "acceptedAnswer"
707
- ],
708
- "properties": {
709
- "@type": {
710
- "const": "Question"
711
- },
712
- "name": {
713
- "type": "string",
714
- "minLength": 1
715
- },
716
- "acceptedAnswer": {
717
- "type": "object",
718
- "required": [
719
- "@type",
720
- "text"
721
- ],
722
- "properties": {
723
- "@type": {
724
- "const": "Answer"
725
- },
726
- "text": {
727
- "type": "string",
728
- "minLength": 1
729
- }
730
- },
731
- "additionalProperties": true
732
- },
733
- "suggestedAnswer": {
734
- "type": "array",
735
- "items": {
736
- "type": "object",
737
- "required": [
738
- "@type",
739
- "text"
740
- ],
741
- "properties": {
742
- "@type": {
743
- "const": "Answer"
744
- },
745
- "text": {
746
- "type": "string",
747
- "minLength": 1
748
- }
749
- },
750
- "additionalProperties": true
751
- }
752
- }
753
- },
754
- "additionalProperties": true
755
- },
756
- "documentObject": {
757
- "type": "object",
758
- "required": [
759
- "@type",
760
- "url",
761
- "role"
762
- ],
763
- "properties": {
764
- "@type": {
765
- "const": "pagefront:Document"
766
- },
767
- "url": {
768
- "type": "string",
769
- "format": "uri"
770
- },
771
- "role": {
772
- "type": "string",
773
- "enum": [
774
- "manual",
775
- "assembly",
776
- "care_guide",
777
- "spec_sheet",
778
- "compatibility",
779
- "warranty",
780
- "certificate",
781
- "environmental_declaration",
782
- "audit_report",
783
- "lab_test",
784
- "safety_data_sheet",
785
- "installation_guide",
786
- "user_guide",
787
- "quick_start",
788
- "brochure",
789
- "repairability_index",
790
- "recall_notice",
791
- "declaration_of_conformity"
792
- ]
793
- },
794
- "name": {
795
- "type": "string"
796
- },
797
- "inLanguage": {
798
- "type": "string"
799
- },
800
- "description": {
801
- "type": "string"
802
- },
803
- "encodingFormat": {
804
- "type": "string"
805
- }
806
- },
807
- "additionalProperties": false
808
- },
809
- "relatedProductObject": {
810
- "type": "object",
811
- "required": [
812
- "@type",
813
- "relationship"
814
- ],
815
- "properties": {
816
- "@type": {
817
- "const": "pagefront:RelatedProduct"
818
- },
819
- "relationship": {
820
- "type": "string",
821
- "enum": [
822
- "accessory",
823
- "consumable",
824
- "required_part",
825
- "spare_part",
826
- "often_bought_with",
827
- "recommended_with",
828
- "replaces",
829
- "replaced_by",
830
- "bundle_component",
831
- "compatible_with",
832
- "service"
833
- ]
834
- },
835
- "@id": {
836
- "type": "string",
837
- "format": "uri"
838
- },
839
- "sku": {
840
- "type": "string"
841
- },
842
- "gtin": {
843
- "type": "string"
844
- },
845
- "gtin13": {
846
- "type": "string",
847
- "pattern": "^[0-9]{13}$"
848
- },
849
- "mpn": {
850
- "type": "string"
851
- },
852
- "name": {
853
- "type": "string"
854
- },
855
- "url": {
856
- "type": "string",
857
- "format": "uri"
858
- },
859
- "image": {
860
- "type": "string",
861
- "format": "uri"
862
- }
863
- },
864
- "anyOf": [
865
- {
866
- "required": [
867
- "@id"
868
- ]
869
- },
870
- {
871
- "required": [
872
- "sku"
873
- ]
874
- },
875
- {
876
- "required": [
877
- "gtin"
878
- ]
879
- },
880
- {
881
- "required": [
882
- "gtin13"
883
- ]
884
- },
885
- {
886
- "required": [
887
- "mpn"
888
- ]
889
- }
890
- ],
891
- "additionalProperties": false
892
- },
893
- "gtinValue": {
894
- "oneOf": [
895
- {
896
- "type": "string"
897
- },
898
- {
899
- "type": "array",
900
- "items": {
901
- "type": "string"
902
- },
903
- "minItems": 1
904
- }
905
- ]
906
- },
907
- "gtin13Value": {
908
- "oneOf": [
909
- {
910
- "type": "string",
911
- "pattern": "^[0-9]{13}$"
912
- },
913
- {
914
- "type": "array",
915
- "items": {
916
- "type": "string",
917
- "pattern": "^[0-9]{13}$"
918
- },
919
- "minItems": 1
920
- }
921
- ]
922
- },
923
- "categoryCode": {
924
- "type": "object",
925
- "required": [
926
- "@type",
927
- "codeValue"
928
- ],
929
- "properties": {
930
- "@type": {
931
- "const": "CategoryCode"
932
- },
933
- "codeValue": {
934
- "type": "string",
935
- "minLength": 1
936
- },
937
- "inCodeSet": {
938
- "oneOf": [
939
- {
940
- "type": "string",
941
- "format": "uri"
942
- },
943
- {
944
- "type": "object"
945
- }
946
- ]
947
- },
948
- "name": {
949
- "type": "string"
950
- }
951
- },
952
- "additionalProperties": true
953
- },
954
- "featureGroup": {
955
- "type": "object",
956
- "required": [
957
- "@type",
958
- "name",
959
- "feature"
960
- ],
961
- "properties": {
962
- "@type": {
963
- "const": "pagefront:FeatureGroup"
964
- },
965
- "name": {
966
- "type": "string",
967
- "minLength": 1
968
- },
969
- "sortOrder": {
970
- "type": "integer"
971
- },
972
- "feature": {
973
- "type": "array",
974
- "items": {
975
- "$ref": "#/$defs/featureEntry"
976
- },
977
- "minItems": 1
978
- }
979
- },
980
- "additionalProperties": false
981
- },
982
- "featureEntry": {
983
- "type": "object",
984
- "required": [
985
- "@type",
986
- "name",
987
- "value"
988
- ],
989
- "properties": {
990
- "@type": {
991
- "const": "PropertyValue"
992
- },
993
- "propertyID": {
994
- "type": "string"
995
- },
996
- "name": {
997
- "type": "string",
998
- "minLength": 1
999
- },
1000
- "value": {
1001
- "anyOf": [
1002
- {
1003
- "type": "string"
1004
- },
1005
- {
1006
- "type": "number"
1007
- },
1008
- {
1009
- "type": "boolean"
1010
- }
1011
- ]
1012
- },
1013
- "unitCode": {
1014
- "type": "string"
1015
- },
1016
- "description": {
1017
- "type": "string"
1018
- },
1019
- "pagefront:presentationValue": {
1020
- "type": "string"
1021
- }
1022
- },
1023
- "additionalProperties": true
1024
- },
1025
- "legalEntity": {
1026
- "type": "object",
1027
- "required": [
1028
- "@type",
1029
- "role",
1030
- "organization"
1031
- ],
1032
- "properties": {
1033
- "@type": {
1034
- "const": "pagefront:LegalEntity"
1035
- },
1036
- "role": {
1037
- "type": "string",
1038
- "enum": [
1039
- "brand_owner",
1040
- "licensee",
1041
- "authorized_representative",
1042
- "importer",
1043
- "manufacturer"
1044
- ]
1045
- },
1046
- "organization": {
1047
- "type": "object",
1048
- "required": [
1049
- "@type"
1050
- ],
1051
- "anyOf": [
1052
- {
1053
- "required": [
1054
- "name"
1055
- ]
1056
- },
1057
- {
1058
- "required": [
1059
- "@id"
1060
- ]
1061
- }
1062
- ],
1063
- "properties": {
1064
- "@type": {
1065
- "const": "Organization"
1066
- },
1067
- "@id": {
1068
- "type": "string",
1069
- "format": "uri"
1070
- },
1071
- "name": {
1072
- "type": "string",
1073
- "minLength": 1
1074
- },
1075
- "address": {
1076
- "type": "object"
1077
- },
1078
- "url": {
1079
- "type": "string",
1080
- "format": "uri"
1081
- },
1082
- "email": {
1083
- "type": "string",
1084
- "format": "email"
1085
- },
1086
- "pagefront:sheetUrl": {
1087
- "type": "string",
1088
- "format": "uri"
1089
- }
1090
- },
1091
- "additionalProperties": true
1092
- }
1093
- },
1094
- "additionalProperties": false
1095
- },
1096
- "safetyWarning": {
1097
- "type": "object",
1098
- "required": [
1099
- "@type",
1100
- "text"
1101
- ],
1102
- "properties": {
1103
- "@type": {
1104
- "const": "pagefront:SafetyWarning"
1105
- },
1106
- "text": {
1107
- "type": "string",
1108
- "minLength": 1
1109
- },
1110
- "pictogram": {
1111
- "type": "string",
1112
- "format": "uri"
1113
- },
1114
- "hazardCategory": {
1115
- "type": "string"
1116
- }
1117
- },
1118
- "additionalProperties": false
1119
- },
1120
- "safetyNotice": {
1121
- "type": "object",
1122
- "required": [
1123
- "@type",
1124
- "noticeType"
1125
- ],
1126
- "properties": {
1127
- "@type": {
1128
- "const": "pagefront:SafetyNotice"
1129
- },
1130
- "noticeType": {
1131
- "type": "string",
1132
- "enum": [
1133
- "recall",
1134
- "warning"
1135
- ]
1136
- },
1137
- "hazard": {
1138
- "type": "string"
1139
- },
1140
- "remedy": {
1141
- "type": "string",
1142
- "enum": [
1143
- "repair",
1144
- "replacement",
1145
- "refund"
1146
- ]
1147
- },
1148
- "description": {
1149
- "type": "string"
1150
- },
1151
- "reference": {
1152
- "type": "string",
1153
- "format": "uri"
1154
- },
1155
- "datePublished": {
1156
- "type": "string",
1157
- "format": "date"
1158
- },
1159
- "url": {
1160
- "type": "string",
1161
- "format": "uri"
1162
- }
1163
- },
1164
- "additionalProperties": false
1165
- },
1166
- "certification": {
1167
- "type": "object",
1168
- "required": [
1169
- "@type",
1170
- "name"
1171
- ],
1172
- "properties": {
1173
- "@type": {
1174
- "const": "Certification"
1175
- },
1176
- "name": {
1177
- "type": "string"
1178
- },
1179
- "issuedBy": {
1180
- "type": "object"
1181
- },
1182
- "about": {
1183
- "type": "string"
1184
- },
1185
- "additionalProperty": {
1186
- "type": "array"
1187
- }
1188
- },
1189
- "additionalProperties": true
1190
- },
1191
- "offer": {
1192
- "type": "object",
1193
- "required": [
1194
- "@type"
1195
- ],
1196
- "properties": {
1197
- "@type": {
1198
- "const": "Offer"
1199
- },
1200
- "@id": {
1201
- "type": "string"
1202
- },
1203
- "itemOffered": {
1204
- "type": "object"
1205
- },
1206
- "price": {
1207
- "$ref": "#/$defs/nonNegativeAmount"
1208
- },
1209
- "priceCurrency": {
1210
- "type": "string",
1211
- "pattern": "^[A-Z]{3}$"
1212
- },
1213
- "priceSpecification": {
1214
- "oneOf": [
1215
- {
1216
- "type": "object"
1217
- },
1218
- {
1219
- "type": "array",
1220
- "items": {
1221
- "type": "object"
1222
- }
1223
- }
1224
- ]
1225
- },
1226
- "availability": {
1227
- "type": "string",
1228
- "pattern": "^https?://schema\\.org/(InStock|OutOfStock|PreOrder|BackOrder|InStoreOnly|LimitedAvailability|MadeToOrder|OnlineOnly|SoldOut|Discontinued|Reserved)$"
1229
- },
1230
- "itemCondition": {
1231
- "type": "string",
1232
- "pattern": "^https?://schema\\.org/(NewCondition|UsedCondition|RefurbishedCondition|DamagedCondition)$"
1233
- },
1234
- "seller": {
1235
- "type": "object",
1236
- "properties": {
1237
- "pagefront:sheetUrl": {
1238
- "type": "string",
1239
- "format": "uri"
1240
- }
1241
- }
1242
- },
1243
- "shippingDetails": {
1244
- "oneOf": [
1245
- {
1246
- "type": "object"
1247
- },
1248
- {
1249
- "type": "array",
1250
- "items": {
1251
- "type": "object"
1252
- }
1253
- }
1254
- ]
1255
- },
1256
- "hasMerchantReturnPolicy": {
1257
- "type": "object"
1258
- },
1259
- "warranty": {
1260
- "type": "object"
1261
- },
1262
- "areaServed": {},
1263
- "eligibleRegion": {
1264
- "type": "array"
1265
- },
1266
- "acceptedPaymentMethod": {
1267
- "type": "array"
1268
- },
1269
- "pagefront:estimatedDelivery": {
1270
- "$ref": "#/$defs/deliveryEstimate"
1271
- },
1272
- "pagefront:promotions": {
1273
- "type": "array",
1274
- "items": {
1275
- "$ref": "#/$defs/promotion"
1276
- }
1277
- },
1278
- "pagefront:priceOnRequest": {
1279
- "$ref": "#/$defs/priceOnRequest"
1280
- },
1281
- "pagefront:configuratorPricing": {
1282
- "$ref": "#/$defs/configuratorPricing"
1283
- }
1284
- },
1285
- "anyOf": [
1286
- {
1287
- "required": [
1288
- "price",
1289
- "priceCurrency"
1290
- ]
1291
- },
1292
- {
1293
- "required": [
1294
- "priceSpecification"
1295
- ]
1296
- },
1297
- {
1298
- "required": [
1299
- "pagefront:priceOnRequest"
1300
- ]
1301
- }
1302
- ],
1303
- "dependentRequired": {
1304
- "pagefront:configuratorPricing": [
1305
- "price",
1306
- "priceCurrency"
1307
- ]
1308
- },
1309
- "additionalProperties": true
1310
- },
1311
- "aggregateOffer": {
1312
- "type": "object",
1313
- "required": [
1314
- "@type",
1315
- "lowPrice",
1316
- "highPrice",
1317
- "priceCurrency"
1318
- ],
1319
- "properties": {
1320
- "@type": {
1321
- "const": "AggregateOffer"
1322
- },
1323
- "@id": {
1324
- "type": "string"
1325
- },
1326
- "lowPrice": {
1327
- "$ref": "#/$defs/nonNegativeAmount"
1328
- },
1329
- "highPrice": {
1330
- "$ref": "#/$defs/nonNegativeAmount"
1331
- },
1332
- "priceCurrency": {
1333
- "type": "string",
1334
- "pattern": "^[A-Z]{3}$"
1335
- },
1336
- "offerCount": {
1337
- "type": "integer"
1338
- },
1339
- "availability": {
1340
- "type": "string",
1341
- "pattern": "^https?://schema\\.org/(InStock|OutOfStock|PreOrder|BackOrder|InStoreOnly|LimitedAvailability|MadeToOrder|OnlineOnly|SoldOut|Discontinued|Reserved)$"
1342
- },
1343
- "itemCondition": {
1344
- "type": "string",
1345
- "pattern": "^https?://schema\\.org/(NewCondition|UsedCondition|RefurbishedCondition|DamagedCondition)$"
1346
- },
1347
- "eligibleRegion": {
1348
- "type": "array"
1349
- },
1350
- "areaServed": {},
1351
- "validFrom": {
1352
- "type": "string"
1353
- },
1354
- "validThrough": {
1355
- "type": "string"
1356
- },
1357
- "seller": {
1358
- "type": "object"
1359
- },
1360
- "pagefront:configuratorPricing": {
1361
- "$ref": "#/$defs/configuratorPricing"
1362
- }
1363
- },
1364
- "additionalProperties": true
1365
- },
1366
- "priceOnRequest": {
1367
- "type": "object",
1368
- "required": [
1369
- "@type",
1370
- "method"
1371
- ],
1372
- "properties": {
1373
- "@type": {
1374
- "const": "pagefront:PriceOnRequest"
1375
- },
1376
- "method": {
1377
- "type": "string",
1378
- "enum": [
1379
- "authorized_retailer",
1380
- "dealer_network",
1381
- "quote_form",
1382
- "email",
1383
- "phone",
1384
- "unspecified"
1385
- ]
1386
- },
1387
- "contactUrl": {
1388
- "type": "string",
1389
- "format": "uri"
1390
- },
1391
- "contactEmail": {
1392
- "type": "string",
1393
- "format": "email"
1394
- },
1395
- "contactPhone": {
1396
- "type": "string"
1397
- },
1398
- "note": {
1399
- "type": "string"
1400
- }
1401
- },
1402
- "additionalProperties": false
1403
- },
1404
- "sizeChart": {
1405
- "type": "object",
1406
- "required": [
1407
- "@type",
1408
- "unitCode",
1409
- "sizes",
1410
- "measurements"
1411
- ],
1412
- "properties": {
1413
- "@type": {
1414
- "const": "pagefront:SizeChart"
1415
- },
1416
- "unitCode": {
1417
- "type": "string"
1418
- },
1419
- "sizes": {
1420
- "type": "array",
1421
- "items": {
1422
- "type": "string"
1423
- },
1424
- "minItems": 1
1425
- },
1426
- "measurements": {
1427
- "type": "array",
1428
- "items": {
1429
- "$ref": "#/$defs/measurement"
1430
- },
1431
- "minItems": 1
1432
- },
1433
- "modelReferences": {
1434
- "type": "array",
1435
- "items": {
1436
- "$ref": "#/$defs/modelReference"
1437
- }
1438
- }
1439
- },
1440
- "additionalProperties": false
1441
- },
1442
- "measurement": {
1443
- "type": "object",
1444
- "required": [
1445
- "@type",
1446
- "name",
1447
- "values"
1448
- ],
1449
- "properties": {
1450
- "@type": {
1451
- "const": "pagefront:Measurement"
1452
- },
1453
- "name": {
1454
- "type": "string"
1455
- },
1456
- "values": {
1457
- "type": "object",
1458
- "additionalProperties": {
1459
- "type": "number"
1460
- }
1461
- }
1462
- },
1463
- "additionalProperties": false
1464
- },
1465
- "modelReference": {
1466
- "type": "object",
1467
- "required": [
1468
- "@type",
1469
- "name"
1470
- ],
1471
- "properties": {
1472
- "@type": {
1473
- "const": "pagefront:ModelReference"
1474
- },
1475
- "name": {
1476
- "type": "string"
1477
- },
1478
- "heightCm": {
1479
- "type": "number",
1480
- "minimum": 0
1481
- },
1482
- "wearsSize": {
1483
- "type": "string"
1484
- }
1485
- },
1486
- "additionalProperties": false
1487
- },
1488
- "sizeRecommendation": {
1489
- "type": "object",
1490
- "required": [
1491
- "@type"
1492
- ],
1493
- "properties": {
1494
- "@type": {
1495
- "const": "pagefront:SizeRecommendation"
1496
- },
1497
- "fitProfile": {
1498
- "type": "string",
1499
- "enum": [
1500
- "runs_small",
1501
- "true_to_size",
1502
- "runs_large"
1503
- ]
1504
- },
1505
- "sizeAdjustment": {
1506
- "$ref": "#/$defs/sizeAdjustment"
1507
- },
1508
- "description": {
1509
- "type": "string"
1510
- },
1511
- "appliesTo": {
1512
- "type": "string"
1513
- }
1514
- },
1515
- "additionalProperties": false
1516
- },
1517
- "sizeAdjustment": {
1518
- "type": "object",
1519
- "required": [
1520
- "@type",
1521
- "direction",
1522
- "magnitude"
1523
- ],
1524
- "properties": {
1525
- "@type": {
1526
- "const": "pagefront:SizeAdjustment"
1527
- },
1528
- "direction": {
1529
- "type": "string",
1530
- "enum": [
1531
- "up",
1532
- "down"
1533
- ]
1534
- },
1535
- "magnitude": {
1536
- "type": "number",
1537
- "minimum": 0
1538
- },
1539
- "sizeSystem": {
1540
- "type": "string"
1541
- }
1542
- },
1543
- "additionalProperties": false
1544
- },
1545
- "material": {
1546
- "type": "object",
1547
- "required": [
1548
- "@type",
1549
- "material"
1550
- ],
1551
- "properties": {
1552
- "@type": {
1553
- "const": "pagefront:Material"
1554
- },
1555
- "material": {
1556
- "type": "string"
1557
- },
1558
- "percentage": {
1559
- "type": "number",
1560
- "minimum": 0,
1561
- "maximum": 100
1562
- },
1563
- "purity": {
1564
- "type": "string"
1565
- },
1566
- "purityPercentage": {
1567
- "type": "number",
1568
- "minimum": 0,
1569
- "maximum": 100
1570
- },
1571
- "provenance": {
1572
- "type": "string",
1573
- "enum": [
1574
- "virgin",
1575
- "recycled",
1576
- "fair_mined",
1577
- "lab_grown",
1578
- "reclaimed",
1579
- "deadstock"
1580
- ]
1581
- },
1582
- "weightGrams": {
1583
- "type": "number",
1584
- "minimum": 0
1585
- }
1586
- },
1587
- "additionalProperties": false
1588
- },
1589
- "construction": {
1590
- "type": "object",
1591
- "required": [
1592
- "@type"
1593
- ],
1594
- "properties": {
1595
- "@type": {
1596
- "const": "pagefront:Construction"
1597
- },
1598
- "stitch": {
1599
- "type": "string"
1600
- },
1601
- "gauge": {
1602
- "type": "number"
1603
- },
1604
- "machine": {
1605
- "type": "string"
1606
- },
1607
- "constructionNotes": {
1608
- "type": "string"
1609
- }
1610
- },
1611
- "additionalProperties": true
1612
- },
1613
- "manufacturingStage": {
1614
- "type": "object",
1615
- "required": [
1616
- "@type",
1617
- "stage",
1618
- "country"
1619
- ],
1620
- "properties": {
1621
- "@type": {
1622
- "const": "pagefront:ManufacturingStage"
1623
- },
1624
- "stage": {
1625
- "type": "string"
1626
- },
1627
- "country": {
1628
- "type": "string",
1629
- "pattern": "^[A-Z]{2}$"
1630
- },
1631
- "facility": {
1632
- "type": "string"
1633
- },
1634
- "facilityCountry": {
1635
- "type": "string",
1636
- "pattern": "^[A-Z]{2}$"
1637
- }
1638
- },
1639
- "additionalProperties": false
1640
- },
1641
- "gemstone": {
1642
- "type": "object",
1643
- "required": [
1644
- "@type",
1645
- "type"
1646
- ],
1647
- "properties": {
1648
- "@type": {
1649
- "const": "pagefront:Gemstone"
1650
- },
1651
- "type": {
1652
- "type": "string"
1653
- },
1654
- "origin": {
1655
- "type": "string",
1656
- "enum": [
1657
- "natural_mined",
1658
- "lab_grown",
1659
- "treated",
1660
- "synthetic"
1661
- ]
1662
- },
1663
- "shape": {
1664
- "type": "string"
1665
- },
1666
- "caratWeight": {
1667
- "type": "number",
1668
- "minimum": 0
1669
- },
1670
- "colorGrade": {
1671
- "type": "string"
1672
- },
1673
- "clarityGrade": {
1674
- "type": "string"
1675
- },
1676
- "cutGrade": {
1677
- "type": "string"
1678
- },
1679
- "certifyingBody": {
1680
- "type": "string"
1681
- }
1682
- },
1683
- "additionalProperties": false
1684
- },
1685
- "configurator": {
1686
- "type": "object",
1687
- "required": [
1688
- "@type",
1689
- "dimensions"
1690
- ],
1691
- "properties": {
1692
- "@type": {
1693
- "const": "pagefront:Configurator"
1694
- },
1695
- "@id": {
1696
- "type": "string",
1697
- "minLength": 1
1698
- },
1699
- "dimensions": {
1700
- "type": "array",
1701
- "items": {
1702
- "$ref": "#/$defs/configuratorDimension"
1703
- },
1704
- "minItems": 1
1705
- },
1706
- "exclusions": {
1707
- "type": "array",
1708
- "items": {
1709
- "$ref": "#/$defs/configurationSelection",
1710
- "type": "object",
1711
- "minProperties": 1
1712
- }
1713
- }
1714
- },
1715
- "additionalProperties": false
1716
- },
1717
- "configuratorDimension": {
1718
- "type": "object",
1719
- "required": [
1720
- "name"
1721
- ],
1722
- "properties": {
1723
- "name": {
1724
- "type": "string"
1725
- },
1726
- "options": {
1727
- "type": "array",
1728
- "items": {
1729
- "type": "object",
1730
- "required": [
1731
- "value"
1732
- ],
1733
- "properties": {
1734
- "value": {
1735
- "anyOf": [
1736
- {
1737
- "type": "string"
1738
- },
1739
- {
1740
- "type": "number"
1741
- },
1742
- {
1743
- "type": "boolean"
1744
- }
1745
- ]
1746
- },
1747
- "description": {
1748
- "type": "string"
1749
- },
1750
- "priceModifier": false,
1751
- "currency": false
1752
- },
1753
- "additionalProperties": true
1754
- }
1755
- },
1756
- "affectsPrice": {
1757
- "type": "boolean",
1758
- "default": true
1759
- },
1760
- "inputType": {
1761
- "type": "string",
1762
- "enum": [
1763
- "select",
1764
- "text"
1765
- ],
1766
- "default": "select"
1767
- },
1768
- "maxLength": {
1769
- "type": "integer",
1770
- "minimum": 1
1771
- },
1772
- "system": {
1773
- "type": "string"
1774
- },
1775
- "note": {
1776
- "type": "string"
1777
- }
1778
- },
1779
- "additionalProperties": false
1780
- },
1781
- "configurationSelection": {
1782
- "type": "object",
1783
- "additionalProperties": {
1784
- "anyOf": [
1785
- {
1786
- "type": "string"
1787
- },
1788
- {
1789
- "type": "number"
1790
- },
1791
- {
1792
- "type": "boolean"
1793
- }
1794
- ]
1795
- }
1796
- },
1797
- "configuratorPricing": {
1798
- "type": "object",
1799
- "required": [
1800
- "@type",
1801
- "configurator",
1802
- "baseConfiguration",
1803
- "basePrice",
1804
- "modifiers"
1805
- ],
1806
- "properties": {
1807
- "@type": {
1808
- "const": "pagefront:ConfiguratorPricing"
1809
- },
1810
- "configurator": {
1811
- "type": "object",
1812
- "required": [
1813
- "@id"
1814
- ],
1815
- "properties": {
1816
- "@type": {
1817
- "const": "pagefront:Configurator"
1818
- },
1819
- "@id": {
1820
- "type": "string",
1821
- "minLength": 1
1822
- }
1823
- },
1824
- "additionalProperties": false
1825
- },
1826
- "baseConfiguration": {
1827
- "$ref": "#/$defs/configurationSelection"
1828
- },
1829
- "basePrice": {
1830
- "$ref": "#/$defs/nonNegativeAmount"
1831
- },
1832
- "modifiers": {
1833
- "type": "object",
1834
- "additionalProperties": {
1835
- "type": "object",
1836
- "additionalProperties": {
1837
- "$ref": "#/$defs/amount"
1838
- }
1839
- }
1840
- },
1841
- "adjustments": {
1842
- "type": "array",
1843
- "items": {
1844
- "type": "object",
1845
- "required": [
1846
- "when",
1847
- "priceModifier"
1848
- ],
1849
- "properties": {
1850
- "when": {
1851
- "$ref": "#/$defs/configurationSelection",
1852
- "type": "object",
1853
- "minProperties": 1
1854
- },
1855
- "priceModifier": {
1856
- "$ref": "#/$defs/amount"
1857
- }
1858
- },
1859
- "additionalProperties": false
1860
- }
1861
- },
1862
- "pricing": {
1863
- "type": "string",
1864
- "enum": [
1865
- "complete",
1866
- "partial"
1867
- ],
1868
- "default": "complete"
1869
- }
1870
- },
1871
- "additionalProperties": false
1872
- },
1873
- "madeToOrderTerms": {
1874
- "type": "object",
1875
- "required": [
1876
- "@type"
1877
- ],
1878
- "properties": {
1879
- "@type": {
1880
- "const": "pagefront:MadeToOrderTerms"
1881
- },
1882
- "productionLeadTime": {
1883
- "$ref": "#/$defs/duration"
1884
- },
1885
- "cancellationPolicy": {
1886
- "type": "string"
1887
- },
1888
- "returnsExceptions": {
1889
- "type": "array",
1890
- "items": {
1891
- "type": "string"
1892
- }
1893
- },
1894
- "aftermarketServices": {
1895
- "type": "array",
1896
- "items": {
1897
- "$ref": "#/$defs/aftermarketService"
1898
- }
1899
- }
1900
- },
1901
- "additionalProperties": false
1902
- },
1903
- "duration": {
1904
- "type": "object",
1905
- "required": [
1906
- "@type"
1907
- ],
1908
- "properties": {
1909
- "@type": {
1910
- "const": "pagefront:Duration"
1911
- },
1912
- "minDays": {
1913
- "type": "integer",
1914
- "minimum": 0
1915
- },
1916
- "maxDays": {
1917
- "type": "integer",
1918
- "minimum": 0
1919
- },
1920
- "description": {
1921
- "type": "string"
1922
- }
1923
- },
1924
- "additionalProperties": false
1925
- },
1926
- "deliveryEstimate": {
1927
- "type": "object",
1928
- "required": [
1929
- "@type"
1930
- ],
1931
- "properties": {
1932
- "@type": {
1933
- "const": "pagefront:DeliveryEstimate"
1934
- },
1935
- "earliest": {
1936
- "type": "string",
1937
- "format": "date"
1938
- },
1939
- "latest": {
1940
- "type": "string",
1941
- "format": "date"
1942
- },
1943
- "description": {
1944
- "type": "string"
1945
- }
1946
- },
1947
- "additionalProperties": false
1948
- },
1949
- "aftermarketService": {
1950
- "type": "object",
1951
- "required": [
1952
- "@type",
1953
- "service"
1954
- ],
1955
- "properties": {
1956
- "@type": {
1957
- "const": "pagefront:AftermarketService"
1958
- },
1959
- "service": {
1960
- "type": "string"
1961
- },
1962
- "limit": {
1963
- "type": "string"
1964
- },
1965
- "description": {
1966
- "type": "string"
1967
- }
1968
- },
1969
- "additionalProperties": false
1970
- },
1971
- "promotion": {
1972
- "type": "object",
1973
- "required": [
1974
- "@type",
1975
- "scope"
1976
- ],
1977
- "properties": {
1978
- "@type": {
1979
- "const": "pagefront:Promotion"
1980
- },
1981
- "code": {
1982
- "type": "string"
1983
- },
1984
- "discountPercentage": {
1985
- "type": "number",
1986
- "minimum": 0,
1987
- "maximum": 100
1988
- },
1989
- "discountAmount": {
1990
- "$ref": "#/$defs/nonNegativeAmount"
1991
- },
1992
- "discountCurrency": {
1993
- "type": "string",
1994
- "pattern": "^[A-Z]{3}$"
1995
- },
1996
- "scope": {
1997
- "type": "string",
1998
- "enum": [
1999
- "product",
2000
- "category",
2001
- "site_wide"
2002
- ]
2003
- },
2004
- "occasion": {
2005
- "type": "string"
2006
- },
2007
- "validUntil": {
2008
- "type": "string",
2009
- "format": "date-time"
2010
- }
2011
- },
2012
- "additionalProperties": false
2013
- }
2014
- }
2015
- };