@fluidframework/sequence 2.0.0-rc.3.0.2 → 2.0.0-rc.4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/.eslintrc.cjs +29 -0
  2. package/CHANGELOG.md +18 -0
  3. package/README.md +10 -3
  4. package/api-report/sequence.api.md +34 -35
  5. package/dist/IntervalCollectionValues.d.ts +0 -2
  6. package/dist/IntervalCollectionValues.d.ts.map +1 -1
  7. package/dist/IntervalCollectionValues.js +0 -2
  8. package/dist/IntervalCollectionValues.js.map +1 -1
  9. package/dist/index.d.ts +2 -2
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +3 -3
  12. package/dist/index.js.map +1 -1
  13. package/dist/intervalCollection.js +1 -1
  14. package/dist/intervalCollection.js.map +1 -1
  15. package/dist/intervalIndex/endpointInRangeIndex.d.ts +2 -2
  16. package/dist/intervalIndex/endpointInRangeIndex.d.ts.map +1 -1
  17. package/dist/intervalIndex/endpointInRangeIndex.js.map +1 -1
  18. package/dist/intervalIndex/endpointIndex.d.ts +2 -2
  19. package/dist/intervalIndex/endpointIndex.d.ts.map +1 -1
  20. package/dist/intervalIndex/endpointIndex.js.map +1 -1
  21. package/dist/intervalIndex/overlappingIntervalsIndex.d.ts +2 -2
  22. package/dist/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -1
  23. package/dist/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
  24. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts +2 -2
  25. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +1 -1
  26. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -1
  27. package/dist/intervalIndex/startpointInRangeIndex.d.ts +2 -2
  28. package/dist/intervalIndex/startpointInRangeIndex.d.ts.map +1 -1
  29. package/dist/intervalIndex/startpointInRangeIndex.js.map +1 -1
  30. package/dist/intervals/interval.js +1 -1
  31. package/dist/intervals/interval.js.map +1 -1
  32. package/dist/intervals/sequenceInterval.js +1 -1
  33. package/dist/intervals/sequenceInterval.js.map +1 -1
  34. package/dist/legacy.d.ts +2 -2
  35. package/dist/packageVersion.d.ts +1 -1
  36. package/dist/packageVersion.js +1 -1
  37. package/dist/packageVersion.js.map +1 -1
  38. package/dist/revertibles.d.ts +6 -6
  39. package/dist/revertibles.d.ts.map +1 -1
  40. package/dist/revertibles.js.map +1 -1
  41. package/dist/sequence.d.ts.map +1 -1
  42. package/dist/sequence.js +8 -3
  43. package/dist/sequence.js.map +1 -1
  44. package/dist/sequenceDeltaEvent.d.ts +24 -3
  45. package/dist/sequenceDeltaEvent.d.ts.map +1 -1
  46. package/dist/sequenceDeltaEvent.js +16 -3
  47. package/dist/sequenceDeltaEvent.js.map +1 -1
  48. package/dist/sequenceFactory.d.ts +15 -7
  49. package/dist/sequenceFactory.d.ts.map +1 -1
  50. package/dist/sequenceFactory.js +9 -6
  51. package/dist/sequenceFactory.js.map +1 -1
  52. package/dist/sharedString.d.ts +70 -47
  53. package/dist/sharedString.d.ts.map +1 -1
  54. package/dist/sharedString.js +15 -52
  55. package/dist/sharedString.js.map +1 -1
  56. package/lib/IntervalCollectionValues.d.ts +0 -2
  57. package/lib/IntervalCollectionValues.d.ts.map +1 -1
  58. package/lib/IntervalCollectionValues.js +0 -2
  59. package/lib/IntervalCollectionValues.js.map +1 -1
  60. package/lib/index.d.ts +2 -2
  61. package/lib/index.d.ts.map +1 -1
  62. package/lib/index.js +2 -2
  63. package/lib/index.js.map +1 -1
  64. package/lib/intervalCollection.js +1 -1
  65. package/lib/intervalCollection.js.map +1 -1
  66. package/lib/intervalIndex/endpointInRangeIndex.d.ts +2 -2
  67. package/lib/intervalIndex/endpointInRangeIndex.d.ts.map +1 -1
  68. package/lib/intervalIndex/endpointInRangeIndex.js.map +1 -1
  69. package/lib/intervalIndex/endpointIndex.d.ts +2 -2
  70. package/lib/intervalIndex/endpointIndex.d.ts.map +1 -1
  71. package/lib/intervalIndex/endpointIndex.js.map +1 -1
  72. package/lib/intervalIndex/overlappingIntervalsIndex.d.ts +2 -2
  73. package/lib/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -1
  74. package/lib/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
  75. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.ts +2 -2
  76. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +1 -1
  77. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -1
  78. package/lib/intervalIndex/startpointInRangeIndex.d.ts +2 -2
  79. package/lib/intervalIndex/startpointInRangeIndex.d.ts.map +1 -1
  80. package/lib/intervalIndex/startpointInRangeIndex.js.map +1 -1
  81. package/lib/intervals/interval.js +1 -1
  82. package/lib/intervals/interval.js.map +1 -1
  83. package/lib/intervals/sequenceInterval.js +1 -1
  84. package/lib/intervals/sequenceInterval.js.map +1 -1
  85. package/lib/legacy.d.ts +2 -2
  86. package/lib/packageVersion.d.ts +1 -1
  87. package/lib/packageVersion.js +1 -1
  88. package/lib/packageVersion.js.map +1 -1
  89. package/lib/revertibles.d.ts +6 -6
  90. package/lib/revertibles.d.ts.map +1 -1
  91. package/lib/revertibles.js.map +1 -1
  92. package/lib/sequence.d.ts.map +1 -1
  93. package/lib/sequence.js +10 -4
  94. package/lib/sequence.js.map +1 -1
  95. package/lib/sequenceDeltaEvent.d.ts +24 -3
  96. package/lib/sequenceDeltaEvent.d.ts.map +1 -1
  97. package/lib/sequenceDeltaEvent.js +16 -3
  98. package/lib/sequenceDeltaEvent.js.map +1 -1
  99. package/lib/sequenceFactory.d.ts +15 -7
  100. package/lib/sequenceFactory.d.ts.map +1 -1
  101. package/lib/sequenceFactory.js +9 -6
  102. package/lib/sequenceFactory.js.map +1 -1
  103. package/lib/sharedString.d.ts +70 -47
  104. package/lib/sharedString.d.ts.map +1 -1
  105. package/lib/sharedString.js +13 -50
  106. package/lib/sharedString.js.map +1 -1
  107. package/lib/tsdoc-metadata.json +1 -1
  108. package/package.json +38 -24
  109. package/src/IntervalCollectionValues.ts +0 -2
  110. package/src/index.ts +2 -2
  111. package/src/intervalCollection.ts +1 -1
  112. package/src/intervalIndex/endpointInRangeIndex.ts +2 -2
  113. package/src/intervalIndex/endpointIndex.ts +2 -2
  114. package/src/intervalIndex/overlappingIntervalsIndex.ts +2 -2
  115. package/src/intervalIndex/overlappingSequenceIntervalsIndex.ts +2 -2
  116. package/src/intervalIndex/startpointInRangeIndex.ts +2 -2
  117. package/src/intervals/interval.ts +1 -1
  118. package/src/intervals/sequenceInterval.ts +1 -1
  119. package/src/packageVersion.ts +1 -1
  120. package/src/revertibles.ts +18 -14
  121. package/src/sequence.ts +11 -3
  122. package/src/sequenceDeltaEvent.ts +12 -1
  123. package/src/sequenceFactory.ts +21 -9
  124. package/src/sharedString.ts +89 -56
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluidframework/sequence",
3
- "version": "2.0.0-rc.3.0.2",
3
+ "version": "2.0.0-rc.4.0.0",
4
4
  "description": "Distributed sequence",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -87,34 +87,34 @@
87
87
  "temp-directory": "nyc/.nyc_output"
88
88
  },
89
89
  "dependencies": {
90
- "@fluid-internal/client-utils": ">=2.0.0-rc.3.0.2 <2.0.0-rc.3.1.0",
91
- "@fluidframework/core-interfaces": ">=2.0.0-rc.3.0.2 <2.0.0-rc.3.1.0",
92
- "@fluidframework/core-utils": ">=2.0.0-rc.3.0.2 <2.0.0-rc.3.1.0",
93
- "@fluidframework/datastore-definitions": ">=2.0.0-rc.3.0.2 <2.0.0-rc.3.1.0",
94
- "@fluidframework/merge-tree": ">=2.0.0-rc.3.0.2 <2.0.0-rc.3.1.0",
90
+ "@fluid-internal/client-utils": ">=2.0.0-rc.4.0.0 <2.0.0-rc.4.1.0",
91
+ "@fluidframework/core-interfaces": ">=2.0.0-rc.4.0.0 <2.0.0-rc.4.1.0",
92
+ "@fluidframework/core-utils": ">=2.0.0-rc.4.0.0 <2.0.0-rc.4.1.0",
93
+ "@fluidframework/datastore-definitions": ">=2.0.0-rc.4.0.0 <2.0.0-rc.4.1.0",
94
+ "@fluidframework/merge-tree": ">=2.0.0-rc.4.0.0 <2.0.0-rc.4.1.0",
95
95
  "@fluidframework/protocol-definitions": "^3.2.0",
96
- "@fluidframework/runtime-definitions": ">=2.0.0-rc.3.0.2 <2.0.0-rc.3.1.0",
97
- "@fluidframework/runtime-utils": ">=2.0.0-rc.3.0.2 <2.0.0-rc.3.1.0",
98
- "@fluidframework/shared-object-base": ">=2.0.0-rc.3.0.2 <2.0.0-rc.3.1.0",
99
- "@fluidframework/telemetry-utils": ">=2.0.0-rc.3.0.2 <2.0.0-rc.3.1.0",
96
+ "@fluidframework/runtime-definitions": ">=2.0.0-rc.4.0.0 <2.0.0-rc.4.1.0",
97
+ "@fluidframework/runtime-utils": ">=2.0.0-rc.4.0.0 <2.0.0-rc.4.1.0",
98
+ "@fluidframework/shared-object-base": ">=2.0.0-rc.4.0.0 <2.0.0-rc.4.1.0",
99
+ "@fluidframework/telemetry-utils": ">=2.0.0-rc.4.0.0 <2.0.0-rc.4.1.0",
100
100
  "double-ended-queue": "^2.1.0-0",
101
101
  "uuid": "^9.0.0"
102
102
  },
103
103
  "devDependencies": {
104
104
  "@arethetypeswrong/cli": "^0.15.2",
105
105
  "@biomejs/biome": "^1.6.2",
106
- "@fluid-internal/mocha-test-setup": ">=2.0.0-rc.3.0.2 <2.0.0-rc.3.1.0",
107
- "@fluid-private/stochastic-test-utils": ">=2.0.0-rc.3.0.2 <2.0.0-rc.3.1.0",
108
- "@fluid-private/test-dds-utils": ">=2.0.0-rc.3.0.2 <2.0.0-rc.3.1.0",
106
+ "@fluid-internal/mocha-test-setup": ">=2.0.0-rc.4.0.0 <2.0.0-rc.4.1.0",
107
+ "@fluid-private/stochastic-test-utils": ">=2.0.0-rc.4.0.0 <2.0.0-rc.4.1.0",
108
+ "@fluid-private/test-dds-utils": ">=2.0.0-rc.4.0.0 <2.0.0-rc.4.1.0",
109
109
  "@fluid-tools/benchmark": "^0.48.0",
110
- "@fluid-tools/build-cli": "^0.37.0",
110
+ "@fluid-tools/build-cli": "^0.38.0",
111
111
  "@fluidframework/build-common": "^2.0.3",
112
- "@fluidframework/build-tools": "^0.37.0",
113
- "@fluidframework/container-definitions": ">=2.0.0-rc.3.0.2 <2.0.0-rc.3.1.0",
112
+ "@fluidframework/build-tools": "^0.38.0",
113
+ "@fluidframework/container-definitions": ">=2.0.0-rc.4.0.0 <2.0.0-rc.4.1.0",
114
114
  "@fluidframework/eslint-config-fluid": "^5.1.0",
115
- "@fluidframework/sequence-previous": "npm:@fluidframework/sequence@2.0.0-internal.8.0.0",
116
- "@fluidframework/test-runtime-utils": ">=2.0.0-rc.3.0.2 <2.0.0-rc.3.1.0",
117
- "@microsoft/api-extractor": "^7.42.3",
115
+ "@fluidframework/sequence-previous": "npm:@fluidframework/sequence@2.0.0-rc.3.0.0",
116
+ "@fluidframework/test-runtime-utils": ">=2.0.0-rc.4.0.0 <2.0.0-rc.4.1.0",
117
+ "@microsoft/api-extractor": "^7.43.1",
118
118
  "@types/diff": "^3.5.1",
119
119
  "@types/double-ended-queue": "^2.1.0",
120
120
  "@types/mocha": "^9.1.1",
@@ -145,11 +145,25 @@
145
145
  },
146
146
  "typeValidation": {
147
147
  "broken": {
148
- "InterfaceDeclaration_IIntervalCollection": {
149
- "backCompat": false
148
+ "RemovedClassDeclaration_SharedString": {
149
+ "backCompat": false,
150
+ "forwardCompat": false
150
151
  },
151
- "ClassDeclaration_SharedString": {
152
- "backCompat": false
152
+ "InterfaceDeclaration_ISharedString": {
153
+ "forwardCompat": false
154
+ },
155
+ "ClassDeclaration_SharedIntervalCollection": {
156
+ "forwardCompat": false
157
+ },
158
+ "ClassDeclaration_SharedSegmentSequence": {
159
+ "forwardCompat": false
160
+ },
161
+ "ClassDeclaration_SharedSequence": {
162
+ "forwardCompat": false
163
+ },
164
+ "RemovedClassDeclaration_SharedStringFactory": {
165
+ "backCompat": false,
166
+ "forwardCompat": false
153
167
  }
154
168
  }
155
169
  },
@@ -191,7 +205,7 @@
191
205
  "test:newsnapfiles": "node lib/test/createSnapshotFiles.js",
192
206
  "test:stress": "cross-env FUZZ_TEST_COUNT=100 FUZZ_STRESS_RUN=true mocha --ignore \"lib/test/memory/**/*\" --recursive \"lib/test/**/*.fuzz.spec.*js\" -r @fluid-internal/mocha-test-setup",
193
207
  "tsc": "fluid-tsc commonjs --project ./tsconfig.cjs.json && copyfiles -f ../../../common/build/build-common/src/cjs/package.json ./dist",
194
- "typetests:gen": "fluid-type-test-generator",
208
+ "typetests:gen": "flub generate typetests --dir . -v --publicFallback",
195
209
  "typetests:prepare": "flub typetests --dir . --reset --previous --normalize"
196
210
  }
197
211
  }
@@ -53,8 +53,6 @@ export function makeSerializable<T extends ISerializableInterval>(
53
53
 
54
54
  /**
55
55
  * Manages a contained value type.
56
- *
57
- * @alpha
58
56
  */
59
57
  export class IntervalCollectionTypeLocalValue<T extends ISerializableInterval>
60
58
  implements ILocalIntervalCollection<T>
package/src/index.ts CHANGED
@@ -76,12 +76,12 @@ export {
76
76
  SequenceEvent,
77
77
  SequenceMaintenanceEvent,
78
78
  } from "./sequenceDeltaEvent.js";
79
- export { SharedStringFactory } from "./sequenceFactory.js";
79
+ export { SharedString } from "./sequenceFactory.js";
80
80
  export {
81
81
  getTextAndMarkers,
82
82
  ISharedString,
83
- SharedString,
84
83
  SharedStringSegment,
84
+ SharedStringClass,
85
85
  } from "./sharedString.js";
86
86
  export {
87
87
  ISharedIntervalCollection,
@@ -1281,7 +1281,7 @@ export class IntervalCollection<TInterval extends ISerializableInterval>
1281
1281
  start: startPos,
1282
1282
  end: endPos,
1283
1283
  intervalType: IntervalType.SlideOnRemove,
1284
- properties: interval.properties,
1284
+ properties: { ...interval.properties },
1285
1285
  sequenceNumber: this.client?.getCurrentSeq() ?? 0,
1286
1286
  stickiness,
1287
1287
  startSide,
@@ -14,7 +14,7 @@ import {
14
14
  SequenceInterval,
15
15
  sequenceIntervalHelpers,
16
16
  } from "../intervals/index.js";
17
- import { SharedString } from "../sharedString.js";
17
+ import { ISharedString } from "../sharedString.js";
18
18
 
19
19
  import { IntervalIndex } from "./intervalIndex.js";
20
20
  import { HasComparisonOverride, compareOverrideables, forceCompare } from "./intervalIndexUtils.js";
@@ -112,7 +112,7 @@ export class EndpointInRangeIndex<TInterval extends ISerializableInterval>
112
112
  * @internal
113
113
  */
114
114
  export function createEndpointInRangeIndex(
115
- sharedString: SharedString,
115
+ sharedString: ISharedString,
116
116
  ): IEndpointInRangeIndex<SequenceInterval> {
117
117
  const client = (sharedString as unknown as { client: Client }).client;
118
118
  return new EndpointInRangeIndex<SequenceInterval>(client, sequenceIntervalHelpers);
@@ -14,7 +14,7 @@ import {
14
14
  SequenceInterval,
15
15
  sequenceIntervalHelpers,
16
16
  } from "../intervals/index.js";
17
- import { SharedString } from "../sharedString.js";
17
+ import { ISharedString } from "../sharedString.js";
18
18
 
19
19
  import { IntervalIndex } from "./intervalIndex.js";
20
20
 
@@ -88,7 +88,7 @@ export class EndpointIndex<TInterval extends ISerializableInterval>
88
88
  /**
89
89
  * @internal
90
90
  */
91
- export function createEndpointIndex(sharedString: SharedString): IEndpointIndex<SequenceInterval> {
91
+ export function createEndpointIndex(sharedString: ISharedString): IEndpointIndex<SequenceInterval> {
92
92
  const client = (sharedString as unknown as { client: Client }).client;
93
93
  return new EndpointIndex<SequenceInterval>(client, sequenceIntervalHelpers);
94
94
  }
@@ -16,7 +16,7 @@ import {
16
16
  SequenceInterval,
17
17
  sequenceIntervalHelpers,
18
18
  } from "../intervals/index.js";
19
- import { SharedString } from "../sharedString.js";
19
+ import { ISharedString } from "../sharedString.js";
20
20
 
21
21
  import { IntervalIndex } from "./intervalIndex.js";
22
22
 
@@ -182,7 +182,7 @@ export class OverlappingIntervalsIndex<TInterval extends ISerializableInterval>
182
182
  * @alpha
183
183
  */
184
184
  export function createOverlappingIntervalsIndex(
185
- sharedString: SharedString,
185
+ sharedString: ISharedString,
186
186
  ): IOverlappingIntervalsIndex<SequenceInterval> {
187
187
  const client = (sharedString as unknown as { client: Client }).client;
188
188
  return new OverlappingIntervalsIndex<SequenceInterval>(client, sequenceIntervalHelpers);
@@ -19,7 +19,7 @@ import {
19
19
  createPositionReferenceFromSegoff,
20
20
  sequenceIntervalHelpers,
21
21
  } from "../intervals/index.js";
22
- import { SharedString } from "../sharedString.js";
22
+ import { ISharedString } from "../sharedString.js";
23
23
 
24
24
  import { OverlappingIntervalsIndex } from "./overlappingIntervalsIndex.js";
25
25
  import { SequenceIntervalIndexes } from "./sequenceIntervalIndexes.js";
@@ -76,7 +76,7 @@ class OverlappingSequenceIntervalsIndex
76
76
  * @internal
77
77
  */
78
78
  export function createOverlappingSequenceIntervalsIndex(
79
- sharedString: SharedString,
79
+ sharedString: ISharedString,
80
80
  ): SequenceIntervalIndexes.Overlapping {
81
81
  const client = (sharedString as unknown as { client: Client }).client;
82
82
  return new OverlappingSequenceIntervalsIndex(client);
@@ -14,7 +14,7 @@ import {
14
14
  SequenceInterval,
15
15
  sequenceIntervalHelpers,
16
16
  } from "../intervals/index.js";
17
- import { SharedString } from "../sharedString.js";
17
+ import { ISharedString } from "../sharedString.js";
18
18
 
19
19
  import { IntervalIndex } from "./intervalIndex.js";
20
20
  import { HasComparisonOverride, compareOverrideables, forceCompare } from "./intervalIndexUtils.js";
@@ -110,7 +110,7 @@ export class StartpointInRangeIndex<TInterval extends ISerializableInterval>
110
110
  * @internal
111
111
  */
112
112
  export function createStartpointInRangeIndex(
113
- sharedString: SharedString,
113
+ sharedString: ISharedString,
114
114
  ): IStartpointInRangeIndex<SequenceInterval> {
115
115
  const client = (sharedString as unknown as { client: Client }).client;
116
116
  return new StartpointInRangeIndex<SequenceInterval>(client, sequenceIntervalHelpers);
@@ -89,7 +89,7 @@ export class Interval implements ISerializableInterval {
89
89
  start: this.start,
90
90
  };
91
91
  if (this.properties) {
92
- serializedInterval.properties = this.properties;
92
+ serializedInterval.properties = { ...this.properties };
93
93
  }
94
94
  return serializedInterval;
95
95
  }
@@ -198,7 +198,7 @@ export class SequenceInterval implements ISerializableInterval {
198
198
  };
199
199
 
200
200
  if (this.properties) {
201
- serializedInterval.properties = this.properties;
201
+ serializedInterval.properties = { ...this.properties };
202
202
  }
203
203
 
204
204
  return serializedInterval;
@@ -6,4 +6,4 @@
6
6
  */
7
7
 
8
8
  export const pkgName = "@fluidframework/sequence";
9
- export const pkgVersion = "2.0.0-rc.3.0.2";
9
+ export const pkgVersion = "2.0.0-rc.4.0.0";
@@ -26,7 +26,7 @@ import {
26
26
  import { InteriorSequencePlace, Side } from "./intervalCollection.js";
27
27
  import { IntervalOpType, SequenceInterval } from "./intervals/index.js";
28
28
  import { ISequenceDeltaRange, SequenceDeltaEvent } from "./sequenceDeltaEvent.js";
29
- import { SharedString, SharedStringSegment } from "./sharedString.js";
29
+ import { ISharedString, SharedStringSegment } from "./sharedString.js";
30
30
 
31
31
  /**
32
32
  * Data for undoing edits on SharedStrings and Intervals.
@@ -111,7 +111,7 @@ export function appendAddIntervalToRevertibles(
111
111
  * @alpha
112
112
  */
113
113
  export function appendDeleteIntervalToRevertibles(
114
- string: SharedString,
114
+ string: ISharedString,
115
115
  interval: SequenceInterval,
116
116
  revertibles: SharedStringRevertible[],
117
117
  ): SharedStringRevertible[] {
@@ -163,7 +163,7 @@ export function appendDeleteIntervalToRevertibles(
163
163
  * @alpha
164
164
  */
165
165
  export function appendChangeIntervalToRevertibles(
166
- string: SharedString,
166
+ string: ISharedString,
167
167
  newInterval: SequenceInterval,
168
168
  previousInterval: SequenceInterval,
169
169
  revertibles: SharedStringRevertible[],
@@ -273,7 +273,7 @@ function addIfRevertibleRef(
273
273
  * @alpha
274
274
  */
275
275
  export function appendSharedStringDeltaToRevertibles(
276
- string: SharedString,
276
+ string: ISharedString,
277
277
  delta: SequenceDeltaEvent,
278
278
  revertibles: SharedStringRevertible[],
279
279
  ) {
@@ -366,7 +366,7 @@ export function appendSharedStringDeltaToRevertibles(
366
366
  * @alpha
367
367
  */
368
368
  export function discardSharedStringRevertibles(
369
- sharedString: SharedString,
369
+ sharedString: ISharedString,
370
370
  revertibles: SharedStringRevertible[],
371
371
  ) {
372
372
  revertibles.forEach((r) => {
@@ -379,7 +379,11 @@ export function discardSharedStringRevertibles(
379
379
  });
380
380
  }
381
381
 
382
- function getSlidePosition(string: SharedString, lref: LocalReferencePosition, pos: number): number {
382
+ function getSlidePosition(
383
+ string: ISharedString,
384
+ lref: LocalReferencePosition,
385
+ pos: number,
386
+ ): number {
383
387
  const slide = getSlideToSegoff(
384
388
  { segment: lref.getSegment(), offset: undefined },
385
389
  lref.slidingPreference,
@@ -397,7 +401,7 @@ function isValidRange(
397
401
  startSlide: SlidingPreference | undefined,
398
402
  end: number,
399
403
  endSlide: SlidingPreference | undefined,
400
- string: SharedString,
404
+ string: ISharedString,
401
405
  ) {
402
406
  return (
403
407
  start >= 0 &&
@@ -412,7 +416,7 @@ function isValidRange(
412
416
  }
413
417
 
414
418
  function revertLocalAdd(
415
- string: SharedString,
419
+ string: ISharedString,
416
420
  revertible: TypedRevertible<typeof IntervalOpType.ADD>,
417
421
  ) {
418
422
  const id = getUpdatedIdFromInterval(revertible.interval);
@@ -441,7 +445,7 @@ function createSequencePlace(
441
445
  }
442
446
 
443
447
  function revertLocalDelete(
444
- string: SharedString,
448
+ string: ISharedString,
445
449
  revertible: TypedRevertible<typeof IntervalOpType.DELETE>,
446
450
  ) {
447
451
  const label = revertible.interval.properties.referenceRangeLabels[0];
@@ -480,7 +484,7 @@ function revertLocalDelete(
480
484
  }
481
485
 
482
486
  function revertLocalChange(
483
- string: SharedString,
487
+ string: ISharedString,
484
488
  revertible: TypedRevertible<typeof IntervalOpType.CHANGE>,
485
489
  ) {
486
490
  const label = revertible.interval.properties.referenceRangeLabels[0];
@@ -520,7 +524,7 @@ function revertLocalChange(
520
524
  }
521
525
 
522
526
  function revertLocalPropertyChanged(
523
- string: SharedString,
527
+ string: ISharedString,
524
528
  revertible: TypedRevertible<typeof IntervalOpType.PROPERTY_CHANGED>,
525
529
  ) {
526
530
  const label = revertible.interval.properties.referenceRangeLabels[0];
@@ -554,7 +558,7 @@ function newPosition(offset: number | undefined, restoredRanges: SortedRangeSet)
554
558
  function newEndpointPosition(
555
559
  offset: number | undefined,
556
560
  restoredRanges: SortedRangeSet,
557
- sharedString: SharedString,
561
+ sharedString: ISharedString,
558
562
  ) {
559
563
  const pos = newPosition(offset, restoredRanges);
560
564
  return pos === undefined ? undefined : sharedString.getPosition(pos.segment) + pos.offset;
@@ -573,7 +577,7 @@ class SortedRangeSet extends SortedSet<RangeInfo, string> {
573
577
  }
574
578
 
575
579
  function revertLocalSequenceRemove(
576
- sharedString: SharedString,
580
+ sharedString: ISharedString,
577
581
  revertible: TypedRevertible<typeof IntervalOpType.POSITION_REMOVE>,
578
582
  ) {
579
583
  const restoredRanges = new SortedRangeSet();
@@ -657,7 +661,7 @@ function revertLocalSequenceRemove(
657
661
  * @alpha
658
662
  */
659
663
  export function revertSharedStringRevertibles(
660
- sharedString: SharedString,
664
+ sharedString: ISharedString,
661
665
  revertibles: SharedStringRevertible[],
662
666
  ) {
663
667
  while (revertibles.length > 0) {
package/src/sequence.ts CHANGED
@@ -17,7 +17,9 @@ import {
17
17
  IJSONSegment,
18
18
  IMergeTreeAnnotateMsg,
19
19
  IMergeTreeDeltaOp,
20
+ // eslint-disable-next-line import/no-deprecated
20
21
  IMergeTreeGroupMsg,
22
+ // eslint-disable-next-line import/no-deprecated
21
23
  IMergeTreeObliterateMsg,
22
24
  IMergeTreeOp,
23
25
  IMergeTreeRemoveMsg,
@@ -30,9 +32,11 @@ import {
30
32
  PropertySet,
31
33
  ReferencePosition,
32
34
  ReferenceType,
35
+ // eslint-disable-next-line import/no-deprecated
33
36
  SegmentGroup,
34
37
  SlidingPreference,
35
- createAnnotateRangeOp, // eslint-disable-next-line import/no-deprecated
38
+ createAnnotateRangeOp,
39
+ // eslint-disable-next-line import/no-deprecated
36
40
  createGroupOp,
37
41
  createInsertOp,
38
42
  createObliterateRangeOp,
@@ -180,6 +184,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
180
184
  }
181
185
 
182
186
  case MergeTreeDeltaType.OBLITERATE: {
187
+ // eslint-disable-next-line import/no-deprecated
183
188
  const lastRem = ops[ops.length - 1] as IMergeTreeObliterateMsg;
184
189
  if (lastRem?.pos1 === r.position) {
185
190
  assert(
@@ -235,7 +240,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
235
240
  * DDS submits over the wire. See `inFlightRefSeqs` for more details.
236
241
  */
237
242
  private get currentRefSeq() {
238
- return this.ongoingResubmitRefSeq ?? this.runtime.deltaManager.lastSequenceNumber;
243
+ return this.ongoingResubmitRefSeq ?? this.deltaManager.lastSequenceNumber;
239
244
  }
240
245
 
241
246
  // eslint-disable-next-line import/no-deprecated
@@ -243,6 +248,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
243
248
  /** `Deferred` that triggers once the object is loaded */
244
249
  protected loadedDeferred = new Deferred<void>();
245
250
  // cache out going ops created when partial loading
251
+ // eslint-disable-next-line import/no-deprecated
246
252
  private readonly loadedDeferredOutgoingOps: [IMergeTreeOp, SegmentGroup | SegmentGroup[]][] =
247
253
  [];
248
254
  // cache incoming ops that arrive when partial loading
@@ -340,6 +346,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
340
346
  * release, as group ops are redundant with the native batching capabilities
341
347
  * of the runtime
342
348
  */
349
+ // eslint-disable-next-line import/no-deprecated
343
350
  public groupOperation(groupOp: IMergeTreeGroupMsg) {
344
351
  this.guardReentrancy(() => this.client.localTransaction(groupOp));
345
352
  }
@@ -654,6 +661,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
654
661
  this.submitSequenceMessage(
655
662
  this.client.regeneratePendingOp(
656
663
  content as IMergeTreeOp,
664
+ // eslint-disable-next-line import/no-deprecated
657
665
  localOpMetadata as SegmentGroup | SegmentGroup[],
658
666
  ),
659
667
  );
@@ -803,7 +811,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
803
811
  this.loadedDeferred.isCompleted,
804
812
  0x074 /* "Snapshot called when not fully loaded" */,
805
813
  );
806
- const minSeq = this.runtime.deltaManager.minimumSequenceNumber;
814
+ const minSeq = this.deltaManager.minimumSequenceNumber;
807
815
 
808
816
  this.processMinSequenceNumberChanged(minSeq);
809
817
 
@@ -36,6 +36,9 @@ export abstract class SequenceEvent<
36
36
  private readonly pLast: Lazy<ISequenceDeltaRange<TOperation>>;
37
37
 
38
38
  constructor(
39
+ /**
40
+ * Arguments reflecting the type of change that caused this event.
41
+ */
39
42
  public readonly deltaArgs: IMergeTreeDeltaCallbackArgs<TOperation>,
40
43
  // eslint-disable-next-line import/no-deprecated
41
44
  private readonly mergeTreeClient: Client,
@@ -73,7 +76,10 @@ export abstract class SequenceEvent<
73
76
 
74
77
  /**
75
78
  * The in-order ranges affected by this delta.
76
- * These may not be continuous.
79
+ * These are not necessarily contiguous.
80
+ *
81
+ * @remarks - If processing code doesn't care about the order of the ranges, it may instead consider using the
82
+ * {@link @fluidframework/merge-tree#IMergeTreeDeltaCallbackArgs.deltaSegments|deltaSegments} field on {@link SequenceEvent.deltaArgs|deltaArgs}.
77
83
  */
78
84
  public get ranges(): readonly Readonly<ISequenceDeltaRange<TOperation>>[] {
79
85
  return this.sortedRanges.value.items;
@@ -140,6 +146,11 @@ export class SequenceDeltaEvent extends SequenceEvent<MergeTreeDeltaOperationTyp
140
146
  */
141
147
  export class SequenceMaintenanceEvent extends SequenceEvent<MergeTreeMaintenanceType> {
142
148
  constructor(
149
+ /**
150
+ * Defined iff `deltaArgs.operation` is {@link @fluidframework/merge-tree#MergeTreeMaintenanceType.ACKNOWLEDGED|MergeTreeMaintenanceType.ACKNOWLEDGED}.
151
+ *
152
+ * In that case, this argument provides information about the change which was acknowledged.
153
+ */
143
154
  public readonly opArgs: IMergeTreeDeltaOpArgs | undefined,
144
155
  deltaArgs: IMergeTreeMaintenanceCallbackArgs,
145
156
  // eslint-disable-next-line import/no-deprecated
@@ -10,14 +10,13 @@ import {
10
10
  IFluidDataStoreRuntime,
11
11
  } from "@fluidframework/datastore-definitions";
12
12
  import { Marker, TextSegment } from "@fluidframework/merge-tree/internal";
13
+ import type { ISharedObjectKind } from "@fluidframework/shared-object-base";
14
+ import { createSharedObjectKind } from "@fluidframework/shared-object-base/internal";
13
15
 
14
16
  import { pkgVersion } from "./packageVersion.js";
15
- import { SharedString, SharedStringSegment } from "./sharedString.js";
17
+ import { SharedStringClass, SharedStringSegment, type ISharedString } from "./sharedString.js";
16
18
 
17
- /**
18
- * @alpha
19
- */
20
- export class SharedStringFactory implements IChannelFactory {
19
+ export class SharedStringFactory implements IChannelFactory<ISharedString> {
21
20
  // TODO rename back to https://graph.microsoft.com/types/mergeTree/string once paparazzi is able to dynamically
22
21
  // load code (UPDATE: paparazzi is gone... anything to do here?)
23
22
  public static Type = "https://graph.microsoft.com/types/mergeTree";
@@ -58,8 +57,8 @@ export class SharedStringFactory implements IChannelFactory {
58
57
  id: string,
59
58
  services: IChannelServices,
60
59
  attributes: IChannelAttributes,
61
- ): Promise<SharedString> {
62
- const sharedString = new SharedString(runtime, id, attributes);
60
+ ): Promise<SharedStringClass> {
61
+ const sharedString = new SharedStringClass(runtime, id, attributes);
63
62
  await sharedString.load(services);
64
63
  return sharedString;
65
64
  }
@@ -67,9 +66,22 @@ export class SharedStringFactory implements IChannelFactory {
67
66
  /**
68
67
  * {@inheritDoc @fluidframework/datastore-definitions#IChannelFactory.create}
69
68
  */
70
- public create(document: IFluidDataStoreRuntime, id: string): SharedString {
71
- const sharedString = new SharedString(document, id, this.attributes);
69
+ public create(document: IFluidDataStoreRuntime, id: string): SharedStringClass {
70
+ const sharedString = new SharedStringClass(document, id, this.attributes);
72
71
  sharedString.initializeLocal();
73
72
  return sharedString;
74
73
  }
75
74
  }
75
+
76
+ /**
77
+ * Entrypoint for {@link ISharedString} creation.
78
+ * @alpha
79
+ */
80
+ export const SharedString: ISharedObjectKind<ISharedString> =
81
+ createSharedObjectKind(SharedStringFactory);
82
+
83
+ /**
84
+ * Alias for {@link ISharedString} for compatibility.
85
+ * @alpha
86
+ */
87
+ export type SharedString = ISharedString;