@fluidframework/merge-tree 2.115.0 → 2.116.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 (39) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +5 -3
  3. package/dist/endOfTreeSegment.js +1 -1
  4. package/dist/endOfTreeSegment.js.map +1 -1
  5. package/dist/localReference.d.ts.map +1 -1
  6. package/dist/localReference.js +4 -2
  7. package/dist/localReference.js.map +1 -1
  8. package/dist/partialLengths.js +1 -1
  9. package/dist/partialLengths.js.map +1 -1
  10. package/dist/sortedSegmentSet.d.ts.map +1 -1
  11. package/dist/sortedSegmentSet.js +5 -5
  12. package/dist/sortedSegmentSet.js.map +1 -1
  13. package/dist/test/client.rollback.spec.js +1 -1
  14. package/dist/test/client.rollback.spec.js.map +1 -1
  15. package/dist/test/localReference.spec.d.ts +6 -0
  16. package/dist/test/localReference.spec.d.ts.map +1 -0
  17. package/dist/test/localReference.spec.js +171 -0
  18. package/dist/test/localReference.spec.js.map +1 -0
  19. package/lib/endOfTreeSegment.js +2 -2
  20. package/lib/endOfTreeSegment.js.map +1 -1
  21. package/lib/localReference.d.ts.map +1 -1
  22. package/lib/localReference.js +4 -2
  23. package/lib/localReference.js.map +1 -1
  24. package/lib/partialLengths.js +2 -2
  25. package/lib/partialLengths.js.map +1 -1
  26. package/lib/sortedSegmentSet.d.ts.map +1 -1
  27. package/lib/sortedSegmentSet.js +5 -5
  28. package/lib/sortedSegmentSet.js.map +1 -1
  29. package/lib/test/client.rollback.spec.js +1 -1
  30. package/lib/test/client.rollback.spec.js.map +1 -1
  31. package/lib/test/localReference.spec.d.ts +6 -0
  32. package/lib/test/localReference.spec.d.ts.map +1 -0
  33. package/lib/test/localReference.spec.js +169 -0
  34. package/lib/test/localReference.spec.js.map +1 -0
  35. package/package.json +20 -20
  36. package/src/endOfTreeSegment.ts +2 -2
  37. package/src/localReference.ts +4 -2
  38. package/src/partialLengths.ts +2 -2
  39. package/src/sortedSegmentSet.ts +9 -5
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluidframework/merge-tree",
3
- "version": "2.115.0",
3
+ "version": "2.116.0",
4
4
  "description": "Merge tree",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -81,30 +81,30 @@
81
81
  "temp-directory": "nyc/.nyc_output"
82
82
  },
83
83
  "dependencies": {
84
- "@fluid-internal/client-utils": "~2.115.0",
85
- "@fluidframework/container-definitions": "~2.115.0",
86
- "@fluidframework/core-interfaces": "~2.115.0",
87
- "@fluidframework/core-utils": "~2.115.0",
88
- "@fluidframework/datastore-definitions": "~2.115.0",
89
- "@fluidframework/driver-definitions": "~2.115.0",
90
- "@fluidframework/runtime-definitions": "~2.115.0",
91
- "@fluidframework/runtime-utils": "~2.115.0",
92
- "@fluidframework/shared-object-base": "~2.115.0",
93
- "@fluidframework/telemetry-utils": "~2.115.0"
84
+ "@fluid-internal/client-utils": "~2.116.0",
85
+ "@fluidframework/container-definitions": "~2.116.0",
86
+ "@fluidframework/core-interfaces": "~2.116.0",
87
+ "@fluidframework/core-utils": "~2.116.0",
88
+ "@fluidframework/datastore-definitions": "~2.116.0",
89
+ "@fluidframework/driver-definitions": "~2.116.0",
90
+ "@fluidframework/runtime-definitions": "~2.116.0",
91
+ "@fluidframework/runtime-utils": "~2.116.0",
92
+ "@fluidframework/shared-object-base": "~2.116.0",
93
+ "@fluidframework/telemetry-utils": "~2.116.0"
94
94
  },
95
95
  "devDependencies": {
96
- "@arethetypeswrong/cli": "^0.18.2",
96
+ "@arethetypeswrong/cli": "^0.18.5",
97
97
  "@biomejs/biome": "~2.4.5",
98
- "@fluid-internal/mocha-test-setup": "~2.115.0",
99
- "@fluid-private/stochastic-test-utils": "~2.115.0",
100
- "@fluid-private/test-pairwise-generator": "~2.115.0",
98
+ "@fluid-internal/mocha-test-setup": "~2.116.0",
99
+ "@fluid-private/stochastic-test-utils": "~2.116.0",
100
+ "@fluid-private/test-pairwise-generator": "~2.116.0",
101
101
  "@fluid-tools/benchmark": "^0.59.0",
102
- "@fluid-tools/build-cli": "^0.65.0",
102
+ "@fluid-tools/build-cli": "^0.67.0",
103
103
  "@fluidframework/build-common": "^2.0.3",
104
- "@fluidframework/build-tools": "^0.65.0",
105
- "@fluidframework/eslint-config-fluid": "^13.0.0",
106
- "@fluidframework/merge-tree-previous": "npm:@fluidframework/merge-tree@2.112.0",
107
- "@fluidframework/test-runtime-utils": "~2.115.0",
104
+ "@fluidframework/build-tools": "^0.67.0",
105
+ "@fluidframework/eslint-config-fluid": "^14.0.0",
106
+ "@fluidframework/merge-tree-previous": "npm:@fluidframework/merge-tree@2.114.0",
107
+ "@fluidframework/test-runtime-utils": "~2.116.0",
108
108
  "@microsoft/api-extractor": "7.58.1",
109
109
  "@types/diff": "^3.5.1",
110
110
  "@types/mocha": "^10.0.10",
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { assert } from "@fluidframework/core-utils/internal";
6
+ import { fail } from "@fluidframework/core-utils/internal";
7
7
 
8
8
  import { LocalClientId } from "./constants.js";
9
9
  import type { LocalReferenceCollection } from "./localReference.js";
@@ -93,7 +93,7 @@ abstract class BaseEndpointSegment
93
93
  }
94
94
 
95
95
  const notSupported = (): never => {
96
- assert(false, 0x3ed /* operation not supported */);
96
+ fail(0x3ed /* operation not supported */);
97
97
  };
98
98
 
99
99
  /**
@@ -590,12 +590,14 @@ export class LocalReferenceCollection {
590
590
  const startList = startNode?.list;
591
591
 
592
592
  if (startList !== undefined) {
593
+ // Discard the buckets (before/at/after) which precede the bucket containing `start`,
594
+ // so the walk begins at that bucket. `listWalker` then resumes mid-bucket at `startNode`.
593
595
  if (forward) {
594
- while (!offsetPositions.empty && offsetPositions.first !== startNode) {
596
+ while (!offsetPositions.empty && offsetPositions.first?.data !== startList) {
595
597
  offsetPositions.shift();
596
598
  }
597
599
  } else {
598
- while (!offsetPositions.empty && offsetPositions.last !== startNode) {
600
+ while (!offsetPositions.empty && offsetPositions.last?.data !== startList) {
599
601
  offsetPositions.pop();
600
602
  }
601
603
  }
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { assert } from "@fluidframework/core-utils/internal";
6
+ import { assert, fail } from "@fluidframework/core-utils/internal";
7
7
 
8
8
  import type { MergeTree } from "./mergeTree.js";
9
9
  import {
@@ -1179,7 +1179,7 @@ function verifyPartialLengthsInner(
1179
1179
  } else {
1180
1180
  // Len adjustment should not make length negative
1181
1181
  if (partialSeqLengths["minLength"] + partialLength.len < 0) {
1182
- assert(false, 0x057 /* "Negative length after length adjustment!" */);
1182
+ fail(0x057 /* "Negative length after length adjustment!" */);
1183
1183
  }
1184
1184
  }
1185
1185
  }
@@ -77,17 +77,21 @@ export class SortedSegmentSet<
77
77
  protected onFindEquivalent(item: T, startIndex: number): { exists: boolean; index: number } {
78
78
  // SortedSegmentSet may contain multiple items with the same key (e.g. a local ref at offset 0 and the segment it is on).
79
79
  // Items should compare as reference-equal, so we do a linear walk to find the actual item in this case.
80
- let index = startIndex;
81
- if (item === this.sortedItems[index]) {
82
- return { exists: true, index };
80
+ if (item === this.sortedItems[startIndex]) {
81
+ return { exists: true, index: startIndex };
83
82
  }
84
- for (let b = index - 1; b >= 0 && this.compare(item, this.sortedItems[b]) === 0; b--) {
83
+ for (
84
+ let b = startIndex - 1;
85
+ b >= 0 && this.compare(item, this.sortedItems[b]) === 0;
86
+ b--
87
+ ) {
85
88
  if (this.sortedItems[b] === item) {
86
89
  return { exists: true, index: b };
87
90
  }
88
91
  }
92
+ let index = startIndex + 1;
89
93
  for (
90
- index + 1;
94
+ ;
91
95
  index < this.sortedItems.length && this.compare(item, this.sortedItems[index]) === 0;
92
96
  index++
93
97
  ) {