@kurot/ui-document 0.1.0 → 0.3.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 (188) hide show
  1. package/README.md +112 -12
  2. package/dist/index.d.ts +2 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +2 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/kurot/assets/UIAssetRegistry.d.ts +47 -0
  7. package/dist/kurot/assets/UIAssetRegistry.d.ts.map +1 -0
  8. package/dist/kurot/assets/UIAssetRegistry.js +139 -0
  9. package/dist/kurot/assets/UIAssetRegistry.js.map +1 -0
  10. package/dist/kurot/assets/UIProjectDefinition.d.ts +33 -0
  11. package/dist/kurot/assets/UIProjectDefinition.d.ts.map +1 -0
  12. package/dist/kurot/assets/UIProjectDefinition.js +2 -0
  13. package/dist/kurot/assets/UIProjectDefinition.js.map +1 -0
  14. package/dist/kurot/assets/assetTraversal.d.ts +30 -0
  15. package/dist/kurot/assets/assetTraversal.d.ts.map +1 -0
  16. package/dist/kurot/assets/assetTraversal.js +96 -0
  17. package/dist/kurot/assets/assetTraversal.js.map +1 -0
  18. package/dist/kurot/assets/index.d.ts +4 -0
  19. package/dist/kurot/assets/index.d.ts.map +1 -0
  20. package/dist/kurot/assets/index.js +3 -0
  21. package/dist/kurot/assets/index.js.map +1 -0
  22. package/dist/kurot/assets/validateUIAssetInstances.d.ts +9 -0
  23. package/dist/kurot/assets/validateUIAssetInstances.d.ts.map +1 -0
  24. package/dist/kurot/assets/validateUIAssetInstances.js +114 -0
  25. package/dist/kurot/assets/validateUIAssetInstances.js.map +1 -0
  26. package/dist/kurot/assets/validateUIAssetOverrides.d.ts +8 -0
  27. package/dist/kurot/assets/validateUIAssetOverrides.d.ts.map +1 -0
  28. package/dist/kurot/assets/validateUIAssetOverrides.js +55 -0
  29. package/dist/kurot/assets/validateUIAssetOverrides.js.map +1 -0
  30. package/dist/kurot/assets/validateUIAssetRegistry.d.ts +8 -0
  31. package/dist/kurot/assets/validateUIAssetRegistry.d.ts.map +1 -0
  32. package/dist/kurot/assets/validateUIAssetRegistry.js +79 -0
  33. package/dist/kurot/assets/validateUIAssetRegistry.js.map +1 -0
  34. package/dist/kurot/assets/validateUIProjectReferences.d.ts +8 -0
  35. package/dist/kurot/assets/validateUIProjectReferences.d.ts.map +1 -0
  36. package/dist/kurot/assets/validateUIProjectReferences.js +50 -0
  37. package/dist/kurot/assets/validateUIProjectReferences.js.map +1 -0
  38. package/dist/kurot/catalog/properties/basic-component-properties.d.ts.map +1 -1
  39. package/dist/kurot/catalog/properties/basic-component-properties.js +8 -10
  40. package/dist/kurot/catalog/properties/basic-component-properties.js.map +1 -1
  41. package/dist/kurot/catalog/properties/foundation-properties.d.ts.map +1 -1
  42. package/dist/kurot/catalog/properties/foundation-properties.js +6 -17
  43. package/dist/kurot/catalog/properties/foundation-properties.js.map +1 -1
  44. package/dist/kurot/document/create.d.ts +20 -0
  45. package/dist/kurot/document/create.d.ts.map +1 -1
  46. package/dist/kurot/document/create.js +10 -0
  47. package/dist/kurot/document/create.js.map +1 -1
  48. package/dist/kurot/document/createAssetContract.d.ts +39 -0
  49. package/dist/kurot/document/createAssetContract.d.ts.map +1 -0
  50. package/dist/kurot/document/createAssetContract.js +17 -0
  51. package/dist/kurot/document/createAssetContract.js.map +1 -0
  52. package/dist/kurot/document/createComponentInstance.d.ts +34 -0
  53. package/dist/kurot/document/createComponentInstance.d.ts.map +1 -0
  54. package/dist/kurot/document/createComponentInstance.js +13 -0
  55. package/dist/kurot/document/createComponentInstance.js.map +1 -0
  56. package/dist/kurot/document/createReferences.d.ts +14 -0
  57. package/dist/kurot/document/createReferences.d.ts.map +1 -0
  58. package/dist/kurot/document/createReferences.js +29 -0
  59. package/dist/kurot/document/createReferences.js.map +1 -0
  60. package/dist/kurot/document/index.d.ts +5 -0
  61. package/dist/kurot/document/index.d.ts.map +1 -1
  62. package/dist/kurot/document/index.js +3 -0
  63. package/dist/kurot/document/index.js.map +1 -1
  64. package/dist/kurot/document/query.d.ts.map +1 -1
  65. package/dist/kurot/document/query.js +16 -0
  66. package/dist/kurot/document/query.js.map +1 -1
  67. package/dist/kurot/editing/UIDocumentHistory.d.ts +41 -0
  68. package/dist/kurot/editing/UIDocumentHistory.d.ts.map +1 -0
  69. package/dist/kurot/editing/UIDocumentHistory.js +95 -0
  70. package/dist/kurot/editing/UIDocumentHistory.js.map +1 -0
  71. package/dist/kurot/editing/UIEditError.d.ts +24 -0
  72. package/dist/kurot/editing/UIEditError.d.ts.map +1 -0
  73. package/dist/kurot/editing/UIEditError.js +25 -0
  74. package/dist/kurot/editing/UIEditError.js.map +1 -0
  75. package/dist/kurot/editing/UIOperation.d.ts +134 -0
  76. package/dist/kurot/editing/UIOperation.d.ts.map +1 -0
  77. package/dist/kurot/editing/UIOperation.js +2 -0
  78. package/dist/kurot/editing/UIOperation.js.map +1 -0
  79. package/dist/kurot/editing/UITransaction.d.ts +69 -0
  80. package/dist/kurot/editing/UITransaction.d.ts.map +1 -0
  81. package/dist/kurot/editing/UITransaction.js +2 -0
  82. package/dist/kurot/editing/UITransaction.js.map +1 -0
  83. package/dist/kurot/editing/applyContractOperation.d.ts +11 -0
  84. package/dist/kurot/editing/applyContractOperation.d.ts.map +1 -0
  85. package/dist/kurot/editing/applyContractOperation.js +76 -0
  86. package/dist/kurot/editing/applyContractOperation.js.map +1 -0
  87. package/dist/kurot/editing/applyInstanceOperation.d.ts +11 -0
  88. package/dist/kurot/editing/applyInstanceOperation.d.ts.map +1 -0
  89. package/dist/kurot/editing/applyInstanceOperation.js +150 -0
  90. package/dist/kurot/editing/applyInstanceOperation.js.map +1 -0
  91. package/dist/kurot/editing/applyNodeOperation.d.ts +11 -0
  92. package/dist/kurot/editing/applyNodeOperation.d.ts.map +1 -0
  93. package/dist/kurot/editing/applyNodeOperation.js +133 -0
  94. package/dist/kurot/editing/applyNodeOperation.js.map +1 -0
  95. package/dist/kurot/editing/applyUIOperation.d.ts +11 -0
  96. package/dist/kurot/editing/applyUIOperation.d.ts.map +1 -0
  97. package/dist/kurot/editing/applyUIOperation.js +46 -0
  98. package/dist/kurot/editing/applyUIOperation.js.map +1 -0
  99. package/dist/kurot/editing/applyUITransaction.d.ts +6 -0
  100. package/dist/kurot/editing/applyUITransaction.d.ts.map +1 -0
  101. package/dist/kurot/editing/applyUITransaction.js +64 -0
  102. package/dist/kurot/editing/applyUITransaction.js.map +1 -0
  103. package/dist/kurot/editing/diffUIDocuments.d.ts +35 -0
  104. package/dist/kurot/editing/diffUIDocuments.d.ts.map +1 -0
  105. package/dist/kurot/editing/diffUIDocuments.js +137 -0
  106. package/dist/kurot/editing/diffUIDocuments.js.map +1 -0
  107. package/dist/kurot/editing/editHelpers.d.ts +44 -0
  108. package/dist/kurot/editing/editHelpers.d.ts.map +1 -0
  109. package/dist/kurot/editing/editHelpers.js +90 -0
  110. package/dist/kurot/editing/editHelpers.js.map +1 -0
  111. package/dist/kurot/editing/index.d.ts +10 -0
  112. package/dist/kurot/editing/index.d.ts.map +1 -0
  113. package/dist/kurot/editing/index.js +6 -0
  114. package/dist/kurot/editing/index.js.map +1 -0
  115. package/dist/kurot/editing/nodeTree.d.ts +40 -0
  116. package/dist/kurot/editing/nodeTree.d.ts.map +1 -0
  117. package/dist/kurot/editing/nodeTree.js +156 -0
  118. package/dist/kurot/editing/nodeTree.js.map +1 -0
  119. package/dist/kurot/model/UIAssetContract.d.ts +139 -0
  120. package/dist/kurot/model/UIAssetContract.d.ts.map +1 -0
  121. package/dist/kurot/model/UIAssetContract.js +2 -0
  122. package/dist/kurot/model/UIAssetContract.js.map +1 -0
  123. package/dist/kurot/model/UIAssetKind.d.ts +5 -0
  124. package/dist/kurot/model/UIAssetKind.d.ts.map +1 -0
  125. package/dist/kurot/model/UIAssetKind.js +2 -0
  126. package/dist/kurot/model/UIAssetKind.js.map +1 -0
  127. package/dist/kurot/model/UIComponentInstance.d.ts +46 -0
  128. package/dist/kurot/model/UIComponentInstance.d.ts.map +1 -0
  129. package/dist/kurot/model/UIComponentInstance.js +2 -0
  130. package/dist/kurot/model/UIComponentInstance.js.map +1 -0
  131. package/dist/kurot/model/UIDocument.d.ts +10 -0
  132. package/dist/kurot/model/UIDocument.d.ts.map +1 -1
  133. package/dist/kurot/model/UIDocument.js.map +1 -1
  134. package/dist/kurot/model/UINode.d.ts +10 -0
  135. package/dist/kurot/model/UINode.d.ts.map +1 -1
  136. package/dist/kurot/model/UIReference.d.ts +57 -0
  137. package/dist/kurot/model/UIReference.d.ts.map +1 -0
  138. package/dist/kurot/model/UIReference.js +2 -0
  139. package/dist/kurot/model/UIReference.js.map +1 -0
  140. package/dist/kurot/model/index.d.ts +4 -0
  141. package/dist/kurot/model/index.d.ts.map +1 -1
  142. package/dist/kurot/model/index.js.map +1 -1
  143. package/dist/kurot/schema/UIComponentDefinition.d.ts +11 -2
  144. package/dist/kurot/schema/UIComponentDefinition.d.ts.map +1 -1
  145. package/dist/kurot/schema/UIComponentRegistry.js +6 -0
  146. package/dist/kurot/schema/UIComponentRegistry.js.map +1 -1
  147. package/dist/kurot/schema/index.d.ts +1 -0
  148. package/dist/kurot/schema/index.d.ts.map +1 -1
  149. package/dist/kurot/schema/index.js +1 -0
  150. package/dist/kurot/schema/index.js.map +1 -1
  151. package/dist/kurot/schema/matchesUIPropertyDefinition.d.ts +7 -0
  152. package/dist/kurot/schema/matchesUIPropertyDefinition.d.ts.map +1 -0
  153. package/dist/kurot/schema/matchesUIPropertyDefinition.js +65 -0
  154. package/dist/kurot/schema/matchesUIPropertyDefinition.js.map +1 -0
  155. package/dist/kurot/schema/validateComponentDefinition.d.ts.map +1 -1
  156. package/dist/kurot/schema/validateComponentDefinition.js +40 -1
  157. package/dist/kurot/schema/validateComponentDefinition.js.map +1 -1
  158. package/dist/kurot/schema/validateUIDocumentComponents.d.ts +1 -0
  159. package/dist/kurot/schema/validateUIDocumentComponents.d.ts.map +1 -1
  160. package/dist/kurot/schema/validateUIDocumentComponents.js +12 -39
  161. package/dist/kurot/schema/validateUIDocumentComponents.js.map +1 -1
  162. package/dist/kurot/serialization/json.d.ts.map +1 -1
  163. package/dist/kurot/serialization/json.js +126 -0
  164. package/dist/kurot/serialization/json.js.map +1 -1
  165. package/dist/kurot/validation/UIDiagnostic.d.ts +1 -1
  166. package/dist/kurot/validation/UIDiagnostic.d.ts.map +1 -1
  167. package/dist/kurot/validation/validateUIAssetContract.d.ts +7 -0
  168. package/dist/kurot/validation/validateUIAssetContract.d.ts.map +1 -0
  169. package/dist/kurot/validation/validateUIAssetContract.js +154 -0
  170. package/dist/kurot/validation/validateUIAssetContract.js.map +1 -0
  171. package/dist/kurot/validation/validateUIAssetModes.d.ts +6 -0
  172. package/dist/kurot/validation/validateUIAssetModes.d.ts.map +1 -0
  173. package/dist/kurot/validation/validateUIAssetModes.js +57 -0
  174. package/dist/kurot/validation/validateUIAssetModes.js.map +1 -0
  175. package/dist/kurot/validation/validateUIComponentInstance.d.ts +6 -0
  176. package/dist/kurot/validation/validateUIComponentInstance.d.ts.map +1 -0
  177. package/dist/kurot/validation/validateUIComponentInstance.js +77 -0
  178. package/dist/kurot/validation/validateUIComponentInstance.js.map +1 -0
  179. package/dist/kurot/validation/validateUIDocument.d.ts.map +1 -1
  180. package/dist/kurot/validation/validateUIDocument.js +51 -73
  181. package/dist/kurot/validation/validateUIDocument.js.map +1 -1
  182. package/dist/kurot/validation/validationHelpers.d.ts +26 -0
  183. package/dist/kurot/validation/validationHelpers.d.ts.map +1 -0
  184. package/dist/kurot/validation/validationHelpers.js +120 -0
  185. package/dist/kurot/validation/validationHelpers.js.map +1 -0
  186. package/dist/kurot/version.d.ts +1 -1
  187. package/dist/kurot/version.js +1 -1
  188. package/package.json +2 -2
@@ -0,0 +1,69 @@
1
+ import type { UIDocument } from '../model/UIDocument.js';
2
+ import type { UIDiagnostic } from '../validation/UIDiagnostic.js';
3
+ import type { UIDocumentChange } from './diffUIDocuments.js';
4
+ import type { UIOperation } from './UIOperation.js';
5
+ /**
6
+ * Immutable document snapshot paired with its editing revision.
7
+ */
8
+ export interface UIRevisionSnapshot {
9
+ /**
10
+ * Current semantic document.
11
+ */
12
+ readonly document: UIDocument;
13
+ /**
14
+ * Monotonically increasing edit revision.
15
+ */
16
+ readonly revision: number;
17
+ }
18
+ /**
19
+ * Atomic group of semantic operations expressing one user intent.
20
+ */
21
+ export interface UITransaction {
22
+ /**
23
+ * Caller-supplied stable transaction identity.
24
+ */
25
+ readonly id: string;
26
+ /**
27
+ * Revision used when the transaction was authored.
28
+ */
29
+ readonly expectedRevision: number;
30
+ /**
31
+ * Human-readable intent shown in review and history UI.
32
+ */
33
+ readonly summary: string;
34
+ /**
35
+ * Ordered operations committed atomically.
36
+ */
37
+ readonly operations: readonly UIOperation[];
38
+ }
39
+ /**
40
+ * Optional semantic validation performed against the final transaction result.
41
+ */
42
+ export type UITransactionValidator = (document: UIDocument) => readonly UIDiagnostic[];
43
+ /**
44
+ * Transaction application customization.
45
+ */
46
+ export interface ApplyUITransactionOptions {
47
+ /**
48
+ * Project-aware validator run after built-in structural validation.
49
+ */
50
+ readonly validate?: UITransactionValidator;
51
+ }
52
+ /**
53
+ * Committed transaction result and its complete undo information.
54
+ */
55
+ export interface UITransactionResult extends UIRevisionSnapshot {
56
+ /**
57
+ * Original transaction that was committed.
58
+ */
59
+ readonly transaction: UITransaction;
60
+ /**
61
+ * Reverse-ordered transaction that restores the input document.
62
+ */
63
+ readonly inverse: UITransaction;
64
+ /**
65
+ * Deterministic semantic differences produced by the commit.
66
+ */
67
+ readonly changes: readonly UIDocumentChange[];
68
+ }
69
+ //# sourceMappingURL=UITransaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UITransaction.d.ts","sourceRoot":"","sources":["../../../src/kurot/editing/UITransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;IAE9B;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAElC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,SAAS,WAAW,EAAE,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,CACpC,QAAQ,EAAE,UAAU,KAChB,SAAS,YAAY,EAAE,CAAC;AAE7B;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACzC;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,sBAAsB,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,kBAAkB;IAC9D;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC;IAEpC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAEhC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAC9C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=UITransaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UITransaction.js","sourceRoot":"","sources":["../../../src/kurot/editing/UITransaction.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import type { UIDocument } from '../model/UIDocument.js';
2
+ import type { UIOperation, UIOperationResult } from './UIOperation.js';
3
+ type UIContractOperation = Extract<UIOperation, {
4
+ readonly kind: `${'remove' | 'set'}-contract-${string}`;
5
+ }>;
6
+ /**
7
+ * Applies one contract-entry operation and returns its exact inverse.
8
+ */
9
+ export declare function applyContractOperation(document: UIDocument, operation: UIContractOperation): UIOperationResult;
10
+ export {};
11
+ //# sourceMappingURL=applyContractOperation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyContractOperation.d.ts","sourceRoot":"","sources":["../../../src/kurot/editing/applyContractOperation.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGvE,KAAK,mBAAmB,GAAG,OAAO,CACjC,WAAW,EACX;IAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,QAAQ,GAAG,KAAK,aAAa,MAAM,EAAE,CAAA;CAAE,CAC3D,CAAC;AAEF;;GAEG;AACH,wBAAgB,sBAAsB,CACrC,QAAQ,EAAE,UAAU,EACpB,SAAS,EAAE,mBAAmB,GAC5B,iBAAiB,CAgDnB"}
@@ -0,0 +1,76 @@
1
+ import { missingValue, requireName } from './editHelpers.js';
2
+ /**
3
+ * Applies one contract-entry operation and returns its exact inverse.
4
+ */
5
+ export function applyContractOperation(document, operation) {
6
+ switch (operation.kind) {
7
+ case 'set-contract-parameter':
8
+ return setEntry(document, operation.name, 'parameters', operation.definition, previous => previous
9
+ ? { kind: 'set-contract-parameter', name: operation.name, definition: previous }
10
+ : { kind: 'remove-contract-parameter', name: operation.name });
11
+ case 'remove-contract-parameter':
12
+ return removeEntry(document, operation.name, 'parameters', previous => ({
13
+ kind: 'set-contract-parameter', name: operation.name, definition: previous,
14
+ }));
15
+ case 'set-contract-part':
16
+ return setEntry(document, operation.name, 'parts', operation.definition, previous => previous
17
+ ? { kind: 'set-contract-part', name: operation.name, definition: previous }
18
+ : { kind: 'remove-contract-part', name: operation.name });
19
+ case 'remove-contract-part':
20
+ return removeEntry(document, operation.name, 'parts', previous => ({
21
+ kind: 'set-contract-part', name: operation.name, definition: previous,
22
+ }));
23
+ case 'set-contract-slot':
24
+ return setEntry(document, operation.name, 'slots', operation.definition, previous => previous
25
+ ? { kind: 'set-contract-slot', name: operation.name, definition: previous }
26
+ : { kind: 'remove-contract-slot', name: operation.name });
27
+ case 'remove-contract-slot':
28
+ return removeEntry(document, operation.name, 'slots', previous => ({
29
+ kind: 'set-contract-slot', name: operation.name, definition: previous,
30
+ }));
31
+ case 'set-contract-state':
32
+ return setEntry(document, operation.name, 'states', operation.definition, previous => previous
33
+ ? { kind: 'set-contract-state', name: operation.name, definition: previous }
34
+ : { kind: 'remove-contract-state', name: operation.name });
35
+ case 'remove-contract-state':
36
+ return removeEntry(document, operation.name, 'states', previous => ({
37
+ kind: 'set-contract-state', name: operation.name, definition: previous,
38
+ }));
39
+ case 'set-contract-variant':
40
+ return setEntry(document, operation.name, 'variants', operation.definition, previous => previous
41
+ ? { kind: 'set-contract-variant', name: operation.name, definition: previous }
42
+ : { kind: 'remove-contract-variant', name: operation.name });
43
+ case 'remove-contract-variant':
44
+ return removeEntry(document, operation.name, 'variants', previous => ({
45
+ kind: 'set-contract-variant', name: operation.name, definition: previous,
46
+ }));
47
+ }
48
+ }
49
+ function setEntry(document, nameInput, key, definition, createInverse) {
50
+ const name = requireName(nameInput, 'Contract entry name');
51
+ const entries = document.contract[key];
52
+ const contract = {
53
+ ...document.contract,
54
+ [key]: { ...entries, [name]: definition },
55
+ };
56
+ return {
57
+ document: { ...document, contract },
58
+ inverse: createInverse(entries[name]),
59
+ };
60
+ }
61
+ function removeEntry(document, name, key, createInverse) {
62
+ const entries = document.contract[key];
63
+ const previous = entries[name];
64
+ if (!previous)
65
+ throw missingValue('Contract entry', '$.name');
66
+ const nextEntries = { ...entries };
67
+ delete nextEntries[name];
68
+ return {
69
+ document: {
70
+ ...document,
71
+ contract: { ...document.contract, [key]: nextEntries },
72
+ },
73
+ inverse: createInverse(previous),
74
+ };
75
+ }
76
+ //# sourceMappingURL=applyContractOperation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyContractOperation.js","sourceRoot":"","sources":["../../../src/kurot/editing/applyContractOperation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { UIDocument } from '../model/UIDocument.js';
2
+ import type { UIOperation, UIOperationResult } from './UIOperation.js';
3
+ type UIInstanceOperation = Extract<UIOperation, {
4
+ readonly kind: 'remove-instance-override' | 'remove-instance-parameter' | 'remove-instance-variant' | 'remove-node-instance' | 'set-instance-override' | 'set-instance-parameter' | 'set-instance-variant' | 'set-node-instance';
5
+ }>;
6
+ /**
7
+ * Applies one reusable-instance operation and returns its exact inverse.
8
+ */
9
+ export declare function applyInstanceOperation(document: UIDocument, operation: UIInstanceOperation): UIOperationResult;
10
+ export {};
11
+ //# sourceMappingURL=applyInstanceOperation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyInstanceOperation.d.ts","sourceRoot":"","sources":["../../../src/kurot/editing/applyInstanceOperation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AASvE,KAAK,mBAAmB,GAAG,OAAO,CACjC,WAAW,EACX;IACC,QAAQ,CAAC,IAAI,EACV,0BAA0B,GAC1B,2BAA2B,GAC3B,yBAAyB,GACzB,sBAAsB,GACtB,uBAAuB,GACvB,wBAAwB,GACxB,sBAAsB,GACtB,mBAAmB,CAAC;CACvB,CACD,CAAC;AAEF;;GAEG;AACH,wBAAgB,sBAAsB,CACrC,QAAQ,EAAE,UAAU,EACpB,SAAS,EAAE,mBAAmB,GAC5B,iBAAiB,CAmBnB"}
@@ -0,0 +1,150 @@
1
+ import { missingInstance, missingValue, requireName, updateInstance, updateNode, } from './editHelpers.js';
2
+ /**
3
+ * Applies one reusable-instance operation and returns its exact inverse.
4
+ */
5
+ export function applyInstanceOperation(document, operation) {
6
+ switch (operation.kind) {
7
+ case 'set-node-instance':
8
+ return setNodeInstance(document, operation);
9
+ case 'remove-node-instance':
10
+ return removeNodeInstance(document, operation);
11
+ case 'set-instance-parameter':
12
+ return setInstanceParameter(document, operation);
13
+ case 'remove-instance-parameter':
14
+ return removeInstanceParameter(document, operation);
15
+ case 'set-instance-variant':
16
+ return setInstanceVariant(document, operation);
17
+ case 'remove-instance-variant':
18
+ return removeInstanceVariant(document, operation);
19
+ case 'set-instance-override':
20
+ return setInstanceOverride(document, operation);
21
+ case 'remove-instance-override':
22
+ return removeInstanceOverride(document, operation);
23
+ }
24
+ }
25
+ function setNodeInstance(document, operation) {
26
+ return updateNode(document, operation.nodeId, node => ({
27
+ documentNode: { ...node, instance: operation.instance },
28
+ inverse: node.instance
29
+ ? { kind: 'set-node-instance', nodeId: node.id, instance: node.instance }
30
+ : { kind: 'remove-node-instance', nodeId: node.id },
31
+ }));
32
+ }
33
+ function removeNodeInstance(document, operation) {
34
+ return updateNode(document, operation.nodeId, node => {
35
+ if (!node.instance)
36
+ throw missingInstance(node.id);
37
+ const { instance, ...documentNode } = node;
38
+ return {
39
+ documentNode,
40
+ inverse: { kind: 'set-node-instance', nodeId: node.id, instance },
41
+ };
42
+ });
43
+ }
44
+ function setInstanceParameter(document, operation) {
45
+ const parameter = requireName(operation.parameter, 'Parameter name');
46
+ return updateInstance(document, operation.nodeId, instance => ({
47
+ instance: {
48
+ ...instance,
49
+ parameters: { ...instance.parameters, [parameter]: operation.value },
50
+ },
51
+ inverse: Object.hasOwn(instance.parameters, parameter)
52
+ ? {
53
+ kind: 'set-instance-parameter',
54
+ nodeId: operation.nodeId,
55
+ parameter,
56
+ value: instance.parameters[parameter],
57
+ }
58
+ : { kind: 'remove-instance-parameter', nodeId: operation.nodeId, parameter },
59
+ }));
60
+ }
61
+ function removeInstanceParameter(document, operation) {
62
+ return updateInstance(document, operation.nodeId, instance => {
63
+ const value = instance.parameters[operation.parameter];
64
+ if (value === undefined)
65
+ throw missingValue('Instance parameter', '$.parameter');
66
+ const parameters = { ...instance.parameters };
67
+ delete parameters[operation.parameter];
68
+ return {
69
+ instance: { ...instance, parameters },
70
+ inverse: {
71
+ kind: 'set-instance-parameter',
72
+ nodeId: operation.nodeId,
73
+ parameter: operation.parameter,
74
+ value,
75
+ },
76
+ };
77
+ });
78
+ }
79
+ function setInstanceVariant(document, operation) {
80
+ const variant = requireName(operation.variant, 'Variant name');
81
+ return updateInstance(document, operation.nodeId, instance => ({
82
+ instance: { ...instance, variant },
83
+ inverse: instance.variant
84
+ ? {
85
+ kind: 'set-instance-variant',
86
+ nodeId: operation.nodeId,
87
+ variant: instance.variant,
88
+ }
89
+ : { kind: 'remove-instance-variant', nodeId: operation.nodeId },
90
+ }));
91
+ }
92
+ function removeInstanceVariant(document, operation) {
93
+ return updateInstance(document, operation.nodeId, instance => {
94
+ if (!instance.variant)
95
+ throw missingValue('Instance variant', '$.nodeId');
96
+ const { variant, ...nextInstance } = instance;
97
+ return {
98
+ instance: nextInstance,
99
+ inverse: { kind: 'set-instance-variant', nodeId: operation.nodeId, variant },
100
+ };
101
+ });
102
+ }
103
+ function setInstanceOverride(document, operation) {
104
+ return updateInstance(document, operation.nodeId, instance => {
105
+ const index = instance.overrides.findIndex(item => item.part === operation.override.part &&
106
+ item.property === operation.override.property);
107
+ const overrides = [...instance.overrides];
108
+ if (index >= 0)
109
+ overrides[index] = operation.override;
110
+ else
111
+ overrides.push(operation.override);
112
+ return {
113
+ instance: { ...instance, overrides },
114
+ inverse: index >= 0
115
+ ? {
116
+ kind: 'set-instance-override',
117
+ nodeId: operation.nodeId,
118
+ override: instance.overrides[index],
119
+ }
120
+ : {
121
+ kind: 'remove-instance-override',
122
+ nodeId: operation.nodeId,
123
+ part: operation.override.part,
124
+ property: operation.override.property,
125
+ },
126
+ };
127
+ });
128
+ }
129
+ function removeInstanceOverride(document, operation) {
130
+ return updateInstance(document, operation.nodeId, instance => {
131
+ const index = instance.overrides.findIndex(item => item.part === operation.part && item.property === operation.property);
132
+ if (index < 0)
133
+ throw missingValue('Instance override', '$');
134
+ return {
135
+ instance: {
136
+ ...instance,
137
+ overrides: [
138
+ ...instance.overrides.slice(0, index),
139
+ ...instance.overrides.slice(index + 1),
140
+ ],
141
+ },
142
+ inverse: {
143
+ kind: 'set-instance-override',
144
+ nodeId: operation.nodeId,
145
+ override: instance.overrides[index],
146
+ },
147
+ };
148
+ });
149
+ }
150
+ //# sourceMappingURL=applyInstanceOperation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyInstanceOperation.js","sourceRoot":"","sources":["../../../src/kurot/editing/applyInstanceOperation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { UIDocument } from '../model/UIDocument.js';
2
+ import type { UIOperation, UIOperationResult } from './UIOperation.js';
3
+ type UINodeOperation = Extract<UIOperation, {
4
+ readonly kind: 'insert-node' | 'move-node' | 'remove-node' | 'remove-node-appearance' | 'remove-node-property' | 'replace-node-type' | 'set-node-appearance' | 'set-node-property';
5
+ }>;
6
+ /**
7
+ * Applies one structural or node-property operation and returns its inverse.
8
+ */
9
+ export declare function applyNodeOperation(document: UIDocument, operation: UINodeOperation): UIOperationResult;
10
+ export {};
11
+ //# sourceMappingURL=applyNodeOperation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyNodeOperation.d.ts","sourceRoot":"","sources":["../../../src/kurot/editing/applyNodeOperation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAWvE,KAAK,eAAe,GAAG,OAAO,CAC7B,WAAW,EACX;IACC,QAAQ,CAAC,IAAI,EACV,aAAa,GACb,WAAW,GACX,aAAa,GACb,wBAAwB,GACxB,sBAAsB,GACtB,mBAAmB,GACnB,qBAAqB,GACrB,mBAAmB,CAAC;CACvB,CACD,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,CACjC,QAAQ,EAAE,UAAU,EACpB,SAAS,EAAE,eAAe,GACxB,iBAAiB,CAsBnB"}
@@ -0,0 +1,133 @@
1
+ import { UIEditError } from './UIEditError.js';
2
+ import { assertInsertIdsAvailable, missingValue, nodeNotFound, requireName, updateNode, validateTarget, } from './editHelpers.js';
3
+ import { insertUINode, removeUINode } from './nodeTree.js';
4
+ /**
5
+ * Applies one structural or node-property operation and returns its inverse.
6
+ */
7
+ export function applyNodeOperation(document, operation) {
8
+ switch (operation.kind) {
9
+ case 'insert-node':
10
+ return insertNode(document, operation);
11
+ case 'remove-node':
12
+ return removeNode(document, operation);
13
+ case 'move-node':
14
+ return moveNode(document, operation);
15
+ case 'replace-node-type':
16
+ return updateNode(document, operation.nodeId, node => ({
17
+ documentNode: { ...node, type: requireName(operation.type, 'Node type') },
18
+ inverse: { kind: 'replace-node-type', nodeId: node.id, type: node.type },
19
+ }));
20
+ case 'set-node-property':
21
+ return setNodeProperty(document, operation);
22
+ case 'remove-node-property':
23
+ return removeNodeProperty(document, operation);
24
+ case 'set-node-appearance':
25
+ return setNodeAppearance(document, operation);
26
+ case 'remove-node-appearance':
27
+ return removeNodeAppearance(document, operation);
28
+ }
29
+ }
30
+ function insertNode(document, operation) {
31
+ validateTarget(document.root, operation.target, operation.index);
32
+ assertInsertIdsAvailable(document.root, operation.node);
33
+ const root = insertUINode(document.root, operation.target, operation.index, operation.node);
34
+ if (!root)
35
+ throw nodeNotFound(operation.target.parentId, '$.target.parentId');
36
+ return {
37
+ document: { ...document, root },
38
+ inverse: { kind: 'remove-node', nodeId: operation.node.id },
39
+ };
40
+ }
41
+ function removeNode(document, operation) {
42
+ if (document.root.id === operation.nodeId) {
43
+ throw new UIEditError('root-operation', 'The document root cannot be removed.', '$.nodeId');
44
+ }
45
+ const removed = removeUINode(document.root, operation.nodeId);
46
+ if (!removed)
47
+ throw nodeNotFound(operation.nodeId, '$.nodeId');
48
+ return {
49
+ document: { ...document, root: removed.root },
50
+ inverse: {
51
+ kind: 'insert-node',
52
+ target: removed.target,
53
+ index: removed.index,
54
+ node: removed.node,
55
+ },
56
+ };
57
+ }
58
+ function moveNode(document, operation) {
59
+ if (document.root.id === operation.nodeId) {
60
+ throw new UIEditError('root-operation', 'The document root cannot be moved.', '$.nodeId');
61
+ }
62
+ const removed = removeUINode(document.root, operation.nodeId);
63
+ if (!removed)
64
+ throw nodeNotFound(operation.nodeId, '$.nodeId');
65
+ validateTarget(removed.root, operation.target, operation.index);
66
+ const root = insertUINode(removed.root, operation.target, operation.index, removed.node);
67
+ if (!root)
68
+ throw nodeNotFound(operation.target.parentId, '$.target.parentId');
69
+ return {
70
+ document: { ...document, root },
71
+ inverse: {
72
+ kind: 'move-node',
73
+ nodeId: operation.nodeId,
74
+ target: removed.target,
75
+ index: removed.index,
76
+ },
77
+ };
78
+ }
79
+ function setNodeProperty(document, operation) {
80
+ const property = requireName(operation.property, 'Property name');
81
+ return updateNode(document, operation.nodeId, node => ({
82
+ documentNode: {
83
+ ...node,
84
+ properties: { ...node.properties, [property]: operation.value },
85
+ },
86
+ inverse: Object.hasOwn(node.properties, property)
87
+ ? {
88
+ kind: 'set-node-property',
89
+ nodeId: node.id,
90
+ property,
91
+ value: node.properties[property],
92
+ }
93
+ : { kind: 'remove-node-property', nodeId: node.id, property },
94
+ }));
95
+ }
96
+ function removeNodeProperty(document, operation) {
97
+ return updateNode(document, operation.nodeId, node => {
98
+ const value = node.properties[operation.property];
99
+ if (value === undefined)
100
+ throw missingValue('Node property', '$.property');
101
+ const properties = { ...node.properties };
102
+ delete properties[operation.property];
103
+ return {
104
+ documentNode: { ...node, properties },
105
+ inverse: {
106
+ kind: 'set-node-property',
107
+ nodeId: node.id,
108
+ property: operation.property,
109
+ value,
110
+ },
111
+ };
112
+ });
113
+ }
114
+ function setNodeAppearance(document, operation) {
115
+ return updateNode(document, operation.nodeId, node => ({
116
+ documentNode: { ...node, appearance: operation.appearance },
117
+ inverse: node.appearance
118
+ ? { kind: 'set-node-appearance', nodeId: node.id, appearance: node.appearance }
119
+ : { kind: 'remove-node-appearance', nodeId: node.id },
120
+ }));
121
+ }
122
+ function removeNodeAppearance(document, operation) {
123
+ return updateNode(document, operation.nodeId, node => {
124
+ if (!node.appearance)
125
+ throw missingValue('Node appearance', '$.nodeId');
126
+ const { appearance, ...documentNode } = node;
127
+ return {
128
+ documentNode,
129
+ inverse: { kind: 'set-node-appearance', nodeId: node.id, appearance },
130
+ };
131
+ });
132
+ }
133
+ //# sourceMappingURL=applyNodeOperation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyNodeOperation.js","sourceRoot":"","sources":["../../../src/kurot/editing/applyNodeOperation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EACN,wBAAwB,EACxB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,UAAU,EACV,cAAc,GACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAiB3D;;GAEG;AACH,MAAM,UAAU,kBAAkB,CACjC,QAAoB,EACpB,SAA0B;IAE1B,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;QACxB,KAAK,aAAa;YACjB,OAAO,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACxC,KAAK,aAAa;YACjB,OAAO,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACxC,KAAK,WAAW;YACf,OAAO,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACtC,KAAK,mBAAmB;YACvB,OAAO,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;gBACtD,YAAY,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE;gBACzE,OAAO,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;aACxE,CAAC,CAAC,CAAC;QACL,KAAK,mBAAmB;YACvB,OAAO,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC7C,KAAK,sBAAsB;YAC1B,OAAO,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAChD,KAAK,qBAAqB;YACzB,OAAO,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC/C,KAAK,wBAAwB;YAC5B,OAAO,oBAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACnD,CAAC;AACF,CAAC;AAED,SAAS,UAAU,CAClB,QAAoB,EACpB,SAAqE;IAErE,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IACjE,wBAAwB,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5F,IAAI,CAAC,IAAI;QAAE,MAAM,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAC9E,OAAO;QACN,QAAQ,EAAE,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE;QAC/B,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE;KAC3D,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAClB,QAAoB,EACpB,SAAqE;IAErE,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC;QAC3C,MAAM,IAAI,WAAW,CAAC,gBAAgB,EAAE,sCAAsC,EAAE,UAAU,CAAC,CAAC;IAC7F,CAAC;IACD,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAC9D,IAAI,CAAC,OAAO;QAAE,MAAM,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC/D,OAAO;QACN,QAAQ,EAAE,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE;QAC7C,OAAO,EAAE;YACR,IAAI,EAAE,aAAa;YACnB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,IAAI,EAAE,OAAO,CAAC,IAAI;SAClB;KACD,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAChB,QAAoB,EACpB,SAAmE;IAEnE,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC;QAC3C,MAAM,IAAI,WAAW,CAAC,gBAAgB,EAAE,oCAAoC,EAAE,UAAU,CAAC,CAAC;IAC3F,CAAC;IACD,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAC9D,IAAI,CAAC,OAAO;QAAE,MAAM,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC/D,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACzF,IAAI,CAAC,IAAI;QAAE,MAAM,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAC9E,OAAO;QACN,QAAQ,EAAE,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE;QAC/B,OAAO,EAAE;YACR,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;SACpB;KACD,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CACvB,QAAoB,EACpB,SAA2E;IAE3E,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IAClE,OAAO,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACtD,YAAY,EAAE;YACb,GAAG,IAAI;YACP,UAAU,EAAE,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,KAAK,EAAE;SAC/D;QACD,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC;YAChD,CAAC,CAAC;gBACA,IAAI,EAAE,mBAAmB;gBACzB,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,QAAQ;gBACR,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAE;aACjC;YACF,CAAC,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE;KAC9D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAC1B,QAAoB,EACpB,SAA8E;IAE9E,OAAO,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM,YAAY,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;QAC3E,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1C,OAAO,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACtC,OAAO;YACN,YAAY,EAAE,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE;YACrC,OAAO,EAAE;gBACR,IAAI,EAAE,mBAAmB;gBACzB,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,QAAQ,EAAE,SAAS,CAAC,QAAQ;gBAC5B,KAAK;aACL;SACD,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CACzB,QAAoB,EACpB,SAA6E;IAE7E,OAAO,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACtD,YAAY,EAAE,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,UAAU,EAAE;QAC3D,OAAO,EAAE,IAAI,CAAC,UAAU;YACvB,CAAC,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;YAC/E,CAAC,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE;KACtD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB,CAC5B,QAAoB,EACpB,SAAgF;IAEhF,OAAO,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;QACpD,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,MAAM,YAAY,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;QACxE,MAAM,EAAE,UAAU,EAAE,GAAG,YAAY,EAAE,GAAG,IAAI,CAAC;QAC7C,OAAO;YACN,YAAY;YACZ,OAAO,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE;SACrE,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { UIDocument } from '../model/UIDocument.js';
2
+ import type { UIOperation, UIOperationResult } from './UIOperation.js';
3
+ /**
4
+ * Applies one semantic operation and rejects an invalid resulting document.
5
+ */
6
+ export declare function applyUIOperation(document: UIDocument, operation: UIOperation): UIOperationResult;
7
+ /**
8
+ * Applies one operation without final validation so transactions may be atomic.
9
+ */
10
+ export declare function applyUIOperationUnchecked(document: UIDocument, operation: UIOperation): UIOperationResult;
11
+ //# sourceMappingURL=applyUIOperation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyUIOperation.d.ts","sourceRoot":"","sources":["../../../src/kurot/editing/applyUIOperation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAMzD,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAEvE;;GAEG;AACH,wBAAgB,gBAAgB,CAC/B,QAAQ,EAAE,UAAU,EACpB,SAAS,EAAE,WAAW,GACpB,iBAAiB,CAYnB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACxC,QAAQ,EAAE,UAAU,EACpB,SAAS,EAAE,WAAW,GACpB,iBAAiB,CAyBnB"}
@@ -0,0 +1,46 @@
1
+ import { validateUIDocument } from '../validation/validateUIDocument.js';
2
+ import { applyContractOperation } from './applyContractOperation.js';
3
+ import { applyInstanceOperation } from './applyInstanceOperation.js';
4
+ import { applyNodeOperation } from './applyNodeOperation.js';
5
+ import { UIEditError } from './UIEditError.js';
6
+ /**
7
+ * Applies one semantic operation and rejects an invalid resulting document.
8
+ */
9
+ export function applyUIOperation(document, operation) {
10
+ const result = applyUIOperationUnchecked(document, operation);
11
+ const diagnostics = validateUIDocument(result.document);
12
+ if (diagnostics.length > 0) {
13
+ throw new UIEditError('invalid-edit-result', 'Operation produced an invalid UI document.', '$', diagnostics);
14
+ }
15
+ return result;
16
+ }
17
+ /**
18
+ * Applies one operation without final validation so transactions may be atomic.
19
+ */
20
+ export function applyUIOperationUnchecked(document, operation) {
21
+ switch (operation.kind) {
22
+ case 'set-contract-parameter':
23
+ case 'remove-contract-parameter':
24
+ case 'set-contract-part':
25
+ case 'remove-contract-part':
26
+ case 'set-contract-slot':
27
+ case 'remove-contract-slot':
28
+ case 'set-contract-state':
29
+ case 'remove-contract-state':
30
+ case 'set-contract-variant':
31
+ case 'remove-contract-variant':
32
+ return applyContractOperation(document, operation);
33
+ case 'set-node-instance':
34
+ case 'remove-node-instance':
35
+ case 'set-instance-parameter':
36
+ case 'remove-instance-parameter':
37
+ case 'set-instance-variant':
38
+ case 'remove-instance-variant':
39
+ case 'set-instance-override':
40
+ case 'remove-instance-override':
41
+ return applyInstanceOperation(document, operation);
42
+ default:
43
+ return applyNodeOperation(document, operation);
44
+ }
45
+ }
46
+ //# sourceMappingURL=applyUIOperation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyUIOperation.js","sourceRoot":"","sources":["../../../src/kurot/editing/applyUIOperation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC/B,QAAoB,EACpB,SAAsB;IAEtB,MAAM,MAAM,GAAG,yBAAyB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACxD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,WAAW,CACpB,qBAAqB,EACrB,4CAA4C,EAC5C,GAAG,EACH,WAAW,CACX,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACxC,QAAoB,EACpB,SAAsB;IAEtB,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;QACxB,KAAK,wBAAwB,CAAC;QAC9B,KAAK,2BAA2B,CAAC;QACjC,KAAK,mBAAmB,CAAC;QACzB,KAAK,sBAAsB,CAAC;QAC5B,KAAK,mBAAmB,CAAC;QACzB,KAAK,sBAAsB,CAAC;QAC5B,KAAK,oBAAoB,CAAC;QAC1B,KAAK,uBAAuB,CAAC;QAC7B,KAAK,sBAAsB,CAAC;QAC5B,KAAK,yBAAyB;YAC7B,OAAO,sBAAsB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACpD,KAAK,mBAAmB,CAAC;QACzB,KAAK,sBAAsB,CAAC;QAC5B,KAAK,wBAAwB,CAAC;QAC9B,KAAK,2BAA2B,CAAC;QACjC,KAAK,sBAAsB,CAAC;QAC5B,KAAK,yBAAyB,CAAC;QAC/B,KAAK,uBAAuB,CAAC;QAC7B,KAAK,0BAA0B;YAC9B,OAAO,sBAAsB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACpD;YACC,OAAO,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACjD,CAAC;AACF,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { ApplyUITransactionOptions, UIRevisionSnapshot, UITransaction, UITransactionResult } from './UITransaction.js';
2
+ /**
3
+ * Applies an ordered transaction atomically against one revision snapshot.
4
+ */
5
+ export declare function applyUITransaction(snapshot: UIRevisionSnapshot, transaction: UITransaction, options?: ApplyUITransactionOptions): UITransactionResult;
6
+ //# sourceMappingURL=applyUITransaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyUITransaction.d.ts","sourceRoot":"","sources":["../../../src/kurot/editing/applyUITransaction.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACX,yBAAyB,EACzB,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,wBAAgB,kBAAkB,CACjC,QAAQ,EAAE,kBAAkB,EAC5B,WAAW,EAAE,aAAa,EAC1B,OAAO,GAAE,yBAA8B,GACrC,mBAAmB,CA8CrB"}