@kurot/ui-document 0.5.2 → 0.6.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 (52) hide show
  1. package/README.md +9 -12
  2. package/dist/kurot/document/create-asset-contract.d.ts +4 -0
  3. package/dist/kurot/document/create-asset-contract.d.ts.map +1 -1
  4. package/dist/kurot/document/create-asset-contract.js +1 -0
  5. package/dist/kurot/document/create-asset-contract.js.map +1 -1
  6. package/dist/kurot/model/UIAssetContract.d.ts +4 -0
  7. package/dist/kurot/model/UIAssetContract.d.ts.map +1 -1
  8. package/dist/kurot/model/UIDocument.d.ts +1 -1
  9. package/dist/kurot/model/index.d.ts +1 -0
  10. package/dist/kurot/model/index.d.ts.map +1 -1
  11. package/dist/kurot/model/index.js +1 -0
  12. package/dist/kurot/model/index.js.map +1 -1
  13. package/dist/kurot/serialization/UIDocumentParseError.d.ts +1 -1
  14. package/dist/kurot/serialization/UIDocumentParseError.js +1 -1
  15. package/dist/kurot/serialization/index.d.ts +1 -1
  16. package/dist/kurot/serialization/index.d.ts.map +1 -1
  17. package/dist/kurot/serialization/index.js +1 -1
  18. package/dist/kurot/serialization/index.js.map +1 -1
  19. package/dist/kurot/serialization/xml/xml-contract-parser.d.ts +7 -0
  20. package/dist/kurot/serialization/xml/xml-contract-parser.d.ts.map +1 -0
  21. package/dist/kurot/serialization/xml/xml-contract-parser.js +200 -0
  22. package/dist/kurot/serialization/xml/xml-contract-parser.js.map +1 -0
  23. package/dist/kurot/serialization/xml/xml-contract-serializer.d.ts +6 -0
  24. package/dist/kurot/serialization/xml/xml-contract-serializer.d.ts.map +1 -0
  25. package/dist/kurot/serialization/xml/xml-contract-serializer.js +111 -0
  26. package/dist/kurot/serialization/xml/xml-contract-serializer.js.map +1 -0
  27. package/dist/kurot/serialization/xml/xml-node.d.ts +18 -0
  28. package/dist/kurot/serialization/xml/xml-node.d.ts.map +1 -0
  29. package/dist/kurot/serialization/xml/xml-node.js +230 -0
  30. package/dist/kurot/serialization/xml/xml-node.js.map +1 -0
  31. package/dist/kurot/serialization/xml/xml-parser.d.ts +10 -0
  32. package/dist/kurot/serialization/xml/xml-parser.d.ts.map +1 -0
  33. package/dist/kurot/serialization/xml/xml-parser.js +134 -0
  34. package/dist/kurot/serialization/xml/xml-parser.js.map +1 -0
  35. package/dist/kurot/serialization/xml/xml-values.d.ts +23 -0
  36. package/dist/kurot/serialization/xml/xml-values.d.ts.map +1 -0
  37. package/dist/kurot/serialization/xml/xml-values.js +133 -0
  38. package/dist/kurot/serialization/xml/xml-values.js.map +1 -0
  39. package/dist/kurot/serialization/xml.d.ts +14 -0
  40. package/dist/kurot/serialization/xml.d.ts.map +1 -0
  41. package/dist/kurot/serialization/xml.js +164 -0
  42. package/dist/kurot/serialization/xml.js.map +1 -0
  43. package/dist/kurot/validation/UIDiagnostic.d.ts +1 -1
  44. package/dist/kurot/validation/UIDiagnostic.d.ts.map +1 -1
  45. package/dist/kurot/validation/validateUIAssetContract.d.ts.map +1 -1
  46. package/dist/kurot/validation/validateUIAssetContract.js +7 -0
  47. package/dist/kurot/validation/validateUIAssetContract.js.map +1 -1
  48. package/package.json +1 -1
  49. package/dist/kurot/serialization/json.d.ts +0 -10
  50. package/dist/kurot/serialization/json.d.ts.map +0 -1
  51. package/dist/kurot/serialization/json.js +0 -234
  52. package/dist/kurot/serialization/json.js.map +0 -1
package/README.md CHANGED
@@ -4,9 +4,8 @@ Headless semantic document foundation for Kurot UI tooling. It is intended to
4
4
  provide one format and one mutation model shared by the future visual UI
5
5
  builder, `@kurot/cli`, and Agent-driven UI generation.
6
6
 
7
- > **Early development (0.5.x).** The reusable authoring model and headless
8
- > editing kernel are implemented, but the schema remains pre-1.0 and is not yet
9
- > a production file format.
7
+ > **Early development (0.6.x).** KUI XML is the canonical authored format. The
8
+ > schema remains pre-1.0, so later minor releases may still refine its contract.
10
9
 
11
10
  ## Installation
12
11
 
@@ -72,8 +71,7 @@ the corresponding `@kurot/ui` class.
72
71
  - strict validation of schema keys, versions, identifiers, unique node IDs,
73
72
  plain property values, finite numbers, and acyclic trees;
74
73
  - structured diagnostics with stable codes and JSON-style paths;
75
- - validated JSON parsing and deterministic serialization with sorted property
76
- keys;
74
+ - validated KUI XML parsing and deterministic canonical serialization;
77
75
  - runtime-independent component definitions and an isolated component registry;
78
76
  - inherited appearance-state, native-part, and emitted-event capabilities;
79
77
  - abstract base definitions, single-parent inheritance, deterministic schema
@@ -209,8 +207,9 @@ It defines the abstract semantic bases `kurot.DisplayObject`,
209
207
  `kui.ToggleButton`, `kui.ProgressBar`, and `kui.TextInput` nodes. `Group`
210
208
  accepts ordered children; the other concrete nodes are leaves.
211
209
 
212
- `kui.*` is the canonical Kurot UI namespace. EUI names belong only to legacy
213
- EXML adapters and are not stored in the semantic document.
210
+ `kui.*` is the canonical Kurot UI namespace. Authored files use the
211
+ [`KUI XML format`](./docs/kui-xml.md); EUI names and EXML are not stored in the
212
+ semantic document.
214
213
 
215
214
  The foundation catalog declares the serializable authoring properties inherited
216
215
  from Kurot display objects and UI layout elements, then adds the audited direct
@@ -242,12 +241,10 @@ package boundaries.
242
241
 
243
242
  ## Intended boundary
244
243
 
245
- The package owns the serializable UI asset model and its deterministic
246
- operations. Planned layers include:
244
+ The package owns the serializable UI asset model, KUI XML syntax, and its
245
+ deterministic operations. Planned work includes:
247
246
 
248
- - the remaining component catalog and nested structured-value constraints;
249
- - document migrations;
250
- - adapters for formats such as EXML.
247
+ - the remaining component catalog and nested structured-value constraints.
251
248
 
252
249
  It will not own rendering, runtime UI components, editor panels, filesystem
253
250
  or network I/O, or model-provider integration. Those concerns belong to
@@ -3,6 +3,10 @@ import type { UIAssetContract, UIDataBindingDefinition, UIParameterDefinition, U
3
3
  * Input accepted by createUIAssetContract.
4
4
  */
5
5
  export interface CreateUIAssetContractOptions {
6
+ /**
7
+ * Whether this appearance is the project's default for its target type.
8
+ */
9
+ readonly isDefault?: boolean;
6
10
  /**
7
11
  * Typed external data accepted by this asset.
8
12
  */
@@ -1 +1 @@
1
- {"version":3,"file":"create-asset-contract.d.ts","sourceRoot":"","sources":["../../../src/kurot/document/create-asset-contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,eAAe,EACf,uBAAuB,EACvB,qBAAqB,EACrB,gBAAgB,EAChB,0BAA0B,EAC1B,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,MAAM,6BAA6B,CAAC;AAErC;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC5C;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;IAEpD;;OAEG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC,CAAC;IAE1E;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC,CAAC;IAExE;;OAEG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEhC;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAEtE;;OAEG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAE5D;;OAEG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAE5D;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAE9D;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC;CAClE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACpC,OAAO,GAAE,4BAAiC,GACxC,eAAe,CAejB"}
1
+ {"version":3,"file":"create-asset-contract.d.ts","sourceRoot":"","sources":["../../../src/kurot/document/create-asset-contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,eAAe,EACf,uBAAuB,EACvB,qBAAqB,EACrB,gBAAgB,EAChB,0BAA0B,EAC1B,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,MAAM,6BAA6B,CAAC;AAErC;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC5C;;OAEG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAE7B;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;IAEpD;;OAEG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC,CAAC;IAE1E;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC,CAAC;IAExE;;OAEG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEhC;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAEtE;;OAEG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAE5D;;OAEG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAE5D;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAE9D;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC;CAClE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACpC,OAAO,GAAE,4BAAiC,GACxC,eAAe,CAgBjB"}
@@ -3,6 +3,7 @@
3
3
  */
4
4
  export function createUIAssetContract(options = {}) {
5
5
  return {
6
+ ...(options.isDefault === undefined ? {} : { isDefault: options.isDefault }),
6
7
  ...(options.componentType === undefined
7
8
  ? {}
8
9
  : { componentType: options.componentType }),
@@ -1 +1 @@
1
- {"version":3,"file":"create-asset-contract.js","sourceRoot":"","sources":["../../../src/kurot/document/create-asset-contract.ts"],"names":[],"mappings":"AAkEA;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACpC,UAAwC,EAAE;IAE1C,OAAO;QACN,GAAG,CAAC,OAAO,CAAC,aAAa,KAAK,SAAS;YACtC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC;QAC5C,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;QAC/E,UAAU,EAAE,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE;QACrC,KAAK,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE;QAC3B,KAAK,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE;QAC3B,MAAM,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE;QAC7B,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE;QACjC,UAAU,EAAE,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE;QACrC,YAAY,EAAE,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE;QACzC,OAAO,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE;KAC/B,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"create-asset-contract.js","sourceRoot":"","sources":["../../../src/kurot/document/create-asset-contract.ts"],"names":[],"mappings":"AAuEA;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACpC,UAAwC,EAAE;IAE1C,OAAO;QACN,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;QAC5E,GAAG,CAAC,OAAO,CAAC,aAAa,KAAK,SAAS;YACtC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC;QAC5C,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;QAC/E,UAAU,EAAE,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE;QACrC,KAAK,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE;QAC3B,KAAK,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE;QAC3B,MAAM,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE;QAC7B,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE;QACjC,UAAU,EAAE,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE;QACrC,YAAY,EAAE,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE;QACzC,OAAO,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE;KAC/B,CAAC;AACH,CAAC"}
@@ -171,6 +171,10 @@ export interface UIVariantDefinition {
171
171
  * Public authoring contract exposed by one UI asset.
172
172
  */
173
173
  export interface UIAssetContract {
174
+ /**
175
+ * Whether this appearance is the project's default for its target type.
176
+ */
177
+ readonly isDefault?: boolean;
174
178
  /**
175
179
  * Canonical component key published by a component asset.
176
180
  */
@@ -1 +1 @@
1
- {"version":3,"file":"UIAssetContract.d.ts","sourceRoot":"","sources":["../../../src/kurot/model/UIAssetContract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"UIAssetContract.d.ts","sourceRoot":"","sources":["../../../src/kurot/model/UIAssetContract.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ export declare const UI_DOCUMENT_KIND = "kurot-ui-document";
10
10
  */
11
11
  export interface UIDocument {
12
12
  /**
13
- * Stable discriminator used to reject unrelated JSON documents.
13
+ * Stable discriminator used to reject unrelated semantic values.
14
14
  */
15
15
  readonly kind: typeof UI_DOCUMENT_KIND;
16
16
  /**
@@ -2,6 +2,7 @@ export type { UIAssetKind } from './UIAssetKind.js';
2
2
  export type { UIAssetContract, UIDataBindingDefinition, UIParameterBinding, UIParameterDefinition, UIPartDefinition, UIPropertyOverride, UIPropertyTransition, UISemanticActionDefinition, UISemanticActionTrigger, UISlotDefinition, UIStateDefinition, UITransitionEasing, UIVariantDefinition, } from './UIAssetContract.js';
3
3
  export type { UIComponentInstance, UIInstanceOverride, } from './UIComponentInstance.js';
4
4
  export type { UIAssetReference, UIAppearanceReference, UIDesignTokenReference, UIDesignTokenType, UIResourceReference, UIResourceType, } from './UIReference.js';
5
+ export { isUIAssetReference, isUIDesignTokenReference, isUIResourceReference, UI_DESIGN_TOKEN_TYPES, UI_RESOURCE_TYPES, } from './UIReference.js';
5
6
  export { UI_DOCUMENT_KIND } from './UIDocument.js';
6
7
  export type { UIDocument } from './UIDocument.js';
7
8
  export type { UINode } from './UINode.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/kurot/model/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,YAAY,EACX,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,0BAA0B,EAC1B,uBAAuB,EACvB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACX,mBAAmB,EACnB,kBAAkB,GAClB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACX,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,GACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EACX,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,GACf,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/kurot/model/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,YAAY,EACX,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,0BAA0B,EAC1B,uBAAuB,EACvB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACX,mBAAmB,EACnB,kBAAkB,GAClB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACX,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,GACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EACX,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,GACf,MAAM,sBAAsB,CAAC"}
@@ -1,2 +1,3 @@
1
+ export { isUIAssetReference, isUIDesignTokenReference, isUIResourceReference, UI_DESIGN_TOKEN_TYPES, UI_RESOURCE_TYPES, } from './UIReference.js';
1
2
  export { UI_DOCUMENT_KIND } from './UIDocument.js';
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/kurot/model/index.ts"],"names":[],"mappings":"AA4BA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/kurot/model/index.ts"],"names":[],"mappings":"AA4BA,OAAO,EACN,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import type { UIDiagnostic } from '../validation/UIDiagnostic.js';
2
2
  /**
3
- * Error raised when JSON cannot be decoded as a current-format UI document.
3
+ * Error raised when KUI XML cannot be decoded as a current-format UI document.
4
4
  */
5
5
  export declare class UIDocumentParseError extends Error {
6
6
  /**
@@ -1,6 +1,6 @@
1
1
  import { firstDiagnosticMessage } from './first-diagnostic-message.js';
2
2
  /**
3
- * Error raised when JSON cannot be decoded as a current-format UI document.
3
+ * Error raised when KUI XML cannot be decoded as a current-format UI document.
4
4
  */
5
5
  export class UIDocumentParseError extends Error {
6
6
  /**
@@ -1,4 +1,4 @@
1
1
  export { UIDocumentParseError } from './UIDocumentParseError.js';
2
2
  export { UIDocumentValidationError } from './UIDocumentValidationError.js';
3
- export { parseUIDocument, serializeUIDocument } from './json.js';
3
+ export { KUI_XML_NAMESPACE, parseUIDocument, serializeUIDocument } from './xml.js';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +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"}
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,iBAAiB,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC"}
@@ -1,4 +1,4 @@
1
1
  export { UIDocumentParseError } from './UIDocumentParseError.js';
2
2
  export { UIDocumentValidationError } from './UIDocumentValidationError.js';
3
- export { parseUIDocument, serializeUIDocument } from './json.js';
3
+ export { KUI_XML_NAMESPACE, parseUIDocument, serializeUIDocument } from './xml.js';
4
4
  //# sourceMappingURL=index.js.map
@@ -1 +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"}
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,iBAAiB,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { UIAssetContract } from '../../model/UIAssetContract.js';
2
+ import type { XMLElement } from './xml-parser.js';
3
+ /**
4
+ * Parses the public contract of one UI asset.
5
+ */
6
+ export declare function parseContract(element: XMLElement | undefined): UIAssetContract;
7
+ //# sourceMappingURL=xml-contract-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml-contract-parser.d.ts","sourceRoot":"","sources":["../../../../src/kurot/serialization/xml/xml-contract-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,eAAe,EAUf,MAAM,gCAAgC,CAAC;AAOxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGlD;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,GAAG,eAAe,CAuC9E"}
@@ -0,0 +1,200 @@
1
+ import { decodeXMLValue, parseComplexValue } from './xml-values.js';
2
+ /**
3
+ * Parses the public contract of one UI asset.
4
+ */
5
+ export function parseContract(element) {
6
+ if (element === undefined)
7
+ return emptyContract();
8
+ if (element.name !== 'contract')
9
+ throw new Error(`Expected <contract>, received <${element.name}>.`);
10
+ const parameters = {};
11
+ const parts = {};
12
+ const slots = {};
13
+ const states = {};
14
+ const variants = {};
15
+ const dataFields = {};
16
+ const dataBindings = {};
17
+ const actions = {};
18
+ for (const container of element.children) {
19
+ switch (container.name) {
20
+ case 'parameters':
21
+ parseParameters(container, parameters);
22
+ break;
23
+ case 'parts':
24
+ parseParts(container, parts);
25
+ break;
26
+ case 'slots':
27
+ parseSlots(container, slots);
28
+ break;
29
+ case 'states':
30
+ parseOverrides(container, 'state', states);
31
+ break;
32
+ case 'variants':
33
+ parseOverrides(container, 'variant', variants);
34
+ break;
35
+ case 'dataFields':
36
+ parsePropertyDefinitions(container, 'field', dataFields);
37
+ break;
38
+ case 'dataBindings':
39
+ parseDataBindings(container, dataBindings);
40
+ break;
41
+ case 'actions':
42
+ parseActions(container, actions);
43
+ break;
44
+ default: throw new Error(`Unexpected <${container.name}> inside <contract>.`);
45
+ }
46
+ }
47
+ return {
48
+ ...(element.attributes.componentType === undefined ? {} : { componentType: element.attributes.componentType }),
49
+ ...(element.attributes.targetType === undefined ? {} : { targetType: element.attributes.targetType }),
50
+ parameters,
51
+ parts,
52
+ slots,
53
+ states,
54
+ variants,
55
+ dataFields,
56
+ dataBindings,
57
+ actions,
58
+ };
59
+ }
60
+ function parseParameters(container, target) {
61
+ for (const element of childrenNamed(container, 'parameter')) {
62
+ const bindings = element.children
63
+ .filter(child => child.name === 'bind')
64
+ .map(binding => ({
65
+ targetId: requiredAttribute(binding, 'target'),
66
+ property: requiredAttribute(binding, 'property'),
67
+ }));
68
+ const definition = parsePropertyDefinition(element);
69
+ target[requiredAttribute(element, 'name')] = {
70
+ ...definition,
71
+ ...(bindings.length === 0 ? {} : { bindings }),
72
+ };
73
+ }
74
+ }
75
+ function parseParts(container, target) {
76
+ for (const element of childrenNamed(container, 'part')) {
77
+ target[requiredAttribute(element, 'name')] = {
78
+ nodeId: requiredAttribute(element, 'node'),
79
+ ...optionalBoolean(element, 'required'),
80
+ ...optionalString(element, 'description'),
81
+ };
82
+ }
83
+ }
84
+ function parseSlots(container, target) {
85
+ for (const element of childrenNamed(container, 'slot')) {
86
+ const capacity = requiredAttribute(element, 'capacity');
87
+ target[requiredAttribute(element, 'name')] = {
88
+ nodeId: requiredAttribute(element, 'node'),
89
+ capacity: capacity,
90
+ ...optionalBoolean(element, 'required'),
91
+ ...optionalString(element, 'description'),
92
+ };
93
+ }
94
+ }
95
+ function parseOverrides(container, tag, target) {
96
+ for (const element of childrenNamed(container, tag)) {
97
+ const overrides = element.children.map(parseOverride);
98
+ target[requiredAttribute(element, 'name')] = {
99
+ overrides,
100
+ ...optionalString(element, 'description'),
101
+ };
102
+ }
103
+ }
104
+ function parseOverride(element) {
105
+ if (element.name !== 'set')
106
+ throw new Error(`Expected <set>, received <${element.name}>.`);
107
+ const duration = element.attributes.duration;
108
+ return {
109
+ targetId: requiredAttribute(element, 'target'),
110
+ property: requiredAttribute(element, 'property'),
111
+ value: parseElementValue(element),
112
+ ...(duration === undefined
113
+ ? {}
114
+ : {
115
+ transition: {
116
+ duration: Number(duration),
117
+ ...(element.attributes.delay === undefined ? {} : { delay: Number(element.attributes.delay) }),
118
+ ...(element.attributes.easing === undefined
119
+ ? {}
120
+ : { easing: element.attributes.easing }),
121
+ },
122
+ }),
123
+ };
124
+ }
125
+ function parsePropertyDefinitions(container, tag, target) {
126
+ for (const element of childrenNamed(container, tag)) {
127
+ target[requiredAttribute(element, 'name')] = parsePropertyDefinition(element);
128
+ }
129
+ }
130
+ function parsePropertyDefinition(element) {
131
+ const types = requiredAttribute(element, 'type').split('|');
132
+ const enumValues = element.children
133
+ .filter(child => child.name === 'enum')
134
+ .map(child => decodeXMLValue(requiredAttribute(child, 'value')));
135
+ return {
136
+ valueType: types.length === 1 ? types[0] ?? 'value' : types,
137
+ ...(element.attributes.format === undefined ? {} : { format: element.attributes.format }),
138
+ ...(element.attributes.resources === undefined ? {} : { resourceTypes: element.attributes.resources.split('|') }),
139
+ ...(element.attributes.tokens === undefined ? {} : { tokenTypes: element.attributes.tokens.split('|') }),
140
+ ...(enumValues.length === 0 ? {} : { enumValues }),
141
+ ...optionalNumber(element, 'minimum'),
142
+ ...optionalNumber(element, 'maximum'),
143
+ ...optionalBoolean(element, 'integer'),
144
+ ...(element.attributes.default === undefined ? {} : { defaultValue: decodeXMLValue(element.attributes.default) }),
145
+ ...optionalBoolean(element, 'required'),
146
+ ...optionalString(element, 'description'),
147
+ };
148
+ }
149
+ function parseDataBindings(container, target) {
150
+ for (const element of childrenNamed(container, 'binding')) {
151
+ target[requiredAttribute(element, 'name')] = {
152
+ source: requiredAttribute(element, 'source'),
153
+ targetId: requiredAttribute(element, 'target'),
154
+ property: requiredAttribute(element, 'property'),
155
+ };
156
+ }
157
+ }
158
+ function parseActions(container, target) {
159
+ for (const element of childrenNamed(container, 'action')) {
160
+ target[requiredAttribute(element, 'name')] = {
161
+ sourceId: requiredAttribute(element, 'source'),
162
+ trigger: requiredAttribute(element, 'trigger'),
163
+ ...optionalString(element, 'description'),
164
+ };
165
+ }
166
+ }
167
+ function parseElementValue(element) {
168
+ if (element.attributes.value !== undefined)
169
+ return decodeXMLValue(element.attributes.value);
170
+ if (element.children.length !== 1 || element.children[0] === undefined) {
171
+ throw new Error(`<${element.name}> requires a value attribute or one complex value.`);
172
+ }
173
+ return parseComplexValue(element.children[0]);
174
+ }
175
+ function childrenNamed(element, name) {
176
+ for (const child of element.children) {
177
+ if (child.name !== name)
178
+ throw new Error(`Unexpected <${child.name}> inside <${element.name}>.`);
179
+ }
180
+ return element.children;
181
+ }
182
+ function requiredAttribute(element, name) {
183
+ const value = element.attributes[name];
184
+ if (value === undefined || value.length === 0)
185
+ throw new Error(`<${element.name}> requires ${name}.`);
186
+ return value;
187
+ }
188
+ function optionalString(element, name) {
189
+ return element.attributes[name] === undefined ? {} : { [name]: element.attributes[name] };
190
+ }
191
+ function optionalBoolean(element, name) {
192
+ return element.attributes[name] === undefined ? {} : { [name]: element.attributes[name] === 'true' };
193
+ }
194
+ function optionalNumber(element, name) {
195
+ return element.attributes[name] === undefined ? {} : { [name]: Number(element.attributes[name]) };
196
+ }
197
+ function emptyContract() {
198
+ return { parameters: {}, parts: {}, slots: {}, states: {}, variants: {}, dataFields: {}, dataBindings: {}, actions: {} };
199
+ }
200
+ //# sourceMappingURL=xml-contract-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml-contract-parser.js","sourceRoot":"","sources":["../../../../src/kurot/serialization/xml/xml-contract-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { UIAssetContract } from '../../model/UIAssetContract.js';
2
+ /**
3
+ * Serializes the public contract of one UI asset.
4
+ */
5
+ export declare function serializeContract(contract: UIAssetContract, depth: number): string[];
6
+ //# sourceMappingURL=xml-contract-serializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml-contract-serializer.d.ts","sourceRoot":"","sources":["../../../../src/kurot/serialization/xml/xml-contract-serializer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,eAAe,EAEf,MAAM,gCAAgC,CAAC;AAMxC;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CA+BpF"}
@@ -0,0 +1,111 @@
1
+ import { compareStrings } from '../../shared/strings.js';
2
+ import { encodeXMLValue, escapeXML, serializeComplexValue } from './xml-values.js';
3
+ /**
4
+ * Serializes the public contract of one UI asset.
5
+ */
6
+ export function serializeContract(contract, depth) {
7
+ const indent = ' '.repeat(depth);
8
+ const lines = [`${indent}<contract>`];
9
+ appendDefinitions(lines, 'parameters', contract.parameters, depth + 1, (name, value, itemDepth) => {
10
+ const itemIndent = ' '.repeat(itemDepth);
11
+ const bindings = (value.bindings ?? []).map(binding => `${itemIndent} <bind target="${escapeXML(binding.targetId)}" property="${escapeXML(binding.property)}" />`);
12
+ return propertyDefinition('parameter', name, value, itemDepth, bindings);
13
+ });
14
+ appendDefinitions(lines, 'parts', contract.parts, depth + 1, (name, value, itemDepth) => [
15
+ `${' '.repeat(itemDepth)}<part name="${escapeXML(name)}" node="${escapeXML(value.nodeId)}"${optionalBoolean('required', value.required)}${optionalString('description', value.description)} />`,
16
+ ]);
17
+ appendDefinitions(lines, 'slots', contract.slots, depth + 1, (name, value, itemDepth) => [
18
+ `${' '.repeat(itemDepth)}<slot name="${escapeXML(name)}" node="${escapeXML(value.nodeId)}" capacity="${value.capacity}"${optionalBoolean('required', value.required)}${optionalString('description', value.description)} />`,
19
+ ]);
20
+ appendOverrideDefinitions(lines, 'states', 'state', contract.states, depth + 1);
21
+ appendOverrideDefinitions(lines, 'variants', 'variant', contract.variants, depth + 1);
22
+ appendDefinitions(lines, 'dataFields', contract.dataFields ?? {}, depth + 1, (name, value, itemDepth) => propertyDefinition('field', name, value, itemDepth));
23
+ appendDefinitions(lines, 'dataBindings', contract.dataBindings ?? {}, depth + 1, (name, value, itemDepth) => [
24
+ `${' '.repeat(itemDepth)}<binding name="${escapeXML(name)}" source="${escapeXML(value.source)}" target="${escapeXML(value.targetId)}" property="${escapeXML(value.property)}" />`,
25
+ ]);
26
+ appendDefinitions(lines, 'actions', contract.actions ?? {}, depth + 1, (name, value, itemDepth) => [
27
+ `${' '.repeat(itemDepth)}<action name="${escapeXML(name)}" source="${escapeXML(value.sourceId)}" trigger="${value.trigger}"${optionalString('description', value.description)} />`,
28
+ ]);
29
+ lines.push(`${indent}</contract>`);
30
+ return lines;
31
+ }
32
+ function propertyDefinition(tag, name, definition, depth, additionalChildren = []) {
33
+ const indent = ' '.repeat(depth);
34
+ const valueTypes = Array.isArray(definition.valueType) ? definition.valueType.join('|') : definition.valueType;
35
+ const attributes = [
36
+ `name="${escapeXML(name)}"`,
37
+ `type="${valueTypes}"`,
38
+ optionalString('format', definition.format),
39
+ optionalList('resources', definition.resourceTypes),
40
+ optionalList('tokens', definition.tokenTypes),
41
+ optionalNumber('minimum', definition.minimum),
42
+ optionalNumber('maximum', definition.maximum),
43
+ optionalBoolean('integer', definition.integer),
44
+ definition.defaultValue === undefined ? '' : ` default="${escapeXML(encodeXMLValue(definition.defaultValue) ?? '')}"`,
45
+ optionalBoolean('required', definition.required),
46
+ optionalString('description', definition.description),
47
+ ].filter(Boolean).map(part => part.trim()).join(' ');
48
+ if ((!definition.enumValues || definition.enumValues.length === 0) && additionalChildren.length === 0) {
49
+ return [`${indent}<${tag} ${attributes} />`];
50
+ }
51
+ const lines = [`${indent}<${tag} ${attributes}>`];
52
+ for (const value of definition.enumValues ?? []) {
53
+ lines.push(`${indent} <enum value="${escapeXML(encodeXMLValue(value) ?? '')}" />`);
54
+ }
55
+ lines.push(...additionalChildren);
56
+ lines.push(`${indent}</${tag}>`);
57
+ return lines;
58
+ }
59
+ function appendOverrideDefinitions(lines, container, tag, definitions, depth) {
60
+ appendDefinitions(lines, container, definitions, depth, (name, definition, itemDepth) => {
61
+ const indent = ' '.repeat(itemDepth);
62
+ const result = [`${indent}<${tag} name="${escapeXML(name)}"${optionalString('description', definition.description)}>`];
63
+ for (const override of definition.overrides) {
64
+ result.push(...serializeOverride(override, itemDepth + 1));
65
+ }
66
+ result.push(`${indent}</${tag}>`);
67
+ return result;
68
+ });
69
+ }
70
+ function serializeOverride(override, depth) {
71
+ const indent = ' '.repeat(depth);
72
+ const transition = override.transition;
73
+ const attributes = [
74
+ `target="${escapeXML(override.targetId)}"`,
75
+ `property="${escapeXML(override.property)}"`,
76
+ transition === undefined ? '' : `duration="${transition.duration}"`,
77
+ transition?.delay === undefined ? '' : `delay="${transition.delay}"`,
78
+ transition?.easing === undefined ? '' : `easing="${transition.easing}"`,
79
+ ].filter(Boolean).join(' ');
80
+ return serializeValue('set', attributes, override.value, depth, indent);
81
+ }
82
+ function serializeValue(tag, attributes, value, depth, indent) {
83
+ const encoded = encodeXMLValue(value);
84
+ if (encoded !== undefined)
85
+ return [`${indent}<${tag} ${attributes} value="${escapeXML(encoded)}" />`];
86
+ return [`${indent}<${tag} ${attributes}>`, ...serializeComplexValue(value, depth + 1), `${indent}</${tag}>`];
87
+ }
88
+ function appendDefinitions(lines, container, definitions, depth, serialize) {
89
+ const entries = Object.entries(definitions).sort(([left], [right]) => compareStrings(left, right));
90
+ if (entries.length === 0)
91
+ return;
92
+ const indent = ' '.repeat(depth);
93
+ lines.push(`${indent}<${container}>`);
94
+ for (const [name, value] of entries) {
95
+ lines.push(...serialize(name, value, depth + 1));
96
+ }
97
+ lines.push(`${indent}</${container}>`);
98
+ }
99
+ function optionalString(name, value) {
100
+ return value === undefined ? '' : ` ${name}="${escapeXML(value)}"`;
101
+ }
102
+ function optionalBoolean(name, value) {
103
+ return value === undefined ? '' : ` ${name}="${value}"`;
104
+ }
105
+ function optionalNumber(name, value) {
106
+ return value === undefined ? '' : ` ${name}="${value}"`;
107
+ }
108
+ function optionalList(name, value) {
109
+ return value === undefined ? '' : ` ${name}="${escapeXML(value.join('|'))}"`;
110
+ }
111
+ //# sourceMappingURL=xml-contract-serializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml-contract-serializer.js","sourceRoot":"","sources":["../../../../src/kurot/serialization/xml/xml-contract-serializer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { UINode } from '../../model/UINode.js';
2
+ import type { XMLElement } from './xml-parser.js';
3
+ export interface XMLNamespaces {
4
+ readonly prefixes: Readonly<Record<string, string>>;
5
+ }
6
+ /**
7
+ * Collects custom component namespace prefixes used by a node tree.
8
+ */
9
+ export declare function collectNodePrefixes(node: UINode, prefixes: Set<string>): void;
10
+ /**
11
+ * Serializes one semantic node using component tags.
12
+ */
13
+ export declare function serializeNode(node: UINode, depth: number): string[];
14
+ /**
15
+ * Parses one component element into a semantic node.
16
+ */
17
+ export declare function parseNode(element: XMLElement, namespaces: XMLNamespaces): UINode;
18
+ //# sourceMappingURL=xml-node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml-node.d.ts","sourceRoot":"","sources":["../../../../src/kurot/serialization/xml/xml-node.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAGpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAWlD,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACpD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAc7E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CA+CnE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,GAAG,MAAM,CA0ChF"}