@fluidframework/sequence 0.54.2 → 0.55.0-48551

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 (50) hide show
  1. package/.eslintrc.js +1 -1
  2. package/dist/intervalCollection.d.ts.map +1 -1
  3. package/dist/intervalCollection.js +0 -4
  4. package/dist/intervalCollection.js.map +1 -1
  5. package/dist/localValues.d.ts +2 -1
  6. package/dist/localValues.d.ts.map +1 -1
  7. package/dist/localValues.js.map +1 -1
  8. package/dist/mapKernel.d.ts +2 -1
  9. package/dist/mapKernel.d.ts.map +1 -1
  10. package/dist/mapKernel.js.map +1 -1
  11. package/dist/packageVersion.d.ts +1 -1
  12. package/dist/packageVersion.d.ts.map +1 -1
  13. package/dist/packageVersion.js +1 -1
  14. package/dist/packageVersion.js.map +1 -1
  15. package/dist/sequence.d.ts +8 -8
  16. package/dist/sequence.d.ts.map +1 -1
  17. package/dist/sequence.js +10 -33
  18. package/dist/sequence.js.map +1 -1
  19. package/dist/sharedIntervalCollection.d.ts +4 -4
  20. package/dist/sharedIntervalCollection.d.ts.map +1 -1
  21. package/dist/sharedIntervalCollection.js +2 -15
  22. package/dist/sharedIntervalCollection.js.map +1 -1
  23. package/lib/intervalCollection.d.ts.map +1 -1
  24. package/lib/intervalCollection.js +0 -4
  25. package/lib/intervalCollection.js.map +1 -1
  26. package/lib/localValues.d.ts +2 -1
  27. package/lib/localValues.d.ts.map +1 -1
  28. package/lib/localValues.js.map +1 -1
  29. package/lib/mapKernel.d.ts +2 -1
  30. package/lib/mapKernel.d.ts.map +1 -1
  31. package/lib/mapKernel.js.map +1 -1
  32. package/lib/packageVersion.d.ts +1 -1
  33. package/lib/packageVersion.d.ts.map +1 -1
  34. package/lib/packageVersion.js +1 -1
  35. package/lib/packageVersion.js.map +1 -1
  36. package/lib/sequence.d.ts +8 -8
  37. package/lib/sequence.d.ts.map +1 -1
  38. package/lib/sequence.js +13 -36
  39. package/lib/sequence.js.map +1 -1
  40. package/lib/sharedIntervalCollection.d.ts +4 -4
  41. package/lib/sharedIntervalCollection.d.ts.map +1 -1
  42. package/lib/sharedIntervalCollection.js +4 -17
  43. package/lib/sharedIntervalCollection.js.map +1 -1
  44. package/package.json +20 -19
  45. package/src/intervalCollection.ts +0 -4
  46. package/src/localValues.ts +1 -3
  47. package/src/mapKernel.ts +2 -2
  48. package/src/packageVersion.ts +1 -1
  49. package/src/sequence.ts +15 -46
  50. package/src/sharedIntervalCollection.ts +6 -20
@@ -2,10 +2,10 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { IFluidSerializer } from "@fluidframework/core-interfaces";
6
- import { ISequencedDocumentMessage, ITree } from "@fluidframework/protocol-definitions";
7
5
  import { IChannelAttributes, IFluidDataStoreRuntime, IChannelStorageService, IChannelServices, IChannelFactory } from "@fluidframework/datastore-definitions";
8
- import { SharedObject } from "@fluidframework/shared-object-base";
6
+ import { ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
7
+ import { ISummaryTreeWithStats } from "@fluidframework/runtime-definitions";
8
+ import { IFluidSerializer, SharedObject } from "@fluidframework/shared-object-base";
9
9
  import { Interval, IntervalCollection, ISerializableInterval } from "./intervalCollection";
10
10
  /**
11
11
  * The factory that defines the SharedIntervalCollection
@@ -49,7 +49,7 @@ export declare class SharedIntervalCollection<TInterval extends ISerializableInt
49
49
  constructor(id: string, runtime: IFluidDataStoreRuntime, attributes: IChannelAttributes);
50
50
  waitIntervalCollection(label: string): Promise<IntervalCollection<TInterval>>;
51
51
  getIntervalCollection(label: string): IntervalCollection<TInterval>;
52
- protected snapshotCore(serializer: IFluidSerializer): ITree;
52
+ protected summarizeCore(serializer: IFluidSerializer, fullTree: boolean): ISummaryTreeWithStats;
53
53
  protected reSubmitCore(content: any, localOpMetadata: unknown): void;
54
54
  protected onDisconnect(): void;
55
55
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"sharedIntervalCollection.d.ts","sourceRoot":"","sources":["../src/sharedIntervalCollection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EACO,yBAAyB,EAAE,KAAK,EAC7C,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACH,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,EAClB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACH,YAAY,EACf,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACH,QAAQ,EACR,kBAAkB,EAElB,qBAAqB,EACxB,MAAM,sBAAsB,CAAC;AAM9B;;GAEG;AACH,qBAAa,+BAAgC,YAAW,eAAe;IACnE,gBAAuB,IAAI,gEAAgE;IAE3F,gBAAuB,UAAU,EAAE,kBAAkB,CAInD;IAEF,IAAW,IAAI,WAEd;IAED,IAAW,UAAU,uBAEpB;IAED;;OAEG;IACU,IAAI,CACb,OAAO,EAAE,sBAAsB,EAC/B,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,gBAAgB,EAC1B,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAO/D,MAAM,CAAC,OAAO,EAAE,sBAAsB,EAAE,EAAE,EAAE,MAAM,GAAG,wBAAwB;CASvF;AAED,MAAM,WAAW,yBAAyB,CAAC,SAAS,SAAS,qBAAqB;IAC9E,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC;IAC9E,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;CACvE;AAED,qBAAa,wBAAwB,CAAC,SAAS,SAAS,qBAAqB,GAAG,QAAQ,CACpF,SAAQ,YAAa,YAAW,yBAAyB,CAAC,SAAS,CAAC;IACpE;;;;;;OAMG;WACW,MAAM,CAAC,OAAO,EAAE,sBAAsB,EAAE,EAAE,CAAC,EAAE,MAAM;IAIjE;;;;OAIG;WACW,UAAU,IAAI,eAAe;IAI3C,SAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,CAA8B;IAC1E,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAY;IAE9C;;;OAGG;gBAEC,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,sBAAsB,EAC/B,UAAU,EAAE,kBAAkB;IAYrB,sBAAsB,CAC/B,KAAK,EAAE,MAAM,GACd,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAMlC,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC;IAc1E,SAAS,CAAC,YAAY,CAAC,UAAU,EAAE,gBAAgB,GAAG,KAAK;IAkB3D,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO;IAI7D,SAAS,CAAC,YAAY;IAEtB;;OAEG;cACa,QAAQ,CAAC,OAAO,EAAE,sBAAsB;IAMxD,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,yBAAyB,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO;IAMlG,SAAS,CAAC,YAAY;IAQtB;;;OAGG;IACH,SAAS,CAAC,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI1D,SAAS,CAAC,cAAc;CAG3B"}
1
+ {"version":3,"file":"sharedIntervalCollection.d.ts","sourceRoot":"","sources":["../src/sharedIntervalCollection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACH,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,EAClB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,yBAAyB,EAAe,MAAM,sCAAsC,CAAC;AAC9F,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAEH,gBAAgB,EAChB,YAAY,EACf,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACH,QAAQ,EACR,kBAAkB,EAElB,qBAAqB,EACxB,MAAM,sBAAsB,CAAC;AAM9B;;GAEG;AACH,qBAAa,+BAAgC,YAAW,eAAe;IACnE,gBAAuB,IAAI,gEAAgE;IAE3F,gBAAuB,UAAU,EAAE,kBAAkB,CAInD;IAEF,IAAW,IAAI,WAEd;IAED,IAAW,UAAU,uBAEpB;IAED;;OAEG;IACU,IAAI,CACb,OAAO,EAAE,sBAAsB,EAC/B,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,gBAAgB,EAC1B,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAO/D,MAAM,CAAC,OAAO,EAAE,sBAAsB,EAAE,EAAE,EAAE,MAAM,GAAG,wBAAwB;CASvF;AAED,MAAM,WAAW,yBAAyB,CAAC,SAAS,SAAS,qBAAqB;IAC9E,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC;IAC9E,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;CACvE;AAED,qBAAa,wBAAwB,CAAC,SAAS,SAAS,qBAAqB,GAAG,QAAQ,CACpF,SAAQ,YAAa,YAAW,yBAAyB,CAAC,SAAS,CAAC;IACpE;;;;;;OAMG;WACW,MAAM,CAAC,OAAO,EAAE,sBAAsB,EAAE,EAAE,CAAC,EAAE,MAAM;IAIjE;;;;OAIG;WACW,UAAU,IAAI,eAAe;IAI3C,SAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,CAA8B;IAC1E,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAY;IAE9C;;;OAGG;gBAEC,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,sBAAsB,EAC/B,UAAU,EAAE,kBAAkB;IAYrB,sBAAsB,CAC/B,KAAK,EAAE,MAAM,GACd,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAMlC,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC;IAc1E,SAAS,CAAC,aAAa,CAAC,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,OAAO,GAAG,qBAAqB;IAI/F,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO;IAI7D,SAAS,CAAC,YAAY;IAEtB;;OAEG;cACa,QAAQ,CAAC,OAAO,EAAE,sBAAsB;IAMxD,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,yBAAyB,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO;IAMlG,SAAS,CAAC,YAAY;IAQtB;;;OAGG;IACH,SAAS,CAAC,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI1D,SAAS,CAAC,cAAc;CAG3B"}
@@ -83,21 +83,8 @@ class SharedIntervalCollection extends shared_object_base_1.SharedObject {
83
83
  const sharedCollection = this.intervalMapKernel.get(realLabel);
84
84
  return sharedCollection;
85
85
  }
86
- snapshotCore(serializer) {
87
- const tree = {
88
- entries: [
89
- {
90
- mode: protocol_definitions_1.FileMode.File,
91
- path: snapshotFileName,
92
- type: protocol_definitions_1.TreeEntry.Blob,
93
- value: {
94
- contents: this.intervalMapKernel.serialize(serializer),
95
- encoding: "utf-8",
96
- },
97
- },
98
- ],
99
- };
100
- return tree;
86
+ summarizeCore(serializer, fullTree) {
87
+ return shared_object_base_1.createSingleBlobSummary(snapshotFileName, this.intervalMapKernel.serialize(serializer));
101
88
  }
102
89
  reSubmitCore(content, localOpMetadata) {
103
90
  this.intervalMapKernel.trySubmitMessage(content, localOpMetadata);
@@ -1 +1 @@
1
- {"version":3,"file":"sharedIntervalCollection.js","sourceRoot":"","sources":["../src/sharedIntervalCollection.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { bufferToString } from \"@fluidframework/common-utils\";\nimport { IFluidSerializer } from \"@fluidframework/core-interfaces\";\nimport {\n FileMode, ISequencedDocumentMessage, ITree, MessageType, TreeEntry,\n} from \"@fluidframework/protocol-definitions\";\nimport {\n IChannelAttributes,\n IFluidDataStoreRuntime,\n IChannelStorageService,\n IChannelServices,\n IChannelFactory,\n} from \"@fluidframework/datastore-definitions\";\nimport {\n SharedObject,\n} from \"@fluidframework/shared-object-base\";\nimport {\n Interval,\n IntervalCollection,\n IntervalCollectionValueType,\n ISerializableInterval,\n} from \"./intervalCollection\";\nimport { MapKernel } from \"./mapKernel\";\nimport { pkgVersion } from \"./packageVersion\";\n\nconst snapshotFileName = \"header\";\n\n/**\n * The factory that defines the SharedIntervalCollection\n */\nexport class SharedIntervalCollectionFactory implements IChannelFactory {\n public static readonly Type = \"https://graph.microsoft.com/types/sharedIntervalCollection\";\n\n public static readonly Attributes: IChannelAttributes = {\n type: SharedIntervalCollectionFactory.Type,\n snapshotFormatVersion: \"0.1\",\n packageVersion: pkgVersion,\n };\n\n public get type() {\n return SharedIntervalCollectionFactory.Type;\n }\n\n public get attributes() {\n return SharedIntervalCollectionFactory.Attributes;\n }\n\n /**\n * {@inheritDoc @fluidframework/datastore-definitions#IChannelFactory.load}\n */\n public async load(\n runtime: IFluidDataStoreRuntime,\n id: string,\n services: IChannelServices,\n attributes: IChannelAttributes): Promise<SharedIntervalCollection> {\n const map = new SharedIntervalCollection(id, runtime, attributes);\n await map.load(services);\n\n return map;\n }\n\n public create(runtime: IFluidDataStoreRuntime, id: string): SharedIntervalCollection {\n const map = new SharedIntervalCollection(\n id,\n runtime,\n this.attributes);\n map.initializeLocal();\n\n return map;\n }\n}\n\nexport interface ISharedIntervalCollection<TInterval extends ISerializableInterval> {\n waitIntervalCollection(label: string): Promise<IntervalCollection<TInterval>>;\n getIntervalCollection(label: string): IntervalCollection<TInterval>;\n}\n\nexport class SharedIntervalCollection<TInterval extends ISerializableInterval = Interval>\n extends SharedObject implements ISharedIntervalCollection<TInterval> {\n /**\n * Create a SharedIntervalCollection\n *\n * @param runtime - data store runtime the new shared map belongs to\n * @param id - optional name of the shared map\n * @returns newly create shared map (but not attached yet)\n */\n public static create(runtime: IFluidDataStoreRuntime, id?: string) {\n return runtime.createChannel(id, SharedIntervalCollectionFactory.Type) as SharedIntervalCollection;\n }\n\n /**\n * Get a factory for SharedIntervalCollection to register with the data store.\n *\n * @returns a factory that creates and load SharedIntervalCollection\n */\n public static getFactory(): IChannelFactory {\n return new SharedIntervalCollectionFactory();\n }\n\n public readonly [Symbol.toStringTag]: string = \"SharedIntervalCollection\";\n private readonly intervalMapKernel: MapKernel;\n\n /**\n * Constructs a new shared SharedIntervalCollection. If the object is non-local an id and service interfaces will\n * be provided\n */\n constructor(\n id: string,\n runtime: IFluidDataStoreRuntime,\n attributes: IChannelAttributes,\n ) {\n super(id, runtime, attributes);\n this.intervalMapKernel = new MapKernel(\n this.serializer,\n this.handle,\n (op, localOpMetadata) => this.submitLocalMessage(op, localOpMetadata),\n () => this.isAttached(),\n [new IntervalCollectionValueType()],\n );\n }\n\n public async waitIntervalCollection(\n label: string,\n ): Promise<IntervalCollection<TInterval>> {\n return this.intervalMapKernel.wait<IntervalCollection<TInterval>>(\n this.getIntervalCollectionPath(label));\n }\n\n // TODO: fix race condition on creation by putting type on every operation\n public getIntervalCollection(label: string): IntervalCollection<TInterval> {\n const realLabel = this.getIntervalCollectionPath(label);\n if (!this.intervalMapKernel.has(realLabel)) {\n this.intervalMapKernel.createValueType(\n label,\n IntervalCollectionValueType.Name,\n undefined);\n }\n\n const sharedCollection =\n this.intervalMapKernel.get<IntervalCollection<TInterval>>(realLabel);\n return sharedCollection;\n }\n\n protected snapshotCore(serializer: IFluidSerializer): ITree {\n const tree: ITree = {\n entries: [\n {\n mode: FileMode.File,\n path: snapshotFileName,\n type: TreeEntry.Blob,\n value: {\n contents: this.intervalMapKernel.serialize(serializer),\n encoding: \"utf-8\",\n },\n },\n ],\n };\n\n return tree;\n }\n\n protected reSubmitCore(content: any, localOpMetadata: unknown) {\n this.intervalMapKernel.trySubmitMessage(content, localOpMetadata);\n }\n\n protected onDisconnect() { }\n\n /**\n * {@inheritDoc @fluidframework/shared-object-base#SharedObject.loadCore}\n */\n protected async loadCore(storage: IChannelStorageService) {\n const blob = await storage.readBlob(snapshotFileName);\n const header = bufferToString(blob,\"utf8\");\n this.intervalMapKernel.populate(header);\n }\n\n protected processCore(message: ISequencedDocumentMessage, local: boolean, localOpMetadata: unknown) {\n if (message.type === MessageType.Operation) {\n this.intervalMapKernel.tryProcessMessage(message.contents, local, message, localOpMetadata);\n }\n }\n\n protected registerCore() {\n for (const value of this.intervalMapKernel.values()) {\n if (SharedObject.is(value)) {\n value.bindToContext();\n }\n }\n }\n\n /**\n * Creates the full path of the intervalCollection label\n * @param label - the incoming lable\n */\n protected getIntervalCollectionPath(label: string): string {\n return label;\n }\n\n protected applyStashedOp() {\n throw new Error(\"not implemented\");\n }\n}\n"]}
1
+ {"version":3,"file":"sharedIntervalCollection.js","sourceRoot":"","sources":["../src/sharedIntervalCollection.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { bufferToString } from \"@fluidframework/common-utils\";\nimport {\n IChannelAttributes,\n IFluidDataStoreRuntime,\n IChannelStorageService,\n IChannelServices,\n IChannelFactory,\n} from \"@fluidframework/datastore-definitions\";\nimport { ISequencedDocumentMessage, MessageType } from \"@fluidframework/protocol-definitions\";\nimport { ISummaryTreeWithStats } from \"@fluidframework/runtime-definitions\";\nimport {\n createSingleBlobSummary,\n IFluidSerializer,\n SharedObject,\n} from \"@fluidframework/shared-object-base\";\nimport {\n Interval,\n IntervalCollection,\n IntervalCollectionValueType,\n ISerializableInterval,\n} from \"./intervalCollection\";\nimport { MapKernel } from \"./mapKernel\";\nimport { pkgVersion } from \"./packageVersion\";\n\nconst snapshotFileName = \"header\";\n\n/**\n * The factory that defines the SharedIntervalCollection\n */\nexport class SharedIntervalCollectionFactory implements IChannelFactory {\n public static readonly Type = \"https://graph.microsoft.com/types/sharedIntervalCollection\";\n\n public static readonly Attributes: IChannelAttributes = {\n type: SharedIntervalCollectionFactory.Type,\n snapshotFormatVersion: \"0.1\",\n packageVersion: pkgVersion,\n };\n\n public get type() {\n return SharedIntervalCollectionFactory.Type;\n }\n\n public get attributes() {\n return SharedIntervalCollectionFactory.Attributes;\n }\n\n /**\n * {@inheritDoc @fluidframework/datastore-definitions#IChannelFactory.load}\n */\n public async load(\n runtime: IFluidDataStoreRuntime,\n id: string,\n services: IChannelServices,\n attributes: IChannelAttributes): Promise<SharedIntervalCollection> {\n const map = new SharedIntervalCollection(id, runtime, attributes);\n await map.load(services);\n\n return map;\n }\n\n public create(runtime: IFluidDataStoreRuntime, id: string): SharedIntervalCollection {\n const map = new SharedIntervalCollection(\n id,\n runtime,\n this.attributes);\n map.initializeLocal();\n\n return map;\n }\n}\n\nexport interface ISharedIntervalCollection<TInterval extends ISerializableInterval> {\n waitIntervalCollection(label: string): Promise<IntervalCollection<TInterval>>;\n getIntervalCollection(label: string): IntervalCollection<TInterval>;\n}\n\nexport class SharedIntervalCollection<TInterval extends ISerializableInterval = Interval>\n extends SharedObject implements ISharedIntervalCollection<TInterval> {\n /**\n * Create a SharedIntervalCollection\n *\n * @param runtime - data store runtime the new shared map belongs to\n * @param id - optional name of the shared map\n * @returns newly create shared map (but not attached yet)\n */\n public static create(runtime: IFluidDataStoreRuntime, id?: string) {\n return runtime.createChannel(id, SharedIntervalCollectionFactory.Type) as SharedIntervalCollection;\n }\n\n /**\n * Get a factory for SharedIntervalCollection to register with the data store.\n *\n * @returns a factory that creates and load SharedIntervalCollection\n */\n public static getFactory(): IChannelFactory {\n return new SharedIntervalCollectionFactory();\n }\n\n public readonly [Symbol.toStringTag]: string = \"SharedIntervalCollection\";\n private readonly intervalMapKernel: MapKernel;\n\n /**\n * Constructs a new shared SharedIntervalCollection. If the object is non-local an id and service interfaces will\n * be provided\n */\n constructor(\n id: string,\n runtime: IFluidDataStoreRuntime,\n attributes: IChannelAttributes,\n ) {\n super(id, runtime, attributes);\n this.intervalMapKernel = new MapKernel(\n this.serializer,\n this.handle,\n (op, localOpMetadata) => this.submitLocalMessage(op, localOpMetadata),\n () => this.isAttached(),\n [new IntervalCollectionValueType()],\n );\n }\n\n public async waitIntervalCollection(\n label: string,\n ): Promise<IntervalCollection<TInterval>> {\n return this.intervalMapKernel.wait<IntervalCollection<TInterval>>(\n this.getIntervalCollectionPath(label));\n }\n\n // TODO: fix race condition on creation by putting type on every operation\n public getIntervalCollection(label: string): IntervalCollection<TInterval> {\n const realLabel = this.getIntervalCollectionPath(label);\n if (!this.intervalMapKernel.has(realLabel)) {\n this.intervalMapKernel.createValueType(\n label,\n IntervalCollectionValueType.Name,\n undefined);\n }\n\n const sharedCollection =\n this.intervalMapKernel.get<IntervalCollection<TInterval>>(realLabel);\n return sharedCollection;\n }\n\n protected summarizeCore(serializer: IFluidSerializer, fullTree: boolean): ISummaryTreeWithStats {\n return createSingleBlobSummary(snapshotFileName, this.intervalMapKernel.serialize(serializer));\n }\n\n protected reSubmitCore(content: any, localOpMetadata: unknown) {\n this.intervalMapKernel.trySubmitMessage(content, localOpMetadata);\n }\n\n protected onDisconnect() { }\n\n /**\n * {@inheritDoc @fluidframework/shared-object-base#SharedObject.loadCore}\n */\n protected async loadCore(storage: IChannelStorageService) {\n const blob = await storage.readBlob(snapshotFileName);\n const header = bufferToString(blob,\"utf8\");\n this.intervalMapKernel.populate(header);\n }\n\n protected processCore(message: ISequencedDocumentMessage, local: boolean, localOpMetadata: unknown) {\n if (message.type === MessageType.Operation) {\n this.intervalMapKernel.tryProcessMessage(message.contents, local, message, localOpMetadata);\n }\n }\n\n protected registerCore() {\n for (const value of this.intervalMapKernel.values()) {\n if (SharedObject.is(value)) {\n value.bindToContext();\n }\n }\n }\n\n /**\n * Creates the full path of the intervalCollection label\n * @param label - the incoming lable\n */\n protected getIntervalCollectionPath(label: string): string {\n return label;\n }\n\n protected applyStashedOp() {\n throw new Error(\"not implemented\");\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"intervalCollection.d.ts","sourceRoot":"","sources":["../src/intervalCollection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"intervalCollection.d.ts","sourceRoot":"","sources":["../src/intervalCollection.ts"],"names":[],"mappings":"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"}
@@ -486,7 +486,6 @@ export class LocalIntervalCollection {
486
486
  serialize() {
487
487
  const client = this.client;
488
488
  const intervals = this.intervalTree.intervals.keys();
489
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
490
489
  return intervals.map((interval) => interval.serialize(client));
491
490
  }
492
491
  }
@@ -501,7 +500,6 @@ class SequenceIntervalCollectionFactory {
501
500
  return new IntervalCollection(helpers, true, emitter, raw);
502
501
  }
503
502
  store(value) {
504
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
505
503
  return value.serializeInternal();
506
504
  }
507
505
  }
@@ -570,7 +568,6 @@ class IntervalCollectionFactory {
570
568
  return collection;
571
569
  }
572
570
  store(value) {
573
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
574
571
  return value.serializeInternal();
575
572
  }
576
573
  }
@@ -920,7 +917,6 @@ export class IntervalCollection extends TypedEventEmitter {
920
917
  if (!this.attached) {
921
918
  throw new Error("attachSequence must be called");
922
919
  }
923
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
924
920
  return this.localCollection.serialize();
925
921
  }
926
922
  [Symbol.iterator]() {
@@ -1 +1 @@
1
- {"version":3,"file":"intervalCollection.js","sourceRoot":"","sources":["../src/intervalCollection.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable no-bitwise */\n\nimport { TypedEventEmitter } from \"@fluidframework/common-utils\";\nimport { IEvent } from \"@fluidframework/common-definitions\";\nimport {\n addProperties,\n Client,\n ConflictAction,\n createMap,\n ICombiningOp,\n IInterval,\n IntervalConflictResolver,\n IntervalNode,\n IntervalTree,\n IntervalType,\n LocalReference,\n MergeTree,\n MergeTreeDeltaType,\n ordinalToArray,\n PropertiesManager,\n PropertySet,\n RedBlackTree,\n ReferenceType,\n reservedRangeLabelsKey,\n UnassignedSequenceNumber,\n} from \"@fluidframework/merge-tree\";\nimport { ISequencedDocumentMessage } from \"@fluidframework/protocol-definitions\";\nimport { v4 as uuid } from \"uuid\";\nimport { IValueFactory, IValueOpEmitter, IValueOperation, IValueType } from \"./mapKernelInterfaces\";\n\nconst reservedIntervalIdKey = \"intervalId\";\n\nexport interface ISerializedInterval {\n sequenceNumber: number;\n start: number;\n end: number;\n intervalType: IntervalType;\n properties?: PropertySet;\n}\n\nexport interface ISerializableInterval extends IInterval {\n properties: PropertySet;\n propertyManager: PropertiesManager;\n serialize(client: Client): ISerializedInterval;\n addProperties(props: PropertySet, collaborating?: boolean, seq?: number):\n PropertySet | undefined;\n getIntervalId(): string | undefined;\n}\n\nexport interface IIntervalHelpers<TInterval extends ISerializableInterval> {\n compareEnds(a: TInterval, b: TInterval): number;\n create(label: string, start: number, end: number,\n client: Client, intervalType?: IntervalType): TInterval;\n}\n\nexport class Interval implements ISerializableInterval {\n public properties: PropertySet;\n public auxProps: PropertySet[];\n public propertyManager: PropertiesManager;\n constructor(\n public start: number,\n public end: number,\n props?: PropertySet) {\n if (props) {\n this.addProperties(props);\n }\n }\n\n public getIntervalId(): string | undefined {\n const id = this.properties?.[reservedIntervalIdKey];\n if (id === undefined) {\n return undefined;\n }\n return `${id}`;\n }\n\n public getAdditionalPropertySets() {\n return this.auxProps;\n }\n\n public addPropertySet(props: PropertySet) {\n if (this.auxProps === undefined) {\n this.auxProps = [];\n }\n this.auxProps.push(props);\n }\n\n public serialize(client: Client) {\n let seq = 0;\n if (client) {\n seq = client.getCurrentSeq();\n }\n\n const serializedInterval: ISerializedInterval = {\n end: this.end,\n intervalType: 0,\n sequenceNumber: seq,\n start: this.start,\n };\n if (this.properties) {\n serializedInterval.properties = this.properties;\n }\n return serializedInterval;\n }\n\n public clone() {\n return new Interval(this.start, this.end, this.properties);\n }\n\n public compare(b: Interval) {\n const startResult = this.compareStart(b);\n if (startResult === 0) {\n const endResult = this.compareEnd(b);\n if (endResult === 0) {\n const thisId = this.getIntervalId();\n if (thisId) {\n const bId = b.getIntervalId();\n if (bId) {\n return thisId > bId ? 1 : thisId < bId ? -1 : 0;\n }\n return 0;\n }\n return 0;\n }\n else {\n return endResult;\n }\n } else {\n return startResult;\n }\n }\n\n public compareStart(b: Interval) {\n return this.start - b.start;\n }\n\n public compareEnd(b: Interval) {\n return this.end - b.end;\n }\n\n public overlaps(b: Interval) {\n const result = (this.start < b.end) &&\n (this.end >= b.start);\n return result;\n }\n\n public union(b: Interval) {\n return new Interval(Math.min(this.start, b.start),\n Math.max(this.end, b.end), this.properties);\n }\n\n public getProperties() {\n return this.properties;\n }\n\n public addProperties(\n newProps: PropertySet,\n collaborating: boolean = false,\n seq?: number,\n op?: ICombiningOp,\n ): PropertySet | undefined {\n if (newProps) {\n if (!this.propertyManager) {\n this.propertyManager = new PropertiesManager();\n }\n if (!this.properties) {\n this.properties = createMap<any>();\n }\n return this.propertyManager.addProperties(this.properties, newProps, op, seq, collaborating);\n }\n }\n\n public modify(label: string, start: number, end: number) {\n const startPos = start ?? this.start;\n const endPos = end ?? this.end;\n if (this.start === startPos && this.end === endPos) {\n // Return undefined to indicate that no change is necessary.\n return;\n }\n return new Interval(startPos, endPos, this.properties);\n }\n}\n\nexport class SequenceInterval implements ISerializableInterval {\n public properties: PropertySet;\n public propertyManager: PropertiesManager;\n private readonly checkMergeTree: MergeTree;\n\n constructor(\n public start: LocalReference,\n public end: LocalReference,\n public intervalType: IntervalType,\n props?: PropertySet) {\n if (props) {\n this.addProperties(props);\n }\n }\n\n public serialize(client: Client) {\n const startPosition = this.start.toPosition();\n const endPosition = this.end.toPosition();\n const serializedInterval: ISerializedInterval = {\n end: endPosition,\n intervalType: this.intervalType,\n sequenceNumber: client.getCurrentSeq(),\n start: startPosition,\n };\n if (this.properties) {\n serializedInterval.properties = this.properties;\n }\n return serializedInterval;\n }\n\n public clone() {\n return new SequenceInterval(this.start, this.end, this.intervalType, this.properties);\n }\n\n public compare(b: SequenceInterval) {\n const startResult = this.compareStart(b);\n if (startResult === 0) {\n const endResult = this.compareEnd(b);\n if (endResult === 0) {\n const thisId = this.getIntervalId();\n if (thisId) {\n const bId = b.getIntervalId();\n if (bId) {\n return thisId > bId ? 1 : thisId < bId ? -1 : 0;\n }\n return 0;\n }\n return 0;\n }\n else {\n return endResult;\n }\n } else {\n return startResult;\n }\n }\n\n public compareStart(b: SequenceInterval) {\n return this.start.compare(b.start);\n }\n\n public compareEnd(b: SequenceInterval) {\n return this.end.compare(b.end);\n }\n\n public overlaps(b: SequenceInterval) {\n const result = (this.start.compare(b.end) < 0) &&\n (this.end.compare(b.start) >= 0);\n if (this.checkMergeTree) {\n this.checkOverlaps(b, result);\n }\n return result;\n }\n\n public getIntervalId(): string | undefined {\n const id = this.properties?.[reservedIntervalIdKey];\n if (id === undefined) {\n return undefined;\n }\n return `${id}`;\n }\n\n public union(b: SequenceInterval) {\n return new SequenceInterval(this.start.min(b.start),\n this.end.max(b.end), this.intervalType);\n }\n\n public addProperties(\n newProps: PropertySet,\n collab: boolean = false,\n seq?: number,\n op?: ICombiningOp,\n ): PropertySet | undefined {\n if (!this.propertyManager) {\n this.propertyManager = new PropertiesManager();\n }\n if (!this.properties) {\n this.properties = createMap<any>();\n }\n return this.propertyManager.addProperties(this.properties, newProps, op, seq, collab);\n }\n\n public overlapsPos(bstart: number, bend: number) {\n const startPos = this.start.toPosition();\n const endPos = this.start.toPosition();\n return (endPos > bstart) && (startPos < bend);\n }\n\n private checkOverlaps(b: SequenceInterval, result: boolean) {\n const astart = this.start.toPosition();\n const bstart = b.start.toPosition();\n const aend = this.end.toPosition();\n const bend = b.end.toPosition();\n const checkResult = ((astart < bend) && (bstart < aend));\n if (checkResult !== result) {\n // eslint-disable-next-line max-len\n console.log(`check mismatch: res ${result} ${this.start.segment === b.end.segment} ${b.start.segment === this.end.segment}`);\n console.log(`as ${astart} ae ${aend} bs ${bstart} be ${bend}`);\n console.log(`as ${ordinalToArray(this.start.segment.ordinal)}@${this.start.offset}`);\n console.log(`ae ${ordinalToArray(this.end.segment.ordinal)}@${this.end.offset}`);\n console.log(`bs ${ordinalToArray(b.start.segment.ordinal)}@${b.start.offset}`);\n console.log(`be ${ordinalToArray(b.end.segment.ordinal)}@${b.end.offset}`);\n console.log(this.checkMergeTree.nodeToString(b.start.segment.parent, \"\"));\n }\n }\n\n public modify(label: string, start: number, end: number) {\n const startPos = start ?? this.start.getOffset();\n const endPos = end ?? this.end.getOffset();\n\n if (this.start.getOffset() === startPos && this.end.getOffset() === endPos) {\n // Return undefined to indicate that no change is necessary.\n return;\n }\n\n const newInterval = createSequenceInterval(label, startPos, endPos, this.start.getClient(), this.intervalType);\n if (this.properties) {\n newInterval.addProperties(this.properties);\n }\n return newInterval;\n }\n}\n\nfunction createPositionReference(\n client: Client,\n pos: number,\n refType: ReferenceType): LocalReference {\n const segoff = client.getContainingSegment(pos);\n if (segoff && segoff.segment) {\n const lref = new LocalReference(client, segoff.segment, segoff.offset, refType);\n if (refType !== ReferenceType.Transient) {\n client.addLocalReference(lref);\n }\n return lref;\n }\n return new LocalReference(client, undefined);\n}\n\nfunction createSequenceInterval(\n label: string,\n start: number,\n end: number,\n client: Client,\n intervalType: IntervalType): SequenceInterval {\n let beginRefType = ReferenceType.RangeBegin;\n let endRefType = ReferenceType.RangeEnd;\n if (intervalType === IntervalType.Nest) {\n beginRefType = ReferenceType.NestBegin;\n endRefType = ReferenceType.NestEnd;\n } else if (intervalType === IntervalType.Transient) {\n beginRefType = ReferenceType.Transient;\n endRefType = ReferenceType.Transient;\n }\n\n // TODO: Should SlideOnRemove be the default behavior?\n if (intervalType & IntervalType.SlideOnRemove) {\n beginRefType |= ReferenceType.SlideOnRemove;\n endRefType |= ReferenceType.SlideOnRemove;\n }\n\n const startLref = createPositionReference(client, start, beginRefType);\n const endLref = createPositionReference(client, end, endRefType);\n if (startLref && endLref) {\n startLref.pairedRef = endLref;\n endLref.pairedRef = startLref;\n const rangeProp = {\n [reservedRangeLabelsKey]: [label],\n };\n startLref.addProperties(rangeProp);\n endLref.addProperties(rangeProp);\n\n const ival = new SequenceInterval(startLref, endLref, intervalType, rangeProp);\n return ival;\n }\n}\n\nexport function defaultIntervalConflictResolver(a: Interval, b: Interval) {\n a.addPropertySet(b.properties);\n return a;\n}\n\nexport function createIntervalIndex(conflict?: IntervalConflictResolver<Interval>) {\n const helpers: IIntervalHelpers<Interval> = {\n compareEnds: compareIntervalEnds,\n create: createInterval,\n };\n const lc = new LocalIntervalCollection<Interval>(undefined, \"\", helpers);\n if (conflict) {\n lc.addConflictResolver(conflict);\n } else {\n lc.addConflictResolver(defaultIntervalConflictResolver);\n }\n return lc;\n}\n\nexport class LocalIntervalCollection<TInterval extends ISerializableInterval> {\n private readonly intervalTree = new IntervalTree<TInterval>();\n private readonly endIntervalTree: RedBlackTree<TInterval, TInterval>;\n private conflictResolver: IntervalConflictResolver<TInterval>;\n private endConflictResolver: ConflictAction<TInterval, TInterval>;\n\n private static readonly legacyIdPrefix = \"legacy\";\n\n constructor(\n private readonly client: Client,\n private readonly label: string,\n private readonly helpers: IIntervalHelpers<TInterval>) {\n this.endIntervalTree =\n // eslint-disable-next-line @typescript-eslint/unbound-method\n new RedBlackTree<TInterval, TInterval>(helpers.compareEnds);\n }\n\n public addConflictResolver(conflictResolver: IntervalConflictResolver<TInterval>) {\n this.conflictResolver = conflictResolver;\n this.endConflictResolver =\n (key: TInterval, currentKey: TInterval) => {\n const ival = this.conflictResolver(key, currentKey);\n return {\n data: ival,\n key: ival,\n };\n };\n }\n\n public map(fn: (interval: TInterval) => void) {\n this.intervalTree.map(fn);\n }\n\n public createLegacyId(start: number, end: number): string {\n // Create a non-unique ID based on start and end to be used on intervals that come from legacy clients\n // without ID's.\n return `${LocalIntervalCollection.legacyIdPrefix}${start}-${end}`;\n }\n\n public ensureSerializedId(serializedInterval: ISerializedInterval) {\n if (serializedInterval.properties?.[reservedIntervalIdKey] === undefined) {\n // An interval came over the wire without an ID, so create a non-unique one based on start/end.\n // This will allow all clients to refer to this interval consistently.\n const newProps = {\n [reservedIntervalIdKey]: this.createLegacyId(serializedInterval.start, serializedInterval.end),\n };\n serializedInterval.properties = addProperties(serializedInterval.properties, newProps);\n }\n // Make the ID immutable for safety's sake.\n Object.defineProperty(serializedInterval.properties, reservedIntervalIdKey, {\n configurable: false,\n enumerable: true,\n writable: false,\n });\n }\n\n public mapUntil(fn: (interval: TInterval) => boolean) {\n this.intervalTree.mapUntil(fn);\n }\n\n public gatherIterationResults(\n results: TInterval[],\n iteratesForward: boolean,\n start?: number,\n end?: number) {\n if (this.intervalTree.intervals.isEmpty()) {\n return;\n }\n\n if (start === undefined && end === undefined) {\n // No start/end provided. Gather the whole tree in the specified order.\n if (iteratesForward) {\n this.intervalTree.map((interval: TInterval) => {\n results.push(interval);\n });\n }\n else {\n this.intervalTree.mapBackward((interval: TInterval) => {\n results.push(interval);\n });\n }\n }\n else {\n const transientInterval: TInterval = this.helpers.create(\n \"transient\",\n start,\n end,\n this.client,\n IntervalType.Transient,\n );\n\n if (start === undefined) {\n // Only end position provided. Since the tree is not sorted by end position,\n // walk the whole tree in the specified order, gathering intervals that match the end.\n if (iteratesForward) {\n this.intervalTree.map((interval: TInterval) => {\n if (transientInterval.compareEnd(interval) === 0) {\n results.push(interval);\n }\n });\n }\n else {\n this.intervalTree.mapBackward((interval: TInterval) => {\n if (transientInterval.compareEnd(interval) === 0) {\n results.push(interval);\n }\n });\n }\n }\n else {\n // Start and (possibly) end provided. Walk the subtrees that may contain\n // this start position.\n const compareFn =\n end === undefined ?\n (node: IntervalNode<TInterval>) => {\n return transientInterval.compareStart(node.key);\n } :\n (node: IntervalNode<TInterval>) => {\n return transientInterval.compare(node.key);\n };\n const continueLeftFn = (cmpResult: number) => cmpResult <= 0;\n const continueRightFn = (cmpResult: number) => cmpResult >= 0;\n const actionFn = (node: IntervalNode<TInterval>) => {\n results.push(node.key);\n };\n\n if (iteratesForward) {\n this.intervalTree.intervals.walkExactMatchesForward(\n compareFn, actionFn, continueLeftFn, continueRightFn,\n );\n }\n else {\n this.intervalTree.intervals.walkExactMatchesBackward(\n compareFn, actionFn, continueLeftFn, continueRightFn,\n );\n }\n }\n }\n }\n\n public findOverlappingIntervals(startPosition: number, endPosition: number) {\n if (!this.intervalTree.intervals.isEmpty()) {\n const transientInterval =\n this.helpers.create(\n \"transient\",\n startPosition,\n endPosition,\n this.client,\n IntervalType.Transient);\n\n const overlappingIntervalNodes = this.intervalTree.match(transientInterval);\n return overlappingIntervalNodes.map((node) => node.key);\n } else {\n return [];\n }\n }\n\n public previousInterval(pos: number) {\n const transientInterval = this.helpers.create(\n \"transient\", pos, pos, this.client, IntervalType.Transient);\n const rbNode = this.endIntervalTree.floor(transientInterval);\n if (rbNode) {\n return rbNode.data;\n }\n }\n\n public nextInterval(pos: number) {\n const transientInterval = this.helpers.create(\n \"transient\", pos, pos, this.client, IntervalType.Transient);\n const rbNode = this.endIntervalTree.ceil(transientInterval);\n if (rbNode) {\n return rbNode.data;\n }\n }\n\n public removeInterval(startPosition: number, endPosition: number) {\n const transientInterval = this.helpers.create(\n \"transient\", startPosition, endPosition, this.client, IntervalType.Transient);\n this.intervalTree.remove(transientInterval);\n this.endIntervalTree.remove(transientInterval);\n return transientInterval;\n }\n\n public removeExistingInterval(interval: TInterval) {\n this.intervalTree.removeExisting(interval);\n this.endIntervalTree.remove(interval);\n }\n\n public createInterval(start: number, end: number, intervalType: IntervalType): TInterval {\n return this.helpers.create(this.label, start, end, this.client, intervalType);\n }\n\n public addInterval(\n start: number,\n end: number,\n intervalType: IntervalType,\n props?: PropertySet) {\n const interval: TInterval = this.createInterval(start, end, intervalType);\n if (interval) {\n if (!interval.properties) {\n interval.properties = createMap<any>();\n }\n if (props) {\n interval.addProperties(props);\n }\n if (interval.properties[reservedIntervalIdKey] === undefined) {\n // Create a new ID.\n interval.properties[reservedIntervalIdKey] = uuid();\n }\n // Make the ID immutable.\n Object.defineProperty(interval.properties, reservedIntervalIdKey, {\n configurable: false,\n enumerable: true,\n writable: false,\n });\n this.add(interval);\n }\n return interval;\n }\n\n public add(interval: TInterval) {\n this.intervalTree.put(interval, this.conflictResolver);\n this.endIntervalTree.put(interval, interval, this.endConflictResolver);\n }\n\n public getIntervalById(id: string) {\n let result: TInterval | undefined;\n this.mapUntil((interval: TInterval) => {\n if (interval.getIntervalId() === id) {\n result = interval;\n return false;\n }\n return true;\n });\n return result;\n }\n\n public changeInterval(interval: TInterval, start: number, end: number) {\n const newInterval = interval.modify(this.label, start, end) as TInterval | undefined;\n if (newInterval) {\n this.removeExistingInterval(interval);\n this.add(newInterval);\n }\n return newInterval;\n }\n\n public serialize() {\n const client = this.client;\n const intervals = this.intervalTree.intervals.keys();\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return intervals.map((interval) => interval.serialize(client));\n }\n}\n\nconst compareSequenceIntervalEnds = (a: SequenceInterval, b: SequenceInterval): number => a.end.compare(b.end);\n\nclass SequenceIntervalCollectionFactory\n implements IValueFactory<IntervalCollection<SequenceInterval>> {\n public load(\n emitter: IValueOpEmitter,\n raw: ISerializedInterval[] = [],\n ): IntervalCollection<SequenceInterval> {\n const helpers: IIntervalHelpers<SequenceInterval> = {\n compareEnds: compareSequenceIntervalEnds,\n create: createSequenceInterval,\n };\n return new IntervalCollection<SequenceInterval>(helpers, true, emitter, raw);\n }\n\n public store(value: IntervalCollection<SequenceInterval>): ISerializedInterval[] {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return value.serializeInternal();\n }\n}\n\nexport class SequenceIntervalCollectionValueType\n implements IValueType<IntervalCollection<SequenceInterval>> {\n public static Name = \"sharedStringIntervalCollection\";\n\n public get name(): string {\n return SequenceIntervalCollectionValueType.Name;\n }\n\n public get factory(): IValueFactory<IntervalCollection<SequenceInterval>> {\n return SequenceIntervalCollectionValueType._factory;\n }\n\n public get ops(): Map<string, IValueOperation<IntervalCollection<SequenceInterval>>> {\n return SequenceIntervalCollectionValueType._ops;\n }\n\n private static readonly _factory: IValueFactory<IntervalCollection<SequenceInterval>> =\n new SequenceIntervalCollectionFactory();\n\n private static readonly _ops: Map<string, IValueOperation<IntervalCollection<SequenceInterval>>> =\n new Map<string, IValueOperation<IntervalCollection<SequenceInterval>>>(\n [[\n \"add\",\n {\n process: (value, params, local, op) => {\n // Local ops were applied when the message was created\n if (local) {\n return;\n }\n\n value.addInternal(params, local, op);\n },\n },\n ],\n [\n \"delete\",\n {\n process: (value, params, local, op) => {\n if (local) {\n return;\n }\n value.deleteInterval(params, local, op);\n },\n },\n ],\n [\n \"change\",\n {\n process: (value, params, local, op) => {\n value.changeInterval(params, local, op);\n },\n },\n ]]);\n}\n\nconst compareIntervalEnds = (a: Interval, b: Interval) => a.end - b.end;\n\nfunction createInterval(label: string, start: number, end: number, client: Client): Interval {\n let rangeProp: PropertySet;\n if (label && (label.length > 0)) {\n rangeProp = {\n [reservedRangeLabelsKey]: [label],\n };\n }\n return new Interval(start, end, rangeProp);\n}\n\nclass IntervalCollectionFactory\n implements IValueFactory<IntervalCollection<Interval>> {\n public load(emitter: IValueOpEmitter, raw: ISerializedInterval[] = []): IntervalCollection<Interval> {\n const helpers: IIntervalHelpers<Interval> = {\n compareEnds: compareIntervalEnds,\n create: createInterval,\n };\n const collection = new IntervalCollection<Interval>(helpers, false, emitter, raw);\n collection.attachGraph(undefined, \"\");\n return collection;\n }\n\n public store(value: IntervalCollection<Interval>): ISerializedInterval[] {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return value.serializeInternal();\n }\n}\n\nexport class IntervalCollectionValueType\n implements IValueType<IntervalCollection<Interval>> {\n public static Name = \"sharedIntervalCollection\";\n\n public get name(): string {\n return IntervalCollectionValueType.Name;\n }\n\n public get factory(): IValueFactory<IntervalCollection<Interval>> {\n return IntervalCollectionValueType._factory;\n }\n\n public get ops(): Map<string, IValueOperation<IntervalCollection<Interval>>> {\n return IntervalCollectionValueType._ops;\n }\n\n private static readonly _factory: IValueFactory<IntervalCollection<Interval>> =\n new IntervalCollectionFactory();\n private static readonly _ops: Map<string, IValueOperation<IntervalCollection<Interval>>> =\n new Map<string, IValueOperation<IntervalCollection<Interval>>>(\n [[\n \"add\",\n {\n process: (value, params, local, op) => {\n // Local ops were applied when the message was created\n if (local) {\n return;\n }\n\n value.addInternal(params, local, op);\n },\n },\n ],\n [\n \"delete\",\n {\n process: (value, params, local, op) => {\n if (local) {\n return;\n }\n value.deleteInterval(params, local, op);\n },\n },\n ],\n [\n \"change\",\n {\n process: (value, params, local, op) => {\n value.changeInterval(params, local, op);\n },\n },\n ]]);\n}\n\nexport type DeserializeCallback = (properties: PropertySet) => void;\n\nexport class IntervalCollectionIterator<TInterval extends ISerializableInterval> {\n private readonly results: TInterval[];\n private index: number;\n\n constructor(\n collection: IntervalCollection<TInterval>,\n iteratesForward: boolean = true,\n start?: number,\n end?: number) {\n this.results = [];\n this.index = 0;\n\n collection.gatherIterationResults(this.results, iteratesForward, start, end);\n }\n\n public next() {\n let _value: TInterval | undefined;\n let _done: boolean = true;\n\n if (this.index < this.results.length) {\n _value = this.results[this.index++];\n _done = false;\n }\n\n return {\n value: _value,\n done: _done,\n };\n }\n}\n\nexport interface IIntervalCollectionEvent<TInterval extends ISerializableInterval> extends IEvent {\n (event: \"addInterval\" | \"deleteInterval\",\n listener: (interval: TInterval, local: boolean, op: ISequencedDocumentMessage) => void);\n (event: \"propertyChanged\", listener: (interval: TInterval, propertyArgs: PropertySet) => void);\n}\n\nexport class IntervalCollection<TInterval extends ISerializableInterval>\n extends TypedEventEmitter<IIntervalCollectionEvent<TInterval>> {\n private savedSerializedIntervals?: ISerializedInterval[];\n private localCollection: LocalIntervalCollection<TInterval>;\n private onDeserialize: DeserializeCallback;\n private client: Client;\n private pendingChangeStart: Map<string, ISerializedInterval[]>;\n private pendingChangeEnd: Map<string, ISerializedInterval[]>;\n\n public get attached(): boolean {\n return !!this.localCollection;\n }\n\n constructor(private readonly helpers: IIntervalHelpers<TInterval>, private readonly requiresClient: boolean,\n private readonly emitter: IValueOpEmitter,\n serializedIntervals: ISerializedInterval[]) {\n super();\n this.savedSerializedIntervals = serializedIntervals;\n }\n\n public attachGraph(client: Client, label: string) {\n if (this.attached) {\n throw new Error(\"Only supports one Sequence attach\");\n }\n\n if ((client === undefined) && (this.requiresClient)) {\n throw new Error(\"Client required for this collection\");\n }\n\n // Instantiate the local interval collection based on the saved intervals\n this.client = client;\n this.localCollection = new LocalIntervalCollection<TInterval>(client, label, this.helpers);\n if (this.savedSerializedIntervals) {\n for (const serializedInterval of this.savedSerializedIntervals) {\n this.localCollection.ensureSerializedId(serializedInterval);\n this.localCollection.addInterval(\n serializedInterval.start,\n serializedInterval.end,\n serializedInterval.intervalType,\n serializedInterval.properties);\n }\n }\n this.savedSerializedIntervals = undefined;\n }\n\n public getIntervalById(id: string) {\n if (!this.attached) {\n throw new Error(\"attach must be called before accessing intervals\");\n }\n return this.localCollection.getIntervalById(id);\n }\n\n public add(\n start: number,\n end: number,\n intervalType: IntervalType,\n props?: PropertySet,\n ) {\n if (!this.attached) {\n throw new Error(\"attach must be called prior to adding intervals\");\n }\n\n const interval: TInterval = this.localCollection.addInterval(start, end, intervalType, props);\n\n if (interval) {\n const serializedInterval = {\n end,\n intervalType,\n properties: interval.properties,\n sequenceNumber: this.client?.getCurrentSeq() ?? 0,\n start,\n };\n // Local ops get submitted to the server. Remote ops have the deserializer run.\n this.emitter.emit(\"add\", undefined, serializedInterval);\n }\n\n this.emit(\"addInterval\", interval, true, undefined);\n\n return interval;\n }\n\n private deleteExistingInterval(interval: TInterval, local: boolean, op: ISequencedDocumentMessage) {\n // The given interval is known to exist in the collection.\n this.localCollection.removeExistingInterval(interval);\n if (interval) {\n // Local ops get submitted to the server. Remote ops have the deserializer run.\n if (local) {\n this.emitter.emit(\"delete\", undefined, interval.serialize(this.client));\n } else {\n if (this.onDeserialize) {\n this.onDeserialize(interval);\n }\n }\n }\n\n this.emit(\"deleteInterval\", interval, local, op);\n }\n\n public removeIntervalById(id: string) {\n const interval = this.localCollection.getIntervalById(id);\n if (interval) {\n this.deleteExistingInterval(interval, true, undefined);\n }\n return interval;\n }\n\n public changeProperties(id: string, props: PropertySet) {\n if (!this.attached) {\n throw new Error(\"Attach must be called before accessing intervals\");\n }\n if (typeof(id) !== \"string\") {\n throw new Error(\"Change API requires an ID that is a string\");\n }\n if (!props) {\n throw new Error(\"changeProperties should be called with a property set\");\n }\n\n const interval = this.getIntervalById(id);\n if (interval) {\n // Pass Unassigned as the sequence number to indicate that this is a local op that is waiting for an ack.\n const deltaProps = interval.addProperties(props, true, UnassignedSequenceNumber);\n const serializedInterval: ISerializedInterval = interval.serialize(this.client);\n // Emit a change op that will only change properties. Add the ID to the property bag provided by the caller.\n serializedInterval.start = undefined;\n serializedInterval.end = undefined;\n serializedInterval.properties = props;\n serializedInterval.properties[reservedIntervalIdKey] = interval.getIntervalId();\n this.emitter.emit(\"change\", undefined, serializedInterval);\n this.emit(\"propertyChanged\", interval, deltaProps);\n }\n this.emit(\"change\", interval, true, undefined);\n }\n\n public change(id: string, start?: number, end?: number): TInterval | undefined {\n if (!this.attached) {\n throw new Error(\"Attach must be called before accessing intervals\");\n }\n if (typeof(id) !== \"string\") {\n throw new Error(\"Change API requires an ID that is a string\");\n }\n\n // Force id to be a string.\n const interval = this.getIntervalById(id);\n if (interval) {\n this.localCollection.changeInterval(interval, start, end);\n const serializedInterval: ISerializedInterval = interval.serialize(this.client);\n serializedInterval.start = start;\n serializedInterval.end = end;\n // Emit a property bag containing only the ID, as we don't intend for this op to change any properties.\n serializedInterval.properties =\n {\n [reservedIntervalIdKey]: interval.getIntervalId(),\n };\n this.emitter.emit(\"change\", undefined, serializedInterval);\n this.addPendingChange(id, serializedInterval);\n }\n this.emit(\"change\", interval, true, undefined);\n return interval;\n }\n\n private addPendingChange(id: string, serializedInterval: ISerializedInterval) {\n if (serializedInterval.start !== undefined) {\n if (!this.pendingChangeStart) {\n this.pendingChangeStart = new Map<string, ISerializedInterval[]>();\n }\n this.addPendingChangeHelper(id, this.pendingChangeStart, serializedInterval);\n }\n if (serializedInterval.end !== undefined) {\n if (!this.pendingChangeEnd) {\n this.pendingChangeEnd = new Map<string, ISerializedInterval[]>();\n }\n this.addPendingChangeHelper(id, this.pendingChangeEnd, serializedInterval);\n }\n }\n\n private addPendingChangeHelper(\n id: string,\n pendingChanges: Map<string, ISerializedInterval[]>,\n serializedInterval: ISerializedInterval,\n ) {\n let entries: ISerializedInterval[] = pendingChanges.get(id);\n if (!entries) {\n entries = [];\n pendingChanges.set(id, entries);\n }\n entries.push(serializedInterval);\n }\n\n private removePendingChange(serializedInterval: ISerializedInterval) {\n // Change ops always have an ID.\n const id: string = serializedInterval.properties[reservedIntervalIdKey];\n if (serializedInterval.start !== undefined) {\n this.removePendingChangeHelper(id, this.pendingChangeStart, serializedInterval);\n }\n if (serializedInterval.end !== undefined) {\n this.removePendingChangeHelper(id, this.pendingChangeEnd, serializedInterval);\n }\n }\n\n private removePendingChangeHelper(\n id: string,\n pendingChanges: Map<string, ISerializedInterval[]>,\n serializedInterval: ISerializedInterval,\n ) {\n const entries = pendingChanges?.get(id);\n if (entries) {\n const pendingChange = entries.shift();\n if (entries.length === 0) {\n pendingChanges.delete(id);\n }\n if (pendingChange.start !== serializedInterval.start ||\n pendingChange.end !== serializedInterval.end) {\n throw new Error(\"Mismatch in pending changes\");\n }\n }\n }\n\n private hasPendingChangeStart(id: string) {\n const entries = this.pendingChangeStart?.get(id);\n return entries && entries.length !== 0;\n }\n\n private hasPendingChangeEnd(id: string) {\n const entries = this.pendingChangeEnd?.get(id);\n return entries && entries.length !== 0;\n }\n\n public changeInterval(serializedInterval: ISerializedInterval, local: boolean, op: ISequencedDocumentMessage) {\n if (!this.attached) {\n throw new Error(\"Attach must be called before accessing intervals\");\n }\n\n if (local) {\n // This is an ack from the server. Remove the pending change.\n this.removePendingChange(serializedInterval);\n const id: string = serializedInterval.properties[reservedIntervalIdKey];\n const interval: TInterval = this.getIntervalById(id);\n if (interval) {\n // Let the propertyManager prune its pending change-properties set.\n interval.propertyManager?.ackPendingProperties(\n {\n type: MergeTreeDeltaType.ANNOTATE,\n props: serializedInterval.properties,\n });\n }\n }\n else {\n // If there are pending changes with this ID, don't apply the remote start/end change, as the local ack\n // should be the winning change.\n const id: string = serializedInterval.properties[reservedIntervalIdKey];\n let interval: TInterval = this.getIntervalById(id);\n if (interval) {\n let start: number | undefined;\n let end: number | undefined;\n // Track pending start/end independently of one another.\n if (!this.hasPendingChangeStart(id)) {\n start = serializedInterval.start;\n }\n if (!this.hasPendingChangeEnd(id)) {\n end = serializedInterval.end;\n }\n if (start !== undefined || end !== undefined) {\n // If changeInterval gives us a new interval, work with that one. Otherwise keep working with\n // the one we originally found in the tree.\n interval = this.localCollection.changeInterval(interval, start, end) ?? interval;\n }\n const deltaProps = interval.addProperties(serializedInterval.properties, true, op.sequenceNumber);\n if (this.onDeserialize) {\n this.onDeserialize(interval);\n }\n this.emit(\"propertyChanged\", interval, deltaProps);\n }\n this.emit(\"changeInterval\", interval, local, op);\n }\n }\n\n public addConflictResolver(conflictResolver: IntervalConflictResolver<TInterval>): void {\n if (!this.attached) {\n throw new Error(\"attachSequence must be called\");\n }\n this.localCollection.addConflictResolver(conflictResolver);\n }\n\n public attachDeserializer(onDeserialize: DeserializeCallback): void {\n // If no deserializer is specified can skip all processing work\n if (!onDeserialize) {\n return;\n }\n\n // Start by storing the callbacks so that any subsequent modifications make use of them\n this.onDeserialize = onDeserialize;\n\n // Trigger the async prepare work across all values in the collection\n this.localCollection.map((interval) => {\n this.onDeserialize(interval);\n });\n }\n\n public addInternal(\n serializedInterval: ISerializedInterval,\n local: boolean,\n op: ISequencedDocumentMessage) {\n if (!this.attached) {\n throw new Error(\"attachSequence must be called\");\n }\n\n this.localCollection.ensureSerializedId(serializedInterval);\n\n const interval: TInterval = this.localCollection.addInterval(\n serializedInterval.start,\n serializedInterval.end,\n serializedInterval.intervalType,\n serializedInterval.properties);\n\n if (interval) {\n // Local ops get submitted to the server. Remote ops have the deserializer run.\n if (local) {\n // Review: Is this case possible?\n this.emitter.emit(\"add\", undefined, serializedInterval);\n } else {\n if (this.onDeserialize) {\n this.onDeserialize(interval);\n }\n }\n }\n\n this.emit(\"addInterval\", interval, local, op);\n\n return interval;\n }\n\n public deleteInterval(\n serializedInterval: ISerializedInterval,\n local: boolean,\n op: ISequencedDocumentMessage): void {\n if (!this.attached) {\n throw new Error(\"attach must be called prior to deleting intervals\");\n }\n\n this.localCollection.ensureSerializedId(serializedInterval);\n const interval = this.localCollection.getIntervalById(serializedInterval.properties[reservedIntervalIdKey]);\n if (interval) {\n this.deleteExistingInterval(interval, local, op);\n }\n }\n\n public serializeInternal() {\n if (!this.attached) {\n throw new Error(\"attachSequence must be called\");\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return this.localCollection.serialize();\n }\n\n public [Symbol.iterator](): IntervalCollectionIterator<TInterval> {\n const iterator = new IntervalCollectionIterator<TInterval>(this);\n return iterator;\n }\n\n public CreateForwardIteratorWithStartPosition(startPosition: number): IntervalCollectionIterator<TInterval> {\n const iterator = new IntervalCollectionIterator<TInterval>(this, true, startPosition);\n return iterator;\n }\n\n public CreateBackwardIteratorWithStartPosition(startPosition: number): IntervalCollectionIterator<TInterval> {\n const iterator = new IntervalCollectionIterator<TInterval>(this, false, startPosition);\n return iterator;\n }\n\n public CreateForwardIteratorWithEndPosition(endPosition: number): IntervalCollectionIterator<TInterval> {\n const iterator = new IntervalCollectionIterator<TInterval>(this, true, undefined, endPosition);\n return iterator;\n }\n\n public CreateBackwardIteratorWithEndPosition(endPosition: number): IntervalCollectionIterator<TInterval> {\n const iterator = new IntervalCollectionIterator<TInterval>(this, false, undefined, endPosition);\n return iterator;\n }\n\n public gatherIterationResults(\n results: TInterval[],\n iteratesForward: boolean,\n start?: number,\n end?: number) {\n if (!this.attached) {\n return;\n }\n\n this.localCollection.gatherIterationResults(results, iteratesForward, start, end);\n }\n\n public findOverlappingIntervals(startPosition: number, endPosition: number): TInterval[] {\n if (!this.attached) {\n throw new Error(\"attachSequence must be called\");\n }\n\n return this.localCollection.findOverlappingIntervals(startPosition, endPosition);\n }\n\n public map(fn: (interval: TInterval) => void) {\n if (!this.attached) {\n throw new Error(\"attachSequence must be called\");\n }\n\n this.localCollection.map(fn);\n }\n\n public previousInterval(pos: number): TInterval {\n if (!this.attached) {\n throw new Error(\"attachSequence must be called\");\n }\n\n return this.localCollection.previousInterval(pos);\n }\n\n public nextInterval(pos: number): TInterval {\n if (!this.attached) {\n throw new Error(\"attachSequence must be called\");\n }\n\n return this.localCollection.nextInterval(pos);\n }\n}\n"]}
1
+ {"version":3,"file":"intervalCollection.js","sourceRoot":"","sources":["../src/intervalCollection.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable no-bitwise */\n\nimport { TypedEventEmitter } from \"@fluidframework/common-utils\";\nimport { IEvent } from \"@fluidframework/common-definitions\";\nimport {\n addProperties,\n Client,\n ConflictAction,\n createMap,\n ICombiningOp,\n IInterval,\n IntervalConflictResolver,\n IntervalNode,\n IntervalTree,\n IntervalType,\n LocalReference,\n MergeTree,\n MergeTreeDeltaType,\n ordinalToArray,\n PropertiesManager,\n PropertySet,\n RedBlackTree,\n ReferenceType,\n reservedRangeLabelsKey,\n UnassignedSequenceNumber,\n} from \"@fluidframework/merge-tree\";\nimport { ISequencedDocumentMessage } from \"@fluidframework/protocol-definitions\";\nimport { v4 as uuid } from \"uuid\";\nimport { IValueFactory, IValueOpEmitter, IValueOperation, IValueType } from \"./mapKernelInterfaces\";\n\nconst reservedIntervalIdKey = \"intervalId\";\n\nexport interface ISerializedInterval {\n sequenceNumber: number;\n start: number;\n end: number;\n intervalType: IntervalType;\n properties?: PropertySet;\n}\n\nexport interface ISerializableInterval extends IInterval {\n properties: PropertySet;\n propertyManager: PropertiesManager;\n serialize(client: Client): ISerializedInterval;\n addProperties(props: PropertySet, collaborating?: boolean, seq?: number):\n PropertySet | undefined;\n getIntervalId(): string | undefined;\n}\n\nexport interface IIntervalHelpers<TInterval extends ISerializableInterval> {\n compareEnds(a: TInterval, b: TInterval): number;\n create(label: string, start: number, end: number,\n client: Client, intervalType?: IntervalType): TInterval;\n}\n\nexport class Interval implements ISerializableInterval {\n public properties: PropertySet;\n public auxProps: PropertySet[];\n public propertyManager: PropertiesManager;\n constructor(\n public start: number,\n public end: number,\n props?: PropertySet) {\n if (props) {\n this.addProperties(props);\n }\n }\n\n public getIntervalId(): string | undefined {\n const id = this.properties?.[reservedIntervalIdKey];\n if (id === undefined) {\n return undefined;\n }\n return `${id}`;\n }\n\n public getAdditionalPropertySets() {\n return this.auxProps;\n }\n\n public addPropertySet(props: PropertySet) {\n if (this.auxProps === undefined) {\n this.auxProps = [];\n }\n this.auxProps.push(props);\n }\n\n public serialize(client: Client) {\n let seq = 0;\n if (client) {\n seq = client.getCurrentSeq();\n }\n\n const serializedInterval: ISerializedInterval = {\n end: this.end,\n intervalType: 0,\n sequenceNumber: seq,\n start: this.start,\n };\n if (this.properties) {\n serializedInterval.properties = this.properties;\n }\n return serializedInterval;\n }\n\n public clone() {\n return new Interval(this.start, this.end, this.properties);\n }\n\n public compare(b: Interval) {\n const startResult = this.compareStart(b);\n if (startResult === 0) {\n const endResult = this.compareEnd(b);\n if (endResult === 0) {\n const thisId = this.getIntervalId();\n if (thisId) {\n const bId = b.getIntervalId();\n if (bId) {\n return thisId > bId ? 1 : thisId < bId ? -1 : 0;\n }\n return 0;\n }\n return 0;\n }\n else {\n return endResult;\n }\n } else {\n return startResult;\n }\n }\n\n public compareStart(b: Interval) {\n return this.start - b.start;\n }\n\n public compareEnd(b: Interval) {\n return this.end - b.end;\n }\n\n public overlaps(b: Interval) {\n const result = (this.start < b.end) &&\n (this.end >= b.start);\n return result;\n }\n\n public union(b: Interval) {\n return new Interval(Math.min(this.start, b.start),\n Math.max(this.end, b.end), this.properties);\n }\n\n public getProperties() {\n return this.properties;\n }\n\n public addProperties(\n newProps: PropertySet,\n collaborating: boolean = false,\n seq?: number,\n op?: ICombiningOp,\n ): PropertySet | undefined {\n if (newProps) {\n if (!this.propertyManager) {\n this.propertyManager = new PropertiesManager();\n }\n if (!this.properties) {\n this.properties = createMap<any>();\n }\n return this.propertyManager.addProperties(this.properties, newProps, op, seq, collaborating);\n }\n }\n\n public modify(label: string, start: number, end: number) {\n const startPos = start ?? this.start;\n const endPos = end ?? this.end;\n if (this.start === startPos && this.end === endPos) {\n // Return undefined to indicate that no change is necessary.\n return;\n }\n return new Interval(startPos, endPos, this.properties);\n }\n}\n\nexport class SequenceInterval implements ISerializableInterval {\n public properties: PropertySet;\n public propertyManager: PropertiesManager;\n private readonly checkMergeTree: MergeTree;\n\n constructor(\n public start: LocalReference,\n public end: LocalReference,\n public intervalType: IntervalType,\n props?: PropertySet) {\n if (props) {\n this.addProperties(props);\n }\n }\n\n public serialize(client: Client) {\n const startPosition = this.start.toPosition();\n const endPosition = this.end.toPosition();\n const serializedInterval: ISerializedInterval = {\n end: endPosition,\n intervalType: this.intervalType,\n sequenceNumber: client.getCurrentSeq(),\n start: startPosition,\n };\n if (this.properties) {\n serializedInterval.properties = this.properties;\n }\n return serializedInterval;\n }\n\n public clone() {\n return new SequenceInterval(this.start, this.end, this.intervalType, this.properties);\n }\n\n public compare(b: SequenceInterval) {\n const startResult = this.compareStart(b);\n if (startResult === 0) {\n const endResult = this.compareEnd(b);\n if (endResult === 0) {\n const thisId = this.getIntervalId();\n if (thisId) {\n const bId = b.getIntervalId();\n if (bId) {\n return thisId > bId ? 1 : thisId < bId ? -1 : 0;\n }\n return 0;\n }\n return 0;\n }\n else {\n return endResult;\n }\n } else {\n return startResult;\n }\n }\n\n public compareStart(b: SequenceInterval) {\n return this.start.compare(b.start);\n }\n\n public compareEnd(b: SequenceInterval) {\n return this.end.compare(b.end);\n }\n\n public overlaps(b: SequenceInterval) {\n const result = (this.start.compare(b.end) < 0) &&\n (this.end.compare(b.start) >= 0);\n if (this.checkMergeTree) {\n this.checkOverlaps(b, result);\n }\n return result;\n }\n\n public getIntervalId(): string | undefined {\n const id = this.properties?.[reservedIntervalIdKey];\n if (id === undefined) {\n return undefined;\n }\n return `${id}`;\n }\n\n public union(b: SequenceInterval) {\n return new SequenceInterval(this.start.min(b.start),\n this.end.max(b.end), this.intervalType);\n }\n\n public addProperties(\n newProps: PropertySet,\n collab: boolean = false,\n seq?: number,\n op?: ICombiningOp,\n ): PropertySet | undefined {\n if (!this.propertyManager) {\n this.propertyManager = new PropertiesManager();\n }\n if (!this.properties) {\n this.properties = createMap<any>();\n }\n return this.propertyManager.addProperties(this.properties, newProps, op, seq, collab);\n }\n\n public overlapsPos(bstart: number, bend: number) {\n const startPos = this.start.toPosition();\n const endPos = this.start.toPosition();\n return (endPos > bstart) && (startPos < bend);\n }\n\n private checkOverlaps(b: SequenceInterval, result: boolean) {\n const astart = this.start.toPosition();\n const bstart = b.start.toPosition();\n const aend = this.end.toPosition();\n const bend = b.end.toPosition();\n const checkResult = ((astart < bend) && (bstart < aend));\n if (checkResult !== result) {\n // eslint-disable-next-line max-len\n console.log(`check mismatch: res ${result} ${this.start.segment === b.end.segment} ${b.start.segment === this.end.segment}`);\n console.log(`as ${astart} ae ${aend} bs ${bstart} be ${bend}`);\n console.log(`as ${ordinalToArray(this.start.segment.ordinal)}@${this.start.offset}`);\n console.log(`ae ${ordinalToArray(this.end.segment.ordinal)}@${this.end.offset}`);\n console.log(`bs ${ordinalToArray(b.start.segment.ordinal)}@${b.start.offset}`);\n console.log(`be ${ordinalToArray(b.end.segment.ordinal)}@${b.end.offset}`);\n console.log(this.checkMergeTree.nodeToString(b.start.segment.parent, \"\"));\n }\n }\n\n public modify(label: string, start: number, end: number) {\n const startPos = start ?? this.start.getOffset();\n const endPos = end ?? this.end.getOffset();\n\n if (this.start.getOffset() === startPos && this.end.getOffset() === endPos) {\n // Return undefined to indicate that no change is necessary.\n return;\n }\n\n const newInterval = createSequenceInterval(label, startPos, endPos, this.start.getClient(), this.intervalType);\n if (this.properties) {\n newInterval.addProperties(this.properties);\n }\n return newInterval;\n }\n}\n\nfunction createPositionReference(\n client: Client,\n pos: number,\n refType: ReferenceType): LocalReference {\n const segoff = client.getContainingSegment(pos);\n if (segoff && segoff.segment) {\n const lref = new LocalReference(client, segoff.segment, segoff.offset, refType);\n if (refType !== ReferenceType.Transient) {\n client.addLocalReference(lref);\n }\n return lref;\n }\n return new LocalReference(client, undefined);\n}\n\nfunction createSequenceInterval(\n label: string,\n start: number,\n end: number,\n client: Client,\n intervalType: IntervalType): SequenceInterval {\n let beginRefType = ReferenceType.RangeBegin;\n let endRefType = ReferenceType.RangeEnd;\n if (intervalType === IntervalType.Nest) {\n beginRefType = ReferenceType.NestBegin;\n endRefType = ReferenceType.NestEnd;\n } else if (intervalType === IntervalType.Transient) {\n beginRefType = ReferenceType.Transient;\n endRefType = ReferenceType.Transient;\n }\n\n // TODO: Should SlideOnRemove be the default behavior?\n if (intervalType & IntervalType.SlideOnRemove) {\n beginRefType |= ReferenceType.SlideOnRemove;\n endRefType |= ReferenceType.SlideOnRemove;\n }\n\n const startLref = createPositionReference(client, start, beginRefType);\n const endLref = createPositionReference(client, end, endRefType);\n if (startLref && endLref) {\n startLref.pairedRef = endLref;\n endLref.pairedRef = startLref;\n const rangeProp = {\n [reservedRangeLabelsKey]: [label],\n };\n startLref.addProperties(rangeProp);\n endLref.addProperties(rangeProp);\n\n const ival = new SequenceInterval(startLref, endLref, intervalType, rangeProp);\n return ival;\n }\n}\n\nexport function defaultIntervalConflictResolver(a: Interval, b: Interval) {\n a.addPropertySet(b.properties);\n return a;\n}\n\nexport function createIntervalIndex(conflict?: IntervalConflictResolver<Interval>) {\n const helpers: IIntervalHelpers<Interval> = {\n compareEnds: compareIntervalEnds,\n create: createInterval,\n };\n const lc = new LocalIntervalCollection<Interval>(undefined, \"\", helpers);\n if (conflict) {\n lc.addConflictResolver(conflict);\n } else {\n lc.addConflictResolver(defaultIntervalConflictResolver);\n }\n return lc;\n}\n\nexport class LocalIntervalCollection<TInterval extends ISerializableInterval> {\n private readonly intervalTree = new IntervalTree<TInterval>();\n private readonly endIntervalTree: RedBlackTree<TInterval, TInterval>;\n private conflictResolver: IntervalConflictResolver<TInterval>;\n private endConflictResolver: ConflictAction<TInterval, TInterval>;\n\n private static readonly legacyIdPrefix = \"legacy\";\n\n constructor(\n private readonly client: Client,\n private readonly label: string,\n private readonly helpers: IIntervalHelpers<TInterval>) {\n this.endIntervalTree =\n // eslint-disable-next-line @typescript-eslint/unbound-method\n new RedBlackTree<TInterval, TInterval>(helpers.compareEnds);\n }\n\n public addConflictResolver(conflictResolver: IntervalConflictResolver<TInterval>) {\n this.conflictResolver = conflictResolver;\n this.endConflictResolver =\n (key: TInterval, currentKey: TInterval) => {\n const ival = this.conflictResolver(key, currentKey);\n return {\n data: ival,\n key: ival,\n };\n };\n }\n\n public map(fn: (interval: TInterval) => void) {\n this.intervalTree.map(fn);\n }\n\n public createLegacyId(start: number, end: number): string {\n // Create a non-unique ID based on start and end to be used on intervals that come from legacy clients\n // without ID's.\n return `${LocalIntervalCollection.legacyIdPrefix}${start}-${end}`;\n }\n\n public ensureSerializedId(serializedInterval: ISerializedInterval) {\n if (serializedInterval.properties?.[reservedIntervalIdKey] === undefined) {\n // An interval came over the wire without an ID, so create a non-unique one based on start/end.\n // This will allow all clients to refer to this interval consistently.\n const newProps = {\n [reservedIntervalIdKey]: this.createLegacyId(serializedInterval.start, serializedInterval.end),\n };\n serializedInterval.properties = addProperties(serializedInterval.properties, newProps);\n }\n // Make the ID immutable for safety's sake.\n Object.defineProperty(serializedInterval.properties, reservedIntervalIdKey, {\n configurable: false,\n enumerable: true,\n writable: false,\n });\n }\n\n public mapUntil(fn: (interval: TInterval) => boolean) {\n this.intervalTree.mapUntil(fn);\n }\n\n public gatherIterationResults(\n results: TInterval[],\n iteratesForward: boolean,\n start?: number,\n end?: number) {\n if (this.intervalTree.intervals.isEmpty()) {\n return;\n }\n\n if (start === undefined && end === undefined) {\n // No start/end provided. Gather the whole tree in the specified order.\n if (iteratesForward) {\n this.intervalTree.map((interval: TInterval) => {\n results.push(interval);\n });\n }\n else {\n this.intervalTree.mapBackward((interval: TInterval) => {\n results.push(interval);\n });\n }\n }\n else {\n const transientInterval: TInterval = this.helpers.create(\n \"transient\",\n start,\n end,\n this.client,\n IntervalType.Transient,\n );\n\n if (start === undefined) {\n // Only end position provided. Since the tree is not sorted by end position,\n // walk the whole tree in the specified order, gathering intervals that match the end.\n if (iteratesForward) {\n this.intervalTree.map((interval: TInterval) => {\n if (transientInterval.compareEnd(interval) === 0) {\n results.push(interval);\n }\n });\n }\n else {\n this.intervalTree.mapBackward((interval: TInterval) => {\n if (transientInterval.compareEnd(interval) === 0) {\n results.push(interval);\n }\n });\n }\n }\n else {\n // Start and (possibly) end provided. Walk the subtrees that may contain\n // this start position.\n const compareFn =\n end === undefined ?\n (node: IntervalNode<TInterval>) => {\n return transientInterval.compareStart(node.key);\n } :\n (node: IntervalNode<TInterval>) => {\n return transientInterval.compare(node.key);\n };\n const continueLeftFn = (cmpResult: number) => cmpResult <= 0;\n const continueRightFn = (cmpResult: number) => cmpResult >= 0;\n const actionFn = (node: IntervalNode<TInterval>) => {\n results.push(node.key);\n };\n\n if (iteratesForward) {\n this.intervalTree.intervals.walkExactMatchesForward(\n compareFn, actionFn, continueLeftFn, continueRightFn,\n );\n }\n else {\n this.intervalTree.intervals.walkExactMatchesBackward(\n compareFn, actionFn, continueLeftFn, continueRightFn,\n );\n }\n }\n }\n }\n\n public findOverlappingIntervals(startPosition: number, endPosition: number) {\n if (!this.intervalTree.intervals.isEmpty()) {\n const transientInterval =\n this.helpers.create(\n \"transient\",\n startPosition,\n endPosition,\n this.client,\n IntervalType.Transient);\n\n const overlappingIntervalNodes = this.intervalTree.match(transientInterval);\n return overlappingIntervalNodes.map((node) => node.key);\n } else {\n return [];\n }\n }\n\n public previousInterval(pos: number) {\n const transientInterval = this.helpers.create(\n \"transient\", pos, pos, this.client, IntervalType.Transient);\n const rbNode = this.endIntervalTree.floor(transientInterval);\n if (rbNode) {\n return rbNode.data;\n }\n }\n\n public nextInterval(pos: number) {\n const transientInterval = this.helpers.create(\n \"transient\", pos, pos, this.client, IntervalType.Transient);\n const rbNode = this.endIntervalTree.ceil(transientInterval);\n if (rbNode) {\n return rbNode.data;\n }\n }\n\n public removeInterval(startPosition: number, endPosition: number) {\n const transientInterval = this.helpers.create(\n \"transient\", startPosition, endPosition, this.client, IntervalType.Transient);\n this.intervalTree.remove(transientInterval);\n this.endIntervalTree.remove(transientInterval);\n return transientInterval;\n }\n\n public removeExistingInterval(interval: TInterval) {\n this.intervalTree.removeExisting(interval);\n this.endIntervalTree.remove(interval);\n }\n\n public createInterval(start: number, end: number, intervalType: IntervalType): TInterval {\n return this.helpers.create(this.label, start, end, this.client, intervalType);\n }\n\n public addInterval(\n start: number,\n end: number,\n intervalType: IntervalType,\n props?: PropertySet) {\n const interval: TInterval = this.createInterval(start, end, intervalType);\n if (interval) {\n if (!interval.properties) {\n interval.properties = createMap<any>();\n }\n if (props) {\n interval.addProperties(props);\n }\n if (interval.properties[reservedIntervalIdKey] === undefined) {\n // Create a new ID.\n interval.properties[reservedIntervalIdKey] = uuid();\n }\n // Make the ID immutable.\n Object.defineProperty(interval.properties, reservedIntervalIdKey, {\n configurable: false,\n enumerable: true,\n writable: false,\n });\n this.add(interval);\n }\n return interval;\n }\n\n public add(interval: TInterval) {\n this.intervalTree.put(interval, this.conflictResolver);\n this.endIntervalTree.put(interval, interval, this.endConflictResolver);\n }\n\n public getIntervalById(id: string) {\n let result: TInterval | undefined;\n this.mapUntil((interval: TInterval) => {\n if (interval.getIntervalId() === id) {\n result = interval;\n return false;\n }\n return true;\n });\n return result;\n }\n\n public changeInterval(interval: TInterval, start: number, end: number) {\n const newInterval = interval.modify(this.label, start, end) as TInterval | undefined;\n if (newInterval) {\n this.removeExistingInterval(interval);\n this.add(newInterval);\n }\n return newInterval;\n }\n\n public serialize() {\n const client = this.client;\n const intervals = this.intervalTree.intervals.keys();\n return intervals.map((interval) => interval.serialize(client));\n }\n}\n\nconst compareSequenceIntervalEnds = (a: SequenceInterval, b: SequenceInterval): number => a.end.compare(b.end);\n\nclass SequenceIntervalCollectionFactory\n implements IValueFactory<IntervalCollection<SequenceInterval>> {\n public load(\n emitter: IValueOpEmitter,\n raw: ISerializedInterval[] = [],\n ): IntervalCollection<SequenceInterval> {\n const helpers: IIntervalHelpers<SequenceInterval> = {\n compareEnds: compareSequenceIntervalEnds,\n create: createSequenceInterval,\n };\n return new IntervalCollection<SequenceInterval>(helpers, true, emitter, raw);\n }\n\n public store(value: IntervalCollection<SequenceInterval>): ISerializedInterval[] {\n return value.serializeInternal();\n }\n}\n\nexport class SequenceIntervalCollectionValueType\n implements IValueType<IntervalCollection<SequenceInterval>> {\n public static Name = \"sharedStringIntervalCollection\";\n\n public get name(): string {\n return SequenceIntervalCollectionValueType.Name;\n }\n\n public get factory(): IValueFactory<IntervalCollection<SequenceInterval>> {\n return SequenceIntervalCollectionValueType._factory;\n }\n\n public get ops(): Map<string, IValueOperation<IntervalCollection<SequenceInterval>>> {\n return SequenceIntervalCollectionValueType._ops;\n }\n\n private static readonly _factory: IValueFactory<IntervalCollection<SequenceInterval>> =\n new SequenceIntervalCollectionFactory();\n\n private static readonly _ops: Map<string, IValueOperation<IntervalCollection<SequenceInterval>>> =\n new Map<string, IValueOperation<IntervalCollection<SequenceInterval>>>(\n [[\n \"add\",\n {\n process: (value, params, local, op) => {\n // Local ops were applied when the message was created\n if (local) {\n return;\n }\n\n value.addInternal(params, local, op);\n },\n },\n ],\n [\n \"delete\",\n {\n process: (value, params, local, op) => {\n if (local) {\n return;\n }\n value.deleteInterval(params, local, op);\n },\n },\n ],\n [\n \"change\",\n {\n process: (value, params, local, op) => {\n value.changeInterval(params, local, op);\n },\n },\n ]]);\n}\n\nconst compareIntervalEnds = (a: Interval, b: Interval) => a.end - b.end;\n\nfunction createInterval(label: string, start: number, end: number, client: Client): Interval {\n let rangeProp: PropertySet;\n if (label && (label.length > 0)) {\n rangeProp = {\n [reservedRangeLabelsKey]: [label],\n };\n }\n return new Interval(start, end, rangeProp);\n}\n\nclass IntervalCollectionFactory\n implements IValueFactory<IntervalCollection<Interval>> {\n public load(emitter: IValueOpEmitter, raw: ISerializedInterval[] = []): IntervalCollection<Interval> {\n const helpers: IIntervalHelpers<Interval> = {\n compareEnds: compareIntervalEnds,\n create: createInterval,\n };\n const collection = new IntervalCollection<Interval>(helpers, false, emitter, raw);\n collection.attachGraph(undefined, \"\");\n return collection;\n }\n\n public store(value: IntervalCollection<Interval>): ISerializedInterval[] {\n return value.serializeInternal();\n }\n}\n\nexport class IntervalCollectionValueType\n implements IValueType<IntervalCollection<Interval>> {\n public static Name = \"sharedIntervalCollection\";\n\n public get name(): string {\n return IntervalCollectionValueType.Name;\n }\n\n public get factory(): IValueFactory<IntervalCollection<Interval>> {\n return IntervalCollectionValueType._factory;\n }\n\n public get ops(): Map<string, IValueOperation<IntervalCollection<Interval>>> {\n return IntervalCollectionValueType._ops;\n }\n\n private static readonly _factory: IValueFactory<IntervalCollection<Interval>> =\n new IntervalCollectionFactory();\n private static readonly _ops: Map<string, IValueOperation<IntervalCollection<Interval>>> =\n new Map<string, IValueOperation<IntervalCollection<Interval>>>(\n [[\n \"add\",\n {\n process: (value, params, local, op) => {\n // Local ops were applied when the message was created\n if (local) {\n return;\n }\n\n value.addInternal(params, local, op);\n },\n },\n ],\n [\n \"delete\",\n {\n process: (value, params, local, op) => {\n if (local) {\n return;\n }\n value.deleteInterval(params, local, op);\n },\n },\n ],\n [\n \"change\",\n {\n process: (value, params, local, op) => {\n value.changeInterval(params, local, op);\n },\n },\n ]]);\n}\n\nexport type DeserializeCallback = (properties: PropertySet) => void;\n\nexport class IntervalCollectionIterator<TInterval extends ISerializableInterval> {\n private readonly results: TInterval[];\n private index: number;\n\n constructor(\n collection: IntervalCollection<TInterval>,\n iteratesForward: boolean = true,\n start?: number,\n end?: number) {\n this.results = [];\n this.index = 0;\n\n collection.gatherIterationResults(this.results, iteratesForward, start, end);\n }\n\n public next() {\n let _value: TInterval | undefined;\n let _done: boolean = true;\n\n if (this.index < this.results.length) {\n _value = this.results[this.index++];\n _done = false;\n }\n\n return {\n value: _value,\n done: _done,\n };\n }\n}\n\nexport interface IIntervalCollectionEvent<TInterval extends ISerializableInterval> extends IEvent {\n (event: \"addInterval\" | \"deleteInterval\",\n listener: (interval: TInterval, local: boolean, op: ISequencedDocumentMessage) => void);\n (event: \"propertyChanged\", listener: (interval: TInterval, propertyArgs: PropertySet) => void);\n}\n\nexport class IntervalCollection<TInterval extends ISerializableInterval>\n extends TypedEventEmitter<IIntervalCollectionEvent<TInterval>> {\n private savedSerializedIntervals?: ISerializedInterval[];\n private localCollection: LocalIntervalCollection<TInterval>;\n private onDeserialize: DeserializeCallback;\n private client: Client;\n private pendingChangeStart: Map<string, ISerializedInterval[]>;\n private pendingChangeEnd: Map<string, ISerializedInterval[]>;\n\n public get attached(): boolean {\n return !!this.localCollection;\n }\n\n constructor(private readonly helpers: IIntervalHelpers<TInterval>, private readonly requiresClient: boolean,\n private readonly emitter: IValueOpEmitter,\n serializedIntervals: ISerializedInterval[]) {\n super();\n this.savedSerializedIntervals = serializedIntervals;\n }\n\n public attachGraph(client: Client, label: string) {\n if (this.attached) {\n throw new Error(\"Only supports one Sequence attach\");\n }\n\n if ((client === undefined) && (this.requiresClient)) {\n throw new Error(\"Client required for this collection\");\n }\n\n // Instantiate the local interval collection based on the saved intervals\n this.client = client;\n this.localCollection = new LocalIntervalCollection<TInterval>(client, label, this.helpers);\n if (this.savedSerializedIntervals) {\n for (const serializedInterval of this.savedSerializedIntervals) {\n this.localCollection.ensureSerializedId(serializedInterval);\n this.localCollection.addInterval(\n serializedInterval.start,\n serializedInterval.end,\n serializedInterval.intervalType,\n serializedInterval.properties);\n }\n }\n this.savedSerializedIntervals = undefined;\n }\n\n public getIntervalById(id: string) {\n if (!this.attached) {\n throw new Error(\"attach must be called before accessing intervals\");\n }\n return this.localCollection.getIntervalById(id);\n }\n\n public add(\n start: number,\n end: number,\n intervalType: IntervalType,\n props?: PropertySet,\n ) {\n if (!this.attached) {\n throw new Error(\"attach must be called prior to adding intervals\");\n }\n\n const interval: TInterval = this.localCollection.addInterval(start, end, intervalType, props);\n\n if (interval) {\n const serializedInterval = {\n end,\n intervalType,\n properties: interval.properties,\n sequenceNumber: this.client?.getCurrentSeq() ?? 0,\n start,\n };\n // Local ops get submitted to the server. Remote ops have the deserializer run.\n this.emitter.emit(\"add\", undefined, serializedInterval);\n }\n\n this.emit(\"addInterval\", interval, true, undefined);\n\n return interval;\n }\n\n private deleteExistingInterval(interval: TInterval, local: boolean, op: ISequencedDocumentMessage) {\n // The given interval is known to exist in the collection.\n this.localCollection.removeExistingInterval(interval);\n if (interval) {\n // Local ops get submitted to the server. Remote ops have the deserializer run.\n if (local) {\n this.emitter.emit(\"delete\", undefined, interval.serialize(this.client));\n } else {\n if (this.onDeserialize) {\n this.onDeserialize(interval);\n }\n }\n }\n\n this.emit(\"deleteInterval\", interval, local, op);\n }\n\n public removeIntervalById(id: string) {\n const interval = this.localCollection.getIntervalById(id);\n if (interval) {\n this.deleteExistingInterval(interval, true, undefined);\n }\n return interval;\n }\n\n public changeProperties(id: string, props: PropertySet) {\n if (!this.attached) {\n throw new Error(\"Attach must be called before accessing intervals\");\n }\n if (typeof(id) !== \"string\") {\n throw new Error(\"Change API requires an ID that is a string\");\n }\n if (!props) {\n throw new Error(\"changeProperties should be called with a property set\");\n }\n\n const interval = this.getIntervalById(id);\n if (interval) {\n // Pass Unassigned as the sequence number to indicate that this is a local op that is waiting for an ack.\n const deltaProps = interval.addProperties(props, true, UnassignedSequenceNumber);\n const serializedInterval: ISerializedInterval = interval.serialize(this.client);\n // Emit a change op that will only change properties. Add the ID to the property bag provided by the caller.\n serializedInterval.start = undefined;\n serializedInterval.end = undefined;\n serializedInterval.properties = props;\n serializedInterval.properties[reservedIntervalIdKey] = interval.getIntervalId();\n this.emitter.emit(\"change\", undefined, serializedInterval);\n this.emit(\"propertyChanged\", interval, deltaProps);\n }\n this.emit(\"change\", interval, true, undefined);\n }\n\n public change(id: string, start?: number, end?: number): TInterval | undefined {\n if (!this.attached) {\n throw new Error(\"Attach must be called before accessing intervals\");\n }\n if (typeof(id) !== \"string\") {\n throw new Error(\"Change API requires an ID that is a string\");\n }\n\n // Force id to be a string.\n const interval = this.getIntervalById(id);\n if (interval) {\n this.localCollection.changeInterval(interval, start, end);\n const serializedInterval: ISerializedInterval = interval.serialize(this.client);\n serializedInterval.start = start;\n serializedInterval.end = end;\n // Emit a property bag containing only the ID, as we don't intend for this op to change any properties.\n serializedInterval.properties =\n {\n [reservedIntervalIdKey]: interval.getIntervalId(),\n };\n this.emitter.emit(\"change\", undefined, serializedInterval);\n this.addPendingChange(id, serializedInterval);\n }\n this.emit(\"change\", interval, true, undefined);\n return interval;\n }\n\n private addPendingChange(id: string, serializedInterval: ISerializedInterval) {\n if (serializedInterval.start !== undefined) {\n if (!this.pendingChangeStart) {\n this.pendingChangeStart = new Map<string, ISerializedInterval[]>();\n }\n this.addPendingChangeHelper(id, this.pendingChangeStart, serializedInterval);\n }\n if (serializedInterval.end !== undefined) {\n if (!this.pendingChangeEnd) {\n this.pendingChangeEnd = new Map<string, ISerializedInterval[]>();\n }\n this.addPendingChangeHelper(id, this.pendingChangeEnd, serializedInterval);\n }\n }\n\n private addPendingChangeHelper(\n id: string,\n pendingChanges: Map<string, ISerializedInterval[]>,\n serializedInterval: ISerializedInterval,\n ) {\n let entries: ISerializedInterval[] = pendingChanges.get(id);\n if (!entries) {\n entries = [];\n pendingChanges.set(id, entries);\n }\n entries.push(serializedInterval);\n }\n\n private removePendingChange(serializedInterval: ISerializedInterval) {\n // Change ops always have an ID.\n const id: string = serializedInterval.properties[reservedIntervalIdKey];\n if (serializedInterval.start !== undefined) {\n this.removePendingChangeHelper(id, this.pendingChangeStart, serializedInterval);\n }\n if (serializedInterval.end !== undefined) {\n this.removePendingChangeHelper(id, this.pendingChangeEnd, serializedInterval);\n }\n }\n\n private removePendingChangeHelper(\n id: string,\n pendingChanges: Map<string, ISerializedInterval[]>,\n serializedInterval: ISerializedInterval,\n ) {\n const entries = pendingChanges?.get(id);\n if (entries) {\n const pendingChange = entries.shift();\n if (entries.length === 0) {\n pendingChanges.delete(id);\n }\n if (pendingChange.start !== serializedInterval.start ||\n pendingChange.end !== serializedInterval.end) {\n throw new Error(\"Mismatch in pending changes\");\n }\n }\n }\n\n private hasPendingChangeStart(id: string) {\n const entries = this.pendingChangeStart?.get(id);\n return entries && entries.length !== 0;\n }\n\n private hasPendingChangeEnd(id: string) {\n const entries = this.pendingChangeEnd?.get(id);\n return entries && entries.length !== 0;\n }\n\n public changeInterval(serializedInterval: ISerializedInterval, local: boolean, op: ISequencedDocumentMessage) {\n if (!this.attached) {\n throw new Error(\"Attach must be called before accessing intervals\");\n }\n\n if (local) {\n // This is an ack from the server. Remove the pending change.\n this.removePendingChange(serializedInterval);\n const id: string = serializedInterval.properties[reservedIntervalIdKey];\n const interval: TInterval = this.getIntervalById(id);\n if (interval) {\n // Let the propertyManager prune its pending change-properties set.\n interval.propertyManager?.ackPendingProperties(\n {\n type: MergeTreeDeltaType.ANNOTATE,\n props: serializedInterval.properties,\n });\n }\n }\n else {\n // If there are pending changes with this ID, don't apply the remote start/end change, as the local ack\n // should be the winning change.\n const id: string = serializedInterval.properties[reservedIntervalIdKey];\n let interval: TInterval = this.getIntervalById(id);\n if (interval) {\n let start: number | undefined;\n let end: number | undefined;\n // Track pending start/end independently of one another.\n if (!this.hasPendingChangeStart(id)) {\n start = serializedInterval.start;\n }\n if (!this.hasPendingChangeEnd(id)) {\n end = serializedInterval.end;\n }\n if (start !== undefined || end !== undefined) {\n // If changeInterval gives us a new interval, work with that one. Otherwise keep working with\n // the one we originally found in the tree.\n interval = this.localCollection.changeInterval(interval, start, end) ?? interval;\n }\n const deltaProps = interval.addProperties(serializedInterval.properties, true, op.sequenceNumber);\n if (this.onDeserialize) {\n this.onDeserialize(interval);\n }\n this.emit(\"propertyChanged\", interval, deltaProps);\n }\n this.emit(\"changeInterval\", interval, local, op);\n }\n }\n\n public addConflictResolver(conflictResolver: IntervalConflictResolver<TInterval>): void {\n if (!this.attached) {\n throw new Error(\"attachSequence must be called\");\n }\n this.localCollection.addConflictResolver(conflictResolver);\n }\n\n public attachDeserializer(onDeserialize: DeserializeCallback): void {\n // If no deserializer is specified can skip all processing work\n if (!onDeserialize) {\n return;\n }\n\n // Start by storing the callbacks so that any subsequent modifications make use of them\n this.onDeserialize = onDeserialize;\n\n // Trigger the async prepare work across all values in the collection\n this.localCollection.map((interval) => {\n this.onDeserialize(interval);\n });\n }\n\n public addInternal(\n serializedInterval: ISerializedInterval,\n local: boolean,\n op: ISequencedDocumentMessage) {\n if (!this.attached) {\n throw new Error(\"attachSequence must be called\");\n }\n\n this.localCollection.ensureSerializedId(serializedInterval);\n\n const interval: TInterval = this.localCollection.addInterval(\n serializedInterval.start,\n serializedInterval.end,\n serializedInterval.intervalType,\n serializedInterval.properties);\n\n if (interval) {\n // Local ops get submitted to the server. Remote ops have the deserializer run.\n if (local) {\n // Review: Is this case possible?\n this.emitter.emit(\"add\", undefined, serializedInterval);\n } else {\n if (this.onDeserialize) {\n this.onDeserialize(interval);\n }\n }\n }\n\n this.emit(\"addInterval\", interval, local, op);\n\n return interval;\n }\n\n public deleteInterval(\n serializedInterval: ISerializedInterval,\n local: boolean,\n op: ISequencedDocumentMessage): void {\n if (!this.attached) {\n throw new Error(\"attach must be called prior to deleting intervals\");\n }\n\n this.localCollection.ensureSerializedId(serializedInterval);\n const interval = this.localCollection.getIntervalById(serializedInterval.properties[reservedIntervalIdKey]);\n if (interval) {\n this.deleteExistingInterval(interval, local, op);\n }\n }\n\n public serializeInternal() {\n if (!this.attached) {\n throw new Error(\"attachSequence must be called\");\n }\n\n return this.localCollection.serialize();\n }\n\n public [Symbol.iterator](): IntervalCollectionIterator<TInterval> {\n const iterator = new IntervalCollectionIterator<TInterval>(this);\n return iterator;\n }\n\n public CreateForwardIteratorWithStartPosition(startPosition: number): IntervalCollectionIterator<TInterval> {\n const iterator = new IntervalCollectionIterator<TInterval>(this, true, startPosition);\n return iterator;\n }\n\n public CreateBackwardIteratorWithStartPosition(startPosition: number): IntervalCollectionIterator<TInterval> {\n const iterator = new IntervalCollectionIterator<TInterval>(this, false, startPosition);\n return iterator;\n }\n\n public CreateForwardIteratorWithEndPosition(endPosition: number): IntervalCollectionIterator<TInterval> {\n const iterator = new IntervalCollectionIterator<TInterval>(this, true, undefined, endPosition);\n return iterator;\n }\n\n public CreateBackwardIteratorWithEndPosition(endPosition: number): IntervalCollectionIterator<TInterval> {\n const iterator = new IntervalCollectionIterator<TInterval>(this, false, undefined, endPosition);\n return iterator;\n }\n\n public gatherIterationResults(\n results: TInterval[],\n iteratesForward: boolean,\n start?: number,\n end?: number) {\n if (!this.attached) {\n return;\n }\n\n this.localCollection.gatherIterationResults(results, iteratesForward, start, end);\n }\n\n public findOverlappingIntervals(startPosition: number, endPosition: number): TInterval[] {\n if (!this.attached) {\n throw new Error(\"attachSequence must be called\");\n }\n\n return this.localCollection.findOverlappingIntervals(startPosition, endPosition);\n }\n\n public map(fn: (interval: TInterval) => void) {\n if (!this.attached) {\n throw new Error(\"attachSequence must be called\");\n }\n\n this.localCollection.map(fn);\n }\n\n public previousInterval(pos: number): TInterval {\n if (!this.attached) {\n throw new Error(\"attachSequence must be called\");\n }\n\n return this.localCollection.previousInterval(pos);\n }\n\n public nextInterval(pos: number): TInterval {\n if (!this.attached) {\n throw new Error(\"attachSequence must be called\");\n }\n\n return this.localCollection.nextInterval(pos);\n }\n}\n"]}
@@ -2,7 +2,8 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { IFluidHandle, IFluidSerializer } from "@fluidframework/core-interfaces";
5
+ import { IFluidHandle } from "@fluidframework/core-interfaces";
6
+ import { IFluidSerializer } from "@fluidframework/shared-object-base";
6
7
  import { ISerializableValue, ISerializedValue, IValueOpEmitter, IValueOperation, IValueType } from "./mapKernelInterfaces";
7
8
  /**
8
9
  * A local value to be stored in a container type DDS.
@@ -1 +1 @@
1
- {"version":3,"file":"localValues.d.ts","sourceRoot":"","sources":["../src/localValues.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACH,YAAY,EACZ,gBAAgB,EAEnB,MAAM,iCAAiC,CAAC;AAOzC,OAAO,EACH,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,UAAU,EACb,MAAM,uBAAuB,CAAC;AAE/B;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;IAEpB;;;;;OAKG;IACH,cAAc,CACV,UAAU,EAAE,gBAAgB,EAC5B,IAAI,EAAE,YAAY,GACnB,gBAAgB,CAAC;CACvB;AAED,wBAAgB,gBAAgB,CAC5B,UAAU,EAAE,WAAW,EACvB,UAAU,EAAE,gBAAgB,EAC5B,IAAI,EAAE,YAAY,GAAG,kBAAkB,CAM1C;AAED;;GAEG;AACH,qBAAa,eAAgB,YAAW,WAAW;aAKnB,KAAK,EAAE,GAAG;IAJtC;;;OAGG;gBACyB,KAAK,EAAE,GAAG;IAGtC;;OAEG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;OAEG;IACI,cAAc,CACjB,UAAU,EAAE,gBAAgB,EAC5B,IAAI,EAAE,YAAY,GACnB,gBAAgB;CAUtB;AAED;;;;;;;GAOG;AACH,qBAAa,mBAAoB,YAAW,WAAW;aAMvB,KAAK,EAAE,GAAG;IAAE,OAAO,CAAC,QAAQ,CAAC,SAAS;IALlE;;;;OAIG;gBACyB,KAAK,EAAE,GAAG,EAAmB,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC;IAGnF;;OAEG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;OAEG;IACI,cAAc,CACjB,UAAU,EAAE,gBAAgB,EAC5B,IAAI,EAAE,YAAY,GACnB,gBAAgB;IAUnB;;;;OAIG;IACI,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC;CAQ5D;AAED;;;GAGG;AACH,qBAAa,eAAe;IAUZ,OAAO,CAAC,QAAQ,CAAC,UAAU;IATvC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsC;IAEjE;;;OAGG;gBAC0B,UAAU,EAAE,gBAAgB;IAGzD;;;;OAIG;IACI,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IAI/C;;;OAGG;IACI,gBAAgB,CAAC,YAAY,EAAE,kBAAkB,GAAG,WAAW;IAgBtE;;;;OAIG;IACI,yBAAyB,CAAC,YAAY,EAAE,kBAAkB,EAAE,OAAO,EAAE,eAAe,GAAG,WAAW;IAczG;;;;OAIG;IACI,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,WAAW;IAQ5C;;;;;;;OAOG;IACI,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,GAAG,WAAW;IAMtF;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa;CASxB"}
1
+ {"version":3,"file":"localValues.d.ts","sourceRoot":"","sources":["../src/localValues.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EACH,gBAAgB,EAMnB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACH,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,UAAU,EACb,MAAM,uBAAuB,CAAC;AAE/B;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;IAEpB;;;;;OAKG;IACH,cAAc,CACV,UAAU,EAAE,gBAAgB,EAC5B,IAAI,EAAE,YAAY,GACnB,gBAAgB,CAAC;CACvB;AAED,wBAAgB,gBAAgB,CAC5B,UAAU,EAAE,WAAW,EACvB,UAAU,EAAE,gBAAgB,EAC5B,IAAI,EAAE,YAAY,GAAG,kBAAkB,CAM1C;AAED;;GAEG;AACH,qBAAa,eAAgB,YAAW,WAAW;aAKnB,KAAK,EAAE,GAAG;IAJtC;;;OAGG;gBACyB,KAAK,EAAE,GAAG;IAGtC;;OAEG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;OAEG;IACI,cAAc,CACjB,UAAU,EAAE,gBAAgB,EAC5B,IAAI,EAAE,YAAY,GACnB,gBAAgB;CAUtB;AAED;;;;;;;GAOG;AACH,qBAAa,mBAAoB,YAAW,WAAW;aAMvB,KAAK,EAAE,GAAG;IAAE,OAAO,CAAC,QAAQ,CAAC,SAAS;IALlE;;;;OAIG;gBACyB,KAAK,EAAE,GAAG,EAAmB,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC;IAGnF;;OAEG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;OAEG;IACI,cAAc,CACjB,UAAU,EAAE,gBAAgB,EAC5B,IAAI,EAAE,YAAY,GACnB,gBAAgB;IAUnB;;;;OAIG;IACI,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC;CAQ5D;AAED;;;GAGG;AACH,qBAAa,eAAe;IAUZ,OAAO,CAAC,QAAQ,CAAC,UAAU;IATvC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsC;IAEjE;;;OAGG;gBAC0B,UAAU,EAAE,gBAAgB;IAGzD;;;;OAIG;IACI,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IAI/C;;;OAGG;IACI,gBAAgB,CAAC,YAAY,EAAE,kBAAkB,GAAG,WAAW;IAgBtE;;;;OAIG;IACI,yBAAyB,CAAC,YAAY,EAAE,kBAAkB,EAAE,OAAO,EAAE,eAAe,GAAG,WAAW;IAczG;;;;OAIG;IACI,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,WAAW;IAQ5C;;;;;;;OAOG;IACI,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,GAAG,WAAW;IAMtF;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa;CASxB"}