@fluidframework/merge-tree 0.59.2001 → 0.59.3000
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.
- package/.eslintrc.js +0 -1
- package/dist/client.d.ts +15 -4
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +60 -34
- package/dist/client.js.map +1 -1
- package/dist/collections.d.ts +7 -1
- package/dist/collections.d.ts.map +1 -1
- package/dist/collections.js +27 -1
- package/dist/collections.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/localReference.d.ts +104 -10
- package/dist/localReference.d.ts.map +1 -1
- package/dist/localReference.js +152 -96
- package/dist/localReference.js.map +1 -1
- package/dist/mergeTree.d.ts +28 -21
- package/dist/mergeTree.d.ts.map +1 -1
- package/dist/mergeTree.js +100 -88
- package/dist/mergeTree.js.map +1 -1
- package/dist/partialLengths.js +10 -10
- package/dist/partialLengths.js.map +1 -1
- package/dist/referencePositions.d.ts +55 -0
- package/dist/referencePositions.d.ts.map +1 -0
- package/dist/referencePositions.js +93 -0
- package/dist/referencePositions.js.map +1 -0
- package/dist/segmentGroupCollection.js +1 -1
- package/dist/segmentGroupCollection.js.map +1 -1
- package/dist/segmentPropertiesManager.js +5 -5
- package/dist/segmentPropertiesManager.js.map +1 -1
- package/dist/snapshotChunks.js.map +1 -1
- package/dist/snapshotLoader.d.ts.map +1 -1
- package/dist/snapshotLoader.js +9 -9
- package/dist/snapshotLoader.js.map +1 -1
- package/dist/snapshotV1.js +7 -7
- package/dist/snapshotV1.js.map +1 -1
- package/dist/snapshotlegacy.js +6 -6
- package/dist/snapshotlegacy.js.map +1 -1
- package/dist/sortedSegmentSet.d.ts.map +1 -1
- package/dist/sortedSegmentSet.js +1 -1
- package/dist/sortedSegmentSet.js.map +1 -1
- package/dist/textSegment.js +3 -2
- package/dist/textSegment.js.map +1 -1
- package/lib/client.d.ts +15 -4
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +31 -5
- package/lib/client.js.map +1 -1
- package/lib/collections.d.ts +7 -1
- package/lib/collections.d.ts.map +1 -1
- package/lib/collections.js +26 -1
- package/lib/collections.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/localReference.d.ts +104 -10
- package/lib/localReference.d.ts.map +1 -1
- package/lib/localReference.js +146 -90
- package/lib/localReference.js.map +1 -1
- package/lib/mergeTree.d.ts +28 -21
- package/lib/mergeTree.d.ts.map +1 -1
- package/lib/mergeTree.js +67 -51
- package/lib/mergeTree.js.map +1 -1
- package/lib/referencePositions.d.ts +55 -0
- package/lib/referencePositions.d.ts.map +1 -0
- package/lib/referencePositions.js +80 -0
- package/lib/referencePositions.js.map +1 -0
- package/lib/segmentPropertiesManager.js.map +1 -1
- package/lib/snapshotChunks.js.map +1 -1
- package/lib/snapshotLoader.d.ts.map +1 -1
- package/lib/snapshotLoader.js.map +1 -1
- package/lib/snapshotV1.js.map +1 -1
- package/lib/snapshotlegacy.js +1 -1
- package/lib/snapshotlegacy.js.map +1 -1
- package/lib/sortedSegmentSet.d.ts.map +1 -1
- package/lib/sortedSegmentSet.js +1 -1
- package/lib/sortedSegmentSet.js.map +1 -1
- package/lib/textSegment.js +3 -2
- package/lib/textSegment.js.map +1 -1
- package/package.json +161 -14
- package/src/client.ts +45 -19
- package/src/collections.ts +55 -54
- package/src/index.ts +1 -0
- package/src/localReference.ts +190 -100
- package/src/mergeTree.ts +107 -99
- package/src/referencePositions.ts +126 -0
- package/src/snapshotChunks.ts +8 -8
- package/src/snapshotLoader.ts +4 -4
- package/src/snapshotV1.ts +1 -1
- package/src/snapshotlegacy.ts +2 -2
- package/src/sortedSegmentSet.ts +4 -4
- package/src/textSegment.ts +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localReference.d.ts","sourceRoot":"","sources":["../src/localReference.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EACH,QAAQ,
|
|
1
|
+
{"version":3,"file":"localReference.d.ts","sourceRoot":"","sources":["../src/localReference.ts"],"names":[],"mappings":"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"}
|
package/lib/localReference.js
CHANGED
|
@@ -3,70 +3,85 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
import { assert } from "@fluidframework/common-utils";
|
|
6
|
-
import {
|
|
6
|
+
import { ListMakeHead, ListRemoveEntry } from "./collections";
|
|
7
7
|
import { ReferenceType } from "./ops";
|
|
8
8
|
import { addProperties } from "./properties";
|
|
9
|
+
import { minReferencePosition, maxReferencePosition, compareReferencePositions, refHasTileLabels, refHasRangeLabels, refGetRangeLabels, refGetTileLabels, refHasRangeLabel, refHasTileLabel, refTypeIncludesFlag, } from "./referencePositions";
|
|
10
|
+
/**
|
|
11
|
+
* @deprecated - Use ReferencePosition
|
|
12
|
+
*/
|
|
9
13
|
export class LocalReference {
|
|
10
|
-
|
|
14
|
+
/**
|
|
15
|
+
* @deprecated - use createReferencePosition
|
|
16
|
+
*/
|
|
17
|
+
constructor(client, initSegment,
|
|
18
|
+
/**
|
|
19
|
+
* @deprecated - use getOffset
|
|
20
|
+
*/
|
|
21
|
+
offset = 0, refType = ReferenceType.Simple, properties) {
|
|
11
22
|
this.client = client;
|
|
12
23
|
this.offset = offset;
|
|
13
24
|
this.refType = refType;
|
|
14
25
|
this.segment = initSegment;
|
|
26
|
+
this.properties = properties;
|
|
15
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* @deprecated - use minReferencePosition
|
|
30
|
+
*/
|
|
16
31
|
min(b) {
|
|
17
|
-
|
|
18
|
-
return this;
|
|
19
|
-
}
|
|
20
|
-
else {
|
|
21
|
-
return b;
|
|
22
|
-
}
|
|
32
|
+
return minReferencePosition(this, b);
|
|
23
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* @deprecated - use maxReferencePosition
|
|
36
|
+
*/
|
|
24
37
|
max(b) {
|
|
25
|
-
|
|
26
|
-
return this;
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
return b;
|
|
30
|
-
}
|
|
38
|
+
return maxReferencePosition(this, b);
|
|
31
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* @deprecated - use compareReferencePositions
|
|
42
|
+
*/
|
|
32
43
|
compare(b) {
|
|
33
|
-
|
|
34
|
-
return this.offset - b.offset;
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
if (this.segment === undefined
|
|
38
|
-
|| (b.segment !== undefined &&
|
|
39
|
-
this.segment.ordinal < b.segment.ordinal)) {
|
|
40
|
-
return -1;
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
return 1;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
44
|
+
return compareReferencePositions(this, b);
|
|
46
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* @deprecated - use getLocalReferencePosition
|
|
48
|
+
*/
|
|
47
49
|
toPosition() {
|
|
48
|
-
|
|
49
|
-
return this.getOffset() + this.client.getPosition(this.segment);
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
return LocalReference.DetachedPosition;
|
|
53
|
-
}
|
|
50
|
+
return this.getClient().localReferencePositionToPosition(this);
|
|
54
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* @deprecated - use refHasTileLabels
|
|
54
|
+
*/
|
|
55
55
|
hasTileLabels() {
|
|
56
|
-
return
|
|
56
|
+
return refHasTileLabels(this);
|
|
57
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* @deprecated - use refHasRangeLabels
|
|
60
|
+
*/
|
|
58
61
|
hasRangeLabels() {
|
|
59
|
-
return
|
|
62
|
+
return refHasRangeLabels(this);
|
|
60
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* @deprecated - use refHasTileLabel
|
|
66
|
+
*/
|
|
61
67
|
hasTileLabel(label) {
|
|
62
68
|
return refHasTileLabel(this, label);
|
|
63
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* @deprecated - use refHasRangeLabel
|
|
72
|
+
*/
|
|
64
73
|
hasRangeLabel(label) {
|
|
65
74
|
return refHasRangeLabel(this, label);
|
|
66
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* @deprecated - use refGetTileLabels
|
|
78
|
+
*/
|
|
67
79
|
getTileLabels() {
|
|
68
80
|
return refGetTileLabels(this);
|
|
69
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* @deprecated - use refGetRangeLabels
|
|
84
|
+
*/
|
|
70
85
|
getRangeLabels() {
|
|
71
86
|
return refGetRangeLabels(this);
|
|
72
87
|
}
|
|
@@ -76,6 +91,9 @@ export class LocalReference {
|
|
|
76
91
|
addProperties(newProps, op) {
|
|
77
92
|
this.properties = addProperties(this.properties, newProps, op);
|
|
78
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* @deprecated - no longer supported
|
|
96
|
+
*/
|
|
79
97
|
getClient() {
|
|
80
98
|
return this.client;
|
|
81
99
|
}
|
|
@@ -93,15 +111,29 @@ export class LocalReference {
|
|
|
93
111
|
return this.properties;
|
|
94
112
|
}
|
|
95
113
|
}
|
|
114
|
+
/**
|
|
115
|
+
* @deprecated - use DetachedReferencePosition
|
|
116
|
+
*/
|
|
96
117
|
LocalReference.DetachedPosition = -1;
|
|
118
|
+
function assertLocalReferences(lref) {
|
|
119
|
+
assert(lref instanceof LocalReference, 0x2e0 /* "lref not a Local Reference" */);
|
|
120
|
+
}
|
|
97
121
|
/**
|
|
98
|
-
* Represents a collection of {@link
|
|
122
|
+
* Represents a collection of {@link ReferencePosition}s associated with one segment in a merge-tree.
|
|
99
123
|
*/
|
|
100
124
|
export class LocalReferenceCollection {
|
|
125
|
+
/**
|
|
126
|
+
*
|
|
127
|
+
* @internal - this method should only be called by mergeTree
|
|
128
|
+
*/
|
|
101
129
|
constructor(
|
|
102
130
|
/** Segment this `LocalReferenceCollection` is associated to. */
|
|
103
131
|
segment, initialRefsByfOffset = new Array(segment.cachedLength)) {
|
|
104
132
|
this.segment = segment;
|
|
133
|
+
/**
|
|
134
|
+
*
|
|
135
|
+
* @internal - this method should only be called by mergeTree
|
|
136
|
+
*/
|
|
105
137
|
this.hierRefCount = 0;
|
|
106
138
|
this.refCount = 0;
|
|
107
139
|
// Since javascript arrays are sparse the above won't populate any of the
|
|
@@ -123,6 +155,10 @@ export class LocalReferenceCollection {
|
|
|
123
155
|
seg1.localRefs.refsByOffset.length += seg2.cachedLength;
|
|
124
156
|
}
|
|
125
157
|
}
|
|
158
|
+
/**
|
|
159
|
+
*
|
|
160
|
+
* @internal - this method should only be called by mergeTree
|
|
161
|
+
*/
|
|
126
162
|
[Symbol.iterator]() {
|
|
127
163
|
const subiterators = [];
|
|
128
164
|
for (const refs of this.refsByOffset) {
|
|
@@ -157,16 +193,20 @@ export class LocalReferenceCollection {
|
|
|
157
193
|
};
|
|
158
194
|
return iterator;
|
|
159
195
|
}
|
|
196
|
+
/**
|
|
197
|
+
*
|
|
198
|
+
* @internal - this method should only be called by mergeTree
|
|
199
|
+
*/
|
|
160
200
|
clear() {
|
|
161
201
|
this.refCount = 0;
|
|
162
202
|
this.hierRefCount = 0;
|
|
163
203
|
const detachSegments = (refs) => {
|
|
164
204
|
if (refs) {
|
|
165
|
-
|
|
205
|
+
for (const r of refs) {
|
|
166
206
|
if (r.segment === this.segment) {
|
|
167
207
|
r.segment = undefined;
|
|
168
208
|
}
|
|
169
|
-
}
|
|
209
|
+
}
|
|
170
210
|
}
|
|
171
211
|
};
|
|
172
212
|
for (let i = 0; i < this.refsByOffset.length; i++) {
|
|
@@ -179,40 +219,62 @@ export class LocalReferenceCollection {
|
|
|
179
219
|
}
|
|
180
220
|
}
|
|
181
221
|
}
|
|
222
|
+
/**
|
|
223
|
+
*
|
|
224
|
+
* @internal - this method should only be called by mergeTree
|
|
225
|
+
*/
|
|
182
226
|
get empty() {
|
|
183
227
|
return this.refCount === 0;
|
|
184
228
|
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
194
|
-
this.refsByOffset[lref.offset].at = [lref];
|
|
195
|
-
}
|
|
196
|
-
else {
|
|
197
|
-
refsAtOffset.at.push(lref);
|
|
229
|
+
/**
|
|
230
|
+
*
|
|
231
|
+
* @internal - this method should only be called by mergeTree
|
|
232
|
+
*/
|
|
233
|
+
createLocalRef(offset, refType, properties, client) {
|
|
234
|
+
const ref = new LocalReference(client, this.segment, offset, refType, properties);
|
|
235
|
+
if (!refTypeIncludesFlag(ref, ReferenceType.Transient)) {
|
|
236
|
+
this.addLocalRef(ref);
|
|
198
237
|
}
|
|
199
|
-
|
|
238
|
+
return ref;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
*
|
|
242
|
+
* @internal - this method should only be called by mergeTree
|
|
243
|
+
*/
|
|
244
|
+
addLocalRef(lref) {
|
|
245
|
+
var _a, _b;
|
|
246
|
+
assert(!refTypeIncludesFlag(lref, ReferenceType.Transient), 0x2df /* "transient references cannot be bound to segments" */);
|
|
247
|
+
assertLocalReferences(lref);
|
|
248
|
+
const refsAtOffset = this.refsByOffset[lref.getOffset()] =
|
|
249
|
+
(_a = this.refsByOffset[lref.getOffset()]) !== null && _a !== void 0 ? _a : { at: ListMakeHead() };
|
|
250
|
+
const atRefs = refsAtOffset.at =
|
|
251
|
+
(_b = refsAtOffset.at) !== null && _b !== void 0 ? _b : ListMakeHead();
|
|
252
|
+
atRefs.enqueue(lref);
|
|
253
|
+
if (refHasRangeLabels(lref) || refHasTileLabels(lref)) {
|
|
200
254
|
this.hierRefCount++;
|
|
201
255
|
}
|
|
202
256
|
this.refCount++;
|
|
203
257
|
}
|
|
258
|
+
/**
|
|
259
|
+
*
|
|
260
|
+
* @internal - this method should only be called by mergeTree
|
|
261
|
+
*/
|
|
204
262
|
removeLocalRef(lref) {
|
|
263
|
+
assertLocalReferences(lref);
|
|
205
264
|
const tryRemoveRef = (refs) => {
|
|
206
265
|
if (refs) {
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
if (
|
|
211
|
-
|
|
266
|
+
let node = refs;
|
|
267
|
+
do {
|
|
268
|
+
node = node.next;
|
|
269
|
+
if (node.data === lref) {
|
|
270
|
+
ListRemoveEntry(node);
|
|
271
|
+
if (refHasRangeLabels(lref) || refHasTileLabels(lref)) {
|
|
272
|
+
this.hierRefCount--;
|
|
273
|
+
}
|
|
274
|
+
this.refCount--;
|
|
275
|
+
return lref;
|
|
212
276
|
}
|
|
213
|
-
|
|
214
|
-
return lref;
|
|
215
|
-
}
|
|
277
|
+
} while (!node.isHead);
|
|
216
278
|
}
|
|
217
279
|
};
|
|
218
280
|
const refAtOffset = this.refsByOffset[lref.offset];
|
|
@@ -232,6 +294,8 @@ export class LocalReferenceCollection {
|
|
|
232
294
|
}
|
|
233
295
|
}
|
|
234
296
|
/**
|
|
297
|
+
* @internal - this method should only be called by mergeTree
|
|
298
|
+
*
|
|
235
299
|
* Called by 'append()' implementations to append local refs from the given 'other' segment to the
|
|
236
300
|
* end of 'this' segment.
|
|
237
301
|
*
|
|
@@ -253,6 +317,8 @@ export class LocalReferenceCollection {
|
|
|
253
317
|
this.refsByOffset.push(...other.refsByOffset);
|
|
254
318
|
}
|
|
255
319
|
/**
|
|
320
|
+
* @internal - this method should only be called by mergeTree
|
|
321
|
+
*
|
|
256
322
|
* Splits this `LocalReferenceCollection` into the intervals [0, offset) and [offset, originalLength).
|
|
257
323
|
* Local references in the former half of this split will remain associated with the segment used on construction.
|
|
258
324
|
* Local references in the latter half of this split will be transferred to `splitSeg`,
|
|
@@ -268,7 +334,7 @@ export class LocalReferenceCollection {
|
|
|
268
334
|
for (const lref of localRefs) {
|
|
269
335
|
lref.segment = splitSeg;
|
|
270
336
|
lref.offset -= offset;
|
|
271
|
-
if (lref
|
|
337
|
+
if (refHasRangeLabels(lref) || refHasTileLabels(lref)) {
|
|
272
338
|
this.hierRefCount--;
|
|
273
339
|
localRefs.hierRefCount++;
|
|
274
340
|
}
|
|
@@ -282,15 +348,16 @@ export class LocalReferenceCollection {
|
|
|
282
348
|
}
|
|
283
349
|
}
|
|
284
350
|
addBeforeTombstones(...refs) {
|
|
285
|
-
|
|
351
|
+
var _a, _b, _c, _d, _e;
|
|
352
|
+
const beforeRefs = (_b = (_a = this.refsByOffset[0]) === null || _a === void 0 ? void 0 : _a.before) !== null && _b !== void 0 ? _b : ListMakeHead();
|
|
286
353
|
for (const iterable of refs) {
|
|
287
354
|
for (const lref of iterable) {
|
|
288
|
-
|
|
289
|
-
if (lref
|
|
355
|
+
assertLocalReferences(lref);
|
|
356
|
+
if (refTypeIncludesFlag(lref, ReferenceType.SlideOnRemove)) {
|
|
290
357
|
beforeRefs.push(lref);
|
|
291
358
|
lref.segment = this.segment;
|
|
292
359
|
lref.offset = 0;
|
|
293
|
-
if (lref
|
|
360
|
+
if (refHasRangeLabels(lref) || refHasTileLabels(lref)) {
|
|
294
361
|
this.hierRefCount++;
|
|
295
362
|
}
|
|
296
363
|
this.refCount++;
|
|
@@ -300,28 +367,24 @@ export class LocalReferenceCollection {
|
|
|
300
367
|
}
|
|
301
368
|
}
|
|
302
369
|
}
|
|
303
|
-
if (beforeRefs.
|
|
304
|
-
|
|
305
|
-
this.refsByOffset[0]
|
|
306
|
-
|
|
307
|
-
else if (this.refsByOffset[0].before === undefined) {
|
|
308
|
-
this.refsByOffset[0].before = beforeRefs;
|
|
309
|
-
}
|
|
310
|
-
else {
|
|
311
|
-
this.refsByOffset[0].before.unshift(...beforeRefs);
|
|
312
|
-
}
|
|
370
|
+
if (!beforeRefs.empty() && ((_c = this.refsByOffset[0]) === null || _c === void 0 ? void 0 : _c.before) === undefined) {
|
|
371
|
+
const refsAtOffset = this.refsByOffset[0] =
|
|
372
|
+
(_d = this.refsByOffset[0]) !== null && _d !== void 0 ? _d : { before: beforeRefs };
|
|
373
|
+
refsAtOffset.before = (_e = refsAtOffset.before) !== null && _e !== void 0 ? _e : beforeRefs;
|
|
313
374
|
}
|
|
314
375
|
}
|
|
315
376
|
addAfterTombstones(...refs) {
|
|
316
|
-
|
|
377
|
+
var _a, _b, _c, _d, _e;
|
|
378
|
+
const lastOffset = this.refsByOffset.length - 1;
|
|
379
|
+
const afterRefs = (_b = (_a = this.refsByOffset[lastOffset]) === null || _a === void 0 ? void 0 : _a.after) !== null && _b !== void 0 ? _b : ListMakeHead();
|
|
317
380
|
for (const iterable of refs) {
|
|
318
381
|
for (const lref of iterable) {
|
|
319
|
-
|
|
320
|
-
if (lref
|
|
382
|
+
assertLocalReferences(lref);
|
|
383
|
+
if (refTypeIncludesFlag(lref, ReferenceType.SlideOnRemove)) {
|
|
321
384
|
afterRefs.push(lref);
|
|
322
385
|
lref.segment = this.segment;
|
|
323
386
|
lref.offset = this.segment.cachedLength - 1;
|
|
324
|
-
if (lref
|
|
387
|
+
if (refHasRangeLabels(lref) || refHasTileLabels(lref)) {
|
|
325
388
|
this.hierRefCount++;
|
|
326
389
|
}
|
|
327
390
|
this.refCount++;
|
|
@@ -331,17 +394,10 @@ export class LocalReferenceCollection {
|
|
|
331
394
|
}
|
|
332
395
|
}
|
|
333
396
|
}
|
|
334
|
-
if (afterRefs.
|
|
335
|
-
const refsAtOffset = this.refsByOffset[
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
}
|
|
339
|
-
else if (refsAtOffset.after === undefined) {
|
|
340
|
-
refsAtOffset.after = afterRefs;
|
|
341
|
-
}
|
|
342
|
-
else {
|
|
343
|
-
refsAtOffset.after.push(...afterRefs);
|
|
344
|
-
}
|
|
397
|
+
if (!afterRefs.empty() && ((_c = this.refsByOffset[lastOffset]) === null || _c === void 0 ? void 0 : _c.after) === undefined) {
|
|
398
|
+
const refsAtOffset = this.refsByOffset[lastOffset] =
|
|
399
|
+
(_d = this.refsByOffset[lastOffset]) !== null && _d !== void 0 ? _d : { after: afterRefs };
|
|
400
|
+
refsAtOffset.after = (_e = refsAtOffset.after) !== null && _e !== void 0 ? _e : afterRefs;
|
|
345
401
|
}
|
|
346
402
|
}
|
|
347
403
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localReference.js","sourceRoot":"","sources":["../src/localReference.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/common-utils\";\nimport { Client } from \"./client\";\nimport {\n ISegment,\n ReferencePosition,\n refGetRangeLabels,\n refGetTileLabels,\n refHasRangeLabel,\n refHasTileLabel,\n} from \"./mergeTree\";\nimport { ICombiningOp, ReferenceType } from \"./ops\";\nimport { addProperties, PropertySet } from \"./properties\";\n\nexport class LocalReference implements ReferencePosition {\n public static readonly DetachedPosition: number = -1;\n\n public properties: PropertySet | undefined;\n public pairedRef?: LocalReference;\n public segment: ISegment | undefined;\n\n constructor(\n private readonly client: Client,\n initSegment: ISegment,\n public offset = 0,\n public refType = ReferenceType.Simple,\n ) {\n this.segment = initSegment;\n }\n\n public min(b: LocalReference) {\n if (this.compare(b) < 0) {\n return this;\n } else {\n return b;\n }\n }\n\n public max(b: LocalReference) {\n if (this.compare(b) > 0) {\n return this;\n } else {\n return b;\n }\n }\n\n public compare(b: LocalReference) {\n if (this.segment === b.segment) {\n return this.offset - b.offset;\n } else {\n if (this.segment === undefined\n || (b.segment !== undefined &&\n this.segment.ordinal < b.segment.ordinal)) {\n return -1;\n } else {\n return 1;\n }\n }\n }\n\n public toPosition() {\n if (this.segment && this.segment.parent) {\n return this.getOffset() + this.client.getPosition(this.segment);\n } else {\n return LocalReference.DetachedPosition;\n }\n }\n\n public hasTileLabels() {\n return !!this.getTileLabels();\n }\n\n public hasRangeLabels() {\n return !!this.getRangeLabels();\n }\n\n public hasTileLabel(label: string): boolean {\n return refHasTileLabel(this, label);\n }\n\n public hasRangeLabel(label: string): boolean {\n return refHasRangeLabel(this, label);\n }\n\n public getTileLabels(): string[] | undefined {\n return refGetTileLabels(this);\n }\n\n public getRangeLabels(): string[] | undefined {\n return refGetRangeLabels(this);\n }\n\n public isLeaf() {\n return false;\n }\n\n public addProperties(newProps: PropertySet, op?: ICombiningOp) {\n this.properties = addProperties(this.properties, newProps, op);\n }\n\n public getClient() {\n return this.client;\n }\n\n public getSegment() {\n return this.segment;\n }\n\n public getOffset() {\n if (this.segment?.removedSeq) {\n return 0;\n }\n return this.offset;\n }\n\n public getProperties() {\n return this.properties;\n }\n}\n\ninterface IRefsAtOffset {\n before?: LocalReference[];\n at?: LocalReference[];\n after?: LocalReference[];\n}\n\n/**\n * Represents a collection of {@link LocalReference}s associated with one segment in a merge-tree.\n */\nexport class LocalReferenceCollection {\n public static append(seg1: ISegment, seg2: ISegment) {\n if (seg2.localRefs && !seg2.localRefs.empty) {\n if (!seg1.localRefs) {\n seg1.localRefs = new LocalReferenceCollection(seg1);\n }\n assert(seg1.localRefs.refsByOffset.length === seg1.cachedLength,\n 0x2be /* \"LocalReferences array contains a gap\" */);\n seg1.localRefs.append(seg2.localRefs);\n }\n else if (seg1.localRefs) {\n // Since creating the LocalReferenceCollection, we may have appended\n // segments that had no local references. Account for them now by padding the array.\n seg1.localRefs.refsByOffset.length += seg2.cachedLength;\n }\n }\n\n public hierRefCount: number = 0;\n private readonly refsByOffset: (IRefsAtOffset | undefined)[];\n private refCount: number = 0;\n\n constructor(\n /** Segment this `LocalReferenceCollection` is associated to. */\n private readonly segment: ISegment,\n initialRefsByfOffset = new Array<IRefsAtOffset | undefined>(segment.cachedLength)) {\n // Since javascript arrays are sparse the above won't populate any of the\n // indices, but it will ensure the length property of the array matches\n // the length of the segment.\n this.refsByOffset = initialRefsByfOffset;\n }\n\n public [Symbol.iterator]() {\n const subiterators: IterableIterator<LocalReference>[] = [];\n for (const refs of this.refsByOffset) {\n if (refs) {\n if (refs.before) {\n subiterators.push(refs.before[Symbol.iterator]());\n }\n if (refs.at) {\n subiterators.push(refs.at[Symbol.iterator]());\n }\n if (refs.after) {\n subiterators.push(refs.after[Symbol.iterator]());\n }\n }\n }\n\n const iterator = {\n next(): IteratorResult<LocalReference> {\n while (subiterators.length > 0) {\n const next = subiterators[0].next();\n if (next.done === true) {\n subiterators.shift();\n } else {\n return next;\n }\n }\n\n return { value: undefined, done: true };\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n return iterator;\n }\n\n public clear() {\n this.refCount = 0;\n this.hierRefCount = 0;\n const detachSegments = (refs: LocalReference[] | undefined) => {\n if (refs) {\n refs.forEach((r) => {\n if (r.segment === this.segment) {\n r.segment = undefined;\n }\n });\n }\n };\n for (let i = 0; i < this.refsByOffset.length; i++) {\n const refsAtOffset = this.refsByOffset[i];\n if (refsAtOffset) {\n detachSegments(refsAtOffset.before);\n detachSegments(refsAtOffset.at);\n detachSegments(refsAtOffset.before);\n this.refsByOffset[i] = undefined;\n }\n }\n }\n\n public get empty() {\n return this.refCount === 0;\n }\n\n public addLocalRef(lref: LocalReference) {\n const refsAtOffset = this.refsByOffset[lref.offset];\n if (refsAtOffset === undefined) {\n this.refsByOffset[lref.offset] = {\n at: [lref],\n };\n } else if (refsAtOffset.at === undefined) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.refsByOffset[lref.offset]!.at = [lref];\n } else {\n refsAtOffset.at.push(lref);\n }\n\n if (lref.hasRangeLabels() || lref.hasTileLabels()) {\n this.hierRefCount++;\n }\n this.refCount++;\n }\n\n public removeLocalRef(lref: LocalReference) {\n const tryRemoveRef = (refs: LocalReference[] | undefined) => {\n if (refs) {\n const index = refs.indexOf(lref);\n if (index >= 0) {\n refs.splice(index, 1);\n if (lref.hasRangeLabels() || lref.hasTileLabels()) {\n this.hierRefCount--;\n }\n this.refCount--;\n return lref;\n }\n }\n };\n const refAtOffset = this.refsByOffset[lref.offset];\n if (refAtOffset !== undefined) {\n let ref = tryRemoveRef(refAtOffset.before);\n if (ref) {\n return ref;\n }\n\n ref = tryRemoveRef(refAtOffset.at);\n if (ref) {\n return ref;\n }\n\n ref = tryRemoveRef(refAtOffset.after);\n if (ref) {\n return ref;\n }\n }\n }\n\n /**\n * Called by 'append()' implementations to append local refs from the given 'other' segment to the\n * end of 'this' segment.\n *\n * Note: This method should be invoked after the caller has ensured that segments can be merged,\n * but before 'this' segment's cachedLength has changed, or the adjustment to the local refs\n * will be incorrect.\n */\n public append(other: LocalReferenceCollection) {\n if (!other || other.empty) {\n return;\n }\n this.hierRefCount += other.hierRefCount;\n this.refCount += other.refCount;\n other.hierRefCount = 0;\n for (const lref of other) {\n lref.segment = this.segment;\n lref.offset += this.refsByOffset.length;\n }\n\n this.refsByOffset.push(...other.refsByOffset);\n }\n\n /**\n * Splits this `LocalReferenceCollection` into the intervals [0, offset) and [offset, originalLength).\n * Local references in the former half of this split will remain associated with the segment used on construction.\n * Local references in the latter half of this split will be transferred to `splitSeg`,\n * and its `localRefs` field will be set.\n * @param offset - Offset into the original segment at which the collection should be split\n * @param splitSeg - Split segment which originally corresponded to the indices [offset, originalLength)\n * before splitting.\n */\n public split(offset: number, splitSeg: ISegment) {\n if (!this.empty) {\n const localRefs =\n new LocalReferenceCollection(\n splitSeg,\n this.refsByOffset.splice(offset, this.refsByOffset.length - offset));\n\n splitSeg.localRefs = localRefs;\n for (const lref of localRefs) {\n lref.segment = splitSeg;\n lref.offset -= offset;\n if (lref.hasRangeLabels() || lref.hasTileLabels()) {\n this.hierRefCount--;\n localRefs.hierRefCount++;\n }\n this.refCount--;\n localRefs.refCount++;\n }\n } else {\n // shrink the offset array when empty and splitting\n this.refsByOffset.length = offset;\n }\n }\n\n public addBeforeTombstones(...refs: Iterable<LocalReference>[]) {\n const beforeRefs: LocalReference[] = [];\n\n for (const iterable of refs) {\n for (const lref of iterable) {\n // eslint-disable-next-line no-bitwise\n if (lref.refType & ReferenceType.SlideOnRemove) {\n beforeRefs.push(lref);\n lref.segment = this.segment;\n lref.offset = 0;\n if (lref.hasRangeLabels() || lref.hasTileLabels()) {\n this.hierRefCount++;\n }\n this.refCount++;\n } else {\n lref.segment = undefined;\n }\n }\n }\n if (beforeRefs.length > 0) {\n if (this.refsByOffset[0] === undefined) {\n this.refsByOffset[0] = { before: beforeRefs };\n } else if (this.refsByOffset[0].before === undefined) {\n this.refsByOffset[0].before = beforeRefs;\n } else {\n this.refsByOffset[0].before.unshift(...beforeRefs);\n }\n }\n }\n\n public addAfterTombstones(...refs: Iterable<LocalReference>[]) {\n const afterRefs: LocalReference[] = [];\n\n for (const iterable of refs) {\n for (const lref of iterable) {\n // eslint-disable-next-line no-bitwise\n if (lref.refType & ReferenceType.SlideOnRemove) {\n afterRefs.push(lref);\n lref.segment = this.segment;\n lref.offset = this.segment.cachedLength - 1;\n if (lref.hasRangeLabels() || lref.hasTileLabels()) {\n this.hierRefCount++;\n }\n this.refCount++;\n } else {\n lref.segment = undefined;\n }\n }\n }\n if (afterRefs.length > 0) {\n const refsAtOffset = this.refsByOffset[this.segment.cachedLength - 1];\n if (refsAtOffset === undefined) {\n this.refsByOffset[this.segment.cachedLength - 1] = { after: afterRefs };\n } else if (refsAtOffset.after === undefined) {\n refsAtOffset.after = afterRefs;\n } else {\n refsAtOffset.after.push(...afterRefs);\n }\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"localReference.js","sourceRoot":"","sources":["../src/localReference.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/common-utils\";\nimport { Client } from \"./client\";\nimport { List, ListMakeHead, ListRemoveEntry } from \"./collections\";\nimport {\n ISegment,\n} from \"./mergeTree\";\nimport { ICombiningOp, ReferenceType } from \"./ops\";\nimport { addProperties, PropertySet } from \"./properties\";\nimport {\n minReferencePosition,\n maxReferencePosition,\n compareReferencePositions,\n refHasTileLabels,\n refHasRangeLabels,\n ReferencePosition,\n refGetRangeLabels,\n refGetTileLabels,\n refHasRangeLabel,\n refHasTileLabel,\n refTypeIncludesFlag,\n} from \"./referencePositions\";\n\n/**\n * @deprecated - Use ReferencePosition\n */\nexport class LocalReference implements ReferencePosition {\n /**\n * @deprecated - use DetachedReferencePosition\n */\n public static readonly DetachedPosition: number = -1;\n\n public properties: PropertySet | undefined;\n /**\n * @deprecated - use properties to store pair\n */\n public pairedRef?: LocalReference;\n /**\n * @deprecated - use getSegment\n */\n public segment: ISegment | undefined;\n\n /**\n * @deprecated - use createReferencePosition\n */\n constructor(\n private readonly client: Client,\n initSegment: ISegment,\n /**\n * @deprecated - use getOffset\n */\n public offset: number = 0,\n public refType = ReferenceType.Simple,\n properties?: PropertySet,\n ) {\n this.segment = initSegment;\n this.properties = properties;\n }\n\n /**\n * @deprecated - use minReferencePosition\n */\n public min(b: LocalReference) {\n return minReferencePosition(this, b);\n }\n /**\n * @deprecated - use maxReferencePosition\n */\n public max(b: LocalReference) {\n return maxReferencePosition(this, b);\n }\n /**\n * @deprecated - use compareReferencePositions\n */\n public compare(b: LocalReference) {\n return compareReferencePositions(this, b);\n }\n\n /**\n * @deprecated - use getLocalReferencePosition\n */\n public toPosition() {\n return this.getClient().localReferencePositionToPosition(this);\n }\n\n /**\n * @deprecated - use refHasTileLabels\n */\n public hasTileLabels(): boolean {\n return refHasTileLabels(this);\n }\n /**\n * @deprecated - use refHasRangeLabels\n */\n public hasRangeLabels(): boolean {\n return refHasRangeLabels(this);\n }\n /**\n * @deprecated - use refHasTileLabel\n */\n public hasTileLabel(label: string): boolean {\n return refHasTileLabel(this, label);\n }\n /**\n * @deprecated - use refHasRangeLabel\n */\n public hasRangeLabel(label: string): boolean {\n return refHasRangeLabel(this, label);\n }\n /**\n * @deprecated - use refGetTileLabels\n */\n public getTileLabels(): string[] | undefined {\n return refGetTileLabels(this);\n }\n /**\n * @deprecated - use refGetRangeLabels\n */\n public getRangeLabels(): string[] | undefined {\n return refGetRangeLabels(this);\n }\n\n public isLeaf() {\n return false;\n }\n\n public addProperties(newProps: PropertySet, op?: ICombiningOp) {\n this.properties = addProperties(this.properties, newProps, op);\n }\n\n /**\n * @deprecated - no longer supported\n */\n public getClient() {\n return this.client;\n }\n\n public getSegment() {\n return this.segment;\n }\n\n public getOffset() {\n if (this.segment?.removedSeq) {\n return 0;\n }\n return this.offset;\n }\n\n public getProperties() {\n return this.properties;\n }\n}\n\ninterface IRefsAtOffset {\n before?: List<LocalReference>;\n at?: List<LocalReference>;\n after?: List<LocalReference>;\n}\n\nfunction assertLocalReferences(lref: ReferencePosition | LocalReference): asserts lref is LocalReference {\n assert(lref instanceof LocalReference, 0x2e0 /* \"lref not a Local Reference\" */);\n}\n\n/**\n * Represents a collection of {@link ReferencePosition}s associated with one segment in a merge-tree.\n */\nexport class LocalReferenceCollection {\n public static append(seg1: ISegment, seg2: ISegment) {\n if (seg2.localRefs && !seg2.localRefs.empty) {\n if (!seg1.localRefs) {\n seg1.localRefs = new LocalReferenceCollection(seg1);\n }\n assert(seg1.localRefs.refsByOffset.length === seg1.cachedLength,\n 0x2be /* \"LocalReferences array contains a gap\" */);\n seg1.localRefs.append(seg2.localRefs);\n } else if (seg1.localRefs) {\n // Since creating the LocalReferenceCollection, we may have appended\n // segments that had no local references. Account for them now by padding the array.\n seg1.localRefs.refsByOffset.length += seg2.cachedLength;\n }\n }\n\n /**\n *\n * @internal - this method should only be called by mergeTree\n */\n public hierRefCount: number = 0;\n private readonly refsByOffset: (IRefsAtOffset | undefined)[];\n private refCount: number = 0;\n\n /**\n *\n * @internal - this method should only be called by mergeTree\n */\n constructor(\n /** Segment this `LocalReferenceCollection` is associated to. */\n private readonly segment: ISegment,\n initialRefsByfOffset = new Array<IRefsAtOffset | undefined>(segment.cachedLength)) {\n // Since javascript arrays are sparse the above won't populate any of the\n // indices, but it will ensure the length property of the array matches\n // the length of the segment.\n this.refsByOffset = initialRefsByfOffset;\n }\n\n /**\n *\n * @internal - this method should only be called by mergeTree\n */\n public [Symbol.iterator]() {\n const subiterators: IterableIterator<LocalReference>[] = [];\n for (const refs of this.refsByOffset) {\n if (refs) {\n if (refs.before) {\n subiterators.push(refs.before[Symbol.iterator]());\n }\n if (refs.at) {\n subiterators.push(refs.at[Symbol.iterator]());\n }\n if (refs.after) {\n subiterators.push(refs.after[Symbol.iterator]());\n }\n }\n }\n\n const iterator = {\n next(): IteratorResult<LocalReference> {\n while (subiterators.length > 0) {\n const next = subiterators[0].next();\n if (next.done === true) {\n subiterators.shift();\n } else {\n return next;\n }\n }\n\n return { value: undefined, done: true };\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n return iterator;\n }\n\n /**\n *\n * @internal - this method should only be called by mergeTree\n */\n public clear() {\n this.refCount = 0;\n this.hierRefCount = 0;\n const detachSegments = (refs: List<LocalReference> | undefined) => {\n if (refs) {\n for (const r of refs) {\n if (r.segment === this.segment) {\n r.segment = undefined;\n }\n }\n }\n };\n for (let i = 0; i < this.refsByOffset.length; i++) {\n const refsAtOffset = this.refsByOffset[i];\n if (refsAtOffset) {\n detachSegments(refsAtOffset.before);\n detachSegments(refsAtOffset.at);\n detachSegments(refsAtOffset.before);\n this.refsByOffset[i] = undefined;\n }\n }\n }\n\n /**\n *\n * @internal - this method should only be called by mergeTree\n */\n public get empty() {\n return this.refCount === 0;\n }\n\n /**\n *\n * @internal - this method should only be called by mergeTree\n */\n public createLocalRef(\n offset: number,\n refType: ReferenceType,\n properties: PropertySet | undefined,\n client: Client): ReferencePosition {\n const ref = new LocalReference(\n client,\n this.segment,\n offset,\n refType,\n properties,\n );\n if (!refTypeIncludesFlag(ref, ReferenceType.Transient)) {\n this.addLocalRef(ref);\n }\n return ref;\n }\n\n /**\n *\n * @internal - this method should only be called by mergeTree\n */\n public addLocalRef(lref: LocalReference | ReferencePosition) {\n assert(\n !refTypeIncludesFlag(lref, ReferenceType.Transient),\n 0x2df /* \"transient references cannot be bound to segments\" */);\n assertLocalReferences(lref);\n const refsAtOffset = this.refsByOffset[lref.getOffset()] =\n this.refsByOffset[lref.getOffset()]\n ?? { at: ListMakeHead() };\n const atRefs = refsAtOffset.at =\n refsAtOffset.at\n ?? ListMakeHead();\n\n atRefs.enqueue(lref);\n\n if (refHasRangeLabels(lref) || refHasTileLabels(lref)) {\n this.hierRefCount++;\n }\n this.refCount++;\n }\n\n /**\n *\n * @internal - this method should only be called by mergeTree\n */\n public removeLocalRef(lref: LocalReference | ReferencePosition) {\n assertLocalReferences(lref);\n const tryRemoveRef = (refs: List<LocalReference> | undefined) => {\n if (refs) {\n let node = refs;\n do {\n node = node.next;\n if (node.data === lref) {\n ListRemoveEntry(node);\n if (refHasRangeLabels(lref) || refHasTileLabels(lref)) {\n this.hierRefCount--;\n }\n this.refCount--;\n return lref;\n }\n } while (!node.isHead);\n }\n };\n const refAtOffset = this.refsByOffset[lref.offset];\n if (refAtOffset !== undefined) {\n let ref = tryRemoveRef(refAtOffset.before);\n if (ref) {\n return ref;\n }\n\n ref = tryRemoveRef(refAtOffset.at);\n if (ref) {\n return ref;\n }\n\n ref = tryRemoveRef(refAtOffset.after);\n if (ref) {\n return ref;\n }\n }\n }\n\n /**\n * @internal - this method should only be called by mergeTree\n *\n * Called by 'append()' implementations to append local refs from the given 'other' segment to the\n * end of 'this' segment.\n *\n * Note: This method should be invoked after the caller has ensured that segments can be merged,\n * but before 'this' segment's cachedLength has changed, or the adjustment to the local refs\n * will be incorrect.\n */\n public append(other: LocalReferenceCollection) {\n if (!other || other.empty) {\n return;\n }\n this.hierRefCount += other.hierRefCount;\n this.refCount += other.refCount;\n other.hierRefCount = 0;\n for (const lref of other) {\n lref.segment = this.segment;\n lref.offset += this.refsByOffset.length;\n }\n\n this.refsByOffset.push(...other.refsByOffset);\n }\n\n /**\n * @internal - this method should only be called by mergeTree\n *\n * Splits this `LocalReferenceCollection` into the intervals [0, offset) and [offset, originalLength).\n * Local references in the former half of this split will remain associated with the segment used on construction.\n * Local references in the latter half of this split will be transferred to `splitSeg`,\n * and its `localRefs` field will be set.\n * @param offset - Offset into the original segment at which the collection should be split\n * @param splitSeg - Split segment which originally corresponded to the indices [offset, originalLength)\n * before splitting.\n */\n public split(offset: number, splitSeg: ISegment) {\n if (!this.empty) {\n const localRefs =\n new LocalReferenceCollection(\n splitSeg,\n this.refsByOffset.splice(offset, this.refsByOffset.length - offset));\n\n splitSeg.localRefs = localRefs;\n for (const lref of localRefs) {\n lref.segment = splitSeg;\n lref.offset -= offset;\n if (refHasRangeLabels(lref) || refHasTileLabels(lref)) {\n this.hierRefCount--;\n localRefs.hierRefCount++;\n }\n this.refCount--;\n localRefs.refCount++;\n }\n } else {\n // shrink the offset array when empty and splitting\n this.refsByOffset.length = offset;\n }\n }\n\n public addBeforeTombstones(...refs: Iterable<LocalReference | ReferencePosition>[]) {\n const beforeRefs = this.refsByOffset[0]?.before ?? ListMakeHead();\n\n for (const iterable of refs) {\n for (const lref of iterable) {\n assertLocalReferences(lref);\n if (refTypeIncludesFlag(lref, ReferenceType.SlideOnRemove)) {\n beforeRefs.push(lref);\n lref.segment = this.segment;\n lref.offset = 0;\n if (refHasRangeLabels(lref) || refHasTileLabels(lref)) {\n this.hierRefCount++;\n }\n this.refCount++;\n } else {\n lref.segment = undefined;\n }\n }\n }\n if (!beforeRefs.empty() && this.refsByOffset[0]?.before === undefined) {\n const refsAtOffset = this.refsByOffset[0] =\n this.refsByOffset[0]\n ?? { before: beforeRefs };\n refsAtOffset.before = refsAtOffset.before ?? beforeRefs;\n }\n }\n\n public addAfterTombstones(...refs: Iterable<LocalReference | ReferencePosition>[]) {\n const lastOffset = this.refsByOffset.length - 1;\n const afterRefs =\n this.refsByOffset[lastOffset]?.after ?? ListMakeHead();\n\n for (const iterable of refs) {\n for (const lref of iterable) {\n assertLocalReferences(lref);\n if (refTypeIncludesFlag(lref, ReferenceType.SlideOnRemove)) {\n afterRefs.push(lref);\n lref.segment = this.segment;\n lref.offset = this.segment.cachedLength - 1;\n if (refHasRangeLabels(lref) || refHasTileLabels(lref)) {\n this.hierRefCount++;\n }\n this.refCount++;\n } else {\n lref.segment = undefined;\n }\n }\n }\n if (!afterRefs.empty() && this.refsByOffset[lastOffset]?.after === undefined) {\n const refsAtOffset = this.refsByOffset[lastOffset] =\n this.refsByOffset[lastOffset]\n ?? { after: afterRefs };\n refsAtOffset.after = refsAtOffset.after ?? afterRefs;\n }\n }\n}\n"]}
|
package/lib/mergeTree.d.ts
CHANGED
|
@@ -9,23 +9,10 @@ import { TrackingGroupCollection } from "./mergeTreeTracking";
|
|
|
9
9
|
import { ICombiningOp, IJSONSegment, IMarkerDef, IRelativePosition, ReferenceType } from "./ops";
|
|
10
10
|
import { PartialSequenceLengths } from "./partialLengths";
|
|
11
11
|
import { MapLike, PropertySet } from "./properties";
|
|
12
|
+
import { RangeStackMap, ReferencePosition } from "./referencePositions";
|
|
12
13
|
import { SegmentGroupCollection } from "./segmentGroupCollection";
|
|
13
14
|
import { PropertiesManager } from "./segmentPropertiesManager";
|
|
14
|
-
|
|
15
|
-
properties?: PropertySet;
|
|
16
|
-
refType: ReferenceType;
|
|
17
|
-
isLeaf(): boolean;
|
|
18
|
-
getSegment(): ISegment | undefined;
|
|
19
|
-
getOffset(): number;
|
|
20
|
-
addProperties(newProps: PropertySet, op?: ICombiningOp): void;
|
|
21
|
-
hasTileLabels(): boolean;
|
|
22
|
-
hasRangeLabels(): boolean;
|
|
23
|
-
hasTileLabel(label: string): boolean;
|
|
24
|
-
hasRangeLabel(label: string): boolean;
|
|
25
|
-
getTileLabels(): string[] | undefined;
|
|
26
|
-
getRangeLabels(): string[] | undefined;
|
|
27
|
-
}
|
|
28
|
-
export declare type RangeStackMap = MapLike<Stack<ReferencePosition>>;
|
|
15
|
+
import { Client } from "./client";
|
|
29
16
|
export interface IMergeNodeCommon {
|
|
30
17
|
parent?: IMergeBlock;
|
|
31
18
|
/**
|
|
@@ -208,14 +195,8 @@ export declare abstract class BaseSegment extends MergeNode implements ISegment
|
|
|
208
195
|
abstract append(segment: ISegment): void;
|
|
209
196
|
protected abstract createSplitSegmentAt(pos: number): BaseSegment | undefined;
|
|
210
197
|
}
|
|
211
|
-
export declare const reservedTileLabelsKey = "referenceTileLabels";
|
|
212
|
-
export declare const reservedRangeLabelsKey = "referenceRangeLabels";
|
|
213
198
|
export declare const reservedMarkerIdKey = "markerId";
|
|
214
199
|
export declare const reservedMarkerSimpleTypeKey = "markerSimpleType";
|
|
215
|
-
export declare const refGetTileLabels: (refPos: ReferencePosition) => string[] | undefined;
|
|
216
|
-
export declare const refGetRangeLabels: (refPos: ReferencePosition) => string[] | undefined;
|
|
217
|
-
export declare function refHasTileLabel(refPos: ReferencePosition, label: string): boolean;
|
|
218
|
-
export declare function refHasRangeLabel(refPos: ReferencePosition, label: string): boolean;
|
|
219
200
|
export interface IJSONMarkerSegment extends IJSONSegment {
|
|
220
201
|
marker: IMarkerDef;
|
|
221
202
|
}
|
|
@@ -234,11 +215,29 @@ export declare class Marker extends BaseSegment implements ReferencePosition {
|
|
|
234
215
|
hasSimpleType(simpleTypeName: string): boolean;
|
|
235
216
|
getProperties(): PropertySet | undefined;
|
|
236
217
|
getId(): string | undefined;
|
|
218
|
+
/**
|
|
219
|
+
* @deprecated - use refHasTileLabels
|
|
220
|
+
*/
|
|
237
221
|
hasTileLabels(): boolean;
|
|
222
|
+
/**
|
|
223
|
+
* @deprecated - use refHasRangeLabels
|
|
224
|
+
*/
|
|
238
225
|
hasRangeLabels(): boolean;
|
|
226
|
+
/**
|
|
227
|
+
* @deprecated - use refHasTileLabel
|
|
228
|
+
*/
|
|
239
229
|
hasTileLabel(label: string): boolean;
|
|
230
|
+
/**
|
|
231
|
+
* @deprecated - use refHasRangeLabel
|
|
232
|
+
*/
|
|
240
233
|
hasRangeLabel(label: string): boolean;
|
|
234
|
+
/**
|
|
235
|
+
* @deprecated - use refGetTileLabels
|
|
236
|
+
*/
|
|
241
237
|
getTileLabels(): string[] | undefined;
|
|
238
|
+
/**
|
|
239
|
+
* @deprecated - use refGetRangeLabels
|
|
240
|
+
*/
|
|
242
241
|
getRangeLabels(): string[] | undefined;
|
|
243
242
|
toString(): string;
|
|
244
243
|
protected createSplitSegmentAt(pos: number): undefined;
|
|
@@ -413,7 +412,15 @@ export declare class MergeTree {
|
|
|
413
412
|
annotateRange(start: number, end: number, props: PropertySet, combiningOp: ICombiningOp | undefined, refSeq: number, clientId: number, seq: number, opArgs: IMergeTreeDeltaOpArgs): void;
|
|
414
413
|
markRangeRemoved(start: number, end: number, refSeq: number, clientId: number, seq: number, overwrite: boolean | undefined, opArgs: IMergeTreeDeltaOpArgs): void;
|
|
415
414
|
private nodeUpdateLengthNewStructure;
|
|
415
|
+
removeLocalReferencePosition(lref: ReferencePosition): ReferencePosition | undefined;
|
|
416
|
+
createLocalReferencePosition(segment: ISegment, offset: number, refType: ReferenceType, properties: PropertySet | undefined, client: Client): ReferencePosition;
|
|
417
|
+
/**
|
|
418
|
+
* @deprecated - use removeLocalReferencePosition
|
|
419
|
+
*/
|
|
416
420
|
removeLocalReference(segment: ISegment, lref: LocalReference): void;
|
|
421
|
+
/**
|
|
422
|
+
* @deprecated - use createLocalReference
|
|
423
|
+
*/
|
|
417
424
|
addLocalReference(lref: LocalReference): void;
|
|
418
425
|
private blockUpdate;
|
|
419
426
|
private blockUpdatePathLengths;
|