@x12i/catalox 1.1.1 → 2.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.
Files changed (125) hide show
  1. package/README.md +424 -222
  2. package/dist/src/catalox/catalox.d.ts +38 -1
  3. package/dist/src/catalox/catalox.d.ts.map +1 -1
  4. package/dist/src/catalox/catalox.js +499 -13
  5. package/dist/src/catalox/catalox.js.map +1 -1
  6. package/dist/src/catalox/field-source-resolution.d.ts +16 -0
  7. package/dist/src/catalox/field-source-resolution.d.ts.map +1 -0
  8. package/dist/src/catalox/field-source-resolution.js +43 -0
  9. package/dist/src/catalox/field-source-resolution.js.map +1 -0
  10. package/dist/src/catalox/reporting/render-inventory-report.d.ts +3 -0
  11. package/dist/src/catalox/reporting/render-inventory-report.d.ts.map +1 -0
  12. package/dist/src/catalox/reporting/render-inventory-report.js +78 -0
  13. package/dist/src/catalox/reporting/render-inventory-report.js.map +1 -0
  14. package/dist/src/cli/index.d.ts +3 -0
  15. package/dist/src/cli/index.d.ts.map +1 -0
  16. package/dist/src/cli/index.js +267 -0
  17. package/dist/src/cli/index.js.map +1 -0
  18. package/dist/src/contracts/context.d.ts +7 -1
  19. package/dist/src/contracts/context.d.ts.map +1 -1
  20. package/dist/src/contracts/descriptors.d.ts +6 -0
  21. package/dist/src/contracts/descriptors.d.ts.map +1 -1
  22. package/dist/src/contracts/diagram-map.d.ts +24 -0
  23. package/dist/src/contracts/diagram-map.d.ts.map +1 -0
  24. package/dist/src/contracts/diagram-map.js +2 -0
  25. package/dist/src/contracts/diagram-map.js.map +1 -0
  26. package/dist/src/contracts/field-source.d.ts +43 -0
  27. package/dist/src/contracts/field-source.d.ts.map +1 -0
  28. package/dist/src/contracts/field-source.js +2 -0
  29. package/dist/src/contracts/field-source.js.map +1 -0
  30. package/dist/src/contracts/filters.d.ts +59 -0
  31. package/dist/src/contracts/filters.d.ts.map +1 -0
  32. package/dist/src/contracts/filters.js +2 -0
  33. package/dist/src/contracts/filters.js.map +1 -0
  34. package/dist/src/contracts/ids.d.ts +1 -0
  35. package/dist/src/contracts/ids.d.ts.map +1 -1
  36. package/dist/src/contracts/index.d.ts +11 -1
  37. package/dist/src/contracts/index.d.ts.map +1 -1
  38. package/dist/src/contracts/index.js.map +1 -1
  39. package/dist/src/contracts/inventory-export.d.ts +40 -0
  40. package/dist/src/contracts/inventory-export.d.ts.map +1 -0
  41. package/dist/src/contracts/inventory-export.js +2 -0
  42. package/dist/src/contracts/inventory-export.js.map +1 -0
  43. package/dist/src/contracts/inventory-report.d.ts +61 -0
  44. package/dist/src/contracts/inventory-report.d.ts.map +1 -0
  45. package/dist/src/contracts/inventory-report.js +2 -0
  46. package/dist/src/contracts/inventory-report.js.map +1 -0
  47. package/dist/src/contracts/items.d.ts +3 -0
  48. package/dist/src/contracts/items.d.ts.map +1 -1
  49. package/dist/src/contracts/markdown-map.d.ts +42 -0
  50. package/dist/src/contracts/markdown-map.d.ts.map +1 -0
  51. package/dist/src/contracts/markdown-map.js +2 -0
  52. package/dist/src/contracts/markdown-map.js.map +1 -0
  53. package/dist/src/contracts/presentation.d.ts +149 -0
  54. package/dist/src/contracts/presentation.d.ts.map +1 -0
  55. package/dist/src/contracts/presentation.js +2 -0
  56. package/dist/src/contracts/presentation.js.map +1 -0
  57. package/dist/src/contracts/render-map.d.ts +135 -0
  58. package/dist/src/contracts/render-map.d.ts.map +1 -0
  59. package/dist/src/contracts/render-map.js +2 -0
  60. package/dist/src/contracts/render-map.js.map +1 -0
  61. package/dist/src/contracts/snapshots.d.ts +12 -0
  62. package/dist/src/contracts/snapshots.d.ts.map +1 -0
  63. package/dist/src/contracts/snapshots.js +2 -0
  64. package/dist/src/contracts/snapshots.js.map +1 -0
  65. package/dist/src/contracts/stores.d.ts +21 -0
  66. package/dist/src/contracts/stores.d.ts.map +1 -0
  67. package/dist/src/contracts/stores.js +2 -0
  68. package/dist/src/contracts/stores.js.map +1 -0
  69. package/dist/src/diagrams/render-catalog-diagram.d.ts +3 -0
  70. package/dist/src/diagrams/render-catalog-diagram.d.ts.map +1 -0
  71. package/dist/src/diagrams/render-catalog-diagram.js +27 -0
  72. package/dist/src/diagrams/render-catalog-diagram.js.map +1 -0
  73. package/dist/src/diagrams/render-item-diagram.d.ts +3 -0
  74. package/dist/src/diagrams/render-item-diagram.d.ts.map +1 -0
  75. package/dist/src/diagrams/render-item-diagram.js +26 -0
  76. package/dist/src/diagrams/render-item-diagram.js.map +1 -0
  77. package/dist/src/firebase/index.d.ts +1 -0
  78. package/dist/src/firebase/index.d.ts.map +1 -1
  79. package/dist/src/firebase/index.js +1 -0
  80. package/dist/src/firebase/index.js.map +1 -1
  81. package/dist/src/firebase/snapshot-store.d.ts +7 -0
  82. package/dist/src/firebase/snapshot-store.d.ts.map +1 -1
  83. package/dist/src/firebase/snapshot-store.js +30 -0
  84. package/dist/src/firebase/snapshot-store.js.map +1 -1
  85. package/dist/src/firebase/store-app-binding-store.d.ts +14 -0
  86. package/dist/src/firebase/store-app-binding-store.d.ts.map +1 -0
  87. package/dist/src/firebase/store-app-binding-store.js +36 -0
  88. package/dist/src/firebase/store-app-binding-store.js.map +1 -0
  89. package/dist/src/index.d.ts +4 -0
  90. package/dist/src/index.d.ts.map +1 -1
  91. package/dist/src/index.js +4 -0
  92. package/dist/src/index.js.map +1 -1
  93. package/dist/src/markdown/render-item-markdown.d.ts +5 -0
  94. package/dist/src/markdown/render-item-markdown.d.ts.map +1 -0
  95. package/dist/src/markdown/render-item-markdown.js +83 -0
  96. package/dist/src/markdown/render-item-markdown.js.map +1 -0
  97. package/dist/src/markdown/render-list-markdown.d.ts +5 -0
  98. package/dist/src/markdown/render-list-markdown.d.ts.map +1 -0
  99. package/dist/src/markdown/render-list-markdown.js +90 -0
  100. package/dist/src/markdown/render-list-markdown.js.map +1 -0
  101. package/dist/src/validation/index.d.ts +3 -1
  102. package/dist/src/validation/index.d.ts.map +1 -1
  103. package/dist/src/validation/index.js +2 -2
  104. package/dist/src/validation/index.js.map +1 -1
  105. package/dist/src/validation/ui-spec-schema.d.ts +19 -0
  106. package/dist/src/validation/ui-spec-schema.d.ts.map +1 -0
  107. package/dist/src/validation/ui-spec-schema.js +547 -0
  108. package/dist/src/validation/ui-spec-schema.js.map +1 -0
  109. package/dist/src/validation/ui-spec-validate.d.ts +19 -0
  110. package/dist/src/validation/ui-spec-validate.d.ts.map +1 -0
  111. package/dist/src/validation/ui-spec-validate.js +69 -0
  112. package/dist/src/validation/ui-spec-validate.js.map +1 -0
  113. package/dist/test/unit/field-source-resolution.test.d.ts +2 -0
  114. package/dist/test/unit/field-source-resolution.test.d.ts.map +1 -0
  115. package/dist/test/unit/field-source-resolution.test.js +45 -0
  116. package/dist/test/unit/field-source-resolution.test.js.map +1 -0
  117. package/dist/test/unit/markdown-and-diagrams.test.d.ts +2 -0
  118. package/dist/test/unit/markdown-and-diagrams.test.d.ts.map +1 -0
  119. package/dist/test/unit/markdown-and-diagrams.test.js +62 -0
  120. package/dist/test/unit/markdown-and-diagrams.test.js.map +1 -0
  121. package/dist/test/unit/ui-spec-validation.test.d.ts +2 -0
  122. package/dist/test/unit/ui-spec-validation.test.d.ts.map +1 -0
  123. package/dist/test/unit/ui-spec-validation.test.js +78 -0
  124. package/dist/test/unit/ui-spec-validation.test.js.map +1 -0
  125. package/package.json +10 -2
@@ -0,0 +1,547 @@
1
+ /**
2
+ * JSON Schemas for validating descriptor UI specs and renderer maps.
3
+ *
4
+ * These schemas are intended for server/backoffice systems validating JSON
5
+ * loaded from databases or API calls.
6
+ *
7
+ * Design goals:
8
+ * - validate discriminated unions (e.g. FieldSource.type)
9
+ * - validate required keys and primitive types
10
+ * - remain forward-compatible (allow unknown keys where safe)
11
+ */
12
+ export const fieldSourceSchema = {
13
+ oneOf: [
14
+ {
15
+ type: "object",
16
+ additionalProperties: true,
17
+ required: ["type", "values"],
18
+ properties: {
19
+ type: { const: "static" },
20
+ values: {
21
+ type: "array",
22
+ items: {
23
+ type: "object",
24
+ additionalProperties: true,
25
+ required: ["value", "label"],
26
+ properties: {
27
+ value: { anyOf: [{ type: "string" }, { type: "number" }] },
28
+ label: { type: "string" },
29
+ icon: { type: "string" },
30
+ color: { type: "string" },
31
+ metadata: { type: "object", additionalProperties: true },
32
+ },
33
+ },
34
+ },
35
+ },
36
+ },
37
+ {
38
+ type: "object",
39
+ additionalProperties: true,
40
+ required: ["type", "catalogId", "valueField", "labelField"],
41
+ properties: {
42
+ type: { const: "catalog" },
43
+ catalogId: { type: "string" },
44
+ valueField: { type: "string" },
45
+ labelField: { type: "string" },
46
+ scope: { enum: ["app", "store"] },
47
+ filterBy: {
48
+ type: "object",
49
+ additionalProperties: { type: "string" },
50
+ },
51
+ sortBy: {
52
+ type: "object",
53
+ additionalProperties: true,
54
+ required: ["field", "direction"],
55
+ properties: {
56
+ field: { type: "string" },
57
+ direction: { enum: ["asc", "desc"] },
58
+ },
59
+ },
60
+ },
61
+ },
62
+ {
63
+ type: "object",
64
+ additionalProperties: true,
65
+ required: ["type"],
66
+ properties: {
67
+ type: { const: "field-distinct" },
68
+ },
69
+ },
70
+ ],
71
+ };
72
+ export const catalogFilterSpecSchema = {
73
+ type: "object",
74
+ additionalProperties: true,
75
+ required: ["filters"],
76
+ properties: {
77
+ filters: {
78
+ type: "array",
79
+ items: {
80
+ type: "object",
81
+ additionalProperties: true,
82
+ required: ["key", "fieldPath", "controlType"],
83
+ properties: {
84
+ key: { type: "string" },
85
+ fieldPath: { type: "string" },
86
+ label: { type: "string" },
87
+ placeholder: { type: "string" },
88
+ controlType: {
89
+ enum: ["select", "multi-select", "range", "date-range", "toggle", "text", "tags"],
90
+ },
91
+ defaultValue: {},
92
+ source: fieldSourceSchema,
93
+ operators: {
94
+ type: "array",
95
+ items: { enum: ["eq", "neq", "in", "contains", "gt", "gte", "lt", "lte"] },
96
+ },
97
+ range: {
98
+ type: "object",
99
+ additionalProperties: true,
100
+ properties: {
101
+ min: { anyOf: [{ type: "number" }, { type: "string" }] },
102
+ max: { anyOf: [{ type: "number" }, { type: "string" }] },
103
+ step: { type: "number" },
104
+ },
105
+ },
106
+ dependsOn: { type: "string" },
107
+ required: { type: "boolean" },
108
+ collapsed: { type: "boolean" },
109
+ metadata: { type: "object", additionalProperties: true },
110
+ },
111
+ },
112
+ },
113
+ groups: {
114
+ type: "array",
115
+ items: {
116
+ type: "object",
117
+ additionalProperties: true,
118
+ required: ["key", "label", "filters"],
119
+ properties: {
120
+ key: { type: "string" },
121
+ label: { type: "string" },
122
+ collapsed: { type: "boolean" },
123
+ filters: { type: "array", items: { type: "string" } },
124
+ metadata: { type: "object", additionalProperties: true },
125
+ },
126
+ },
127
+ },
128
+ layout: { enum: ["sidebar", "toolbar", "drawer"] },
129
+ persistSelection: { type: "boolean" },
130
+ metadata: { type: "object", additionalProperties: true },
131
+ },
132
+ };
133
+ export const catalogPresentationSpecSchema = {
134
+ type: "object",
135
+ additionalProperties: true,
136
+ required: ["fields"],
137
+ properties: {
138
+ fields: {
139
+ type: "array",
140
+ items: {
141
+ type: "object",
142
+ additionalProperties: true,
143
+ required: ["fieldPath"],
144
+ properties: {
145
+ fieldPath: { type: "string" },
146
+ label: { type: "string" },
147
+ description: { type: "string" },
148
+ renderHint: {
149
+ enum: [
150
+ "text",
151
+ "number",
152
+ "currency",
153
+ "percentage",
154
+ "date",
155
+ "datetime",
156
+ "relative-time",
157
+ "badge",
158
+ "tag",
159
+ "status-dot",
160
+ "avatar",
161
+ "image",
162
+ "thumbnail",
163
+ "link",
164
+ "email",
165
+ "phone",
166
+ "progress",
167
+ "rating",
168
+ "code",
169
+ "markdown",
170
+ "color",
171
+ "boolean",
172
+ "json",
173
+ "key-value",
174
+ "list",
175
+ ],
176
+ },
177
+ format: { type: "string" },
178
+ emptyText: { type: "string" },
179
+ truncate: { type: "number" },
180
+ copyable: { type: "boolean" },
181
+ colorMap: { type: "object", additionalProperties: { type: "string" } },
182
+ source: fieldSourceSchema,
183
+ edit: {
184
+ type: "object",
185
+ additionalProperties: true,
186
+ required: ["inputType"],
187
+ properties: {
188
+ enabled: { type: "boolean" },
189
+ inputType: {
190
+ enum: [
191
+ "text",
192
+ "textarea",
193
+ "number",
194
+ "select",
195
+ "multi-select",
196
+ "date",
197
+ "datetime",
198
+ "toggle",
199
+ "color",
200
+ "slider",
201
+ "autocomplete",
202
+ "tags",
203
+ "rich-text",
204
+ "code",
205
+ "file",
206
+ "hidden",
207
+ ],
208
+ },
209
+ placeholder: { type: "string" },
210
+ helperText: { type: "string" },
211
+ dependsOn: { type: "string" },
212
+ validation: {
213
+ type: "object",
214
+ additionalProperties: true,
215
+ properties: {
216
+ required: { type: "boolean" },
217
+ min: { type: "number" },
218
+ max: { type: "number" },
219
+ minLength: { type: "number" },
220
+ maxLength: { type: "number" },
221
+ pattern: { type: "string" },
222
+ patternMessage: { type: "string" },
223
+ },
224
+ },
225
+ metadata: { type: "object", additionalProperties: true },
226
+ },
227
+ },
228
+ metadata: { type: "object", additionalProperties: true },
229
+ },
230
+ },
231
+ },
232
+ defaultContext: { enum: ["grid", "list", "cards"] },
233
+ allowContextSwitch: { type: "boolean" },
234
+ density: { enum: ["compact", "default", "comfortable"] },
235
+ pageSize: { type: "number" },
236
+ pageSizeOptions: { type: "array", items: { type: "number" } },
237
+ showSearch: { type: "boolean" },
238
+ searchFields: { type: "array", items: { type: "string" } },
239
+ emptyState: {
240
+ type: "object",
241
+ additionalProperties: true,
242
+ required: ["title"],
243
+ properties: {
244
+ title: { type: "string" },
245
+ description: { type: "string" },
246
+ icon: { type: "string" },
247
+ metadata: { type: "object", additionalProperties: true },
248
+ },
249
+ },
250
+ grid: {
251
+ type: "object",
252
+ additionalProperties: true,
253
+ required: ["columns"],
254
+ properties: {
255
+ columns: {
256
+ type: "array",
257
+ items: {
258
+ type: "object",
259
+ additionalProperties: true,
260
+ required: ["fieldPath"],
261
+ properties: {
262
+ fieldPath: { type: "string" },
263
+ width: { enum: ["auto", "sm", "md", "lg", "xl", "fill"] },
264
+ pinned: { enum: ["left", "right"] },
265
+ sortable: { type: "boolean" },
266
+ metadata: { type: "object", additionalProperties: true },
267
+ },
268
+ },
269
+ },
270
+ rowHeight: { enum: ["compact", "default", "comfortable"] },
271
+ editableInline: { type: "boolean" },
272
+ showRowNumbers: { type: "boolean" },
273
+ metadata: { type: "object", additionalProperties: true },
274
+ },
275
+ },
276
+ list: {
277
+ type: "object",
278
+ additionalProperties: true,
279
+ required: ["primaryField"],
280
+ properties: {
281
+ primaryField: { type: "string" },
282
+ secondaryField: { type: "string" },
283
+ tertiaryField: { type: "string" },
284
+ trailingField: { type: "string" },
285
+ avatar: { type: "string" },
286
+ metadata: { type: "object", additionalProperties: true },
287
+ },
288
+ },
289
+ cards: {
290
+ type: "object",
291
+ additionalProperties: true,
292
+ required: ["title"],
293
+ properties: {
294
+ title: { type: "string" },
295
+ subtitle: { type: "string" },
296
+ image: { type: "string" },
297
+ badge: { type: "string" },
298
+ body: { type: "array", items: { type: "string" } },
299
+ footer: { type: "array", items: { type: "string" } },
300
+ size: { enum: ["sm", "md", "lg"] },
301
+ aspectRatio: { enum: ["square", "landscape", "portrait"] },
302
+ metadata: { type: "object", additionalProperties: true },
303
+ },
304
+ },
305
+ form: {
306
+ type: "object",
307
+ additionalProperties: true,
308
+ required: ["sections"],
309
+ properties: {
310
+ sections: {
311
+ type: "array",
312
+ items: {
313
+ type: "object",
314
+ additionalProperties: true,
315
+ required: ["key", "label", "fields"],
316
+ properties: {
317
+ key: { type: "string" },
318
+ label: { type: "string" },
319
+ description: { type: "string" },
320
+ fields: {
321
+ type: "array",
322
+ items: {
323
+ type: "object",
324
+ additionalProperties: true,
325
+ required: ["fieldPath"],
326
+ properties: {
327
+ fieldPath: { type: "string" },
328
+ span: { enum: [1, 2, 3, 4] },
329
+ viewOnly: { type: "boolean" },
330
+ editOnly: { type: "boolean" },
331
+ metadata: { type: "object", additionalProperties: true },
332
+ },
333
+ },
334
+ },
335
+ collapsible: { type: "boolean" },
336
+ collapsed: { type: "boolean" },
337
+ columns: { enum: [1, 2, 3, 4] },
338
+ metadata: { type: "object", additionalProperties: true },
339
+ },
340
+ },
341
+ },
342
+ tabs: {
343
+ type: "array",
344
+ items: {
345
+ type: "object",
346
+ additionalProperties: true,
347
+ required: ["key", "label", "sections"],
348
+ properties: {
349
+ key: { type: "string" },
350
+ label: { type: "string" },
351
+ icon: { type: "string" },
352
+ sections: { type: "array", items: { type: "string" } },
353
+ badge: {
354
+ type: "object",
355
+ additionalProperties: true,
356
+ required: ["fieldPath"],
357
+ properties: { fieldPath: { type: "string" } },
358
+ },
359
+ metadata: { type: "object", additionalProperties: true },
360
+ },
361
+ },
362
+ },
363
+ columns: { enum: [1, 2, 3, 4] },
364
+ headerFields: {
365
+ type: "object",
366
+ additionalProperties: true,
367
+ required: ["title"],
368
+ properties: {
369
+ title: { type: "string" },
370
+ subtitle: { type: "string" },
371
+ status: { type: "string" },
372
+ avatar: { type: "string" },
373
+ metadata: { type: "object", additionalProperties: true },
374
+ },
375
+ },
376
+ actionsPlacement: { enum: ["header", "footer", "both"] },
377
+ metadata: { type: "object", additionalProperties: true },
378
+ },
379
+ },
380
+ metadata: { type: "object", additionalProperties: true },
381
+ },
382
+ };
383
+ export const catalogCustomRendererSchema = {
384
+ type: "object",
385
+ additionalProperties: true,
386
+ properties: {
387
+ list: {
388
+ type: "object",
389
+ additionalProperties: true,
390
+ required: ["component"],
391
+ properties: {
392
+ component: { type: "string" },
393
+ props: { type: "object", additionalProperties: true },
394
+ receiveMap: { enum: ["full", "minimal"] },
395
+ },
396
+ },
397
+ item: {
398
+ type: "object",
399
+ additionalProperties: true,
400
+ required: ["component"],
401
+ properties: {
402
+ component: { type: "string" },
403
+ props: { type: "object", additionalProperties: true },
404
+ receiveMap: { enum: ["full", "minimal"] },
405
+ },
406
+ },
407
+ metadata: { type: "object", additionalProperties: true },
408
+ },
409
+ };
410
+ export const catalogListRenderMapSchema = {
411
+ type: "object",
412
+ additionalProperties: true,
413
+ required: ["catalogId", "label", "items", "resolvedSources", "filters", "pagination", "selection", "capabilities", "context", "actions"],
414
+ properties: {
415
+ catalogId: { type: "string" },
416
+ label: { type: "string" },
417
+ itemLabel: { type: "string" },
418
+ items: {
419
+ type: "array",
420
+ items: {
421
+ type: "object",
422
+ additionalProperties: true,
423
+ required: ["itemId", "data"],
424
+ properties: {
425
+ itemId: { type: "string" },
426
+ data: { type: "object", additionalProperties: true },
427
+ title: { type: "string" },
428
+ subtitle: { type: "string" },
429
+ status: { type: "string" },
430
+ metadata: { type: "object", additionalProperties: true },
431
+ },
432
+ },
433
+ },
434
+ total: { type: "number" },
435
+ resolvedSources: {
436
+ type: "object",
437
+ additionalProperties: {
438
+ type: "array",
439
+ items: {
440
+ type: "object",
441
+ additionalProperties: true,
442
+ required: ["value", "label"],
443
+ properties: {
444
+ value: { anyOf: [{ type: "string" }, { type: "number" }] },
445
+ label: { type: "string" },
446
+ icon: { type: "string" },
447
+ color: { type: "string" },
448
+ metadata: { type: "object", additionalProperties: true },
449
+ },
450
+ },
451
+ },
452
+ },
453
+ filters: {
454
+ type: "object",
455
+ additionalProperties: true,
456
+ required: ["active"],
457
+ properties: {
458
+ active: { type: "object", additionalProperties: true },
459
+ spec: catalogFilterSpecSchema,
460
+ },
461
+ },
462
+ sort: {
463
+ anyOf: [
464
+ { type: "null" },
465
+ {
466
+ type: "object",
467
+ additionalProperties: true,
468
+ required: ["field", "direction"],
469
+ properties: { field: { type: "string" }, direction: { enum: ["asc", "desc"] } },
470
+ },
471
+ ],
472
+ },
473
+ pagination: {
474
+ type: "object",
475
+ additionalProperties: true,
476
+ required: ["page", "pageSize", "hasMore"],
477
+ properties: {
478
+ page: { type: "number" },
479
+ pageSize: { type: "number" },
480
+ hasMore: { type: "boolean" },
481
+ },
482
+ },
483
+ selection: { type: "array", items: { type: "string" } },
484
+ presentation: catalogPresentationSpecSchema,
485
+ capabilities: { type: "object", additionalProperties: true },
486
+ context: {
487
+ type: "object",
488
+ additionalProperties: true,
489
+ required: ["mode", "displayContext"],
490
+ properties: {
491
+ mode: { enum: ["view", "edit"] },
492
+ displayContext: { enum: ["grid", "list", "cards"] },
493
+ },
494
+ },
495
+ actions: { type: "object", additionalProperties: true },
496
+ metadata: { type: "object", additionalProperties: true },
497
+ },
498
+ };
499
+ export const catalogItemRenderMapSchema = {
500
+ type: "object",
501
+ additionalProperties: true,
502
+ required: ["catalogId", "itemId", "item", "resolvedSources", "capabilities", "context", "actions"],
503
+ properties: {
504
+ catalogId: { type: "string" },
505
+ itemId: { type: "string" },
506
+ item: {
507
+ type: "object",
508
+ additionalProperties: true,
509
+ required: ["data"],
510
+ properties: {
511
+ data: { type: "object", additionalProperties: true },
512
+ title: { type: "string" },
513
+ subtitle: { type: "string" },
514
+ status: { type: "string" },
515
+ metadata: { type: "object", additionalProperties: true },
516
+ createdAt: { type: "string" },
517
+ updatedAt: { type: "string" },
518
+ },
519
+ },
520
+ resolvedSources: catalogListRenderMapSchema.properties.resolvedSources,
521
+ references: { type: "array", items: { type: "object", additionalProperties: true } },
522
+ presentation: catalogPresentationSpecSchema,
523
+ capabilities: { type: "object", additionalProperties: true },
524
+ context: {
525
+ type: "object",
526
+ additionalProperties: true,
527
+ required: ["mode", "displayContext"],
528
+ properties: {
529
+ mode: { enum: ["view", "edit"] },
530
+ displayContext: { enum: ["form", "card", "grid-row", "list-row"] },
531
+ dirty: { type: "boolean" },
532
+ },
533
+ },
534
+ validation: {
535
+ type: "object",
536
+ additionalProperties: true,
537
+ required: ["isValid", "fieldErrors"],
538
+ properties: {
539
+ isValid: { type: "boolean" },
540
+ fieldErrors: { type: "object", additionalProperties: { type: "string" } },
541
+ },
542
+ },
543
+ actions: { type: "object", additionalProperties: true },
544
+ metadata: { type: "object", additionalProperties: true },
545
+ },
546
+ };
547
+ //# sourceMappingURL=ui-spec-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui-spec-schema.js","sourceRoot":"","sources":["../../../src/validation/ui-spec-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export type UiSpecValidationError = {
2
+ path: string;
3
+ message: string;
4
+ };
5
+ export type UiSpecValidationResult = {
6
+ isValid: boolean;
7
+ errors: UiSpecValidationError[];
8
+ };
9
+ export declare function validateCatalogFilterSpec(filterSpec: unknown): UiSpecValidationResult;
10
+ export declare function validateCatalogPresentationSpec(presentationSpec: unknown): UiSpecValidationResult;
11
+ export declare function validateCatalogCustomRenderer(customRenderer: unknown): UiSpecValidationResult;
12
+ export declare function validateCatalogListRenderMap(map: unknown): UiSpecValidationResult;
13
+ export declare function validateCatalogItemRenderMap(map: unknown): UiSpecValidationResult;
14
+ /**
15
+ * Convenience validator for backoffice systems validating a persisted CatalogDescriptor.
16
+ * Only validates the optional UI-related portions if present.
17
+ */
18
+ export declare function validateCatalogDescriptorUiSpec(descriptor: unknown): UiSpecValidationResult;
19
+ //# sourceMappingURL=ui-spec-validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui-spec-validate.d.ts","sourceRoot":"","sources":["../../../src/validation/ui-spec-validate.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,qBAAqB,EAAE,CAAC;CACjC,CAAC;AAiCF,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,OAAO,GAAG,sBAAsB,CAErF;AAED,wBAAgB,+BAA+B,CAAC,gBAAgB,EAAE,OAAO,GAAG,sBAAsB,CAEjG;AAED,wBAAgB,6BAA6B,CAAC,cAAc,EAAE,OAAO,GAAG,sBAAsB,CAE7F;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,OAAO,GAAG,sBAAsB,CAEjF;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,OAAO,GAAG,sBAAsB,CAEjF;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAAC,UAAU,EAAE,OAAO,GAAG,sBAAsB,CAsB3F"}
@@ -0,0 +1,69 @@
1
+ import AjvImport from "ajv";
2
+ import addFormatsImport from "ajv-formats";
3
+ import { catalogCustomRendererSchema, catalogFilterSpecSchema, catalogItemRenderMapSchema, catalogListRenderMapSchema, catalogPresentationSpecSchema, } from "./ui-spec-schema.js";
4
+ function errorsFromAjv(errors) {
5
+ if (!errors?.length)
6
+ return [];
7
+ return errors.map((e) => ({
8
+ path: (e.instancePath || e.schemaPath || "").toString(),
9
+ message: (e.message || "invalid").toString(),
10
+ }));
11
+ }
12
+ function validateWith(validator, value) {
13
+ const isValid = Boolean(validator(value));
14
+ return { isValid, errors: isValid ? [] : errorsFromAjv(validator.errors) };
15
+ }
16
+ // Keep tolerant; schemas themselves restrict known unions and required keys.
17
+ const Ajv = AjvImport.default ?? AjvImport;
18
+ const addFormats = addFormatsImport.default ?? addFormatsImport;
19
+ const ajv = new Ajv({
20
+ allErrors: true,
21
+ strict: false,
22
+ allowUnionTypes: true,
23
+ });
24
+ addFormats(ajv);
25
+ const vFilterSpec = ajv.compile(catalogFilterSpecSchema);
26
+ const vPresentationSpec = ajv.compile(catalogPresentationSpecSchema);
27
+ const vCustomRenderer = ajv.compile(catalogCustomRendererSchema);
28
+ const vListRenderMap = ajv.compile(catalogListRenderMapSchema);
29
+ const vItemRenderMap = ajv.compile(catalogItemRenderMapSchema);
30
+ export function validateCatalogFilterSpec(filterSpec) {
31
+ return validateWith(vFilterSpec, filterSpec);
32
+ }
33
+ export function validateCatalogPresentationSpec(presentationSpec) {
34
+ return validateWith(vPresentationSpec, presentationSpec);
35
+ }
36
+ export function validateCatalogCustomRenderer(customRenderer) {
37
+ return validateWith(vCustomRenderer, customRenderer);
38
+ }
39
+ export function validateCatalogListRenderMap(map) {
40
+ return validateWith(vListRenderMap, map);
41
+ }
42
+ export function validateCatalogItemRenderMap(map) {
43
+ return validateWith(vItemRenderMap, map);
44
+ }
45
+ /**
46
+ * Convenience validator for backoffice systems validating a persisted CatalogDescriptor.
47
+ * Only validates the optional UI-related portions if present.
48
+ */
49
+ export function validateCatalogDescriptorUiSpec(descriptor) {
50
+ if (!descriptor || typeof descriptor !== "object") {
51
+ return { isValid: false, errors: [{ path: "", message: "descriptor must be an object" }] };
52
+ }
53
+ const d = descriptor;
54
+ const errors = [];
55
+ if (d.filterSpec != null) {
56
+ const r = validateCatalogFilterSpec(d.filterSpec);
57
+ errors.push(...r.errors.map((e) => ({ ...e, path: `filterSpec${e.path ? ":" + e.path : ""}` })));
58
+ }
59
+ if (d.presentationSpec != null) {
60
+ const r = validateCatalogPresentationSpec(d.presentationSpec);
61
+ errors.push(...r.errors.map((e) => ({ ...e, path: `presentationSpec${e.path ? ":" + e.path : ""}` })));
62
+ }
63
+ if (d.customRenderer != null) {
64
+ const r = validateCatalogCustomRenderer(d.customRenderer);
65
+ errors.push(...r.errors.map((e) => ({ ...e, path: `customRenderer${e.path ? ":" + e.path : ""}` })));
66
+ }
67
+ return { isValid: errors.length === 0, errors };
68
+ }
69
+ //# sourceMappingURL=ui-spec-validate.js.map