@fluidframework/sequence 0.49.0-39015 → 0.49.2
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/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.d.ts.map +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/sequence.d.ts +31 -2
- package/dist/sequence.d.ts.map +1 -1
- package/dist/sequence.js +2 -2
- package/dist/sequence.js.map +1 -1
- package/dist/sequenceDeltaEvent.d.ts +18 -0
- package/dist/sequenceDeltaEvent.d.ts.map +1 -1
- package/dist/sequenceDeltaEvent.js +6 -0
- package/dist/sequenceDeltaEvent.js.map +1 -1
- package/dist/sharedString.d.ts +38 -27
- package/dist/sharedString.d.ts.map +1 -1
- package/dist/sharedString.js +23 -27
- package/dist/sharedString.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.d.ts.map +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/sequence.d.ts +31 -2
- package/lib/sequence.d.ts.map +1 -1
- package/lib/sequence.js +2 -2
- package/lib/sequence.js.map +1 -1
- package/lib/sequenceDeltaEvent.d.ts +18 -0
- package/lib/sequenceDeltaEvent.d.ts.map +1 -1
- package/lib/sequenceDeltaEvent.js +6 -0
- package/lib/sequenceDeltaEvent.js.map +1 -1
- package/lib/sharedString.d.ts +38 -27
- package/lib/sharedString.d.ts.map +1 -1
- package/lib/sharedString.js +23 -27
- package/lib/sharedString.js.map +1 -1
- package/package.json +13 -13
- package/src/packageVersion.ts +1 -1
- package/src/sequence.ts +32 -5
- package/src/sequenceDeltaEvent.ts +18 -0
- package/src/sharedString.ts +43 -27
package/dist/packageVersion.d.ts
CHANGED
|
@@ -5,5 +5,5 @@
|
|
|
5
5
|
* THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY
|
|
6
6
|
*/
|
|
7
7
|
export declare const pkgName = "@fluidframework/sequence";
|
|
8
|
-
export declare const pkgVersion = "0.49.
|
|
8
|
+
export declare const pkgVersion = "0.49.2";
|
|
9
9
|
//# sourceMappingURL=packageVersion.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packageVersion.d.ts","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,OAAO,6BAA6B,CAAC;AAClD,eAAO,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"packageVersion.d.ts","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,OAAO,6BAA6B,CAAC;AAClD,eAAO,MAAM,UAAU,WAAW,CAAC"}
|
package/dist/packageVersion.js
CHANGED
|
@@ -8,5 +8,5 @@
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.pkgVersion = exports.pkgName = void 0;
|
|
10
10
|
exports.pkgName = "@fluidframework/sequence";
|
|
11
|
-
exports.pkgVersion = "0.49.
|
|
11
|
+
exports.pkgVersion = "0.49.2";
|
|
12
12
|
//# sourceMappingURL=packageVersion.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEU,QAAA,OAAO,GAAG,0BAA0B,CAAC;AACrC,QAAA,UAAU,GAAG,
|
|
1
|
+
{"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEU,QAAA,OAAO,GAAG,0BAA0B,CAAC;AACrC,QAAA,UAAU,GAAG,QAAQ,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/sequence\";\nexport const pkgVersion = \"0.49.2\";\n"]}
|
package/dist/sequence.d.ts
CHANGED
|
@@ -13,6 +13,35 @@ import { IGarbageCollectionData } from "@fluidframework/runtime-definitions";
|
|
|
13
13
|
import { IntervalCollection, SequenceInterval } from "./intervalCollection";
|
|
14
14
|
import { SequenceDeltaEvent, SequenceMaintenanceEvent } from "./sequenceDeltaEvent";
|
|
15
15
|
import { ISharedIntervalCollection } from "./sharedIntervalCollection";
|
|
16
|
+
/**
|
|
17
|
+
* Events emitted in response to changes to the sequence data.
|
|
18
|
+
*
|
|
19
|
+
* ### "sequenceDelta"
|
|
20
|
+
*
|
|
21
|
+
* The sequenceDelta event is emitted when segments are inserted, annotated, or removed.
|
|
22
|
+
*
|
|
23
|
+
* #### Listener signature
|
|
24
|
+
*
|
|
25
|
+
* ```typescript
|
|
26
|
+
* (event: SequenceDeltaEvent, target: IEventThisPlaceHolder) => void
|
|
27
|
+
* ```
|
|
28
|
+
* - `event` - Various information on the segments that were modified.
|
|
29
|
+
*
|
|
30
|
+
* - `target` - The sequence itself.
|
|
31
|
+
*
|
|
32
|
+
* ### "maintenance"
|
|
33
|
+
*
|
|
34
|
+
* The maintenance event is emitted when segments are modified during merge-tree maintenance.
|
|
35
|
+
*
|
|
36
|
+
* #### Listener signature
|
|
37
|
+
*
|
|
38
|
+
* ```typescript
|
|
39
|
+
* (event: SequenceMaintenanceEvent, target: IEventThisPlaceHolder) => void
|
|
40
|
+
* ```
|
|
41
|
+
* - `event` - Various information on the segments that were modified.
|
|
42
|
+
*
|
|
43
|
+
* - `target` - The sequence itself.
|
|
44
|
+
*/
|
|
16
45
|
export interface ISharedSegmentSequenceEvents extends ISharedObjectEvents {
|
|
17
46
|
(event: "sequenceDelta", listener: (event: SequenceDeltaEvent, target: IEventThisPlaceHolder) => void): any;
|
|
18
47
|
(event: "maintenance", listener: (event: SequenceMaintenanceEvent, target: IEventThisPlaceHolder) => void): any;
|
|
@@ -47,7 +76,7 @@ export declare abstract class SharedSegmentSequence<T extends MergeTree.ISegment
|
|
|
47
76
|
/**
|
|
48
77
|
* Inserts the content of the register.
|
|
49
78
|
*
|
|
50
|
-
* @param pos - The
|
|
79
|
+
* @param pos - The position to insert the content at.
|
|
51
80
|
* @param register - The name of the register to get the content from
|
|
52
81
|
*/
|
|
53
82
|
paste(pos: number, register: string): number;
|
|
@@ -77,7 +106,7 @@ export declare abstract class SharedSegmentSequence<T extends MergeTree.ISegment
|
|
|
77
106
|
/**
|
|
78
107
|
* Annotates the range with the provided properties
|
|
79
108
|
*
|
|
80
|
-
* @param start - The inclusive start
|
|
109
|
+
* @param start - The inclusive start position of the range to annotate
|
|
81
110
|
* @param end - The exclusive end position of the range to annotate
|
|
82
111
|
* @param props - The properties to annotate the range with
|
|
83
112
|
* @param combiningOp - Optional. Specifies how to combine values for the property, such as "incr" for increment.
|
package/dist/sequence.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequence.d.ts","sourceRoot":"","sources":["../src/sequence.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,QAAQ,EAA0B,MAAM,8BAA8B,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,KAAK,SAAS,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAEH,yBAAyB,EACzB,KAAK,EAGR,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACH,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACzB,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAGH,YAAY,EACZ,mBAAmB,EAEtB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAE7E,OAAO,EACH,kBAAkB,EAClB,gBAAgB,EAEnB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAKvE,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"sequence.d.ts","sourceRoot":"","sources":["../src/sequence.ts"],"names":[],"mappings":"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"}
|
package/dist/sequence.js
CHANGED
|
@@ -159,7 +159,7 @@ class SharedSegmentSequence extends shared_object_base_1.SharedObject {
|
|
|
159
159
|
/**
|
|
160
160
|
* Inserts the content of the register.
|
|
161
161
|
*
|
|
162
|
-
* @param pos - The
|
|
162
|
+
* @param pos - The position to insert the content at.
|
|
163
163
|
* @param register - The name of the register to get the content from
|
|
164
164
|
*/
|
|
165
165
|
paste(pos, register) {
|
|
@@ -206,7 +206,7 @@ class SharedSegmentSequence extends shared_object_base_1.SharedObject {
|
|
|
206
206
|
/**
|
|
207
207
|
* Annotates the range with the provided properties
|
|
208
208
|
*
|
|
209
|
-
* @param start - The inclusive start
|
|
209
|
+
* @param start - The inclusive start position of the range to annotate
|
|
210
210
|
* @param end - The exclusive end position of the range to annotate
|
|
211
211
|
* @param props - The properties to annotate the range with
|
|
212
212
|
* @param combiningOp - Optional. Specifies how to combine values for the property, such as "incr" for increment.
|
package/dist/sequence.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequence.js","sourceRoot":"","sources":["../src/sequence.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;;;GAGG;AACH,+DAAgF;AAEhF,qEAA8D;AAC9D,sEAAwD;AACxD,+EAM8C;AAM9C,iEAAuE;AACvE,2EAM4C;AAI5C,6DAI8B;AAC9B,2CAAwC;AAExC,6DAAoF;AAGpF,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AAClC,MAAM,WAAW,GAAG,SAAS,CAAC;AAU9B,MAAsB,qBAClB,SAAQ,iCAA0C;IAmElD,YACqB,gBAAwC,EAClD,EAAU,EACjB,UAA8B,EACd,eAAqE;QAErF,KAAK,CAAC,EAAE,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC;QALvB,qBAAgB,GAAhB,gBAAgB,CAAwB;QAClD,OAAE,GAAF,EAAE,CAAQ;QAED,oBAAe,GAAf,eAAe,CAAsD;QAfzF,mDAAmD;QACzC,mBAAc,GAAG,IAAI,uBAAQ,EAAQ,CAAC;QAChD,mDAAmD;QAClC,8BAAyB,GAC0C,EAAE,CAAC;QACvF,sDAAsD;QAC9C,qBAAgB,GAAG,IAAI,CAAC;QACf,8BAAyB,GAAgC,EAAE,CAAC;QAErE,2BAAsB,GAAgC,EAAE,CAAC;QAU7D,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,EAAC,EAAE;YACvC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,oBAAoB,EAAE,EAAE,KAAK,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,CAC9B,eAAe,EACf,6BAAW,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,uCAAuC,CAAC,EACxE,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAE9B,KAAK,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE;YAC9B,QAAQ,KAAK,EAAE;gBACX,KAAK,eAAe;oBAChB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE;wBACrC,IAAI,CAAC,MAAM,CAAC,sBAAsB,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE;4BACvD,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,uCAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;wBAC7F,CAAC,CAAC;qBACL;oBACD,MAAM;gBACV,KAAK,aAAa;oBACd,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,4BAA4B,EAAE;wBAC3C,IAAI,CAAC,MAAM,CAAC,4BAA4B,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;4BACxD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,6CAAwB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;wBAC5F,CAAC,CAAC;qBACL;oBACD,MAAM;gBACV,QAAQ;aACX;QACL,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,KAAsB,EAAE,EAAE;YAClD,QAAQ,KAAK,EAAE;gBACX,KAAK,eAAe;oBAChB,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;wBAClC,IAAI,CAAC,MAAM,CAAC,sBAAsB,GAAG,SAAS,CAAC;qBAClD;oBACD,MAAM;gBACV,KAAK,aAAa;oBACd,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;wBAClC,IAAI,CAAC,MAAM,CAAC,4BAA4B,GAAG,SAAS,CAAC;qBACxD;oBACD,MAAM;gBACV;oBACI,MAAM;aACb;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,GAAG,IAAI,qBAAS,CAClC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,MAAM,EACX,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE,eAAe,CAAC,EACrE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,EACvB,CAAC,IAAI,wDAAmC,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC;IA5HD,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;IACvC,CAAC;IAEO,MAAM,CAAC,kBAAkB,CAAC,KAAyB;QACvD,MAAM,GAAG,GAAkC,EAAE,CAAC;QAC9C,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE;YAC1B,QAAQ,KAAK,CAAC,cAAc,EAAE;gBAC1B,qBAA0C,CAAC,CAAC;oBACxC,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAoC,CAAC;oBAC5E,MAAM,KAAK,GAAG,EAAE,CAAC;oBACjB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE;wBAC7C,KAAK,CAAC,GAAG,CAAC;4BACN,2CAA2C;4BAC3C,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;qBAClF;oBACD,IAAI,YAAY,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC,CAAC,QAAQ;wBAChD,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;wBACtD,YAAY,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;qBAC/C;yBAAM;wBACH,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,qBAAqB,CACpC,CAAC,CAAC,QAAQ,EACV,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,YAAY,EACnC,KAAK,EACL,SAAS,CAAC,CAAC,CAAC;qBACnB;oBACD,MAAM;iBACT;gBAED;oBACI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAC7B,CAAC,CAAC,QAAQ,EACV,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;oBACvC,MAAM;gBAEV,mBAAwC,CAAC,CAAC;oBACtC,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAkC,CAAC;oBACrE,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,MAAK,CAAC,CAAC,QAAQ,EAAE;wBAC9B,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;qBAC1C;yBAAM;wBACH,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAClC,CAAC,CAAC,QAAQ,EACV,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;qBAC7C;oBACD,MAAM;iBACT;gBAED,QAAQ;aACX;SACJ;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IA2ED;;;OAGG;IACI,WAAW,CAAC,KAAa,EAAE,GAAW;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC1D,IAAI,QAAQ,EAAE;YACV,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;SACxC;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;;;;;OAMG;IACI,GAAG,CAAC,KAAa,EAAE,GAAW,EAAE,QAAgB;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QACpE,IAAI,QAAQ,EAAE;YACV,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;SACxC;IACL,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,GAAW,EAAE,QAAgB;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACvD,IAAI,QAAQ,EAAE;YACV,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;SACxC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;;;;;OAMG;IACI,IAAI,CAAC,KAAa,EAAE,GAAW,EAAE,QAAgB;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC7D,IAAI,QAAQ,EAAE;YACV,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;SACxC;IACL,CAAC;IAEM,cAAc,CAAC,OAAqC;QACvD,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAEM,oBAAoB,CAAC,GAAW;QACnC,OAAO,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAI,GAAG,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACI,SAAS;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACI,WAAW,CAAC,OAA2B;QAC1C,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED;;;;;;;;OAQG;IACI,aAAa,CAChB,KAAa,EACb,GAAW,EACX,KAA4B,EAC5B,WAAoC;QACpC,MAAM,UAAU,GACZ,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;QACnE,IAAI,UAAU,EAAE;YACZ,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;SAC1C;IACL,CAAC;IAEM,uBAAuB,CAAC,GAAW;QACtC,OAAO,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC;IACpD,CAAC;IAEM,yBAAyB,CAAC,GAAW;QACxC,OAAO,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC;IACtD,CAAC;IAEM,uBAAuB,CAC1B,OAAU,EACV,MAAc,EACd,OAAgC;QAChC,MAAM,IAAI,GAAG,IAAI,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACjF,IAAI,OAAO,KAAK,SAAS,CAAC,aAAa,CAAC,SAAS,EAAE;YAC/C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;SAChC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,aAAa,CAAC,QAAkC;QACnD,IAAI,QAAQ,CAAC,OAAO,EAAE;YAClB,OAAO,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;SAC/D;aAAM;YACH,OAAO,CAAC,CAAC,CAAC;SACb;IACL,CAAC;IAED;;;;;;;OAOG;IACI,2BAA2B,CAC9B,oBAA4B,EAC5B,kBAA0B,EAC1B,cAAsB;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAC1C,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,CAAC,CAAC;IACxB,CAAC;IAEM,qBAAqB,CAAC,OAA+B;QACxD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;YACpB,OAAO;SACV;QACD,MAAM,UAAU,GAAG,4CAAuB,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAClF,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,wBAAwB,CACjD,OAAO,CAAC,IAAI,kBAAuC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAElF,8CAA8C;QAC9C,gDAAgD;QAChD,sBAAsB;QACtB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;YAClC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;SAC/D;aAAM;YACH,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;SACjD;IACL,CAAC;IAEM,iBAAiB,CAAC,IAAI;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IAEM,oBAAoB,CAAC,IAAI;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IAED;;;;OAIG;IACI,kBAAkB,CAAC,WAAW;QACjC,OAAO,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACvD,CAAC;IAED;;;;;;;;;;;;OAYG;IACI,YAAY,CACf,OAA8C,EAC9C,KAAc,EAAE,GAAY,EAAE,KAAmB,EACjD,aAAsB,KAAK;QAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAc,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IACzF,CAAC;IAEM,eAAe,CAAC,QAAgB,EAAE,WAAqB;QAC1D,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC9D,CAAC;IAEM,aAAa;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;IACvC,CAAC;IAEM,yBAAyB,CAAC,GAAgC,EAAE,OAAU;QACzE,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,8BAA8B,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC1E,IAAI,QAAQ,EAAE;YACV,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;SACxC;IACL,CAAC;IAEM,KAAK,CAAC,sBAAsB,CAC/B,KAAa;QAEb,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAC9B,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,0EAA0E;IACnE,qBAAqB,CAAC,KAAa;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;YACxC,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAClC,SAAS,EACT,wDAAmC,CAAC,IAAI,EACxC,SAAS,CAAC,CAAC;SAClB;QAED,MAAM,gBAAgB,GAClB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAuC,SAAS,CAAC,CAAC;QAChF,OAAO,gBAAgB,CAAC;IAC5B,CAAC;IAES,YAAY,CAAC,UAA4B;QAC/C,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,mDAAmD;QACnD,yBAAyB;QACzB,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,EAAE;YACjC,OAAO,CAAC,IAAI,CACR;gBACI,IAAI,EAAE,+BAAQ,CAAC,IAAI;gBACnB,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,gCAAS,CAAC,IAAI;gBACpB,KAAK,EAAE;oBACH,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,UAAU,CAAC;oBACtD,QAAQ,EAAE,OAAO;iBACpB;aACJ,CAAC,CAAC;SACV;QACD,OAAO,CAAC,IAAI,CACR;YACI,IAAI,EAAE,+BAAQ,CAAC,SAAS;YACxB,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,gCAAS,CAAC,IAAI;YACpB,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;SAC5C,CAAC,CAAC;QACP,MAAM,IAAI,GAAU;YAChB,OAAO;SACV,CAAC;QAEF,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACO,aAAa;QACnB,gHAAgH;QAChH,cAAc;QACd,MAAM,UAAU,GAAG,IAAI,sCAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAE9E,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,EAAE;YACjC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;SAChD;QAED,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAErD,OAAO;YACH,OAAO,EAAC;gBACJ,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,mBAAmB,EAAE;aAC1C;SACJ,CAAC;IACN,CAAC;IAED;;;;;;;;OAQG;IACO,YAAY,CAAC,KAAa,EAAE,GAAW,EAAE,OAA2B;QAC1E,wFAAwF;QACxF,MAAM,WAAW,GAAW,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAEjD,yEAAyE;QACzE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACpE,IAAI,MAAM,EAAE;YACR,IAAI,KAAK,GAAG,GAAG,EAAE;gBACb,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBACxD,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;aACvE;iBAAM;gBACH,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;aACtC;SACJ;IACL,CAAC;IAES,SAAS;QACf,6FAA6F;QAC7F,IAAI,CAAC,MAAM,CAAC,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAClE,CAAC;IAES,YAAY,KAAI,CAAC;IAEjB,YAAY,CAAC,OAAY,EAAE,eAAwB;QACzD,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,OAAO,EAAE,eAAe,CAAC,EAAE;YACpE,IAAI,CAAC,qBAAqB,CACtB,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAC3B,OAAiC,EACjC,eAAoE,CAAC,CAAC,CAAC;SAClF;IACL,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,QAAQ,CAAC,OAA+B;;QACpD,IAAI,MAAM,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE;YAC1C,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,6BAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC5C,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;SAC3C;QAED,IAAI;YACA,kDAAkD;YAClD,4CAA4C;YAC5C,qCAAqC;YACrC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAC1C,IAAI,CAAC,OAAO,EACZ,IAAI,sCAAsB,CAAC,OAAO,EAAE,WAAW,CAAC,EAChD,IAAI,CAAC,UAAU,CAAC,CAAC;YAErB,iCAAiC;YACjC,kDAAkD;YAClD,MAAM,cAAc,GAAG,WAAW;iBAC7B,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;gBACX,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;oBACf,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;oBACnD,IAAI,CAAC,CAAC,qBAAqB,GAAG,YAAY,CAAC,MAAM;2BAC1C,CAAC,CAAC,uBAAuB,GAAG,YAAY,CAAC,MAAM;2BAC/C,CAAC,CAAC,cAAc,IAAI,YAAY,CAAC,MAAM;2BACvC,CAAC,CAAC,cAAc,IAAI,YAAY,CAAC,UAAU,EAAE;wBAChD,MAAM,IAAI,KAAK,CAAC,2CACZ,IAAI,CAAC,SAAS,CAAC;4BACX,EAAE,EAAC;gCACC,GAAG,EAAE,CAAC,CAAC,cAAc;gCACrB,MAAM,EAAE,CAAC,CAAC,qBAAqB;gCAC/B,MAAM,EAAC,CAAC,CAAC,uBAAuB;6BACnC;4BACD,YAAY,EAAC;gCACT,GAAG,EAAE,YAAY,CAAC,UAAU;gCAC5B,MAAM,EAAE,YAAY,CAAC,MAAM;6BAC9B;yBACJ,CAAC,EAAE,CAAC,CAAC;qBACb;oBACD,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;gBAChC,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,YAAY,EAAE,CAAC;YACxB,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACb,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;YACP,IAAI,OAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,0CAAE,gCAAgC,MAAK,IAAI,EAAE;gBAC1E,wDAAwD;gBACxD,mCAAmC;gBACnC,MAAM,cAAc,CAAC;aACxB;SACJ;QAAC,OAAO,KAAK,EAAE;YACZ,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;SAC5B;IACL,CAAC;IAES,WAAW,CAAC,OAAkC,EAAE,KAAc,EAAE,eAAwB;QAC9F,kDAAkD;QAClD,uDAAuD;QACvD,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACvB,qBAAM,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,qDAAqD,CAAC,CAAC;YAC5E,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAChD;aAAM;YACH,qBAAM,CAAC,OAAO,CAAC,IAAI,KAAK,kCAAW,CAAC,SAAS,EAAE,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAE7F,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;YAE5G,IAAI,CAAC,OAAO,EAAE;gBACV,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;aACrC;SACJ;IACL,CAAC;IAES,YAAY;QAClB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,EAAE;YACjD,IAAI,iCAAY,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;gBACxB,KAAK,CAAC,aAAa,EAAE,CAAC;aACzB;SACJ;QAED,IAAI,CAAC,MAAM,CAAC,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAClE,CAAC;IAES,SAAS;;QACf,sFAAsF;QACtF,qFAAqF;QACrF,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YACnB,IAAI,CAAC,MAAM,CAAC,0BAA0B,OAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,mCAAI,UAAU,CAAC,CAAC;SAC/E;IACL,CAAC;IAES,mBAAmB;QACzB,KAAK,CAAC,mBAAmB,EAAE,CAAC;QAC5B,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAEO,iBAAiB,CAAC,UAA4B;QAClD,oDAAoD;QACpD,qBAAM,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAC7F,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,qBAAqB,CAAC;QAE/D,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAC,CAAC;QAE7C,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,qBAAqB,GAAG,MAAM,CAAC,CAAC;QAE7E,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACpG,CAAC;IAEO,mBAAmB,CACvB,UAAqC;;QACrC,MAAM,OAAO,GAAG,iCAAY,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAE1D,MAAM,GAAG,GAAkC,EAAE,CAAC;QAC9C,SAAS,YAAY,CAAC,KAAyB;YAC3C,GAAG,CAAC,IAAI,CAAC,GAAG,qBAAqB,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,mBAAmB,GAAG,OAAO,CAAC,uBAAuB,KAAK,OAAO,CAAC,cAAc,GAAG,CAAC,CAAC;QAC3F,IAAI,YAAY,GAAwC,OAAO,CAAC;QAChE,IAAI,OAAA,IAAI,CAAC,OAAO,CAAC,OAAO,0CAAE,0BAA0B,MAAK,IAAI,EAAE;YAC3D,IAAI,mBAAmB,EAAE;gBACrB,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;aAC1C;SACJ;QAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAE9B,IAAI,OAAA,IAAI,CAAC,OAAO,CAAC,OAAO,0CAAE,0BAA0B,MAAK,IAAI,EAAE;YAC3D,IAAI,mBAAmB,EAAE;gBACrB,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;gBACnD,uEAAuE;gBACvE,gDAAgD;gBAChD,YAAY,mCACJ,OAAO,KACX,uBAAuB,EAAE,YAAY,CAAC,cAAc,GAAG,CAAC,EACxD,QAAQ,EAAE,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GACxE,CAAC;aACL;YAED,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAE/C,iCAAiC;YACjC,IAAI,IAAI,CAAC,sBAAsB,CAAC,MAAM,GAAG,EAAE;mBACpC,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,cAAc,GAAG,OAAO,CAAC,qBAAqB,EAAE;gBACnF,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;aACvE;SACJ;IACL,CAAC;IAEO,yBAAyB,CAAC,KAAa;QAC3C,OAAO,uBAAuB,KAAK,EAAE,CAAC;IAC1C,CAAC;IAEO,+BAA+B,CAAC,MAAc;QAClD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,OAAO,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACxD,IAAI,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,cAAc,GAAG,MAAM,EAAE;gBAC5D,MAAM;aACT;SACJ;QACD,IAAI,KAAK,KAAK,CAAC,EAAE;YACb,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SAC1E;IACL,CAAC;IAEO,YAAY,CAAC,KAAW;QAC5B,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;YAClC,sCAAsC;YACtC,IAAI,CAAC,6BAA6B,EAAE,CAAC;YACrC,IAAI,KAAK,EAAE;gBACP,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAClC,MAAM,KAAK,CAAC;aACf;iBAAM;gBACH,kDAAkD;gBAClD,0DAA0D;gBAC1D,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;gBAC9B,OAAO,IAAI,CAAC,yBAAyB,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC9C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;iBAC9E;gBACD,kCAAkC;gBAClC,wDAAwD;gBACxD,uDAAuD;gBACvD,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;gBAE9B,OAAO,IAAI,CAAC,yBAAyB,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,CAAC;oBACtD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC3C;aACJ;SACJ;IACL,CAAC;IAEO,6BAA6B;QACjC,sDAAsD;QACtD,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,EAAiB,EAAE,EAAE;YACzE,MAAM,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAuC,EAAE,CAAC,GAAG,CAAC,CAAC;YACpG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE;gBAC9B,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;aACvD;QACL,CAAC,CAAC,CAAC;QAEH,gDAAgD;QAChD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE;YAC7C,MAAM,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAuC,GAAG,CAAC,CAAC;YACjG,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;SACpD;IACL,CAAC;IAES,cAAc;QACpB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACvC,CAAC;CACJ;AA/pBD,sDA+pBC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\nimport { Deferred, bufferToString, assert } from \"@fluidframework/common-utils\";\nimport { IFluidSerializer } from \"@fluidframework/core-interfaces\";\nimport { ChildLogger } from \"@fluidframework/telemetry-utils\";\nimport * as MergeTree from \"@fluidframework/merge-tree\";\nimport {\n FileMode,\n ISequencedDocumentMessage,\n ITree,\n MessageType,\n TreeEntry,\n} from \"@fluidframework/protocol-definitions\";\nimport {\n IChannelAttributes,\n IFluidDataStoreRuntime,\n IChannelStorageService,\n} from \"@fluidframework/datastore-definitions\";\nimport { ObjectStoragePartition } from \"@fluidframework/runtime-utils\";\nimport {\n makeHandlesSerializable,\n parseHandles,\n SharedObject,\n ISharedObjectEvents,\n SummarySerializer,\n} from \"@fluidframework/shared-object-base\";\nimport { IEventThisPlaceHolder } from \"@fluidframework/common-definitions\";\nimport { IGarbageCollectionData } from \"@fluidframework/runtime-definitions\";\n\nimport {\n IntervalCollection,\n SequenceInterval,\n SequenceIntervalCollectionValueType,\n} from \"./intervalCollection\";\nimport { MapKernel } from \"./mapKernel\";\nimport { IValueChanged } from \"./mapKernelInterfaces\";\nimport { SequenceDeltaEvent, SequenceMaintenanceEvent } from \"./sequenceDeltaEvent\";\nimport { ISharedIntervalCollection } from \"./sharedIntervalCollection\";\n\nconst snapshotFileName = \"header\";\nconst contentPath = \"content\";\n\nexport interface ISharedSegmentSequenceEvents\n extends ISharedObjectEvents {\n\n (event: \"sequenceDelta\", listener: (event: SequenceDeltaEvent, target: IEventThisPlaceHolder) => void);\n (event: \"maintenance\",\n listener: (event: SequenceMaintenanceEvent, target: IEventThisPlaceHolder) => void);\n}\n\nexport abstract class SharedSegmentSequence<T extends MergeTree.ISegment>\n extends SharedObject<ISharedSegmentSequenceEvents>\n implements ISharedIntervalCollection<SequenceInterval> {\n get loaded(): Promise<void> {\n return this.loadedDeferred.promise;\n }\n\n private static createOpsFromDelta(event: SequenceDeltaEvent): MergeTree.IMergeTreeDeltaOp[] {\n const ops: MergeTree.IMergeTreeDeltaOp[] = [];\n for (const r of event.ranges) {\n switch (event.deltaOperation) {\n case MergeTree.MergeTreeDeltaType.ANNOTATE: {\n const lastAnnotate = ops[ops.length - 1] as MergeTree.IMergeTreeAnnotateMsg;\n const props = {};\n for (const key of Object.keys(r.propertyDeltas)) {\n props[key] =\n // eslint-disable-next-line no-null/no-null\n r.segment.properties[key] === undefined ? null : r.segment.properties[key];\n }\n if (lastAnnotate && lastAnnotate.pos2 === r.position &&\n MergeTree.matchProperties(lastAnnotate.props, props)) {\n lastAnnotate.pos2 += r.segment.cachedLength;\n } else {\n ops.push(MergeTree.createAnnotateRangeOp(\n r.position,\n r.position + r.segment.cachedLength,\n props,\n undefined));\n }\n break;\n }\n\n case MergeTree.MergeTreeDeltaType.INSERT:\n ops.push(MergeTree.createInsertOp(\n r.position,\n r.segment.clone().toJSONObject()));\n break;\n\n case MergeTree.MergeTreeDeltaType.REMOVE: {\n const lastRem = ops[ops.length - 1] as MergeTree.IMergeTreeRemoveMsg;\n if (lastRem?.pos1 === r.position) {\n lastRem.pos2 += r.segment.cachedLength;\n } else {\n ops.push(MergeTree.createRemoveRangeOp(\n r.position,\n r.position + r.segment.cachedLength));\n }\n break;\n }\n\n default:\n }\n }\n return ops;\n }\n\n protected client: MergeTree.Client;\n // Deferred that triggers once the object is loaded\n protected loadedDeferred = new Deferred<void>();\n // cache out going ops created when parital loading\n private readonly loadedDeferredOutgoingOps:\n [MergeTree.IMergeTreeOp, MergeTree.SegmentGroup | MergeTree.SegmentGroup[]][] = [];\n // cache incoming ops that arrive when partial loading\n private deferIncomingOps = true;\n private readonly loadedDeferredIncomingOps: ISequencedDocumentMessage[] = [];\n\n private messagesSinceMSNChange: ISequencedDocumentMessage[] = [];\n private readonly intervalMapKernel: MapKernel;\n constructor(\n private readonly dataStoreRuntime: IFluidDataStoreRuntime,\n public id: string,\n attributes: IChannelAttributes,\n public readonly segmentFromSpec: (spec: MergeTree.IJSONSegment) => MergeTree.ISegment,\n ) {\n super(id, dataStoreRuntime, attributes);\n\n this.loadedDeferred.promise.catch((error)=>{\n this.logger.sendErrorEvent({ eventName: \"SequenceLoadFailed\" }, error);\n });\n\n this.client = new MergeTree.Client(\n segmentFromSpec,\n ChildLogger.create(this.logger, \"SharedSegmentSequence.MergeTreeClient\"),\n dataStoreRuntime.options);\n\n super.on(\"newListener\", (event) => {\n switch (event) {\n case \"sequenceDelta\":\n if (!this.client.mergeTreeDeltaCallback) {\n this.client.mergeTreeDeltaCallback = (opArgs, deltaArgs) => {\n this.emit(\"sequenceDelta\", new SequenceDeltaEvent(opArgs, deltaArgs, this.client), this);\n };\n }\n break;\n case \"maintenance\":\n if (!this.client.mergeTreeMaintenanceCallback) {\n this.client.mergeTreeMaintenanceCallback = (args, opArgs) => {\n this.emit(\"maintenance\", new SequenceMaintenanceEvent(opArgs, args, this.client), this);\n };\n }\n break;\n default:\n }\n });\n super.on(\"removeListener\", (event: string | symbol) => {\n switch (event) {\n case \"sequenceDelta\":\n if (super.listenerCount(event) === 0) {\n this.client.mergeTreeDeltaCallback = undefined;\n }\n break;\n case \"maintenance\":\n if (super.listenerCount(event) === 0) {\n this.client.mergeTreeMaintenanceCallback = undefined;\n }\n break;\n default:\n break;\n }\n });\n\n this.intervalMapKernel = new MapKernel(\n this.serializer,\n this.handle,\n (op, localOpMetadata) => this.submitLocalMessage(op, localOpMetadata),\n () => this.isAttached(),\n [new SequenceIntervalCollectionValueType()]);\n }\n\n /**\n * @param start - The inclusive start of the range to remove\n * @param end - The exclusive end of the range to remove\n */\n public removeRange(start: number, end: number) {\n const removeOp = this.client.removeRangeLocal(start, end);\n if (removeOp) {\n this.submitSequenceMessage(removeOp);\n }\n return removeOp;\n }\n\n /**\n * Removes the range and puts the content of the removed range in a register\n *\n * @param start - The inclusive start of the range to remove\n * @param end - The exclusive end of the range to remove\n * @param register - The name of the register to store the removed range in\n */\n public cut(start: number, end: number, register: string) {\n const removeOp = this.client.removeRangeLocal(start, end, register);\n if (removeOp) {\n this.submitSequenceMessage(removeOp);\n }\n }\n\n /**\n * Inserts the content of the register.\n *\n * @param pos - The postition to insert the content at.\n * @param register - The name of the register to get the content from\n */\n public paste(pos: number, register: string) {\n const insertOp = this.client.pasteLocal(pos, register);\n if (insertOp) {\n this.submitSequenceMessage(insertOp);\n }\n return pos;\n }\n\n /**\n * Puts the content of the range in a register\n *\n * @param start - The inclusive start of the range\n * @param end - The exclusive end of the range\n * @param register - The name of the register to store the range in\n */\n public copy(start: number, end: number, register: string) {\n const insertOp = this.client.copyLocal(start, end, register);\n if (insertOp) {\n this.submitSequenceMessage(insertOp);\n }\n }\n\n public groupOperation(groupOp: MergeTree.IMergeTreeGroupMsg) {\n this.client.localTransaction(groupOp);\n this.submitSequenceMessage(groupOp);\n }\n\n public getContainingSegment(pos: number) {\n return this.client.getContainingSegment<T>(pos);\n }\n\n /**\n * Returns the length of the current sequence for the client\n */\n public getLength() {\n return this.client.getLength();\n }\n\n /**\n * Returns the current position of a segment, and -1 if the segment\n * does not exist in this sequence\n * @param segment - The segment to get the position of\n */\n public getPosition(segment: MergeTree.ISegment): number {\n return this.client.getPosition(segment);\n }\n\n /**\n * Annotates the range with the provided properties\n *\n * @param start - The inclusive start postition of the range to annotate\n * @param end - The exclusive end position of the range to annotate\n * @param props - The properties to annotate the range with\n * @param combiningOp - Optional. Specifies how to combine values for the property, such as \"incr\" for increment.\n *\n */\n public annotateRange(\n start: number,\n end: number,\n props: MergeTree.PropertySet,\n combiningOp?: MergeTree.ICombiningOp) {\n const annotateOp =\n this.client.annotateRangeLocal(start, end, props, combiningOp);\n if (annotateOp) {\n this.submitSequenceMessage(annotateOp);\n }\n }\n\n public getPropertiesAtPosition(pos: number) {\n return this.client.getPropertiesAtPosition(pos);\n }\n\n public getRangeExtentsOfPosition(pos: number) {\n return this.client.getRangeExtentsOfPosition(pos);\n }\n\n public createPositionReference(\n segment: T,\n offset: number,\n refType: MergeTree.ReferenceType): MergeTree.LocalReference {\n const lref = new MergeTree.LocalReference(this.client, segment, offset, refType);\n if (refType !== MergeTree.ReferenceType.Transient) {\n this.addLocalReference(lref);\n }\n return lref;\n }\n\n public localRefToPos(localRef: MergeTree.LocalReference) {\n if (localRef.segment) {\n return localRef.offset + this.getPosition(localRef.segment);\n } else {\n return -1;\n }\n }\n\n /**\n * Resolves a remote client's position against the local sequence\n * and returns the remote client's position relative to the local\n * sequence\n * @param remoteClientPosition - The remote client's position to resolve\n * @param remoteClientRefSeq - The reference sequence number of the remote client\n * @param remoteClientId - The client id of the remote client\n */\n public resolveRemoteClientPosition(\n remoteClientPosition: number,\n remoteClientRefSeq: number,\n remoteClientId: string): number {\n return this.client.resolveRemoteClientPosition(\n remoteClientPosition,\n remoteClientRefSeq,\n remoteClientId);\n }\n\n public submitSequenceMessage(message: MergeTree.IMergeTreeOp) {\n if (!this.isAttached()) {\n return;\n }\n const translated = makeHandlesSerializable(message, this.serializer, this.handle);\n const metadata = this.client.peekPendingSegmentGroups(\n message.type === MergeTree.MergeTreeDeltaType.GROUP ? message.ops.length : 1);\n\n // if loading isn't complete, we need to cache\n // local ops until loading is complete, and then\n // they will be resent\n if (!this.loadedDeferred.isCompleted) {\n this.loadedDeferredOutgoingOps.push([translated, metadata]);\n } else {\n this.submitLocalMessage(translated, metadata);\n }\n }\n\n public addLocalReference(lref) {\n return this.client.addLocalReference(lref);\n }\n\n public removeLocalReference(lref) {\n return this.client.removeLocalReference(lref);\n }\n\n /**\n * Given a position specified relative to a marker id, lookup the marker\n * and convert the position to a character position.\n * @param relativePos - Id of marker (may be indirect) and whether position is before or after marker.\n */\n public posFromRelativePos(relativePos) {\n return this.client.posFromRelativePos(relativePos);\n }\n\n /**\n * Walk the underlying segments of the sequence.\n * The walked segments may extend beyond the range\n * if the segments cross the ranges start or end boundaries.\n * Set split range to true to ensure only segments within the\n * range are walked.\n *\n * @param handler - The function to handle each segment\n * @param start - Optional. The start of range walk.\n * @param end - Optional. The end of range walk\n * @param accum - Optional. An object that will be passed to the handler for accumulation\n * @param splitRange - Optional. Splits boundary segments on the range boundaries\n */\n public walkSegments<TClientData>(\n handler: MergeTree.ISegmentAction<TClientData>,\n start?: number, end?: number, accum?: TClientData,\n splitRange: boolean = false) {\n return this.client.walkSegments<TClientData>(handler, start, end, accum, splitRange);\n }\n\n public getStackContext(startPos: number, rangeLabels: string[]) {\n return this.client.getStackContext(startPos, rangeLabels);\n }\n\n public getCurrentSeq() {\n return this.client.getCurrentSeq();\n }\n\n public insertAtReferencePosition(pos: MergeTree.ReferencePosition, segment: T) {\n const insertOp = this.client.insertAtReferencePositionLocal(pos, segment);\n if (insertOp) {\n this.submitSequenceMessage(insertOp);\n }\n }\n\n public async waitIntervalCollection(\n label: string,\n ): Promise<IntervalCollection<SequenceInterval>> {\n return this.intervalMapKernel.wait<IntervalCollection<SequenceInterval>>(\n this.getIntervalCollectionPath(label));\n }\n\n // TODO: fix race condition on creation by putting type on every operation\n public getIntervalCollection(label: string): IntervalCollection<SequenceInterval> {\n const labelPath = this.getIntervalCollectionPath(label);\n if (!this.intervalMapKernel.has(labelPath)) {\n this.intervalMapKernel.createValueType(\n labelPath,\n SequenceIntervalCollectionValueType.Name,\n undefined);\n }\n\n const sharedCollection =\n this.intervalMapKernel.get<IntervalCollection<SequenceInterval>>(labelPath);\n return sharedCollection;\n }\n\n protected snapshotCore(serializer: IFluidSerializer): ITree {\n const entries = [];\n // conditionally write the interval collection blob\n // only if it has entries\n if (this.intervalMapKernel.size > 0) {\n entries.push(\n {\n mode: FileMode.File,\n path: snapshotFileName,\n type: TreeEntry.Blob,\n value: {\n contents: this.intervalMapKernel.serialize(serializer),\n encoding: \"utf-8\",\n },\n });\n }\n entries.push(\n {\n mode: FileMode.Directory,\n path: contentPath,\n type: TreeEntry.Tree,\n value: this.snapshotMergeTree(serializer),\n });\n const tree: ITree = {\n entries,\n };\n\n return tree;\n }\n\n /**\n * Returns the GC data for this SharedMatrix. All the IFluidHandle's represent routes to other objects.\n */\n protected getGCDataCore(): IGarbageCollectionData {\n // Create a SummarySerializer and use it to serialize all the cells. It keeps track of all IFluidHandles that it\n // serializes.\n const serializer = new SummarySerializer(this.runtime.channelsRoutingContext);\n\n if (this.intervalMapKernel.size > 0) {\n this.intervalMapKernel.serialize(serializer);\n }\n\n this.client.serializeGCData(this.handle, serializer);\n\n return {\n gcNodes:{\n [\"/\"]: serializer.getSerializedRoutes(),\n },\n };\n }\n\n /**\n * Replace the range specified from start to end with the provided segment\n * This is done by inserting the segment at the end of the range, followed\n * by removing the contents of the range\n * For a zero or reverse range (start \\>= end), insert at end do not remove anything\n * @param start - The start of the range to replace\n * @param end - The end of the range to replace\n * @param segment - The segment that will replace the range\n */\n protected replaceRange(start: number, end: number, segment: MergeTree.ISegment) {\n // Insert at the max end of the range when start > end, but still remove the range later\n const insertIndex: number = Math.max(start, end);\n\n // Insert first, so local references can slide to the inserted seg if any\n const insert = this.client.insertSegmentLocal(insertIndex, segment);\n if (insert) {\n if (start < end) {\n const remove = this.client.removeRangeLocal(start, end);\n this.submitSequenceMessage(MergeTree.createGroupOp(insert, remove));\n } else {\n this.submitSequenceMessage(insert);\n }\n }\n }\n\n protected onConnect() {\n // Update merge tree collaboration information with new client ID and then resend pending ops\n this.client.startOrUpdateCollaboration(this.runtime.clientId);\n }\n\n protected onDisconnect() {}\n\n protected reSubmitCore(content: any, localOpMetadata: unknown) {\n if (!this.intervalMapKernel.trySubmitMessage(content, localOpMetadata)) {\n this.submitSequenceMessage(\n this.client.regeneratePendingOp(\n content as MergeTree.IMergeTreeOp,\n localOpMetadata as MergeTree.SegmentGroup | MergeTree.SegmentGroup[]));\n }\n }\n\n /**\n * {@inheritDoc @fluidframework/shared-object-base#SharedObject.loadCore}\n */\n protected async loadCore(storage: IChannelStorageService) {\n if (await storage.contains(snapshotFileName)) {\n const blob = await storage.readBlob(snapshotFileName);\n const header = bufferToString(blob, \"utf8\");\n this.intervalMapKernel.populate(header);\n }\n\n try {\n // this will load the header, and return a promise\n // that will resolve when the body is loaded\n // and the catchup ops are available.\n const { catchupOpsP } = await this.client.load(\n this.runtime,\n new ObjectStoragePartition(storage, contentPath),\n this.serializer);\n\n // setup a promise to process the\n // catch up ops, and finishing the loading process\n const loadCatchUpOps = catchupOpsP\n .then((msgs) => {\n msgs.forEach((m) => {\n const collabWindow = this.client.getCollabWindow();\n if (m.minimumSequenceNumber < collabWindow.minSeq\n || m.referenceSequenceNumber < collabWindow.minSeq\n || m.sequenceNumber <= collabWindow.minSeq\n || m.sequenceNumber <= collabWindow.currentSeq) {\n throw new Error(`Invalid catchup operations in snapshot: ${\n JSON.stringify({\n op:{\n seq: m.sequenceNumber,\n minSeq: m.minimumSequenceNumber,\n refSeq:m.referenceSequenceNumber,\n },\n collabWindow:{\n seq: collabWindow.currentSeq,\n minSeq: collabWindow.minSeq,\n },\n })}`);\n }\n this.processMergeTreeMsg(m);\n });\n this.loadFinished();\n })\n .catch((error) => {\n this.loadFinished(error);\n });\n if (this.dataStoreRuntime.options?.sequenceInitializeFromHeaderOnly !== true) {\n // if we not doing parital load, await the catch up ops,\n // and the finalization of the load\n await loadCatchUpOps;\n }\n } catch (error) {\n this.loadFinished(error);\n }\n }\n\n protected processCore(message: ISequencedDocumentMessage, local: boolean, localOpMetadata: unknown) {\n // if loading isn't complete, we need to cache all\n // incoming ops to be applied after loading is complete\n if (this.deferIncomingOps) {\n assert(!local, 0x072 /* \"Unexpected local op when loading not finished\" */);\n this.loadedDeferredIncomingOps.push(message);\n } else {\n assert(message.type === MessageType.Operation, 0x073 /* \"Sequence message not operation\" */);\n\n const handled = this.intervalMapKernel.tryProcessMessage(message.contents, local, message, localOpMetadata);\n\n if (!handled) {\n this.processMergeTreeMsg(message);\n }\n }\n }\n\n protected registerCore() {\n for (const value of this.intervalMapKernel.values()) {\n if (SharedObject.is(value)) {\n value.bindToContext();\n }\n }\n\n this.client.startOrUpdateCollaboration(this.runtime.clientId);\n }\n\n protected didAttach() {\n // If we are not local, and we've attached we need to start generating and sending ops\n // so start collaboration and provide a default client id incase we are not connected\n if (this.isAttached()) {\n this.client.startOrUpdateCollaboration(this.runtime.clientId ?? \"attached\");\n }\n }\n\n protected initializeLocalCore() {\n super.initializeLocalCore();\n this.loadFinished();\n }\n\n private snapshotMergeTree(serializer: IFluidSerializer): ITree {\n // Are we fully loaded? If not, things will go south\n assert(this.loadedDeferred.isCompleted, 0x074 /* \"Snapshot called when not fully loaded\" */);\n const minSeq = this.runtime.deltaManager.minimumSequenceNumber;\n\n this.processMinSequenceNumberChanged(minSeq);\n\n this.messagesSinceMSNChange.forEach((m) => m.minimumSequenceNumber = minSeq);\n\n return this.client.snapshot(this.runtime, this.handle, serializer, this.messagesSinceMSNChange);\n }\n\n private processMergeTreeMsg(\n rawMessage: ISequencedDocumentMessage) {\n const message = parseHandles(rawMessage, this.serializer);\n\n const ops: MergeTree.IMergeTreeDeltaOp[] = [];\n function transfromOps(event: SequenceDeltaEvent) {\n ops.push(...SharedSegmentSequence.createOpsFromDelta(event));\n }\n const needsTransformation = message.referenceSequenceNumber !== message.sequenceNumber - 1;\n let stashMessage: Readonly<ISequencedDocumentMessage> = message;\n if (this.runtime.options?.newMergeTreeSnapshotFormat !== true) {\n if (needsTransformation) {\n this.on(\"sequenceDelta\", transfromOps);\n }\n }\n\n this.client.applyMsg(message);\n\n if (this.runtime.options?.newMergeTreeSnapshotFormat !== true) {\n if (needsTransformation) {\n this.removeListener(\"sequenceDelta\", transfromOps);\n // shallow clone the message as we only overwrite top level properties,\n // like referenceSequenceNumber and content only\n stashMessage = {\n ... message,\n referenceSequenceNumber: stashMessage.sequenceNumber - 1,\n contents: ops.length !== 1 ? MergeTree.createGroupOp(...ops) : ops[0],\n };\n }\n\n this.messagesSinceMSNChange.push(stashMessage);\n\n // Do GC every once in a while...\n if (this.messagesSinceMSNChange.length > 20\n && this.messagesSinceMSNChange[20].sequenceNumber < message.minimumSequenceNumber) {\n this.processMinSequenceNumberChanged(message.minimumSequenceNumber);\n }\n }\n }\n\n private getIntervalCollectionPath(label: string) {\n return `intervalCollections/${label}`;\n }\n\n private processMinSequenceNumberChanged(minSeq: number) {\n let index = 0;\n for (; index < this.messagesSinceMSNChange.length; index++) {\n if (this.messagesSinceMSNChange[index].sequenceNumber > minSeq) {\n break;\n }\n }\n if (index !== 0) {\n this.messagesSinceMSNChange = this.messagesSinceMSNChange.slice(index);\n }\n }\n\n private loadFinished(error?: any) {\n if (!this.loadedDeferred.isCompleted) {\n // Initialize the interval collections\n this.initializeIntervalCollections();\n if (error) {\n this.loadedDeferred.reject(error);\n throw error;\n } else {\n // it is important this series remains synchronous\n // first we stop defering incoming ops, and apply then all\n this.deferIncomingOps = false;\n while (this.loadedDeferredIncomingOps.length > 0) {\n this.processCore(this.loadedDeferredIncomingOps.shift(), false, undefined);\n }\n // then resolve the loaded promise\n // and resubmit all the outstanding ops, as the snapshot\n // is fully loaded, and all outstanding ops are applied\n this.loadedDeferred.resolve();\n\n while (this.loadedDeferredOutgoingOps.length > 0) {\n const opData = this.loadedDeferredOutgoingOps.shift();\n this.reSubmitCore(opData[0], opData[1]);\n }\n }\n }\n }\n\n private initializeIntervalCollections() {\n // Listen and initialize new SharedIntervalCollections\n this.intervalMapKernel.eventEmitter.on(\"valueChanged\", (ev: IValueChanged) => {\n const intervalCollection = this.intervalMapKernel.get<IntervalCollection<SequenceInterval>>(ev.key);\n if (!intervalCollection.attached) {\n intervalCollection.attachGraph(this.client, ev.key);\n }\n });\n\n // Initialize existing SharedIntervalCollections\n for (const key of this.intervalMapKernel.keys()) {\n const intervalCollection = this.intervalMapKernel.get<IntervalCollection<SequenceInterval>>(key);\n intervalCollection.attachGraph(this.client, key);\n }\n }\n\n protected applyStashedOp() {\n throw new Error(\"not implemented\");\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sequence.js","sourceRoot":"","sources":["../src/sequence.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 */\nimport { Deferred, bufferToString, assert } from \"@fluidframework/common-utils\";\nimport { IFluidSerializer } from \"@fluidframework/core-interfaces\";\nimport { ChildLogger } from \"@fluidframework/telemetry-utils\";\nimport * as MergeTree from \"@fluidframework/merge-tree\";\nimport {\n FileMode,\n ISequencedDocumentMessage,\n ITree,\n MessageType,\n TreeEntry,\n} from \"@fluidframework/protocol-definitions\";\nimport {\n IChannelAttributes,\n IFluidDataStoreRuntime,\n IChannelStorageService,\n} from \"@fluidframework/datastore-definitions\";\nimport { ObjectStoragePartition } from \"@fluidframework/runtime-utils\";\nimport {\n makeHandlesSerializable,\n parseHandles,\n SharedObject,\n ISharedObjectEvents,\n SummarySerializer,\n} from \"@fluidframework/shared-object-base\";\nimport { IEventThisPlaceHolder } from \"@fluidframework/common-definitions\";\nimport { IGarbageCollectionData } from \"@fluidframework/runtime-definitions\";\n\nimport {\n IntervalCollection,\n SequenceInterval,\n SequenceIntervalCollectionValueType,\n} from \"./intervalCollection\";\nimport { MapKernel } from \"./mapKernel\";\nimport { IValueChanged } from \"./mapKernelInterfaces\";\nimport { SequenceDeltaEvent, SequenceMaintenanceEvent } from \"./sequenceDeltaEvent\";\nimport { ISharedIntervalCollection } from \"./sharedIntervalCollection\";\n\nconst snapshotFileName = \"header\";\nconst contentPath = \"content\";\n\n/**\n * Events emitted in response to changes to the sequence data.\n *\n * ### \"sequenceDelta\"\n *\n * The sequenceDelta event is emitted when segments are inserted, annotated, or removed.\n *\n * #### Listener signature\n *\n * ```typescript\n * (event: SequenceDeltaEvent, target: IEventThisPlaceHolder) => void\n * ```\n * - `event` - Various information on the segments that were modified.\n *\n * - `target` - The sequence itself.\n *\n * ### \"maintenance\"\n *\n * The maintenance event is emitted when segments are modified during merge-tree maintenance.\n *\n * #### Listener signature\n *\n * ```typescript\n * (event: SequenceMaintenanceEvent, target: IEventThisPlaceHolder) => void\n * ```\n * - `event` - Various information on the segments that were modified.\n *\n * - `target` - The sequence itself.\n */\nexport interface ISharedSegmentSequenceEvents extends ISharedObjectEvents {\n (event: \"sequenceDelta\", listener: (event: SequenceDeltaEvent, target: IEventThisPlaceHolder) => void);\n (event: \"maintenance\",\n listener: (event: SequenceMaintenanceEvent, target: IEventThisPlaceHolder) => void);\n}\n\nexport abstract class SharedSegmentSequence<T extends MergeTree.ISegment>\n extends SharedObject<ISharedSegmentSequenceEvents>\n implements ISharedIntervalCollection<SequenceInterval> {\n get loaded(): Promise<void> {\n return this.loadedDeferred.promise;\n }\n\n private static createOpsFromDelta(event: SequenceDeltaEvent): MergeTree.IMergeTreeDeltaOp[] {\n const ops: MergeTree.IMergeTreeDeltaOp[] = [];\n for (const r of event.ranges) {\n switch (event.deltaOperation) {\n case MergeTree.MergeTreeDeltaType.ANNOTATE: {\n const lastAnnotate = ops[ops.length - 1] as MergeTree.IMergeTreeAnnotateMsg;\n const props = {};\n for (const key of Object.keys(r.propertyDeltas)) {\n props[key] =\n // eslint-disable-next-line no-null/no-null\n r.segment.properties[key] === undefined ? null : r.segment.properties[key];\n }\n if (lastAnnotate && lastAnnotate.pos2 === r.position &&\n MergeTree.matchProperties(lastAnnotate.props, props)) {\n lastAnnotate.pos2 += r.segment.cachedLength;\n } else {\n ops.push(MergeTree.createAnnotateRangeOp(\n r.position,\n r.position + r.segment.cachedLength,\n props,\n undefined));\n }\n break;\n }\n\n case MergeTree.MergeTreeDeltaType.INSERT:\n ops.push(MergeTree.createInsertOp(\n r.position,\n r.segment.clone().toJSONObject()));\n break;\n\n case MergeTree.MergeTreeDeltaType.REMOVE: {\n const lastRem = ops[ops.length - 1] as MergeTree.IMergeTreeRemoveMsg;\n if (lastRem?.pos1 === r.position) {\n lastRem.pos2 += r.segment.cachedLength;\n } else {\n ops.push(MergeTree.createRemoveRangeOp(\n r.position,\n r.position + r.segment.cachedLength));\n }\n break;\n }\n\n default:\n }\n }\n return ops;\n }\n\n protected client: MergeTree.Client;\n // Deferred that triggers once the object is loaded\n protected loadedDeferred = new Deferred<void>();\n // cache out going ops created when parital loading\n private readonly loadedDeferredOutgoingOps:\n [MergeTree.IMergeTreeOp, MergeTree.SegmentGroup | MergeTree.SegmentGroup[]][] = [];\n // cache incoming ops that arrive when partial loading\n private deferIncomingOps = true;\n private readonly loadedDeferredIncomingOps: ISequencedDocumentMessage[] = [];\n\n private messagesSinceMSNChange: ISequencedDocumentMessage[] = [];\n private readonly intervalMapKernel: MapKernel;\n constructor(\n private readonly dataStoreRuntime: IFluidDataStoreRuntime,\n public id: string,\n attributes: IChannelAttributes,\n public readonly segmentFromSpec: (spec: MergeTree.IJSONSegment) => MergeTree.ISegment,\n ) {\n super(id, dataStoreRuntime, attributes);\n\n this.loadedDeferred.promise.catch((error)=>{\n this.logger.sendErrorEvent({ eventName: \"SequenceLoadFailed\" }, error);\n });\n\n this.client = new MergeTree.Client(\n segmentFromSpec,\n ChildLogger.create(this.logger, \"SharedSegmentSequence.MergeTreeClient\"),\n dataStoreRuntime.options);\n\n super.on(\"newListener\", (event) => {\n switch (event) {\n case \"sequenceDelta\":\n if (!this.client.mergeTreeDeltaCallback) {\n this.client.mergeTreeDeltaCallback = (opArgs, deltaArgs) => {\n this.emit(\"sequenceDelta\", new SequenceDeltaEvent(opArgs, deltaArgs, this.client), this);\n };\n }\n break;\n case \"maintenance\":\n if (!this.client.mergeTreeMaintenanceCallback) {\n this.client.mergeTreeMaintenanceCallback = (args, opArgs) => {\n this.emit(\"maintenance\", new SequenceMaintenanceEvent(opArgs, args, this.client), this);\n };\n }\n break;\n default:\n }\n });\n super.on(\"removeListener\", (event: string | symbol) => {\n switch (event) {\n case \"sequenceDelta\":\n if (super.listenerCount(event) === 0) {\n this.client.mergeTreeDeltaCallback = undefined;\n }\n break;\n case \"maintenance\":\n if (super.listenerCount(event) === 0) {\n this.client.mergeTreeMaintenanceCallback = undefined;\n }\n break;\n default:\n break;\n }\n });\n\n this.intervalMapKernel = new MapKernel(\n this.serializer,\n this.handle,\n (op, localOpMetadata) => this.submitLocalMessage(op, localOpMetadata),\n () => this.isAttached(),\n [new SequenceIntervalCollectionValueType()]);\n }\n\n /**\n * @param start - The inclusive start of the range to remove\n * @param end - The exclusive end of the range to remove\n */\n public removeRange(start: number, end: number) {\n const removeOp = this.client.removeRangeLocal(start, end);\n if (removeOp) {\n this.submitSequenceMessage(removeOp);\n }\n return removeOp;\n }\n\n /**\n * Removes the range and puts the content of the removed range in a register\n *\n * @param start - The inclusive start of the range to remove\n * @param end - The exclusive end of the range to remove\n * @param register - The name of the register to store the removed range in\n */\n public cut(start: number, end: number, register: string) {\n const removeOp = this.client.removeRangeLocal(start, end, register);\n if (removeOp) {\n this.submitSequenceMessage(removeOp);\n }\n }\n\n /**\n * Inserts the content of the register.\n *\n * @param pos - The position to insert the content at.\n * @param register - The name of the register to get the content from\n */\n public paste(pos: number, register: string) {\n const insertOp = this.client.pasteLocal(pos, register);\n if (insertOp) {\n this.submitSequenceMessage(insertOp);\n }\n return pos;\n }\n\n /**\n * Puts the content of the range in a register\n *\n * @param start - The inclusive start of the range\n * @param end - The exclusive end of the range\n * @param register - The name of the register to store the range in\n */\n public copy(start: number, end: number, register: string) {\n const insertOp = this.client.copyLocal(start, end, register);\n if (insertOp) {\n this.submitSequenceMessage(insertOp);\n }\n }\n\n public groupOperation(groupOp: MergeTree.IMergeTreeGroupMsg) {\n this.client.localTransaction(groupOp);\n this.submitSequenceMessage(groupOp);\n }\n\n public getContainingSegment(pos: number) {\n return this.client.getContainingSegment<T>(pos);\n }\n\n /**\n * Returns the length of the current sequence for the client\n */\n public getLength() {\n return this.client.getLength();\n }\n\n /**\n * Returns the current position of a segment, and -1 if the segment\n * does not exist in this sequence\n * @param segment - The segment to get the position of\n */\n public getPosition(segment: MergeTree.ISegment): number {\n return this.client.getPosition(segment);\n }\n\n /**\n * Annotates the range with the provided properties\n *\n * @param start - The inclusive start position of the range to annotate\n * @param end - The exclusive end position of the range to annotate\n * @param props - The properties to annotate the range with\n * @param combiningOp - Optional. Specifies how to combine values for the property, such as \"incr\" for increment.\n *\n */\n public annotateRange(\n start: number,\n end: number,\n props: MergeTree.PropertySet,\n combiningOp?: MergeTree.ICombiningOp) {\n const annotateOp =\n this.client.annotateRangeLocal(start, end, props, combiningOp);\n if (annotateOp) {\n this.submitSequenceMessage(annotateOp);\n }\n }\n\n public getPropertiesAtPosition(pos: number) {\n return this.client.getPropertiesAtPosition(pos);\n }\n\n public getRangeExtentsOfPosition(pos: number) {\n return this.client.getRangeExtentsOfPosition(pos);\n }\n\n public createPositionReference(\n segment: T,\n offset: number,\n refType: MergeTree.ReferenceType): MergeTree.LocalReference {\n const lref = new MergeTree.LocalReference(this.client, segment, offset, refType);\n if (refType !== MergeTree.ReferenceType.Transient) {\n this.addLocalReference(lref);\n }\n return lref;\n }\n\n public localRefToPos(localRef: MergeTree.LocalReference) {\n if (localRef.segment) {\n return localRef.offset + this.getPosition(localRef.segment);\n } else {\n return -1;\n }\n }\n\n /**\n * Resolves a remote client's position against the local sequence\n * and returns the remote client's position relative to the local\n * sequence\n * @param remoteClientPosition - The remote client's position to resolve\n * @param remoteClientRefSeq - The reference sequence number of the remote client\n * @param remoteClientId - The client id of the remote client\n */\n public resolveRemoteClientPosition(\n remoteClientPosition: number,\n remoteClientRefSeq: number,\n remoteClientId: string): number {\n return this.client.resolveRemoteClientPosition(\n remoteClientPosition,\n remoteClientRefSeq,\n remoteClientId);\n }\n\n public submitSequenceMessage(message: MergeTree.IMergeTreeOp) {\n if (!this.isAttached()) {\n return;\n }\n const translated = makeHandlesSerializable(message, this.serializer, this.handle);\n const metadata = this.client.peekPendingSegmentGroups(\n message.type === MergeTree.MergeTreeDeltaType.GROUP ? message.ops.length : 1);\n\n // if loading isn't complete, we need to cache\n // local ops until loading is complete, and then\n // they will be resent\n if (!this.loadedDeferred.isCompleted) {\n this.loadedDeferredOutgoingOps.push([translated, metadata]);\n } else {\n this.submitLocalMessage(translated, metadata);\n }\n }\n\n public addLocalReference(lref) {\n return this.client.addLocalReference(lref);\n }\n\n public removeLocalReference(lref) {\n return this.client.removeLocalReference(lref);\n }\n\n /**\n * Given a position specified relative to a marker id, lookup the marker\n * and convert the position to a character position.\n * @param relativePos - Id of marker (may be indirect) and whether position is before or after marker.\n */\n public posFromRelativePos(relativePos) {\n return this.client.posFromRelativePos(relativePos);\n }\n\n /**\n * Walk the underlying segments of the sequence.\n * The walked segments may extend beyond the range\n * if the segments cross the ranges start or end boundaries.\n * Set split range to true to ensure only segments within the\n * range are walked.\n *\n * @param handler - The function to handle each segment\n * @param start - Optional. The start of range walk.\n * @param end - Optional. The end of range walk\n * @param accum - Optional. An object that will be passed to the handler for accumulation\n * @param splitRange - Optional. Splits boundary segments on the range boundaries\n */\n public walkSegments<TClientData>(\n handler: MergeTree.ISegmentAction<TClientData>,\n start?: number, end?: number, accum?: TClientData,\n splitRange: boolean = false) {\n return this.client.walkSegments<TClientData>(handler, start, end, accum, splitRange);\n }\n\n public getStackContext(startPos: number, rangeLabels: string[]) {\n return this.client.getStackContext(startPos, rangeLabels);\n }\n\n public getCurrentSeq() {\n return this.client.getCurrentSeq();\n }\n\n public insertAtReferencePosition(pos: MergeTree.ReferencePosition, segment: T) {\n const insertOp = this.client.insertAtReferencePositionLocal(pos, segment);\n if (insertOp) {\n this.submitSequenceMessage(insertOp);\n }\n }\n\n public async waitIntervalCollection(\n label: string,\n ): Promise<IntervalCollection<SequenceInterval>> {\n return this.intervalMapKernel.wait<IntervalCollection<SequenceInterval>>(\n this.getIntervalCollectionPath(label));\n }\n\n // TODO: fix race condition on creation by putting type on every operation\n public getIntervalCollection(label: string): IntervalCollection<SequenceInterval> {\n const labelPath = this.getIntervalCollectionPath(label);\n if (!this.intervalMapKernel.has(labelPath)) {\n this.intervalMapKernel.createValueType(\n labelPath,\n SequenceIntervalCollectionValueType.Name,\n undefined);\n }\n\n const sharedCollection =\n this.intervalMapKernel.get<IntervalCollection<SequenceInterval>>(labelPath);\n return sharedCollection;\n }\n\n protected snapshotCore(serializer: IFluidSerializer): ITree {\n const entries = [];\n // conditionally write the interval collection blob\n // only if it has entries\n if (this.intervalMapKernel.size > 0) {\n entries.push(\n {\n mode: FileMode.File,\n path: snapshotFileName,\n type: TreeEntry.Blob,\n value: {\n contents: this.intervalMapKernel.serialize(serializer),\n encoding: \"utf-8\",\n },\n });\n }\n entries.push(\n {\n mode: FileMode.Directory,\n path: contentPath,\n type: TreeEntry.Tree,\n value: this.snapshotMergeTree(serializer),\n });\n const tree: ITree = {\n entries,\n };\n\n return tree;\n }\n\n /**\n * Returns the GC data for this SharedMatrix. All the IFluidHandle's represent routes to other objects.\n */\n protected getGCDataCore(): IGarbageCollectionData {\n // Create a SummarySerializer and use it to serialize all the cells. It keeps track of all IFluidHandles that it\n // serializes.\n const serializer = new SummarySerializer(this.runtime.channelsRoutingContext);\n\n if (this.intervalMapKernel.size > 0) {\n this.intervalMapKernel.serialize(serializer);\n }\n\n this.client.serializeGCData(this.handle, serializer);\n\n return {\n gcNodes:{\n [\"/\"]: serializer.getSerializedRoutes(),\n },\n };\n }\n\n /**\n * Replace the range specified from start to end with the provided segment\n * This is done by inserting the segment at the end of the range, followed\n * by removing the contents of the range\n * For a zero or reverse range (start \\>= end), insert at end do not remove anything\n * @param start - The start of the range to replace\n * @param end - The end of the range to replace\n * @param segment - The segment that will replace the range\n */\n protected replaceRange(start: number, end: number, segment: MergeTree.ISegment) {\n // Insert at the max end of the range when start > end, but still remove the range later\n const insertIndex: number = Math.max(start, end);\n\n // Insert first, so local references can slide to the inserted seg if any\n const insert = this.client.insertSegmentLocal(insertIndex, segment);\n if (insert) {\n if (start < end) {\n const remove = this.client.removeRangeLocal(start, end);\n this.submitSequenceMessage(MergeTree.createGroupOp(insert, remove));\n } else {\n this.submitSequenceMessage(insert);\n }\n }\n }\n\n protected onConnect() {\n // Update merge tree collaboration information with new client ID and then resend pending ops\n this.client.startOrUpdateCollaboration(this.runtime.clientId);\n }\n\n protected onDisconnect() {}\n\n protected reSubmitCore(content: any, localOpMetadata: unknown) {\n if (!this.intervalMapKernel.trySubmitMessage(content, localOpMetadata)) {\n this.submitSequenceMessage(\n this.client.regeneratePendingOp(\n content as MergeTree.IMergeTreeOp,\n localOpMetadata as MergeTree.SegmentGroup | MergeTree.SegmentGroup[]));\n }\n }\n\n /**\n * {@inheritDoc @fluidframework/shared-object-base#SharedObject.loadCore}\n */\n protected async loadCore(storage: IChannelStorageService) {\n if (await storage.contains(snapshotFileName)) {\n const blob = await storage.readBlob(snapshotFileName);\n const header = bufferToString(blob, \"utf8\");\n this.intervalMapKernel.populate(header);\n }\n\n try {\n // this will load the header, and return a promise\n // that will resolve when the body is loaded\n // and the catchup ops are available.\n const { catchupOpsP } = await this.client.load(\n this.runtime,\n new ObjectStoragePartition(storage, contentPath),\n this.serializer);\n\n // setup a promise to process the\n // catch up ops, and finishing the loading process\n const loadCatchUpOps = catchupOpsP\n .then((msgs) => {\n msgs.forEach((m) => {\n const collabWindow = this.client.getCollabWindow();\n if (m.minimumSequenceNumber < collabWindow.minSeq\n || m.referenceSequenceNumber < collabWindow.minSeq\n || m.sequenceNumber <= collabWindow.minSeq\n || m.sequenceNumber <= collabWindow.currentSeq) {\n throw new Error(`Invalid catchup operations in snapshot: ${\n JSON.stringify({\n op:{\n seq: m.sequenceNumber,\n minSeq: m.minimumSequenceNumber,\n refSeq:m.referenceSequenceNumber,\n },\n collabWindow:{\n seq: collabWindow.currentSeq,\n minSeq: collabWindow.minSeq,\n },\n })}`);\n }\n this.processMergeTreeMsg(m);\n });\n this.loadFinished();\n })\n .catch((error) => {\n this.loadFinished(error);\n });\n if (this.dataStoreRuntime.options?.sequenceInitializeFromHeaderOnly !== true) {\n // if we not doing parital load, await the catch up ops,\n // and the finalization of the load\n await loadCatchUpOps;\n }\n } catch (error) {\n this.loadFinished(error);\n }\n }\n\n protected processCore(message: ISequencedDocumentMessage, local: boolean, localOpMetadata: unknown) {\n // if loading isn't complete, we need to cache all\n // incoming ops to be applied after loading is complete\n if (this.deferIncomingOps) {\n assert(!local, 0x072 /* \"Unexpected local op when loading not finished\" */);\n this.loadedDeferredIncomingOps.push(message);\n } else {\n assert(message.type === MessageType.Operation, 0x073 /* \"Sequence message not operation\" */);\n\n const handled = this.intervalMapKernel.tryProcessMessage(message.contents, local, message, localOpMetadata);\n\n if (!handled) {\n this.processMergeTreeMsg(message);\n }\n }\n }\n\n protected registerCore() {\n for (const value of this.intervalMapKernel.values()) {\n if (SharedObject.is(value)) {\n value.bindToContext();\n }\n }\n\n this.client.startOrUpdateCollaboration(this.runtime.clientId);\n }\n\n protected didAttach() {\n // If we are not local, and we've attached we need to start generating and sending ops\n // so start collaboration and provide a default client id incase we are not connected\n if (this.isAttached()) {\n this.client.startOrUpdateCollaboration(this.runtime.clientId ?? \"attached\");\n }\n }\n\n protected initializeLocalCore() {\n super.initializeLocalCore();\n this.loadFinished();\n }\n\n private snapshotMergeTree(serializer: IFluidSerializer): ITree {\n // Are we fully loaded? If not, things will go south\n assert(this.loadedDeferred.isCompleted, 0x074 /* \"Snapshot called when not fully loaded\" */);\n const minSeq = this.runtime.deltaManager.minimumSequenceNumber;\n\n this.processMinSequenceNumberChanged(minSeq);\n\n this.messagesSinceMSNChange.forEach((m) => m.minimumSequenceNumber = minSeq);\n\n return this.client.snapshot(this.runtime, this.handle, serializer, this.messagesSinceMSNChange);\n }\n\n private processMergeTreeMsg(\n rawMessage: ISequencedDocumentMessage) {\n const message = parseHandles(rawMessage, this.serializer);\n\n const ops: MergeTree.IMergeTreeDeltaOp[] = [];\n function transfromOps(event: SequenceDeltaEvent) {\n ops.push(...SharedSegmentSequence.createOpsFromDelta(event));\n }\n const needsTransformation = message.referenceSequenceNumber !== message.sequenceNumber - 1;\n let stashMessage: Readonly<ISequencedDocumentMessage> = message;\n if (this.runtime.options?.newMergeTreeSnapshotFormat !== true) {\n if (needsTransformation) {\n this.on(\"sequenceDelta\", transfromOps);\n }\n }\n\n this.client.applyMsg(message);\n\n if (this.runtime.options?.newMergeTreeSnapshotFormat !== true) {\n if (needsTransformation) {\n this.removeListener(\"sequenceDelta\", transfromOps);\n // shallow clone the message as we only overwrite top level properties,\n // like referenceSequenceNumber and content only\n stashMessage = {\n ... message,\n referenceSequenceNumber: stashMessage.sequenceNumber - 1,\n contents: ops.length !== 1 ? MergeTree.createGroupOp(...ops) : ops[0],\n };\n }\n\n this.messagesSinceMSNChange.push(stashMessage);\n\n // Do GC every once in a while...\n if (this.messagesSinceMSNChange.length > 20\n && this.messagesSinceMSNChange[20].sequenceNumber < message.minimumSequenceNumber) {\n this.processMinSequenceNumberChanged(message.minimumSequenceNumber);\n }\n }\n }\n\n private getIntervalCollectionPath(label: string) {\n return `intervalCollections/${label}`;\n }\n\n private processMinSequenceNumberChanged(minSeq: number) {\n let index = 0;\n for (; index < this.messagesSinceMSNChange.length; index++) {\n if (this.messagesSinceMSNChange[index].sequenceNumber > minSeq) {\n break;\n }\n }\n if (index !== 0) {\n this.messagesSinceMSNChange = this.messagesSinceMSNChange.slice(index);\n }\n }\n\n private loadFinished(error?: any) {\n if (!this.loadedDeferred.isCompleted) {\n // Initialize the interval collections\n this.initializeIntervalCollections();\n if (error) {\n this.loadedDeferred.reject(error);\n throw error;\n } else {\n // it is important this series remains synchronous\n // first we stop defering incoming ops, and apply then all\n this.deferIncomingOps = false;\n while (this.loadedDeferredIncomingOps.length > 0) {\n this.processCore(this.loadedDeferredIncomingOps.shift(), false, undefined);\n }\n // then resolve the loaded promise\n // and resubmit all the outstanding ops, as the snapshot\n // is fully loaded, and all outstanding ops are applied\n this.loadedDeferred.resolve();\n\n while (this.loadedDeferredOutgoingOps.length > 0) {\n const opData = this.loadedDeferredOutgoingOps.shift();\n this.reSubmitCore(opData[0], opData[1]);\n }\n }\n }\n }\n\n private initializeIntervalCollections() {\n // Listen and initialize new SharedIntervalCollections\n this.intervalMapKernel.eventEmitter.on(\"valueChanged\", (ev: IValueChanged) => {\n const intervalCollection = this.intervalMapKernel.get<IntervalCollection<SequenceInterval>>(ev.key);\n if (!intervalCollection.attached) {\n intervalCollection.attachGraph(this.client, ev.key);\n }\n });\n\n // Initialize existing SharedIntervalCollections\n for (const key of this.intervalMapKernel.keys()) {\n const intervalCollection = this.intervalMapKernel.get<IntervalCollection<SequenceInterval>>(key);\n intervalCollection.attachGraph(this.client, key);\n }\n }\n\n protected applyStashedOp() {\n throw new Error(\"not implemented\");\n }\n}\n"]}
|
|
@@ -28,7 +28,13 @@ export declare abstract class SequenceEvent<TOperation extends MergeTreeDeltaOpe
|
|
|
28
28
|
* The client id of the client that made the change which caused the delta event
|
|
29
29
|
*/
|
|
30
30
|
get clientId(): string;
|
|
31
|
+
/**
|
|
32
|
+
* The first of the modified ranges.
|
|
33
|
+
*/
|
|
31
34
|
get first(): Readonly<ISequenceDeltaRange<TOperation>>;
|
|
35
|
+
/**
|
|
36
|
+
* The last of the modified ranges.
|
|
37
|
+
*/
|
|
32
38
|
get last(): Readonly<ISequenceDeltaRange<TOperation>>;
|
|
33
39
|
}
|
|
34
40
|
/**
|
|
@@ -44,6 +50,9 @@ export declare abstract class SequenceEvent<TOperation extends MergeTreeDeltaOpe
|
|
|
44
50
|
*/
|
|
45
51
|
export declare class SequenceDeltaEvent extends SequenceEvent<MergeTreeDeltaOperationType> {
|
|
46
52
|
readonly opArgs: IMergeTreeDeltaOpArgs;
|
|
53
|
+
/**
|
|
54
|
+
* Whether the event was caused by a locally-made change.
|
|
55
|
+
*/
|
|
47
56
|
readonly isLocal: boolean;
|
|
48
57
|
constructor(opArgs: IMergeTreeDeltaOpArgs, deltaArgs: IMergeTreeDeltaCallbackArgs, mergeTreeClient: Client);
|
|
49
58
|
}
|
|
@@ -58,9 +67,18 @@ export declare class SequenceMaintenanceEvent extends SequenceEvent<MergeTreeMai
|
|
|
58
67
|
readonly opArgs: IMergeTreeDeltaOpArgs | undefined;
|
|
59
68
|
constructor(opArgs: IMergeTreeDeltaOpArgs | undefined, deltaArgs: IMergeTreeMaintenanceCallbackArgs, mergeTreeClient: Client);
|
|
60
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* A range that has changed corresponding to a segment modification.
|
|
72
|
+
*/
|
|
61
73
|
export interface ISequenceDeltaRange<TOperation extends MergeTreeDeltaOperationTypes = MergeTreeDeltaOperationTypes> {
|
|
62
74
|
operation: TOperation;
|
|
75
|
+
/**
|
|
76
|
+
* The index of the start of the range.
|
|
77
|
+
*/
|
|
63
78
|
position: number;
|
|
79
|
+
/**
|
|
80
|
+
* The segment that corresponds to the range.
|
|
81
|
+
*/
|
|
64
82
|
segment: ISegment;
|
|
65
83
|
propertyDeltas: PropertySet;
|
|
66
84
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequenceDeltaEvent.d.ts","sourceRoot":"","sources":["../src/sequenceDeltaEvent.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACH,MAAM,EACN,2BAA2B,EAC3B,qBAAqB,EACrB,iCAAiC,EACjC,QAAQ,EACR,2BAA2B,EAC3B,4BAA4B,EAC5B,wBAAwB,EACxB,WAAW,EAEd,MAAM,4BAA4B,CAAC;AAEpC;;;;;;GAMG;AACH,8BAAsB,aAAa,CAAC,UAAU,SAAS,4BAA4B,GAAG,4BAA4B;aAQ1F,SAAS,EAAE,2BAA2B,CAAC,UAAU,CAAC;IAClE,OAAO,CAAC,QAAQ,CAAC,eAAe;IARpC,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,SAAgB,cAAc,EAAE,UAAU,CAAC;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA0D;IACvF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;IAC/D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwC;gBAG1C,SAAS,EAAE,2BAA2B,CAAC,UAAU,CAAC,EACjD,eAAe,EAAE,MAAM;IAqC5C;;;OAGG;IACH,IAAW,MAAM,IAAI,SAAS,QAAQ,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,EAAE,CAExE;IAED;;OAEG;IACH,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED,IAAW,KAAK,IAAI,QAAQ,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAE5D;IAED,IAAW,IAAI,IAAI,QAAQ,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAE3D;CACJ;AAED;;;;;;;;;;GAUG;AACH,qBAAa,kBAAmB,SAAQ,aAAa,CAAC,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"sequenceDeltaEvent.d.ts","sourceRoot":"","sources":["../src/sequenceDeltaEvent.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACH,MAAM,EACN,2BAA2B,EAC3B,qBAAqB,EACrB,iCAAiC,EACjC,QAAQ,EACR,2BAA2B,EAC3B,4BAA4B,EAC5B,wBAAwB,EACxB,WAAW,EAEd,MAAM,4BAA4B,CAAC;AAEpC;;;;;;GAMG;AACH,8BAAsB,aAAa,CAAC,UAAU,SAAS,4BAA4B,GAAG,4BAA4B;aAQ1F,SAAS,EAAE,2BAA2B,CAAC,UAAU,CAAC;IAClE,OAAO,CAAC,QAAQ,CAAC,eAAe;IARpC,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,SAAgB,cAAc,EAAE,UAAU,CAAC;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA0D;IACvF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;IAC/D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwC;gBAG1C,SAAS,EAAE,2BAA2B,CAAC,UAAU,CAAC,EACjD,eAAe,EAAE,MAAM;IAqC5C;;;OAGG;IACH,IAAW,MAAM,IAAI,SAAS,QAAQ,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,EAAE,CAExE;IAED;;OAEG;IACH,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED;;OAEG;IACH,IAAW,KAAK,IAAI,QAAQ,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAE5D;IAED;;OAEG;IACH,IAAW,IAAI,IAAI,QAAQ,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAE3D;CACJ;AAED;;;;;;;;;;GAUG;AACH,qBAAa,kBAAmB,SAAQ,aAAa,CAAC,2BAA2B,CAAC;aAO1D,MAAM,EAAE,qBAAqB;IANjD;;OAEG;IACH,SAAgB,OAAO,EAAE,OAAO,CAAC;gBAGb,MAAM,EAAE,qBAAqB,EAC7C,SAAS,EAAE,2BAA2B,EACtC,eAAe,EAAE,MAAM;CAK9B;AAED;;;;;;GAMG;AACH,qBAAa,wBAAyB,SAAQ,aAAa,CAAC,wBAAwB,CAAC;aAE7D,MAAM,EAAE,qBAAqB,GAAG,SAAS;gBAAzC,MAAM,EAAE,qBAAqB,GAAG,SAAS,EACzD,SAAS,EAAE,iCAAiC,EAC5C,eAAe,EAAE,MAAM;CAI9B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB,CAAC,UAAU,SAAS,4BAA4B,GAAG,4BAA4B;IAC/G,SAAS,EAAE,UAAU,CAAC;IACtB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,OAAO,EAAE,QAAQ,CAAC;IAClB,cAAc,EAAE,WAAW,CAAC;CAC/B"}
|
|
@@ -58,9 +58,15 @@ class SequenceEvent {
|
|
|
58
58
|
get clientId() {
|
|
59
59
|
return this.mergeTreeClient.longClientId;
|
|
60
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* The first of the modified ranges.
|
|
63
|
+
*/
|
|
61
64
|
get first() {
|
|
62
65
|
return this.pFirst.value;
|
|
63
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* The last of the modified ranges.
|
|
69
|
+
*/
|
|
64
70
|
get last() {
|
|
65
71
|
return this.pLast.value;
|
|
66
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequenceDeltaEvent.js","sourceRoot":"","sources":["../src/sequenceDeltaEvent.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,2DAWoC;AAEpC;;;;;;GAMG;AACH,MAAsB,aAAa;IAO/B,YACoB,SAAkD,EACjD,eAAuB;QADxB,cAAS,GAAT,SAAS,CAAyC;QACjD,oBAAe,GAAf,eAAe,CAAQ;QAExC,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC;QACpD,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,SAAS,CAAC;QAE1C,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,CACxB,GAAG,EAAE;YACD,MAAM,GAAG,GAAG,IAAI,6BAAgB,EAAmC,CAAC;YACpE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC3C,MAAM,QAAQ,GAAoC;oBAC9C,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS;oBACnC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC;oBACzD,cAAc,EAAE,KAAK,CAAC,cAAc;oBACpC,OAAO,EAAE,KAAK,CAAC,OAAO;iBACzB,CAAC;gBACF,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC;YACH,OAAO,GAAG,CAAC;QACf,CAAC,CAAC,CAAC;QAEP,IAAI,CAAC,MAAM,GAAG,IAAI,IAAI,CAClB,GAAG,EAAE;YACD,IAAI,IAAI,CAAC,OAAO,EAAE;gBACd,OAAO,SAAS,CAAC;aACpB;YACD,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEP,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,CACjB,GAAG,EAAE;YACD,IAAI,IAAI,CAAC,OAAO,EAAE;gBACd,OAAO,SAAS,CAAC;aACpB;YACD,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACX,CAAC;IAED;;;OAGG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC;IAC7C,CAAC;IAED,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IAC7B,CAAC;IAED,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC5B,CAAC;CACJ;
|
|
1
|
+
{"version":3,"file":"sequenceDeltaEvent.js","sourceRoot":"","sources":["../src/sequenceDeltaEvent.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 {\n Client,\n IMergeTreeDeltaCallbackArgs,\n IMergeTreeDeltaOpArgs,\n IMergeTreeMaintenanceCallbackArgs,\n ISegment,\n MergeTreeDeltaOperationType,\n MergeTreeDeltaOperationTypes,\n MergeTreeMaintenanceType,\n PropertySet,\n SortedSegmentSet,\n} from \"@fluidframework/merge-tree\";\n\n/**\n * Base class for SequenceDeltaEvent and SequenceMaintenanceEvent.\n *\n * The properties of this object and its sub-objects represent a point in time state\n * at the time the operation was applied. They will not take into any future modifications\n * performed to the underlying sequence and merge tree.\n */\nexport abstract class SequenceEvent<TOperation extends MergeTreeDeltaOperationTypes = MergeTreeDeltaOperationTypes> {\n public readonly isEmpty: boolean;\n public readonly deltaOperation: TOperation;\n private readonly sortedRanges: Lazy<SortedSegmentSet<ISequenceDeltaRange<TOperation>>>;\n private readonly pFirst: Lazy<ISequenceDeltaRange<TOperation>>;\n private readonly pLast: Lazy<ISequenceDeltaRange<TOperation>>;\n\n constructor(\n public readonly deltaArgs: IMergeTreeDeltaCallbackArgs<TOperation>,\n private readonly mergeTreeClient: Client,\n ) {\n this.isEmpty = deltaArgs.deltaSegments.length === 0;\n this.deltaOperation = deltaArgs.operation;\n\n this.sortedRanges = new Lazy<SortedSegmentSet<ISequenceDeltaRange<TOperation>>>(\n () => {\n const set = new SortedSegmentSet<ISequenceDeltaRange<TOperation>>();\n this.deltaArgs.deltaSegments.forEach((delta) => {\n const newRange: ISequenceDeltaRange<TOperation> = {\n operation: this.deltaArgs.operation,\n position: this.mergeTreeClient.getPosition(delta.segment),\n propertyDeltas: delta.propertyDeltas,\n segment: delta.segment,\n };\n set.addOrUpdate(newRange);\n });\n return set;\n });\n\n this.pFirst = new Lazy<ISequenceDeltaRange<TOperation>>(\n () => {\n if (this.isEmpty) {\n return undefined;\n }\n return this.sortedRanges.value.items[0];\n });\n\n this.pLast = new Lazy<ISequenceDeltaRange<TOperation>>(\n () => {\n if (this.isEmpty) {\n return undefined;\n }\n return this.sortedRanges.value.items[this.sortedRanges.value.size - 1];\n });\n }\n\n /**\n * The in-order ranges affected by this delta.\n * These may not be continous.\n */\n public get ranges(): readonly Readonly<ISequenceDeltaRange<TOperation>>[] {\n return this.sortedRanges.value.items;\n }\n\n /**\n * The client id of the client that made the change which caused the delta event\n */\n public get clientId(): string {\n return this.mergeTreeClient.longClientId;\n }\n\n /**\n * The first of the modified ranges.\n */\n public get first(): Readonly<ISequenceDeltaRange<TOperation>> {\n return this.pFirst.value;\n }\n\n /**\n * The last of the modified ranges.\n */\n public get last(): Readonly<ISequenceDeltaRange<TOperation>> {\n return this.pLast.value;\n }\n}\n\n/**\n * The event object returned on sequenceDelta events.\n *\n * The properties of this object and its sub-objects represent a point in time state\n * at the time the operation was applied. They will not take into any future modifications\n * performed to the underlying sequence and merge tree.\n *\n * For group ops, each op will get it's own event, and the group op property will be set on the op args.\n *\n * Ops may get multiple events. For instance, an insert-replace will get a remove then an insert event.\n */\nexport class SequenceDeltaEvent extends SequenceEvent<MergeTreeDeltaOperationType> {\n /**\n * Whether the event was caused by a locally-made change.\n */\n public readonly isLocal: boolean;\n\n constructor(\n public readonly opArgs: IMergeTreeDeltaOpArgs,\n deltaArgs: IMergeTreeDeltaCallbackArgs,\n mergeTreeClient: Client,\n ) {\n super(deltaArgs, mergeTreeClient);\n this.isLocal = opArgs.sequencedMessage === undefined;\n }\n}\n\n/**\n * The event object returned on maintenance events.\n *\n * The properties of this object and its sub-objects represent a point in time state\n * at the time the operation was applied. They will not take into any future modifications\n * performed to the underlying sequence and merge tree.\n */\nexport class SequenceMaintenanceEvent extends SequenceEvent<MergeTreeMaintenanceType> {\n constructor(\n public readonly opArgs: IMergeTreeDeltaOpArgs | undefined,\n deltaArgs: IMergeTreeMaintenanceCallbackArgs,\n mergeTreeClient: Client,\n ) {\n super(deltaArgs, mergeTreeClient);\n }\n}\n\n/**\n * A range that has changed corresponding to a segment modification.\n */\nexport interface ISequenceDeltaRange<TOperation extends MergeTreeDeltaOperationTypes = MergeTreeDeltaOperationTypes> {\n operation: TOperation;\n /**\n * The index of the start of the range.\n */\n position: number;\n /**\n * The segment that corresponds to the range.\n */\n segment: ISegment;\n propertyDeltas: PropertySet;\n}\n\nclass Lazy<T> {\n private pValue: T;\n private pEvaluated: boolean;\n constructor(private readonly valueGenerator: () => T) {\n this.pEvaluated = false;\n }\n\n public get evaluated(): boolean {\n return this.pEvaluated;\n }\n\n public get value(): T {\n if (!this.pEvaluated) {\n this.pEvaluated = true;\n this.pValue = this.valueGenerator();\n }\n return this.pValue;\n }\n}\n"]}
|
package/dist/sharedString.d.ts
CHANGED
|
@@ -10,14 +10,29 @@ import { SharedStringFactory } from "./sequenceFactory";
|
|
|
10
10
|
* Fluid object interface describing access methods on a SharedString
|
|
11
11
|
*/
|
|
12
12
|
export interface ISharedString extends SharedSegmentSequence<SharedStringSegment> {
|
|
13
|
+
/**
|
|
14
|
+
* Inserts the text at the position.
|
|
15
|
+
* @param pos - The position to insert the text at
|
|
16
|
+
* @param text - The text to insert
|
|
17
|
+
* @param props - The properties of text
|
|
18
|
+
*/
|
|
13
19
|
insertText(pos: number, text: string, props?: MergeTree.PropertySet): any;
|
|
20
|
+
/**
|
|
21
|
+
* Inserts a marker at the position.
|
|
22
|
+
* @param pos - The position to insert the marker at
|
|
23
|
+
* @param refType - The reference type of the marker
|
|
24
|
+
* @param props - The properties of the marker
|
|
25
|
+
*/
|
|
14
26
|
insertMarker(pos: number, refType: MergeTree.ReferenceType, props?: MergeTree.PropertySet): any;
|
|
27
|
+
/**
|
|
28
|
+
* {@inheritDoc SharedSegmentSequence.posFromRelativePos}
|
|
29
|
+
*/
|
|
15
30
|
posFromRelativePos(relativePos: MergeTree.IRelativePosition): any;
|
|
16
31
|
}
|
|
17
32
|
export declare type SharedStringSegment = MergeTree.TextSegment | MergeTree.Marker;
|
|
18
33
|
/**
|
|
19
34
|
* The Shared String is a specialized data structure for handling collaborative
|
|
20
|
-
*
|
|
35
|
+
* text. It is based on a more general Sequence data structure but has
|
|
21
36
|
* additional features that make working with text easier.
|
|
22
37
|
*
|
|
23
38
|
* In addition to text, a Shared String can also contain markers. Markers can be
|
|
@@ -28,8 +43,7 @@ export declare type SharedStringSegment = MergeTree.TextSegment | MergeTree.Mark
|
|
|
28
43
|
export declare class SharedString extends SharedSegmentSequence<SharedStringSegment> implements ISharedString {
|
|
29
44
|
id: string;
|
|
30
45
|
/**
|
|
31
|
-
* Create a new shared string
|
|
32
|
-
*
|
|
46
|
+
* Create a new shared string.
|
|
33
47
|
* @param runtime - data store runtime the new shared string belongs to
|
|
34
48
|
* @param id - optional name of the shared string
|
|
35
49
|
* @returns newly create shared string (but not attached yet)
|
|
@@ -37,7 +51,6 @@ export declare class SharedString extends SharedSegmentSequence<SharedStringSegm
|
|
|
37
51
|
static create(runtime: IFluidDataStoreRuntime, id?: string): SharedString;
|
|
38
52
|
/**
|
|
39
53
|
* Get a factory for SharedString to register with the data store.
|
|
40
|
-
*
|
|
41
54
|
* @returns a factory that creates and load SharedString
|
|
42
55
|
*/
|
|
43
56
|
static getFactory(): SharedStringFactory;
|
|
@@ -45,59 +58,51 @@ export declare class SharedString extends SharedSegmentSequence<SharedStringSegm
|
|
|
45
58
|
private readonly mergeTreeTextHelper;
|
|
46
59
|
constructor(document: IFluidDataStoreRuntime, id: string, attributes: IChannelAttributes);
|
|
47
60
|
/**
|
|
48
|
-
* Inserts a marker at a relative
|
|
49
|
-
*
|
|
50
|
-
* @param relativePos1 - The relative postition to insert the marker at
|
|
61
|
+
* Inserts a marker at a relative position.
|
|
62
|
+
* @param relativePos1 - The relative position to insert the marker at
|
|
51
63
|
* @param refType - The reference type of the marker
|
|
52
64
|
* @param props - The properties of the marker
|
|
53
65
|
*/
|
|
54
66
|
insertMarkerRelative(relativePos1: MergeTree.IRelativePosition, refType: MergeTree.ReferenceType, props?: MergeTree.PropertySet): void;
|
|
55
67
|
/**
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
* @param pos - The postition to insert the marker at
|
|
59
|
-
* @param refType - The reference type of the marker
|
|
60
|
-
* @param props - The properties of the marker
|
|
68
|
+
* {@inheritDoc ISharedString.insertMarker}
|
|
61
69
|
*/
|
|
62
70
|
insertMarker(pos: number, refType: MergeTree.ReferenceType, props?: MergeTree.PropertySet): MergeTree.IMergeTreeInsertMsg;
|
|
63
71
|
/**
|
|
64
|
-
* Inserts the text at the
|
|
65
|
-
*
|
|
66
|
-
* @param relativePos1 - The relative postition to insert the text at
|
|
72
|
+
* Inserts the text at the position.
|
|
73
|
+
* @param relativePos1 - The relative position to insert the text at
|
|
67
74
|
* @param text - The text to insert
|
|
68
75
|
* @param props - The properties of text
|
|
69
76
|
*/
|
|
70
77
|
insertTextRelative(relativePos1: MergeTree.IRelativePosition, text: string, props?: MergeTree.PropertySet): void;
|
|
71
78
|
/**
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
* @param pos - The postition to insert the text at
|
|
75
|
-
* @param text - The text to insert
|
|
76
|
-
* @param props - The properties of text
|
|
79
|
+
* {@inheritDoc ISharedString.insertText}
|
|
77
80
|
*/
|
|
78
81
|
insertText(pos: number, text: string, props?: MergeTree.PropertySet): void;
|
|
79
82
|
/**
|
|
80
83
|
* Replaces a range with the provided text.
|
|
81
|
-
*
|
|
82
84
|
* @param start - The inclusive start of the range to replace
|
|
83
85
|
* @param end - The exclusive end of the range to replace
|
|
84
86
|
* @param text - The text to replace the range with
|
|
85
87
|
* @param props - Optional. The properties of the replacement text
|
|
86
88
|
*/
|
|
87
89
|
replaceText(start: number, end: number, text: string, props?: MergeTree.PropertySet): void;
|
|
90
|
+
/**
|
|
91
|
+
* Removes the text in the given range.
|
|
92
|
+
* @param start - The inclusive start of the range to remove
|
|
93
|
+
* @param end - The exclusive end of the range to replace
|
|
94
|
+
* @returns the message sent.
|
|
95
|
+
*/
|
|
88
96
|
removeText(start: number, end: number): MergeTree.IMergeTreeRemoveMsg;
|
|
89
97
|
/**
|
|
90
|
-
* Annotates the marker with the provided properties
|
|
91
|
-
* and calls the callback on concensus.
|
|
92
|
-
*
|
|
98
|
+
* Annotates the marker with the provided properties and calls the callback on consensus.
|
|
93
99
|
* @param marker - The marker to annotate
|
|
94
100
|
* @param props - The properties to annotate the marker with
|
|
95
101
|
* @param consensusCallback - The callback called when consensus is reached
|
|
96
102
|
*/
|
|
97
103
|
annotateMarkerNotifyConsensus(marker: MergeTree.Marker, props: MergeTree.PropertySet, callback: (m: MergeTree.Marker) => void): void;
|
|
98
104
|
/**
|
|
99
|
-
* Annotates the marker with the provided properties
|
|
100
|
-
*
|
|
105
|
+
* Annotates the marker with the provided properties.
|
|
101
106
|
* @param marker - The marker to annotate
|
|
102
107
|
* @param props - The properties to annotate the marker with
|
|
103
108
|
* @param combiningOp - Optional. Specifies how to combine values for the property, such as "incr" for increment.
|
|
@@ -111,9 +116,15 @@ export declare class SharedString extends SharedSegmentSequence<SharedStringSegm
|
|
|
111
116
|
parallelText: string[];
|
|
112
117
|
parallelMarkers: MergeTree.Marker[];
|
|
113
118
|
};
|
|
119
|
+
/**
|
|
120
|
+
* Retrieve text from the SharedString in string format.
|
|
121
|
+
* @param start - The starting index of the text to retrieve, or 0 if omitted.
|
|
122
|
+
* @param end - The ending index of the text to retrieve, or the end of the string if omitted
|
|
123
|
+
* @returns The requested text content as a string.
|
|
124
|
+
*/
|
|
114
125
|
getText(start?: number, end?: number): string;
|
|
115
126
|
/**
|
|
116
|
-
* Adds spaces for markers and handles, so that position calculations account for them
|
|
127
|
+
* Adds spaces for markers and handles, so that position calculations account for them.
|
|
117
128
|
*/
|
|
118
129
|
getTextWithPlaceholders(): string;
|
|
119
130
|
getTextRangeWithPlaceholders(start: number, end: number): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sharedString.d.ts","sourceRoot":"","sources":["../src/sharedString.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,SAAS,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AACnG,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,qBAAqB,CAAC,mBAAmB,CAAC;IAC7E,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,CAAC,WAAW,OAAE;IAErE,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE,SAAS,CAAC,WAAW,OAAE;IAE3F,kBAAkB,CAAC,WAAW,EAAE,SAAS,CAAC,iBAAiB,OAAE;CAChE;AAED,oBAAY,mBAAmB,GAAG,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC;AAE3E;;;;;;;;;GASG;AACH,qBAAa,YAAa,SAAQ,qBAAqB,CAAC,mBAAmB,CAAE,YAAW,aAAa;
|
|
1
|
+
{"version":3,"file":"sharedString.d.ts","sourceRoot":"","sources":["../src/sharedString.ts"],"names":[],"mappings":"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"}
|