@fluidframework/sequence 1.0.1 → 1.1.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 (65) hide show
  1. package/README.md +18 -6
  2. package/dist/defaultMap.d.ts +2 -6
  3. package/dist/defaultMap.d.ts.map +1 -1
  4. package/dist/defaultMap.js +27 -37
  5. package/dist/defaultMap.js.map +1 -1
  6. package/dist/defaultMapInterfaces.d.ts +24 -3
  7. package/dist/defaultMapInterfaces.d.ts.map +1 -1
  8. package/dist/defaultMapInterfaces.js.map +1 -1
  9. package/dist/index.d.ts +2 -2
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js.map +1 -1
  12. package/dist/intervalCollection.d.ts +72 -8
  13. package/dist/intervalCollection.d.ts.map +1 -1
  14. package/dist/intervalCollection.js +325 -155
  15. package/dist/intervalCollection.js.map +1 -1
  16. package/dist/packageVersion.d.ts +1 -1
  17. package/dist/packageVersion.js +1 -1
  18. package/dist/packageVersion.js.map +1 -1
  19. package/dist/sequence.d.ts +4 -5
  20. package/dist/sequence.d.ts.map +1 -1
  21. package/dist/sequence.js +11 -15
  22. package/dist/sequence.js.map +1 -1
  23. package/dist/sharedIntervalCollection.d.ts.map +1 -1
  24. package/dist/sharedIntervalCollection.js +1 -1
  25. package/dist/sharedIntervalCollection.js.map +1 -1
  26. package/dist/sharedSequence.js.map +1 -1
  27. package/dist/sparsematrix.js +2 -2
  28. package/dist/sparsematrix.js.map +1 -1
  29. package/lib/defaultMap.d.ts +2 -6
  30. package/lib/defaultMap.d.ts.map +1 -1
  31. package/lib/defaultMap.js +27 -37
  32. package/lib/defaultMap.js.map +1 -1
  33. package/lib/defaultMapInterfaces.d.ts +24 -3
  34. package/lib/defaultMapInterfaces.d.ts.map +1 -1
  35. package/lib/defaultMapInterfaces.js.map +1 -1
  36. package/lib/index.d.ts +2 -2
  37. package/lib/index.d.ts.map +1 -1
  38. package/lib/index.js.map +1 -1
  39. package/lib/intervalCollection.d.ts +72 -8
  40. package/lib/intervalCollection.d.ts.map +1 -1
  41. package/lib/intervalCollection.js +325 -155
  42. package/lib/intervalCollection.js.map +1 -1
  43. package/lib/packageVersion.d.ts +1 -1
  44. package/lib/packageVersion.js +1 -1
  45. package/lib/packageVersion.js.map +1 -1
  46. package/lib/sequence.d.ts +4 -5
  47. package/lib/sequence.d.ts.map +1 -1
  48. package/lib/sequence.js +11 -15
  49. package/lib/sequence.js.map +1 -1
  50. package/lib/sharedIntervalCollection.d.ts.map +1 -1
  51. package/lib/sharedIntervalCollection.js +1 -1
  52. package/lib/sharedIntervalCollection.js.map +1 -1
  53. package/lib/sharedSequence.js.map +1 -1
  54. package/lib/sparsematrix.js +2 -2
  55. package/lib/sparsematrix.js.map +1 -1
  56. package/package.json +20 -44
  57. package/src/defaultMap.ts +39 -41
  58. package/src/defaultMapInterfaces.ts +28 -3
  59. package/src/index.ts +3 -0
  60. package/src/intervalCollection.ts +447 -181
  61. package/src/packageVersion.ts +1 -1
  62. package/src/sequence.ts +17 -21
  63. package/src/sharedIntervalCollection.ts +3 -2
  64. package/src/sharedSequence.ts +1 -1
  65. package/src/sparsematrix.ts +2 -2
@@ -6,4 +6,4 @@
6
6
  */
7
7
 
8
8
  export const pkgName = "@fluidframework/sequence";
9
- export const pkgVersion = "1.0.1";
9
+ export const pkgVersion = "1.1.0";
package/src/sequence.ts CHANGED
@@ -30,6 +30,7 @@ import {
30
30
  ISegment,
31
31
  ISegmentAction,
32
32
  LocalReference,
33
+ LocalReferencePosition,
33
34
  matchProperties,
34
35
  MergeTreeDeltaType,
35
36
  PropertySet,
@@ -55,8 +56,8 @@ import {
55
56
  SequenceInterval,
56
57
  SequenceIntervalCollectionValueType,
57
58
  } from "./intervalCollection";
58
- import { IMapMessageLocalMetadata, DefaultMap } from "./defaultMap";
59
- import { IValueChanged } from "./defaultMapInterfaces";
59
+ import { DefaultMap } from "./defaultMap";
60
+ import { IMapMessageLocalMetadata, IValueChanged } from "./defaultMapInterfaces";
60
61
  import { SequenceDeltaEvent, SequenceMaintenanceEvent } from "./sequenceDeltaEvent";
61
62
  import { ISharedIntervalCollection } from "./sharedIntervalCollection";
62
63
 
@@ -115,8 +116,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
115
116
  const lastAnnotate = ops[ops.length - 1] as IMergeTreeAnnotateMsg;
116
117
  const props = {};
117
118
  for (const key of Object.keys(r.propertyDeltas)) {
118
- props[key] =
119
- r.segment.properties[key] === undefined ? null : r.segment.properties[key];
119
+ props[key] = r.segment.properties?.[key] ?? null;
120
120
  }
121
121
  if (lastAnnotate && lastAnnotate.pos2 === r.position &&
122
122
  matchProperties(lastAnnotate.props, props)) {
@@ -232,7 +232,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
232
232
  * @param start - The inclusive start of the range to remove
233
233
  * @param end - The exclusive end of the range to remove
234
234
  */
235
- public removeRange(start: number, end: number) {
235
+ public removeRange(start: number, end: number): IMergeTreeRemoveMsg {
236
236
  const removeOp = this.client.removeRangeLocal(start, end);
237
237
  if (removeOp) {
238
238
  this.submitSequenceMessage(removeOp);
@@ -312,7 +312,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
312
312
  segment: T,
313
313
  offset: number,
314
314
  refType: ReferenceType,
315
- properties: PropertySet | undefined): ReferencePosition {
315
+ properties: PropertySet | undefined): LocalReferencePosition {
316
316
  return this.client.createLocalReferencePosition(
317
317
  segment,
318
318
  offset,
@@ -387,7 +387,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
387
387
  return this.client.removeLocalReferencePosition(lref);
388
388
  }
389
389
 
390
- public removeLocalReferencePosition(lref: ReferencePosition) {
390
+ public removeLocalReferencePosition(lref: LocalReferencePosition) {
391
391
  return this.client.removeLocalReferencePosition(lref);
392
392
  }
393
393
 
@@ -442,13 +442,11 @@ export abstract class SharedSegmentSequence<T extends ISegment>
442
442
  public async waitIntervalCollection(
443
443
  label: string,
444
444
  ): Promise<IntervalCollection<SequenceInterval>> {
445
- return this.intervalCollections.get(this.getIntervalCollectionPath(label));
445
+ return this.intervalCollections.get(label);
446
446
  }
447
447
 
448
448
  public getIntervalCollection(label: string): IntervalCollection<SequenceInterval> {
449
- const labelPath = this.getIntervalCollectionPath(label);
450
- const sharedCollection = this.intervalCollections.get(labelPath);
451
- return sharedCollection;
449
+ return this.intervalCollections.get(label);
452
450
  }
453
451
 
454
452
  /**
@@ -525,7 +523,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
525
523
  protected onDisconnect() { }
526
524
 
527
525
  protected reSubmitCore(content: any, localOpMetadata: unknown) {
528
- if (!this.intervalCollections.trySubmitMessage(content, localOpMetadata as IMapMessageLocalMetadata)) {
526
+ if (!this.intervalCollections.tryResubmitMessage(content, localOpMetadata as IMapMessageLocalMetadata)) {
529
527
  this.submitSequenceMessage(
530
528
  this.client.regeneratePendingOp(
531
529
  content as IMergeTreeOp,
@@ -684,10 +682,6 @@ export abstract class SharedSegmentSequence<T extends ISegment>
684
682
  }
685
683
  }
686
684
 
687
- private getIntervalCollectionPath(label: string) {
688
- return `intervalCollections/${label}`;
689
- }
690
-
691
685
  private processMinSequenceNumberChanged(minSeq: number) {
692
686
  let index = 0;
693
687
  for (; index < this.messagesSinceMSNChange.length; index++) {
@@ -711,18 +705,20 @@ export abstract class SharedSegmentSequence<T extends ISegment>
711
705
  // it is important this series remains synchronous
712
706
  // first we stop deferring incoming ops, and apply then all
713
707
  this.deferIncomingOps = false;
714
- while (this.loadedDeferredIncomingOps.length > 0) {
715
- this.processCore(this.loadedDeferredIncomingOps.shift(), false, undefined);
708
+ for (const message of this.loadedDeferredIncomingOps) {
709
+ this.processCore(message, false, undefined);
716
710
  }
711
+ this.loadedDeferredIncomingOps.length = 0;
712
+
717
713
  // then resolve the loaded promise
718
714
  // and resubmit all the outstanding ops, as the snapshot
719
715
  // is fully loaded, and all outstanding ops are applied
720
716
  this.loadedDeferred.resolve();
721
717
 
722
- while (this.loadedDeferredOutgoingOps.length > 0) {
723
- const opData = this.loadedDeferredOutgoingOps.shift();
724
- this.reSubmitCore(opData[0], opData[1]);
718
+ for (const [messageContent, opMetadata] of this.loadedDeferredOutgoingOps) {
719
+ this.reSubmitCore(messageContent, opMetadata);
725
720
  }
721
+ this.loadedDeferredOutgoingOps.length = 0;
726
722
  }
727
723
  }
728
724
  }
@@ -24,8 +24,9 @@ import {
24
24
  IntervalCollectionValueType,
25
25
  ISerializableInterval,
26
26
  } from "./intervalCollection";
27
- import { IMapMessageLocalMetadata, DefaultMap } from "./defaultMap";
27
+ import { DefaultMap } from "./defaultMap";
28
28
  import { pkgVersion } from "./packageVersion";
29
+ import { IMapMessageLocalMetadata } from "./defaultMapInterfaces";
29
30
 
30
31
  const snapshotFileName = "header";
31
32
 
@@ -147,7 +148,7 @@ export class SharedIntervalCollection
147
148
  }
148
149
 
149
150
  protected reSubmitCore(content: any, localOpMetadata: unknown) {
150
- this.intervalCollections.trySubmitMessage(content, localOpMetadata as IMapMessageLocalMetadata);
151
+ this.intervalCollections.tryResubmitMessage(content, localOpMetadata as IMapMessageLocalMetadata);
151
152
  }
152
153
 
153
154
  protected onDisconnect() { }
@@ -149,7 +149,7 @@ export class SharedSequence<T> extends SharedSegmentSequence<SubSequence<T>> {
149
149
  */
150
150
  public getItems(start: number, end?: number): Serializable<T>[] {
151
151
  const items: Serializable<T>[] = [];
152
- let firstSegment: ISegment;
152
+ let firstSegment: ISegment | undefined;
153
153
 
154
154
  // Return if the range is incorrect.
155
155
  if (end !== undefined && end <= start) {
@@ -279,10 +279,10 @@ export class SparseMatrix extends SharedSegmentSequence<MatrixSegment> {
279
279
  Jsonable<string | number | boolean | IFluidHandle> {
280
280
  const pos = rowColToPosition(row, col);
281
281
  const { segment, offset } = this.getContainingSegment(pos);
282
- if (RunSegment.is(segment)) {
282
+ if (segment && RunSegment.is(segment)) {
283
283
  // eslint-disable-next-line @typescript-eslint/no-unsafe-return
284
284
  return segment.items[offset];
285
- } else if (PaddingSegment.is(segment)) {
285
+ } else if (segment && PaddingSegment.is(segment)) {
286
286
  return undefined;
287
287
  }
288
288