@fluidframework/merge-tree 2.10.0-305357 → 2.10.0-307060

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 (68) hide show
  1. package/.eslintrc.cjs +1 -0
  2. package/api-report/merge-tree.legacy.alpha.api.md +27 -0
  3. package/dist/collections/index.d.ts +1 -1
  4. package/dist/collections/index.d.ts.map +1 -1
  5. package/dist/collections/index.js +2 -1
  6. package/dist/collections/index.js.map +1 -1
  7. package/dist/collections/list.d.ts +7 -0
  8. package/dist/collections/list.d.ts.map +1 -1
  9. package/dist/collections/list.js +27 -1
  10. package/dist/collections/list.js.map +1 -1
  11. package/dist/index.d.ts +2 -2
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js.map +1 -1
  14. package/dist/legacy.d.ts +2 -0
  15. package/dist/mergeTree.d.ts.map +1 -1
  16. package/dist/mergeTree.js +13 -13
  17. package/dist/mergeTree.js.map +1 -1
  18. package/dist/ops.d.ts +36 -0
  19. package/dist/ops.d.ts.map +1 -1
  20. package/dist/ops.js.map +1 -1
  21. package/dist/segmentPropertiesManager.d.ts +81 -8
  22. package/dist/segmentPropertiesManager.d.ts.map +1 -1
  23. package/dist/segmentPropertiesManager.js +211 -61
  24. package/dist/segmentPropertiesManager.js.map +1 -1
  25. package/dist/test/propertyManager.spec.d.ts +6 -0
  26. package/dist/test/propertyManager.spec.d.ts.map +1 -0
  27. package/dist/test/propertyManager.spec.js +156 -0
  28. package/dist/test/propertyManager.spec.js.map +1 -0
  29. package/dist/zamboni.d.ts.map +1 -1
  30. package/dist/zamboni.js +1 -0
  31. package/dist/zamboni.js.map +1 -1
  32. package/lib/collections/index.d.ts +1 -1
  33. package/lib/collections/index.d.ts.map +1 -1
  34. package/lib/collections/index.js +1 -1
  35. package/lib/collections/index.js.map +1 -1
  36. package/lib/collections/list.d.ts +7 -0
  37. package/lib/collections/list.d.ts.map +1 -1
  38. package/lib/collections/list.js +25 -0
  39. package/lib/collections/list.js.map +1 -1
  40. package/lib/index.d.ts +2 -2
  41. package/lib/index.d.ts.map +1 -1
  42. package/lib/index.js.map +1 -1
  43. package/lib/legacy.d.ts +2 -0
  44. package/lib/mergeTree.d.ts.map +1 -1
  45. package/lib/mergeTree.js +13 -13
  46. package/lib/mergeTree.js.map +1 -1
  47. package/lib/ops.d.ts +36 -0
  48. package/lib/ops.d.ts.map +1 -1
  49. package/lib/ops.js.map +1 -1
  50. package/lib/segmentPropertiesManager.d.ts +81 -8
  51. package/lib/segmentPropertiesManager.d.ts.map +1 -1
  52. package/lib/segmentPropertiesManager.js +212 -62
  53. package/lib/segmentPropertiesManager.js.map +1 -1
  54. package/lib/test/propertyManager.spec.d.ts +6 -0
  55. package/lib/test/propertyManager.spec.d.ts.map +1 -0
  56. package/lib/test/propertyManager.spec.js +154 -0
  57. package/lib/test/propertyManager.spec.js.map +1 -0
  58. package/lib/zamboni.d.ts.map +1 -1
  59. package/lib/zamboni.js +1 -0
  60. package/lib/zamboni.js.map +1 -1
  61. package/package.json +22 -15
  62. package/src/collections/index.ts +7 -1
  63. package/src/collections/list.ts +29 -0
  64. package/src/index.ts +3 -0
  65. package/src/mergeTree.ts +20 -18
  66. package/src/ops.ts +38 -0
  67. package/src/segmentPropertiesManager.ts +277 -88
  68. package/src/zamboni.ts +3 -0
package/lib/mergeTree.js CHANGED
@@ -69,15 +69,17 @@ const LRUSegmentComparer = {
69
69
  function ackSegment(segment, segmentGroup, opArgs) {
70
70
  const currentSegmentGroup = segment.segmentGroups?.dequeue();
71
71
  assert(currentSegmentGroup === segmentGroup, 0x043 /* "On ack, unexpected segmentGroup!" */);
72
- switch (opArgs.op.type) {
72
+ assert(opArgs.sequencedMessage !== undefined, "must have sequencedMessage");
73
+ const { op, sequencedMessage: { sequenceNumber, minimumSequenceNumber }, } = opArgs;
74
+ switch (op.type) {
73
75
  case MergeTreeDeltaType.ANNOTATE: {
74
76
  assert(!!segment.propertyManager, 0x044 /* "On annotate ack, missing segment property manager!" */);
75
- segment.propertyManager.ackPendingProperties(opArgs.op);
77
+ segment.propertyManager.ack(sequenceNumber, minimumSequenceNumber, op);
76
78
  return true;
77
79
  }
78
80
  case MergeTreeDeltaType.INSERT: {
79
81
  assert(segment.seq === UnassignedSequenceNumber, 0x045 /* "On insert, seq number already assigned!" */);
80
- segment.seq = opArgs.sequencedMessage.sequenceNumber;
82
+ segment.seq = sequenceNumber;
81
83
  segment.localSeq = undefined;
82
84
  return true;
83
85
  }
@@ -86,7 +88,7 @@ function ackSegment(segment, segmentGroup, opArgs) {
86
88
  assert(removalInfo !== undefined, 0x046 /* "On remove ack, missing removal info!" */);
87
89
  segment.localRemovedSeq = undefined;
88
90
  if (removalInfo.removedSeq === UnassignedSequenceNumber) {
89
- removalInfo.removedSeq = opArgs.sequencedMessage.sequenceNumber;
91
+ removalInfo.removedSeq = sequenceNumber;
90
92
  return true;
91
93
  }
92
94
  return false;
@@ -100,16 +102,15 @@ function ackSegment(segment, segmentGroup, opArgs) {
100
102
  segment.localMovedSeq = obliterateInfo.localSeq = undefined;
101
103
  const seqIdx = moveInfo.movedSeqs.indexOf(UnassignedSequenceNumber);
102
104
  assert(seqIdx !== -1, 0x86f /* expected movedSeqs to contain unacked seq */);
103
- moveInfo.movedSeqs[seqIdx] = obliterateInfo.seq =
104
- opArgs.sequencedMessage.sequenceNumber;
105
+ moveInfo.movedSeqs[seqIdx] = sequenceNumber;
105
106
  if (moveInfo.movedSeq === UnassignedSequenceNumber) {
106
- moveInfo.movedSeq = opArgs.sequencedMessage.sequenceNumber;
107
+ moveInfo.movedSeq = sequenceNumber;
107
108
  return true;
108
109
  }
109
110
  return false;
110
111
  }
111
112
  default: {
112
- throw new Error(`${opArgs.op.type} is in unrecognized operation type`);
113
+ throw new Error(`${op.type} is in unrecognized operation type`);
113
114
  }
114
115
  }
115
116
  }
@@ -820,8 +821,8 @@ export class MergeTree {
820
821
  segment: pendingSegment,
821
822
  });
822
823
  });
823
- if (opArgs.op.type === MergeTreeDeltaType.OBLITERATE ||
824
- opArgs.op.type === MergeTreeDeltaType.OBLITERATE_SIDED) {
824
+ if (pendingSegmentGroup.obliterateInfo !== undefined) {
825
+ pendingSegmentGroup.obliterateInfo.seq = seq;
825
826
  this.obliterates.addOrUpdate(pendingSegmentGroup.obliterateInfo);
826
827
  }
827
828
  // Perform slides after all segments have been acked, so that
@@ -1264,8 +1265,7 @@ export class MergeTree {
1264
1265
  !(reservedMarkerIdKey in props) ||
1265
1266
  props.markerId === segment.properties?.markerId, 0x5ad /* Cannot change the markerId of an existing marker */);
1266
1267
  const propertyManager = (segment.propertyManager ?? (segment.propertyManager = new PropertiesManager()));
1267
- const properties = (segment.properties ?? (segment.properties = createMap()));
1268
- const propertyDeltas = propertyManager.addProperties(properties, props, seq, this.collabWindow.collaborating, rollback);
1268
+ const propertyDeltas = propertyManager.handleProperties({ props }, segment, seq, this.collabWindow.minSeq, this.collabWindow.collaborating, rollback);
1269
1269
  if (!isRemovedOrMoved(segment)) {
1270
1270
  deltaSegments.push({ segment, propertyDeltas });
1271
1271
  }
@@ -1416,7 +1416,7 @@ export class MergeTree {
1416
1416
  undefined, seq === UnassignedSequenceNumber ? undefined : seq);
1417
1417
  this.slideAckedRemovedSegmentReferences(localOverlapWithRefs);
1418
1418
  // opArgs == undefined => test code
1419
- if (movedSegments.length > 0) {
1419
+ if (start.pos !== end.pos || start.side !== end.side) {
1420
1420
  this.mergeTreeDeltaCallback?.(opArgs, {
1421
1421
  operation: MergeTreeDeltaType.OBLITERATE,
1422
1422
  deltaSegments: movedSegments,