@fluidframework/merge-tree 2.81.1 → 2.82.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 (41) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/client.js +3 -1
  4. package/dist/client.js.map +1 -1
  5. package/dist/mergeTree.d.ts.map +1 -1
  6. package/dist/mergeTree.js +12 -2
  7. package/dist/mergeTree.js.map +1 -1
  8. package/dist/mergeTreeTracking.d.ts.map +1 -1
  9. package/dist/mergeTreeTracking.js +3 -1
  10. package/dist/mergeTreeTracking.js.map +1 -1
  11. package/dist/partialLengths.d.ts.map +1 -1
  12. package/dist/partialLengths.js.map +1 -1
  13. package/dist/test/beastTest.spec.d.ts.map +1 -1
  14. package/dist/test/beastTest.spec.js +3 -1
  15. package/dist/test/beastTest.spec.js.map +1 -1
  16. package/dist/test/testServer.d.ts.map +1 -1
  17. package/dist/test/testServer.js +3 -1
  18. package/dist/test/testServer.js.map +1 -1
  19. package/lib/client.d.ts.map +1 -1
  20. package/lib/client.js +3 -1
  21. package/lib/client.js.map +1 -1
  22. package/lib/mergeTree.d.ts.map +1 -1
  23. package/lib/mergeTree.js +12 -2
  24. package/lib/mergeTree.js.map +1 -1
  25. package/lib/mergeTreeTracking.d.ts.map +1 -1
  26. package/lib/mergeTreeTracking.js +3 -1
  27. package/lib/mergeTreeTracking.js.map +1 -1
  28. package/lib/partialLengths.d.ts.map +1 -1
  29. package/lib/partialLengths.js.map +1 -1
  30. package/lib/test/beastTest.spec.d.ts.map +1 -1
  31. package/lib/test/beastTest.spec.js +3 -1
  32. package/lib/test/beastTest.spec.js.map +1 -1
  33. package/lib/test/testServer.d.ts.map +1 -1
  34. package/lib/test/testServer.js +3 -1
  35. package/lib/test/testServer.js.map +1 -1
  36. package/package.json +17 -17
  37. package/src/client.ts +1 -0
  38. package/src/mergeTree.ts +27 -9
  39. package/src/mergeTreeTracking.ts +1 -0
  40. package/src/partialLengths.ts +5 -1
  41. package/biome.jsonc +0 -4
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluidframework/merge-tree",
3
- "version": "2.81.1",
3
+ "version": "2.82.0",
4
4
  "description": "Merge tree",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -81,34 +81,34 @@
81
81
  "temp-directory": "nyc/.nyc_output"
82
82
  },
83
83
  "dependencies": {
84
- "@fluid-internal/client-utils": "~2.81.1",
85
- "@fluidframework/container-definitions": "~2.81.1",
86
- "@fluidframework/core-interfaces": "~2.81.1",
87
- "@fluidframework/core-utils": "~2.81.1",
88
- "@fluidframework/datastore-definitions": "~2.81.1",
89
- "@fluidframework/driver-definitions": "~2.81.1",
90
- "@fluidframework/runtime-definitions": "~2.81.1",
91
- "@fluidframework/runtime-utils": "~2.81.1",
92
- "@fluidframework/shared-object-base": "~2.81.1",
93
- "@fluidframework/telemetry-utils": "~2.81.1"
84
+ "@fluid-internal/client-utils": "~2.82.0",
85
+ "@fluidframework/container-definitions": "~2.82.0",
86
+ "@fluidframework/core-interfaces": "~2.82.0",
87
+ "@fluidframework/core-utils": "~2.82.0",
88
+ "@fluidframework/datastore-definitions": "~2.82.0",
89
+ "@fluidframework/driver-definitions": "~2.82.0",
90
+ "@fluidframework/runtime-definitions": "~2.82.0",
91
+ "@fluidframework/runtime-utils": "~2.82.0",
92
+ "@fluidframework/shared-object-base": "~2.82.0",
93
+ "@fluidframework/telemetry-utils": "~2.82.0"
94
94
  },
95
95
  "devDependencies": {
96
96
  "@arethetypeswrong/cli": "^0.18.2",
97
97
  "@biomejs/biome": "~1.9.3",
98
- "@fluid-internal/mocha-test-setup": "~2.81.1",
99
- "@fluid-private/stochastic-test-utils": "~2.81.1",
100
- "@fluid-private/test-pairwise-generator": "~2.81.1",
98
+ "@fluid-internal/mocha-test-setup": "~2.82.0",
99
+ "@fluid-private/stochastic-test-utils": "~2.82.0",
100
+ "@fluid-private/test-pairwise-generator": "~2.82.0",
101
101
  "@fluid-tools/benchmark": "^0.52.0",
102
102
  "@fluid-tools/build-cli": "^0.63.0",
103
103
  "@fluidframework/build-common": "^2.0.3",
104
104
  "@fluidframework/build-tools": "^0.63.0",
105
- "@fluidframework/eslint-config-fluid": "~2.81.1",
105
+ "@fluidframework/eslint-config-fluid": "~2.82.0",
106
106
  "@fluidframework/merge-tree-previous": "npm:@fluidframework/merge-tree@2.81.0",
107
- "@fluidframework/test-runtime-utils": "~2.81.1",
107
+ "@fluidframework/test-runtime-utils": "~2.82.0",
108
108
  "@microsoft/api-extractor": "7.52.11",
109
109
  "@types/diff": "^3.5.1",
110
110
  "@types/mocha": "^10.0.10",
111
- "@types/node": "^18.19.0",
111
+ "@types/node": "~20.19.30",
112
112
  "c8": "^10.1.3",
113
113
  "concurrently": "^9.2.1",
114
114
  "copyfiles": "^2.4.1",
package/src/client.ts CHANGED
@@ -1479,6 +1479,7 @@ export class Client extends TypedEventEmitter<IClientEvents> {
1479
1479
 
1480
1480
  const collabWindow = this.getCollabWindow();
1481
1481
  if (
1482
+ // eslint-disable-next-line @typescript-eslint/prefer-optional-chain -- TODO: ADO#58520 Code owners should verify if this code change is safe and make it if so or update this comment otherwise
1482
1483
  this.lastNormalization === undefined ||
1483
1484
  collabWindow.currentSeq !== this.lastNormalization.refSeq ||
1484
1485
  collabWindow.localSeq !== this.lastNormalization.localRefSeq
package/src/mergeTree.ts CHANGED
@@ -2477,16 +2477,34 @@ export class MergeTree {
2477
2477
  );
2478
2478
  } /* op.type === MergeTreeDeltaType.ANNOTATE */ else {
2479
2479
  const props = pendingSegmentGroup.previousProps![i];
2480
- const annotateOp = createAnnotateRangeOp(start, start + segment.cachedLength, props);
2481
2480
 
2482
- this.annotateRange(
2483
- start,
2484
- start + segment.cachedLength,
2485
- { props },
2486
- this.localPerspective,
2487
- rollbackStamp,
2488
- { op: annotateOp, rollback: true },
2489
- );
2481
+ // If the segment has been removed by a concurrent operation, we can't use
2482
+ // position-based annotateRange because findRollbackPosition returns a position
2483
+ // that doesn't account for the removed segment, causing the rollback to target
2484
+ // the wrong segment. Instead, directly roll back the properties on the segment.
2485
+ if (isRemoved(segment)) {
2486
+ const propertyManager = (segment.propertyManager ??= new PropertiesManager());
2487
+ propertyManager.rollbackProperties(
2488
+ { props },
2489
+ segment,
2490
+ this.collabWindow.collaborating,
2491
+ );
2492
+ } else {
2493
+ const annotateOp = createAnnotateRangeOp(
2494
+ start,
2495
+ start + segment.cachedLength,
2496
+ props,
2497
+ );
2498
+
2499
+ this.annotateRange(
2500
+ start,
2501
+ start + segment.cachedLength,
2502
+ { props },
2503
+ this.localPerspective,
2504
+ rollbackStamp,
2505
+ { op: annotateOp, rollback: true },
2506
+ );
2507
+ }
2490
2508
  i++;
2491
2509
  }
2492
2510
  }
@@ -153,6 +153,7 @@ export class TrackingGroupCollection {
153
153
 
154
154
  public matches(trackingCollection: TrackingGroupCollection): boolean {
155
155
  if (
156
+ // eslint-disable-next-line @typescript-eslint/prefer-optional-chain -- TODO: ADO#58520 Code owners should verify if this code change is safe and make it if so or update this comment otherwise
156
157
  !trackingCollection ||
157
158
  this._trackingGroups.size !== trackingCollection._trackingGroups.size
158
159
  ) {
@@ -1091,7 +1091,11 @@ export class PartialSequenceLengths {
1091
1091
  refSeq,
1092
1092
  localSeq,
1093
1093
  seglen,
1094
- }: { refSeq: number; localSeq: number; seglen: number }): void {
1094
+ }: {
1095
+ refSeq: number;
1096
+ localSeq: number;
1097
+ seglen: number;
1098
+ }): void {
1095
1099
  assert(
1096
1100
  this.unsequencedRecords !== undefined,
1097
1101
  0xabb /* Local adjustment computed without partials */,
package/biome.jsonc DELETED
@@ -1,4 +0,0 @@
1
- {
2
- "$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
3
- "extends": ["../../../biome.jsonc"]
4
- }