@kurot/ui-runtime 0.3.0 → 0.4.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/README.md CHANGED
@@ -22,7 +22,8 @@ bindings, variants, part overrides, and projected Slot content. Appearance
22
22
  assets become native Kurot skins and states, including the selected appearance
23
23
  variant.
24
24
 
25
- Version 0.3 completes the first bounded visual-semantics slice. Contract data
25
+ Version 0.4 completes the first bounded visual-semantics slice with component
26
+ capability validation and transactional data updates. Contract data
26
27
  fields drive declared one-way property bindings, semantic actions expose
27
28
  declared `tap` and `change` events, and numeric appearance overrides may use
28
29
  bounded transitions. The package still performs full-tree creation; incremental
@@ -43,6 +44,13 @@ result.data.setValue('balanceText', '$1,250.00');
43
44
  result.dispose();
44
45
  ```
45
46
 
47
+ Required data fields must receive an initial value or declare a Schema default.
48
+ A later `setValue()` commits only after every binding target succeeds; failure
49
+ restores earlier targets and leaves the controller value unchanged. Built-in
50
+ and ordinary reflective properties are restored automatically. A custom
51
+ adapter that stores bound state outside its runtime object must provide the
52
+ paired `captureProperty` and `restoreProperty` hooks.
53
+
46
54
  Reusable-component state controllers apply Contract state overrides at runtime
47
55
  and restore the exact pre-state values when cleared. Controllers are isolated
48
56
  per component instance; an unknown state throws `KurotUIRuntimeError`.
@@ -1 +1 @@
1
- {"version":3,"file":"createDataController.d.ts","sourceRoot":"","sources":["../../../../src/kurot/runtime/dynamics/createDataController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAK3E,OAAO,KAAK,EACX,sBAAsB,EACtB,qBAAqB,EACrB,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,wBAAgB,oBAAoB,CACnC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,sBAAsB,EAC/B,aAAa,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAM,GAC3D,qBAAqB,CAkCvB"}
1
+ {"version":3,"file":"createDataController.d.ts","sourceRoot":"","sources":["../../../../src/kurot/runtime/dynamics/createDataController.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAK3E,OAAO,KAAK,EAEX,sBAAsB,EACtB,qBAAqB,EACrB,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,wBAAgB,oBAAoB,CACnC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,sBAAsB,EAC/B,aAAa,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAM,GAC3D,qBAAqB,CAmCvB"}
@@ -9,7 +9,8 @@ export function createDataController(contract, assetId, scope, context, initialV
9
9
  const definitions = contract.dataFields ?? {};
10
10
  const fields = Object.keys(definitions).sort();
11
11
  const values = new Map();
12
- assertKnownInitialValues(initialValues, definitions, assetId);
12
+ assertValidInitialValues(initialValues, definitions, assetId);
13
+ assertRequiredInitialValues(initialValues, definitions, assetId);
13
14
  const controller = {
14
15
  fields: Object.freeze(fields),
15
16
  getValue(name) {
@@ -23,8 +24,8 @@ export function createDataController(contract, assetId, scope, context, initialV
23
24
  if (!matchesUIPropertyDefinition(value, definition)) {
24
25
  throw invalidData(`Data field "${name}" does not satisfy its Schema.`, assetId, name);
25
26
  }
26
- values.set(name, value);
27
27
  applyBindings(contract, name, value, scope, context);
28
+ values.set(name, value);
28
29
  },
29
30
  };
30
31
  for (const name of fields) {
@@ -40,6 +41,7 @@ export function createDataController(contract, assetId, scope, context, initialV
40
41
  }
41
42
  function applyBindings(contract, source, value, scope, context) {
42
43
  const bindings = contract.dataBindings ?? {};
44
+ const targets = [];
43
45
  for (const name of Object.keys(bindings).sort()) {
44
46
  const binding = bindings[name];
45
47
  if (binding.source !== source) {
@@ -51,15 +53,68 @@ function applyBindings(contract, source, value, scope, context) {
51
53
  if (target === undefined || type === undefined) {
52
54
  continue;
53
55
  }
54
- applyRuntimeProperty(target, type, binding.property, value, `$.contract.dataBindings.${name}`, context);
56
+ targets.push({
57
+ path: `$.contract.dataBindings.${name}`,
58
+ property: binding.property,
59
+ target,
60
+ type,
61
+ adapter: context.adapters[type],
62
+ previousValue: captureBindingValue(context.adapters[type], target, binding.property, `$.contract.dataBindings.${name}`),
63
+ });
64
+ }
65
+ const applied = [];
66
+ try {
67
+ for (const target of targets) {
68
+ applied.push(target);
69
+ applyRuntimeProperty(target.target, target.type, target.property, value, target.path, context);
70
+ }
71
+ }
72
+ catch (error) {
73
+ rollbackBindings(applied);
74
+ throw error;
75
+ }
76
+ }
77
+ function rollbackBindings(targets) {
78
+ for (let index = targets.length - 1; index >= 0; index--) {
79
+ const target = targets[index];
80
+ try {
81
+ if (target.adapter?.restoreProperty !== undefined) {
82
+ target.adapter.restoreProperty(target.target, target.property, target.previousValue, target.path);
83
+ }
84
+ else {
85
+ Reflect.set(target.target, target.property, target.previousValue);
86
+ }
87
+ }
88
+ catch {
89
+ // Preserve the original binding failure; adapters should expose restorable properties.
90
+ }
91
+ }
92
+ }
93
+ function captureBindingValue(adapter, target, property, path) {
94
+ if (adapter?.captureProperty !== undefined) {
95
+ return adapter.captureProperty(target, property, path);
96
+ }
97
+ return Reflect.get(target, property);
98
+ }
99
+ function assertValidInitialValues(values, definitions, assetId) {
100
+ for (const [name, value] of Object.entries(values)) {
101
+ const definition = definitions?.[name];
102
+ if (definition === undefined) {
103
+ throw invalidData(`Initial data field "${name}" is not declared.`, assetId, name);
104
+ }
105
+ if (!matchesUIPropertyDefinition(value, definition)) {
106
+ throw invalidData(`Initial data field "${name}" does not satisfy its Schema.`, assetId, name);
107
+ }
55
108
  }
56
109
  }
57
- function assertKnownInitialValues(values, definitions, assetId) {
58
- for (const name of Object.keys(values)) {
59
- if (definitions?.[name] !== undefined) {
110
+ function assertRequiredInitialValues(values, definitions, assetId) {
111
+ for (const [name, definition] of Object.entries(definitions ?? {})) {
112
+ if (definition.required !== true ||
113
+ definition.defaultValue !== undefined ||
114
+ Object.hasOwn(values, name)) {
60
115
  continue;
61
116
  }
62
- throw invalidData(`Initial data field "${name}" is not declared.`, assetId, name);
117
+ throw invalidData(`Required data field "${name}" has no initial or default value.`, assetId, name);
63
118
  }
64
119
  }
65
120
  function invalidData(message, assetId, name) {
@@ -1 +1 @@
1
- {"version":3,"file":"createDataController.js","sourceRoot":"","sources":["../../../../src/kurot/runtime/dynamics/createDataController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAMtD;;GAEG;AACH,MAAM,UAAU,oBAAoB,CACnC,QAAyB,EACzB,OAAe,EACf,KAAa,EACb,OAA+B,EAC/B,gBAA2D,EAAE;IAE7D,MAAM,WAAW,GAAG,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC;IAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/C,MAAM,MAAM,GAAG,IAAI,GAAG,EAA2B,CAAC;IAClD,wBAAwB,CAAC,aAAa,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAE9D,MAAM,UAAU,GAA0B;QACzC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;QAC7B,QAAQ,CAAC,IAAY;YACpB,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QACD,QAAQ,CAAC,IAAY,EAAE,KAAsB;YAC5C,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,WAAW,CAAC,eAAe,IAAI,oBAAoB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YAC3E,CAAC;YACD,IAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC;gBACrD,MAAM,WAAW,CAAC,eAAe,IAAI,gCAAgC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACvF,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACxB,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;KACD,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAE,CAAC;QACtC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC;YAC/C,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC;YACrB,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC;QAC3B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACzB,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAClC,CAAC;IACF,CAAC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC;AAED,SAAS,aAAa,CACrB,QAAyB,EACzB,MAAc,EACd,KAAsB,EACtB,KAAa,EACb,OAA+B;IAE/B,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,IAAI,EAAE,CAAC;IAC7C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QACjD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAE,CAAC;QAChC,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC/B,SAAS;QACV,CAAC;QACD,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,MAAM,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAChD,SAAS;QACV,CAAC;QACD,oBAAoB,CACnB,MAAM,EACN,IAAI,EACJ,OAAO,CAAC,QAAQ,EAChB,KAAK,EACL,2BAA2B,IAAI,EAAE,EACjC,OAAO,CACP,CAAC;IACH,CAAC;AACF,CAAC;AAED,SAAS,wBAAwB,CAChC,MAAiD,EACjD,WAA0C,EAC1C,OAAe;IAEf,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACxC,IAAI,WAAW,EAAE,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACvC,SAAS;QACV,CAAC;QACD,MAAM,WAAW,CAAC,uBAAuB,IAAI,oBAAoB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACnF,CAAC;AACF,CAAC;AAED,SAAS,WAAW,CACnB,OAAe,EACf,OAAe,EACf,IAAY;IAEZ,OAAO,IAAI,mBAAmB,CAC7B,cAAc,EACd,OAAO,EACP,YAAY,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,yBAAyB,IAAI,EAAE,CAClE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"createDataController.js","sourceRoot":"","sources":["../../../../src/kurot/runtime/dynamics/createDataController.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,16 @@ export interface KurotUIComponentAdapter {
18
18
  * Return true when the property was consumed.
19
19
  */
20
20
  readonly applyProperty?: (instance: DisplayObject, name: string, value: unknown, path: string) => boolean;
21
+ /**
22
+ * Captures adapter-owned state before a data binding updates the property.
23
+ * Provide this together with restoreProperty for non-reflective properties.
24
+ */
25
+ readonly captureProperty?: (instance: DisplayObject, name: string, path: string) => unknown;
26
+ /**
27
+ * Restores adapter-owned state when a later binding target rejects an update.
28
+ * Provide this together with captureProperty for non-reflective properties.
29
+ */
30
+ readonly restoreProperty?: (instance: DisplayObject, name: string, value: unknown, path: string) => void;
21
31
  /**
22
32
  * Attaches one materialized child to a project-defined container.
23
33
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/kurot/runtime/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/kurot/runtime/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kurot/ui-runtime",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Runtime materialization layer for validated Kurot UI documents",
5
5
  "author": "Kelvin <kyia.x52@gmail.com>",
6
6
  "license": "MIT",
@@ -31,12 +31,12 @@
31
31
  "peerDependencies": {
32
32
  "@kurot/core": "^1.0.15",
33
33
  "@kurot/ui": "^1.1.7",
34
- "@kurot/ui-document": "^0.4.0"
34
+ "@kurot/ui-document": "^0.5.0"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@kurot/core": "^1.0.15",
38
38
  "@kurot/ui": "^1.1.7",
39
- "@kurot/ui-document": "^0.4.0",
39
+ "@kurot/ui-document": "^0.5.0",
40
40
  "@types/node": "^22.0.0",
41
41
  "happy-dom": "^20.8.9",
42
42
  "typescript": "^5.6.0",