@fluidframework/sequence 2.0.0-internal.7.2.2 → 2.0.0-internal.7.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/api-extractor.json +4 -1
  3. package/dist/intervalCollection.d.ts +2 -2
  4. package/dist/intervals/intervalUtils.d.ts.map +1 -1
  5. package/dist/intervals/intervalUtils.js +1 -0
  6. package/dist/intervals/intervalUtils.js.map +1 -1
  7. package/dist/packageVersion.d.ts +1 -1
  8. package/dist/packageVersion.js +1 -1
  9. package/dist/packageVersion.js.map +1 -1
  10. package/dist/revertibles.d.ts.map +1 -1
  11. package/dist/revertibles.js +34 -12
  12. package/dist/revertibles.js.map +1 -1
  13. package/dist/sequence-alpha.d.ts +1587 -0
  14. package/dist/sequence-beta.d.ts +1507 -0
  15. package/dist/sequence-public.d.ts +1507 -0
  16. package/dist/sequence-untrimmed.d.ts +1759 -0
  17. package/dist/sequence.d.ts.map +1 -1
  18. package/dist/sequence.js +3 -4
  19. package/dist/sequence.js.map +1 -1
  20. package/dist/sequenceDeltaEvent.d.ts.map +1 -1
  21. package/dist/sequenceDeltaEvent.js +1 -0
  22. package/dist/sequenceDeltaEvent.js.map +1 -1
  23. package/dist/tsdoc-metadata.json +1 -1
  24. package/lib/intervalCollection.d.ts +2 -2
  25. package/lib/intervals/intervalUtils.d.ts.map +1 -1
  26. package/lib/intervals/intervalUtils.js +1 -0
  27. package/lib/intervals/intervalUtils.js.map +1 -1
  28. package/lib/packageVersion.d.ts +1 -1
  29. package/lib/packageVersion.js +1 -1
  30. package/lib/packageVersion.js.map +1 -1
  31. package/lib/revertibles.d.ts.map +1 -1
  32. package/lib/revertibles.js +34 -12
  33. package/lib/revertibles.js.map +1 -1
  34. package/lib/sequence-alpha.d.ts +1587 -0
  35. package/lib/sequence-beta.d.ts +1507 -0
  36. package/lib/sequence-public.d.ts +1507 -0
  37. package/lib/sequence-untrimmed.d.ts +1759 -0
  38. package/lib/sequence.d.ts.map +1 -1
  39. package/lib/sequence.js +2 -7
  40. package/lib/sequence.js.map +1 -1
  41. package/lib/sequenceDeltaEvent.d.ts.map +1 -1
  42. package/lib/sequenceDeltaEvent.js +1 -0
  43. package/lib/sequenceDeltaEvent.js.map +1 -1
  44. package/package.json +35 -23
  45. package/src/intervals/intervalUtils.ts +1 -0
  46. package/src/packageVersion.ts +1 -1
  47. package/src/revertibles.ts +86 -9
  48. package/src/sequence.ts +3 -4
  49. package/src/sequenceDeltaEvent.ts +2 -0
  50. package/tsconfig.esnext.json +1 -2
  51. package/tsconfig.json +5 -3
@@ -2,6 +2,8 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
+
6
+ /* eslint-disable import/no-deprecated */
5
7
  /* eslint-disable no-bitwise */
6
8
 
7
9
  import { assert, unreachableCase } from "@fluidframework/core-utils";
@@ -19,7 +21,9 @@ import {
19
21
  revertMergeTreeDeltaRevertibles,
20
22
  SortedSet,
21
23
  getSlideToSegoff,
24
+ SlidingPreference,
22
25
  } from "@fluidframework/merge-tree";
26
+ import { InteriorSequencePlace, Side } from "./intervalCollection";
23
27
  import { IntervalOpType, SequenceInterval } from "./intervals";
24
28
  import { SharedString, SharedStringSegment } from "./sharedString";
25
29
  import { ISequenceDeltaRange, SequenceDeltaEvent } from "./sequenceDeltaEvent";
@@ -387,13 +391,22 @@ function getSlidePosition(string: SharedString, lref: LocalReferencePosition, po
387
391
  : pos;
388
392
  }
389
393
 
390
- function isValidRange(start: number, end: number, string: SharedString) {
394
+ function isValidRange(
395
+ start: number,
396
+ startSlide: SlidingPreference | undefined,
397
+ end: number,
398
+ endSlide: SlidingPreference | undefined,
399
+ string: SharedString,
400
+ ) {
391
401
  return (
392
402
  start >= 0 &&
393
403
  start < string.getLength() &&
394
404
  end >= 0 &&
395
405
  end < string.getLength() &&
396
- start <= end
406
+ (start < end ||
407
+ (start === end &&
408
+ (startSlide === SlidingPreference.FORWARD ||
409
+ endSlide !== SlidingPreference.FORWARD)))
397
410
  );
398
411
  }
399
412
 
@@ -406,6 +419,26 @@ function revertLocalAdd(
406
419
  string.getIntervalCollection(label).removeIntervalById(id);
407
420
  }
408
421
 
422
+ function createSequencePlace(
423
+ pos: number,
424
+ newSlidingPreference: SlidingPreference | undefined,
425
+ oldSlidingPreference: SlidingPreference | undefined = undefined,
426
+ ): number | InteriorSequencePlace {
427
+ return newSlidingPreference === SlidingPreference.BACKWARD ||
428
+ (newSlidingPreference === undefined && oldSlidingPreference === SlidingPreference.BACKWARD)
429
+ ? {
430
+ pos,
431
+ side: Side.After,
432
+ }
433
+ : newSlidingPreference === SlidingPreference.FORWARD &&
434
+ oldSlidingPreference === SlidingPreference.BACKWARD
435
+ ? {
436
+ pos,
437
+ side: Side.Before,
438
+ }
439
+ : pos; // Avoid setting side if possible since stickiness may not be enabled
440
+ }
441
+
409
442
  function revertLocalDelete(
410
443
  string: SharedString,
411
444
  revertible: TypedRevertible<typeof IntervalOpType.DELETE>,
@@ -418,10 +451,18 @@ function revertLocalDelete(
418
451
  const endSlidePos = getSlidePosition(string, revertible.end, end);
419
452
  // reusing the id causes eventual consistency bugs, so it is removed here and recreated in add
420
453
  const { intervalId, ...props } = revertible.interval.properties;
421
- if (isValidRange(startSlidePos, endSlidePos, string)) {
454
+ if (
455
+ isValidRange(
456
+ startSlidePos,
457
+ revertible.start.slidingPreference,
458
+ endSlidePos,
459
+ revertible.end.slidingPreference,
460
+ string,
461
+ )
462
+ ) {
422
463
  const int = collection.add({
423
- start: startSlidePos,
424
- end: endSlidePos,
464
+ start: createSequencePlace(startSlidePos, revertible.start.slidingPreference),
465
+ end: createSequencePlace(endSlidePos, revertible.end.slidingPreference),
425
466
  props,
426
467
  });
427
468
 
@@ -448,8 +489,30 @@ function revertLocalChange(
448
489
  const startSlidePos = getSlidePosition(string, revertible.start, start);
449
490
  const end = string.localReferencePositionToPosition(revertible.end);
450
491
  const endSlidePos = getSlidePosition(string, revertible.end, end);
451
- if (isValidRange(startSlidePos, endSlidePos, string)) {
452
- collection.change(id, startSlidePos, endSlidePos);
492
+ const interval = collection.getIntervalById(id);
493
+ if (
494
+ interval !== undefined &&
495
+ isValidRange(
496
+ startSlidePos,
497
+ revertible.start.slidingPreference ?? interval.start.slidingPreference,
498
+ endSlidePos,
499
+ revertible.end.slidingPreference ?? interval.end.slidingPreference,
500
+ string,
501
+ )
502
+ ) {
503
+ collection.change(
504
+ id,
505
+ createSequencePlace(
506
+ startSlidePos,
507
+ revertible.start.slidingPreference,
508
+ interval.start.slidingPreference,
509
+ ),
510
+ createSequencePlace(
511
+ endSlidePos,
512
+ revertible.end.slidingPreference,
513
+ interval.end.slidingPreference,
514
+ ),
515
+ );
453
516
  }
454
517
 
455
518
  string.removeLocalReferencePosition(revertible.start);
@@ -537,8 +600,20 @@ function revertLocalSequenceRemove(
537
600
  const end =
538
601
  newEndpointPosition(intervalInfo.endOffset, restoredRanges, sharedString) ??
539
602
  sharedString.localReferencePositionToPosition(interval.end);
540
- if (start <= end) {
541
- intervalCollection.change(intervalId, start, end);
603
+ if (
604
+ isValidRange(
605
+ start,
606
+ interval.start.slidingPreference,
607
+ end,
608
+ interval.end.slidingPreference,
609
+ sharedString,
610
+ )
611
+ ) {
612
+ intervalCollection.change(
613
+ intervalId,
614
+ createSequencePlace(start, interval.start.slidingPreference),
615
+ createSequencePlace(end, interval.end.slidingPreference),
616
+ );
542
617
  }
543
618
  }
544
619
  });
@@ -559,6 +634,7 @@ function revertLocalSequenceRemove(
559
634
  pos.offset,
560
635
  ReferenceType.StayOnRemove | ReferenceType.RangeBegin,
561
636
  { revertible: revertibleRef.revertible },
637
+ revertibleRef.revertible.start.slidingPreference,
562
638
  );
563
639
  revertibleRef.revertible.start = newRef;
564
640
  } else {
@@ -568,6 +644,7 @@ function revertLocalSequenceRemove(
568
644
  pos.offset,
569
645
  ReferenceType.StayOnRemove | ReferenceType.RangeEnd,
570
646
  { revertible: revertibleRef.revertible },
647
+ revertibleRef.revertible.end.slidingPreference,
571
648
  );
572
649
  revertibleRef.revertible.end = newRef;
573
650
  }
package/src/sequence.ts CHANGED
@@ -2,6 +2,9 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
+
6
+ /* eslint-disable import/no-deprecated */
7
+
5
8
  import { assert, Deferred } from "@fluidframework/core-utils";
6
9
  import { bufferToString } from "@fluid-internal/client-utils";
7
10
  import { LoggingError, createChildLogger } from "@fluidframework/telemetry-utils";
@@ -14,7 +17,6 @@ import {
14
17
  import {
15
18
  Client,
16
19
  createAnnotateRangeOp,
17
- // eslint-disable-next-line import/no-deprecated
18
20
  createGroupOp,
19
21
  createInsertOp,
20
22
  createRemoveRangeOp,
@@ -29,7 +31,6 @@ import {
29
31
  ISegment,
30
32
  ISegmentAction,
31
33
  LocalReferencePosition,
32
- // eslint-disable-next-line import/no-deprecated
33
34
  matchProperties,
34
35
  MergeTreeDeltaType,
35
36
  PropertySet,
@@ -153,7 +154,6 @@ export abstract class SharedSegmentSequence<T extends ISegment>
153
154
  if (
154
155
  lastAnnotate &&
155
156
  lastAnnotate.pos2 === r.position &&
156
- // eslint-disable-next-line import/no-deprecated
157
157
  matchProperties(lastAnnotate.props, props)
158
158
  ) {
159
159
  lastAnnotate.pos2 += r.segment.cachedLength;
@@ -764,7 +764,6 @@ export abstract class SharedSegmentSequence<T extends ISegment>
764
764
  stashMessage = {
765
765
  ...message,
766
766
  referenceSequenceNumber: stashMessage.sequenceNumber - 1,
767
- // eslint-disable-next-line import/no-deprecated
768
767
  contents: ops.length !== 1 ? createGroupOp(...ops) : ops[0],
769
768
  };
770
769
  }
@@ -3,6 +3,8 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
+ /* eslint-disable import/no-deprecated */
7
+
6
8
  import { assert } from "@fluidframework/core-utils";
7
9
  import {
8
10
  Client,
@@ -1,7 +1,6 @@
1
1
  {
2
- "extends": "./tsconfig.json",
2
+ "extends": ["./tsconfig.json", "../../../common/build/build-common/tsconfig.esm.json"],
3
3
  "compilerOptions": {
4
4
  "outDir": "./lib",
5
- "module": "esnext",
6
5
  },
7
6
  }
package/tsconfig.json CHANGED
@@ -1,10 +1,12 @@
1
1
  {
2
- "extends": "@fluidframework/build-common/ts-common-config.json",
2
+ "extends": [
3
+ "../../../common/build/build-common/tsconfig.base.json",
4
+ "../../../common/build/build-common/tsconfig.cjs.json",
5
+ ],
6
+ "include": ["src/**/*"],
3
7
  "exclude": ["src/test/**/*"],
4
8
  "compilerOptions": {
5
9
  "rootDir": "./src",
6
10
  "outDir": "./dist",
7
- "composite": true,
8
11
  },
9
- "include": ["src/**/*"],
10
12
  }