@fluidframework/sequence 2.0.0-internal.7.0.0 → 2.0.0-internal.7.2.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 (191) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/api-extractor.json +1 -1
  3. package/api-report/sequence.api.md +717 -0
  4. package/dist/defaultMapInterfaces.d.ts +1 -0
  5. package/dist/defaultMapInterfaces.d.ts.map +1 -1
  6. package/dist/defaultMapInterfaces.js.map +1 -1
  7. package/dist/intervalCollection.d.ts +36 -6
  8. package/dist/intervalCollection.d.ts.map +1 -1
  9. package/dist/intervalCollection.js +31 -8
  10. package/dist/intervalCollection.js.map +1 -1
  11. package/dist/intervalIndex/endpointInRangeIndex.d.ts +4 -0
  12. package/dist/intervalIndex/endpointInRangeIndex.d.ts.map +1 -1
  13. package/dist/intervalIndex/endpointInRangeIndex.js +3 -0
  14. package/dist/intervalIndex/endpointInRangeIndex.js.map +1 -1
  15. package/dist/intervalIndex/endpointIndex.d.ts +6 -0
  16. package/dist/intervalIndex/endpointIndex.d.ts.map +1 -1
  17. package/dist/intervalIndex/endpointIndex.js +3 -0
  18. package/dist/intervalIndex/endpointIndex.js.map +1 -1
  19. package/dist/intervalIndex/idIntervalIndex.d.ts +6 -0
  20. package/dist/intervalIndex/idIntervalIndex.d.ts.map +1 -1
  21. package/dist/intervalIndex/idIntervalIndex.js +3 -0
  22. package/dist/intervalIndex/idIntervalIndex.js.map +1 -1
  23. package/dist/intervalIndex/intervalIndex.d.ts +1 -0
  24. package/dist/intervalIndex/intervalIndex.d.ts.map +1 -1
  25. package/dist/intervalIndex/intervalIndex.js.map +1 -1
  26. package/dist/intervalIndex/overlappingIntervalsIndex.d.ts +9 -0
  27. package/dist/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -1
  28. package/dist/intervalIndex/overlappingIntervalsIndex.js +6 -0
  29. package/dist/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
  30. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts +3 -0
  31. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +1 -1
  32. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js +6 -0
  33. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -1
  34. package/dist/intervalIndex/sequenceIntervalIndexes.d.ts +1 -0
  35. package/dist/intervalIndex/sequenceIntervalIndexes.d.ts.map +1 -1
  36. package/dist/intervalIndex/sequenceIntervalIndexes.js.map +1 -1
  37. package/dist/intervalIndex/startpointInRangeIndex.d.ts +4 -0
  38. package/dist/intervalIndex/startpointInRangeIndex.d.ts.map +1 -1
  39. package/dist/intervalIndex/startpointInRangeIndex.js +3 -0
  40. package/dist/intervalIndex/startpointInRangeIndex.js.map +1 -1
  41. package/dist/intervals/interval.d.ts +1 -0
  42. package/dist/intervals/interval.d.ts.map +1 -1
  43. package/dist/intervals/interval.js +1 -0
  44. package/dist/intervals/interval.js.map +1 -1
  45. package/dist/intervals/intervalUtils.d.ts +12 -1
  46. package/dist/intervals/intervalUtils.d.ts.map +1 -1
  47. package/dist/intervals/intervalUtils.js +6 -0
  48. package/dist/intervals/intervalUtils.js.map +1 -1
  49. package/dist/intervals/sequenceInterval.d.ts +2 -0
  50. package/dist/intervals/sequenceInterval.d.ts.map +1 -1
  51. package/dist/intervals/sequenceInterval.js +2 -0
  52. package/dist/intervals/sequenceInterval.js.map +1 -1
  53. package/dist/localValues.d.ts.map +1 -1
  54. package/dist/localValues.js.map +1 -1
  55. package/dist/packageVersion.d.ts +1 -1
  56. package/dist/packageVersion.js +1 -1
  57. package/dist/packageVersion.js.map +1 -1
  58. package/dist/revertibles.d.ts +1 -1
  59. package/dist/revertibles.d.ts.map +1 -1
  60. package/dist/revertibles.js +5 -2
  61. package/dist/revertibles.js.map +1 -1
  62. package/dist/sequence.d.ts +7 -3
  63. package/dist/sequence.d.ts.map +1 -1
  64. package/dist/sequence.js +9 -4
  65. package/dist/sequence.js.map +1 -1
  66. package/dist/sequenceDeltaEvent.d.ts +4 -0
  67. package/dist/sequenceDeltaEvent.d.ts.map +1 -1
  68. package/dist/sequenceDeltaEvent.js +3 -0
  69. package/dist/sequenceDeltaEvent.js.map +1 -1
  70. package/dist/sequenceFactory.d.ts +3 -0
  71. package/dist/sequenceFactory.d.ts.map +1 -1
  72. package/dist/sequenceFactory.js +3 -0
  73. package/dist/sequenceFactory.js.map +1 -1
  74. package/dist/sharedIntervalCollection.d.ts +5 -0
  75. package/dist/sharedIntervalCollection.d.ts.map +1 -1
  76. package/dist/sharedIntervalCollection.js +2 -0
  77. package/dist/sharedIntervalCollection.js.map +1 -1
  78. package/dist/sharedSequence.d.ts +6 -3
  79. package/dist/sharedSequence.d.ts.map +1 -1
  80. package/dist/sharedSequence.js +4 -2
  81. package/dist/sharedSequence.js.map +1 -1
  82. package/dist/sharedString.d.ts +16 -1
  83. package/dist/sharedString.d.ts.map +1 -1
  84. package/dist/sharedString.js +14 -1
  85. package/dist/sharedString.js.map +1 -1
  86. package/dist/tsdoc-metadata.json +1 -1
  87. package/lib/defaultMapInterfaces.d.ts +1 -0
  88. package/lib/defaultMapInterfaces.d.ts.map +1 -1
  89. package/lib/defaultMapInterfaces.js.map +1 -1
  90. package/lib/intervalCollection.d.ts +36 -6
  91. package/lib/intervalCollection.d.ts.map +1 -1
  92. package/lib/intervalCollection.js +31 -8
  93. package/lib/intervalCollection.js.map +1 -1
  94. package/lib/intervalIndex/endpointInRangeIndex.d.ts +4 -0
  95. package/lib/intervalIndex/endpointInRangeIndex.d.ts.map +1 -1
  96. package/lib/intervalIndex/endpointInRangeIndex.js +3 -0
  97. package/lib/intervalIndex/endpointInRangeIndex.js.map +1 -1
  98. package/lib/intervalIndex/endpointIndex.d.ts +6 -0
  99. package/lib/intervalIndex/endpointIndex.d.ts.map +1 -1
  100. package/lib/intervalIndex/endpointIndex.js +3 -0
  101. package/lib/intervalIndex/endpointIndex.js.map +1 -1
  102. package/lib/intervalIndex/idIntervalIndex.d.ts +6 -0
  103. package/lib/intervalIndex/idIntervalIndex.d.ts.map +1 -1
  104. package/lib/intervalIndex/idIntervalIndex.js +3 -0
  105. package/lib/intervalIndex/idIntervalIndex.js.map +1 -1
  106. package/lib/intervalIndex/intervalIndex.d.ts +1 -0
  107. package/lib/intervalIndex/intervalIndex.d.ts.map +1 -1
  108. package/lib/intervalIndex/intervalIndex.js.map +1 -1
  109. package/lib/intervalIndex/overlappingIntervalsIndex.d.ts +9 -0
  110. package/lib/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -1
  111. package/lib/intervalIndex/overlappingIntervalsIndex.js +6 -0
  112. package/lib/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
  113. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.ts +3 -0
  114. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +1 -1
  115. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js +6 -0
  116. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -1
  117. package/lib/intervalIndex/sequenceIntervalIndexes.d.ts +1 -0
  118. package/lib/intervalIndex/sequenceIntervalIndexes.d.ts.map +1 -1
  119. package/lib/intervalIndex/sequenceIntervalIndexes.js.map +1 -1
  120. package/lib/intervalIndex/startpointInRangeIndex.d.ts +4 -0
  121. package/lib/intervalIndex/startpointInRangeIndex.d.ts.map +1 -1
  122. package/lib/intervalIndex/startpointInRangeIndex.js +3 -0
  123. package/lib/intervalIndex/startpointInRangeIndex.js.map +1 -1
  124. package/lib/intervals/interval.d.ts +1 -0
  125. package/lib/intervals/interval.d.ts.map +1 -1
  126. package/lib/intervals/interval.js +1 -0
  127. package/lib/intervals/interval.js.map +1 -1
  128. package/lib/intervals/intervalUtils.d.ts +12 -1
  129. package/lib/intervals/intervalUtils.d.ts.map +1 -1
  130. package/lib/intervals/intervalUtils.js +6 -0
  131. package/lib/intervals/intervalUtils.js.map +1 -1
  132. package/lib/intervals/sequenceInterval.d.ts +2 -0
  133. package/lib/intervals/sequenceInterval.d.ts.map +1 -1
  134. package/lib/intervals/sequenceInterval.js +2 -0
  135. package/lib/intervals/sequenceInterval.js.map +1 -1
  136. package/lib/localValues.d.ts.map +1 -1
  137. package/lib/localValues.js.map +1 -1
  138. package/lib/packageVersion.d.ts +1 -1
  139. package/lib/packageVersion.js +1 -1
  140. package/lib/packageVersion.js.map +1 -1
  141. package/lib/revertibles.d.ts +1 -1
  142. package/lib/revertibles.d.ts.map +1 -1
  143. package/lib/revertibles.js +5 -2
  144. package/lib/revertibles.js.map +1 -1
  145. package/lib/sequence.d.ts +7 -3
  146. package/lib/sequence.d.ts.map +1 -1
  147. package/lib/sequence.js +12 -5
  148. package/lib/sequence.js.map +1 -1
  149. package/lib/sequenceDeltaEvent.d.ts +4 -0
  150. package/lib/sequenceDeltaEvent.d.ts.map +1 -1
  151. package/lib/sequenceDeltaEvent.js +3 -0
  152. package/lib/sequenceDeltaEvent.js.map +1 -1
  153. package/lib/sequenceFactory.d.ts +3 -0
  154. package/lib/sequenceFactory.d.ts.map +1 -1
  155. package/lib/sequenceFactory.js +3 -0
  156. package/lib/sequenceFactory.js.map +1 -1
  157. package/lib/sharedIntervalCollection.d.ts +5 -0
  158. package/lib/sharedIntervalCollection.d.ts.map +1 -1
  159. package/lib/sharedIntervalCollection.js +2 -0
  160. package/lib/sharedIntervalCollection.js.map +1 -1
  161. package/lib/sharedSequence.d.ts +6 -3
  162. package/lib/sharedSequence.d.ts.map +1 -1
  163. package/lib/sharedSequence.js +4 -2
  164. package/lib/sharedSequence.js.map +1 -1
  165. package/lib/sharedString.d.ts +16 -1
  166. package/lib/sharedString.d.ts.map +1 -1
  167. package/lib/sharedString.js +14 -1
  168. package/lib/sharedString.js.map +1 -1
  169. package/package.json +25 -50
  170. package/src/defaultMapInterfaces.ts +1 -0
  171. package/src/intervalCollection.ts +91 -13
  172. package/src/intervalIndex/endpointInRangeIndex.ts +4 -0
  173. package/src/intervalIndex/endpointIndex.ts +6 -0
  174. package/src/intervalIndex/idIntervalIndex.ts +6 -0
  175. package/src/intervalIndex/intervalIndex.ts +1 -0
  176. package/src/intervalIndex/overlappingIntervalsIndex.ts +9 -0
  177. package/src/intervalIndex/overlappingSequenceIntervalsIndex.ts +6 -0
  178. package/src/intervalIndex/sequenceIntervalIndexes.ts +1 -0
  179. package/src/intervalIndex/startpointInRangeIndex.ts +4 -1
  180. package/src/intervals/interval.ts +6 -1
  181. package/src/intervals/intervalUtils.ts +12 -1
  182. package/src/intervals/sequenceInterval.ts +2 -0
  183. package/src/localValues.ts +4 -1
  184. package/src/packageVersion.ts +1 -1
  185. package/src/revertibles.ts +6 -3
  186. package/src/sequence.ts +11 -4
  187. package/src/sequenceDeltaEvent.ts +4 -0
  188. package/src/sequenceFactory.ts +3 -0
  189. package/src/sharedIntervalCollection.ts +5 -0
  190. package/src/sharedSequence.ts +6 -3
  191. package/src/sharedString.ts +23 -1
@@ -0,0 +1,717 @@
1
+ ## API Report File for "@fluidframework/sequence"
2
+
3
+ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
4
+
5
+ ```ts
6
+
7
+ import { BaseSegment } from '@fluidframework/merge-tree';
8
+ import { Client } from '@fluidframework/merge-tree';
9
+ import { Deferred } from '@fluidframework/core-utils';
10
+ import { IChannelAttributes } from '@fluidframework/datastore-definitions';
11
+ import { IChannelFactory } from '@fluidframework/datastore-definitions';
12
+ import { IChannelServices } from '@fluidframework/datastore-definitions';
13
+ import { IChannelStorageService } from '@fluidframework/datastore-definitions';
14
+ import { ICombiningOp } from '@fluidframework/merge-tree';
15
+ import { IEvent } from '@fluidframework/core-interfaces';
16
+ import { IEventThisPlaceHolder } from '@fluidframework/core-interfaces';
17
+ import { IFluidDataStoreRuntime } from '@fluidframework/datastore-definitions';
18
+ import { IFluidSerializer } from '@fluidframework/shared-object-base';
19
+ import { IJSONSegment } from '@fluidframework/merge-tree';
20
+ import { IMergeTreeDeltaCallbackArgs } from '@fluidframework/merge-tree';
21
+ import { IMergeTreeDeltaOpArgs } from '@fluidframework/merge-tree';
22
+ import { IMergeTreeGroupMsg } from '@fluidframework/merge-tree';
23
+ import { IMergeTreeInsertMsg } from '@fluidframework/merge-tree';
24
+ import { IMergeTreeMaintenanceCallbackArgs } from '@fluidframework/merge-tree';
25
+ import { IMergeTreeOp } from '@fluidframework/merge-tree';
26
+ import { IMergeTreeRemoveMsg } from '@fluidframework/merge-tree';
27
+ import { IRelativePosition } from '@fluidframework/merge-tree';
28
+ import { ISegment } from '@fluidframework/merge-tree';
29
+ import { ISegmentAction } from '@fluidframework/merge-tree';
30
+ import { ISequencedDocumentMessage } from '@fluidframework/protocol-definitions';
31
+ import { ISharedObjectEvents } from '@fluidframework/shared-object-base';
32
+ import { ISummaryTreeWithStats } from '@fluidframework/runtime-definitions';
33
+ import { ITelemetryContext } from '@fluidframework/runtime-definitions';
34
+ import { LocalReferencePosition } from '@fluidframework/merge-tree';
35
+ import { Marker } from '@fluidframework/merge-tree';
36
+ import { MergeTreeDeltaOperationType } from '@fluidframework/merge-tree';
37
+ import { MergeTreeDeltaOperationTypes } from '@fluidframework/merge-tree';
38
+ import { MergeTreeDeltaRevertible } from '@fluidframework/merge-tree';
39
+ import { MergeTreeMaintenanceType } from '@fluidframework/merge-tree';
40
+ import { MergeTreeRevertibleDriver } from '@fluidframework/merge-tree';
41
+ import { PropertiesManager } from '@fluidframework/merge-tree';
42
+ import { PropertySet } from '@fluidframework/merge-tree';
43
+ import { RangeStackMap } from '@fluidframework/merge-tree';
44
+ import { ReferencePosition } from '@fluidframework/merge-tree';
45
+ import { ReferenceType } from '@fluidframework/merge-tree';
46
+ import { Serializable } from '@fluidframework/datastore-definitions';
47
+ import { SharedObject } from '@fluidframework/shared-object-base';
48
+ import { SlidingPreference } from '@fluidframework/merge-tree';
49
+ import { SummarySerializer } from '@fluidframework/shared-object-base';
50
+ import { TextSegment } from '@fluidframework/merge-tree';
51
+ import { TypedEventEmitter } from '@fluid-internal/client-utils';
52
+
53
+ // @alpha
54
+ export function appendAddIntervalToRevertibles(interval: SequenceInterval, revertibles: SharedStringRevertible[]): SharedStringRevertible[];
55
+
56
+ // @alpha
57
+ export function appendChangeIntervalToRevertibles(string: SharedString, newInterval: SequenceInterval, previousInterval: SequenceInterval, revertibles: SharedStringRevertible[]): SharedStringRevertible[];
58
+
59
+ // @alpha
60
+ export function appendDeleteIntervalToRevertibles(string: SharedString, interval: SequenceInterval, revertibles: SharedStringRevertible[]): SharedStringRevertible[];
61
+
62
+ // @alpha
63
+ export function appendIntervalPropertyChangedToRevertibles(interval: SequenceInterval, deltas: PropertySet, revertibles: SharedStringRevertible[]): SharedStringRevertible[];
64
+
65
+ // @alpha
66
+ export function appendSharedStringDeltaToRevertibles(string: SharedString, delta: SequenceDeltaEvent, revertibles: SharedStringRevertible[]): void;
67
+
68
+ // @public (undocumented)
69
+ export function createEndpointIndex(sharedString: SharedString): IEndpointIndex<SequenceInterval>;
70
+
71
+ // @public (undocumented)
72
+ export function createEndpointInRangeIndex(sharedString: SharedString): IEndpointInRangeIndex<SequenceInterval>;
73
+
74
+ // @public (undocumented)
75
+ export function createIdIntervalIndex<TInterval extends ISerializableInterval>(): IIdIntervalIndex<TInterval>;
76
+
77
+ // @public (undocumented)
78
+ export function createOverlappingIntervalsIndex(sharedString: SharedString): IOverlappingIntervalsIndex<SequenceInterval>;
79
+
80
+ // @public (undocumented)
81
+ export function createOverlappingSequenceIntervalsIndex(sharedString: SharedString): SequenceIntervalIndexes.Overlapping;
82
+
83
+ // @public (undocumented)
84
+ export function createStartpointInRangeIndex(sharedString: SharedString): IStartpointInRangeIndex<SequenceInterval>;
85
+
86
+ // @public (undocumented)
87
+ export type DeserializeCallback = (properties: PropertySet) => void;
88
+
89
+ // @alpha
90
+ export function discardSharedStringRevertibles(sharedString: SharedString, revertibles: SharedStringRevertible[]): void;
91
+
92
+ // @public
93
+ export function getTextAndMarkers(sharedString: SharedString, label: string, start?: number, end?: number): {
94
+ parallelText: string[];
95
+ parallelMarkers: Marker[];
96
+ };
97
+
98
+ // @public (undocumented)
99
+ export interface IEndpointIndex<TInterval extends ISerializableInterval> extends IntervalIndex<TInterval> {
100
+ // (undocumented)
101
+ nextInterval(pos: number): TInterval | undefined;
102
+ // (undocumented)
103
+ previousInterval(pos: number): TInterval | undefined;
104
+ }
105
+
106
+ // @public
107
+ export interface IEndpointInRangeIndex<TInterval extends ISerializableInterval> extends IntervalIndex<TInterval> {
108
+ // (undocumented)
109
+ findIntervalsWithEndpointInRange(start: number, end: number): TInterval[];
110
+ }
111
+
112
+ // @public (undocumented)
113
+ export interface IIdIntervalIndex<TInterval extends ISerializableInterval> extends IntervalIndex<TInterval>, Iterable<TInterval> {
114
+ // (undocumented)
115
+ [Symbol.iterator](): Iterator<TInterval>;
116
+ // (undocumented)
117
+ getIntervalById(id: string): TInterval | undefined;
118
+ }
119
+
120
+ // @public
121
+ export interface IInterval {
122
+ // (undocumented)
123
+ clone(): IInterval;
124
+ compare(b: IInterval): number;
125
+ compareEnd(b: IInterval): number;
126
+ compareStart(b: IInterval): number;
127
+ // @internal
128
+ modify(label: string, start: SequencePlace | undefined, end: SequencePlace | undefined, op?: ISequencedDocumentMessage, localSeq?: number, useNewSlidingBehavior?: boolean): IInterval | undefined;
129
+ // (undocumented)
130
+ overlaps(b: IInterval): boolean;
131
+ // @internal
132
+ union(b: IInterval): IInterval;
133
+ }
134
+
135
+ // @public
136
+ export interface IIntervalCollection<TInterval extends ISerializableInterval> extends TypedEventEmitter<IIntervalCollectionEvent<TInterval>> {
137
+ // (undocumented)
138
+ [Symbol.iterator](): Iterator<TInterval>;
139
+ // @deprecated
140
+ add(start: SequencePlace, end: SequencePlace, intervalType: IntervalType, props?: PropertySet): TInterval;
141
+ add({ start, end, props, }: {
142
+ start: SequencePlace;
143
+ end: SequencePlace;
144
+ props?: PropertySet;
145
+ }): TInterval;
146
+ // (undocumented)
147
+ attachDeserializer(onDeserialize: DeserializeCallback): void;
148
+ // (undocumented)
149
+ readonly attached: boolean;
150
+ attachIndex(index: IntervalIndex<TInterval>): void;
151
+ change(id: string, start: SequencePlace, end: SequencePlace): TInterval | undefined;
152
+ changeProperties(id: string, props: PropertySet): any;
153
+ // (undocumented)
154
+ CreateBackwardIteratorWithEndPosition(endPosition: number): Iterator<TInterval>;
155
+ // (undocumented)
156
+ CreateBackwardIteratorWithStartPosition(startPosition: number): Iterator<TInterval>;
157
+ // (undocumented)
158
+ CreateForwardIteratorWithEndPosition(endPosition: number): Iterator<TInterval>;
159
+ // (undocumented)
160
+ CreateForwardIteratorWithStartPosition(startPosition: number): Iterator<TInterval>;
161
+ detachIndex(index: IntervalIndex<TInterval>): boolean;
162
+ // (undocumented)
163
+ findOverlappingIntervals(startPosition: number, endPosition: number): TInterval[];
164
+ gatherIterationResults(results: TInterval[], iteratesForward: boolean, start?: number, end?: number): void;
165
+ // (undocumented)
166
+ getIntervalById(id: string): TInterval | undefined;
167
+ map(fn: (interval: TInterval) => void): void;
168
+ // (undocumented)
169
+ nextInterval(pos: number): TInterval | undefined;
170
+ // (undocumented)
171
+ previousInterval(pos: number): TInterval | undefined;
172
+ removeIntervalById(id: string): TInterval | undefined;
173
+ }
174
+
175
+ // @public
176
+ export interface IIntervalCollectionEvent<TInterval extends ISerializableInterval> extends IEvent {
177
+ (event: "changeInterval", listener: (interval: TInterval, previousInterval: TInterval, local: boolean, op: ISequencedDocumentMessage | undefined, slide: boolean) => void): any;
178
+ (event: "addInterval" | "deleteInterval", listener: (interval: TInterval, local: boolean, op: ISequencedDocumentMessage | undefined) => void): any;
179
+ (event: "propertyChanged", listener: (interval: TInterval, propertyDeltas: PropertySet, local: boolean, op: ISequencedDocumentMessage | undefined) => void): any;
180
+ }
181
+
182
+ // @public @sealed @deprecated (undocumented)
183
+ export interface IIntervalHelpers<TInterval extends ISerializableInterval> {
184
+ // (undocumented)
185
+ create(label: string, start: SequencePlace | undefined, end: SequencePlace | undefined, client: Client | undefined, intervalType: IntervalType, op?: ISequencedDocumentMessage, fromSnapshot?: boolean, useNewSlidingBehavior?: boolean): TInterval;
186
+ }
187
+
188
+ // @public @deprecated (undocumented)
189
+ export interface IJSONRunSegment<T> extends IJSONSegment {
190
+ // (undocumented)
191
+ items: Serializable<T>[];
192
+ }
193
+
194
+ // @internal (undocumented)
195
+ export interface IMapMessageLocalMetadata {
196
+ // (undocumented)
197
+ localSeq: number;
198
+ }
199
+
200
+ // @public
201
+ export interface InteriorSequencePlace {
202
+ // (undocumented)
203
+ pos: number;
204
+ // (undocumented)
205
+ side: Side;
206
+ }
207
+
208
+ // @public
209
+ export class Interval implements ISerializableInterval {
210
+ constructor(start: number, end: number, props?: PropertySet);
211
+ // @internal (undocumented)
212
+ addProperties(newProps: PropertySet, collaborating?: boolean, seq?: number, op?: ICombiningOp): PropertySet | undefined;
213
+ addPropertySet(props: PropertySet): void;
214
+ // @internal (undocumented)
215
+ auxProps: PropertySet[] | undefined;
216
+ // (undocumented)
217
+ clone(): Interval;
218
+ compare(b: Interval): number;
219
+ compareEnd(b: Interval): number;
220
+ compareStart(b: Interval): number;
221
+ // (undocumented)
222
+ end: number;
223
+ // (undocumented)
224
+ getAdditionalPropertySets(): PropertySet[];
225
+ getIntervalId(): string;
226
+ // (undocumented)
227
+ getProperties(): PropertySet;
228
+ // @internal
229
+ modify(label: string, start?: SequencePlace, end?: SequencePlace, op?: ISequencedDocumentMessage): Interval | undefined;
230
+ // (undocumented)
231
+ overlaps(b: Interval): boolean;
232
+ properties: PropertySet;
233
+ // @internal (undocumented)
234
+ propertyManager: PropertiesManager;
235
+ // @internal (undocumented)
236
+ serialize(): ISerializedInterval;
237
+ // (undocumented)
238
+ start: number;
239
+ // @internal
240
+ union(b: Interval): Interval;
241
+ }
242
+
243
+ // @public
244
+ export interface IntervalIndex<TInterval extends ISerializableInterval> {
245
+ add(interval: TInterval): void;
246
+ remove(interval: TInterval): void;
247
+ }
248
+
249
+ // @public
250
+ export interface IntervalLocator {
251
+ interval: SequenceInterval;
252
+ label: string;
253
+ }
254
+
255
+ // @public
256
+ export function intervalLocatorFromEndpoint(potentialEndpoint: LocalReferencePosition): IntervalLocator | undefined;
257
+
258
+ // @alpha
259
+ export const IntervalOpType: {
260
+ readonly ADD: "add";
261
+ readonly DELETE: "delete";
262
+ readonly CHANGE: "change";
263
+ readonly PROPERTY_CHANGED: "propertyChanged";
264
+ readonly POSITION_REMOVE: "positionRemove";
265
+ };
266
+
267
+ // @alpha
268
+ export type IntervalRevertible = {
269
+ event: typeof IntervalOpType.CHANGE;
270
+ interval: SequenceInterval;
271
+ start: LocalReferencePosition;
272
+ end: LocalReferencePosition;
273
+ } | {
274
+ event: typeof IntervalOpType.ADD;
275
+ interval: SequenceInterval;
276
+ } | {
277
+ event: typeof IntervalOpType.DELETE;
278
+ interval: SequenceInterval;
279
+ start: LocalReferencePosition;
280
+ end: LocalReferencePosition;
281
+ } | {
282
+ event: typeof IntervalOpType.PROPERTY_CHANGED;
283
+ interval: SequenceInterval;
284
+ propertyDeltas: PropertySet;
285
+ } | {
286
+ event: typeof IntervalOpType.POSITION_REMOVE;
287
+ intervals: {
288
+ intervalId: string;
289
+ label: string;
290
+ startOffset?: number;
291
+ endOffset?: number;
292
+ }[];
293
+ revertibleRefs: {
294
+ revertible: IntervalRevertible;
295
+ offset: number;
296
+ isStart: boolean;
297
+ }[];
298
+ mergeTreeRevertible: MergeTreeDeltaRevertible;
299
+ };
300
+
301
+ // @internal
302
+ export const IntervalStickiness: {
303
+ readonly NONE: 0;
304
+ readonly START: 1;
305
+ readonly END: 2;
306
+ readonly FULL: 3;
307
+ };
308
+
309
+ // @internal
310
+ export type IntervalStickiness = (typeof IntervalStickiness)[keyof typeof IntervalStickiness];
311
+
312
+ // @public (undocumented)
313
+ export enum IntervalType {
314
+ // @deprecated (undocumented)
315
+ Nest = 1,
316
+ // (undocumented)
317
+ Simple = 0,
318
+ SlideOnRemove = 2,
319
+ // @internal
320
+ Transient = 4
321
+ }
322
+
323
+ // @public (undocumented)
324
+ export interface IOverlappingIntervalsIndex<TInterval extends ISerializableInterval> extends IntervalIndex<TInterval> {
325
+ // (undocumented)
326
+ findOverlappingIntervals(start: SequencePlace, end: SequencePlace): TInterval[];
327
+ gatherIterationResults(results: TInterval[], iteratesForward: boolean, start?: SequencePlace, end?: SequencePlace): void;
328
+ }
329
+
330
+ // @public
331
+ export interface ISequenceDeltaRange<TOperation extends MergeTreeDeltaOperationTypes = MergeTreeDeltaOperationTypes> {
332
+ operation: TOperation;
333
+ position: number;
334
+ propertyDeltas: PropertySet;
335
+ segment: ISegment;
336
+ }
337
+
338
+ // @public (undocumented)
339
+ export interface ISerializableInterval extends IInterval {
340
+ // @internal (undocumented)
341
+ addProperties(props: PropertySet, collaborating?: boolean, seq?: number): PropertySet | undefined;
342
+ getIntervalId(): string | undefined;
343
+ properties: PropertySet;
344
+ // @internal (undocumented)
345
+ propertyManager: PropertiesManager;
346
+ // @internal (undocumented)
347
+ serialize(): ISerializedInterval;
348
+ }
349
+
350
+ // @internal
351
+ export interface ISerializedInterval {
352
+ end: number | "start" | "end";
353
+ // (undocumented)
354
+ endSide?: Side;
355
+ intervalType: IntervalType;
356
+ properties?: PropertySet;
357
+ sequenceNumber: number;
358
+ start: number | "start" | "end";
359
+ // (undocumented)
360
+ startSide?: Side;
361
+ stickiness?: IntervalStickiness;
362
+ }
363
+
364
+ // @public (undocumented)
365
+ export interface ISharedIntervalCollection<TInterval extends ISerializableInterval> {
366
+ // (undocumented)
367
+ getIntervalCollection(label: string): IIntervalCollection<TInterval>;
368
+ }
369
+
370
+ // @public
371
+ export interface ISharedSegmentSequenceEvents extends ISharedObjectEvents {
372
+ // (undocumented)
373
+ (event: "createIntervalCollection", listener: (label: string, local: boolean, target: IEventThisPlaceHolder) => void): any;
374
+ // (undocumented)
375
+ (event: "sequenceDelta", listener: (event: SequenceDeltaEvent, target: IEventThisPlaceHolder) => void): any;
376
+ // (undocumented)
377
+ (event: "maintenance", listener: (event: SequenceMaintenanceEvent, target: IEventThisPlaceHolder) => void): any;
378
+ }
379
+
380
+ // @public
381
+ export interface ISharedString extends SharedSegmentSequence<SharedStringSegment> {
382
+ insertMarker(pos: number, refType: ReferenceType, props?: PropertySet): IMergeTreeInsertMsg | undefined;
383
+ insertText(pos: number, text: string, props?: PropertySet): void;
384
+ posFromRelativePos(relativePos: IRelativePosition): number;
385
+ }
386
+
387
+ // @public
388
+ export interface IStartpointInRangeIndex<TInterval extends ISerializableInterval> extends IntervalIndex<TInterval> {
389
+ // (undocumented)
390
+ findIntervalsWithStartpointInRange(start: number, end: number): TInterval[];
391
+ }
392
+
393
+ // @internal
394
+ export interface IValueOpEmitter {
395
+ emit(opName: string, previousValue: any, params: any, localOpMetadata: IMapMessageLocalMetadata): void;
396
+ }
397
+
398
+ // @alpha
399
+ export function revertSharedStringRevertibles(sharedString: SharedString, revertibles: SharedStringRevertible[]): void;
400
+
401
+ // @public
402
+ export class SequenceDeltaEvent extends SequenceEvent<MergeTreeDeltaOperationType> {
403
+ constructor(opArgs: IMergeTreeDeltaOpArgs, deltaArgs: IMergeTreeDeltaCallbackArgs, mergeTreeClient: Client);
404
+ readonly isLocal: boolean;
405
+ // (undocumented)
406
+ readonly opArgs: IMergeTreeDeltaOpArgs;
407
+ }
408
+
409
+ // @public
410
+ export abstract class SequenceEvent<TOperation extends MergeTreeDeltaOperationTypes = MergeTreeDeltaOperationTypes> {
411
+ constructor(deltaArgs: IMergeTreeDeltaCallbackArgs<TOperation>, mergeTreeClient: Client);
412
+ get clientId(): string | undefined;
413
+ // (undocumented)
414
+ readonly deltaArgs: IMergeTreeDeltaCallbackArgs<TOperation>;
415
+ // (undocumented)
416
+ readonly deltaOperation: TOperation;
417
+ get first(): Readonly<ISequenceDeltaRange<TOperation>>;
418
+ get last(): Readonly<ISequenceDeltaRange<TOperation>>;
419
+ get ranges(): readonly Readonly<ISequenceDeltaRange<TOperation>>[];
420
+ }
421
+
422
+ // @public
423
+ export class SequenceInterval implements ISerializableInterval {
424
+ constructor(client: Client,
425
+ start: LocalReferencePosition,
426
+ end: LocalReferencePosition, intervalType: IntervalType, props?: PropertySet, startSide?: Side, endSide?: Side);
427
+ // @internal
428
+ addPositionChangeListeners(beforePositionChange: () => void, afterPositionChange: () => void): void;
429
+ // @internal (undocumented)
430
+ addProperties(newProps: PropertySet, collab?: boolean, seq?: number, op?: ICombiningOp): PropertySet | undefined;
431
+ // (undocumented)
432
+ clone(): SequenceInterval;
433
+ compare(b: SequenceInterval): number;
434
+ compareEnd(b: SequenceInterval): number;
435
+ compareStart(b: SequenceInterval): number;
436
+ end: LocalReferencePosition;
437
+ // (undocumented)
438
+ readonly endSide: Side;
439
+ getIntervalId(): string;
440
+ // (undocumented)
441
+ intervalType: IntervalType;
442
+ // @internal
443
+ modify(label: string, start: SequencePlace | undefined, end: SequencePlace | undefined, op?: ISequencedDocumentMessage, localSeq?: number, useNewSlidingBehavior?: boolean): SequenceInterval;
444
+ // (undocumented)
445
+ overlaps(b: SequenceInterval): boolean;
446
+ // (undocumented)
447
+ overlapsPos(bstart: number, bend: number): boolean;
448
+ properties: PropertySet;
449
+ // @internal (undocumented)
450
+ propertyManager: PropertiesManager;
451
+ // @internal
452
+ removePositionChangeListeners(): void;
453
+ // @internal (undocumented)
454
+ serialize(): ISerializedInterval;
455
+ start: LocalReferencePosition;
456
+ // (undocumented)
457
+ readonly startSide: Side;
458
+ // @internal (undocumented)
459
+ get stickiness(): IntervalStickiness;
460
+ // @internal
461
+ union(b: SequenceInterval): SequenceInterval;
462
+ }
463
+
464
+ // @public @deprecated (undocumented)
465
+ export const sequenceIntervalHelpers: IIntervalHelpers<SequenceInterval>;
466
+
467
+ // @public
468
+ export namespace SequenceIntervalIndexes {
469
+ export interface Overlapping extends IOverlappingIntervalsIndex<SequenceInterval> {
470
+ findOverlappingIntervalsBySegoff(startSegoff: {
471
+ segment: ISegment | undefined;
472
+ offset: number | undefined;
473
+ }, endSegoff: {
474
+ segment: ISegment | undefined;
475
+ offset: number | undefined;
476
+ }): Iterable<SequenceInterval>;
477
+ }
478
+ }
479
+
480
+ // @public
481
+ export class SequenceMaintenanceEvent extends SequenceEvent<MergeTreeMaintenanceType> {
482
+ constructor(opArgs: IMergeTreeDeltaOpArgs | undefined, deltaArgs: IMergeTreeMaintenanceCallbackArgs, mergeTreeClient: Client);
483
+ // (undocumented)
484
+ readonly opArgs: IMergeTreeDeltaOpArgs | undefined;
485
+ }
486
+
487
+ // @public
488
+ export interface SequenceOptions {
489
+ // (undocumented)
490
+ [key: string]: boolean;
491
+ intervalStickinessEnabled: boolean;
492
+ mergeTreeReferencesCanSlideToEndpoint: boolean;
493
+ }
494
+
495
+ // @public
496
+ export type SequencePlace = number | "start" | "end" | InteriorSequencePlace;
497
+
498
+ // @internal
499
+ export type SerializedIntervalDelta = Omit<ISerializedInterval, "start" | "end" | "properties"> & Partial<Pick<ISerializedInterval, "start" | "end" | "properties">>;
500
+
501
+ // @public @deprecated (undocumented)
502
+ export class SharedIntervalCollection extends SharedObject implements ISharedIntervalCollection<Interval> {
503
+ // (undocumented)
504
+ readonly [Symbol.toStringTag]: string;
505
+ constructor(id: string, runtime: IFluidDataStoreRuntime, attributes: IChannelAttributes);
506
+ // (undocumented)
507
+ protected applyStashedOp(): void;
508
+ static create(runtime: IFluidDataStoreRuntime, id?: string): SharedIntervalCollection;
509
+ static getFactory(): IChannelFactory;
510
+ // (undocumented)
511
+ getIntervalCollection(label: string): IIntervalCollection<Interval>;
512
+ protected getIntervalCollectionPath(label: string): string;
513
+ // (undocumented)
514
+ protected loadCore(storage: IChannelStorageService): Promise<void>;
515
+ // (undocumented)
516
+ protected onDisconnect(): void;
517
+ // (undocumented)
518
+ protected processCore(message: ISequencedDocumentMessage, local: boolean, localOpMetadata: unknown): void;
519
+ // (undocumented)
520
+ protected reSubmitCore(content: any, localOpMetadata: unknown): void;
521
+ // (undocumented)
522
+ protected summarizeCore(serializer: IFluidSerializer): ISummaryTreeWithStats;
523
+ }
524
+
525
+ // @public @deprecated
526
+ export class SharedIntervalCollectionFactory implements IChannelFactory {
527
+ // (undocumented)
528
+ static readonly Attributes: IChannelAttributes;
529
+ // (undocumented)
530
+ get attributes(): IChannelAttributes;
531
+ // (undocumented)
532
+ create(runtime: IFluidDataStoreRuntime, id: string): SharedIntervalCollection;
533
+ // (undocumented)
534
+ load(runtime: IFluidDataStoreRuntime, id: string, services: IChannelServices, attributes: IChannelAttributes): Promise<SharedIntervalCollection>;
535
+ // (undocumented)
536
+ static readonly Type = "https://graph.microsoft.com/types/sharedIntervalCollection";
537
+ // (undocumented)
538
+ get type(): string;
539
+ }
540
+
541
+ // @public (undocumented)
542
+ export abstract class SharedSegmentSequence<T extends ISegment> extends SharedObject<ISharedSegmentSequenceEvents> implements ISharedIntervalCollection<SequenceInterval>, MergeTreeRevertibleDriver {
543
+ constructor(dataStoreRuntime: IFluidDataStoreRuntime, id: string, attributes: IChannelAttributes, segmentFromSpec: (spec: IJSONSegment) => ISegment);
544
+ annotateRange(start: number, end: number, props: PropertySet, combiningOp?: ICombiningOp): void;
545
+ // (undocumented)
546
+ protected applyStashedOp(content: any): unknown;
547
+ // (undocumented)
548
+ protected client: Client;
549
+ createLocalReferencePosition(segment: T, offset: number, refType: ReferenceType, properties: PropertySet | undefined, slidingPreference?: SlidingPreference, canSlideToEndpoint?: boolean): LocalReferencePosition;
550
+ // (undocumented)
551
+ protected didAttach(): void;
552
+ getContainingSegment(pos: number): {
553
+ segment: T | undefined;
554
+ offset: number | undefined;
555
+ };
556
+ // (undocumented)
557
+ getCurrentSeq(): number;
558
+ getIntervalCollection(label: string): IIntervalCollection<SequenceInterval>;
559
+ // (undocumented)
560
+ getIntervalCollectionLabels(): IterableIterator<string>;
561
+ getLength(): number;
562
+ getPosition(segment: ISegment): number;
563
+ // (undocumented)
564
+ getPropertiesAtPosition(pos: number): PropertySet | undefined;
565
+ // (undocumented)
566
+ getRangeExtentsOfPosition(pos: number): {
567
+ posStart: number | undefined;
568
+ posAfterEnd: number | undefined;
569
+ };
570
+ // @deprecated (undocumented)
571
+ getStackContext(startPos: number, rangeLabels: string[]): RangeStackMap;
572
+ // @deprecated (undocumented)
573
+ groupOperation(groupOp: IMergeTreeGroupMsg): void;
574
+ // @internal
575
+ protected guardReentrancy: <TRet>(callback: () => TRet) => TRet;
576
+ // (undocumented)
577
+ id: string;
578
+ // (undocumented)
579
+ protected initializeLocalCore(): void;
580
+ insertAtReferencePosition(pos: ReferencePosition, segment: T): void;
581
+ insertFromSpec(pos: number, spec: IJSONSegment): void;
582
+ // (undocumented)
583
+ protected loadCore(storage: IChannelStorageService): Promise<void>;
584
+ // (undocumented)
585
+ get loaded(): Promise<void>;
586
+ protected loadedDeferred: Deferred<void>;
587
+ localReferencePositionToPosition(lref: ReferencePosition): number;
588
+ // (undocumented)
589
+ protected onConnect(): void;
590
+ // (undocumented)
591
+ protected onDisconnect(): void;
592
+ posFromRelativePos(relativePos: IRelativePosition): number;
593
+ // (undocumented)
594
+ protected processCore(message: ISequencedDocumentMessage, local: boolean, localOpMetadata: unknown): void;
595
+ protected processGCDataCore(serializer: SummarySerializer): void;
596
+ removeLocalReferencePosition(lref: LocalReferencePosition): LocalReferencePosition | undefined;
597
+ // (undocumented)
598
+ removeRange(start: number, end: number): IMergeTreeRemoveMsg;
599
+ protected replaceRange(start: number, end: number, segment: ISegment): void;
600
+ resolveRemoteClientPosition(remoteClientPosition: number, remoteClientRefSeq: number, remoteClientId: string): number | undefined;
601
+ // (undocumented)
602
+ protected reSubmitCore(content: any, localOpMetadata: unknown): void;
603
+ // (undocumented)
604
+ readonly segmentFromSpec: (spec: IJSONSegment) => ISegment;
605
+ // @deprecated (undocumented)
606
+ submitSequenceMessage(message: IMergeTreeOp): void;
607
+ // (undocumented)
608
+ protected summarizeCore(serializer: IFluidSerializer, telemetryContext?: ITelemetryContext): ISummaryTreeWithStats;
609
+ walkSegments<TClientData>(handler: ISegmentAction<TClientData>, start?: number, end?: number, accum?: TClientData, splitRange?: boolean): void;
610
+ }
611
+
612
+ // @public @deprecated (undocumented)
613
+ export class SharedSequence<T> extends SharedSegmentSequence<SubSequence<T>> {
614
+ constructor(document: IFluidDataStoreRuntime, id: string, attributes: IChannelAttributes, specToSegment: (spec: IJSONSegment) => ISegment);
615
+ getItemCount(): number;
616
+ getItems(start: number, end?: number): Serializable<T>[];
617
+ // (undocumented)
618
+ id: string;
619
+ // (undocumented)
620
+ insert(pos: number, items: Serializable<T>[], props?: PropertySet): void;
621
+ // (undocumented)
622
+ remove(start: number, end: number): void;
623
+ }
624
+
625
+ // @public
626
+ export class SharedString extends SharedSegmentSequence<SharedStringSegment> implements ISharedString {
627
+ constructor(document: IFluidDataStoreRuntime, id: string, attributes: IChannelAttributes);
628
+ annotateMarker(marker: Marker, props: PropertySet, combiningOp?: ICombiningOp): void;
629
+ annotateMarkerNotifyConsensus(marker: Marker, props: PropertySet, callback: (m: Marker) => void): void;
630
+ static create(runtime: IFluidDataStoreRuntime, id?: string): SharedString;
631
+ // @deprecated
632
+ findTile(startPos: number | undefined, tileLabel: string, preceding?: boolean): {
633
+ tile: ReferencePosition;
634
+ pos: number;
635
+ } | undefined;
636
+ static getFactory(): SharedStringFactory;
637
+ getMarkerFromId(id: string): ISegment | undefined;
638
+ getText(start?: number, end?: number): string;
639
+ // (undocumented)
640
+ getTextRangeWithMarkers(start: number, end: number): string;
641
+ getTextWithPlaceholders(start?: number, end?: number): string;
642
+ // (undocumented)
643
+ id: string;
644
+ insertMarker(pos: number, refType: ReferenceType, props?: PropertySet): IMergeTreeInsertMsg | undefined;
645
+ insertMarkerRelative(relativePos1: IRelativePosition, refType: ReferenceType, props?: PropertySet): void;
646
+ insertText(pos: number, text: string, props?: PropertySet): void;
647
+ insertTextRelative(relativePos1: IRelativePosition, text: string, props?: PropertySet): void;
648
+ // (undocumented)
649
+ get ISharedString(): ISharedString;
650
+ removeText(start: number, end: number): IMergeTreeRemoveMsg;
651
+ replaceText(start: number, end: number, text: string, props?: PropertySet): void;
652
+ protected rollback(content: any, localOpMetadata: unknown): void;
653
+ searchForMarker(startPos: number, markerLabel: string, forwards?: boolean): Marker | undefined;
654
+ }
655
+
656
+ // @public (undocumented)
657
+ export class SharedStringFactory implements IChannelFactory {
658
+ // (undocumented)
659
+ static readonly Attributes: IChannelAttributes;
660
+ // (undocumented)
661
+ get attributes(): IChannelAttributes;
662
+ // (undocumented)
663
+ create(document: IFluidDataStoreRuntime, id: string): SharedString;
664
+ // (undocumented)
665
+ load(runtime: IFluidDataStoreRuntime, id: string, services: IChannelServices, attributes: IChannelAttributes): Promise<SharedString>;
666
+ // (undocumented)
667
+ static segmentFromSpec(spec: any): SharedStringSegment;
668
+ // (undocumented)
669
+ static Type: string;
670
+ // (undocumented)
671
+ get type(): string;
672
+ }
673
+
674
+ // @alpha
675
+ export type SharedStringRevertible = MergeTreeDeltaRevertible | IntervalRevertible;
676
+
677
+ // @public (undocumented)
678
+ export type SharedStringSegment = TextSegment | Marker;
679
+
680
+ // @public
681
+ export enum Side {
682
+ // (undocumented)
683
+ After = 1,
684
+ // (undocumented)
685
+ Before = 0
686
+ }
687
+
688
+ // @public @deprecated (undocumented)
689
+ export class SubSequence<T> extends BaseSegment {
690
+ constructor(items: Serializable<T>[]);
691
+ // (undocumented)
692
+ append(segment: ISegment): void;
693
+ // (undocumented)
694
+ canAppend(segment: ISegment): boolean;
695
+ // (undocumented)
696
+ clone(start?: number, end?: number): SubSequence<T>;
697
+ // (undocumented)
698
+ protected createSplitSegmentAt(pos: number): SubSequence<T> | undefined;
699
+ // (undocumented)
700
+ static fromJSONObject<U>(spec: Serializable): SubSequence<U> | undefined;
701
+ // (undocumented)
702
+ static is(segment: ISegment): segment is SubSequence<any>;
703
+ // (undocumented)
704
+ items: Serializable<T>[];
705
+ // (undocumented)
706
+ removeRange(start: number, end: number): boolean;
707
+ // (undocumented)
708
+ toJSONObject(): IJSONRunSegment<T>;
709
+ // (undocumented)
710
+ toString(): string;
711
+ // (undocumented)
712
+ readonly type: string;
713
+ // (undocumented)
714
+ static readonly typeString: string;
715
+ }
716
+
717
+ ```