@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.
- package/README.md +112 -12
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/kurot/assets/UIAssetRegistry.d.ts +47 -0
- package/dist/kurot/assets/UIAssetRegistry.d.ts.map +1 -0
- package/dist/kurot/assets/UIAssetRegistry.js +139 -0
- package/dist/kurot/assets/UIAssetRegistry.js.map +1 -0
- package/dist/kurot/assets/UIProjectDefinition.d.ts +33 -0
- package/dist/kurot/assets/UIProjectDefinition.d.ts.map +1 -0
- package/dist/kurot/assets/UIProjectDefinition.js +2 -0
- package/dist/kurot/assets/UIProjectDefinition.js.map +1 -0
- package/dist/kurot/assets/assetTraversal.d.ts +30 -0
- package/dist/kurot/assets/assetTraversal.d.ts.map +1 -0
- package/dist/kurot/assets/assetTraversal.js +96 -0
- package/dist/kurot/assets/assetTraversal.js.map +1 -0
- package/dist/kurot/assets/index.d.ts +4 -0
- package/dist/kurot/assets/index.d.ts.map +1 -0
- package/dist/kurot/assets/index.js +3 -0
- package/dist/kurot/assets/index.js.map +1 -0
- package/dist/kurot/assets/validateUIAssetInstances.d.ts +9 -0
- package/dist/kurot/assets/validateUIAssetInstances.d.ts.map +1 -0
- package/dist/kurot/assets/validateUIAssetInstances.js +114 -0
- package/dist/kurot/assets/validateUIAssetInstances.js.map +1 -0
- package/dist/kurot/assets/validateUIAssetOverrides.d.ts +8 -0
- package/dist/kurot/assets/validateUIAssetOverrides.d.ts.map +1 -0
- package/dist/kurot/assets/validateUIAssetOverrides.js +55 -0
- package/dist/kurot/assets/validateUIAssetOverrides.js.map +1 -0
- package/dist/kurot/assets/validateUIAssetRegistry.d.ts +8 -0
- package/dist/kurot/assets/validateUIAssetRegistry.d.ts.map +1 -0
- package/dist/kurot/assets/validateUIAssetRegistry.js +79 -0
- package/dist/kurot/assets/validateUIAssetRegistry.js.map +1 -0
- package/dist/kurot/assets/validateUIProjectReferences.d.ts +8 -0
- package/dist/kurot/assets/validateUIProjectReferences.d.ts.map +1 -0
- package/dist/kurot/assets/validateUIProjectReferences.js +50 -0
- package/dist/kurot/assets/validateUIProjectReferences.js.map +1 -0
- package/dist/kurot/catalog/properties/basic-component-properties.d.ts.map +1 -1
- package/dist/kurot/catalog/properties/basic-component-properties.js +8 -10
- package/dist/kurot/catalog/properties/basic-component-properties.js.map +1 -1
- package/dist/kurot/catalog/properties/foundation-properties.d.ts.map +1 -1
- package/dist/kurot/catalog/properties/foundation-properties.js +6 -17
- package/dist/kurot/catalog/properties/foundation-properties.js.map +1 -1
- package/dist/kurot/document/create.d.ts +20 -0
- package/dist/kurot/document/create.d.ts.map +1 -1
- package/dist/kurot/document/create.js +10 -0
- package/dist/kurot/document/create.js.map +1 -1
- package/dist/kurot/document/createAssetContract.d.ts +39 -0
- package/dist/kurot/document/createAssetContract.d.ts.map +1 -0
- package/dist/kurot/document/createAssetContract.js +17 -0
- package/dist/kurot/document/createAssetContract.js.map +1 -0
- package/dist/kurot/document/createComponentInstance.d.ts +34 -0
- package/dist/kurot/document/createComponentInstance.d.ts.map +1 -0
- package/dist/kurot/document/createComponentInstance.js +13 -0
- package/dist/kurot/document/createComponentInstance.js.map +1 -0
- package/dist/kurot/document/createReferences.d.ts +14 -0
- package/dist/kurot/document/createReferences.d.ts.map +1 -0
- package/dist/kurot/document/createReferences.js +29 -0
- package/dist/kurot/document/createReferences.js.map +1 -0
- package/dist/kurot/document/index.d.ts +5 -0
- package/dist/kurot/document/index.d.ts.map +1 -1
- package/dist/kurot/document/index.js +3 -0
- package/dist/kurot/document/index.js.map +1 -1
- package/dist/kurot/document/query.d.ts.map +1 -1
- package/dist/kurot/document/query.js +16 -0
- package/dist/kurot/document/query.js.map +1 -1
- package/dist/kurot/editing/UIDocumentHistory.d.ts +41 -0
- package/dist/kurot/editing/UIDocumentHistory.d.ts.map +1 -0
- package/dist/kurot/editing/UIDocumentHistory.js +95 -0
- package/dist/kurot/editing/UIDocumentHistory.js.map +1 -0
- package/dist/kurot/editing/UIEditError.d.ts +24 -0
- package/dist/kurot/editing/UIEditError.d.ts.map +1 -0
- package/dist/kurot/editing/UIEditError.js +25 -0
- package/dist/kurot/editing/UIEditError.js.map +1 -0
- package/dist/kurot/editing/UIOperation.d.ts +134 -0
- package/dist/kurot/editing/UIOperation.d.ts.map +1 -0
- package/dist/kurot/editing/UIOperation.js +2 -0
- package/dist/kurot/editing/UIOperation.js.map +1 -0
- package/dist/kurot/editing/UITransaction.d.ts +69 -0
- package/dist/kurot/editing/UITransaction.d.ts.map +1 -0
- package/dist/kurot/editing/UITransaction.js +2 -0
- package/dist/kurot/editing/UITransaction.js.map +1 -0
- package/dist/kurot/editing/applyContractOperation.d.ts +11 -0
- package/dist/kurot/editing/applyContractOperation.d.ts.map +1 -0
- package/dist/kurot/editing/applyContractOperation.js +76 -0
- package/dist/kurot/editing/applyContractOperation.js.map +1 -0
- package/dist/kurot/editing/applyInstanceOperation.d.ts +11 -0
- package/dist/kurot/editing/applyInstanceOperation.d.ts.map +1 -0
- package/dist/kurot/editing/applyInstanceOperation.js +150 -0
- package/dist/kurot/editing/applyInstanceOperation.js.map +1 -0
- package/dist/kurot/editing/applyNodeOperation.d.ts +11 -0
- package/dist/kurot/editing/applyNodeOperation.d.ts.map +1 -0
- package/dist/kurot/editing/applyNodeOperation.js +133 -0
- package/dist/kurot/editing/applyNodeOperation.js.map +1 -0
- package/dist/kurot/editing/applyUIOperation.d.ts +11 -0
- package/dist/kurot/editing/applyUIOperation.d.ts.map +1 -0
- package/dist/kurot/editing/applyUIOperation.js +46 -0
- package/dist/kurot/editing/applyUIOperation.js.map +1 -0
- package/dist/kurot/editing/applyUITransaction.d.ts +6 -0
- package/dist/kurot/editing/applyUITransaction.d.ts.map +1 -0
- package/dist/kurot/editing/applyUITransaction.js +64 -0
- package/dist/kurot/editing/applyUITransaction.js.map +1 -0
- package/dist/kurot/editing/diffUIDocuments.d.ts +35 -0
- package/dist/kurot/editing/diffUIDocuments.d.ts.map +1 -0
- package/dist/kurot/editing/diffUIDocuments.js +137 -0
- package/dist/kurot/editing/diffUIDocuments.js.map +1 -0
- package/dist/kurot/editing/editHelpers.d.ts +44 -0
- package/dist/kurot/editing/editHelpers.d.ts.map +1 -0
- package/dist/kurot/editing/editHelpers.js +90 -0
- package/dist/kurot/editing/editHelpers.js.map +1 -0
- package/dist/kurot/editing/index.d.ts +10 -0
- package/dist/kurot/editing/index.d.ts.map +1 -0
- package/dist/kurot/editing/index.js +6 -0
- package/dist/kurot/editing/index.js.map +1 -0
- package/dist/kurot/editing/nodeTree.d.ts +40 -0
- package/dist/kurot/editing/nodeTree.d.ts.map +1 -0
- package/dist/kurot/editing/nodeTree.js +156 -0
- package/dist/kurot/editing/nodeTree.js.map +1 -0
- package/dist/kurot/model/UIAssetContract.d.ts +139 -0
- package/dist/kurot/model/UIAssetContract.d.ts.map +1 -0
- package/dist/kurot/model/UIAssetContract.js +2 -0
- package/dist/kurot/model/UIAssetContract.js.map +1 -0
- package/dist/kurot/model/UIAssetKind.d.ts +5 -0
- package/dist/kurot/model/UIAssetKind.d.ts.map +1 -0
- package/dist/kurot/model/UIAssetKind.js +2 -0
- package/dist/kurot/model/UIAssetKind.js.map +1 -0
- package/dist/kurot/model/UIComponentInstance.d.ts +46 -0
- package/dist/kurot/model/UIComponentInstance.d.ts.map +1 -0
- package/dist/kurot/model/UIComponentInstance.js +2 -0
- package/dist/kurot/model/UIComponentInstance.js.map +1 -0
- package/dist/kurot/model/UIDocument.d.ts +10 -0
- package/dist/kurot/model/UIDocument.d.ts.map +1 -1
- package/dist/kurot/model/UIDocument.js.map +1 -1
- package/dist/kurot/model/UINode.d.ts +10 -0
- package/dist/kurot/model/UINode.d.ts.map +1 -1
- package/dist/kurot/model/UIReference.d.ts +57 -0
- package/dist/kurot/model/UIReference.d.ts.map +1 -0
- package/dist/kurot/model/UIReference.js +2 -0
- package/dist/kurot/model/UIReference.js.map +1 -0
- package/dist/kurot/model/index.d.ts +4 -0
- package/dist/kurot/model/index.d.ts.map +1 -1
- package/dist/kurot/model/index.js.map +1 -1
- package/dist/kurot/schema/UIComponentDefinition.d.ts +11 -2
- package/dist/kurot/schema/UIComponentDefinition.d.ts.map +1 -1
- package/dist/kurot/schema/UIComponentRegistry.js +6 -0
- package/dist/kurot/schema/UIComponentRegistry.js.map +1 -1
- package/dist/kurot/schema/index.d.ts +1 -0
- package/dist/kurot/schema/index.d.ts.map +1 -1
- package/dist/kurot/schema/index.js +1 -0
- package/dist/kurot/schema/index.js.map +1 -1
- package/dist/kurot/schema/matchesUIPropertyDefinition.d.ts +7 -0
- package/dist/kurot/schema/matchesUIPropertyDefinition.d.ts.map +1 -0
- package/dist/kurot/schema/matchesUIPropertyDefinition.js +65 -0
- package/dist/kurot/schema/matchesUIPropertyDefinition.js.map +1 -0
- package/dist/kurot/schema/validateComponentDefinition.d.ts.map +1 -1
- package/dist/kurot/schema/validateComponentDefinition.js +40 -1
- package/dist/kurot/schema/validateComponentDefinition.js.map +1 -1
- package/dist/kurot/schema/validateUIDocumentComponents.d.ts +1 -0
- package/dist/kurot/schema/validateUIDocumentComponents.d.ts.map +1 -1
- package/dist/kurot/schema/validateUIDocumentComponents.js +12 -39
- package/dist/kurot/schema/validateUIDocumentComponents.js.map +1 -1
- package/dist/kurot/serialization/json.d.ts.map +1 -1
- package/dist/kurot/serialization/json.js +126 -0
- package/dist/kurot/serialization/json.js.map +1 -1
- package/dist/kurot/validation/UIDiagnostic.d.ts +1 -1
- package/dist/kurot/validation/UIDiagnostic.d.ts.map +1 -1
- package/dist/kurot/validation/validateUIAssetContract.d.ts +7 -0
- package/dist/kurot/validation/validateUIAssetContract.d.ts.map +1 -0
- package/dist/kurot/validation/validateUIAssetContract.js +154 -0
- package/dist/kurot/validation/validateUIAssetContract.js.map +1 -0
- package/dist/kurot/validation/validateUIAssetModes.d.ts +6 -0
- package/dist/kurot/validation/validateUIAssetModes.d.ts.map +1 -0
- package/dist/kurot/validation/validateUIAssetModes.js +57 -0
- package/dist/kurot/validation/validateUIAssetModes.js.map +1 -0
- package/dist/kurot/validation/validateUIComponentInstance.d.ts +6 -0
- package/dist/kurot/validation/validateUIComponentInstance.d.ts.map +1 -0
- package/dist/kurot/validation/validateUIComponentInstance.js +77 -0
- package/dist/kurot/validation/validateUIComponentInstance.js.map +1 -0
- package/dist/kurot/validation/validateUIDocument.d.ts.map +1 -1
- package/dist/kurot/validation/validateUIDocument.js +51 -73
- package/dist/kurot/validation/validateUIDocument.js.map +1 -1
- package/dist/kurot/validation/validationHelpers.d.ts +26 -0
- package/dist/kurot/validation/validationHelpers.d.ts.map +1 -0
- package/dist/kurot/validation/validationHelpers.js +120 -0
- package/dist/kurot/validation/validationHelpers.js.map +1 -0
- package/dist/kurot/version.d.ts +1 -1
- package/dist/kurot/version.js +1 -1
- 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 @@
|
|
|
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":"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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
|
+
/**
|
|
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"}
|