@coveo/thermidor-schema 0.0.0 → 1.0.0-beta.10

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 (47) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +61 -0
  3. package/dist/generated/schemas.d.ts +3992 -0
  4. package/dist/generated/schemas.js +1085 -0
  5. package/dist/generated/zod3/schemas.d.ts +23821 -0
  6. package/dist/generated/zod3/schemas.js +1087 -0
  7. package/dist/index.d.ts +3 -0
  8. package/dist/index.js +2 -0
  9. package/dist/zod3/index.d.ts +3 -0
  10. package/dist/zod3/index.js +5 -0
  11. package/dist/zod3-compat.d.ts +79 -0
  12. package/dist/zod3-compat.js +82 -0
  13. package/package.json +52 -8
  14. package/schema/base/action.schema.json +12 -0
  15. package/schema/base/catalog.schema.json +38 -0
  16. package/schema/base/component.schema.json +45 -0
  17. package/schema/component-contracts.schema.json +73 -0
  18. package/schema/components/bundle-display.schema.json +52 -0
  19. package/schema/components/cart.schema.json +147 -0
  20. package/schema/components/category-facet.schema.json +303 -0
  21. package/schema/components/commerce-search.schema.json +186 -0
  22. package/schema/components/comparison-table.schema.json +78 -0
  23. package/schema/components/date-facet.schema.json +294 -0
  24. package/schema/components/facet-manager.schema.json +45 -0
  25. package/schema/components/layout-stack.schema.json +50 -0
  26. package/schema/components/next-actions-bar.schema.json +85 -0
  27. package/schema/components/numeric-facet.schema.json +320 -0
  28. package/schema/components/page-size.schema.json +79 -0
  29. package/schema/components/pagination.schema.json +149 -0
  30. package/schema/components/product-carousel.schema.json +60 -0
  31. package/schema/components/product-list.schema.json +116 -0
  32. package/schema/components/product-research-card.schema.json +70 -0
  33. package/schema/components/product-summary.schema.json +64 -0
  34. package/schema/components/query-suggestions.schema.json +113 -0
  35. package/schema/components/query-summary.schema.json +76 -0
  36. package/schema/components/regular-facet.schema.json +395 -0
  37. package/schema/components/sort.schema.json +107 -0
  38. package/schema/definitions/action-item.schema.json +20 -0
  39. package/schema/definitions/bundle-tier.schema.json +49 -0
  40. package/schema/definitions/child-list.schema.json +32 -0
  41. package/schema/definitions/comparison-attribute.schema.json +19 -0
  42. package/schema/definitions/comparison-product.schema.json +39 -0
  43. package/schema/definitions/component-id.schema.json +9 -0
  44. package/schema/definitions/data-binding.schema.json +16 -0
  45. package/schema/definitions/facet-value-state.schema.json +8 -0
  46. package/schema/definitions/product.schema.json +92 -0
  47. package/schema/definitions/selectable-facet-value-state.schema.json +8 -0
@@ -0,0 +1,320 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schema.thermidor.coveo.com/components/numeric-facet.schema.json",
4
+ "title": "NumericFacet",
5
+ "description": "A numeric range facet for a commerce search surface. Renders numeric range values and dispatches toggleSelect, clearAllActiveValues, applyCustomRange, showMoreValues, and showLessValues to refine results.",
6
+ "allOf": [
7
+ {
8
+ "$ref": "https://schema.thermidor.coveo.com/base/component.schema.json"
9
+ }
10
+ ],
11
+ "properties": {
12
+ "component": {
13
+ "type": "string",
14
+ "const": "NumericFacet"
15
+ },
16
+ "id": {
17
+ "type": "string"
18
+ },
19
+ "field": {
20
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
21
+ "description": "The index field the facet queries, bound to /state/<id>/field."
22
+ },
23
+ "displayName": {
24
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
25
+ "description": "The facet's human-readable label, bound to /state/<id>/displayName."
26
+ },
27
+ "values": {
28
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
29
+ "description": "The numeric-range facet values, bound to /state/<id>/values."
30
+ },
31
+ "customRange": {
32
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
33
+ "description": "The custom range, bound to /state/<id>/customRange."
34
+ },
35
+ "hasActiveValues": {
36
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
37
+ "description": "Whether at least one facet value is active, bound to /state/<id>/hasActiveValues."
38
+ },
39
+ "canShowMoreValues": {
40
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
41
+ "description": "Whether more facet values can be shown, bound to /state/<id>/canShowMoreValues."
42
+ },
43
+ "canShowLessValues": {
44
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
45
+ "description": "Whether fewer facet values can be shown, bound to /state/<id>/canShowLessValues."
46
+ },
47
+ "domain": {
48
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
49
+ "description": "The numeric domain (min/max) of the facet, bound to /state/<id>/domain."
50
+ },
51
+ "state": {
52
+ "$ref": "#/$defs/NumericFacetState"
53
+ },
54
+ "actions": {
55
+ "type": "object",
56
+ "required": [
57
+ "toggleSelect",
58
+ "toggleSingleSelect",
59
+ "clearAllActiveValues",
60
+ "applyCustomRange",
61
+ "showMoreValues",
62
+ "showLessValues"
63
+ ],
64
+ "properties": {
65
+ "toggleSelect": {
66
+ "$ref": "#/$defs/NumericFacetToggleSelectAction"
67
+ },
68
+ "toggleSingleSelect": {
69
+ "$ref": "#/$defs/NumericFacetToggleSingleSelectAction"
70
+ },
71
+ "clearAllActiveValues": {
72
+ "$ref": "#/$defs/NumericFacetClearAllActiveValuesAction"
73
+ },
74
+ "applyCustomRange": {
75
+ "$ref": "#/$defs/NumericFacetApplyCustomRangeAction"
76
+ },
77
+ "showMoreValues": {
78
+ "$ref": "#/$defs/NumericFacetShowMoreValuesAction"
79
+ },
80
+ "showLessValues": {
81
+ "$ref": "#/$defs/NumericFacetShowLessValuesAction"
82
+ }
83
+ },
84
+ "additionalProperties": false
85
+ }
86
+ },
87
+ "additionalProperties": false,
88
+ "$defs": {
89
+ "NumericFacetState": {
90
+ "title": "NumericFacetState",
91
+ "description": "The current numeric facet state. Owned exclusively by the backend.",
92
+ "type": "object",
93
+ "required": [
94
+ "field",
95
+ "displayName",
96
+ "values",
97
+ "customRange",
98
+ "hasActiveValues",
99
+ "canShowMoreValues",
100
+ "canShowLessValues"
101
+ ],
102
+ "properties": {
103
+ "field": {
104
+ "type": "string",
105
+ "description": "The index field this facet queries."
106
+ },
107
+ "displayName": {
108
+ "type": "string",
109
+ "description": "Human-readable name for this facet."
110
+ },
111
+ "values": {
112
+ "type": "array",
113
+ "description": "The numeric range values available for this facet.",
114
+ "minItems": 0,
115
+ "maxItems": 500,
116
+ "items": {
117
+ "$ref": "#/$defs/NumericFacetValue"
118
+ }
119
+ },
120
+ "customRange": {
121
+ "description": "The currently applied custom range, or null when none is active. Mutually exclusive with selected values.",
122
+ "oneOf": [
123
+ {
124
+ "$ref": "#/$defs/NumericFacetCustomRange"
125
+ },
126
+ {
127
+ "type": "null"
128
+ }
129
+ ]
130
+ },
131
+ "hasActiveValues": {
132
+ "type": "boolean",
133
+ "description": "Whether at least one range value is not in the idle state."
134
+ },
135
+ "canShowMoreValues": {
136
+ "type": "boolean",
137
+ "description": "Whether more values can be shown."
138
+ },
139
+ "canShowLessValues": {
140
+ "type": "boolean",
141
+ "description": "Whether fewer values can be shown."
142
+ },
143
+ "domain": {
144
+ "$ref": "#/$defs/NumericFacetDomain",
145
+ "description": "The optional numeric domain (min/max) of the facet."
146
+ }
147
+ },
148
+ "additionalProperties": false
149
+ },
150
+ "NumericFacetValue": {
151
+ "title": "NumericFacetValue",
152
+ "description": "A single numeric range value within a numeric facet.",
153
+ "type": "object",
154
+ "required": ["start", "end", "numberOfResults", "state"],
155
+ "properties": {
156
+ "start": {
157
+ "type": "number",
158
+ "description": "The inclusive lower bound of the range."
159
+ },
160
+ "end": {
161
+ "type": "number",
162
+ "description": "The upper bound of the range."
163
+ },
164
+ "numberOfResults": {
165
+ "type": "integer",
166
+ "minimum": 0,
167
+ "description": "The number of results matching this range."
168
+ },
169
+ "state": {
170
+ "$ref": "https://schema.thermidor.coveo.com/definitions/selectable-facet-value-state.schema.json",
171
+ "description": "The selection state of this facet value (idle or selected; exclusion is not supported)."
172
+ }
173
+ },
174
+ "additionalProperties": false
175
+ },
176
+ "NumericFacetCustomRange": {
177
+ "title": "NumericFacetCustomRange",
178
+ "description": "A custom numeric range applied by the user, with its result count.",
179
+ "type": "object",
180
+ "required": ["start", "end", "numberOfResults"],
181
+ "properties": {
182
+ "start": {
183
+ "type": "number",
184
+ "description": "The inclusive lower bound of the custom range."
185
+ },
186
+ "end": {
187
+ "type": "number",
188
+ "description": "The upper bound of the custom range."
189
+ },
190
+ "numberOfResults": {
191
+ "type": "integer",
192
+ "minimum": 0,
193
+ "description": "The number of results matching this custom range."
194
+ }
195
+ },
196
+ "additionalProperties": false
197
+ },
198
+ "NumericFacetDomain": {
199
+ "title": "NumericFacetDomain",
200
+ "description": "The numeric domain bounds of a numeric facet.",
201
+ "type": "object",
202
+ "properties": {
203
+ "min": {
204
+ "type": "number",
205
+ "description": "The minimum value of the domain."
206
+ },
207
+ "max": {
208
+ "type": "number",
209
+ "description": "The maximum value of the domain."
210
+ }
211
+ },
212
+ "additionalProperties": false
213
+ },
214
+ "NumericFacetToggleSelectAction": {
215
+ "title": "numericFacetToggleSelect",
216
+ "description": "Toggles the selection of a numeric range value.",
217
+ "allOf": [
218
+ {
219
+ "$ref": "https://schema.thermidor.coveo.com/base/action.schema.json"
220
+ }
221
+ ],
222
+ "properties": {
223
+ "payload": {
224
+ "type": "object",
225
+ "required": ["start", "end"],
226
+ "properties": {
227
+ "start": {
228
+ "type": "number",
229
+ "description": "The inclusive lower bound of the range to toggle."
230
+ },
231
+ "end": {
232
+ "type": "number",
233
+ "description": "The upper bound of the range to toggle."
234
+ }
235
+ },
236
+ "additionalProperties": false
237
+ }
238
+ }
239
+ },
240
+ "NumericFacetToggleSingleSelectAction": {
241
+ "title": "numericFacetToggleSingleSelect",
242
+ "description": "Toggles the selection of a range value, deselecting all other values (single-select behavior).",
243
+ "allOf": [
244
+ {
245
+ "$ref": "https://schema.thermidor.coveo.com/base/action.schema.json"
246
+ }
247
+ ],
248
+ "properties": {
249
+ "payload": {
250
+ "type": "object",
251
+ "required": ["start", "end"],
252
+ "properties": {
253
+ "start": {
254
+ "type": "number",
255
+ "description": "The inclusive lower bound of the range to single-select."
256
+ },
257
+ "end": {
258
+ "type": "number",
259
+ "description": "The upper bound of the range to single-select."
260
+ }
261
+ },
262
+ "additionalProperties": false
263
+ }
264
+ }
265
+ },
266
+ "NumericFacetClearAllActiveValuesAction": {
267
+ "title": "numericFacetClearAllActiveValues",
268
+ "description": "Resets all numeric range values to the idle state, clearing every selection.",
269
+ "allOf": [
270
+ {
271
+ "$ref": "https://schema.thermidor.coveo.com/base/action.schema.json"
272
+ }
273
+ ]
274
+ },
275
+ "NumericFacetApplyCustomRangeAction": {
276
+ "title": "numericFacetApplyCustomRange",
277
+ "description": "Applies a single custom numeric range, clearing any selected displayed ranges.",
278
+ "allOf": [
279
+ {
280
+ "$ref": "https://schema.thermidor.coveo.com/base/action.schema.json"
281
+ }
282
+ ],
283
+ "properties": {
284
+ "payload": {
285
+ "type": "object",
286
+ "required": ["start", "end"],
287
+ "properties": {
288
+ "start": {
289
+ "type": "number",
290
+ "description": "The inclusive lower bound of the custom range."
291
+ },
292
+ "end": {
293
+ "type": "number",
294
+ "description": "The upper bound of the custom range."
295
+ }
296
+ },
297
+ "additionalProperties": false
298
+ }
299
+ }
300
+ },
301
+ "NumericFacetShowMoreValuesAction": {
302
+ "title": "numericFacetShowMoreValues",
303
+ "description": "Increases the number of numeric range values shown.",
304
+ "allOf": [
305
+ {
306
+ "$ref": "https://schema.thermidor.coveo.com/base/action.schema.json"
307
+ }
308
+ ]
309
+ },
310
+ "NumericFacetShowLessValuesAction": {
311
+ "title": "numericFacetShowLessValues",
312
+ "description": "Decreases the number of numeric range values shown.",
313
+ "allOf": [
314
+ {
315
+ "$ref": "https://schema.thermidor.coveo.com/base/action.schema.json"
316
+ }
317
+ ]
318
+ }
319
+ }
320
+ }
@@ -0,0 +1,79 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schema.thermidor.coveo.com/components/page-size.schema.json",
4
+ "title": "PageSize",
5
+ "description": "A 'Products per page' selector for a search surface. Owns the current pageSize in its state and dispatches setPageSize.",
6
+ "$comment": "Its own component discriminant lets it mount through the A2-UI tree. The backend applies the change so the pagination component re-renders from the shared view.",
7
+ "allOf": [
8
+ {
9
+ "$ref": "https://schema.thermidor.coveo.com/base/component.schema.json"
10
+ }
11
+ ],
12
+ "properties": {
13
+ "id": {
14
+ "type": "string"
15
+ },
16
+ "component": {
17
+ "type": "string",
18
+ "const": "PageSize"
19
+ },
20
+ "pageSize": {
21
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
22
+ "description": "The current page size, bound to /state/<id>/pageSize via a { \"path\": ... } Data_Binding."
23
+ },
24
+ "state": {
25
+ "$ref": "#/$defs/PageSizeState"
26
+ },
27
+ "actions": {
28
+ "type": "object",
29
+ "required": ["setPageSize"],
30
+ "properties": {
31
+ "setPageSize": {
32
+ "$ref": "#/$defs/SetPageSizeAction"
33
+ }
34
+ },
35
+ "additionalProperties": false
36
+ }
37
+ },
38
+ "additionalProperties": false,
39
+ "$defs": {
40
+ "PageSizeState": {
41
+ "title": "PageSizeState",
42
+ "description": "The current page size. Owned exclusively by the backend.",
43
+ "$comment": "Kept as its own entry (keyed by this component's id) so the selector reads only the field it needs, independent of the pagination component's state shape.",
44
+ "type": "object",
45
+ "required": ["pageSize"],
46
+ "properties": {
47
+ "pageSize": {
48
+ "type": "integer",
49
+ "minimum": 1,
50
+ "description": "The number of items displayed per page."
51
+ }
52
+ },
53
+ "additionalProperties": false
54
+ },
55
+ "SetPageSizeAction": {
56
+ "title": "setPageSize",
57
+ "description": "Changes the number of items displayed per page.",
58
+ "allOf": [
59
+ {
60
+ "$ref": "https://schema.thermidor.coveo.com/base/action.schema.json"
61
+ }
62
+ ],
63
+ "properties": {
64
+ "payload": {
65
+ "type": "object",
66
+ "required": ["pageSize"],
67
+ "properties": {
68
+ "pageSize": {
69
+ "type": "integer",
70
+ "minimum": 1,
71
+ "description": "The number of items to display per page."
72
+ }
73
+ },
74
+ "additionalProperties": false
75
+ }
76
+ }
77
+ }
78
+ }
79
+ }
@@ -0,0 +1,149 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schema.thermidor.coveo.com/components/pagination.schema.json",
4
+ "title": "Pagination",
5
+ "description": "Controls page navigation for a commerce search surface. Manages current page, page size, and total counts; dispatches selectPage to navigate.",
6
+ "allOf": [
7
+ {
8
+ "$ref": "https://schema.thermidor.coveo.com/base/component.schema.json"
9
+ }
10
+ ],
11
+ "properties": {
12
+ "id": {
13
+ "type": "string"
14
+ },
15
+ "component": {
16
+ "type": "string",
17
+ "const": "Pagination"
18
+ },
19
+ "page": {
20
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
21
+ "description": "The current page number, bound to /state/<id>/page via a { \"path\": ... } Data_Binding."
22
+ },
23
+ "pageSize": {
24
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
25
+ "description": "The number of items per page, bound to /state/<id>/pageSize."
26
+ },
27
+ "totalEntries": {
28
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
29
+ "description": "The total number of items, bound to /state/<id>/totalEntries."
30
+ },
31
+ "totalPages": {
32
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
33
+ "description": "The total number of pages, bound to /state/<id>/totalPages."
34
+ },
35
+ "state": {
36
+ "$ref": "#/$defs/PaginationState"
37
+ },
38
+ "actions": {
39
+ "type": "object",
40
+ "required": ["selectPage", "setPageSize", "showMore"],
41
+ "properties": {
42
+ "selectPage": {
43
+ "$ref": "#/$defs/SelectPageAction"
44
+ },
45
+ "setPageSize": {
46
+ "$ref": "#/$defs/SetPageSizeAction"
47
+ },
48
+ "showMore": {
49
+ "$ref": "#/$defs/ShowMoreAction"
50
+ }
51
+ },
52
+ "additionalProperties": false
53
+ }
54
+ },
55
+ "additionalProperties": false,
56
+ "$defs": {
57
+ "PaginationState": {
58
+ "title": "PaginationState",
59
+ "description": "The current pagination state. Owned exclusively by the backend.",
60
+ "type": "object",
61
+ "required": ["page", "pageSize", "totalEntries", "totalPages"],
62
+ "properties": {
63
+ "page": {
64
+ "type": "integer",
65
+ "minimum": 0,
66
+ "description": "The current zero-indexed page number."
67
+ },
68
+ "pageSize": {
69
+ "type": "integer",
70
+ "minimum": 1,
71
+ "description": "The number of items per page."
72
+ },
73
+ "totalEntries": {
74
+ "type": "integer",
75
+ "minimum": 0,
76
+ "description": "The total number of items across all pages."
77
+ },
78
+ "totalPages": {
79
+ "type": "integer",
80
+ "minimum": 0,
81
+ "description": "The total number of pages."
82
+ }
83
+ },
84
+ "additionalProperties": false
85
+ },
86
+ "SelectPageAction": {
87
+ "title": "selectPage",
88
+ "description": "Navigates to a specific page.",
89
+ "allOf": [
90
+ {
91
+ "$ref": "https://schema.thermidor.coveo.com/base/action.schema.json"
92
+ }
93
+ ],
94
+ "properties": {
95
+ "payload": {
96
+ "type": "object",
97
+ "required": ["page"],
98
+ "properties": {
99
+ "page": {
100
+ "type": "integer",
101
+ "minimum": 0,
102
+ "description": "The zero-indexed page number to navigate to."
103
+ }
104
+ },
105
+ "additionalProperties": false
106
+ }
107
+ }
108
+ },
109
+ "SetPageSizeAction": {
110
+ "title": "setPageSize",
111
+ "description": "Changes the number of items displayed per page.",
112
+ "allOf": [
113
+ {
114
+ "$ref": "https://schema.thermidor.coveo.com/base/action.schema.json"
115
+ }
116
+ ],
117
+ "properties": {
118
+ "payload": {
119
+ "type": "object",
120
+ "required": ["pageSize"],
121
+ "properties": {
122
+ "pageSize": {
123
+ "type": "integer",
124
+ "minimum": 1,
125
+ "description": "The number of items to display per page."
126
+ }
127
+ },
128
+ "additionalProperties": false
129
+ }
130
+ }
131
+ },
132
+ "ShowMoreAction": {
133
+ "title": "showMore",
134
+ "description": "Advances to the next page while preserving backend ownership of pagination state.",
135
+ "allOf": [
136
+ {
137
+ "$ref": "https://schema.thermidor.coveo.com/base/action.schema.json"
138
+ }
139
+ ],
140
+ "properties": {
141
+ "payload": {
142
+ "type": "object",
143
+ "properties": {},
144
+ "additionalProperties": false
145
+ }
146
+ }
147
+ }
148
+ }
149
+ }
@@ -0,0 +1,60 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schema.thermidor.coveo.com/components/product-carousel.schema.json",
4
+ "title": "ProductCarousel",
5
+ "description": "Renders an ordered list of commerce products for a single category or intent bucket. Read-only from the frontend: the backend is the sole source of truth for which products are displayed and in what order.",
6
+ "allOf": [
7
+ {
8
+ "$ref": "https://schema.thermidor.coveo.com/base/component.schema.json"
9
+ }
10
+ ],
11
+ "properties": {
12
+ "id": {
13
+ "type": "string"
14
+ },
15
+ "component": {
16
+ "type": "string",
17
+ "const": "ProductCarousel"
18
+ },
19
+ "heading": {
20
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
21
+ "description": "The carousel heading, bound to /state/<id>/heading."
22
+ },
23
+ "products": {
24
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
25
+ "description": "The ordered list of products, bound to /state/<id>/products."
26
+ },
27
+ "state": {
28
+ "$ref": "#/$defs/ProductCarouselState"
29
+ },
30
+ "actions": {
31
+ "type": "object",
32
+ "properties": {},
33
+ "additionalProperties": false
34
+ }
35
+ },
36
+ "additionalProperties": false,
37
+ "$defs": {
38
+ "ProductCarouselState": {
39
+ "title": "ProductCarouselState",
40
+ "description": "The ordered list of products to render. Owned exclusively by the backend; the frontend must not mutate this directly.",
41
+ "$comment": "This schema validates the runtime state value the backend pushes to the frontend.",
42
+ "type": "object",
43
+ "required": ["heading", "products"],
44
+ "properties": {
45
+ "heading": {
46
+ "type": "string",
47
+ "description": "Display heading for this product list (e.g. 'Life Jackets'). An empty string is a valid transient value while the list is still loading."
48
+ },
49
+ "products": {
50
+ "type": "array",
51
+ "description": "Ordered list of products to render.",
52
+ "items": {
53
+ "$ref": "https://schema.thermidor.coveo.com/definitions/product.schema.json"
54
+ }
55
+ }
56
+ },
57
+ "additionalProperties": false
58
+ }
59
+ }
60
+ }