@lionweb/class-core 0.7.0-beta.9 → 0.7.1
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/CHANGELOG.md +18 -1
- package/README.md +6 -6
- package/dist/LionCore_builtins.g.d.ts +2 -2
- package/dist/LionCore_builtins.g.d.ts.map +1 -1
- package/dist/LionCore_builtins.g.js +1 -1
- package/dist/LionCore_builtins.g.js.map +1 -1
- package/dist/base-types.d.ts +7 -11
- package/dist/base-types.d.ts.map +1 -1
- package/dist/base-types.js +3 -28
- package/dist/base-types.js.map +1 -1
- package/dist/convenience.d.ts +10 -9
- package/dist/convenience.d.ts.map +1 -1
- package/dist/convenience.js +12 -11
- package/dist/convenience.js.map +1 -1
- package/dist/deltas/appliers.d.ts +5 -4
- package/dist/deltas/appliers.d.ts.map +1 -1
- package/dist/deltas/appliers.js +369 -163
- package/dist/deltas/appliers.js.map +1 -1
- package/dist/deltas/compositor.d.ts +51 -0
- package/dist/deltas/compositor.d.ts.map +1 -0
- package/dist/deltas/compositor.js +95 -0
- package/dist/deltas/compositor.js.map +1 -0
- package/dist/deltas/index.d.ts +2 -1
- package/dist/deltas/index.d.ts.map +1 -1
- package/dist/deltas/index.js +2 -1
- package/dist/deltas/index.js.map +1 -1
- package/dist/deltas/inverters.d.ts.map +1 -1
- package/dist/deltas/inverters.js +91 -28
- package/dist/deltas/inverters.js.map +1 -1
- package/dist/deltas/receivers.d.ts +39 -0
- package/dist/deltas/receivers.d.ts.map +1 -0
- package/dist/deltas/receivers.js +60 -0
- package/dist/deltas/receivers.js.map +1 -0
- package/dist/deltas/serialization/deserializer.g.d.ts.map +1 -1
- package/dist/deltas/serialization/deserializer.g.js +167 -59
- package/dist/deltas/serialization/deserializer.g.js.map +1 -1
- package/dist/deltas/serialization/serializer-helpers.d.ts +1 -1
- package/dist/deltas/serialization/serializer-helpers.d.ts.map +1 -1
- package/dist/deltas/serialization/serializer-helpers.js +3 -4
- package/dist/deltas/serialization/serializer-helpers.js.map +1 -1
- package/dist/deltas/serialization/serializer.g.d.ts +2 -2
- package/dist/deltas/serialization/serializer.g.d.ts.map +1 -1
- package/dist/deltas/serialization/serializer.g.js +186 -47
- package/dist/deltas/serialization/serializer.g.js.map +1 -1
- package/dist/deltas/serialization/types.g.d.ts +156 -43
- package/dist/deltas/serialization/types.g.d.ts.map +1 -1
- package/dist/deltas/types.g.d.ts +155 -55
- package/dist/deltas/types.g.d.ts.map +1 -1
- package/dist/deltas/types.g.js +170 -57
- package/dist/deltas/types.g.js.map +1 -1
- package/dist/deserializer.d.ts +6 -6
- package/dist/deserializer.d.ts.map +1 -1
- package/dist/deserializer.js +16 -27
- package/dist/deserializer.js.map +1 -1
- package/dist/duplicator.d.ts.map +1 -1
- package/dist/duplicator.js.map +1 -1
- package/dist/factory.d.ts +10 -2
- package/dist/factory.d.ts.map +1 -1
- package/dist/factory.js +25 -16
- package/dist/factory.js.map +1 -1
- package/dist/id-mapping.d.ts +31 -3
- package/dist/id-mapping.d.ts.map +1 -1
- package/dist/id-mapping.js +46 -14
- package/dist/id-mapping.js.map +1 -1
- package/dist/serializer.d.ts.map +1 -1
- package/dist/textualizer.d.ts +1 -1
- package/dist/textualizer.d.ts.map +1 -1
- package/dist/textualizer.js +1 -1
- package/dist/textualizer.js.map +1 -1
- package/dist/value-managers/annotations.d.ts +5 -0
- package/dist/value-managers/annotations.d.ts.map +1 -1
- package/dist/value-managers/annotations.js +31 -3
- package/dist/value-managers/annotations.js.map +1 -1
- package/dist/value-managers/base.d.ts +2 -2
- package/dist/value-managers/base.d.ts.map +1 -1
- package/dist/value-managers/base.js +4 -4
- package/dist/value-managers/base.js.map +1 -1
- package/dist/value-managers/containments.d.ts +4 -1
- package/dist/value-managers/containments.d.ts.map +1 -1
- package/dist/value-managers/containments.js +151 -20
- package/dist/value-managers/containments.js.map +1 -1
- package/dist/value-managers/properties.d.ts.map +1 -1
- package/dist/value-managers/properties.js +1 -0
- package/dist/value-managers/properties.js.map +1 -1
- package/dist/value-managers/references.d.ts +3 -0
- package/dist/value-managers/references.d.ts.map +1 -1
- package/dist/value-managers/references.js +26 -8
- package/dist/value-managers/references.js.map +1 -1
- package/package.json +34 -37
- package/src/LionCore_builtins.g.ts +2 -2
- package/src/base-types.ts +6 -32
- package/src/convenience.ts +15 -14
- package/src/deltas/appliers.ts +377 -177
- package/src/deltas/compositor.ts +107 -0
- package/src/deltas/index.ts +3 -1
- package/src/deltas/inverters.ts +108 -36
- package/src/deltas/receivers.ts +92 -0
- package/src/deltas/serialization/deserializer.g.ts +185 -64
- package/src/deltas/serialization/serializer-helpers.ts +3 -10
- package/src/deltas/serialization/serializer.g.ts +242 -63
- package/src/deltas/serialization/types.g.ts +190 -51
- package/src/deltas/types.g.ts +190 -51
- package/src/deserializer.ts +32 -43
- package/src/duplicator.ts +1 -1
- package/src/factory.ts +31 -17
- package/src/id-mapping.ts +43 -5
- package/src/textualizer.ts +1 -1
- package/src/value-managers/annotations.ts +28 -2
- package/src/value-managers/base.ts +4 -4
- package/src/value-managers/containments.ts +144 -20
- package/src/value-managers/properties.ts +1 -0
- package/src/value-managers/references.ts +28 -8
- package/dist/deltas/handlers.d.ts +0 -17
- package/dist/deltas/handlers.d.ts.map +0 -1
- package/dist/deltas/handlers.js +0 -43
- package/dist/deltas/handlers.js.map +0 -1
- package/src/deltas/handlers.ts +0 -64
package/dist/deltas/appliers.js
CHANGED
|
@@ -14,16 +14,17 @@
|
|
|
14
14
|
//
|
|
15
15
|
// SPDX-FileCopyrightText: 2025 TRUMPF Laser SE and other contributors
|
|
16
16
|
// SPDX-License-Identifier: Apache-2.0
|
|
17
|
-
import { AnnotationAddedDelta, AnnotationDeletedDelta, AnnotationMovedFromOtherParentDelta, AnnotationMovedInSameParentDelta, AnnotationReplacedDelta, ChildAddedDelta, ChildDeletedDelta,
|
|
17
|
+
import { AnnotationAddedDelta, AnnotationDeletedDelta, AnnotationMovedAndReplacedFromOtherParentDelta, AnnotationMovedAndReplacedInSameParentDelta, AnnotationMovedFromOtherParentDelta, AnnotationMovedInSameParentDelta, AnnotationReplacedDelta, ChildAddedDelta, ChildDeletedDelta, ChildMovedAndReplacedFromOtherContainmentDelta, ChildMovedAndReplacedFromOtherContainmentInSameParentDelta, ChildMovedAndReplacedInSameContainmentDelta, ChildMovedFromOtherContainmentDelta, ChildMovedFromOtherContainmentInSameParentDelta, ChildMovedInSameContainmentDelta, ChildReplacedDelta, CompositeDelta, EntryMovedAndReplacedFromOtherReferenceDelta, EntryMovedAndReplacedFromOtherReferenceInSameParentDelta, EntryMovedAndReplacedInSameReferenceDelta, EntryMovedFromOtherReferenceDelta, EntryMovedFromOtherReferenceInSameParentDelta, EntryMovedInSameReferenceDelta, NoOpDelta, PartitionAddedDelta, PartitionDeletedDelta, PropertyAddedDelta, PropertyChangedDelta, PropertyDeletedDelta, ReferenceAddedDelta, ReferenceChangedDelta, ReferenceDeletedDelta } from "./types.g.js";
|
|
18
18
|
import { unresolved } from "@lionweb/core";
|
|
19
19
|
/**
|
|
20
20
|
* @return a function that applies a given {@link Delta}, given an optional {@link IdMapping ID mapping}.
|
|
21
21
|
* If an {@link IdMapping} is provided, the {@link INodeBase nodes} relevant for the delta are looked up from that;
|
|
22
22
|
* otherwise, the delta is applied directly to (object-)referenced nodes.
|
|
23
23
|
*
|
|
24
|
-
* This is an internal function, solely meant to DRY the delta application
|
|
24
|
+
* This is an internal function, solely meant to DRY the delta application
|
|
25
|
+
* with and without lookup in an {@link IdMapping ID mapping object}.
|
|
25
26
|
*/
|
|
26
|
-
const deltaApplier = (idMapping) => (delta) => {
|
|
27
|
+
const deltaApplier = (idMapping, updatablePartitions) => (delta) => {
|
|
27
28
|
const lookupNodeFrom = (node) => {
|
|
28
29
|
if (idMapping === undefined) {
|
|
29
30
|
return node;
|
|
@@ -45,177 +46,379 @@ const deltaApplier = (idMapping) => (delta) => {
|
|
|
45
46
|
? unresolved
|
|
46
47
|
: lookupNodeFrom(nodeRef);
|
|
47
48
|
};
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
if (delta instanceof PropertyDeletedDelta) {
|
|
60
|
-
lookupNodeFrom(delta.container).getPropertyValueManager(delta.property).setDirectly(undefined);
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
if (delta instanceof ChildAddedDelta) {
|
|
64
|
-
const valueManager = lookupNodeFrom(delta.parent).getContainmentValueManager(delta.containment);
|
|
65
|
-
const newChild = lookupNodeFrom(delta.newChild);
|
|
66
|
-
if (delta.containment.multiple) {
|
|
67
|
-
valueManager.insertAtIndexDirectly(newChild, delta.index);
|
|
49
|
+
const applyDelta = (delta) => {
|
|
50
|
+
if (delta instanceof PartitionAddedDelta) {
|
|
51
|
+
if (updatablePartitions !== undefined) {
|
|
52
|
+
const partitions = updatablePartitions();
|
|
53
|
+
const { newPartition } = delta;
|
|
54
|
+
if (partitions.indexOf(newPartition) === -1) {
|
|
55
|
+
updatablePartitions().push(newPartition);
|
|
56
|
+
}
|
|
57
|
+
idMapping?.updateWith(newPartition);
|
|
58
|
+
}
|
|
59
|
+
return;
|
|
68
60
|
}
|
|
69
|
-
|
|
70
|
-
|
|
61
|
+
if (delta instanceof PartitionDeletedDelta) {
|
|
62
|
+
if (updatablePartitions !== undefined) {
|
|
63
|
+
const partitions = updatablePartitions();
|
|
64
|
+
const index = partitions.indexOf(delta.deletedPartition);
|
|
65
|
+
if (index > -1) {
|
|
66
|
+
partitions.splice(index, 1);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return;
|
|
71
70
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
if (delta instanceof ChildReplacedDelta) {
|
|
76
|
-
const valueManager = lookupNodeFrom(delta.parent).getContainmentValueManager(delta.containment);
|
|
77
|
-
const replacedChild = lookupNodeFrom(delta.replacedChild);
|
|
78
|
-
const newChild = lookupNodeFrom(delta.newChild);
|
|
79
|
-
if (delta.containment.multiple) {
|
|
80
|
-
const multiValueManager = valueManager;
|
|
81
|
-
multiValueManager.removeDirectly(replacedChild); // should be at index delta.index
|
|
82
|
-
multiValueManager.insertAtIndexDirectly(newChild, delta.index);
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
valueManager.setDirectly(newChild);
|
|
86
|
-
}
|
|
87
|
-
replacedChild.detach();
|
|
88
|
-
newChild.attachTo(delta.parent, delta.containment);
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
if (delta instanceof ChildMovedDelta) {
|
|
92
|
-
const oldValueManager = delta.oldParent.getContainmentValueManager(delta.oldContainment);
|
|
93
|
-
const child = lookupNodeFrom(delta.child);
|
|
94
|
-
if (delta.oldContainment.multiple) {
|
|
95
|
-
oldValueManager.removeDirectly(child); // should be at index delta.oldIndex
|
|
71
|
+
if (delta instanceof PropertyAddedDelta) {
|
|
72
|
+
lookupNodeFrom(delta.node).getPropertyValueManager(delta.property).setDirectly(delta.value);
|
|
73
|
+
return;
|
|
96
74
|
}
|
|
97
|
-
|
|
98
|
-
|
|
75
|
+
if (delta instanceof PropertyDeletedDelta) {
|
|
76
|
+
lookupNodeFrom(delta.node).getPropertyValueManager(delta.property).setDirectly(undefined);
|
|
77
|
+
return;
|
|
99
78
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
79
|
+
if (delta instanceof PropertyChangedDelta) {
|
|
80
|
+
lookupNodeFrom(delta.node).getPropertyValueManager(delta.property).setDirectly(delta.newValue);
|
|
81
|
+
return;
|
|
103
82
|
}
|
|
104
|
-
|
|
105
|
-
|
|
83
|
+
if (delta instanceof ChildAddedDelta) {
|
|
84
|
+
const parent = lookupNodeFrom(delta.parent);
|
|
85
|
+
const valueManager = parent.getContainmentValueManager(delta.containment);
|
|
86
|
+
const newChild = lookupNodeFrom(delta.newChild);
|
|
87
|
+
if (delta.containment.multiple) {
|
|
88
|
+
valueManager.insertAtIndexDirectly(newChild, delta.index);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
valueManager.setDirectly(newChild);
|
|
92
|
+
}
|
|
93
|
+
newChild.attachTo(parent, delta.containment);
|
|
94
|
+
return;
|
|
106
95
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
const valueManager = lookupNodeFrom(delta.parent).getContainmentValueManager(delta.containment);
|
|
118
|
-
if (delta.containment.multiple) {
|
|
119
|
-
const multiValueManager = valueManager;
|
|
120
|
-
multiValueManager.removeDirectly(lookupNodeFrom(delta.deletedChild));
|
|
96
|
+
if (delta instanceof ChildDeletedDelta) {
|
|
97
|
+
const valueManager = lookupNodeFrom(delta.parent).getContainmentValueManager(delta.containment);
|
|
98
|
+
if (delta.containment.multiple) {
|
|
99
|
+
valueManager.removeDirectly(lookupNodeFrom(delta.deletedChild));
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
valueManager.setDirectly(undefined);
|
|
103
|
+
}
|
|
104
|
+
delta.deletedChild.detach();
|
|
105
|
+
return;
|
|
121
106
|
}
|
|
122
|
-
|
|
123
|
-
|
|
107
|
+
if (delta instanceof ChildReplacedDelta) {
|
|
108
|
+
const parent = lookupNodeFrom(delta.parent);
|
|
109
|
+
const valueManager = parent.getContainmentValueManager(delta.containment);
|
|
110
|
+
const replacedChild = lookupNodeFrom(delta.replacedChild);
|
|
111
|
+
const newChild = lookupNodeFrom(delta.newChild);
|
|
112
|
+
if (delta.containment.multiple) {
|
|
113
|
+
const multiValueManager = valueManager;
|
|
114
|
+
multiValueManager.removeDirectly(replacedChild); // should be at index delta.index
|
|
115
|
+
multiValueManager.insertAtIndexDirectly(newChild, delta.index);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
valueManager.setDirectly(newChild);
|
|
119
|
+
}
|
|
120
|
+
replacedChild.detach();
|
|
121
|
+
newChild.attachTo(parent, delta.containment);
|
|
122
|
+
return;
|
|
124
123
|
}
|
|
125
|
-
delta
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
124
|
+
if (delta instanceof ChildMovedFromOtherContainmentDelta) {
|
|
125
|
+
const oldValueManager = lookupNodeFrom(delta.oldParent).getContainmentValueManager(delta.oldContainment);
|
|
126
|
+
const movedChild = lookupNodeFrom(delta.movedChild);
|
|
127
|
+
if (delta.oldContainment.multiple) {
|
|
128
|
+
oldValueManager.removeDirectly(movedChild); // should be at index delta.oldIndex
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
oldValueManager.setDirectly(undefined);
|
|
132
|
+
}
|
|
133
|
+
const newParent = lookupNodeFrom(delta.newParent);
|
|
134
|
+
const newValueManager = newParent.getContainmentValueManager(delta.newContainment);
|
|
135
|
+
if (delta.newContainment.multiple) {
|
|
136
|
+
newValueManager.insertAtIndexDirectly(movedChild, delta.newIndex);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
newValueManager.setDirectly(movedChild);
|
|
140
|
+
}
|
|
141
|
+
movedChild.detach();
|
|
142
|
+
movedChild.attachTo(newParent, delta.newContainment);
|
|
143
|
+
return;
|
|
133
144
|
}
|
|
134
|
-
|
|
135
|
-
|
|
145
|
+
if (delta instanceof ChildMovedFromOtherContainmentInSameParentDelta) {
|
|
146
|
+
const parent = lookupNodeFrom(delta.parent);
|
|
147
|
+
const oldValueManager = parent.getContainmentValueManager(delta.oldContainment);
|
|
148
|
+
const movedChild = lookupNodeFrom(delta.movedChild);
|
|
149
|
+
if (delta.oldContainment.multiple) {
|
|
150
|
+
oldValueManager.removeDirectly(movedChild); // should be at index delta.oldIndex
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
oldValueManager.setDirectly(undefined);
|
|
154
|
+
}
|
|
155
|
+
const newValueManager = parent.getContainmentValueManager(delta.newContainment);
|
|
156
|
+
if (delta.newContainment.multiple) {
|
|
157
|
+
newValueManager.insertAtIndexDirectly(movedChild, delta.newIndex);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
newValueManager.setDirectly(movedChild);
|
|
161
|
+
}
|
|
162
|
+
return;
|
|
136
163
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
const replacedTarget = lookupNodeRefFrom(delta.replacedTarget);
|
|
142
|
-
const newTarget = lookupNodeRefFrom(delta.newTarget);
|
|
143
|
-
if (delta.reference.multiple) {
|
|
144
|
-
const multiValueManager = valueManager;
|
|
145
|
-
multiValueManager.removeDirectly(replacedTarget); // should be at index delta.index
|
|
146
|
-
multiValueManager.insertAtIndexDirectly(newTarget, delta.index);
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
valueManager.setDirectly(newTarget);
|
|
150
|
-
}
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
if (delta instanceof ReferenceMovedDelta) {
|
|
154
|
-
const oldValueManager = lookupNodeFrom(delta.oldContainer).getReferenceValueManager(delta.oldReference);
|
|
155
|
-
const target = lookupNodeRefFrom(delta.target);
|
|
156
|
-
if (delta.oldReference.multiple) {
|
|
157
|
-
oldValueManager.removeDirectly(target); // should be at index delta.oldIndex
|
|
164
|
+
if (delta instanceof ChildMovedInSameContainmentDelta) {
|
|
165
|
+
const valueManager = lookupNodeFrom(delta.parent).getContainmentValueManager(delta.containment);
|
|
166
|
+
valueManager.moveDirectly(delta.oldIndex, delta.newIndex);
|
|
167
|
+
return;
|
|
158
168
|
}
|
|
159
|
-
|
|
160
|
-
oldValueManager.
|
|
169
|
+
if (delta instanceof ChildMovedAndReplacedFromOtherContainmentDelta) {
|
|
170
|
+
const oldValueManager = delta.oldParent.getContainmentValueManager(delta.oldContainment);
|
|
171
|
+
const movedChild = lookupNodeFrom(delta.movedChild);
|
|
172
|
+
if (delta.oldContainment.multiple) {
|
|
173
|
+
oldValueManager.removeDirectly(movedChild); // should be at index delta.oldIndex
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
oldValueManager.setDirectly(undefined);
|
|
177
|
+
}
|
|
178
|
+
const newParent = lookupNodeFrom(delta.newParent);
|
|
179
|
+
const newValueManager = newParent.getContainmentValueManager(delta.newContainment);
|
|
180
|
+
if (delta.newContainment.multiple) {
|
|
181
|
+
const valueManager = newValueManager;
|
|
182
|
+
valueManager.removeAtIndexDirectly(delta.newIndex);
|
|
183
|
+
valueManager.insertAtIndexDirectly(movedChild, delta.newIndex);
|
|
184
|
+
// TODO make separate API for this?
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
newValueManager.setDirectly(movedChild);
|
|
188
|
+
}
|
|
189
|
+
movedChild.detach();
|
|
190
|
+
movedChild.attachTo(newParent, delta.newContainment);
|
|
191
|
+
return;
|
|
161
192
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
193
|
+
if (delta instanceof ChildMovedAndReplacedFromOtherContainmentInSameParentDelta) {
|
|
194
|
+
const oldValueManager = delta.parent.getContainmentValueManager(delta.oldContainment);
|
|
195
|
+
const movedChild = lookupNodeFrom(delta.movedChild);
|
|
196
|
+
if (delta.oldContainment.multiple) {
|
|
197
|
+
oldValueManager.removeDirectly(movedChild); // should be at index delta.oldIndex
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
oldValueManager.setDirectly(undefined);
|
|
201
|
+
}
|
|
202
|
+
const newValueManager = delta.parent.getContainmentValueManager(delta.newContainment);
|
|
203
|
+
if (delta.newContainment.multiple) {
|
|
204
|
+
const valueManager = newValueManager;
|
|
205
|
+
valueManager.removeAtIndexDirectly(delta.newIndex); // should be delta.replacedChild
|
|
206
|
+
valueManager.insertAtIndexDirectly(movedChild, delta.newIndex);
|
|
207
|
+
// TODO make separate API for this?
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
newValueManager.setDirectly(movedChild);
|
|
211
|
+
}
|
|
212
|
+
return;
|
|
165
213
|
}
|
|
166
|
-
|
|
167
|
-
|
|
214
|
+
if (delta instanceof ChildMovedAndReplacedInSameContainmentDelta) {
|
|
215
|
+
const valueManager = delta.parent.getContainmentValueManager(delta.containment);
|
|
216
|
+
const movedChild = lookupNodeFrom(delta.movedChild);
|
|
217
|
+
const replacedChild = lookupNodeFrom(delta.replacedChild);
|
|
218
|
+
if (delta.containment.multiple) {
|
|
219
|
+
valueManager.removeDirectly(replacedChild); // should be at index delta.oldIndex
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
valueManager.setDirectly(undefined);
|
|
223
|
+
}
|
|
224
|
+
if (delta.containment.multiple) {
|
|
225
|
+
valueManager.insertAtIndexDirectly(movedChild, delta.newIndex);
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
valueManager.setDirectly(movedChild);
|
|
229
|
+
}
|
|
230
|
+
return;
|
|
168
231
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
|
-
if (delta instanceof ReferenceDeletedDelta) {
|
|
177
|
-
const valueManager = lookupNodeFrom(delta.container).getReferenceValueManager(delta.reference);
|
|
178
|
-
const deletedTarget = lookupNodeRefFrom(delta.deletedTarget);
|
|
179
|
-
if (delta.reference.multiple) {
|
|
180
|
-
const multiValueManager = valueManager;
|
|
181
|
-
multiValueManager.removeDirectly(deletedTarget);
|
|
232
|
+
if (delta instanceof AnnotationAddedDelta) {
|
|
233
|
+
const parent = lookupNodeFrom(delta.parent);
|
|
234
|
+
parent.annotationsValueManager.insertAtIndexDirectly(delta.newAnnotation, delta.index);
|
|
235
|
+
delta.newAnnotation.attachTo(parent, null);
|
|
236
|
+
return;
|
|
182
237
|
}
|
|
183
|
-
|
|
184
|
-
|
|
238
|
+
if (delta instanceof AnnotationDeletedDelta) {
|
|
239
|
+
lookupNodeFrom(delta.parent).annotationsValueManager.removeDirectly(delta.deletedAnnotation); // should be at index delta.index
|
|
240
|
+
delta.deletedAnnotation.detach();
|
|
241
|
+
return;
|
|
185
242
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
delta
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
243
|
+
if (delta instanceof AnnotationReplacedDelta) {
|
|
244
|
+
const parent = lookupNodeFrom(delta.parent);
|
|
245
|
+
const valueManager = parent.annotationsValueManager;
|
|
246
|
+
valueManager.removeDirectly(delta.replacedAnnotation); // should be at index delta.index
|
|
247
|
+
delta.replacedAnnotation.detach();
|
|
248
|
+
valueManager.insertAtIndexDirectly(delta.newAnnotation, delta.index);
|
|
249
|
+
delta.newAnnotation.attachTo(parent, null);
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
if (delta instanceof AnnotationMovedFromOtherParentDelta) {
|
|
253
|
+
const movedAnnotation = lookupNodeFrom(delta.movedAnnotation);
|
|
254
|
+
lookupNodeFrom(delta.oldParent).annotationsValueManager.removeDirectly(movedAnnotation); // should be at index delta.index
|
|
255
|
+
movedAnnotation.detach();
|
|
256
|
+
const newParent = lookupNodeFrom(delta.newParent);
|
|
257
|
+
newParent.annotationsValueManager.insertAtIndexDirectly(delta.movedAnnotation, delta.newIndex);
|
|
258
|
+
movedAnnotation.attachTo(newParent, null);
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
if (delta instanceof AnnotationMovedInSameParentDelta) {
|
|
262
|
+
const valueManager = lookupNodeFrom(delta.parent).annotationsValueManager;
|
|
263
|
+
valueManager.moveDirectly(delta.oldIndex, delta.newIndex);
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
if (delta instanceof AnnotationMovedAndReplacedFromOtherParentDelta) {
|
|
267
|
+
const movedAnnotation = lookupNodeFrom(delta.movedAnnotation);
|
|
268
|
+
lookupNodeFrom(delta.oldParent).annotationsValueManager.removeDirectly(delta.movedAnnotation); // should be at index delta.index
|
|
269
|
+
delta.movedAnnotation.detach();
|
|
270
|
+
const newParent = lookupNodeFrom(delta.newParent);
|
|
271
|
+
const newValueManager = newParent.annotationsValueManager;
|
|
272
|
+
newValueManager.removeDirectly(delta.replacedAnnotation);
|
|
273
|
+
delta.replacedAnnotation.detach();
|
|
274
|
+
newValueManager.insertAtIndexDirectly(movedAnnotation, delta.newIndex);
|
|
275
|
+
movedAnnotation.attachTo(newParent, null);
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
if (delta instanceof AnnotationMovedAndReplacedInSameParentDelta) {
|
|
279
|
+
const valueManager = lookupNodeFrom(delta.parent).annotationsValueManager;
|
|
280
|
+
valueManager.moveAndReplaceAtIndexDirectly(delta.oldIndex, delta.newIndex);
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
if (delta instanceof ReferenceAddedDelta) {
|
|
284
|
+
const valueManager = lookupNodeFrom(delta.parent).getReferenceValueManager(delta.reference);
|
|
285
|
+
const newTarget = lookupNodeRefFrom(delta.newTarget);
|
|
286
|
+
if (delta.reference.multiple) {
|
|
287
|
+
valueManager.insertAtIndexDirectly(newTarget, delta.index);
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
valueManager.setDirectly(newTarget);
|
|
291
|
+
}
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
if (delta instanceof ReferenceDeletedDelta) {
|
|
295
|
+
const valueManager = lookupNodeFrom(delta.parent).getReferenceValueManager(delta.reference);
|
|
296
|
+
if (delta.reference.multiple) {
|
|
297
|
+
valueManager.removeAtIndexDirectly(delta.index); // should be delta.deletedTarget
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
valueManager.setDirectly(undefined);
|
|
301
|
+
}
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
if (delta instanceof ReferenceChangedDelta) {
|
|
305
|
+
const valueManager = lookupNodeFrom(delta.parent).getReferenceValueManager(delta.reference);
|
|
306
|
+
const newTarget = lookupNodeRefFrom(delta.newTarget);
|
|
307
|
+
if (delta.reference.multiple) {
|
|
308
|
+
const multiValueManager = valueManager;
|
|
309
|
+
multiValueManager.removeAtIndexDirectly(delta.index); // should be delta.oldTarget
|
|
310
|
+
multiValueManager.insertAtIndexDirectly(newTarget, delta.index);
|
|
311
|
+
}
|
|
312
|
+
else {
|
|
313
|
+
valueManager.setDirectly(newTarget);
|
|
314
|
+
}
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
if (delta instanceof EntryMovedFromOtherReferenceDelta) {
|
|
318
|
+
const oldValueManager = lookupNodeFrom(delta.oldParent).getReferenceValueManager(delta.oldReference);
|
|
319
|
+
const movedTarget = lookupNodeRefFrom(delta.movedTarget);
|
|
320
|
+
if (delta.oldReference.multiple) {
|
|
321
|
+
oldValueManager.removeAtIndexDirectly(delta.oldIndex); // should be delta.movedTarget
|
|
322
|
+
}
|
|
323
|
+
else {
|
|
324
|
+
oldValueManager.setDirectly(undefined);
|
|
325
|
+
}
|
|
326
|
+
const newValueManager = lookupNodeFrom(delta.newParent).getReferenceValueManager(delta.newReference);
|
|
327
|
+
if (delta.newReference.multiple) {
|
|
328
|
+
newValueManager.insertAtIndexDirectly(movedTarget, delta.newIndex);
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
newValueManager.setDirectly(movedTarget);
|
|
332
|
+
}
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
if (delta instanceof EntryMovedFromOtherReferenceInSameParentDelta) {
|
|
336
|
+
const parent = lookupNodeFrom(delta.parent);
|
|
337
|
+
const oldValueManager = parent.getReferenceValueManager(delta.oldReference);
|
|
338
|
+
const movedTarget = lookupNodeRefFrom(delta.movedTarget);
|
|
339
|
+
if (delta.oldReference.multiple) {
|
|
340
|
+
oldValueManager.removeAtIndexDirectly(delta.oldIndex); // should be delta.movedTarget
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
oldValueManager.setDirectly(undefined);
|
|
344
|
+
}
|
|
345
|
+
const newValueManager = parent.getReferenceValueManager(delta.newReference);
|
|
346
|
+
if (delta.newReference.multiple) {
|
|
347
|
+
newValueManager.insertAtIndexDirectly(movedTarget, delta.newIndex);
|
|
348
|
+
}
|
|
349
|
+
else {
|
|
350
|
+
newValueManager.setDirectly(movedTarget);
|
|
351
|
+
}
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
if (delta instanceof EntryMovedInSameReferenceDelta) {
|
|
355
|
+
const valueManager = lookupNodeFrom(delta.parent).getReferenceValueManager(delta.reference);
|
|
356
|
+
valueManager.moveDirectly(delta.oldIndex, delta.newIndex);
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
if (delta instanceof EntryMovedAndReplacedFromOtherReferenceDelta) {
|
|
360
|
+
const oldParent = lookupNodeFrom(delta.oldParent);
|
|
361
|
+
const oldValueManager = oldParent.getReferenceValueManager(delta.oldReference);
|
|
362
|
+
const movedTarget = lookupNodeRefFrom(delta.movedTarget);
|
|
363
|
+
if (delta.oldReference.multiple) {
|
|
364
|
+
oldValueManager.removeAtIndexDirectly(delta.oldIndex); // should be delta.movedTarget
|
|
365
|
+
}
|
|
366
|
+
else {
|
|
367
|
+
oldValueManager.setDirectly(undefined);
|
|
368
|
+
}
|
|
369
|
+
const newParent = lookupNodeFrom(delta.newParent);
|
|
370
|
+
const newValueManager = newParent.getReferenceValueManager(delta.newReference);
|
|
371
|
+
if (delta.newReference.multiple) {
|
|
372
|
+
const valueManager = newValueManager;
|
|
373
|
+
valueManager.removeAtIndexDirectly(delta.oldIndex); // should be delta.replacedTarget
|
|
374
|
+
valueManager.insertAtIndexDirectly(movedTarget, delta.newIndex);
|
|
375
|
+
}
|
|
376
|
+
else {
|
|
377
|
+
newValueManager.setDirectly(movedTarget);
|
|
378
|
+
}
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
if (delta instanceof EntryMovedAndReplacedFromOtherReferenceInSameParentDelta) {
|
|
382
|
+
const parent = lookupNodeFrom(delta.parent);
|
|
383
|
+
const oldValueManager = parent.getReferenceValueManager(delta.oldReference);
|
|
384
|
+
const movedTarget = lookupNodeRefFrom(delta.movedTarget);
|
|
385
|
+
if (delta.oldReference.multiple) {
|
|
386
|
+
oldValueManager.removeAtIndexDirectly(delta.oldIndex); // should be delta.movedTarget
|
|
387
|
+
}
|
|
388
|
+
else {
|
|
389
|
+
oldValueManager.setDirectly(undefined);
|
|
390
|
+
}
|
|
391
|
+
const newValueManager = parent.getReferenceValueManager(delta.newReference);
|
|
392
|
+
if (delta.newReference.multiple) {
|
|
393
|
+
const valueManager = newValueManager;
|
|
394
|
+
valueManager.removeAtIndexDirectly(delta.newIndex); // should be delta.replacedTarget
|
|
395
|
+
valueManager.insertAtIndexDirectly(movedTarget, delta.newIndex);
|
|
396
|
+
}
|
|
397
|
+
else {
|
|
398
|
+
newValueManager.setDirectly(movedTarget);
|
|
399
|
+
}
|
|
400
|
+
return;
|
|
401
|
+
}
|
|
402
|
+
if (delta instanceof EntryMovedAndReplacedInSameReferenceDelta) {
|
|
403
|
+
const parent = lookupNodeFrom(delta.parent);
|
|
404
|
+
const valueManager = parent.getReferenceValueManager(delta.reference);
|
|
405
|
+
if (delta.reference.multiple) {
|
|
406
|
+
valueManager.moveAndReplaceDirectly(delta.oldIndex, delta.newIndex);
|
|
407
|
+
}
|
|
408
|
+
else {
|
|
409
|
+
// (do nothing)
|
|
410
|
+
}
|
|
411
|
+
return;
|
|
412
|
+
}
|
|
413
|
+
if (delta instanceof CompositeDelta) {
|
|
414
|
+
delta.parts.forEach(applyDelta);
|
|
415
|
+
}
|
|
416
|
+
if (delta instanceof NoOpDelta) {
|
|
417
|
+
return;
|
|
418
|
+
}
|
|
419
|
+
throw new Error(`application of delta of class ${delta.constructor.name} not implemented`);
|
|
420
|
+
};
|
|
421
|
+
return applyDelta(delta);
|
|
219
422
|
};
|
|
220
423
|
/**
|
|
221
424
|
* Applies the given {@link Delta deltas} to the {@link INodeBase nodes} (object-)referenced in the deltas.
|
|
@@ -235,12 +438,12 @@ export const applyDelta = deltaApplier();
|
|
|
235
438
|
* @usage should look as follows.
|
|
236
439
|
*
|
|
237
440
|
* ```typescript
|
|
238
|
-
* const {roots, idMapping} = deserializeAsLDMModelWithMapping(serializationChunk,
|
|
441
|
+
* const {roots, idMapping} = deserializeAsLDMModelWithMapping(serializationChunk, receiveDelta);
|
|
239
442
|
* applyDeltasWithLookup(idMapping, deltas);
|
|
240
443
|
* ```
|
|
241
444
|
*/
|
|
242
|
-
export const applyDeltasWithLookup = (idMapping, deltas) => {
|
|
243
|
-
deltas.forEach((delta) => applyDeltaWithLookup(idMapping, delta));
|
|
445
|
+
export const applyDeltasWithLookup = (idMapping, deltas, updatablePartitions) => {
|
|
446
|
+
deltas.forEach((delta) => applyDeltaWithLookup(idMapping, delta, updatablePartitions));
|
|
244
447
|
};
|
|
245
448
|
/**
|
|
246
449
|
* Applies the given {@link Delta delta} to {@link nodes INodeBase} given as the values of a {@link IdMapping ID mapping id → node}.
|
|
@@ -249,11 +452,11 @@ export const applyDeltasWithLookup = (idMapping, deltas) => {
|
|
|
249
452
|
* @usage should look as follows.
|
|
250
453
|
*
|
|
251
454
|
* ```typescript
|
|
252
|
-
* const {roots, idMapping} = deserializeAsLDMModelWithMapping(serializationChunk,
|
|
455
|
+
* const {roots, idMapping} = deserializeAsLDMModelWithMapping(serializationChunk, receiveDelta);
|
|
253
456
|
* applyDeltaWithLookup(idMapping, delta);
|
|
254
457
|
* ```
|
|
255
458
|
*/
|
|
256
|
-
export const applyDeltaWithLookup = (idMapping, delta) => deltaApplier(idMapping)(delta);
|
|
459
|
+
export const applyDeltaWithLookup = (idMapping, delta, updatablePartitions) => deltaApplier(idMapping, updatablePartitions)(delta);
|
|
257
460
|
/**
|
|
258
461
|
* Updates the given {@link IdMapping ID mapping} with the given {@link IDelta delta}.
|
|
259
462
|
* This is important if the delta adds a newly-created node to the model.
|
|
@@ -269,6 +472,9 @@ export const updateIdMappingWithDelta = (idMapping, delta) => {
|
|
|
269
472
|
if (delta instanceof AnnotationAddedDelta) {
|
|
270
473
|
idMapping.updateWith(delta.newAnnotation);
|
|
271
474
|
}
|
|
475
|
+
if (delta instanceof PartitionAddedDelta) {
|
|
476
|
+
idMapping.updateWith(delta.newPartition);
|
|
477
|
+
}
|
|
272
478
|
// (nothing to be done: no need –yet?- to take deleted child nodes out of the ID mapping)
|
|
273
479
|
};
|
|
274
480
|
//# sourceMappingURL=appliers.js.map
|