@x12i/catalox 1.2.0 → 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 -406
  2. package/dist/src/catalox/catalox.d.ts +35 -1
  3. package/dist/src/catalox/catalox.d.ts.map +1 -1
  4. package/dist/src/catalox/catalox.js +460 -5
  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
@@ -6,5 +6,9 @@ export * from "./adapters/api/index.js";
6
6
  export * from "./mapping/index.js";
7
7
  export * from "./bindings/index.js";
8
8
  export * from "./validation/index.js";
9
+ export * from "./markdown/render-list-markdown.js";
10
+ export * from "./markdown/render-item-markdown.js";
11
+ export * from "./diagrams/render-catalog-diagram.js";
12
+ export * from "./diagrams/render-item-diagram.js";
9
13
  export * from "./errors/index.js";
10
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AACnD,cAAc,sCAAsC,CAAC;AACrD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mBAAmB,CAAC"}
package/dist/src/index.js CHANGED
@@ -6,5 +6,9 @@ export * from "./adapters/api/index.js";
6
6
  export * from "./mapping/index.js";
7
7
  export * from "./bindings/index.js";
8
8
  export * from "./validation/index.js";
9
+ export * from "./markdown/render-list-markdown.js";
10
+ export * from "./markdown/render-item-markdown.js";
11
+ export * from "./diagrams/render-catalog-diagram.js";
12
+ export * from "./diagrams/render-item-diagram.js";
9
13
  export * from "./errors/index.js";
10
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AACnD,cAAc,sCAAsC,CAAC;AACrD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { CatalogItemRenderMap } from "../contracts/render-map.js";
2
+ import type { BuildCatalogItemMarkdownMapOptions, CatalogItemMarkdownMap } from "../contracts/markdown-map.js";
3
+ export declare function buildCatalogItemMarkdownMap(map: CatalogItemRenderMap, options?: BuildCatalogItemMarkdownMapOptions): CatalogItemMarkdownMap;
4
+ export declare function renderCatalogItemMarkdown(doc: CatalogItemMarkdownMap): string;
5
+ //# sourceMappingURL=render-item-markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-item-markdown.d.ts","sourceRoot":"","sources":["../../../src/markdown/render-item-markdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,KAAK,EACV,kCAAkC,EAClC,sBAAsB,EAEvB,MAAM,8BAA8B,CAAC;AAatC,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,oBAAoB,EACzB,OAAO,CAAC,EAAE,kCAAkC,GAC3C,sBAAsB,CAqDxB;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,sBAAsB,GAAG,MAAM,CAoB7E"}
@@ -0,0 +1,83 @@
1
+ function toStringValue(v) {
2
+ if (v == null)
3
+ return "";
4
+ if (typeof v === "string")
5
+ return v;
6
+ if (typeof v === "number" || typeof v === "boolean")
7
+ return String(v);
8
+ try {
9
+ return JSON.stringify(v);
10
+ }
11
+ catch {
12
+ return String(v);
13
+ }
14
+ }
15
+ export function buildCatalogItemMarkdownMap(map, options) {
16
+ const blocks = [
17
+ { type: "heading", level: 1, text: map.item.title ?? `${map.catalogId}:${map.itemId}` },
18
+ {
19
+ type: "paragraph",
20
+ text: `CatalogId: ${map.catalogId} • ItemId: ${map.itemId} • Mode: ${map.context.mode}`,
21
+ },
22
+ ];
23
+ const fieldPaths = map.presentation?.form?.sections?.flatMap((s) => s.fields.map((f) => f.fieldPath)) ??
24
+ map.presentation?.fields?.map((f) => f.fieldPath) ??
25
+ [];
26
+ const unique = Array.from(new Set(fieldPaths)).filter(Boolean);
27
+ const headers = ["field", "value"];
28
+ const rows = unique.map((fp) => [fp, toStringValue(map.item.data?.[fp] ?? "")]);
29
+ blocks.push({ type: "heading", level: 2, text: "Fields" });
30
+ blocks.push({ type: "table", headers, rows });
31
+ if (options?.includeReferences && map.references?.length) {
32
+ blocks.push({ type: "heading", level: 2, text: "References" });
33
+ blocks.push({
34
+ type: "table",
35
+ headers: ["relationType", "toCatalogId", "toItemId", "label"],
36
+ rows: map.references.map((r) => [
37
+ r.relationType,
38
+ r.toCatalogId,
39
+ r.toItemId,
40
+ r.label ?? "",
41
+ ]),
42
+ });
43
+ }
44
+ if (options?.includeMetadata) {
45
+ blocks.push({ type: "heading", level: 2, text: "Metadata" });
46
+ blocks.push({
47
+ type: "code",
48
+ language: "json",
49
+ text: JSON.stringify({
50
+ context: map.context,
51
+ validation: map.validation,
52
+ }, null, 2),
53
+ });
54
+ }
55
+ return { title: map.item.title ?? `${map.catalogId}:${map.itemId}`, blocks };
56
+ }
57
+ export function renderCatalogItemMarkdown(doc) {
58
+ const out = [];
59
+ for (const b of doc.blocks) {
60
+ if (b.type === "heading")
61
+ out.push(`${"#".repeat(b.level)} ${b.text}`);
62
+ else if (b.type === "paragraph")
63
+ out.push(b.text);
64
+ else if (b.type === "list") {
65
+ const ordered = Boolean(b.ordered);
66
+ b.items.forEach((it, idx) => out.push(ordered ? `${idx + 1}. ${it}` : `- ${it}`));
67
+ }
68
+ else if (b.type === "code") {
69
+ out.push(`\`\`\`${b.language ?? ""}`.trimEnd());
70
+ out.push(b.text);
71
+ out.push("```");
72
+ }
73
+ else if (b.type === "table") {
74
+ out.push(`| ${b.headers.join(" | ")} |`);
75
+ out.push(`| ${b.headers.map(() => "---").join(" | ")} |`);
76
+ for (const r of b.rows)
77
+ out.push(`| ${r.join(" | ")} |`);
78
+ }
79
+ out.push("");
80
+ }
81
+ return out.join("\n").trimEnd() + "\n";
82
+ }
83
+ //# sourceMappingURL=render-item-markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-item-markdown.js","sourceRoot":"","sources":["../../../src/markdown/render-item-markdown.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { CatalogListRenderMap } from "../contracts/render-map.js";
2
+ import type { BuildCatalogListMarkdownMapOptions, CatalogListMarkdownMap } from "../contracts/markdown-map.js";
3
+ export declare function buildCatalogListMarkdownMap(map: CatalogListRenderMap, options?: BuildCatalogListMarkdownMapOptions): CatalogListMarkdownMap;
4
+ export declare function renderCatalogListMarkdown(doc: CatalogListMarkdownMap): string;
5
+ //# sourceMappingURL=render-list-markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-list-markdown.d.ts","sourceRoot":"","sources":["../../../src/markdown/render-list-markdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,KAAK,EACV,kCAAkC,EAClC,sBAAsB,EAEvB,MAAM,8BAA8B,CAAC;AAiBtC,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,oBAAoB,EACzB,OAAO,CAAC,EAAE,kCAAkC,GAC3C,sBAAsB,CAoDxB;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,sBAAsB,GAAG,MAAM,CAsB7E"}
@@ -0,0 +1,90 @@
1
+ function mdEscape(s) {
2
+ return s.replace(/\|/g, "\\|").replace(/\r?\n/g, " ");
3
+ }
4
+ function toStringValue(v) {
5
+ if (v == null)
6
+ return "";
7
+ if (typeof v === "string")
8
+ return v;
9
+ if (typeof v === "number" || typeof v === "boolean")
10
+ return String(v);
11
+ try {
12
+ return JSON.stringify(v);
13
+ }
14
+ catch {
15
+ return String(v);
16
+ }
17
+ }
18
+ export function buildCatalogListMarkdownMap(map, options) {
19
+ const maxRows = options?.maxRows ?? 50;
20
+ const blocks = [
21
+ { type: "heading", level: 1, text: map.label },
22
+ {
23
+ type: "paragraph",
24
+ text: `CatalogId: ${map.catalogId}${map.total != null ? ` • Total: ${map.total}` : ""}`,
25
+ },
26
+ ];
27
+ const columns = map.presentation?.grid?.columns?.map((c) => c.fieldPath) ??
28
+ map.presentation?.fields?.slice(0, 8).map((f) => f.fieldPath) ??
29
+ [];
30
+ const headers = ["itemId", ...(columns.length ? columns : ["title", "subtitle", "status"])];
31
+ const rows = map.items.slice(0, maxRows).map((it) => {
32
+ const base = [it.itemId];
33
+ const fields = headers.slice(1).map((fp) => {
34
+ if (fp === "title")
35
+ return toStringValue(it.title);
36
+ if (fp === "subtitle")
37
+ return toStringValue(it.subtitle);
38
+ if (fp === "status")
39
+ return toStringValue(it.status);
40
+ const v = it.data?.[fp];
41
+ return toStringValue(v);
42
+ });
43
+ return [...base, ...fields].map((s) => mdEscape(String(s)));
44
+ });
45
+ blocks.push({ type: "heading", level: 2, text: "Items" });
46
+ blocks.push({ type: "table", headers, rows });
47
+ if (options?.includeMetadata) {
48
+ blocks.push({ type: "heading", level: 2, text: "Metadata" });
49
+ blocks.push({
50
+ type: "code",
51
+ language: "json",
52
+ text: JSON.stringify({
53
+ filters: map.filters?.active ?? {},
54
+ sort: map.sort,
55
+ selection: map.selection,
56
+ context: map.context,
57
+ }, null, 2),
58
+ });
59
+ }
60
+ return { title: map.label, blocks };
61
+ }
62
+ export function renderCatalogListMarkdown(doc) {
63
+ const out = [];
64
+ for (const b of doc.blocks) {
65
+ if (b.type === "heading")
66
+ out.push(`${"#".repeat(b.level)} ${b.text}`);
67
+ else if (b.type === "paragraph")
68
+ out.push(b.text);
69
+ else if (b.type === "list") {
70
+ const ordered = Boolean(b.ordered);
71
+ b.items.forEach((it, idx) => {
72
+ out.push(ordered ? `${idx + 1}. ${it}` : `- ${it}`);
73
+ });
74
+ }
75
+ else if (b.type === "code") {
76
+ out.push(`\`\`\`${b.language ?? ""}`.trimEnd());
77
+ out.push(b.text);
78
+ out.push("```");
79
+ }
80
+ else if (b.type === "table") {
81
+ out.push(`| ${b.headers.join(" | ")} |`);
82
+ out.push(`| ${b.headers.map(() => "---").join(" | ")} |`);
83
+ for (const r of b.rows)
84
+ out.push(`| ${r.join(" | ")} |`);
85
+ }
86
+ out.push("");
87
+ }
88
+ return out.join("\n").trimEnd() + "\n";
89
+ }
90
+ //# sourceMappingURL=render-list-markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-list-markdown.js","sourceRoot":"","sources":["../../../src/markdown/render-list-markdown.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,4 @@
1
- export {};
1
+ export { validateCatalogDescriptorUiSpec, validateCatalogFilterSpec, validateCatalogPresentationSpec, validateCatalogCustomRenderer, validateCatalogListRenderMap, validateCatalogItemRenderMap, } from "./ui-spec-validate.js";
2
+ export type { UiSpecValidationError, UiSpecValidationResult } from "./ui-spec-validate.js";
3
+ export { fieldSourceSchema, catalogFilterSpecSchema, catalogPresentationSpecSchema, catalogCustomRendererSchema, catalogListRenderMapSchema, catalogItemRenderMapSchema, } from "./ui-spec-schema.js";
2
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/validation/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/validation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,+BAA+B,EAC/B,yBAAyB,EACzB,+BAA+B,EAC/B,6BAA6B,EAC7B,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE3F,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,6BAA6B,EAC7B,2BAA2B,EAC3B,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,qBAAqB,CAAC"}
@@ -1,3 +1,3 @@
1
- // Validation utilities will live here.
2
- export {};
1
+ export { validateCatalogDescriptorUiSpec, validateCatalogFilterSpec, validateCatalogPresentationSpec, validateCatalogCustomRenderer, validateCatalogListRenderMap, validateCatalogItemRenderMap, } from "./ui-spec-validate.js";
2
+ export { fieldSourceSchema, catalogFilterSpecSchema, catalogPresentationSpecSchema, catalogCustomRendererSchema, catalogListRenderMapSchema, catalogItemRenderMapSchema, } from "./ui-spec-schema.js";
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/validation/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/validation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,+BAA+B,EAC/B,yBAAyB,EACzB,+BAA+B,EAC/B,6BAA6B,EAC7B,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,6BAA6B,EAC7B,2BAA2B,EAC3B,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { AnySchema } from "ajv";
2
+ /**
3
+ * JSON Schemas for validating descriptor UI specs and renderer maps.
4
+ *
5
+ * These schemas are intended for server/backoffice systems validating JSON
6
+ * loaded from databases or API calls.
7
+ *
8
+ * Design goals:
9
+ * - validate discriminated unions (e.g. FieldSource.type)
10
+ * - validate required keys and primitive types
11
+ * - remain forward-compatible (allow unknown keys where safe)
12
+ */
13
+ export declare const fieldSourceSchema: AnySchema;
14
+ export declare const catalogFilterSpecSchema: AnySchema;
15
+ export declare const catalogPresentationSpecSchema: AnySchema;
16
+ export declare const catalogCustomRendererSchema: AnySchema;
17
+ export declare const catalogListRenderMapSchema: AnySchema;
18
+ export declare const catalogItemRenderMapSchema: AnySchema;
19
+ //# sourceMappingURL=ui-spec-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui-spec-schema.d.ts","sourceRoot":"","sources":["../../../src/validation/ui-spec-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAErC;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,iBAAiB,EAAE,SA2DtB,CAAC;AAEX,eAAO,MAAM,uBAAuB,EAAE,SA4D5B,CAAC;AAEX,eAAO,MAAM,6BAA6B,EAAE,SAyPlC,CAAC;AAEX,eAAO,MAAM,2BAA2B,EAAE,SA0BhC,CAAC;AAEX,eAAO,MAAM,0BAA0B,EAAE,SAwF/B,CAAC;AAEX,eAAO,MAAM,0BAA0B,EAAE,SA+C/B,CAAC"}