@fluidframework/sequence 2.0.0-dev.7.4.0.217212 → 2.0.0-dev.7.4.0.221926

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 (121) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/api-extractor.json +0 -3
  3. package/api-report/sequence.api.md +33 -25
  4. package/dist/intervalCollection.d.ts +31 -6
  5. package/dist/intervalCollection.d.ts.map +1 -1
  6. package/dist/intervalCollection.js +45 -43
  7. package/dist/intervalCollection.js.map +1 -1
  8. package/dist/intervalIndex/intervalIndex.d.ts +1 -1
  9. package/dist/intervalIndex/intervalIndex.js.map +1 -1
  10. package/dist/intervals/intervalUtils.d.ts +6 -7
  11. package/dist/intervals/intervalUtils.d.ts.map +1 -1
  12. package/dist/intervals/intervalUtils.js +2 -2
  13. package/dist/intervals/intervalUtils.js.map +1 -1
  14. package/dist/intervals/sequenceInterval.d.ts +1 -1
  15. package/dist/intervals/sequenceInterval.js +1 -1
  16. package/dist/intervals/sequenceInterval.js.map +1 -1
  17. package/dist/packageVersion.d.ts +1 -1
  18. package/dist/packageVersion.js +1 -1
  19. package/dist/packageVersion.js.map +1 -1
  20. package/dist/sequence-alpha.d.ts +1188 -106
  21. package/dist/sequence-beta.d.ts +44 -0
  22. package/dist/sequence-public.d.ts +44 -0
  23. package/dist/sequence-untrimmed.d.ts +40 -26
  24. package/dist/sequence.d.ts +2 -2
  25. package/dist/sequence.js +1 -1
  26. package/dist/sequence.js.map +1 -1
  27. package/dist/sequenceDeltaEvent.d.ts +4 -4
  28. package/dist/sequenceDeltaEvent.js +3 -3
  29. package/dist/sequenceDeltaEvent.js.map +1 -1
  30. package/dist/sequenceFactory.d.ts +1 -1
  31. package/dist/sequenceFactory.js +1 -1
  32. package/dist/sequenceFactory.js.map +1 -1
  33. package/dist/sharedIntervalCollection.d.ts +1 -1
  34. package/dist/sharedIntervalCollection.js.map +1 -1
  35. package/dist/sharedString.d.ts +3 -3
  36. package/dist/sharedString.js +1 -1
  37. package/dist/sharedString.js.map +1 -1
  38. package/lib/defaultMap.js +22 -18
  39. package/lib/defaultMap.js.map +1 -1
  40. package/lib/defaultMapInterfaces.js +2 -1
  41. package/lib/defaultMapInterfaces.js.map +1 -1
  42. package/lib/index.js +45 -10
  43. package/lib/index.js.map +1 -1
  44. package/lib/intervalCollection.d.ts +31 -6
  45. package/lib/intervalCollection.d.ts.map +1 -1
  46. package/lib/intervalCollection.js +169 -154
  47. package/lib/intervalCollection.js.map +1 -1
  48. package/lib/intervalIndex/endpointInRangeIndex.js +17 -12
  49. package/lib/intervalIndex/endpointInRangeIndex.js.map +1 -1
  50. package/lib/intervalIndex/endpointIndex.js +13 -8
  51. package/lib/intervalIndex/endpointIndex.js.map +1 -1
  52. package/lib/intervalIndex/idIntervalIndex.js +8 -4
  53. package/lib/intervalIndex/idIntervalIndex.js.map +1 -1
  54. package/lib/intervalIndex/index.js +19 -6
  55. package/lib/intervalIndex/index.js.map +1 -1
  56. package/lib/intervalIndex/intervalIndex.d.ts +1 -1
  57. package/lib/intervalIndex/intervalIndex.js +2 -1
  58. package/lib/intervalIndex/intervalIndex.js.map +1 -1
  59. package/lib/intervalIndex/intervalIndexUtils.js +8 -4
  60. package/lib/intervalIndex/intervalIndexUtils.js.map +1 -1
  61. package/lib/intervalIndex/overlappingIntervalsIndex.js +15 -10
  62. package/lib/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
  63. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js +14 -10
  64. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -1
  65. package/lib/intervalIndex/sequenceIntervalIndexes.js +2 -1
  66. package/lib/intervalIndex/sequenceIntervalIndexes.js.map +1 -1
  67. package/lib/intervalIndex/startpointInRangeIndex.js +17 -12
  68. package/lib/intervalIndex/startpointInRangeIndex.js.map +1 -1
  69. package/lib/intervalTree.js +9 -4
  70. package/lib/intervalTree.js.map +1 -1
  71. package/lib/intervals/index.js +18 -3
  72. package/lib/intervals/index.js.map +1 -1
  73. package/lib/intervals/interval.js +18 -13
  74. package/lib/intervals/interval.js.map +1 -1
  75. package/lib/intervals/intervalUtils.d.ts +6 -7
  76. package/lib/intervals/intervalUtils.d.ts.map +1 -1
  77. package/lib/intervals/intervalUtils.js +20 -15
  78. package/lib/intervals/intervalUtils.js.map +1 -1
  79. package/lib/intervals/sequenceInterval.d.ts +1 -1
  80. package/lib/intervals/sequenceInterval.js +66 -60
  81. package/lib/intervals/sequenceInterval.js.map +1 -1
  82. package/lib/localValues.js +9 -4
  83. package/lib/localValues.js.map +1 -1
  84. package/lib/packageVersion.d.ts +1 -1
  85. package/lib/packageVersion.js +5 -2
  86. package/lib/packageVersion.js.map +1 -1
  87. package/lib/revertibles.js +69 -59
  88. package/lib/revertibles.js.map +1 -1
  89. package/lib/sequence-alpha.d.ts +1188 -106
  90. package/lib/sequence-beta.d.ts +44 -0
  91. package/lib/sequence-public.d.ts +44 -0
  92. package/lib/sequence-untrimmed.d.ts +40 -26
  93. package/lib/sequence.d.ts +2 -2
  94. package/lib/sequence.js +45 -40
  95. package/lib/sequence.js.map +1 -1
  96. package/lib/sequenceDeltaEvent.d.ts +4 -4
  97. package/lib/sequenceDeltaEvent.js +16 -10
  98. package/lib/sequenceDeltaEvent.js.map +1 -1
  99. package/lib/sequenceFactory.d.ts +1 -1
  100. package/lib/sequenceFactory.js +14 -10
  101. package/lib/sequenceFactory.js.map +1 -1
  102. package/lib/sharedIntervalCollection.d.ts +1 -1
  103. package/lib/sharedIntervalCollection.js +18 -13
  104. package/lib/sharedIntervalCollection.js.map +1 -1
  105. package/lib/sharedSequence.js +11 -6
  106. package/lib/sharedSequence.js.map +1 -1
  107. package/lib/sharedString.d.ts +3 -3
  108. package/lib/sharedString.js +22 -17
  109. package/lib/sharedString.js.map +1 -1
  110. package/package.json +18 -17
  111. package/sequence.test-files.tar +0 -0
  112. package/src/intervalCollection.ts +88 -55
  113. package/src/intervalIndex/intervalIndex.ts +1 -1
  114. package/src/intervals/intervalUtils.ts +6 -7
  115. package/src/intervals/sequenceInterval.ts +1 -1
  116. package/src/packageVersion.ts +1 -1
  117. package/src/sequence.ts +2 -2
  118. package/src/sequenceDeltaEvent.ts +4 -4
  119. package/src/sequenceFactory.ts +1 -1
  120. package/src/sharedIntervalCollection.ts +1 -1
  121. package/src/sharedString.ts +3 -3
@@ -11,7 +11,51 @@
11
11
  * @packageDocumentation
12
12
  */
13
13
 
14
+ import { BaseSegment } from '@fluidframework/merge-tree';
15
+ import { Client } from '@fluidframework/merge-tree';
16
+ import { Deferred } from '@fluidframework/core-utils';
17
+ import { IChannelAttributes } from '@fluidframework/datastore-definitions';
18
+ import { IChannelFactory } from '@fluidframework/datastore-definitions';
19
+ import { IChannelServices } from '@fluidframework/datastore-definitions';
20
+ import { IChannelStorageService } from '@fluidframework/datastore-definitions';
21
+ import { ICombiningOp } from '@fluidframework/merge-tree';
22
+ import { IEvent } from '@fluidframework/core-interfaces';
23
+ import { IEventThisPlaceHolder } from '@fluidframework/core-interfaces';
24
+ import { IFluidDataStoreRuntime } from '@fluidframework/datastore-definitions';
25
+ import { IFluidSerializer } from '@fluidframework/shared-object-base';
26
+ import { IJSONSegment } from '@fluidframework/merge-tree';
27
+ import { IMergeTreeDeltaCallbackArgs } from '@fluidframework/merge-tree';
28
+ import { IMergeTreeDeltaOpArgs } from '@fluidframework/merge-tree';
29
+ import { IMergeTreeGroupMsg } from '@fluidframework/merge-tree';
30
+ import { IMergeTreeInsertMsg } from '@fluidframework/merge-tree';
31
+ import { IMergeTreeMaintenanceCallbackArgs } from '@fluidframework/merge-tree';
32
+ import { IMergeTreeOp } from '@fluidframework/merge-tree';
33
+ import { IMergeTreeRemoveMsg } from '@fluidframework/merge-tree';
34
+ import { IRelativePosition } from '@fluidframework/merge-tree';
35
+ import { ISegment } from '@fluidframework/merge-tree';
36
+ import { ISegmentAction } from '@fluidframework/merge-tree';
14
37
  import { ISequencedDocumentMessage } from '@fluidframework/protocol-definitions';
38
+ import { ISharedObjectEvents } from '@fluidframework/shared-object-base';
39
+ import { ISummaryTreeWithStats } from '@fluidframework/runtime-definitions';
40
+ import { ITelemetryContext } from '@fluidframework/runtime-definitions';
41
+ import { LocalReferencePosition } from '@fluidframework/merge-tree';
42
+ import { Marker } from '@fluidframework/merge-tree';
43
+ import { MergeTreeDeltaOperationType } from '@fluidframework/merge-tree';
44
+ import { MergeTreeDeltaOperationTypes } from '@fluidframework/merge-tree';
45
+ import { MergeTreeDeltaRevertible } from '@fluidframework/merge-tree';
46
+ import { MergeTreeMaintenanceType } from '@fluidframework/merge-tree';
47
+ import { MergeTreeRevertibleDriver } from '@fluidframework/merge-tree';
48
+ import { PropertiesManager } from '@fluidframework/merge-tree';
49
+ import { PropertySet } from '@fluidframework/merge-tree';
50
+ import { RangeStackMap } from '@fluidframework/merge-tree';
51
+ import { ReferencePosition } from '@fluidframework/merge-tree';
52
+ import { ReferenceType } from '@fluidframework/merge-tree';
53
+ import { Serializable } from '@fluidframework/datastore-definitions';
54
+ import { SharedObject } from '@fluidframework/shared-object-base';
55
+ import { SlidingPreference } from '@fluidframework/merge-tree';
56
+ import { SummarySerializer } from '@fluidframework/shared-object-base';
57
+ import { TextSegment } from '@fluidframework/merge-tree';
58
+ import { TypedEventEmitter } from '@fluid-internal/client-utils';
15
59
 
16
60
  /* Excluded from this release type: appendAddIntervalToRevertibles */
17
61
 
@@ -11,7 +11,51 @@
11
11
  * @packageDocumentation
12
12
  */
13
13
 
14
+ import { BaseSegment } from '@fluidframework/merge-tree';
15
+ import { Client } from '@fluidframework/merge-tree';
16
+ import { Deferred } from '@fluidframework/core-utils';
17
+ import { IChannelAttributes } from '@fluidframework/datastore-definitions';
18
+ import { IChannelFactory } from '@fluidframework/datastore-definitions';
19
+ import { IChannelServices } from '@fluidframework/datastore-definitions';
20
+ import { IChannelStorageService } from '@fluidframework/datastore-definitions';
21
+ import { ICombiningOp } from '@fluidframework/merge-tree';
22
+ import { IEvent } from '@fluidframework/core-interfaces';
23
+ import { IEventThisPlaceHolder } from '@fluidframework/core-interfaces';
24
+ import { IFluidDataStoreRuntime } from '@fluidframework/datastore-definitions';
25
+ import { IFluidSerializer } from '@fluidframework/shared-object-base';
26
+ import { IJSONSegment } from '@fluidframework/merge-tree';
27
+ import { IMergeTreeDeltaCallbackArgs } from '@fluidframework/merge-tree';
28
+ import { IMergeTreeDeltaOpArgs } from '@fluidframework/merge-tree';
29
+ import { IMergeTreeGroupMsg } from '@fluidframework/merge-tree';
30
+ import { IMergeTreeInsertMsg } from '@fluidframework/merge-tree';
31
+ import { IMergeTreeMaintenanceCallbackArgs } from '@fluidframework/merge-tree';
32
+ import { IMergeTreeOp } from '@fluidframework/merge-tree';
33
+ import { IMergeTreeRemoveMsg } from '@fluidframework/merge-tree';
34
+ import { IRelativePosition } from '@fluidframework/merge-tree';
35
+ import { ISegment } from '@fluidframework/merge-tree';
36
+ import { ISegmentAction } from '@fluidframework/merge-tree';
14
37
  import { ISequencedDocumentMessage } from '@fluidframework/protocol-definitions';
38
+ import { ISharedObjectEvents } from '@fluidframework/shared-object-base';
39
+ import { ISummaryTreeWithStats } from '@fluidframework/runtime-definitions';
40
+ import { ITelemetryContext } from '@fluidframework/runtime-definitions';
41
+ import { LocalReferencePosition } from '@fluidframework/merge-tree';
42
+ import { Marker } from '@fluidframework/merge-tree';
43
+ import { MergeTreeDeltaOperationType } from '@fluidframework/merge-tree';
44
+ import { MergeTreeDeltaOperationTypes } from '@fluidframework/merge-tree';
45
+ import { MergeTreeDeltaRevertible } from '@fluidframework/merge-tree';
46
+ import { MergeTreeMaintenanceType } from '@fluidframework/merge-tree';
47
+ import { MergeTreeRevertibleDriver } from '@fluidframework/merge-tree';
48
+ import { PropertiesManager } from '@fluidframework/merge-tree';
49
+ import { PropertySet } from '@fluidframework/merge-tree';
50
+ import { RangeStackMap } from '@fluidframework/merge-tree';
51
+ import { ReferencePosition } from '@fluidframework/merge-tree';
52
+ import { ReferenceType } from '@fluidframework/merge-tree';
53
+ import { Serializable } from '@fluidframework/datastore-definitions';
54
+ import { SharedObject } from '@fluidframework/shared-object-base';
55
+ import { SlidingPreference } from '@fluidframework/merge-tree';
56
+ import { SummarySerializer } from '@fluidframework/shared-object-base';
57
+ import { TextSegment } from '@fluidframework/merge-tree';
58
+ import { TypedEventEmitter } from '@fluid-internal/client-utils';
15
59
 
16
60
  /* Excluded from this release type: appendAddIntervalToRevertibles */
17
61
 
@@ -119,7 +119,7 @@ export declare function createOverlappingSequenceIntervalsIndex(sharedString: Sh
119
119
  export declare function createStartpointInRangeIndex(sharedString: SharedString): IStartpointInRangeIndex<SequenceInterval>;
120
120
 
121
121
  /**
122
- * @internal
122
+ * @alpha
123
123
  */
124
124
  export declare type DeserializeCallback = (properties: PropertySet) => void;
125
125
 
@@ -188,7 +188,7 @@ export declare interface IIdIntervalIndex<TInterval extends ISerializableInterva
188
188
 
189
189
  /**
190
190
  * Basic interval abstraction
191
- * @internal
191
+ * @alpha
192
192
  */
193
193
  export declare interface IInterval {
194
194
  /**
@@ -235,7 +235,7 @@ export declare interface IInterval {
235
235
  /**
236
236
  * Collection of intervals that supports addition, modification, removal, and efficient spatial querying.
237
237
  * Changes to this collection will be incur updates on collaborating clients (i.e. they are not local-only).
238
- * @internal
238
+ * @alpha
239
239
  */
240
240
  export declare interface IIntervalCollection<TInterval extends ISerializableInterval> extends TypedEventEmitter<IIntervalCollectionEvent<TInterval>> {
241
241
  readonly attached: boolean;
@@ -357,6 +357,7 @@ export declare interface IIntervalCollection<TInterval extends ISerializableInte
357
357
  removeIntervalById(id: string): TInterval | undefined;
358
358
  /**
359
359
  * Changes the properties on an existing interval.
360
+ * @deprecated - call change with the id and and object containing the new properties
360
361
  * @param id - Id of the interval whose properties should be changed
361
362
  * @param props - Property set to apply to the interval. Shallow merging is used between any existing properties
362
363
  * and `prop`, i.e. the interval will end up with a property object equivalent to `{ ...oldProps, ...props }`.
@@ -364,12 +365,26 @@ export declare interface IIntervalCollection<TInterval extends ISerializableInte
364
365
  changeProperties(id: string, props: PropertySet): any;
365
366
  /**
366
367
  * Changes the endpoints of an existing interval.
368
+ * @deprecated - call change with the start and end parameters encapsulated in an object
367
369
  * @param id - Id of the interval to change
368
370
  * @param start - New start value. To leave the endpoint unchanged, pass the current value.
369
371
  * @param end - New end value. To leave the endpoint unchanged, pass the current value.
370
372
  * @returns the interval that was changed, if it existed in the collection.
371
373
  */
372
374
  change(id: string, start: SequencePlace, end: SequencePlace): TInterval | undefined;
375
+ /**
376
+ * Changes the endpoints, properties, or both of an existing interval.
377
+ * @param id - Id of the Interval to change
378
+ * @returns the interval that was changed, if it existed in the collection.
379
+ * Pass the desired new start position, end position, and/or properties in an object. Start and end positions must be changed
380
+ * simultaneously - they must either both be specified or both undefined. To only change the properties, leave both endpoints
381
+ * undefined. To only change the endpoints, leave the properties undefined.
382
+ */
383
+ change(id: string, { start, end, props }: {
384
+ start?: SequencePlace;
385
+ end?: SequencePlace;
386
+ props?: PropertySet;
387
+ }): TInterval | undefined;
373
388
  attachDeserializer(onDeserialize: DeserializeCallback): void;
374
389
  /**
375
390
  * @returns an iterator over all intervals in this collection.
@@ -444,7 +459,7 @@ export declare interface IIntervalCollection<TInterval extends ISerializableInte
444
459
 
445
460
  /**
446
461
  * Change events emitted by `IntervalCollection`s
447
- * @internal
462
+ * @alpha
448
463
  */
449
464
  export declare interface IIntervalCollectionEvent<TInterval extends ISerializableInterval> extends IEvent {
450
465
  /**
@@ -522,7 +537,7 @@ export declare interface IMapMessageLocalMetadata {
522
537
  * A sequence place that does not refer to the special endpoint segments.
523
538
  *
524
539
  * See {@link SequencePlace} for additional context.
525
- * @internal
540
+ * @alpha
526
541
  */
527
542
  export declare interface InteriorSequencePlace {
528
543
  pos: number;
@@ -612,7 +627,7 @@ export declare class Interval implements ISerializableInterval {
612
627
  * - "find all intervals with start endpoint between these two points"
613
628
  * - "find all intervals which overlap this range"
614
629
  * etc.
615
- * @internal
630
+ * @alpha
616
631
  */
617
632
  export declare interface IntervalIndex<TInterval extends ISerializableInterval> {
618
633
  /**
@@ -714,7 +729,7 @@ export declare type IntervalRevertible = {
714
729
  * Note that interval stickiness is currently an experimental feature and must
715
730
  * be explicitly enabled with the `intervalStickinessEnabled` flag
716
731
  *
717
- * @internal
732
+ * @alpha
718
733
  */
719
734
  export declare const IntervalStickiness: {
720
735
  /**
@@ -743,13 +758,12 @@ export declare const IntervalStickiness: {
743
758
  *
744
759
  * Note that interval stickiness is currently an experimental feature and must
745
760
  * be explicitly enabled with the `intervalStickinessEnabled` flag
746
- *
747
- * @internal
761
+ * @alpha
748
762
  */
749
763
  export declare type IntervalStickiness = (typeof IntervalStickiness)[keyof typeof IntervalStickiness];
750
764
 
751
765
  /**
752
- * @internal
766
+ * @alpha
753
767
  */
754
768
  export declare enum IntervalType {
755
769
  Simple = 0,
@@ -788,7 +802,7 @@ export declare interface IOverlappingIntervalsIndex<TInterval extends ISerializa
788
802
 
789
803
  /**
790
804
  * A range that has changed corresponding to a segment modification.
791
- * @internal
805
+ * @alpha
792
806
  */
793
807
  export declare interface ISequenceDeltaRange<TOperation extends MergeTreeDeltaOperationTypes = MergeTreeDeltaOperationTypes> {
794
808
  /**
@@ -823,7 +837,7 @@ export declare interface ISequenceDeltaRange<TOperation extends MergeTreeDeltaOp
823
837
  }
824
838
 
825
839
  /**
826
- * @internal
840
+ * @alpha
827
841
  */
828
842
  export declare interface ISerializableInterval extends IInterval {
829
843
  /** Serializable bag of properties associated with the interval. */
@@ -847,7 +861,7 @@ export declare interface ISerializableInterval extends IInterval {
847
861
  /**
848
862
  * Serialized object representation of an interval.
849
863
  * This representation is used for ops that create or change intervals.
850
- * @internal
864
+ * @alpha
851
865
  */
852
866
  export declare interface ISerializedInterval {
853
867
  /**
@@ -875,7 +889,7 @@ export declare interface ISerializedInterval {
875
889
  }
876
890
 
877
891
  /**
878
- * @internal
892
+ * @alpha
879
893
  */
880
894
  export declare interface ISharedIntervalCollection<TInterval extends ISerializableInterval> {
881
895
  getIntervalCollection(label: string): IIntervalCollection<TInterval>;
@@ -913,7 +927,7 @@ export declare interface ISharedIntervalCollection<TInterval extends ISerializab
913
927
  * - `event` - Various information on the segments that were modified.
914
928
  *
915
929
  * - `target` - The sequence itself.
916
- * @internal
930
+ * @alpha
917
931
  */
918
932
  export declare interface ISharedSegmentSequenceEvents extends ISharedObjectEvents {
919
933
  (event: "createIntervalCollection", listener: (label: string, local: boolean, target: IEventThisPlaceHolder) => void): any;
@@ -923,7 +937,7 @@ export declare interface ISharedSegmentSequenceEvents extends ISharedObjectEvent
923
937
 
924
938
  /**
925
939
  * Fluid object interface describing access methods on a SharedString
926
- * @internal
940
+ * @alpha
927
941
  */
928
942
  export declare interface ISharedString extends SharedSegmentSequence<SharedStringSegment> {
929
943
  /**
@@ -991,7 +1005,7 @@ export declare function revertSharedStringRevertibles(sharedString: SharedString
991
1005
  * For group ops, each op will get its own event, and the group op property will be set on the op args.
992
1006
  *
993
1007
  * Ops may get multiple events. For instance, an insert-replace will get a remove then an insert event.
994
- * @internal
1008
+ * @alpha
995
1009
  */
996
1010
  export declare class SequenceDeltaEvent extends SequenceEvent<MergeTreeDeltaOperationType> {
997
1011
  readonly opArgs: IMergeTreeDeltaOpArgs;
@@ -1008,7 +1022,7 @@ export declare class SequenceDeltaEvent extends SequenceEvent<MergeTreeDeltaOper
1008
1022
  * The properties of this object and its sub-objects represent the state of the sequence at the
1009
1023
  * point in time at which the operation was applied.
1010
1024
  * They will not take into any future modifications performed to the underlying sequence and merge tree.
1011
- * @internal
1025
+ * @alpha
1012
1026
  */
1013
1027
  export declare abstract class SequenceEvent<TOperation extends MergeTreeDeltaOperationTypes = MergeTreeDeltaOperationTypes> {
1014
1028
  readonly deltaArgs: IMergeTreeDeltaCallbackArgs<TOperation>;
@@ -1063,7 +1077,7 @@ export declare abstract class SequenceEvent<TOperation extends MergeTreeDeltaOpe
1063
1077
  * `mergeTreeReferencesCanSlideToEndpoint` feature flag set to true, the endpoints
1064
1078
  * of the interval that are exclusive will have the ability to slide to these
1065
1079
  * special endpoint segments.
1066
- * @internal
1080
+ * @alpha
1067
1081
  */
1068
1082
  export declare class SequenceInterval implements ISerializableInterval {
1069
1083
  private readonly client;
@@ -1197,7 +1211,7 @@ export declare namespace SequenceIntervalIndexes {
1197
1211
  * The properties of this object and its sub-objects represent the state of the sequence at the
1198
1212
  * point in time at which the operation was applied.
1199
1213
  * They will not take into consideration any future modifications performed to the underlying sequence and merge tree.
1200
- * @internal
1214
+ * @alpha
1201
1215
  */
1202
1216
  export declare class SequenceMaintenanceEvent extends SequenceEvent<MergeTreeMaintenanceType> {
1203
1217
  readonly opArgs: IMergeTreeDeltaOpArgs | undefined;
@@ -1259,7 +1273,7 @@ export declare interface SequenceOptions {
1259
1273
  * If a SequencePlace is the endpoint of a range (e.g. start/end of an interval or search range),
1260
1274
  * the Side value means it is exclusive if it is nearer to the other position and inclusive if it is farther.
1261
1275
  * E.g. the start of a range with Side.After is exclusive of the character at the position.
1262
- * @internal
1276
+ * @alpha
1263
1277
  */
1264
1278
  export declare type SequencePlace = number | "start" | "end" | InteriorSequencePlace;
1265
1279
 
@@ -1331,7 +1345,7 @@ export declare class SharedIntervalCollectionFactory implements IChannelFactory
1331
1345
  }
1332
1346
 
1333
1347
  /**
1334
- * @internal
1348
+ * @alpha
1335
1349
  */
1336
1350
  export declare abstract class SharedSegmentSequence<T extends ISegment> extends SharedObject<ISharedSegmentSequenceEvents> implements ISharedIntervalCollection<SequenceInterval>, MergeTreeRevertibleDriver {
1337
1351
  private readonly dataStoreRuntime;
@@ -1596,7 +1610,7 @@ export declare class SharedSequence<T> extends SharedSegmentSequence<SubSequence
1596
1610
  * In addition to text, a Shared String can also contain markers. Markers can be
1597
1611
  * used to store metadata at positions within the text, like the details of an
1598
1612
  * image or Fluid object that should be rendered with the text.
1599
- * @internal
1613
+ * @alpha
1600
1614
  */
1601
1615
  export declare class SharedString extends SharedSegmentSequence<SharedStringSegment> implements ISharedString {
1602
1616
  id: string;
@@ -1716,7 +1730,7 @@ export declare class SharedString extends SharedSegmentSequence<SharedStringSegm
1716
1730
  }
1717
1731
 
1718
1732
  /**
1719
- * @internal
1733
+ * @alpha
1720
1734
  */
1721
1735
  export declare class SharedStringFactory implements IChannelFactory {
1722
1736
  static Type: string;
@@ -1738,7 +1752,7 @@ export declare class SharedStringFactory implements IChannelFactory {
1738
1752
  export declare type SharedStringRevertible = MergeTreeDeltaRevertible | IntervalRevertible;
1739
1753
 
1740
1754
  /**
1741
- * @internal
1755
+ * @alpha
1742
1756
  */
1743
1757
  export declare type SharedStringSegment = TextSegment | Marker;
1744
1758
 
@@ -1746,7 +1760,7 @@ export declare type SharedStringSegment = TextSegment | Marker;
1746
1760
  * Defines a side relative to a character in a sequence.
1747
1761
  *
1748
1762
  * @remarks See {@link SequencePlace} for additional context on usage.
1749
- * @internal
1763
+ * @alpha
1750
1764
  */
1751
1765
  export declare enum Side {
1752
1766
  Before = 0,
package/lib/sequence.d.ts CHANGED
@@ -45,7 +45,7 @@ import { ISharedIntervalCollection } from "./sharedIntervalCollection";
45
45
  * - `event` - Various information on the segments that were modified.
46
46
  *
47
47
  * - `target` - The sequence itself.
48
- * @internal
48
+ * @alpha
49
49
  */
50
50
  export interface ISharedSegmentSequenceEvents extends ISharedObjectEvents {
51
51
  (event: "createIntervalCollection", listener: (label: string, local: boolean, target: IEventThisPlaceHolder) => void): any;
@@ -53,7 +53,7 @@ export interface ISharedSegmentSequenceEvents extends ISharedObjectEvents {
53
53
  (event: "maintenance", listener: (event: SequenceMaintenanceEvent, target: IEventThisPlaceHolder) => void): any;
54
54
  }
55
55
  /**
56
- * @internal
56
+ * @alpha
57
57
  */
58
58
  export declare abstract class SharedSegmentSequence<T extends ISegment> extends SharedObject<ISharedSegmentSequenceEvents> implements ISharedIntervalCollection<SequenceInterval>, MergeTreeRevertibleDriver {
59
59
  private readonly dataStoreRuntime;
package/lib/sequence.js CHANGED
@@ -1,24 +1,27 @@
1
+ "use strict";
1
2
  /*!
2
3
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
4
  * Licensed under the MIT License.
4
5
  */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.resetReentrancyLogCounter = exports.SharedSegmentSequence = void 0;
5
8
  /* eslint-disable import/no-deprecated */
6
- import { assert, Deferred } from "@fluidframework/core-utils";
7
- import { bufferToString } from "@fluid-internal/client-utils";
8
- import { LoggingError, createChildLogger } from "@fluidframework/telemetry-utils";
9
- import { MessageType } from "@fluidframework/protocol-definitions";
10
- import { Client, createAnnotateRangeOp, createGroupOp, createInsertOp, createRemoveRangeOp, matchProperties, MergeTreeDeltaType, } from "@fluidframework/merge-tree";
11
- import { ObjectStoragePartition, SummaryTreeBuilder } from "@fluidframework/runtime-utils";
12
- import { makeHandlesSerializable, parseHandles, SharedObject, } from "@fluidframework/shared-object-base";
13
- import { DefaultMap } from "./defaultMap";
14
- import { SequenceIntervalCollectionValueType, } from "./intervalCollection";
15
- import { SequenceDeltaEvent, SequenceMaintenanceEvent } from "./sequenceDeltaEvent";
9
+ const core_utils_1 = require("@fluidframework/core-utils");
10
+ const client_utils_1 = require("@fluid-internal/client-utils");
11
+ const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
12
+ const protocol_definitions_1 = require("@fluidframework/protocol-definitions");
13
+ const merge_tree_1 = require("@fluidframework/merge-tree");
14
+ const runtime_utils_1 = require("@fluidframework/runtime-utils");
15
+ const shared_object_base_1 = require("@fluidframework/shared-object-base");
16
+ const defaultMap_1 = require("./defaultMap");
17
+ const intervalCollection_1 = require("./intervalCollection");
18
+ const sequenceDeltaEvent_1 = require("./sequenceDeltaEvent");
16
19
  const snapshotFileName = "header";
17
20
  const contentPath = "content";
18
21
  /**
19
- * @internal
22
+ * @alpha
20
23
  */
21
- export class SharedSegmentSequence extends SharedObject {
24
+ class SharedSegmentSequence extends shared_object_base_1.SharedObject {
22
25
  get loaded() {
23
26
  return this.loadedDeferred.promise;
24
27
  }
@@ -26,7 +29,7 @@ export class SharedSegmentSequence extends SharedObject {
26
29
  const ops = [];
27
30
  for (const r of event.ranges) {
28
31
  switch (event.deltaOperation) {
29
- case MergeTreeDeltaType.ANNOTATE: {
32
+ case merge_tree_1.MergeTreeDeltaType.ANNOTATE: {
30
33
  const lastAnnotate = ops[ops.length - 1];
31
34
  const props = {};
32
35
  for (const key of Object.keys(r.propertyDeltas)) {
@@ -34,25 +37,25 @@ export class SharedSegmentSequence extends SharedObject {
34
37
  }
35
38
  if (lastAnnotate &&
36
39
  lastAnnotate.pos2 === r.position &&
37
- matchProperties(lastAnnotate.props, props)) {
40
+ (0, merge_tree_1.matchProperties)(lastAnnotate.props, props)) {
38
41
  lastAnnotate.pos2 += r.segment.cachedLength;
39
42
  }
40
43
  else {
41
- ops.push(createAnnotateRangeOp(r.position, r.position + r.segment.cachedLength, props, undefined));
44
+ ops.push((0, merge_tree_1.createAnnotateRangeOp)(r.position, r.position + r.segment.cachedLength, props, undefined));
42
45
  }
43
46
  break;
44
47
  }
45
- case MergeTreeDeltaType.INSERT:
46
- ops.push(createInsertOp(r.position, r.segment.clone().toJSONObject()));
48
+ case merge_tree_1.MergeTreeDeltaType.INSERT:
49
+ ops.push((0, merge_tree_1.createInsertOp)(r.position, r.segment.clone().toJSONObject()));
47
50
  break;
48
- case MergeTreeDeltaType.REMOVE: {
51
+ case merge_tree_1.MergeTreeDeltaType.REMOVE: {
49
52
  const lastRem = ops[ops.length - 1];
50
53
  if (lastRem?.pos1 === r.position) {
51
- assert(lastRem.pos2 !== undefined, 0x3ff /* pos2 should not be undefined here */);
54
+ (0, core_utils_1.assert)(lastRem.pos2 !== undefined, 0x3ff /* pos2 should not be undefined here */);
52
55
  lastRem.pos2 += r.segment.cachedLength;
53
56
  }
54
57
  else {
55
- ops.push(createRemoveRangeOp(r.position, r.position + r.segment.cachedLength));
58
+ ops.push((0, merge_tree_1.createRemoveRangeOp)(r.position, r.position + r.segment.cachedLength));
56
59
  }
57
60
  break;
58
61
  }
@@ -67,7 +70,7 @@ export class SharedSegmentSequence extends SharedObject {
67
70
  this.id = id;
68
71
  this.segmentFromSpec = segmentFromSpec;
69
72
  /** `Deferred` that triggers once the object is loaded */
70
- this.loadedDeferred = new Deferred();
73
+ this.loadedDeferred = new core_utils_1.Deferred();
71
74
  // cache out going ops created when partial loading
72
75
  this.loadedDeferredOutgoingOps = [];
73
76
  // cache incoming ops that arrive when partial loading
@@ -80,27 +83,27 @@ export class SharedSegmentSequence extends SharedObject {
80
83
  : createReentrancyDetector((depth) => {
81
84
  if (totalReentrancyLogs > 0) {
82
85
  totalReentrancyLogs--;
83
- this.logger.sendTelemetryEvent({ eventName: "LocalOpReentry", depth }, new LoggingError(reentrancyErrorMessage));
86
+ this.logger.sendTelemetryEvent({ eventName: "LocalOpReentry", depth }, new telemetry_utils_1.LoggingError(reentrancyErrorMessage));
84
87
  }
85
88
  });
86
89
  this.loadedDeferred.promise.catch((error) => {
87
90
  this.logger.sendErrorEvent({ eventName: "SequenceLoadFailed" }, error);
88
91
  });
89
- this.client = new Client(segmentFromSpec, createChildLogger({
92
+ this.client = new merge_tree_1.Client(segmentFromSpec, (0, telemetry_utils_1.createChildLogger)({
90
93
  logger: this.logger,
91
94
  namespace: "SharedSegmentSequence.MergeTreeClient",
92
95
  }), dataStoreRuntime.options);
93
96
  this.client.prependListener("delta", (opArgs, deltaArgs) => {
94
- const event = new SequenceDeltaEvent(opArgs, deltaArgs, this.client);
97
+ const event = new sequenceDeltaEvent_1.SequenceDeltaEvent(opArgs, deltaArgs, this.client);
95
98
  if (opArgs.stashed !== true && event.isLocal) {
96
99
  this.submitSequenceMessage(opArgs.op);
97
100
  }
98
101
  this.emit("sequenceDelta", event, this);
99
102
  });
100
103
  this.client.on("maintenance", (args, opArgs) => {
101
- this.emit("maintenance", new SequenceMaintenanceEvent(opArgs, args, this.client), this);
104
+ this.emit("maintenance", new sequenceDeltaEvent_1.SequenceMaintenanceEvent(opArgs, args, this.client), this);
102
105
  });
103
- this.intervalCollections = new DefaultMap(this.serializer, this.handle, (op, localOpMetadata) => this.submitLocalMessage(op, localOpMetadata), new SequenceIntervalCollectionValueType(), dataStoreRuntime.options);
106
+ this.intervalCollections = new defaultMap_1.DefaultMap(this.serializer, this.handle, (op, localOpMetadata) => this.submitLocalMessage(op, localOpMetadata), new intervalCollection_1.SequenceIntervalCollectionValueType(), dataStoreRuntime.options);
104
107
  }
105
108
  /**
106
109
  * @param start - The inclusive start of the range to remove
@@ -202,8 +205,8 @@ export class SharedSegmentSequence extends SharedObject {
202
205
  if (!this.isAttached()) {
203
206
  return;
204
207
  }
205
- const translated = makeHandlesSerializable(message, this.serializer, this.handle);
206
- const metadata = this.client.peekPendingSegmentGroups(message.type === MergeTreeDeltaType.GROUP ? message.ops.length : 1);
208
+ const translated = (0, shared_object_base_1.makeHandlesSerializable)(message, this.serializer, this.handle);
209
+ const metadata = this.client.peekPendingSegmentGroups(message.type === merge_tree_1.MergeTreeDeltaType.GROUP ? message.ops.length : 1);
207
210
  // if loading isn't complete, we need to cache
208
211
  // local ops until loading is complete, and then
209
212
  // they will be resent
@@ -294,7 +297,7 @@ export class SharedSegmentSequence extends SharedObject {
294
297
  * {@inheritDoc @fluidframework/shared-object-base#SharedObject.summarizeCore}
295
298
  */
296
299
  summarizeCore(serializer, telemetryContext) {
297
- const builder = new SummaryTreeBuilder();
300
+ const builder = new runtime_utils_1.SummaryTreeBuilder();
298
301
  // conditionally write the interval collection blob
299
302
  // only if it has entries
300
303
  if (this.intervalCollections.size > 0) {
@@ -358,14 +361,14 @@ export class SharedSegmentSequence extends SharedObject {
358
361
  async loadCore(storage) {
359
362
  if (await storage.contains(snapshotFileName)) {
360
363
  const blob = await storage.readBlob(snapshotFileName);
361
- const header = bufferToString(blob, "utf8");
364
+ const header = (0, client_utils_1.bufferToString)(blob, "utf8");
362
365
  this.intervalCollections.populate(header);
363
366
  }
364
367
  try {
365
368
  // this will load the header, and return a promise
366
369
  // that will resolve when the body is loaded
367
370
  // and the catchup ops are available.
368
- const { catchupOpsP } = await this.client.load(this.runtime, new ObjectStoragePartition(storage, contentPath), this.serializer);
371
+ const { catchupOpsP } = await this.client.load(this.runtime, new runtime_utils_1.ObjectStoragePartition(storage, contentPath), this.serializer);
369
372
  // setup a promise to process the
370
373
  // catch up ops, and finishing the loading process
371
374
  const loadCatchUpOps = catchupOpsP
@@ -413,11 +416,11 @@ export class SharedSegmentSequence extends SharedObject {
413
416
  // if loading isn't complete, we need to cache all
414
417
  // incoming ops to be applied after loading is complete
415
418
  if (this.deferIncomingOps) {
416
- assert(!local, 0x072 /* "Unexpected local op when loading not finished" */);
419
+ (0, core_utils_1.assert)(!local, 0x072 /* "Unexpected local op when loading not finished" */);
417
420
  this.loadedDeferredIncomingOps.push(message);
418
421
  }
419
422
  else {
420
- assert(message.type === MessageType.Operation, 0x073 /* "Sequence message not operation" */);
423
+ (0, core_utils_1.assert)(message.type === protocol_definitions_1.MessageType.Operation, 0x073 /* "Sequence message not operation" */);
421
424
  const handled = this.intervalCollections.tryProcessMessage(message.contents, local, message, localOpMetadata);
422
425
  if (!handled) {
423
426
  this.processMergeTreeMsg(message, local);
@@ -445,11 +448,11 @@ export class SharedSegmentSequence extends SharedObject {
445
448
  * {@inheritDoc @fluidframework/shared-object-base#SharedObjectCore.applyStashedOp}
446
449
  */
447
450
  applyStashedOp(content) {
448
- return this.client.applyStashedOp(parseHandles(content, this.serializer));
451
+ return this.client.applyStashedOp((0, shared_object_base_1.parseHandles)(content, this.serializer));
449
452
  }
450
453
  summarizeMergeTree(serializer) {
451
454
  // Are we fully loaded? If not, things will go south
452
- assert(this.loadedDeferred.isCompleted, 0x074 /* "Snapshot called when not fully loaded" */);
455
+ (0, core_utils_1.assert)(this.loadedDeferred.isCompleted, 0x074 /* "Snapshot called when not fully loaded" */);
453
456
  const minSeq = this.runtime.deltaManager.minimumSequenceNumber;
454
457
  this.processMinSequenceNumberChanged(minSeq);
455
458
  this.messagesSinceMSNChange.forEach((m) => {
@@ -458,7 +461,7 @@ export class SharedSegmentSequence extends SharedObject {
458
461
  return this.client.summarize(this.runtime, this.handle, serializer, this.messagesSinceMSNChange);
459
462
  }
460
463
  processMergeTreeMsg(rawMessage, local) {
461
- const message = parseHandles(rawMessage, this.serializer);
464
+ const message = (0, shared_object_base_1.parseHandles)(rawMessage, this.serializer);
462
465
  const ops = [];
463
466
  function transformOps(event) {
464
467
  ops.push(...SharedSegmentSequence.createOpsFromDelta(event));
@@ -479,7 +482,7 @@ export class SharedSegmentSequence extends SharedObject {
479
482
  stashMessage = {
480
483
  ...message,
481
484
  referenceSequenceNumber: stashMessage.sequenceNumber - 1,
482
- contents: ops.length !== 1 ? createGroupOp(...ops) : ops[0],
485
+ contents: ops.length !== 1 ? (0, merge_tree_1.createGroupOp)(...ops) : ops[0],
483
486
  };
484
487
  }
485
488
  this.messagesSinceMSNChange.push(stashMessage);
@@ -535,7 +538,7 @@ export class SharedSegmentSequence extends SharedObject {
535
538
  if (!intervalCollection.attached) {
536
539
  intervalCollection.attachGraph(this.client, key);
537
540
  }
538
- assert(previousValue === undefined, 0x2c1 /* "Creating an interval collection that already exists?" */);
541
+ (0, core_utils_1.assert)(previousValue === undefined, 0x2c1 /* "Creating an interval collection that already exists?" */);
539
542
  this.emit("createIntervalCollection", key, local, this);
540
543
  });
541
544
  // Initialize existing SharedIntervalCollections
@@ -545,6 +548,7 @@ export class SharedSegmentSequence extends SharedObject {
545
548
  }
546
549
  }
547
550
  }
551
+ exports.SharedSegmentSequence = SharedSegmentSequence;
548
552
  function createReentrancyDetector(onReentrancy) {
549
553
  let depth = 0;
550
554
  function detectReentrancy(callback) {
@@ -570,11 +574,12 @@ let totalReentrancyLogs = 3;
570
574
  /**
571
575
  * Resets the reentrancy log counter. Test-only API.
572
576
  */
573
- export function resetReentrancyLogCounter() {
577
+ function resetReentrancyLogCounter() {
574
578
  totalReentrancyLogs = 3;
575
579
  }
580
+ exports.resetReentrancyLogCounter = resetReentrancyLogCounter;
576
581
  const reentrancyErrorMessage = "Reentrancy detected in sequence local ops";
577
582
  const ensureNoReentrancy = createReentrancyDetector(() => {
578
- throw new LoggingError(reentrancyErrorMessage);
583
+ throw new telemetry_utils_1.LoggingError(reentrancyErrorMessage);
579
584
  });
580
585
  //# sourceMappingURL=sequence.js.map