@fluidframework/merge-tree 1.2.1 → 2.0.0-internal.1.0.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 (231) hide show
  1. package/DEV.md +2 -2
  2. package/README.md +1 -1
  3. package/REFERENCEPOSITIONS.md +2 -2
  4. package/dist/MergeTreeTextHelper.d.ts +23 -0
  5. package/dist/MergeTreeTextHelper.d.ts.map +1 -0
  6. package/dist/MergeTreeTextHelper.js +136 -0
  7. package/dist/MergeTreeTextHelper.js.map +1 -0
  8. package/dist/base.d.ts +2 -26
  9. package/dist/base.d.ts.map +1 -1
  10. package/dist/base.js.map +1 -1
  11. package/dist/client.d.ts +21 -12
  12. package/dist/client.d.ts.map +1 -1
  13. package/dist/client.js +87 -27
  14. package/dist/client.js.map +1 -1
  15. package/dist/collections/heap.d.ts +28 -0
  16. package/dist/collections/heap.d.ts.map +1 -0
  17. package/dist/collections/heap.js +65 -0
  18. package/dist/collections/heap.js.map +1 -0
  19. package/dist/collections/index.d.ts +11 -0
  20. package/dist/collections/index.d.ts.map +1 -0
  21. package/dist/collections/index.js +23 -0
  22. package/dist/collections/index.js.map +1 -0
  23. package/dist/collections/intervalTree.d.ts +60 -0
  24. package/dist/collections/intervalTree.d.ts.map +1 -0
  25. package/dist/collections/intervalTree.js +99 -0
  26. package/dist/collections/intervalTree.js.map +1 -0
  27. package/dist/collections/list.d.ts +39 -0
  28. package/dist/collections/list.d.ts.map +1 -0
  29. package/dist/collections/list.js +155 -0
  30. package/dist/collections/list.js.map +1 -0
  31. package/dist/collections/rbTree.d.ts +154 -0
  32. package/dist/collections/rbTree.d.ts.map +1 -0
  33. package/dist/{collections.js → collections/rbTree.js} +10 -448
  34. package/dist/collections/rbTree.js.map +1 -0
  35. package/dist/collections/stack.d.ts +16 -0
  36. package/dist/collections/stack.d.ts.map +1 -0
  37. package/dist/collections/stack.js +30 -0
  38. package/dist/collections/stack.js.map +1 -0
  39. package/dist/collections/tst.d.ts +55 -0
  40. package/dist/collections/tst.d.ts.map +1 -0
  41. package/dist/collections/tst.js +171 -0
  42. package/dist/collections/tst.js.map +1 -0
  43. package/dist/index.d.ts +3 -1
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +4 -2
  46. package/dist/index.js.map +1 -1
  47. package/dist/localReference.d.ts +48 -99
  48. package/dist/localReference.d.ts.map +1 -1
  49. package/dist/localReference.js +132 -169
  50. package/dist/localReference.js.map +1 -1
  51. package/dist/mergeTree.d.ts +38 -299
  52. package/dist/mergeTree.d.ts.map +1 -1
  53. package/dist/mergeTree.js +214 -598
  54. package/dist/mergeTree.js.map +1 -1
  55. package/dist/mergeTreeDeltaCallback.d.ts +1 -1
  56. package/dist/mergeTreeDeltaCallback.d.ts.map +1 -1
  57. package/dist/mergeTreeDeltaCallback.js.map +1 -1
  58. package/dist/mergeTreeNodes.d.ts +269 -0
  59. package/dist/mergeTreeNodes.d.ts.map +1 -0
  60. package/dist/mergeTreeNodes.js +383 -0
  61. package/dist/mergeTreeNodes.js.map +1 -0
  62. package/dist/mergeTreeTracking.d.ts +1 -1
  63. package/dist/mergeTreeTracking.d.ts.map +1 -1
  64. package/dist/mergeTreeTracking.js.map +1 -1
  65. package/dist/opBuilder.d.ts +1 -1
  66. package/dist/opBuilder.d.ts.map +1 -1
  67. package/dist/opBuilder.js.map +1 -1
  68. package/dist/partialLengths.d.ts +130 -15
  69. package/dist/partialLengths.d.ts.map +1 -1
  70. package/dist/partialLengths.js +230 -138
  71. package/dist/partialLengths.js.map +1 -1
  72. package/dist/properties.d.ts.map +1 -1
  73. package/dist/properties.js.map +1 -1
  74. package/dist/referencePositions.d.ts +6 -26
  75. package/dist/referencePositions.d.ts.map +1 -1
  76. package/dist/referencePositions.js.map +1 -1
  77. package/dist/segmentGroupCollection.d.ts +2 -1
  78. package/dist/segmentGroupCollection.d.ts.map +1 -1
  79. package/dist/segmentGroupCollection.js +3 -0
  80. package/dist/segmentGroupCollection.js.map +1 -1
  81. package/dist/segmentPropertiesManager.d.ts +10 -1
  82. package/dist/segmentPropertiesManager.d.ts.map +1 -1
  83. package/dist/segmentPropertiesManager.js +41 -6
  84. package/dist/segmentPropertiesManager.js.map +1 -1
  85. package/dist/snapshotLoader.d.ts.map +1 -1
  86. package/dist/snapshotLoader.js.map +1 -1
  87. package/dist/snapshotV1.d.ts +1 -1
  88. package/dist/snapshotV1.d.ts.map +1 -1
  89. package/dist/snapshotV1.js.map +1 -1
  90. package/dist/snapshotlegacy.d.ts +5 -1
  91. package/dist/snapshotlegacy.d.ts.map +1 -1
  92. package/dist/snapshotlegacy.js +4 -0
  93. package/dist/snapshotlegacy.js.map +1 -1
  94. package/dist/sortedSegmentSet.d.ts +1 -1
  95. package/dist/sortedSegmentSet.d.ts.map +1 -1
  96. package/dist/sortedSegmentSet.js.map +1 -1
  97. package/dist/textSegment.d.ts +7 -7
  98. package/dist/textSegment.d.ts.map +1 -1
  99. package/dist/textSegment.js +3 -125
  100. package/dist/textSegment.js.map +1 -1
  101. package/lib/MergeTreeTextHelper.d.ts +23 -0
  102. package/lib/MergeTreeTextHelper.d.ts.map +1 -0
  103. package/lib/MergeTreeTextHelper.js +132 -0
  104. package/lib/MergeTreeTextHelper.js.map +1 -0
  105. package/lib/base.d.ts +2 -26
  106. package/lib/base.d.ts.map +1 -1
  107. package/lib/base.js.map +1 -1
  108. package/lib/client.d.ts +21 -12
  109. package/lib/client.d.ts.map +1 -1
  110. package/lib/client.js +85 -25
  111. package/lib/client.js.map +1 -1
  112. package/lib/collections/heap.d.ts +28 -0
  113. package/lib/collections/heap.d.ts.map +1 -0
  114. package/lib/collections/heap.js +61 -0
  115. package/lib/collections/heap.js.map +1 -0
  116. package/lib/collections/index.d.ts +11 -0
  117. package/lib/collections/index.d.ts.map +1 -0
  118. package/lib/collections/index.js +11 -0
  119. package/lib/collections/index.js.map +1 -0
  120. package/lib/collections/intervalTree.d.ts +60 -0
  121. package/lib/collections/intervalTree.d.ts.map +1 -0
  122. package/lib/collections/intervalTree.js +94 -0
  123. package/lib/collections/intervalTree.js.map +1 -0
  124. package/lib/collections/list.d.ts +39 -0
  125. package/lib/collections/list.d.ts.map +1 -0
  126. package/lib/collections/list.js +149 -0
  127. package/lib/collections/list.js.map +1 -0
  128. package/lib/collections/rbTree.d.ts +154 -0
  129. package/lib/collections/rbTree.d.ts.map +1 -0
  130. package/lib/{collections.js → collections/rbTree.js} +9 -439
  131. package/lib/collections/rbTree.js.map +1 -0
  132. package/lib/collections/stack.d.ts +16 -0
  133. package/lib/collections/stack.d.ts.map +1 -0
  134. package/lib/collections/stack.js +26 -0
  135. package/lib/collections/stack.js.map +1 -0
  136. package/lib/collections/tst.d.ts +55 -0
  137. package/lib/collections/tst.d.ts.map +1 -0
  138. package/lib/collections/tst.js +167 -0
  139. package/lib/collections/tst.js.map +1 -0
  140. package/lib/index.d.ts +3 -1
  141. package/lib/index.d.ts.map +1 -1
  142. package/lib/index.js +3 -1
  143. package/lib/index.js.map +1 -1
  144. package/lib/localReference.d.ts +48 -99
  145. package/lib/localReference.d.ts.map +1 -1
  146. package/lib/localReference.js +132 -170
  147. package/lib/localReference.js.map +1 -1
  148. package/lib/mergeTree.d.ts +38 -299
  149. package/lib/mergeTree.d.ts.map +1 -1
  150. package/lib/mergeTree.js +190 -563
  151. package/lib/mergeTree.js.map +1 -1
  152. package/lib/mergeTreeDeltaCallback.d.ts +1 -1
  153. package/lib/mergeTreeDeltaCallback.d.ts.map +1 -1
  154. package/lib/mergeTreeDeltaCallback.js.map +1 -1
  155. package/lib/mergeTreeNodes.d.ts +269 -0
  156. package/lib/mergeTreeNodes.d.ts.map +1 -0
  157. package/lib/mergeTreeNodes.js +369 -0
  158. package/lib/mergeTreeNodes.js.map +1 -0
  159. package/lib/mergeTreeTracking.d.ts +1 -1
  160. package/lib/mergeTreeTracking.d.ts.map +1 -1
  161. package/lib/mergeTreeTracking.js.map +1 -1
  162. package/lib/opBuilder.d.ts +1 -1
  163. package/lib/opBuilder.d.ts.map +1 -1
  164. package/lib/opBuilder.js.map +1 -1
  165. package/lib/partialLengths.d.ts +130 -15
  166. package/lib/partialLengths.d.ts.map +1 -1
  167. package/lib/partialLengths.js +227 -135
  168. package/lib/partialLengths.js.map +1 -1
  169. package/lib/properties.d.ts.map +1 -1
  170. package/lib/properties.js.map +1 -1
  171. package/lib/referencePositions.d.ts +6 -26
  172. package/lib/referencePositions.d.ts.map +1 -1
  173. package/lib/referencePositions.js.map +1 -1
  174. package/lib/segmentGroupCollection.d.ts +2 -1
  175. package/lib/segmentGroupCollection.d.ts.map +1 -1
  176. package/lib/segmentGroupCollection.js +3 -0
  177. package/lib/segmentGroupCollection.js.map +1 -1
  178. package/lib/segmentPropertiesManager.d.ts +10 -1
  179. package/lib/segmentPropertiesManager.d.ts.map +1 -1
  180. package/lib/segmentPropertiesManager.js +41 -6
  181. package/lib/segmentPropertiesManager.js.map +1 -1
  182. package/lib/snapshotLoader.d.ts.map +1 -1
  183. package/lib/snapshotLoader.js.map +1 -1
  184. package/lib/snapshotV1.d.ts +1 -1
  185. package/lib/snapshotV1.d.ts.map +1 -1
  186. package/lib/snapshotV1.js.map +1 -1
  187. package/lib/snapshotlegacy.d.ts +5 -1
  188. package/lib/snapshotlegacy.d.ts.map +1 -1
  189. package/lib/snapshotlegacy.js +4 -0
  190. package/lib/snapshotlegacy.js.map +1 -1
  191. package/lib/sortedSegmentSet.d.ts +1 -1
  192. package/lib/sortedSegmentSet.d.ts.map +1 -1
  193. package/lib/sortedSegmentSet.js.map +1 -1
  194. package/lib/textSegment.d.ts +7 -7
  195. package/lib/textSegment.d.ts.map +1 -1
  196. package/lib/textSegment.js +1 -122
  197. package/lib/textSegment.js.map +1 -1
  198. package/package.json +93 -17
  199. package/src/MergeTreeTextHelper.ts +172 -0
  200. package/src/base.ts +2 -35
  201. package/src/client.ts +114 -30
  202. package/src/collections/heap.ts +75 -0
  203. package/src/collections/index.ts +11 -0
  204. package/src/collections/intervalTree.ts +140 -0
  205. package/src/collections/list.ts +165 -0
  206. package/src/{collections.ts → collections/rbTree.ts} +79 -538
  207. package/src/collections/stack.ts +27 -0
  208. package/src/collections/tst.ts +212 -0
  209. package/src/index.ts +8 -2
  210. package/src/localReference.ts +152 -203
  211. package/src/mergeTree.ts +265 -868
  212. package/src/mergeTreeDeltaCallback.ts +1 -1
  213. package/src/mergeTreeNodes.ts +676 -0
  214. package/src/mergeTreeTracking.ts +1 -1
  215. package/src/opBuilder.ts +1 -1
  216. package/src/partialLengths.ts +295 -150
  217. package/src/properties.ts +1 -0
  218. package/src/referencePositions.ts +7 -27
  219. package/src/segmentGroupCollection.ts +5 -1
  220. package/src/segmentPropertiesManager.ts +45 -6
  221. package/src/snapshotLoader.ts +2 -1
  222. package/src/snapshotV1.ts +2 -2
  223. package/src/snapshotlegacy.ts +6 -2
  224. package/src/sortedSegmentSet.ts +1 -1
  225. package/src/textSegment.ts +10 -157
  226. package/dist/collections.d.ts +0 -197
  227. package/dist/collections.d.ts.map +0 -1
  228. package/dist/collections.js.map +0 -1
  229. package/lib/collections.d.ts +0 -197
  230. package/lib/collections.d.ts.map +0 -1
  231. package/lib/collections.js.map +0 -1
@@ -0,0 +1,11 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ export * from "./heap";
7
+ export * from "./intervalTree";
8
+ export * from "./list";
9
+ export * from "./rbTree";
10
+ export * from "./stack";
11
+ export * from "./tst";
@@ -0,0 +1,140 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
7
+ import {
8
+ IIntegerRange,
9
+ } from "../base";
10
+ import { ConflictAction, IRBAugmentation, IRBMatcher, RBNode, RBNodeActions, RedBlackTree } from "./rbTree";
11
+
12
+ /**
13
+ * @deprecated for internal use only. public export will be removed.
14
+ * @internal
15
+ */
16
+ export interface AugmentedIntervalNode {
17
+ minmax: IInterval;
18
+ }
19
+
20
+ /**
21
+ * @deprecated for internal use only. public export will be removed.
22
+ * @internal
23
+ */
24
+ export const integerRangeToString = (range: IIntegerRange) => `[${range.start},${range.end})`;
25
+
26
+ /**
27
+ * @deprecated for internal use only. public export will be removed.
28
+ * @internal
29
+ */
30
+ export interface IInterval {
31
+ clone(): IInterval;
32
+ compare(b: IInterval): number;
33
+ compareStart(b: IInterval): number;
34
+ compareEnd(b: IInterval): number;
35
+ modify(label: string, start: number, end: number, op?: ISequencedDocumentMessage): IInterval | undefined;
36
+ overlaps(b: IInterval): boolean;
37
+ union(b: IInterval): IInterval;
38
+ }
39
+
40
+ const intervalComparer = (a: IInterval, b: IInterval) => a.compare(b);
41
+ /**
42
+ * @deprecated for internal use only. public export will be removed.
43
+ * @internal
44
+ */
45
+ export type IntervalNode<T extends IInterval> = RBNode<T, AugmentedIntervalNode>;
46
+ /**
47
+ * @deprecated for internal use only. public export will be removed.
48
+ * @internal
49
+ */
50
+ export type IntervalConflictResolver<TInterval> = (a: TInterval, b: TInterval) => TInterval;
51
+
52
+ /**
53
+ * @deprecated for internal use only. public export will be removed.
54
+ * @internal
55
+ */
56
+ export class IntervalTree<T extends IInterval> implements IRBAugmentation<T, AugmentedIntervalNode>,
57
+ IRBMatcher<T, AugmentedIntervalNode> {
58
+ public intervals = new RedBlackTree<T, AugmentedIntervalNode>(intervalComparer, this);
59
+
60
+ public remove(x: T) {
61
+ this.intervals.remove(x);
62
+ }
63
+
64
+ public removeExisting(x: T) {
65
+ this.intervals.removeExisting(x);
66
+ }
67
+
68
+ public put(x: T, conflict?: IntervalConflictResolver<T>) {
69
+ let rbConflict: ConflictAction<T, AugmentedIntervalNode> | undefined;
70
+ if (conflict) {
71
+ rbConflict = (key: T, currentKey: T) => {
72
+ const ival = conflict(key, currentKey);
73
+ return {
74
+ key: ival,
75
+ };
76
+ };
77
+ }
78
+ this.intervals.put(x, { minmax: x.clone() }, rbConflict);
79
+ }
80
+
81
+ public map(fn: (x: T) => void) {
82
+ const actions: RBNodeActions<T, AugmentedIntervalNode> = {
83
+ infix: (node) => {
84
+ fn(node.key);
85
+ return true;
86
+ },
87
+ showStructure: true,
88
+ };
89
+ this.intervals.walk(actions);
90
+ }
91
+
92
+ public mapUntil(fn: (X: T) => boolean) {
93
+ const actions: RBNodeActions<T, AugmentedIntervalNode> = {
94
+ infix: (node) => {
95
+ return fn(node.key);
96
+ },
97
+ showStructure: true,
98
+ };
99
+ this.intervals.walk(actions);
100
+ }
101
+
102
+ public mapBackward(fn: (x: T) => void) {
103
+ const actions: RBNodeActions<T, AugmentedIntervalNode> = {
104
+ infix: (node) => {
105
+ fn(node.key);
106
+ return true;
107
+ },
108
+ showStructure: true,
109
+ };
110
+ this.intervals.walkBackward(actions);
111
+ }
112
+
113
+ // TODO: toString()
114
+ public match(x: T) {
115
+ return this.intervals.gather(x, this);
116
+ }
117
+
118
+ public matchNode(node: IntervalNode<T> | undefined, key: T) {
119
+ return !!node && node.key.overlaps(key);
120
+ }
121
+
122
+ public continueSubtree(node: IntervalNode<T> | undefined, key: T) {
123
+ return !!node && node.data.minmax.overlaps(key);
124
+ }
125
+
126
+ public update(node: IntervalNode<T>) {
127
+ if (node.left && node.right) {
128
+ node.data.minmax = node.key.union(
129
+ node.left.data.minmax.union(node.right.data.minmax));
130
+ } else {
131
+ if (node.left) {
132
+ node.data.minmax = node.key.union(node.left.data.minmax);
133
+ } else if (node.right) {
134
+ node.data.minmax = node.key.union(node.right.data.minmax);
135
+ } else {
136
+ node.data.minmax = node.key.clone();
137
+ }
138
+ }
139
+ }
140
+ }
@@ -0,0 +1,165 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ /**
7
+ * @deprecated for internal use only. public export will be removed.
8
+ * @internal
9
+ */
10
+ export function ListRemoveEntry<U>(entry: List<U>): List<U> | undefined {
11
+ if (entry === undefined) {
12
+ return undefined;
13
+ } else if (entry.isHead) {
14
+ return undefined;
15
+ } else {
16
+ entry.next.prev = entry.prev;
17
+ entry.prev.next = entry.next;
18
+ entry.next = deadhead;
19
+ entry.prev = deadhead;
20
+ }
21
+ return (entry);
22
+ }
23
+
24
+ function ListMakeEntry<U>(data: U): List<U> {
25
+ return new List<U>(false, data);
26
+ }
27
+
28
+ /**
29
+ * @deprecated for internal use only. public export will be removed.
30
+ * @internal
31
+ */
32
+ export function ListMakeHead<U>(): List<U> {
33
+ return new List<U>(true, undefined);
34
+ }
35
+
36
+ /**
37
+ * @deprecated for internal use only. public export will be removed.
38
+ * @internal
39
+ */
40
+ export class List<T> {
41
+ public next: List<T>;
42
+ public prev: List<T>;
43
+
44
+ constructor(public isHead: boolean, public data: T | undefined) {
45
+ this.prev = this;
46
+ this.next = this;
47
+ }
48
+
49
+ public clear(): void {
50
+ if (this.isHead) {
51
+ this.prev = this;
52
+ this.next = this;
53
+ }
54
+ }
55
+
56
+ private add(data: T): List<T> {
57
+ const entry = ListMakeEntry(data);
58
+ this.prev.next = entry;
59
+ entry.next = this;
60
+ entry.prev = this.prev;
61
+ this.prev = entry;
62
+ return (entry);
63
+ }
64
+
65
+ public dequeue(): T | undefined {
66
+ if (!this.empty()) {
67
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
68
+ const removedEntry = ListRemoveEntry(this.next)!;
69
+ return removedEntry.data;
70
+ }
71
+ }
72
+
73
+ public enqueue(data: T): List<T> {
74
+ return this.add(data);
75
+ }
76
+
77
+ public pop?(): T | undefined {
78
+ const removedEntry = ListRemoveEntry(this.prev);
79
+ return removedEntry ? removedEntry.data : undefined;
80
+ }
81
+
82
+ public walk(fn: (data: T, l: List<T>) => void): void {
83
+ for (let entry = this.next; !(entry.isHead); entry = entry.next) {
84
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
85
+ fn(entry.data!, entry);
86
+ }
87
+ }
88
+
89
+ public some(fn: (data: T, l: List<T>) => boolean, rev?: boolean): T[] {
90
+ const rtn: T[] = [];
91
+ const start = rev ? this.prev : this.next;
92
+ for (let entry = start; !(entry.isHead); entry = rev ? entry.prev : entry.next) {
93
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
94
+ const data = entry.data!;
95
+ if (fn(data, entry)) {
96
+ if (rev) {
97
+ // preserve list order when in reverse
98
+ rtn.unshift(data);
99
+ } else {
100
+ rtn.push(data);
101
+ }
102
+ }
103
+ }
104
+ return rtn;
105
+ }
106
+
107
+ public count(): number {
108
+ let entry: List<T>;
109
+ let i: number;
110
+
111
+ entry = this.next;
112
+ for (i = 0; !(entry.isHead); i++) {
113
+ entry = entry.next;
114
+ }
115
+ return (i);
116
+ }
117
+
118
+ public first(): T | undefined {
119
+ if (!this.empty()) {
120
+ return (this.next.data);
121
+ }
122
+ }
123
+
124
+ public last(): T | undefined {
125
+ if (!this.empty()) {
126
+ return (this.prev.data);
127
+ }
128
+ }
129
+
130
+ public empty(): boolean {
131
+ return (this.next === this);
132
+ }
133
+
134
+ public unshift(data: T): void {
135
+ const entry = ListMakeEntry(data);
136
+ entry.data = data;
137
+ entry.isHead = false;
138
+ entry.next = this.next;
139
+ entry.prev = this;
140
+ this.next = entry;
141
+ entry.next.prev = entry;
142
+ }
143
+
144
+ public [Symbol.iterator]() {
145
+ let node: List<T> | undefined = this.next;
146
+ const iterator: IterableIterator<T> = {
147
+ next(): IteratorResult<T> {
148
+ while (node && node.isHead === false) {
149
+ const value = node.data;
150
+ node = node.next;
151
+ if (value !== undefined) {
152
+ return { value, done: false };
153
+ }
154
+ }
155
+ return { value: undefined, done: true };
156
+ },
157
+ [Symbol.iterator]() {
158
+ return this;
159
+ },
160
+ };
161
+ return iterator;
162
+ }
163
+ }
164
+
165
+ const deadhead = ListMakeHead<any>();