@kurot/ui-document 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.
- package/LICENSE +21 -0
- package/README.md +152 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/kurot/catalog/index.d.ts +2 -0
- package/dist/kurot/catalog/index.d.ts.map +1 -0
- package/dist/kurot/catalog/index.js +2 -0
- package/dist/kurot/catalog/index.js.map +1 -0
- package/dist/kurot/catalog/kurot-ui-foundation.d.ts +10 -0
- package/dist/kurot/catalog/kurot-ui-foundation.d.ts.map +1 -0
- package/dist/kurot/catalog/kurot-ui-foundation.js +91 -0
- package/dist/kurot/catalog/kurot-ui-foundation.js.map +1 -0
- package/dist/kurot/catalog/properties/basic-component-properties.d.ts +22 -0
- package/dist/kurot/catalog/properties/basic-component-properties.d.ts.map +1 -0
- package/dist/kurot/catalog/properties/basic-component-properties.js +171 -0
- package/dist/kurot/catalog/properties/basic-component-properties.js.map +1 -0
- package/dist/kurot/catalog/properties/foundation-properties.d.ts +14 -0
- package/dist/kurot/catalog/properties/foundation-properties.d.ts.map +1 -0
- package/dist/kurot/catalog/properties/foundation-properties.js +215 -0
- package/dist/kurot/catalog/properties/foundation-properties.js.map +1 -0
- package/dist/kurot/document/create.d.ts +46 -0
- package/dist/kurot/document/create.d.ts.map +1 -0
- package/dist/kurot/document/create.js +33 -0
- package/dist/kurot/document/create.js.map +1 -0
- package/dist/kurot/document/index.d.ts +4 -0
- package/dist/kurot/document/index.d.ts.map +1 -0
- package/dist/kurot/document/index.js +3 -0
- package/dist/kurot/document/index.js.map +1 -0
- package/dist/kurot/document/query.d.ts +10 -0
- package/dist/kurot/document/query.d.ts.map +1 -0
- package/dist/kurot/document/query.js +23 -0
- package/dist/kurot/document/query.js.map +1 -0
- package/dist/kurot/model/UIDocument.d.ts +27 -0
- package/dist/kurot/model/UIDocument.d.ts.map +1 -0
- package/dist/kurot/model/UIDocument.js +5 -0
- package/dist/kurot/model/UIDocument.js.map +1 -0
- package/dist/kurot/model/UINode.d.ts +23 -0
- package/dist/kurot/model/UINode.d.ts.map +1 -0
- package/dist/kurot/model/UINode.js +2 -0
- package/dist/kurot/model/UINode.js.map +1 -0
- package/dist/kurot/model/UIPropertyValue.d.ts +16 -0
- package/dist/kurot/model/UIPropertyValue.d.ts.map +1 -0
- package/dist/kurot/model/UIPropertyValue.js +2 -0
- package/dist/kurot/model/UIPropertyValue.js.map +1 -0
- package/dist/kurot/model/index.d.ts +5 -0
- package/dist/kurot/model/index.d.ts.map +1 -0
- package/dist/kurot/model/index.js +2 -0
- package/dist/kurot/model/index.js.map +1 -0
- package/dist/kurot/schema/UIComponentDefinition.d.ts +130 -0
- package/dist/kurot/schema/UIComponentDefinition.d.ts.map +1 -0
- package/dist/kurot/schema/UIComponentDefinition.js +2 -0
- package/dist/kurot/schema/UIComponentDefinition.js.map +1 -0
- package/dist/kurot/schema/UIComponentRegistry.d.ts +33 -0
- package/dist/kurot/schema/UIComponentRegistry.d.ts.map +1 -0
- package/dist/kurot/schema/UIComponentRegistry.js +127 -0
- package/dist/kurot/schema/UIComponentRegistry.js.map +1 -0
- package/dist/kurot/schema/UIComponentResolutionError.d.ts +19 -0
- package/dist/kurot/schema/UIComponentResolutionError.d.ts.map +1 -0
- package/dist/kurot/schema/UIComponentResolutionError.js +20 -0
- package/dist/kurot/schema/UIComponentResolutionError.js.map +1 -0
- package/dist/kurot/schema/index.d.ts +6 -0
- package/dist/kurot/schema/index.d.ts.map +1 -0
- package/dist/kurot/schema/index.js +4 -0
- package/dist/kurot/schema/index.js.map +1 -0
- package/dist/kurot/schema/validateComponentDefinition.d.ts +6 -0
- package/dist/kurot/schema/validateComponentDefinition.d.ts.map +1 -0
- package/dist/kurot/schema/validateComponentDefinition.js +145 -0
- package/dist/kurot/schema/validateComponentDefinition.js.map +1 -0
- package/dist/kurot/schema/validateUIDocumentComponents.d.ts +9 -0
- package/dist/kurot/schema/validateUIDocumentComponents.d.ts.map +1 -0
- package/dist/kurot/schema/validateUIDocumentComponents.js +135 -0
- package/dist/kurot/schema/validateUIDocumentComponents.js.map +1 -0
- package/dist/kurot/serialization/UIDocumentParseError.d.ts +12 -0
- package/dist/kurot/serialization/UIDocumentParseError.d.ts.map +1 -0
- package/dist/kurot/serialization/UIDocumentParseError.js +16 -0
- package/dist/kurot/serialization/UIDocumentParseError.js.map +1 -0
- package/dist/kurot/serialization/UIDocumentValidationError.d.ts +12 -0
- package/dist/kurot/serialization/UIDocumentValidationError.d.ts.map +1 -0
- package/dist/kurot/serialization/UIDocumentValidationError.js +16 -0
- package/dist/kurot/serialization/UIDocumentValidationError.js.map +1 -0
- package/dist/kurot/serialization/index.d.ts +4 -0
- package/dist/kurot/serialization/index.d.ts.map +1 -0
- package/dist/kurot/serialization/index.js +4 -0
- package/dist/kurot/serialization/index.js.map +1 -0
- package/dist/kurot/serialization/json.d.ts +10 -0
- package/dist/kurot/serialization/json.d.ts.map +1 -0
- package/dist/kurot/serialization/json.js +78 -0
- package/dist/kurot/serialization/json.js.map +1 -0
- package/dist/kurot/validation/UIDiagnostic.d.ts +30 -0
- package/dist/kurot/validation/UIDiagnostic.d.ts.map +1 -0
- package/dist/kurot/validation/UIDiagnostic.js +2 -0
- package/dist/kurot/validation/UIDiagnostic.js.map +1 -0
- package/dist/kurot/validation/index.d.ts +3 -0
- package/dist/kurot/validation/index.d.ts.map +1 -0
- package/dist/kurot/validation/index.js +2 -0
- package/dist/kurot/validation/index.js.map +1 -0
- package/dist/kurot/validation/validateUIDocument.d.ts +11 -0
- package/dist/kurot/validation/validateUIDocument.d.ts.map +1 -0
- package/dist/kurot/validation/validateUIDocument.js +143 -0
- package/dist/kurot/validation/validateUIDocument.js.map +1 -0
- package/dist/kurot/version.d.ts +5 -0
- package/dist/kurot/version.d.ts.map +1 -0
- package/dist/kurot/version.js +5 -0
- package/dist/kurot/version.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error raised when an in-memory document cannot be safely serialized.
|
|
3
|
+
*/
|
|
4
|
+
export class UIDocumentValidationError extends Error {
|
|
5
|
+
/**
|
|
6
|
+
* Structured failures suitable for editor and Agent feedback.
|
|
7
|
+
*/
|
|
8
|
+
diagnostics;
|
|
9
|
+
constructor(diagnostics) {
|
|
10
|
+
const detail = diagnostics[0]?.message ?? 'Unknown document error.';
|
|
11
|
+
super(`Unable to serialize UI document: ${detail}`);
|
|
12
|
+
this.name = 'UIDocumentValidationError';
|
|
13
|
+
this.diagnostics = diagnostics;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=UIDocumentValidationError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UIDocumentValidationError.js","sourceRoot":"","sources":["../../../src/kurot/serialization/UIDocumentValidationError.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IACnD;;OAEG;IACa,WAAW,CAA0B;IAErD,YAAmB,WAAoC;QACtD,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,yBAAyB,CAAC;QACpE,KAAK,CAAC,oCAAoC,MAAM,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IAChC,CAAC;CACD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/kurot/serialization/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/kurot/serialization/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { UIDocument } from '../model/UIDocument.js';
|
|
2
|
+
/**
|
|
3
|
+
* Serializes a document with stable schema and property-key ordering.
|
|
4
|
+
*/
|
|
5
|
+
export declare function serializeUIDocument(document: UIDocument, space?: number): string;
|
|
6
|
+
/**
|
|
7
|
+
* Parses and validates a current-format semantic UI document.
|
|
8
|
+
*/
|
|
9
|
+
export declare function parseUIDocument(source: string): UIDocument;
|
|
10
|
+
//# sourceMappingURL=json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../../src/kurot/serialization/json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAQzD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,SAAI,GAAG,MAAM,CAM3E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAwB1D"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { isUIDocument, validateUIDocument } from '../validation/validateUIDocument.js';
|
|
2
|
+
import { UIDocumentParseError } from './UIDocumentParseError.js';
|
|
3
|
+
import { UIDocumentValidationError } from './UIDocumentValidationError.js';
|
|
4
|
+
/**
|
|
5
|
+
* Serializes a document with stable schema and property-key ordering.
|
|
6
|
+
*/
|
|
7
|
+
export function serializeUIDocument(document, space = 2) {
|
|
8
|
+
const diagnostics = validateUIDocument(document);
|
|
9
|
+
if (diagnostics.length > 0) {
|
|
10
|
+
throw new UIDocumentValidationError(diagnostics);
|
|
11
|
+
}
|
|
12
|
+
return JSON.stringify(normalizeDocument(document), undefined, space);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Parses and validates a current-format semantic UI document.
|
|
16
|
+
*/
|
|
17
|
+
export function parseUIDocument(source) {
|
|
18
|
+
let value;
|
|
19
|
+
try {
|
|
20
|
+
value = JSON.parse(source);
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
const message = error instanceof Error ? error.message : 'Input is not valid JSON.';
|
|
24
|
+
const diagnostics = [
|
|
25
|
+
{
|
|
26
|
+
code: 'invalid-json',
|
|
27
|
+
severity: 'error',
|
|
28
|
+
path: '$',
|
|
29
|
+
message,
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
throw new UIDocumentParseError(diagnostics, error instanceof Error ? error : undefined);
|
|
33
|
+
}
|
|
34
|
+
if (!isUIDocument(value)) {
|
|
35
|
+
throw new UIDocumentParseError(validateUIDocument(value));
|
|
36
|
+
}
|
|
37
|
+
return value;
|
|
38
|
+
}
|
|
39
|
+
function normalizeDocument(document) {
|
|
40
|
+
return {
|
|
41
|
+
kind: document.kind,
|
|
42
|
+
formatVersion: document.formatVersion,
|
|
43
|
+
id: document.id,
|
|
44
|
+
root: normalizeNode(document.root),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function normalizeNode(node) {
|
|
48
|
+
const entries = Object.keys(node.properties)
|
|
49
|
+
.sort()
|
|
50
|
+
.map((key) => [
|
|
51
|
+
key,
|
|
52
|
+
normalizePropertyValue(node.properties[key]),
|
|
53
|
+
]);
|
|
54
|
+
const properties = Object.fromEntries(entries);
|
|
55
|
+
return {
|
|
56
|
+
id: node.id,
|
|
57
|
+
type: node.type,
|
|
58
|
+
properties,
|
|
59
|
+
children: node.children.map(normalizeNode),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
function normalizePropertyValue(value) {
|
|
63
|
+
if (Array.isArray(value)) {
|
|
64
|
+
return value.map(normalizePropertyValue);
|
|
65
|
+
}
|
|
66
|
+
if (typeof value === 'object') {
|
|
67
|
+
const objectValue = value;
|
|
68
|
+
const entries = Object.keys(objectValue)
|
|
69
|
+
.sort()
|
|
70
|
+
.map((key) => [
|
|
71
|
+
key,
|
|
72
|
+
normalizePropertyValue(objectValue[key]),
|
|
73
|
+
]);
|
|
74
|
+
return Object.fromEntries(entries);
|
|
75
|
+
}
|
|
76
|
+
return value;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../../src/kurot/serialization/json.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stable diagnostic categories emitted by document validation.
|
|
3
|
+
*/
|
|
4
|
+
export type UIDiagnosticCode = 'abstract-component-type' | 'circular-component-inheritance' | 'duplicate-node-id' | 'invalid-component-children' | 'invalid-component-property' | 'invalid-document' | 'invalid-json' | 'invalid-property-value' | 'invalid-value' | 'missing-component-property' | 'missing-component-base' | 'unexpected-property' | 'unknown-component-property' | 'unknown-component-type' | 'unsupported-version';
|
|
5
|
+
/**
|
|
6
|
+
* Severity of a document diagnostic.
|
|
7
|
+
*/
|
|
8
|
+
export type UIDiagnosticSeverity = 'error' | 'warning';
|
|
9
|
+
/**
|
|
10
|
+
* Machine-readable validation result with a JSON-style source path.
|
|
11
|
+
*/
|
|
12
|
+
export interface UIDiagnostic {
|
|
13
|
+
/**
|
|
14
|
+
* Stable category suitable for programmatic handling.
|
|
15
|
+
*/
|
|
16
|
+
readonly code: UIDiagnosticCode;
|
|
17
|
+
/**
|
|
18
|
+
* Current validation impact.
|
|
19
|
+
*/
|
|
20
|
+
readonly severity: UIDiagnosticSeverity;
|
|
21
|
+
/**
|
|
22
|
+
* JSON-style path to the offending value.
|
|
23
|
+
*/
|
|
24
|
+
readonly path: string;
|
|
25
|
+
/**
|
|
26
|
+
* Human-readable explanation intended for tools and Agent feedback.
|
|
27
|
+
*/
|
|
28
|
+
readonly message: string;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=UIDiagnostic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UIDiagnostic.d.ts","sourceRoot":"","sources":["../../../src/kurot/validation/UIDiagnostic.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACzB,yBAAyB,GACzB,gCAAgC,GAChC,mBAAmB,GACnB,4BAA4B,GAC5B,4BAA4B,GAC5B,kBAAkB,GAClB,cAAc,GACd,wBAAwB,GACxB,eAAe,GACf,4BAA4B,GAC5B,wBAAwB,GACxB,qBAAqB,GACrB,4BAA4B,GAC5B,wBAAwB,GACxB,qBAAqB,CAAC;AAEzB;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,SAAS,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAEhC;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;IAExC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACzB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UIDiagnostic.js","sourceRoot":"","sources":["../../../src/kurot/validation/UIDiagnostic.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/kurot/validation/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACX,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/kurot/validation/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { UIDocument } from '../model/UIDocument.js';
|
|
2
|
+
import type { UIDiagnostic } from './UIDiagnostic.js';
|
|
3
|
+
/**
|
|
4
|
+
* Validates unknown input against the current semantic document format.
|
|
5
|
+
*/
|
|
6
|
+
export declare function validateUIDocument(value: unknown): UIDiagnostic[];
|
|
7
|
+
/**
|
|
8
|
+
* Returns whether unknown input is a valid current-format UI document.
|
|
9
|
+
*/
|
|
10
|
+
export declare function isUIDocument(value: unknown): value is UIDocument;
|
|
11
|
+
//# sourceMappingURL=validateUIDocument.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateUIDocument.d.ts","sourceRoot":"","sources":["../../../src/kurot/validation/validateUIDocument.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,mBAAmB,CAAC;AAKxE;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,EAAE,CAgBjE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAEhE"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { UI_DOCUMENT_KIND } from '../model/UIDocument.js';
|
|
2
|
+
import { UI_DOCUMENT_FORMAT_VERSION } from '../version.js';
|
|
3
|
+
const DOCUMENT_KEYS = new Set(['kind', 'formatVersion', 'id', 'root']);
|
|
4
|
+
const NODE_KEYS = new Set(['id', 'type', 'properties', 'children']);
|
|
5
|
+
/**
|
|
6
|
+
* Validates unknown input against the current semantic document format.
|
|
7
|
+
*/
|
|
8
|
+
export function validateUIDocument(value) {
|
|
9
|
+
const diagnostics = [];
|
|
10
|
+
if (!isRecord(value)) {
|
|
11
|
+
addDiagnostic(diagnostics, 'invalid-document', '$', 'Document must be an object.');
|
|
12
|
+
return diagnostics;
|
|
13
|
+
}
|
|
14
|
+
validateKnownKeys(value, DOCUMENT_KEYS, '$', diagnostics);
|
|
15
|
+
validateExactValue(value.kind, UI_DOCUMENT_KIND, '$.kind', diagnostics);
|
|
16
|
+
validateFormatVersion(value.formatVersion, diagnostics);
|
|
17
|
+
validateNonEmptyString(value.id, '$.id', 'Document id', diagnostics);
|
|
18
|
+
const nodeIds = new Map();
|
|
19
|
+
const nodeStack = new WeakSet();
|
|
20
|
+
validateNode(value.root, '$.root', diagnostics, nodeIds, nodeStack);
|
|
21
|
+
return diagnostics;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Returns whether unknown input is a valid current-format UI document.
|
|
25
|
+
*/
|
|
26
|
+
export function isUIDocument(value) {
|
|
27
|
+
return validateUIDocument(value).length === 0;
|
|
28
|
+
}
|
|
29
|
+
function validateNode(value, path, diagnostics, nodeIds, nodeStack) {
|
|
30
|
+
if (!isRecord(value)) {
|
|
31
|
+
addDiagnostic(diagnostics, 'invalid-value', path, 'Node must be an object.');
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (nodeStack.has(value)) {
|
|
35
|
+
addDiagnostic(diagnostics, 'invalid-value', path, 'Node tree must not contain cycles.');
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
nodeStack.add(value);
|
|
39
|
+
validateKnownKeys(value, NODE_KEYS, path, diagnostics);
|
|
40
|
+
validateNodeId(value.id, `${path}.id`, diagnostics, nodeIds);
|
|
41
|
+
validateNonEmptyString(value.type, `${path}.type`, 'Node type', diagnostics);
|
|
42
|
+
validateProperties(value.properties, `${path}.properties`, diagnostics);
|
|
43
|
+
if (!Array.isArray(value.children)) {
|
|
44
|
+
addDiagnostic(diagnostics, 'invalid-value', `${path}.children`, 'Node children must be an array.');
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
for (let index = 0; index < value.children.length; index++) {
|
|
48
|
+
validateNode(value.children[index], `${path}.children[${index}]`, diagnostics, nodeIds, nodeStack);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
nodeStack.delete(value);
|
|
52
|
+
}
|
|
53
|
+
function validateNodeId(value, path, diagnostics, nodeIds) {
|
|
54
|
+
if (!validateNonEmptyString(value, path, 'Node id', diagnostics))
|
|
55
|
+
return;
|
|
56
|
+
const firstPath = nodeIds.get(value);
|
|
57
|
+
if (firstPath) {
|
|
58
|
+
addDiagnostic(diagnostics, 'duplicate-node-id', path, `Node id "${value}" is already used at ${firstPath}.`);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
nodeIds.set(value, path);
|
|
62
|
+
}
|
|
63
|
+
function validateProperties(value, path, diagnostics) {
|
|
64
|
+
if (!isRecord(value)) {
|
|
65
|
+
addDiagnostic(diagnostics, 'invalid-value', path, 'Node properties must be an object.');
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const valueStack = new WeakSet();
|
|
69
|
+
for (const [key, propertyValue] of Object.entries(value)) {
|
|
70
|
+
validatePropertyValue(propertyValue, `${path}.${key}`, diagnostics, valueStack);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
function validatePropertyValue(value, path, diagnostics, valueStack) {
|
|
74
|
+
if (typeof value === 'string' || typeof value === 'boolean')
|
|
75
|
+
return;
|
|
76
|
+
if (typeof value === 'number') {
|
|
77
|
+
if (!Number.isFinite(value)) {
|
|
78
|
+
addDiagnostic(diagnostics, 'invalid-property-value', path, 'Numeric property values must be finite.');
|
|
79
|
+
}
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if (!value || typeof value !== 'object') {
|
|
83
|
+
addDiagnostic(diagnostics, 'invalid-property-value', path, 'Property value must be serializable and must not be null or undefined.');
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if (valueStack.has(value)) {
|
|
87
|
+
addDiagnostic(diagnostics, 'invalid-property-value', path, 'Property value must not contain cyclic references.');
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
valueStack.add(value);
|
|
91
|
+
if (Array.isArray(value)) {
|
|
92
|
+
for (let index = 0; index < value.length; index++) {
|
|
93
|
+
validatePropertyValue(value[index], `${path}[${index}]`, diagnostics, valueStack);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else if (isRecord(value)) {
|
|
97
|
+
for (const [key, nestedValue] of Object.entries(value)) {
|
|
98
|
+
validatePropertyValue(nestedValue, `${path}.${key}`, diagnostics, valueStack);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
addDiagnostic(diagnostics, 'invalid-property-value', path, 'Property object must be a plain string-keyed object.');
|
|
103
|
+
}
|
|
104
|
+
valueStack.delete(value);
|
|
105
|
+
}
|
|
106
|
+
function validateFormatVersion(value, diagnostics) {
|
|
107
|
+
if (!Number.isInteger(value)) {
|
|
108
|
+
addDiagnostic(diagnostics, 'invalid-value', '$.formatVersion', 'Format version must be an integer.');
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
if (value !== UI_DOCUMENT_FORMAT_VERSION) {
|
|
112
|
+
addDiagnostic(diagnostics, 'unsupported-version', '$.formatVersion', `Format version ${String(value)} is not supported. Expected ${UI_DOCUMENT_FORMAT_VERSION}.`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
function validateExactValue(value, expected, path, diagnostics) {
|
|
116
|
+
if (value !== expected) {
|
|
117
|
+
addDiagnostic(diagnostics, 'invalid-value', path, `Value must be "${expected}".`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function validateNonEmptyString(value, path, label, diagnostics) {
|
|
121
|
+
if (typeof value !== 'string' || value.trim().length === 0) {
|
|
122
|
+
addDiagnostic(diagnostics, 'invalid-value', path, `${label} must be a non-empty string.`);
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
function validateKnownKeys(value, knownKeys, path, diagnostics) {
|
|
128
|
+
for (const key of Object.keys(value)) {
|
|
129
|
+
if (knownKeys.has(key))
|
|
130
|
+
continue;
|
|
131
|
+
addDiagnostic(diagnostics, 'unexpected-property', `${path}.${key}`, `Property "${key}" is not part of the current document format.`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
function isRecord(value) {
|
|
135
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
136
|
+
return false;
|
|
137
|
+
const prototype = Object.getPrototypeOf(value);
|
|
138
|
+
return prototype === Object.prototype || prototype === null;
|
|
139
|
+
}
|
|
140
|
+
function addDiagnostic(diagnostics, code, path, message) {
|
|
141
|
+
diagnostics.push({ code, severity: 'error', path, message });
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=validateUIDocument.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateUIDocument.js","sourceRoot":"","sources":["../../../src/kurot/validation/validateUIDocument.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/kurot/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,0BAA0B,IAAI,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/kurot/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@kurot/ui-document",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Headless semantic document model for Kurot UI tooling, editors, CLI workflows, and AI agents",
|
|
5
|
+
"author": "Kelvin <kyia.x52@gmail.com>",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"main": "./dist/index.js",
|
|
9
|
+
"module": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"import": "./dist/index.js"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist/**/*",
|
|
19
|
+
"LICENSE"
|
|
20
|
+
],
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "tsc --build",
|
|
23
|
+
"dev": "tsc --watch",
|
|
24
|
+
"clean": "rm -rf dist",
|
|
25
|
+
"test": "vitest run",
|
|
26
|
+
"test:watch": "vitest",
|
|
27
|
+
"prepublishOnly": "npm run clean && npm run build"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@types/node": "^22.0.0",
|
|
31
|
+
"typescript": "^5.6.0",
|
|
32
|
+
"vitest": "^4.1.4"
|
|
33
|
+
},
|
|
34
|
+
"keywords": [
|
|
35
|
+
"kurot",
|
|
36
|
+
"ui",
|
|
37
|
+
"document-model",
|
|
38
|
+
"game-editor",
|
|
39
|
+
"typescript"
|
|
40
|
+
],
|
|
41
|
+
"repository": {
|
|
42
|
+
"type": "git",
|
|
43
|
+
"url": "git+https://github.com/kurot-engine/kurot.git",
|
|
44
|
+
"directory": "packages/ui-document"
|
|
45
|
+
},
|
|
46
|
+
"packageManager": "pnpm@10.33.0",
|
|
47
|
+
"publishConfig": {
|
|
48
|
+
"access": "public"
|
|
49
|
+
}
|
|
50
|
+
}
|