@fluidframework/merge-tree 2.71.0 → 2.73.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -26
- package/dist/client.js +3 -3
- package/dist/client.js.map +1 -1
- package/dist/mergeTreeDeltaCallback.js.map +1 -1
- package/dist/opBuilder.js +2 -2
- package/dist/opBuilder.js.map +1 -1
- package/dist/test/client.walkSegments.spec.js +15 -0
- package/dist/test/client.walkSegments.spec.js.map +1 -1
- package/lib/client.js +3 -3
- package/lib/client.js.map +1 -1
- package/lib/mergeTreeDeltaCallback.js.map +1 -1
- package/lib/opBuilder.js +2 -2
- package/lib/opBuilder.js.map +1 -1
- package/lib/test/client.walkSegments.spec.js +15 -0
- package/lib/test/client.walkSegments.spec.js.map +1 -1
- package/package.json +19 -19
- package/src/client.ts +7 -7
- package/src/mergeTreeDeltaCallback.ts +2 -2
- package/src/opBuilder.ts +4 -4
package/lib/opBuilder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opBuilder.js","sourceRoot":"","sources":["../src/opBuilder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EASN,kBAAkB,GAIlB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,cAAc,EAAE,IAAI,EAAsB,MAAM,oBAAoB,CAAC;AAE9E;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CACrC,MAAc,EACd,KAAkB;IAElB,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,OAAO;QACN,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE;QACnB,YAAY,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;QAClC,YAAY,EAAE,EAAE,EAAE,EAAE;QACpB,IAAI,EAAE,kBAAkB,CAAC,QAAQ;KACjC,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CACpC,KAAa,EACb,GAAW,EACX,KAAkB;IAElB,OAAO;QACN,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,GAAG;QACT,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE;QACnB,IAAI,EAAE,kBAAkB,CAAC,QAAQ;KACjC,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAClC,KAAa,EACb,GAAW,EACX,MAA6B;IAE7B,OAAO;QACN,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,GAAG;QACT,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE;QACrB,IAAI,EAAE,kBAAkB,CAAC,QAAQ;KACjC,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa,EAAE,GAAW;IAC7D,OAAO;QACN,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,GAAG;QACT,IAAI,EAAE,kBAAkB,CAAC,MAAM;KAC/B,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,
|
|
1
|
+
{"version":3,"file":"opBuilder.js","sourceRoot":"","sources":["../src/opBuilder.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 type { ISegment, Marker } from \"./mergeTreeNodes.js\";\nimport {\n\ttype IMergeTreeAnnotateMsg,\n\ttype IMergeTreeDeltaOp,\n\t// eslint-disable-next-line import-x/no-deprecated\n\ttype IMergeTreeGroupMsg,\n\ttype IMergeTreeInsertMsg,\n\t// eslint-disable-next-line import-x/no-deprecated\n\ttype IMergeTreeObliterateMsg,\n\ttype IMergeTreeRemoveMsg,\n\tMergeTreeDeltaType,\n\ttype AdjustParams,\n\ttype IMergeTreeAnnotateAdjustMsg,\n\ttype IMergeTreeObliterateSidedMsg,\n} from \"./ops.js\";\nimport type { PropertySet, MapLike } from \"./properties.js\";\nimport { normalizePlace, Side, type SequencePlace } from \"./sequencePlace.js\";\n\n/**\n * Creates the op for annotating the markers with the provided properties\n * @param marker - The marker to annotate\n * @param props - The properties to annotate the marker with\n * @returns The annotate op\n *\n * @internal\n */\nexport function createAnnotateMarkerOp(\n\tmarker: Marker,\n\tprops: PropertySet,\n): IMergeTreeAnnotateMsg | undefined {\n\tconst id = marker.getId();\n\tif (!id) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\tprops: { ...props },\n\t\trelativePos1: { id, before: true },\n\t\trelativePos2: { id },\n\t\ttype: MergeTreeDeltaType.ANNOTATE,\n\t};\n}\n\n/**\n * Creates the op for annotating the range with the provided properties\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 * @returns The annotate op\n *\n * @internal\n */\nexport function createAnnotateRangeOp(\n\tstart: number,\n\tend: number,\n\tprops: PropertySet,\n): IMergeTreeAnnotateMsg {\n\treturn {\n\t\tpos1: start,\n\t\tpos2: end,\n\t\tprops: { ...props },\n\t\ttype: MergeTreeDeltaType.ANNOTATE,\n\t};\n}\n\n/**\n * Creates the op for annotating the range with the provided properties\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 * @returns The annotate op\n *\n * @internal\n */\nexport function createAdjustRangeOp(\n\tstart: number,\n\tend: number,\n\tadjust: MapLike<AdjustParams>,\n): IMergeTreeAnnotateAdjustMsg {\n\treturn {\n\t\tpos1: start,\n\t\tpos2: end,\n\t\tadjust: { ...adjust },\n\t\ttype: MergeTreeDeltaType.ANNOTATE,\n\t};\n}\n\n/**\n * Creates the op to remove a range\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 * @internal\n */\nexport function createRemoveRangeOp(start: number, end: number): IMergeTreeRemoveMsg {\n\treturn {\n\t\tpos1: start,\n\t\tpos2: end,\n\t\ttype: MergeTreeDeltaType.REMOVE,\n\t};\n}\n\n/**\n * Creates the op to obliterate a range\n *\n * @param start - The inclusive start of the range to obliterate\n * @param end - The exclusive end of the range to obliterate\n *\n * @internal\n */\n// eslint-disable-next-line import-x/no-deprecated\nexport function createObliterateRangeOp(start: number, end: number): IMergeTreeObliterateMsg {\n\treturn {\n\t\tpos1: start,\n\t\tpos2: end,\n\t\ttype: MergeTreeDeltaType.OBLITERATE,\n\t};\n}\n\n/**\n * Creates the op to obliterate a range\n *\n * @param start - The start of the range to obliterate.\n * If a number is provided, the range will start before that index.\n * @param end - The end of the range to obliterate.\n * If a number is provided, the range will end after that index -1.\n * This preserves the previous behavior of not expanding obliteration ranges at the endpoints\n * for uses which predate the availability of endpoint expansion.\n *\n * @internal\n */\nexport function createObliterateRangeOpSided(\n\tstart: SequencePlace,\n\tend: SequencePlace,\n): IMergeTreeObliterateSidedMsg {\n\tconst startPlace = normalizePlace(start);\n\t// If a number is provided, default to after the previous index.\n\t// This preserves the behavior of obliterate prior to the introduction of endpoint expansion.\n\tconst endPlace =\n\t\ttypeof end === \"number\"\n\t\t\t? { pos: end - 1, side: Side.After } // default to inclusive bounds\n\t\t\t: normalizePlace(end);\n\treturn {\n\t\ttype: MergeTreeDeltaType.OBLITERATE_SIDED,\n\t\tpos1: { pos: startPlace.pos, before: startPlace.side === Side.Before },\n\t\tpos2: { pos: endPlace.pos, before: endPlace.side === Side.Before },\n\t};\n}\n\n/**\n * Creates an op for inserting a segment at the specified position.\n *\n * @param pos - The position to insert the segment at\n * @param segment - The segment to insert\n *\n * @internal\n */\nexport function createInsertSegmentOp(pos: number, segment: ISegment): IMergeTreeInsertMsg {\n\treturn createInsertOp(pos, segment.toJSONObject());\n}\n\n/**\n * Creates the op for inserting a segment from its JSON representation at\n * the specified position.\n *\n * @internal\n */\nexport function createInsertOp(pos: number, segSpec: unknown): IMergeTreeInsertMsg {\n\treturn {\n\t\tpos1: pos,\n\t\tseg: segSpec,\n\t\ttype: MergeTreeDeltaType.INSERT,\n\t};\n}\n\n/**\n * Creates a group op from the provided ops.\n *\n * @param ops - The ops to group\n *\n * @internal\n */\n// eslint-disable-next-line import-x/no-deprecated\nexport function createGroupOp(...ops: IMergeTreeDeltaOp[]): IMergeTreeGroupMsg {\n\treturn {\n\t\tops,\n\t\ttype: MergeTreeDeltaType.GROUP,\n\t};\n}\n"]}
|
|
@@ -48,5 +48,20 @@ describe("client.applyMsg", () => {
|
|
|
48
48
|
assert.equal(segCount, 2);
|
|
49
49
|
assert.equal(segLen, 4);
|
|
50
50
|
});
|
|
51
|
+
it("Walk single multi-character segment", () => {
|
|
52
|
+
client.removeRangeLocal(0, client.getLength());
|
|
53
|
+
client.insertTextLocal(0, "Blocker");
|
|
54
|
+
client.annotateRangeLocal(0, 7, { bold: true });
|
|
55
|
+
let segCount = 0;
|
|
56
|
+
const segLengths = [];
|
|
57
|
+
client.walkSegments((s) => {
|
|
58
|
+
segCount++;
|
|
59
|
+
segLengths.push(s.cachedLength);
|
|
60
|
+
return true;
|
|
61
|
+
}, 0, client.getLength(), undefined, true);
|
|
62
|
+
assert.equal(segCount, 1, `Expected one segment, saw ${segCount} segments`);
|
|
63
|
+
assert.equal(segLengths.length, 1, `Expected one segment length, saw ${segLengths.length} lengths`);
|
|
64
|
+
assert.equal(segLengths[0], 7, `Expected segment length 7, saw ${segLengths[0]}`);
|
|
65
|
+
});
|
|
51
66
|
});
|
|
52
67
|
//# sourceMappingURL=client.walkSegments.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.walkSegments.spec.js","sourceRoot":"","sources":["../../src/test/client.walkSegments.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"client.walkSegments.spec.js","sourceRoot":"","sources":["../../src/test/client.walkSegments.spec.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 { strict as assert } from \"node:assert\";\n\nimport type { ISegmentInternal } from \"../mergeTreeNodes.js\";\n\nimport { TestClient } from \"./testClient.js\";\n\ndescribe(\"client.applyMsg\", () => {\n\tconst localUserLongId = \"localUser\";\n\tconst seg1 = \"hello\";\n\tconst seg2 = \"world\";\n\tlet client: TestClient;\n\n\tbeforeEach(() => {\n\t\tclient = new TestClient();\n\t\tclient.insertTextLocal(client.getLength(), seg1);\n\t\tclient.insertTextLocal(client.getLength(), seg2);\n\t\tclient.startOrUpdateCollaboration(localUserLongId);\n\t});\n\n\tit(\"Walk All Segments\", () => {\n\t\tlet segCount = 0;\n\t\tlet segLen = 0;\n\t\tclient.walkSegments((s) => {\n\t\t\tsegCount++;\n\t\t\tsegLen += s.cachedLength;\n\t\t\treturn true;\n\t\t});\n\t\tassert.equal(segCount, 2);\n\t\tassert.equal(segLen, seg1.length + seg2.length);\n\t});\n\n\tit(\"Walk Segment Range\", () => {\n\t\tlet segCount = 0;\n\t\tlet segLen = 0;\n\t\tclient.walkSegments(\n\t\t\t(s) => {\n\t\t\t\tsegCount++;\n\t\t\t\tsegLen += s.cachedLength;\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tseg1.length - 2,\n\t\t\tseg1.length + 2,\n\t\t);\n\t\tassert.equal(segCount, 2);\n\t\tassert.equal(segLen, seg1.length + seg2.length);\n\t});\n\n\tit(\"Walk Segment Range With Split\", () => {\n\t\tlet segCount = 0;\n\t\tlet segLen = 0;\n\t\tclient.walkSegments(\n\t\t\t(s) => {\n\t\t\t\tsegCount++;\n\t\t\t\tsegLen += s.cachedLength;\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tseg1.length - 2,\n\t\t\tseg1.length + 2,\n\t\t\tundefined,\n\t\t\ttrue,\n\t\t);\n\t\tassert.equal(segCount, 2);\n\t\tassert.equal(segLen, 4);\n\t});\n\n\tit(\"Walk single multi-character segment\", () => {\n\t\tclient.removeRangeLocal(0, client.getLength());\n\t\tclient.insertTextLocal(0, \"Blocker\");\n\t\tclient.annotateRangeLocal(0, 7, { bold: true });\n\t\tlet segCount = 0;\n\t\tconst segLengths: number[] = [];\n\t\tclient.walkSegments(\n\t\t\t(s: ISegmentInternal) => {\n\t\t\t\tsegCount++;\n\t\t\t\tsegLengths.push(s.cachedLength);\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\t0,\n\t\t\tclient.getLength(),\n\t\t\tundefined,\n\t\t\ttrue,\n\t\t);\n\t\tassert.equal(segCount, 1, `Expected one segment, saw ${segCount} segments`);\n\t\tassert.equal(\n\t\t\tsegLengths.length,\n\t\t\t1,\n\t\t\t`Expected one segment length, saw ${segLengths.length} lengths`,\n\t\t);\n\t\tassert.equal(segLengths[0], 7, `Expected segment length 7, saw ${segLengths[0]}`);\n\t});\n});\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluidframework/merge-tree",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.73.0",
|
|
4
4
|
"description": "Merge tree",
|
|
5
5
|
"homepage": "https://fluidframework.com",
|
|
6
6
|
"repository": {
|
|
@@ -81,30 +81,30 @@
|
|
|
81
81
|
"temp-directory": "nyc/.nyc_output"
|
|
82
82
|
},
|
|
83
83
|
"dependencies": {
|
|
84
|
-
"@fluid-internal/client-utils": "~2.
|
|
85
|
-
"@fluidframework/container-definitions": "~2.
|
|
86
|
-
"@fluidframework/core-interfaces": "~2.
|
|
87
|
-
"@fluidframework/core-utils": "~2.
|
|
88
|
-
"@fluidframework/datastore-definitions": "~2.
|
|
89
|
-
"@fluidframework/driver-definitions": "~2.
|
|
90
|
-
"@fluidframework/runtime-definitions": "~2.
|
|
91
|
-
"@fluidframework/runtime-utils": "~2.
|
|
92
|
-
"@fluidframework/shared-object-base": "~2.
|
|
93
|
-
"@fluidframework/telemetry-utils": "~2.
|
|
84
|
+
"@fluid-internal/client-utils": "~2.73.0",
|
|
85
|
+
"@fluidframework/container-definitions": "~2.73.0",
|
|
86
|
+
"@fluidframework/core-interfaces": "~2.73.0",
|
|
87
|
+
"@fluidframework/core-utils": "~2.73.0",
|
|
88
|
+
"@fluidframework/datastore-definitions": "~2.73.0",
|
|
89
|
+
"@fluidframework/driver-definitions": "~2.73.0",
|
|
90
|
+
"@fluidframework/runtime-definitions": "~2.73.0",
|
|
91
|
+
"@fluidframework/runtime-utils": "~2.73.0",
|
|
92
|
+
"@fluidframework/shared-object-base": "~2.73.0",
|
|
93
|
+
"@fluidframework/telemetry-utils": "~2.73.0"
|
|
94
94
|
},
|
|
95
95
|
"devDependencies": {
|
|
96
96
|
"@arethetypeswrong/cli": "^0.17.1",
|
|
97
97
|
"@biomejs/biome": "~1.9.3",
|
|
98
|
-
"@fluid-internal/mocha-test-setup": "~2.
|
|
99
|
-
"@fluid-private/stochastic-test-utils": "~2.
|
|
100
|
-
"@fluid-private/test-pairwise-generator": "~2.
|
|
98
|
+
"@fluid-internal/mocha-test-setup": "~2.73.0",
|
|
99
|
+
"@fluid-private/stochastic-test-utils": "~2.73.0",
|
|
100
|
+
"@fluid-private/test-pairwise-generator": "~2.73.0",
|
|
101
101
|
"@fluid-tools/benchmark": "^0.51.0",
|
|
102
|
-
"@fluid-tools/build-cli": "^0.
|
|
102
|
+
"@fluid-tools/build-cli": "^0.60.0",
|
|
103
103
|
"@fluidframework/build-common": "^2.0.3",
|
|
104
|
-
"@fluidframework/build-tools": "^0.
|
|
105
|
-
"@fluidframework/eslint-config-fluid": "
|
|
106
|
-
"@fluidframework/merge-tree-previous": "npm:@fluidframework/merge-tree@2.
|
|
107
|
-
"@fluidframework/test-runtime-utils": "~2.
|
|
104
|
+
"@fluidframework/build-tools": "^0.60.0",
|
|
105
|
+
"@fluidframework/eslint-config-fluid": "~2.73.0",
|
|
106
|
+
"@fluidframework/merge-tree-previous": "npm:@fluidframework/merge-tree@2.71.0",
|
|
107
|
+
"@fluidframework/test-runtime-utils": "~2.73.0",
|
|
108
108
|
"@microsoft/api-extractor": "7.52.11",
|
|
109
109
|
"@types/diff": "^3.5.1",
|
|
110
110
|
"@types/mocha": "^10.0.10",
|
package/src/client.ts
CHANGED
|
@@ -74,10 +74,10 @@ import {
|
|
|
74
74
|
type IJSONSegment,
|
|
75
75
|
type IMergeTreeAnnotateMsg,
|
|
76
76
|
type IMergeTreeDeltaOp,
|
|
77
|
-
// eslint-disable-next-line import/no-deprecated
|
|
77
|
+
// eslint-disable-next-line import-x/no-deprecated
|
|
78
78
|
type IMergeTreeGroupMsg,
|
|
79
79
|
type IMergeTreeInsertMsg,
|
|
80
|
-
// eslint-disable-next-line import/no-deprecated
|
|
80
|
+
// eslint-disable-next-line import-x/no-deprecated
|
|
81
81
|
type IMergeTreeObliterateMsg,
|
|
82
82
|
type IMergeTreeOp,
|
|
83
83
|
type IMergeTreeRemoveMsg,
|
|
@@ -323,9 +323,9 @@ export class Client extends TypedEventEmitter<IClientEvents> {
|
|
|
323
323
|
public obliterateRangeLocal(
|
|
324
324
|
start: number | InteriorSequencePlace,
|
|
325
325
|
end: number | InteriorSequencePlace,
|
|
326
|
-
// eslint-disable-next-line import/no-deprecated
|
|
326
|
+
// eslint-disable-next-line import-x/no-deprecated
|
|
327
327
|
): IMergeTreeObliterateMsg | IMergeTreeObliterateSidedMsg {
|
|
328
|
-
// eslint-disable-next-line import/no-deprecated
|
|
328
|
+
// eslint-disable-next-line import-x/no-deprecated
|
|
329
329
|
let obliterateOp: IMergeTreeObliterateMsg | IMergeTreeObliterateSidedMsg;
|
|
330
330
|
if (this._mergeTree.options?.mergeTreeEnableSidedObliterate) {
|
|
331
331
|
obliterateOp = createObliterateRangeOpSided(start, end);
|
|
@@ -672,7 +672,7 @@ export class Client extends TypedEventEmitter<IClientEvents> {
|
|
|
672
672
|
* @throws LoggingError if the range is invalid
|
|
673
673
|
*/
|
|
674
674
|
private getValidSidedRange(
|
|
675
|
-
// eslint-disable-next-line import/no-deprecated
|
|
675
|
+
// eslint-disable-next-line import-x/no-deprecated
|
|
676
676
|
op: IMergeTreeObliterateSidedMsg | IMergeTreeObliterateMsg,
|
|
677
677
|
perspective: Perspective,
|
|
678
678
|
): {
|
|
@@ -752,7 +752,7 @@ export class Client extends TypedEventEmitter<IClientEvents> {
|
|
|
752
752
|
| IMergeTreeAnnotateAdjustMsg
|
|
753
753
|
| IMergeTreeInsertMsg
|
|
754
754
|
| IMergeTreeRemoveMsg
|
|
755
|
-
// eslint-disable-next-line import/no-deprecated
|
|
755
|
+
// eslint-disable-next-line import-x/no-deprecated
|
|
756
756
|
| IMergeTreeObliterateMsg,
|
|
757
757
|
perspective: Perspective,
|
|
758
758
|
): IIntegerRange {
|
|
@@ -1595,7 +1595,7 @@ export class Client extends TypedEventEmitter<IClientEvents> {
|
|
|
1595
1595
|
return loader.initialize(storage);
|
|
1596
1596
|
}
|
|
1597
1597
|
|
|
1598
|
-
// eslint-disable-next-line import/no-deprecated
|
|
1598
|
+
// eslint-disable-next-line import-x/no-deprecated
|
|
1599
1599
|
localTransaction(groupOp: IMergeTreeGroupMsg): void {
|
|
1600
1600
|
for (const op of groupOp.ops) {
|
|
1601
1601
|
const opArgs: IMergeTreeDeltaOpArgs = {
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import type { ISequencedDocumentMessage } from "@fluidframework/driver-definitions/internal";
|
|
7
7
|
|
|
8
8
|
import type { ISegment } from "./mergeTreeNodes.js";
|
|
9
|
-
// eslint-disable-next-line import/no-deprecated
|
|
9
|
+
// eslint-disable-next-line import-x/no-deprecated
|
|
10
10
|
import type { IMergeTreeGroupMsg, IMergeTreeOp, MergeTreeDeltaType } from "./ops.js";
|
|
11
11
|
import type { PropertySet } from "./properties.js";
|
|
12
12
|
|
|
@@ -117,7 +117,7 @@ export interface IMergeTreeDeltaOpArgs {
|
|
|
117
117
|
* The group op which contains the operation
|
|
118
118
|
* if there operation is part of a group op.
|
|
119
119
|
*/
|
|
120
|
-
// eslint-disable-next-line import/no-deprecated
|
|
120
|
+
// eslint-disable-next-line import-x/no-deprecated
|
|
121
121
|
readonly groupOp?: IMergeTreeGroupMsg;
|
|
122
122
|
|
|
123
123
|
/**
|
package/src/opBuilder.ts
CHANGED
|
@@ -7,10 +7,10 @@ import type { ISegment, Marker } from "./mergeTreeNodes.js";
|
|
|
7
7
|
import {
|
|
8
8
|
type IMergeTreeAnnotateMsg,
|
|
9
9
|
type IMergeTreeDeltaOp,
|
|
10
|
-
// eslint-disable-next-line import/no-deprecated
|
|
10
|
+
// eslint-disable-next-line import-x/no-deprecated
|
|
11
11
|
type IMergeTreeGroupMsg,
|
|
12
12
|
type IMergeTreeInsertMsg,
|
|
13
|
-
// eslint-disable-next-line import/no-deprecated
|
|
13
|
+
// eslint-disable-next-line import-x/no-deprecated
|
|
14
14
|
type IMergeTreeObliterateMsg,
|
|
15
15
|
type IMergeTreeRemoveMsg,
|
|
16
16
|
MergeTreeDeltaType,
|
|
@@ -114,7 +114,7 @@ export function createRemoveRangeOp(start: number, end: number): IMergeTreeRemov
|
|
|
114
114
|
*
|
|
115
115
|
* @internal
|
|
116
116
|
*/
|
|
117
|
-
// eslint-disable-next-line import/no-deprecated
|
|
117
|
+
// eslint-disable-next-line import-x/no-deprecated
|
|
118
118
|
export function createObliterateRangeOp(start: number, end: number): IMergeTreeObliterateMsg {
|
|
119
119
|
return {
|
|
120
120
|
pos1: start,
|
|
@@ -186,7 +186,7 @@ export function createInsertOp(pos: number, segSpec: unknown): IMergeTreeInsertM
|
|
|
186
186
|
*
|
|
187
187
|
* @internal
|
|
188
188
|
*/
|
|
189
|
-
// eslint-disable-next-line import/no-deprecated
|
|
189
|
+
// eslint-disable-next-line import-x/no-deprecated
|
|
190
190
|
export function createGroupOp(...ops: IMergeTreeDeltaOp[]): IMergeTreeGroupMsg {
|
|
191
191
|
return {
|
|
192
192
|
ops,
|