@watt42/a2ui-component-catalog 0.1.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 (43) hide show
  1. package/README.md +33 -0
  2. package/catalog.json +817 -0
  3. package/dist/catalogCompatibility.d.ts +8 -0
  4. package/dist/catalogCompatibility.d.ts.map +1 -0
  5. package/dist/catalogCompatibility.js +24 -0
  6. package/dist/catalogCompatibility.js.map +1 -0
  7. package/dist/catalogTypes.d.ts +35 -0
  8. package/dist/catalogTypes.d.ts.map +1 -0
  9. package/dist/catalogTypes.js +4 -0
  10. package/dist/catalogTypes.js.map +1 -0
  11. package/dist/contract/index.d.ts +3 -0
  12. package/dist/contract/index.d.ts.map +1 -0
  13. package/dist/contract/index.js +2 -0
  14. package/dist/contract/index.js.map +1 -0
  15. package/dist/contract/sharedSchemas.d.ts +6 -0
  16. package/dist/contract/sharedSchemas.d.ts.map +1 -0
  17. package/dist/contract/sharedSchemas.js +38 -0
  18. package/dist/contract/sharedSchemas.js.map +1 -0
  19. package/dist/contract/types.d.ts +57 -0
  20. package/dist/contract/types.d.ts.map +1 -0
  21. package/dist/contract/types.js +3 -0
  22. package/dist/contract/types.js.map +1 -0
  23. package/dist/contract/validateManifest.d.ts +5 -0
  24. package/dist/contract/validateManifest.d.ts.map +1 -0
  25. package/dist/contract/validateManifest.js +107 -0
  26. package/dist/contract/validateManifest.js.map +1 -0
  27. package/dist/generateCatalog.d.ts +9 -0
  28. package/dist/generateCatalog.d.ts.map +1 -0
  29. package/dist/generateCatalog.js +76 -0
  30. package/dist/generateCatalog.js.map +1 -0
  31. package/dist/index.d.ts +14 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +27 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/validate.d.ts +3 -0
  36. package/dist/validate.d.ts.map +1 -0
  37. package/dist/validate.js +17 -0
  38. package/dist/validate.js.map +1 -0
  39. package/dist/validateProps.d.ts +3 -0
  40. package/dist/validateProps.d.ts.map +1 -0
  41. package/dist/validateProps.js +101 -0
  42. package/dist/validateProps.js.map +1 -0
  43. package/package.json +33 -0
@@ -0,0 +1,101 @@
1
+ function typeName(value) {
2
+ if (value === null)
3
+ return "null";
4
+ if (Array.isArray(value))
5
+ return "array";
6
+ return typeof value;
7
+ }
8
+ function isBindingContract(value) {
9
+ return (typeof value === "object" &&
10
+ value !== null &&
11
+ "path" in value &&
12
+ typeof value.path === "string" &&
13
+ Boolean(String(value.path).trim()));
14
+ }
15
+ function matchesType(expected, value) {
16
+ if (!expected)
17
+ return true;
18
+ if (expected === "string")
19
+ return typeof value === "string" || isBindingContract(value);
20
+ if (expected === "boolean")
21
+ return typeof value === "boolean";
22
+ if (expected === "number")
23
+ return typeof value === "number" && Number.isFinite(value);
24
+ if (expected === "array")
25
+ return Array.isArray(value);
26
+ if (expected === "object")
27
+ return typeof value === "object" && value !== null && !Array.isArray(value);
28
+ return true;
29
+ }
30
+ function validateValue(path, definition, value) {
31
+ const errors = [];
32
+ if (!matchesType(definition.type, value)) {
33
+ errors.push(`${path}: expected ${definition.type}, got ${typeName(value)}`);
34
+ return errors;
35
+ }
36
+ if (definition.enum && !definition.enum.includes(value)) {
37
+ errors.push(`${path}: value ${JSON.stringify(value)} is not one of ${definition.enum.map((item) => JSON.stringify(item)).join(", ")}`);
38
+ }
39
+ if (definition.type === "array" && Array.isArray(value)) {
40
+ if (definition.required && value.length === 0) {
41
+ errors.push(`${path}: array must not be empty`);
42
+ }
43
+ if (definition.items) {
44
+ value.forEach((item, index) => {
45
+ errors.push(...validateValue(`${path}[${index}]`, definition.items, item));
46
+ });
47
+ }
48
+ }
49
+ if (definition.type === "object" &&
50
+ value &&
51
+ typeof value === "object" &&
52
+ !Array.isArray(value)) {
53
+ const nested = definition.properties ?? {};
54
+ const record = value;
55
+ for (const [key, sub] of Object.entries(nested)) {
56
+ if (sub.required && !(key in record)) {
57
+ errors.push(`${path}.${key}: required`);
58
+ }
59
+ else if (key in record) {
60
+ errors.push(...validateValue(`${path}.${key}`, sub, record[key]));
61
+ }
62
+ }
63
+ for (const key of Object.keys(record)) {
64
+ if (!(key in nested) && Object.keys(nested).length > 0) {
65
+ errors.push(`${path}.${key}: unknown property`);
66
+ }
67
+ }
68
+ }
69
+ return errors;
70
+ }
71
+ export function validateComponentProps(definition, props) {
72
+ const errors = [];
73
+ for (const [key, value] of Object.entries(props)) {
74
+ const propDef = definition.props[key];
75
+ if (!propDef) {
76
+ errors.push(`Unknown prop '${key}' on ${definition.name}`);
77
+ continue;
78
+ }
79
+ errors.push(...validateValue(`${definition.name}.${key}`, propDef, value));
80
+ }
81
+ for (const [key, propDef] of Object.entries(definition.props)) {
82
+ if (propDef.required && !(key in props)) {
83
+ errors.push(`${definition.name}.${key}: required`);
84
+ }
85
+ }
86
+ if (definition.allowedChildren === "none" && "children" in props) {
87
+ errors.push(`${definition.name} does not allow children`);
88
+ }
89
+ if (definition.name === "Chart") {
90
+ const categories = props.categories;
91
+ const series = props.series;
92
+ if (Array.isArray(categories) && categories.length === 0) {
93
+ errors.push("Chart.categories: array must not be empty");
94
+ }
95
+ if (Array.isArray(series) && series.length === 0) {
96
+ errors.push("Chart.series: array must not be empty");
97
+ }
98
+ }
99
+ return errors;
100
+ }
101
+ //# sourceMappingURL=validateProps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateProps.js","sourceRoot":"","sources":["../src/validateProps.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@watt42/a2ui-component-catalog",
3
+ "version": "0.1.0",
4
+ "private": false,
5
+ "type": "module",
6
+ "description": "A2UI component metadata source of truth",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "catalog.json"
18
+ ],
19
+ "scripts": {
20
+ "build": "tsc -p tsconfig.build.json",
21
+ "prepublishOnly": "npm run build",
22
+ "generate:catalog": "tsx scripts/generate-catalog.ts",
23
+ "check:catalog-drift": "tsx scripts/check-catalog-drift.ts",
24
+ "test": "tsx --test test/**/*.test.ts",
25
+ "typecheck": "tsc --noEmit"
26
+ },
27
+ "devDependencies": {
28
+ "typescript": "^5.8.2"
29
+ },
30
+ "publishConfig": {
31
+ "access": "public"
32
+ }
33
+ }