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