@fluidframework/sequence 2.0.0-dev-rc.3.0.0.254866 → 2.0.0-dev-rc.5.0.0.263932

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 (133) hide show
  1. package/.eslintrc.cjs +29 -0
  2. package/CHANGELOG.md +41 -0
  3. package/README.md +10 -3
  4. package/api-report/sequence.api.md +35 -38
  5. package/beta.d.ts +11 -0
  6. package/dist/IntervalCollectionValues.d.ts +0 -2
  7. package/dist/IntervalCollectionValues.d.ts.map +1 -1
  8. package/dist/IntervalCollectionValues.js +0 -2
  9. package/dist/IntervalCollectionValues.js.map +1 -1
  10. package/dist/beta.d.ts +3 -0
  11. package/dist/index.d.ts +2 -2
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +3 -3
  14. package/dist/index.js.map +1 -1
  15. package/dist/intervalCollection.js +1 -1
  16. package/dist/intervalCollection.js.map +1 -1
  17. package/dist/intervalIndex/endpointInRangeIndex.d.ts +2 -2
  18. package/dist/intervalIndex/endpointInRangeIndex.d.ts.map +1 -1
  19. package/dist/intervalIndex/endpointInRangeIndex.js.map +1 -1
  20. package/dist/intervalIndex/endpointIndex.d.ts +2 -2
  21. package/dist/intervalIndex/endpointIndex.d.ts.map +1 -1
  22. package/dist/intervalIndex/endpointIndex.js.map +1 -1
  23. package/dist/intervalIndex/overlappingIntervalsIndex.d.ts +2 -2
  24. package/dist/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -1
  25. package/dist/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
  26. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts +2 -2
  27. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +1 -1
  28. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -1
  29. package/dist/intervalIndex/startpointInRangeIndex.d.ts +2 -2
  30. package/dist/intervalIndex/startpointInRangeIndex.d.ts.map +1 -1
  31. package/dist/intervalIndex/startpointInRangeIndex.js.map +1 -1
  32. package/dist/intervals/interval.js +1 -1
  33. package/dist/intervals/interval.js.map +1 -1
  34. package/dist/intervals/sequenceInterval.js +1 -1
  35. package/dist/intervals/sequenceInterval.js.map +1 -1
  36. package/dist/{alpha.d.ts → legacy.d.ts} +4 -2
  37. package/dist/packageVersion.d.ts +1 -1
  38. package/dist/packageVersion.js +1 -1
  39. package/dist/packageVersion.js.map +1 -1
  40. package/dist/public.d.ts +3 -0
  41. package/dist/revertibles.d.ts +6 -6
  42. package/dist/revertibles.d.ts.map +1 -1
  43. package/dist/revertibles.js.map +1 -1
  44. package/dist/sequence.d.ts +5 -8
  45. package/dist/sequence.d.ts.map +1 -1
  46. package/dist/sequence.js +44 -101
  47. package/dist/sequence.js.map +1 -1
  48. package/dist/sequenceDeltaEvent.d.ts +24 -3
  49. package/dist/sequenceDeltaEvent.d.ts.map +1 -1
  50. package/dist/sequenceDeltaEvent.js +16 -3
  51. package/dist/sequenceDeltaEvent.js.map +1 -1
  52. package/dist/sequenceFactory.d.ts +15 -7
  53. package/dist/sequenceFactory.d.ts.map +1 -1
  54. package/dist/sequenceFactory.js +9 -6
  55. package/dist/sequenceFactory.js.map +1 -1
  56. package/dist/sharedString.d.ts +70 -47
  57. package/dist/sharedString.d.ts.map +1 -1
  58. package/dist/sharedString.js +15 -52
  59. package/dist/sharedString.js.map +1 -1
  60. package/internal.d.ts +11 -0
  61. package/legacy.d.ts +11 -0
  62. package/lib/IntervalCollectionValues.d.ts +0 -2
  63. package/lib/IntervalCollectionValues.d.ts.map +1 -1
  64. package/lib/IntervalCollectionValues.js +0 -2
  65. package/lib/IntervalCollectionValues.js.map +1 -1
  66. package/lib/beta.d.ts +3 -0
  67. package/lib/index.d.ts +2 -2
  68. package/lib/index.d.ts.map +1 -1
  69. package/lib/index.js +2 -2
  70. package/lib/index.js.map +1 -1
  71. package/lib/intervalCollection.js +1 -1
  72. package/lib/intervalCollection.js.map +1 -1
  73. package/lib/intervalIndex/endpointInRangeIndex.d.ts +2 -2
  74. package/lib/intervalIndex/endpointInRangeIndex.d.ts.map +1 -1
  75. package/lib/intervalIndex/endpointInRangeIndex.js.map +1 -1
  76. package/lib/intervalIndex/endpointIndex.d.ts +2 -2
  77. package/lib/intervalIndex/endpointIndex.d.ts.map +1 -1
  78. package/lib/intervalIndex/endpointIndex.js.map +1 -1
  79. package/lib/intervalIndex/overlappingIntervalsIndex.d.ts +2 -2
  80. package/lib/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -1
  81. package/lib/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
  82. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.ts +2 -2
  83. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +1 -1
  84. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -1
  85. package/lib/intervalIndex/startpointInRangeIndex.d.ts +2 -2
  86. package/lib/intervalIndex/startpointInRangeIndex.d.ts.map +1 -1
  87. package/lib/intervalIndex/startpointInRangeIndex.js.map +1 -1
  88. package/lib/intervals/interval.js +1 -1
  89. package/lib/intervals/interval.js.map +1 -1
  90. package/lib/intervals/sequenceInterval.js +1 -1
  91. package/lib/intervals/sequenceInterval.js.map +1 -1
  92. package/lib/{alpha.d.ts → legacy.d.ts} +4 -2
  93. package/lib/packageVersion.d.ts +1 -1
  94. package/lib/packageVersion.js +1 -1
  95. package/lib/packageVersion.js.map +1 -1
  96. package/lib/public.d.ts +3 -0
  97. package/lib/revertibles.d.ts +6 -6
  98. package/lib/revertibles.d.ts.map +1 -1
  99. package/lib/revertibles.js.map +1 -1
  100. package/lib/sequence.d.ts +5 -8
  101. package/lib/sequence.d.ts.map +1 -1
  102. package/lib/sequence.js +47 -103
  103. package/lib/sequence.js.map +1 -1
  104. package/lib/sequenceDeltaEvent.d.ts +24 -3
  105. package/lib/sequenceDeltaEvent.d.ts.map +1 -1
  106. package/lib/sequenceDeltaEvent.js +16 -3
  107. package/lib/sequenceDeltaEvent.js.map +1 -1
  108. package/lib/sequenceFactory.d.ts +15 -7
  109. package/lib/sequenceFactory.d.ts.map +1 -1
  110. package/lib/sequenceFactory.js +9 -6
  111. package/lib/sequenceFactory.js.map +1 -1
  112. package/lib/sharedString.d.ts +70 -47
  113. package/lib/sharedString.d.ts.map +1 -1
  114. package/lib/sharedString.js +13 -50
  115. package/lib/sharedString.js.map +1 -1
  116. package/lib/tsdoc-metadata.json +1 -1
  117. package/package.json +47 -33
  118. package/src/IntervalCollectionValues.ts +0 -2
  119. package/src/index.ts +2 -2
  120. package/src/intervalCollection.ts +1 -1
  121. package/src/intervalIndex/endpointInRangeIndex.ts +2 -2
  122. package/src/intervalIndex/endpointIndex.ts +2 -2
  123. package/src/intervalIndex/overlappingIntervalsIndex.ts +2 -2
  124. package/src/intervalIndex/overlappingSequenceIntervalsIndex.ts +2 -2
  125. package/src/intervalIndex/startpointInRangeIndex.ts +2 -2
  126. package/src/intervals/interval.ts +1 -1
  127. package/src/intervals/sequenceInterval.ts +1 -1
  128. package/src/packageVersion.ts +1 -1
  129. package/src/revertibles.ts +18 -14
  130. package/src/sequence.ts +63 -121
  131. package/src/sequenceDeltaEvent.ts +12 -1
  132. package/src/sequenceFactory.ts +21 -9
  133. package/src/sharedString.ts +89 -56
package/.eslintrc.cjs CHANGED
@@ -15,4 +15,33 @@ module.exports = {
15
15
  "@typescript-eslint/no-use-before-define": "off",
16
16
  "@typescript-eslint/strict-boolean-expressions": "off",
17
17
  },
18
+ settings: {
19
+ "import/extensions": [".ts", ".tsx", ".d.ts", ".js", ".jsx"],
20
+ "import/parsers": {
21
+ "@typescript-eslint/parser": [".ts", ".tsx", ".d.ts"],
22
+ },
23
+ "import/resolver": {
24
+ typescript: {
25
+ extensions: [".ts", ".tsx", ".d.ts", ".js", ".jsx"],
26
+ conditionNames: [
27
+ "allow-ff-test-exports",
28
+
29
+ // Default condition names below, see https://www.npmjs.com/package/eslint-import-resolver-typescript#conditionnames
30
+ "types",
31
+ "import",
32
+
33
+ // APF: https://angular.io/guide/angular-package-format
34
+ "esm2020",
35
+ "es2020",
36
+ "es2015",
37
+
38
+ "require",
39
+ "node",
40
+ "node-addons",
41
+ "browser",
42
+ "default",
43
+ ],
44
+ },
45
+ },
46
+ },
18
47
  };
package/CHANGELOG.md CHANGED
@@ -1,5 +1,46 @@
1
1
  # @fluidframework/sequence
2
2
 
3
+ ## 2.0.0-rc.4.0.0
4
+
5
+ ### Minor Changes
6
+
7
+ - SharedString now uses ISharedObjectKind and does not export the factory [96872186d0](https://github.com/microsoft/FluidFramework/commit/96872186d0d0f245c1fece7d19b3743e501679b6)
8
+
9
+ Most users of `SharedString` should be unaffected as long as they stick to the factory patterns supported by ISharedObjectKind.
10
+ If the actual class type is needed it can be found as `SharedStringClass`.
11
+
12
+ - Deprecated members of IFluidHandle are split off into new IFluidHandleInternal interface [96872186d0](https://github.com/microsoft/FluidFramework/commit/96872186d0d0f245c1fece7d19b3743e501679b6)
13
+
14
+ Split IFluidHandle into two interfaces, `IFluidHandle` and `IFluidHandleInternal`.
15
+ Code depending on the previously deprecated members of IFluidHandle can access them by using `toFluidHandleInternal` from `@fluidframework/runtime-utils/legacy`.
16
+
17
+ External implementation of the `IFluidHandle` interface are not supported: this change makes the typing better convey this using the `ErasedType` pattern.
18
+ Any existing and previously working, and now broken, external implementations of `IFluidHandle` should still work at runtime, but will need some unsafe type casts to compile.
19
+ Such handle implementation may break in the future and thus should be replaced with use of handles produced by the Fluid Framework client packages.
20
+
21
+ ## 2.0.0-rc.3.0.0
22
+
23
+ ### Major Changes
24
+
25
+ - Packages now use package.json "exports" and require modern module resolution [97d68aa06b](https://github.com/microsoft/FluidFramework/commit/97d68aa06bd5c022ecb026655814aea222a062ae)
26
+
27
+ Fluid Framework packages have been updated to use the [package.json "exports"
28
+ field](https://nodejs.org/docs/latest-v18.x/api/packages.html#exports) to define explicit entry points for both
29
+ TypeScript types and implementation code.
30
+
31
+ This means that using Fluid Framework packages require the following TypeScript settings in tsconfig.json:
32
+
33
+ - `"moduleResolution": "Node16"` with `"module": "Node16"`
34
+ - `"moduleResolution": "Bundler"` with `"module": "ESNext"`
35
+
36
+ We recommend using Node16/Node16 unless absolutely necessary. That will produce transpiled JavaScript that is suitable
37
+ for use with modern versions of Node.js _and_ Bundlers.
38
+ [See the TypeScript documentation](https://www.typescriptlang.org/tsconfig#moduleResolution) for more information
39
+ regarding the module and moduleResolution options.
40
+
41
+ **Node10 moduleResolution is not supported; it does not support Fluid Framework's API structuring pattern that is used
42
+ to distinguish stable APIs from those that are in development.**
43
+
3
44
  ## 2.0.0-rc.2.0.0
4
45
 
5
46
  ### Minor Changes
package/README.md CHANGED
@@ -183,6 +183,8 @@ sharedString.on("sequenceDelta", ({ deltaOperation, ranges, isLocal }) => {
183
183
 
184
184
  Internally, the sequence package depends on `@fluidframework/merge-tree`, and also raises `MergeTreeMaintenance` events on that tree as _maintenance_ events.
185
185
  These events don't correspond directly to APIs invoked on a sequence DDS, but may be useful for advanced users.
186
+ Maintenance events are raised whenever the underlying structure of the merge-tree changes (segments are merged, split, unlinked, etc),
187
+ so applications attempting to synchronize a data model dependent on the segment structure of merge-tree should look into the semantics of these events; see `MergeTreeMaintenanceType`.
186
188
 
187
189
  Both sequenceDelta and maintenance events are commonly used to synchronize or invalidate a view an application might have over a backing sequence DDS.
188
190
 
@@ -564,9 +566,11 @@ const options: ILoaderOptions = {
564
566
  ```
565
567
 
566
568
  This ensures that the client is able to load existing documents containing attribution information,
567
- and specifies which kinds of operations should be attributed at the SharedString level (currently, only insertions).
569
+ and specifies which kinds of operations should be attributed at the SharedString level.
568
570
  The stored attribution information can be found on the `attribution` field of the SharedString's segments.
569
571
 
572
+ > To attribute property changes as well as insertions, use `createPropertyTrackingAndInsertionAttributionPolicyFactory` in place of the insert-only factory.
573
+
570
574
  Next, enable the `"Fluid.Attribution.EnableOnNewFile"` config flag to start tracking attribution information for new files.
571
575
 
572
576
  ```typescript
@@ -576,9 +580,12 @@ const key = segment.attribution.getAtOffset(offset);
576
580
  // See the @fluid-experimental/attributor package for more details.
577
581
  ```
578
582
 
579
- For further reading on attribution, see the [@fluid-experimental/attributor README](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/attributor/README.md).
583
+ Note that because attribution information is only finalized upon receiving acknowledgement from the server,
584
+ any queries for attribution keys on unacked changes will return `LocalAttributionKey`.
585
+ To listen for changes to attribution information (e.g. to synchronize a data model with a `SharedString`),
586
+ use the "maintenance" event for acknowledgement.
580
587
 
581
- There are plans to make attribution policies more flexible, for example tracking attribution of property changes separately from segment insertion.
588
+ For further reading on attribution, see the [@fluid-experimental/attributor README](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/attributor/README.md).
582
589
 
583
590
  <!-- This line begins the content that is copied to the string.md README -->
584
591
 
@@ -6,7 +6,6 @@
6
6
 
7
7
  import { BaseSegment } from '@fluidframework/merge-tree/internal';
8
8
  import { Client } from '@fluidframework/merge-tree/internal';
9
- import { Deferred } from '@fluidframework/core-utils/internal';
10
9
  import { IChannelAttributes } from '@fluidframework/datastore-definitions';
11
10
  import { IChannelFactory } from '@fluidframework/datastore-definitions';
12
11
  import { IChannelServices } from '@fluidframework/datastore-definitions';
@@ -25,6 +24,7 @@ import { ISegment } from '@fluidframework/merge-tree/internal';
25
24
  import { ISegmentAction } from '@fluidframework/merge-tree/internal';
26
25
  import { ISequencedDocumentMessage } from '@fluidframework/protocol-definitions';
27
26
  import { ISharedObjectEvents } from '@fluidframework/shared-object-base';
27
+ import type { ISharedObjectKind } from '@fluidframework/shared-object-base';
28
28
  import { ISummaryTreeWithStats } from '@fluidframework/runtime-definitions';
29
29
  import { ITelemetryContext } from '@fluidframework/runtime-definitions';
30
30
  import { LocalReferencePosition } from '@fluidframework/merge-tree/internal';
@@ -54,45 +54,45 @@ import { TypedEventEmitter } from '@fluid-internal/client-utils';
54
54
  export function appendAddIntervalToRevertibles(interval: SequenceInterval, revertibles: SharedStringRevertible[]): SharedStringRevertible[];
55
55
 
56
56
  // @alpha
57
- export function appendChangeIntervalToRevertibles(string: SharedString, newInterval: SequenceInterval, previousInterval: SequenceInterval, revertibles: SharedStringRevertible[]): SharedStringRevertible[];
57
+ export function appendChangeIntervalToRevertibles(string: ISharedString, newInterval: SequenceInterval, previousInterval: SequenceInterval, revertibles: SharedStringRevertible[]): SharedStringRevertible[];
58
58
 
59
59
  // @alpha
60
- export function appendDeleteIntervalToRevertibles(string: SharedString, interval: SequenceInterval, revertibles: SharedStringRevertible[]): SharedStringRevertible[];
60
+ export function appendDeleteIntervalToRevertibles(string: ISharedString, interval: SequenceInterval, revertibles: SharedStringRevertible[]): SharedStringRevertible[];
61
61
 
62
62
  // @alpha
63
63
  export function appendIntervalPropertyChangedToRevertibles(interval: SequenceInterval, deltas: PropertySet, revertibles: SharedStringRevertible[]): SharedStringRevertible[];
64
64
 
65
65
  // @alpha
66
- export function appendSharedStringDeltaToRevertibles(string: SharedString, delta: SequenceDeltaEvent, revertibles: SharedStringRevertible[]): void;
66
+ export function appendSharedStringDeltaToRevertibles(string: ISharedString, delta: SequenceDeltaEvent, revertibles: SharedStringRevertible[]): void;
67
67
 
68
68
  export { BaseSegment }
69
69
 
70
70
  // @internal (undocumented)
71
- export function createEndpointIndex(sharedString: SharedString): IEndpointIndex<SequenceInterval>;
71
+ export function createEndpointIndex(sharedString: ISharedString): IEndpointIndex<SequenceInterval>;
72
72
 
73
73
  // @internal (undocumented)
74
- export function createEndpointInRangeIndex(sharedString: SharedString): IEndpointInRangeIndex<SequenceInterval>;
74
+ export function createEndpointInRangeIndex(sharedString: ISharedString): IEndpointInRangeIndex<SequenceInterval>;
75
75
 
76
76
  // @internal (undocumented)
77
77
  export function createIdIntervalIndex<TInterval extends ISerializableInterval>(): IIdIntervalIndex<TInterval>;
78
78
 
79
79
  // @alpha (undocumented)
80
- export function createOverlappingIntervalsIndex(sharedString: SharedString): IOverlappingIntervalsIndex<SequenceInterval>;
80
+ export function createOverlappingIntervalsIndex(sharedString: ISharedString): IOverlappingIntervalsIndex<SequenceInterval>;
81
81
 
82
82
  // @internal (undocumented)
83
- export function createOverlappingSequenceIntervalsIndex(sharedString: SharedString): SequenceIntervalIndexes.Overlapping;
83
+ export function createOverlappingSequenceIntervalsIndex(sharedString: ISharedString): SequenceIntervalIndexes.Overlapping;
84
84
 
85
85
  // @internal (undocumented)
86
- export function createStartpointInRangeIndex(sharedString: SharedString): IStartpointInRangeIndex<SequenceInterval>;
86
+ export function createStartpointInRangeIndex(sharedString: ISharedString): IStartpointInRangeIndex<SequenceInterval>;
87
87
 
88
88
  // @alpha (undocumented)
89
89
  export type DeserializeCallback = (properties: PropertySet) => void;
90
90
 
91
91
  // @alpha
92
- export function discardSharedStringRevertibles(sharedString: SharedString, revertibles: SharedStringRevertible[]): void;
92
+ export function discardSharedStringRevertibles(sharedString: ISharedString, revertibles: SharedStringRevertible[]): void;
93
93
 
94
94
  // @internal
95
- export function getTextAndMarkers(sharedString: SharedString, label: string, start?: number, end?: number): {
95
+ export function getTextAndMarkers(sharedString: ISharedString, label: string, start?: number, end?: number): {
96
96
  parallelText: string[];
97
97
  parallelMarkers: Marker[];
98
98
  };
@@ -382,9 +382,19 @@ export interface ISharedSegmentSequenceEvents extends ISharedObjectEvents {
382
382
 
383
383
  // @alpha
384
384
  export interface ISharedString extends SharedSegmentSequence<SharedStringSegment> {
385
+ annotateMarker(marker: Marker, props: PropertySet): void;
386
+ getMarkerFromId(id: string): ISegment | undefined;
387
+ getText(start?: number, end?: number): string;
388
+ // (undocumented)
389
+ getTextRangeWithMarkers(start: number, end: number): string;
390
+ getTextWithPlaceholders(start?: number, end?: number): string;
385
391
  insertMarker(pos: number, refType: ReferenceType, props?: PropertySet): void;
392
+ insertMarkerRelative(relativePos1: IRelativePosition, refType: ReferenceType, props?: PropertySet): void;
386
393
  insertText(pos: number, text: string, props?: PropertySet): void;
387
- posFromRelativePos(relativePos: IRelativePosition): number;
394
+ insertTextRelative(relativePos1: IRelativePosition, text: string, props?: PropertySet): void;
395
+ removeText(start: number, end: number): void;
396
+ replaceText(start: number, end: number, text: string, props?: PropertySet): void;
397
+ searchForMarker(startPos: number, markerLabel: string, forwards?: boolean): Marker | undefined;
388
398
  }
389
399
 
390
400
  // @internal
@@ -420,7 +430,7 @@ export { reservedRangeLabelsKey }
420
430
  export { reservedTileLabelsKey }
421
431
 
422
432
  // @alpha
423
- export function revertSharedStringRevertibles(sharedString: SharedString, revertibles: SharedStringRevertible[]): void;
433
+ export function revertSharedStringRevertibles(sharedString: ISharedString, revertibles: SharedStringRevertible[]): void;
424
434
 
425
435
  // @alpha
426
436
  export class SequenceDeltaEvent extends SequenceEvent<MergeTreeDeltaOperationType> {
@@ -432,9 +442,9 @@ export class SequenceDeltaEvent extends SequenceEvent<MergeTreeDeltaOperationTyp
432
442
 
433
443
  // @alpha
434
444
  export abstract class SequenceEvent<TOperation extends MergeTreeDeltaOperationTypes = MergeTreeDeltaOperationTypes> {
435
- constructor(deltaArgs: IMergeTreeDeltaCallbackArgs<TOperation>, mergeTreeClient: Client);
445
+ constructor(
446
+ deltaArgs: IMergeTreeDeltaCallbackArgs<TOperation>, mergeTreeClient: Client);
436
447
  get clientId(): string | undefined;
437
- // (undocumented)
438
448
  readonly deltaArgs: IMergeTreeDeltaCallbackArgs<TOperation>;
439
449
  // (undocumented)
440
450
  readonly deltaOperation: TOperation;
@@ -499,8 +509,8 @@ export namespace SequenceIntervalIndexes {
499
509
 
500
510
  // @alpha
501
511
  export class SequenceMaintenanceEvent extends SequenceEvent<MergeTreeMaintenanceType> {
502
- constructor(opArgs: IMergeTreeDeltaOpArgs | undefined, deltaArgs: IMergeTreeMaintenanceCallbackArgs, mergeTreeClient: Client);
503
- // (undocumented)
512
+ constructor(
513
+ opArgs: IMergeTreeDeltaOpArgs | undefined, deltaArgs: IMergeTreeMaintenanceCallbackArgs, mergeTreeClient: Client);
504
514
  readonly opArgs: IMergeTreeDeltaOpArgs | undefined;
505
515
  }
506
516
 
@@ -592,9 +602,8 @@ export abstract class SharedSegmentSequence<T extends ISegment> extends SharedOb
592
602
  insertAtReferencePosition(pos: ReferencePosition, segment: T): void;
593
603
  insertFromSpec(pos: number, spec: IJSONSegment): void;
594
604
  protected loadCore(storage: IChannelStorageService): Promise<void>;
595
- // (undocumented)
605
+ // @deprecated
596
606
  get loaded(): Promise<void>;
597
- protected loadedDeferred: Deferred<void>;
598
607
  localReferencePositionToPosition(lref: ReferencePosition): number;
599
608
  obliterateRange(start: number, end: number): void;
600
609
  protected onConnect(): void;
@@ -628,11 +637,15 @@ export class SharedSequence<T> extends SharedSegmentSequence<SubSequence<T>> {
628
637
  }
629
638
 
630
639
  // @alpha
631
- export class SharedString extends SharedSegmentSequence<SharedStringSegment> implements ISharedString {
640
+ export const SharedString: ISharedObjectKind<ISharedString>;
641
+
642
+ // @alpha
643
+ export type SharedString = ISharedString;
644
+
645
+ // @alpha
646
+ export class SharedStringClass extends SharedSegmentSequence<SharedStringSegment> implements ISharedString {
632
647
  constructor(document: IFluidDataStoreRuntime, id: string, attributes: IChannelAttributes);
633
648
  annotateMarker(marker: Marker, props: PropertySet): void;
634
- static create(runtime: IFluidDataStoreRuntime, id?: string): SharedString;
635
- static getFactory(): SharedStringFactory;
636
649
  getMarkerFromId(id: string): ISegment | undefined;
637
650
  getText(start?: number, end?: number): string;
638
651
  // (undocumented)
@@ -652,22 +665,6 @@ export class SharedString extends SharedSegmentSequence<SharedStringSegment> imp
652
665
  searchForMarker(startPos: number, markerLabel: string, forwards?: boolean): Marker | undefined;
653
666
  }
654
667
 
655
- // @alpha (undocumented)
656
- export class SharedStringFactory implements IChannelFactory {
657
- // (undocumented)
658
- static readonly Attributes: IChannelAttributes;
659
- // (undocumented)
660
- get attributes(): IChannelAttributes;
661
- create(document: IFluidDataStoreRuntime, id: string): SharedString;
662
- load(runtime: IFluidDataStoreRuntime, id: string, services: IChannelServices, attributes: IChannelAttributes): Promise<SharedString>;
663
- // (undocumented)
664
- static segmentFromSpec(spec: any): SharedStringSegment;
665
- // (undocumented)
666
- static Type: string;
667
- // (undocumented)
668
- get type(): string;
669
- }
670
-
671
668
  // @alpha
672
669
  export type SharedStringRevertible = MergeTreeDeltaRevertible | IntervalRevertible;
673
670
 
package/beta.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ /*
7
+ * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
8
+ * Generated by "flub generate entrypoints" in @fluidframework/build-tools.
9
+ */
10
+
11
+ export * from "./lib/beta.js";
@@ -30,8 +30,6 @@ export interface ILocalIntervalCollection<T extends ISerializableInterval> {
30
30
  export declare function makeSerializable<T extends ISerializableInterval>(localValue: ILocalIntervalCollection<T>, serializer: IFluidSerializer, bind: IFluidHandle): ISerializableIntervalCollection;
31
31
  /**
32
32
  * Manages a contained value type.
33
- *
34
- * @alpha
35
33
  */
36
34
  export declare class IntervalCollectionTypeLocalValue<T extends ISerializableInterval> implements ILocalIntervalCollection<T> {
37
35
  readonly value: IntervalCollection<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"IntervalCollectionValues.d.ts","sourceRoot":"","sources":["../src/IntervalCollectionValues.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAGtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EACN,4BAA4B,EAC5B,uBAAuB,EACvB,+BAA+B,EAC/B,6BAA6B,EAC7B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,KAAK,qBAAqB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAElF;;GAEG;AACH,MAAM,WAAW,wBAAwB,CAAC,CAAC,SAAS,qBAAqB;IACxE;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAEtC;;;;;OAKG;IACH,cAAc,CAAC,UAAU,EAAE,gBAAgB,EAAE,IAAI,EAAE,YAAY,GAAG,6BAA6B,CAAC;CAChG;AAED,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,qBAAqB,EAC/D,UAAU,EAAE,wBAAwB,CAAC,CAAC,CAAC,EACvC,UAAU,EAAE,gBAAgB,EAC5B,IAAI,EAAE,YAAY,GAChB,+BAA+B,CAMjC;AAED;;;;GAIG;AACH,qBAAa,gCAAgC,CAAC,CAAC,SAAS,qBAAqB,CAC5E,YAAW,wBAAwB,CAAC,CAAC,CAAC;aAQrB,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS;IAP3B;;;;OAIG;gBAEc,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC3B,SAAS,EAAE,uBAAuB,CAAC,CAAC,CAAC;IAGvD;;OAEG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;OAEG;IACI,cAAc,CACpB,UAAU,EAAE,gBAAgB,EAC5B,IAAI,EAAE,YAAY,GAChB,6BAA6B;IAUhC;;;;OAIG;IACI,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,4BAA4B,CAAC,CAAC,CAAC;CAQ5E"}
1
+ {"version":3,"file":"IntervalCollectionValues.d.ts","sourceRoot":"","sources":["../src/IntervalCollectionValues.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAGtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EACN,4BAA4B,EAC5B,uBAAuB,EACvB,+BAA+B,EAC/B,6BAA6B,EAC7B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,KAAK,qBAAqB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAElF;;GAEG;AACH,MAAM,WAAW,wBAAwB,CAAC,CAAC,SAAS,qBAAqB;IACxE;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAEtC;;;;;OAKG;IACH,cAAc,CAAC,UAAU,EAAE,gBAAgB,EAAE,IAAI,EAAE,YAAY,GAAG,6BAA6B,CAAC;CAChG;AAED,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,qBAAqB,EAC/D,UAAU,EAAE,wBAAwB,CAAC,CAAC,CAAC,EACvC,UAAU,EAAE,gBAAgB,EAC5B,IAAI,EAAE,YAAY,GAChB,+BAA+B,CAMjC;AAED;;GAEG;AACH,qBAAa,gCAAgC,CAAC,CAAC,SAAS,qBAAqB,CAC5E,YAAW,wBAAwB,CAAC,CAAC,CAAC;aAQrB,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS;IAP3B;;;;OAIG;gBAEc,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC3B,SAAS,EAAE,uBAAuB,CAAC,CAAC,CAAC;IAGvD;;OAEG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;OAEG;IACI,cAAc,CACpB,UAAU,EAAE,gBAAgB,EAC5B,IAAI,EAAE,YAAY,GAChB,6BAA6B;IAUhC;;;;OAIG;IACI,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,4BAA4B,CAAC,CAAC,CAAC;CAQ5E"}
@@ -16,8 +16,6 @@ function makeSerializable(localValue, serializer, bind) {
16
16
  exports.makeSerializable = makeSerializable;
17
17
  /**
18
18
  * Manages a contained value type.
19
- *
20
- * @alpha
21
19
  */
22
20
  class IntervalCollectionTypeLocalValue {
23
21
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"IntervalCollectionValues.js","sourceRoot":"","sources":["../src/IntervalCollectionValues.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAIH,0EAA+E;AAkC/E,SAAgB,gBAAgB,CAC/B,UAAuC,EACvC,UAA4B,EAC5B,IAAkB;IAElB,MAAM,KAAK,GAAG,UAAU,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC1D,OAAO;QACN,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;KAC7C,CAAC;AACH,CAAC;AAVD,4CAUC;AAED;;;;GAIG;AACH,MAAa,gCAAgC;IAG5C;;;;OAIG;IACH,YACiB,KAA4B,EAC3B,SAAqC;QADtC,UAAK,GAAL,KAAK,CAAuB;QAC3B,cAAS,GAAT,SAAS,CAA4B;IACpD,CAAC;IAEJ;;OAEG;IACH,IAAW,IAAI;QACd,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IAC5B,CAAC;IAED;;OAEG;IACI,cAAc,CACpB,UAA4B,EAC5B,IAAkB;QAElB,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,IAAA,2BAAgB,EAAC,eAAe,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAElE,OAAO;YACN,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK;SACL,CAAC;IACH,CAAC;IAED;;;;OAIG;IACI,YAAY,CAAC,MAAsB;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,EAAE;YACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;SACxC;QAED,OAAO,OAAO,CAAC;IAChB,CAAC;CACD;AAjDD,4EAiDC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { IFluidHandle } from \"@fluidframework/core-interfaces\";\nimport { IFluidSerializer } from \"@fluidframework/shared-object-base\";\nimport { serializeHandles } from \"@fluidframework/shared-object-base/internal\";\n\nimport type { IntervalCollection } from \"./intervalCollection.js\";\nimport {\n\tIIntervalCollectionOperation,\n\tIIntervalCollectionType,\n\tISerializableIntervalCollection,\n\tISerializedIntervalCollection,\n} from \"./intervalCollectionMapInterfaces.js\";\nimport { type ISerializableInterval, IntervalOpType } from \"./intervals/index.js\";\n\n/**\n * A local value to be stored in a container type DDS.\n */\nexport interface ILocalIntervalCollection<T extends ISerializableInterval> {\n\t/**\n\t * Type indicator of the value stored within.\n\t */\n\treadonly type: string;\n\n\t/**\n\t * The in-memory value stored within.\n\t */\n\treadonly value: IntervalCollection<T>;\n\n\t/**\n\t * Retrieve the serialized form of the value stored within.\n\t * @param serializer - Data store runtime's serializer\n\t * @param bind - Container type's handle\n\t * @returns The serialized form of the contained value\n\t */\n\tmakeSerialized(serializer: IFluidSerializer, bind: IFluidHandle): ISerializedIntervalCollection;\n}\n\nexport function makeSerializable<T extends ISerializableInterval>(\n\tlocalValue: ILocalIntervalCollection<T>,\n\tserializer: IFluidSerializer,\n\tbind: IFluidHandle,\n): ISerializableIntervalCollection {\n\tconst value = localValue.makeSerialized(serializer, bind);\n\treturn {\n\t\ttype: value.type,\n\t\tvalue: value.value && JSON.parse(value.value),\n\t};\n}\n\n/**\n * Manages a contained value type.\n *\n * @alpha\n */\nexport class IntervalCollectionTypeLocalValue<T extends ISerializableInterval>\n\timplements ILocalIntervalCollection<T>\n{\n\t/**\n\t * Create a new ValueTypeLocalValue.\n\t * @param value - The instance of the value type stored within\n\t * @param valueType - The type object of the value type stored within\n\t */\n\tconstructor(\n\t\tpublic readonly value: IntervalCollection<T>,\n\t\tprivate readonly valueType: IIntervalCollectionType<T>,\n\t) {}\n\n\t/**\n\t * {@inheritDoc ILocalValue.\"type\"}\n\t */\n\tpublic get type(): string {\n\t\treturn this.valueType.name;\n\t}\n\n\t/**\n\t * {@inheritDoc ILocalValue.makeSerialized}\n\t */\n\tpublic makeSerialized(\n\t\tserializer: IFluidSerializer,\n\t\tbind: IFluidHandle,\n\t): ISerializedIntervalCollection {\n\t\tconst storedValueType = this.valueType.factory.store(this.value);\n\t\tconst value = serializeHandles(storedValueType, serializer, bind);\n\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\tvalue,\n\t\t};\n\t}\n\n\t/**\n\t * Get the handler for a given op of this value type.\n\t * @param opName - The name of the operation that needs processing\n\t * @returns The object which can process the given op\n\t */\n\tpublic getOpHandler(opName: IntervalOpType): IIntervalCollectionOperation<T> {\n\t\tconst handler = this.valueType.ops.get(opName);\n\t\tif (!handler) {\n\t\t\tthrow new Error(\"Unknown type message\");\n\t\t}\n\n\t\treturn handler;\n\t}\n}\n"]}
1
+ {"version":3,"file":"IntervalCollectionValues.js","sourceRoot":"","sources":["../src/IntervalCollectionValues.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAIH,0EAA+E;AAkC/E,SAAgB,gBAAgB,CAC/B,UAAuC,EACvC,UAA4B,EAC5B,IAAkB;IAElB,MAAM,KAAK,GAAG,UAAU,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC1D,OAAO;QACN,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;KAC7C,CAAC;AACH,CAAC;AAVD,4CAUC;AAED;;GAEG;AACH,MAAa,gCAAgC;IAG5C;;;;OAIG;IACH,YACiB,KAA4B,EAC3B,SAAqC;QADtC,UAAK,GAAL,KAAK,CAAuB;QAC3B,cAAS,GAAT,SAAS,CAA4B;IACpD,CAAC;IAEJ;;OAEG;IACH,IAAW,IAAI;QACd,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IAC5B,CAAC;IAED;;OAEG;IACI,cAAc,CACpB,UAA4B,EAC5B,IAAkB;QAElB,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,IAAA,2BAAgB,EAAC,eAAe,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAElE,OAAO;YACN,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK;SACL,CAAC;IACH,CAAC;IAED;;;;OAIG;IACI,YAAY,CAAC,MAAsB;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,EAAE;YACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;SACxC;QAED,OAAO,OAAO,CAAC;IAChB,CAAC;CACD;AAjDD,4EAiDC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { IFluidHandle } from \"@fluidframework/core-interfaces\";\nimport { IFluidSerializer } from \"@fluidframework/shared-object-base\";\nimport { serializeHandles } from \"@fluidframework/shared-object-base/internal\";\n\nimport type { IntervalCollection } from \"./intervalCollection.js\";\nimport {\n\tIIntervalCollectionOperation,\n\tIIntervalCollectionType,\n\tISerializableIntervalCollection,\n\tISerializedIntervalCollection,\n} from \"./intervalCollectionMapInterfaces.js\";\nimport { type ISerializableInterval, IntervalOpType } from \"./intervals/index.js\";\n\n/**\n * A local value to be stored in a container type DDS.\n */\nexport interface ILocalIntervalCollection<T extends ISerializableInterval> {\n\t/**\n\t * Type indicator of the value stored within.\n\t */\n\treadonly type: string;\n\n\t/**\n\t * The in-memory value stored within.\n\t */\n\treadonly value: IntervalCollection<T>;\n\n\t/**\n\t * Retrieve the serialized form of the value stored within.\n\t * @param serializer - Data store runtime's serializer\n\t * @param bind - Container type's handle\n\t * @returns The serialized form of the contained value\n\t */\n\tmakeSerialized(serializer: IFluidSerializer, bind: IFluidHandle): ISerializedIntervalCollection;\n}\n\nexport function makeSerializable<T extends ISerializableInterval>(\n\tlocalValue: ILocalIntervalCollection<T>,\n\tserializer: IFluidSerializer,\n\tbind: IFluidHandle,\n): ISerializableIntervalCollection {\n\tconst value = localValue.makeSerialized(serializer, bind);\n\treturn {\n\t\ttype: value.type,\n\t\tvalue: value.value && JSON.parse(value.value),\n\t};\n}\n\n/**\n * Manages a contained value type.\n */\nexport class IntervalCollectionTypeLocalValue<T extends ISerializableInterval>\n\timplements ILocalIntervalCollection<T>\n{\n\t/**\n\t * Create a new ValueTypeLocalValue.\n\t * @param value - The instance of the value type stored within\n\t * @param valueType - The type object of the value type stored within\n\t */\n\tconstructor(\n\t\tpublic readonly value: IntervalCollection<T>,\n\t\tprivate readonly valueType: IIntervalCollectionType<T>,\n\t) {}\n\n\t/**\n\t * {@inheritDoc ILocalValue.\"type\"}\n\t */\n\tpublic get type(): string {\n\t\treturn this.valueType.name;\n\t}\n\n\t/**\n\t * {@inheritDoc ILocalValue.makeSerialized}\n\t */\n\tpublic makeSerialized(\n\t\tserializer: IFluidSerializer,\n\t\tbind: IFluidHandle,\n\t): ISerializedIntervalCollection {\n\t\tconst storedValueType = this.valueType.factory.store(this.value);\n\t\tconst value = serializeHandles(storedValueType, serializer, bind);\n\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\tvalue,\n\t\t};\n\t}\n\n\t/**\n\t * Get the handler for a given op of this value type.\n\t * @param opName - The name of the operation that needs processing\n\t * @returns The object which can process the given op\n\t */\n\tpublic getOpHandler(opName: IntervalOpType): IIntervalCollectionOperation<T> {\n\t\tconst handler = this.valueType.ops.get(opName);\n\t\tif (!handler) {\n\t\t\tthrow new Error(\"Unknown type message\");\n\t\t}\n\n\t\treturn handler;\n\t}\n}\n"]}
package/dist/beta.d.ts CHANGED
@@ -7,3 +7,6 @@
7
7
  * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
8
8
  * Generated by "flub generate entrypoints" in @fluidframework/build-tools.
9
9
  */
10
+
11
+ export {}
12
+
package/dist/index.d.ts CHANGED
@@ -21,8 +21,8 @@ export { IntervalIndex, SequenceIntervalIndexes, IOverlappingIntervalsIndex, cre
21
21
  export { appendAddIntervalToRevertibles, appendChangeIntervalToRevertibles, appendDeleteIntervalToRevertibles, appendIntervalPropertyChangedToRevertibles, appendSharedStringDeltaToRevertibles, discardSharedStringRevertibles, IntervalRevertible, revertSharedStringRevertibles, SharedStringRevertible, } from "./revertibles.js";
22
22
  export { ISharedSegmentSequenceEvents, SharedSegmentSequence } from "./sequence.js";
23
23
  export { ISequenceDeltaRange, SequenceDeltaEvent, SequenceEvent, SequenceMaintenanceEvent, } from "./sequenceDeltaEvent.js";
24
- export { SharedStringFactory } from "./sequenceFactory.js";
25
- export { getTextAndMarkers, ISharedString, SharedString, SharedStringSegment, } from "./sharedString.js";
24
+ export { SharedString } from "./sequenceFactory.js";
25
+ export { getTextAndMarkers, ISharedString, SharedStringSegment, SharedStringClass, } from "./sharedString.js";
26
26
  export { ISharedIntervalCollection, SharedIntervalCollection, SharedIntervalCollectionFactory, } from "./sharedIntervalCollection.js";
27
27
  export { IJSONRunSegment, SharedSequence, SubSequence } from "./sharedSequence.js";
28
28
  export { ISegment, Marker, BaseSegment, ReferencePosition, ReferenceType, PropertySet, MapLike, TextSegment, MergeTreeDeltaType, reservedMarkerIdKey, reservedTileLabelsKey, reservedRangeLabelsKey, TrackingGroup, LocalReferencePosition, } from "@fluidframework/merge-tree/internal";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;GAWG;AACH,OAAO,EACN,wBAAwB,EACxB,eAAe,EACf,eAAe,GACf,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACN,SAAS,EACT,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,uBAAuB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,eAAe,EACf,2BAA2B,EAC3B,IAAI,EACJ,qBAAqB,EACrB,aAAa,GACb,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,aAAa,EACb,uBAAuB,EACvB,0BAA0B,EAC1B,+BAA+B,EAC/B,uCAAuC,EACvC,qBAAqB,EACrB,uBAAuB,EACvB,0BAA0B,EAC1B,4BAA4B,EAC5B,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,mBAAmB,GACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACN,8BAA8B,EAC9B,iCAAiC,EACjC,iCAAiC,EACjC,0CAA0C,EAC1C,oCAAoC,EACpC,8BAA8B,EAC9B,kBAAkB,EAClB,6BAA6B,EAC7B,sBAAsB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EACN,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,wBAAwB,GACxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EACN,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,mBAAmB,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,yBAAyB,EACzB,wBAAwB,EACxB,+BAA+B,GAC/B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEnF,OAAO,EACN,QAAQ,EACR,MAAM,EACN,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,OAAO,EACP,WAAW,EACX,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,aAAa,EACb,sBAAsB,GACtB,MAAM,qCAAqC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;GAWG;AACH,OAAO,EACN,wBAAwB,EACxB,eAAe,EACf,eAAe,GACf,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACN,SAAS,EACT,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,uBAAuB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,eAAe,EACf,2BAA2B,EAC3B,IAAI,EACJ,qBAAqB,EACrB,aAAa,GACb,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,aAAa,EACb,uBAAuB,EACvB,0BAA0B,EAC1B,+BAA+B,EAC/B,uCAAuC,EACvC,qBAAqB,EACrB,uBAAuB,EACvB,0BAA0B,EAC1B,4BAA4B,EAC5B,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,mBAAmB,GACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACN,8BAA8B,EAC9B,iCAAiC,EACjC,iCAAiC,EACjC,0CAA0C,EAC1C,oCAAoC,EACpC,8BAA8B,EAC9B,kBAAkB,EAClB,6BAA6B,EAC7B,sBAAsB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EACN,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,wBAAwB,GACxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EACN,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,iBAAiB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,yBAAyB,EACzB,wBAAwB,EACxB,+BAA+B,GAC/B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEnF,OAAO,EACN,QAAQ,EACR,MAAM,EACN,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,OAAO,EACP,WAAW,EACX,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,aAAa,EACb,sBAAsB,GACtB,MAAM,qCAAqC,CAAC"}
package/dist/index.js CHANGED
@@ -4,7 +4,7 @@
4
4
  * Licensed under the MIT License.
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.TrackingGroup = exports.reservedRangeLabelsKey = exports.reservedTileLabelsKey = exports.reservedMarkerIdKey = exports.MergeTreeDeltaType = exports.TextSegment = exports.ReferenceType = exports.BaseSegment = exports.Marker = exports.SubSequence = exports.SharedSequence = exports.SharedIntervalCollectionFactory = exports.SharedIntervalCollection = exports.SharedString = exports.getTextAndMarkers = exports.SharedStringFactory = exports.SequenceMaintenanceEvent = exports.SequenceEvent = exports.SequenceDeltaEvent = exports.SharedSegmentSequence = exports.revertSharedStringRevertibles = exports.discardSharedStringRevertibles = exports.appendSharedStringDeltaToRevertibles = exports.appendIntervalPropertyChangedToRevertibles = exports.appendDeleteIntervalToRevertibles = exports.appendChangeIntervalToRevertibles = exports.appendAddIntervalToRevertibles = exports.createEndpointIndex = exports.createIdIntervalIndex = exports.createStartpointInRangeIndex = exports.createEndpointInRangeIndex = exports.createOverlappingSequenceIntervalsIndex = exports.createOverlappingIntervalsIndex = exports.Side = exports.intervalLocatorFromEndpoint = exports.sequenceIntervalHelpers = exports.IntervalStickiness = exports.SequenceInterval = exports.IntervalType = exports.IntervalOpType = exports.Interval = void 0;
7
+ exports.TrackingGroup = exports.reservedRangeLabelsKey = exports.reservedTileLabelsKey = exports.reservedMarkerIdKey = exports.MergeTreeDeltaType = exports.TextSegment = exports.ReferenceType = exports.BaseSegment = exports.Marker = exports.SubSequence = exports.SharedSequence = exports.SharedIntervalCollectionFactory = exports.SharedIntervalCollection = exports.SharedStringClass = exports.getTextAndMarkers = exports.SharedString = exports.SequenceMaintenanceEvent = exports.SequenceEvent = exports.SequenceDeltaEvent = exports.SharedSegmentSequence = exports.revertSharedStringRevertibles = exports.discardSharedStringRevertibles = exports.appendSharedStringDeltaToRevertibles = exports.appendIntervalPropertyChangedToRevertibles = exports.appendDeleteIntervalToRevertibles = exports.appendChangeIntervalToRevertibles = exports.appendAddIntervalToRevertibles = exports.createEndpointIndex = exports.createIdIntervalIndex = exports.createStartpointInRangeIndex = exports.createEndpointInRangeIndex = exports.createOverlappingSequenceIntervalsIndex = exports.createOverlappingIntervalsIndex = exports.Side = exports.intervalLocatorFromEndpoint = exports.sequenceIntervalHelpers = exports.IntervalStickiness = exports.SequenceInterval = exports.IntervalType = exports.IntervalOpType = exports.Interval = void 0;
8
8
  var index_js_1 = require("./intervals/index.js");
9
9
  Object.defineProperty(exports, "Interval", { enumerable: true, get: function () { return index_js_1.Interval; } });
10
10
  Object.defineProperty(exports, "IntervalOpType", { enumerable: true, get: function () { return index_js_1.IntervalOpType; } });
@@ -37,10 +37,10 @@ Object.defineProperty(exports, "SequenceDeltaEvent", { enumerable: true, get: fu
37
37
  Object.defineProperty(exports, "SequenceEvent", { enumerable: true, get: function () { return sequenceDeltaEvent_js_1.SequenceEvent; } });
38
38
  Object.defineProperty(exports, "SequenceMaintenanceEvent", { enumerable: true, get: function () { return sequenceDeltaEvent_js_1.SequenceMaintenanceEvent; } });
39
39
  var sequenceFactory_js_1 = require("./sequenceFactory.js");
40
- Object.defineProperty(exports, "SharedStringFactory", { enumerable: true, get: function () { return sequenceFactory_js_1.SharedStringFactory; } });
40
+ Object.defineProperty(exports, "SharedString", { enumerable: true, get: function () { return sequenceFactory_js_1.SharedString; } });
41
41
  var sharedString_js_1 = require("./sharedString.js");
42
42
  Object.defineProperty(exports, "getTextAndMarkers", { enumerable: true, get: function () { return sharedString_js_1.getTextAndMarkers; } });
43
- Object.defineProperty(exports, "SharedString", { enumerable: true, get: function () { return sharedString_js_1.SharedString; } });
43
+ Object.defineProperty(exports, "SharedStringClass", { enumerable: true, get: function () { return sharedString_js_1.SharedStringClass; } });
44
44
  var sharedIntervalCollection_js_1 = require("./sharedIntervalCollection.js");
45
45
  Object.defineProperty(exports, "SharedIntervalCollection", { enumerable: true, get: function () { return sharedIntervalCollection_js_1.SharedIntervalCollection; } });
46
46
  Object.defineProperty(exports, "SharedIntervalCollectionFactory", { enumerable: true, get: function () { return sharedIntervalCollection_js_1.SharedIntervalCollectionFactory; } });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAmBH,iDAY8B;AAV7B,oGAAA,QAAQ,OAAA;AACR,0GAAA,cAAc,OAAA;AACd,wGAAA,YAAY,OAAA;AAGZ,4GAAA,gBAAgB,OAAA;AAEhB,8GAAA,kBAAkB,OAAA;AAElB,mHAAA,uBAAuB,OAAA;AAExB,iEASiC;AAJhC,oIAAA,2BAA2B,OAAA;AAC3B,6GAAA,IAAI,OAAA;AAIL,qDAckC;AAVjC,2HAAA,+BAA+B,OAAA;AAC/B,mIAAA,uCAAuC,OAAA;AAGvC,sHAAA,0BAA0B,OAAA;AAC1B,wHAAA,4BAA4B,OAAA;AAE5B,iHAAA,qBAAqB,OAAA;AAErB,+GAAA,mBAAmB,OAAA;AAEpB,mDAU0B;AATzB,gIAAA,8BAA8B,OAAA;AAC9B,mIAAA,iCAAiC,OAAA;AACjC,mIAAA,iCAAiC,OAAA;AACjC,4IAAA,0CAA0C,OAAA;AAC1C,sIAAA,oCAAoC,OAAA;AACpC,gIAAA,8BAA8B,OAAA;AAE9B,+HAAA,6BAA6B,OAAA;AAG9B,6CAAoF;AAA7C,oHAAA,qBAAqB,OAAA;AAC5D,iEAKiC;AAHhC,2HAAA,kBAAkB,OAAA;AAClB,sHAAA,aAAa,OAAA;AACb,iIAAA,wBAAwB,OAAA;AAEzB,2DAA2D;AAAlD,yHAAA,mBAAmB,OAAA;AAC5B,qDAK2B;AAJ1B,oHAAA,iBAAiB,OAAA;AAEjB,+GAAA,YAAY,OAAA;AAGb,6EAIuC;AAFtC,uIAAA,wBAAwB,OAAA;AACxB,8IAAA,+BAA+B,OAAA;AAEhC,yDAAmF;AAAzD,mHAAA,cAAc,OAAA;AAAE,gHAAA,WAAW,OAAA;AAErD,gEAe6C;AAb5C,kGAAA,MAAM,OAAA;AACN,uGAAA,WAAW,OAAA;AAEX,yGAAA,aAAa,OAAA;AAGb,uGAAA,WAAW,OAAA;AACX,8GAAA,kBAAkB,OAAA;AAClB,+GAAA,mBAAmB,OAAA;AACnB,iHAAA,qBAAqB,OAAA;AACrB,kHAAA,sBAAsB,OAAA;AACtB,yGAAA,aAAa,OAAA","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * Supports distributed data structures which are list-like.\n *\n * This library's main export is {@link SharedString}, a DDS for storing and simultaneously editing a sequence of\n * text.\n *\n * See the package's README for a high-level introduction to `SharedString`'s feature set.\n * @remarks Note that SharedString is a sequence DDS but it has additional specialized features and behaviors for\n * working with text.\n *\n * @packageDocumentation\n */\nexport {\n\tIMapMessageLocalMetadata,\n\tIValueOpEmitter,\n\tSequenceOptions,\n} from \"./intervalCollectionMapInterfaces.js\";\nexport {\n\tIInterval,\n\tInterval,\n\tIntervalOpType,\n\tIntervalType,\n\tISerializableInterval,\n\tISerializedInterval,\n\tSequenceInterval,\n\tSerializedIntervalDelta,\n\tIntervalStickiness,\n\tIIntervalHelpers,\n\tsequenceIntervalHelpers,\n} from \"./intervals/index.js\";\nexport {\n\tDeserializeCallback,\n\tIIntervalCollectionEvent,\n\tIIntervalCollection,\n\tIntervalLocator,\n\tintervalLocatorFromEndpoint,\n\tSide,\n\tInteriorSequencePlace,\n\tSequencePlace,\n} from \"./intervalCollection.js\";\nexport {\n\tIntervalIndex,\n\tSequenceIntervalIndexes,\n\tIOverlappingIntervalsIndex,\n\tcreateOverlappingIntervalsIndex,\n\tcreateOverlappingSequenceIntervalsIndex,\n\tIEndpointInRangeIndex,\n\tIStartpointInRangeIndex,\n\tcreateEndpointInRangeIndex,\n\tcreateStartpointInRangeIndex,\n\tIIdIntervalIndex,\n\tcreateIdIntervalIndex,\n\tIEndpointIndex,\n\tcreateEndpointIndex,\n} from \"./intervalIndex/index.js\";\nexport {\n\tappendAddIntervalToRevertibles,\n\tappendChangeIntervalToRevertibles,\n\tappendDeleteIntervalToRevertibles,\n\tappendIntervalPropertyChangedToRevertibles,\n\tappendSharedStringDeltaToRevertibles,\n\tdiscardSharedStringRevertibles,\n\tIntervalRevertible,\n\trevertSharedStringRevertibles,\n\tSharedStringRevertible,\n} from \"./revertibles.js\";\nexport { ISharedSegmentSequenceEvents, SharedSegmentSequence } from \"./sequence.js\";\nexport {\n\tISequenceDeltaRange,\n\tSequenceDeltaEvent,\n\tSequenceEvent,\n\tSequenceMaintenanceEvent,\n} from \"./sequenceDeltaEvent.js\";\nexport { SharedStringFactory } from \"./sequenceFactory.js\";\nexport {\n\tgetTextAndMarkers,\n\tISharedString,\n\tSharedString,\n\tSharedStringSegment,\n} from \"./sharedString.js\";\nexport {\n\tISharedIntervalCollection,\n\tSharedIntervalCollection,\n\tSharedIntervalCollectionFactory,\n} from \"./sharedIntervalCollection.js\";\nexport { IJSONRunSegment, SharedSequence, SubSequence } from \"./sharedSequence.js\";\n\nexport {\n\tISegment,\n\tMarker,\n\tBaseSegment,\n\tReferencePosition,\n\tReferenceType,\n\tPropertySet,\n\tMapLike,\n\tTextSegment,\n\tMergeTreeDeltaType,\n\treservedMarkerIdKey,\n\treservedTileLabelsKey,\n\treservedRangeLabelsKey,\n\tTrackingGroup,\n\tLocalReferencePosition,\n} from \"@fluidframework/merge-tree/internal\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAmBH,iDAY8B;AAV7B,oGAAA,QAAQ,OAAA;AACR,0GAAA,cAAc,OAAA;AACd,wGAAA,YAAY,OAAA;AAGZ,4GAAA,gBAAgB,OAAA;AAEhB,8GAAA,kBAAkB,OAAA;AAElB,mHAAA,uBAAuB,OAAA;AAExB,iEASiC;AAJhC,oIAAA,2BAA2B,OAAA;AAC3B,6GAAA,IAAI,OAAA;AAIL,qDAckC;AAVjC,2HAAA,+BAA+B,OAAA;AAC/B,mIAAA,uCAAuC,OAAA;AAGvC,sHAAA,0BAA0B,OAAA;AAC1B,wHAAA,4BAA4B,OAAA;AAE5B,iHAAA,qBAAqB,OAAA;AAErB,+GAAA,mBAAmB,OAAA;AAEpB,mDAU0B;AATzB,gIAAA,8BAA8B,OAAA;AAC9B,mIAAA,iCAAiC,OAAA;AACjC,mIAAA,iCAAiC,OAAA;AACjC,4IAAA,0CAA0C,OAAA;AAC1C,sIAAA,oCAAoC,OAAA;AACpC,gIAAA,8BAA8B,OAAA;AAE9B,+HAAA,6BAA6B,OAAA;AAG9B,6CAAoF;AAA7C,oHAAA,qBAAqB,OAAA;AAC5D,iEAKiC;AAHhC,2HAAA,kBAAkB,OAAA;AAClB,sHAAA,aAAa,OAAA;AACb,iIAAA,wBAAwB,OAAA;AAEzB,2DAAoD;AAA3C,kHAAA,YAAY,OAAA;AACrB,qDAK2B;AAJ1B,oHAAA,iBAAiB,OAAA;AAGjB,oHAAA,iBAAiB,OAAA;AAElB,6EAIuC;AAFtC,uIAAA,wBAAwB,OAAA;AACxB,8IAAA,+BAA+B,OAAA;AAEhC,yDAAmF;AAAzD,mHAAA,cAAc,OAAA;AAAE,gHAAA,WAAW,OAAA;AAErD,gEAe6C;AAb5C,kGAAA,MAAM,OAAA;AACN,uGAAA,WAAW,OAAA;AAEX,yGAAA,aAAa,OAAA;AAGb,uGAAA,WAAW,OAAA;AACX,8GAAA,kBAAkB,OAAA;AAClB,+GAAA,mBAAmB,OAAA;AACnB,iHAAA,qBAAqB,OAAA;AACrB,kHAAA,sBAAsB,OAAA;AACtB,yGAAA,aAAa,OAAA","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * Supports distributed data structures which are list-like.\n *\n * This library's main export is {@link SharedString}, a DDS for storing and simultaneously editing a sequence of\n * text.\n *\n * See the package's README for a high-level introduction to `SharedString`'s feature set.\n * @remarks Note that SharedString is a sequence DDS but it has additional specialized features and behaviors for\n * working with text.\n *\n * @packageDocumentation\n */\nexport {\n\tIMapMessageLocalMetadata,\n\tIValueOpEmitter,\n\tSequenceOptions,\n} from \"./intervalCollectionMapInterfaces.js\";\nexport {\n\tIInterval,\n\tInterval,\n\tIntervalOpType,\n\tIntervalType,\n\tISerializableInterval,\n\tISerializedInterval,\n\tSequenceInterval,\n\tSerializedIntervalDelta,\n\tIntervalStickiness,\n\tIIntervalHelpers,\n\tsequenceIntervalHelpers,\n} from \"./intervals/index.js\";\nexport {\n\tDeserializeCallback,\n\tIIntervalCollectionEvent,\n\tIIntervalCollection,\n\tIntervalLocator,\n\tintervalLocatorFromEndpoint,\n\tSide,\n\tInteriorSequencePlace,\n\tSequencePlace,\n} from \"./intervalCollection.js\";\nexport {\n\tIntervalIndex,\n\tSequenceIntervalIndexes,\n\tIOverlappingIntervalsIndex,\n\tcreateOverlappingIntervalsIndex,\n\tcreateOverlappingSequenceIntervalsIndex,\n\tIEndpointInRangeIndex,\n\tIStartpointInRangeIndex,\n\tcreateEndpointInRangeIndex,\n\tcreateStartpointInRangeIndex,\n\tIIdIntervalIndex,\n\tcreateIdIntervalIndex,\n\tIEndpointIndex,\n\tcreateEndpointIndex,\n} from \"./intervalIndex/index.js\";\nexport {\n\tappendAddIntervalToRevertibles,\n\tappendChangeIntervalToRevertibles,\n\tappendDeleteIntervalToRevertibles,\n\tappendIntervalPropertyChangedToRevertibles,\n\tappendSharedStringDeltaToRevertibles,\n\tdiscardSharedStringRevertibles,\n\tIntervalRevertible,\n\trevertSharedStringRevertibles,\n\tSharedStringRevertible,\n} from \"./revertibles.js\";\nexport { ISharedSegmentSequenceEvents, SharedSegmentSequence } from \"./sequence.js\";\nexport {\n\tISequenceDeltaRange,\n\tSequenceDeltaEvent,\n\tSequenceEvent,\n\tSequenceMaintenanceEvent,\n} from \"./sequenceDeltaEvent.js\";\nexport { SharedString } from \"./sequenceFactory.js\";\nexport {\n\tgetTextAndMarkers,\n\tISharedString,\n\tSharedStringSegment,\n\tSharedStringClass,\n} from \"./sharedString.js\";\nexport {\n\tISharedIntervalCollection,\n\tSharedIntervalCollection,\n\tSharedIntervalCollectionFactory,\n} from \"./sharedIntervalCollection.js\";\nexport { IJSONRunSegment, SharedSequence, SubSequence } from \"./sharedSequence.js\";\n\nexport {\n\tISegment,\n\tMarker,\n\tBaseSegment,\n\tReferencePosition,\n\tReferenceType,\n\tPropertySet,\n\tMapLike,\n\tTextSegment,\n\tMergeTreeDeltaType,\n\treservedMarkerIdKey,\n\treservedTileLabelsKey,\n\treservedRangeLabelsKey,\n\tTrackingGroup,\n\tLocalReferencePosition,\n} from \"@fluidframework/merge-tree/internal\";\n"]}
@@ -593,7 +593,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
593
593
  start: startPos,
594
594
  end: endPos,
595
595
  intervalType: index_js_2.IntervalType.SlideOnRemove,
596
- properties: interval.properties,
596
+ properties: { ...interval.properties },
597
597
  sequenceNumber: this.client?.getCurrentSeq() ?? 0,
598
598
  stickiness,
599
599
  startSide,