@lionweb/class-core 0.7.0-beta.9 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/CHANGELOG.md +18 -1
  2. package/README.md +6 -6
  3. package/dist/LionCore_builtins.g.d.ts +2 -2
  4. package/dist/LionCore_builtins.g.d.ts.map +1 -1
  5. package/dist/LionCore_builtins.g.js +1 -1
  6. package/dist/LionCore_builtins.g.js.map +1 -1
  7. package/dist/base-types.d.ts +7 -11
  8. package/dist/base-types.d.ts.map +1 -1
  9. package/dist/base-types.js +3 -28
  10. package/dist/base-types.js.map +1 -1
  11. package/dist/convenience.d.ts +10 -9
  12. package/dist/convenience.d.ts.map +1 -1
  13. package/dist/convenience.js +12 -11
  14. package/dist/convenience.js.map +1 -1
  15. package/dist/deltas/appliers.d.ts +5 -4
  16. package/dist/deltas/appliers.d.ts.map +1 -1
  17. package/dist/deltas/appliers.js +369 -163
  18. package/dist/deltas/appliers.js.map +1 -1
  19. package/dist/deltas/compositor.d.ts +51 -0
  20. package/dist/deltas/compositor.d.ts.map +1 -0
  21. package/dist/deltas/compositor.js +95 -0
  22. package/dist/deltas/compositor.js.map +1 -0
  23. package/dist/deltas/index.d.ts +2 -1
  24. package/dist/deltas/index.d.ts.map +1 -1
  25. package/dist/deltas/index.js +2 -1
  26. package/dist/deltas/index.js.map +1 -1
  27. package/dist/deltas/inverters.d.ts.map +1 -1
  28. package/dist/deltas/inverters.js +91 -28
  29. package/dist/deltas/inverters.js.map +1 -1
  30. package/dist/deltas/receivers.d.ts +39 -0
  31. package/dist/deltas/receivers.d.ts.map +1 -0
  32. package/dist/deltas/receivers.js +60 -0
  33. package/dist/deltas/receivers.js.map +1 -0
  34. package/dist/deltas/serialization/deserializer.g.d.ts.map +1 -1
  35. package/dist/deltas/serialization/deserializer.g.js +167 -59
  36. package/dist/deltas/serialization/deserializer.g.js.map +1 -1
  37. package/dist/deltas/serialization/serializer-helpers.d.ts +1 -1
  38. package/dist/deltas/serialization/serializer-helpers.d.ts.map +1 -1
  39. package/dist/deltas/serialization/serializer-helpers.js +3 -4
  40. package/dist/deltas/serialization/serializer-helpers.js.map +1 -1
  41. package/dist/deltas/serialization/serializer.g.d.ts +2 -2
  42. package/dist/deltas/serialization/serializer.g.d.ts.map +1 -1
  43. package/dist/deltas/serialization/serializer.g.js +186 -47
  44. package/dist/deltas/serialization/serializer.g.js.map +1 -1
  45. package/dist/deltas/serialization/types.g.d.ts +156 -43
  46. package/dist/deltas/serialization/types.g.d.ts.map +1 -1
  47. package/dist/deltas/types.g.d.ts +155 -55
  48. package/dist/deltas/types.g.d.ts.map +1 -1
  49. package/dist/deltas/types.g.js +170 -57
  50. package/dist/deltas/types.g.js.map +1 -1
  51. package/dist/deserializer.d.ts +6 -6
  52. package/dist/deserializer.d.ts.map +1 -1
  53. package/dist/deserializer.js +16 -27
  54. package/dist/deserializer.js.map +1 -1
  55. package/dist/duplicator.d.ts.map +1 -1
  56. package/dist/duplicator.js.map +1 -1
  57. package/dist/factory.d.ts +10 -2
  58. package/dist/factory.d.ts.map +1 -1
  59. package/dist/factory.js +25 -16
  60. package/dist/factory.js.map +1 -1
  61. package/dist/id-mapping.d.ts +31 -3
  62. package/dist/id-mapping.d.ts.map +1 -1
  63. package/dist/id-mapping.js +46 -14
  64. package/dist/id-mapping.js.map +1 -1
  65. package/dist/serializer.d.ts.map +1 -1
  66. package/dist/textualizer.d.ts +1 -1
  67. package/dist/textualizer.d.ts.map +1 -1
  68. package/dist/textualizer.js +1 -1
  69. package/dist/textualizer.js.map +1 -1
  70. package/dist/value-managers/annotations.d.ts +5 -0
  71. package/dist/value-managers/annotations.d.ts.map +1 -1
  72. package/dist/value-managers/annotations.js +31 -3
  73. package/dist/value-managers/annotations.js.map +1 -1
  74. package/dist/value-managers/base.d.ts +2 -2
  75. package/dist/value-managers/base.d.ts.map +1 -1
  76. package/dist/value-managers/base.js +4 -4
  77. package/dist/value-managers/base.js.map +1 -1
  78. package/dist/value-managers/containments.d.ts +4 -1
  79. package/dist/value-managers/containments.d.ts.map +1 -1
  80. package/dist/value-managers/containments.js +151 -20
  81. package/dist/value-managers/containments.js.map +1 -1
  82. package/dist/value-managers/properties.d.ts.map +1 -1
  83. package/dist/value-managers/properties.js +1 -0
  84. package/dist/value-managers/properties.js.map +1 -1
  85. package/dist/value-managers/references.d.ts +3 -0
  86. package/dist/value-managers/references.d.ts.map +1 -1
  87. package/dist/value-managers/references.js +26 -8
  88. package/dist/value-managers/references.js.map +1 -1
  89. package/package.json +34 -37
  90. package/src/LionCore_builtins.g.ts +2 -2
  91. package/src/base-types.ts +6 -32
  92. package/src/convenience.ts +15 -14
  93. package/src/deltas/appliers.ts +377 -177
  94. package/src/deltas/compositor.ts +107 -0
  95. package/src/deltas/index.ts +3 -1
  96. package/src/deltas/inverters.ts +108 -36
  97. package/src/deltas/receivers.ts +92 -0
  98. package/src/deltas/serialization/deserializer.g.ts +185 -64
  99. package/src/deltas/serialization/serializer-helpers.ts +3 -10
  100. package/src/deltas/serialization/serializer.g.ts +242 -63
  101. package/src/deltas/serialization/types.g.ts +190 -51
  102. package/src/deltas/types.g.ts +190 -51
  103. package/src/deserializer.ts +32 -43
  104. package/src/duplicator.ts +1 -1
  105. package/src/factory.ts +31 -17
  106. package/src/id-mapping.ts +43 -5
  107. package/src/textualizer.ts +1 -1
  108. package/src/value-managers/annotations.ts +28 -2
  109. package/src/value-managers/base.ts +4 -4
  110. package/src/value-managers/containments.ts +144 -20
  111. package/src/value-managers/properties.ts +1 -0
  112. package/src/value-managers/references.ts +28 -8
  113. package/dist/deltas/handlers.d.ts +0 -17
  114. package/dist/deltas/handlers.d.ts.map +0 -1
  115. package/dist/deltas/handlers.js +0 -43
  116. package/dist/deltas/handlers.js.map +0 -1
  117. package/src/deltas/handlers.ts +0 -64
@@ -23,60 +23,96 @@ import { IDelta } from "../base.js";
23
23
  import {
24
24
  AnnotationAddedDelta,
25
25
  AnnotationDeletedDelta,
26
+ AnnotationMovedAndReplacedFromOtherParentDelta,
27
+ AnnotationMovedAndReplacedInSameParentDelta,
26
28
  AnnotationMovedFromOtherParentDelta,
27
29
  AnnotationMovedInSameParentDelta,
28
30
  AnnotationReplacedDelta,
29
31
  ChildAddedDelta,
30
32
  ChildDeletedDelta,
31
- ChildMovedDelta,
33
+ ChildMovedAndReplacedFromOtherContainmentDelta,
34
+ ChildMovedAndReplacedFromOtherContainmentInSameParentDelta,
35
+ ChildMovedAndReplacedInSameContainmentDelta,
36
+ ChildMovedFromOtherContainmentDelta,
37
+ ChildMovedFromOtherContainmentInSameParentDelta,
32
38
  ChildMovedInSameContainmentDelta,
33
39
  ChildReplacedDelta,
40
+ CompositeDelta,
41
+ EntryMovedAndReplacedFromOtherReferenceDelta,
42
+ EntryMovedAndReplacedFromOtherReferenceInSameParentDelta,
43
+ EntryMovedAndReplacedInSameReferenceDelta,
44
+ EntryMovedFromOtherReferenceDelta,
45
+ EntryMovedFromOtherReferenceInSameParentDelta,
46
+ EntryMovedInSameReferenceDelta,
34
47
  NoOpDelta,
48
+ PartitionAddedDelta,
49
+ PartitionDeletedDelta,
35
50
  PropertyAddedDelta,
36
51
  PropertyChangedDelta,
37
52
  PropertyDeletedDelta,
38
53
  ReferenceAddedDelta,
39
- ReferenceDeletedDelta,
40
- ReferenceMovedDelta,
41
- ReferenceMovedInSameReferenceDelta,
42
- ReferenceReplacedDelta
54
+ ReferenceChangedDelta,
55
+ ReferenceDeletedDelta
43
56
  } from "../types.g.js";
44
57
  import {
45
58
  AnnotationAddedSerializedDelta,
46
59
  AnnotationDeletedSerializedDelta,
60
+ AnnotationMovedAndReplacedFromOtherParentSerializedDelta,
61
+ AnnotationMovedAndReplacedInSameParentSerializedDelta,
47
62
  AnnotationMovedFromOtherParentSerializedDelta,
48
63
  AnnotationMovedInSameParentSerializedDelta,
49
64
  AnnotationReplacedSerializedDelta,
50
65
  ChildAddedSerializedDelta,
51
66
  ChildDeletedSerializedDelta,
67
+ ChildMovedAndReplacedFromOtherContainmentInSameParentSerializedDelta,
68
+ ChildMovedAndReplacedFromOtherContainmentSerializedDelta,
69
+ ChildMovedAndReplacedInSameContainmentSerializedDelta,
70
+ ChildMovedFromOtherContainmentInSameParentSerializedDelta,
71
+ ChildMovedFromOtherContainmentSerializedDelta,
52
72
  ChildMovedInSameContainmentSerializedDelta,
53
- ChildMovedSerializedDelta,
54
73
  ChildReplacedSerializedDelta,
74
+ CompositeSerializedDelta,
75
+ EntryMovedAndReplacedFromOtherReferenceInSameParentSerializedDelta,
76
+ EntryMovedAndReplacedFromOtherReferenceSerializedDelta,
77
+ EntryMovedAndReplacedInSameReferenceSerializedDelta,
78
+ EntryMovedFromOtherReferenceInSameParentSerializedDelta,
79
+ EntryMovedFromOtherReferenceSerializedDelta,
80
+ EntryMovedInSameReferenceSerializedDelta,
55
81
  NoOpSerializedDelta,
82
+ PartitionAddedSerializedDelta,
83
+ PartitionDeletedSerializedDelta,
56
84
  PropertyAddedSerializedDelta,
57
85
  PropertyChangedSerializedDelta,
58
86
  PropertyDeletedSerializedDelta,
59
87
  ReferenceAddedSerializedDelta,
88
+ ReferenceChangedSerializedDelta,
60
89
  ReferenceDeletedSerializedDelta,
61
- ReferenceMovedInSameReferenceSerializedDelta,
62
- ReferenceMovedSerializedDelta,
63
- ReferenceReplacedSerializedDelta
90
+ SerializedDelta
64
91
  } from "./types.g.js";
65
92
  import { idFrom, serializePropertyValue } from "./serializer-helpers.js";
66
93
  import { serializeNodeBases } from "../../serializer.js";
67
94
 
68
95
 
69
- export const serializeDelta = (delta: IDelta) => {
70
- if (delta instanceof NoOpDelta) {
96
+ export const serializeDelta = (delta: IDelta): SerializedDelta => {
97
+ if (delta instanceof PartitionAddedDelta) {
71
98
  return {
72
- kind: "NoOp"
73
- } as NoOpSerializedDelta;
99
+ kind: "PartitionAdded",
100
+ newPartition: delta.newPartition.id,
101
+ newNodes: serializeNodeBases([delta.newPartition])
102
+ } as PartitionAddedSerializedDelta;
103
+ }
104
+
105
+ if (delta instanceof PartitionDeletedDelta) {
106
+ return {
107
+ kind: "PartitionDeleted",
108
+ deletedPartition: delta.deletedPartition.id
109
+ } as PartitionDeletedSerializedDelta;
74
110
  }
75
111
 
76
112
  if (delta instanceof PropertyAddedDelta) {
77
113
  return {
78
114
  kind: "PropertyAdded",
79
- container: delta.container.id,
115
+ node: delta.node.id,
80
116
  property: metaPointerFor(delta.property),
81
117
  value: serializePropertyValue(delta.value, delta.property)
82
118
  } as PropertyAddedSerializedDelta;
@@ -85,7 +121,7 @@ export const serializeDelta = (delta: IDelta) => {
85
121
  if (delta instanceof PropertyDeletedDelta) {
86
122
  return {
87
123
  kind: "PropertyDeleted",
88
- container: delta.container.id,
124
+ node: delta.node.id,
89
125
  property: metaPointerFor(delta.property),
90
126
  oldValue: serializePropertyValue(delta.oldValue, delta.property)
91
127
  } as PropertyDeletedSerializedDelta;
@@ -94,7 +130,7 @@ export const serializeDelta = (delta: IDelta) => {
94
130
  if (delta instanceof PropertyChangedDelta) {
95
131
  return {
96
132
  kind: "PropertyChanged",
97
- container: delta.container.id,
133
+ node: delta.node.id,
98
134
  property: metaPointerFor(delta.property),
99
135
  oldValue: serializePropertyValue(delta.oldValue, delta.property),
100
136
  newValue: serializePropertyValue(delta.newValue, delta.property)
@@ -136,17 +172,29 @@ export const serializeDelta = (delta: IDelta) => {
136
172
  } as ChildReplacedSerializedDelta;
137
173
  }
138
174
 
139
- if (delta instanceof ChildMovedDelta) {
175
+ if (delta instanceof ChildMovedFromOtherContainmentDelta) {
140
176
  return {
141
- kind: "ChildMoved",
177
+ kind: "ChildMovedFromOtherContainment",
142
178
  oldParent: delta.oldParent.id,
143
179
  oldContainment: metaPointerFor(delta.oldContainment),
144
180
  oldIndex: delta.oldIndex,
145
181
  newParent: delta.newParent.id,
146
182
  newContainment: metaPointerFor(delta.newContainment),
147
183
  newIndex: delta.newIndex,
148
- child: delta.child.id
149
- } as ChildMovedSerializedDelta;
184
+ movedChild: delta.movedChild.id
185
+ } as ChildMovedFromOtherContainmentSerializedDelta;
186
+ }
187
+
188
+ if (delta instanceof ChildMovedFromOtherContainmentInSameParentDelta) {
189
+ return {
190
+ kind: "ChildMovedFromOtherContainmentInSameParent",
191
+ parent: delta.parent.id,
192
+ oldContainment: metaPointerFor(delta.oldContainment),
193
+ oldIndex: delta.oldIndex,
194
+ movedChild: delta.movedChild.id,
195
+ newContainment: metaPointerFor(delta.newContainment),
196
+ newIndex: delta.newIndex
197
+ } as ChildMovedFromOtherContainmentInSameParentSerializedDelta;
150
198
  }
151
199
 
152
200
  if (delta instanceof ChildMovedInSameContainmentDelta) {
@@ -156,63 +204,50 @@ export const serializeDelta = (delta: IDelta) => {
156
204
  containment: metaPointerFor(delta.containment),
157
205
  oldIndex: delta.oldIndex,
158
206
  newIndex: delta.newIndex,
159
- child: delta.child.id
207
+ movedChild: delta.movedChild.id
160
208
  } as ChildMovedInSameContainmentSerializedDelta;
161
209
  }
162
210
 
163
- if (delta instanceof ReferenceAddedDelta) {
211
+ if (delta instanceof ChildMovedAndReplacedFromOtherContainmentDelta) {
164
212
  return {
165
- kind: "ReferenceAdded",
166
- container: delta.container.id,
167
- reference: metaPointerFor(delta.reference),
168
- index: delta.index,
169
- newTarget: idFrom(delta.newTarget)
170
- } as ReferenceAddedSerializedDelta;
171
- }
172
-
173
- if (delta instanceof ReferenceDeletedDelta) {
174
- return {
175
- kind: "ReferenceDeleted",
176
- container: delta.container.id,
177
- reference: metaPointerFor(delta.reference),
178
- index: delta.index,
179
- deletedTarget: idFrom(delta.deletedTarget)
180
- } as ReferenceDeletedSerializedDelta;
181
- }
182
-
183
- if (delta instanceof ReferenceReplacedDelta) {
184
- return {
185
- kind: "ReferenceReplaced",
186
- container: delta.container.id,
187
- reference: metaPointerFor(delta.reference),
188
- index: delta.index,
189
- replacedTarget: idFrom(delta.replacedTarget),
190
- newTarget: idFrom(delta.newTarget)
191
- } as ReferenceReplacedSerializedDelta;
213
+ kind: "ChildMovedAndReplacedFromOtherContainment",
214
+ newParent: delta.newParent.id,
215
+ newContainment: metaPointerFor(delta.newContainment),
216
+ newIndex: delta.newIndex,
217
+ movedChild: delta.movedChild.id,
218
+ oldParent: delta.oldParent.id,
219
+ oldContainment: metaPointerFor(delta.oldContainment),
220
+ oldIndex: delta.oldIndex,
221
+ replacedChild: delta.replacedChild.id,
222
+ replacedChildAsNodes: serializeNodeBases([delta.replacedChild])
223
+ } as ChildMovedAndReplacedFromOtherContainmentSerializedDelta;
192
224
  }
193
225
 
194
- if (delta instanceof ReferenceMovedDelta) {
226
+ if (delta instanceof ChildMovedAndReplacedFromOtherContainmentInSameParentDelta) {
195
227
  return {
196
- kind: "ReferenceMoved",
197
- oldContainer: delta.oldContainer.id,
198
- oldReference: metaPointerFor(delta.oldReference),
228
+ kind: "ChildMovedAndReplacedFromOtherContainmentInSameParent",
229
+ parent: delta.parent.id,
230
+ oldContainment: metaPointerFor(delta.oldContainment),
199
231
  oldIndex: delta.oldIndex,
200
- newContainer: delta.newContainer.id,
201
- newReference: metaPointerFor(delta.newReference),
232
+ newContainment: metaPointerFor(delta.newContainment),
202
233
  newIndex: delta.newIndex,
203
- target: idFrom(delta.target)
204
- } as ReferenceMovedSerializedDelta;
234
+ movedChild: delta.movedChild.id,
235
+ replacedChild: delta.replacedChild.id,
236
+ replacedChildAsNodes: serializeNodeBases([delta.replacedChild])
237
+ } as ChildMovedAndReplacedFromOtherContainmentInSameParentSerializedDelta;
205
238
  }
206
239
 
207
- if (delta instanceof ReferenceMovedInSameReferenceDelta) {
240
+ if (delta instanceof ChildMovedAndReplacedInSameContainmentDelta) {
208
241
  return {
209
- kind: "ReferenceMovedInSameReference",
210
- container: delta.container.id,
211
- reference: metaPointerFor(delta.reference),
242
+ kind: "ChildMovedAndReplacedInSameContainment",
243
+ parent: delta.parent.id,
244
+ containment: metaPointerFor(delta.containment),
212
245
  oldIndex: delta.oldIndex,
213
246
  newIndex: delta.newIndex,
214
- target: idFrom(delta.target)
215
- } as ReferenceMovedInSameReferenceSerializedDelta;
247
+ movedChild: delta.movedChild.id,
248
+ replacedChild: delta.replacedChild.id,
249
+ replacedChildAsNodes: serializeNodeBases([delta.replacedChild])
250
+ } as ChildMovedAndReplacedInSameContainmentSerializedDelta;
216
251
  }
217
252
 
218
253
  if (delta instanceof AnnotationAddedDelta) {
@@ -268,5 +303,149 @@ export const serializeDelta = (delta: IDelta) => {
268
303
  } as AnnotationMovedInSameParentSerializedDelta;
269
304
  }
270
305
 
306
+ if (delta instanceof AnnotationMovedAndReplacedFromOtherParentDelta) {
307
+ return {
308
+ kind: "AnnotationMovedAndReplacedFromOtherParent",
309
+ oldParent: delta.oldParent.id,
310
+ oldIndex: delta.oldIndex,
311
+ replacedAnnotation: delta.replacedAnnotation.id,
312
+ replacedAnnotationNodes: serializeNodeBases([delta.replacedAnnotation]),
313
+ newParent: delta.newParent.id,
314
+ newIndex: delta.newIndex,
315
+ movedAnnotation: delta.movedAnnotation.id
316
+ } as AnnotationMovedAndReplacedFromOtherParentSerializedDelta;
317
+ }
318
+
319
+ if (delta instanceof AnnotationMovedAndReplacedInSameParentDelta) {
320
+ return {
321
+ kind: "AnnotationMovedAndReplacedInSameParent",
322
+ parent: delta.parent.id,
323
+ oldIndex: delta.oldIndex,
324
+ newIndex: delta.newIndex,
325
+ replacedAnnotation: delta.replacedAnnotation.id,
326
+ replacedAnnotationNodes: serializeNodeBases([delta.replacedAnnotation]),
327
+ movedAnnotation: delta.movedAnnotation.id
328
+ } as AnnotationMovedAndReplacedInSameParentSerializedDelta;
329
+ }
330
+
331
+ if (delta instanceof ReferenceAddedDelta) {
332
+ return {
333
+ kind: "ReferenceAdded",
334
+ parent: delta.parent.id,
335
+ reference: metaPointerFor(delta.reference),
336
+ index: delta.index,
337
+ newTarget: idFrom(delta.newTarget)
338
+ } as ReferenceAddedSerializedDelta;
339
+ }
340
+
341
+ if (delta instanceof ReferenceDeletedDelta) {
342
+ return {
343
+ kind: "ReferenceDeleted",
344
+ parent: delta.parent.id,
345
+ reference: metaPointerFor(delta.reference),
346
+ index: delta.index,
347
+ deletedTarget: idFrom(delta.deletedTarget)
348
+ } as ReferenceDeletedSerializedDelta;
349
+ }
350
+
351
+ if (delta instanceof ReferenceChangedDelta) {
352
+ return {
353
+ kind: "ReferenceChanged",
354
+ parent: delta.parent.id,
355
+ reference: metaPointerFor(delta.reference),
356
+ index: delta.index,
357
+ newTarget: idFrom(delta.newTarget),
358
+ oldTarget: idFrom(delta.oldTarget)
359
+ } as ReferenceChangedSerializedDelta;
360
+ }
361
+
362
+ if (delta instanceof EntryMovedFromOtherReferenceDelta) {
363
+ return {
364
+ kind: "EntryMovedFromOtherReference",
365
+ oldParent: delta.oldParent.id,
366
+ oldReference: metaPointerFor(delta.oldReference),
367
+ oldIndex: delta.oldIndex,
368
+ newParent: delta.newParent.id,
369
+ newReference: metaPointerFor(delta.newReference),
370
+ newIndex: delta.newIndex,
371
+ movedTarget: idFrom(delta.movedTarget)
372
+ } as EntryMovedFromOtherReferenceSerializedDelta;
373
+ }
374
+
375
+ if (delta instanceof EntryMovedFromOtherReferenceInSameParentDelta) {
376
+ return {
377
+ kind: "EntryMovedFromOtherReferenceInSameParent",
378
+ parent: delta.parent.id,
379
+ oldReference: metaPointerFor(delta.oldReference),
380
+ oldIndex: delta.oldIndex,
381
+ newReference: metaPointerFor(delta.newReference),
382
+ newIndex: delta.newIndex,
383
+ movedTarget: idFrom(delta.movedTarget)
384
+ } as EntryMovedFromOtherReferenceInSameParentSerializedDelta;
385
+ }
386
+
387
+ if (delta instanceof EntryMovedInSameReferenceDelta) {
388
+ return {
389
+ kind: "EntryMovedInSameReference",
390
+ parent: delta.parent.id,
391
+ reference: metaPointerFor(delta.reference),
392
+ oldIndex: delta.oldIndex,
393
+ newIndex: delta.newIndex,
394
+ movedTarget: idFrom(delta.movedTarget)
395
+ } as EntryMovedInSameReferenceSerializedDelta;
396
+ }
397
+
398
+ if (delta instanceof EntryMovedAndReplacedFromOtherReferenceDelta) {
399
+ return {
400
+ kind: "EntryMovedAndReplacedFromOtherReference",
401
+ newParent: delta.newParent.id,
402
+ newReference: metaPointerFor(delta.newReference),
403
+ newIndex: delta.newIndex,
404
+ movedTarget: idFrom(delta.movedTarget),
405
+ oldParent: delta.oldParent.id,
406
+ oldReference: metaPointerFor(delta.oldReference),
407
+ oldIndex: delta.oldIndex,
408
+ replacedTarget: idFrom(delta.replacedTarget)
409
+ } as EntryMovedAndReplacedFromOtherReferenceSerializedDelta;
410
+ }
411
+
412
+ if (delta instanceof EntryMovedAndReplacedFromOtherReferenceInSameParentDelta) {
413
+ return {
414
+ kind: "EntryMovedAndReplacedFromOtherReferenceInSameParent",
415
+ parent: delta.parent.id,
416
+ oldReference: metaPointerFor(delta.oldReference),
417
+ oldIndex: delta.oldIndex,
418
+ newReference: metaPointerFor(delta.newReference),
419
+ newIndex: delta.newIndex,
420
+ movedTarget: idFrom(delta.movedTarget),
421
+ replacedTarget: idFrom(delta.replacedTarget)
422
+ } as EntryMovedAndReplacedFromOtherReferenceInSameParentSerializedDelta;
423
+ }
424
+
425
+ if (delta instanceof EntryMovedAndReplacedInSameReferenceDelta) {
426
+ return {
427
+ kind: "EntryMovedAndReplacedInSameReference",
428
+ parent: delta.parent.id,
429
+ reference: metaPointerFor(delta.reference),
430
+ oldIndex: delta.oldIndex,
431
+ newIndex: delta.newIndex,
432
+ movedTarget: idFrom(delta.movedTarget),
433
+ replacedTarget: idFrom(delta.replacedTarget)
434
+ } as EntryMovedAndReplacedInSameReferenceSerializedDelta;
435
+ }
436
+
437
+ if (delta instanceof CompositeDelta) {
438
+ return {
439
+ kind: "Composite",
440
+ parts: delta.parts.map(serializeDelta)
441
+ } as CompositeSerializedDelta;
442
+ }
443
+
444
+ if (delta instanceof NoOpDelta) {
445
+ return {
446
+ kind: "NoOp"
447
+ } as NoOpSerializedDelta;
448
+ }
449
+
271
450
  throw new Error(`serialization of delta of class ${delta.constructor.name} not implemented`);
272
451
  }