@fluidframework/merge-tree 0.51.0 → 0.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/collections.d.ts +41 -92
- package/dist/collections.d.ts.map +1 -1
- package/dist/collections.js +4 -334
- package/dist/collections.js.map +1 -1
- package/dist/index.d.ts +10 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -12
- package/dist/index.js.map +1 -1
- package/dist/localReference.d.ts +2 -2
- package/dist/localReference.d.ts.map +1 -1
- package/dist/localReference.js +0 -1
- package/dist/localReference.js.map +1 -1
- package/dist/snapshotV1.d.ts +1 -1
- package/dist/snapshotV1.d.ts.map +1 -1
- package/dist/snapshotV1.js.map +1 -1
- package/dist/snapshotlegacy.d.ts +7 -28
- package/dist/snapshotlegacy.d.ts.map +1 -1
- package/dist/snapshotlegacy.js.map +1 -1
- package/lib/collections.d.ts +41 -92
- package/lib/collections.d.ts.map +1 -1
- package/lib/collections.js +5 -326
- package/lib/collections.js.map +1 -1
- package/lib/index.d.ts +10 -11
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +10 -11
- package/lib/index.js.map +1 -1
- package/lib/localReference.d.ts +2 -2
- package/lib/localReference.d.ts.map +1 -1
- package/lib/localReference.js +0 -1
- package/lib/localReference.js.map +1 -1
- package/lib/snapshotV1.d.ts +1 -1
- package/lib/snapshotV1.d.ts.map +1 -1
- package/lib/snapshotV1.js.map +1 -1
- package/lib/snapshotlegacy.d.ts +7 -28
- package/lib/snapshotlegacy.d.ts.map +1 -1
- package/lib/snapshotlegacy.js.map +1 -1
- package/package.json +9 -8
- package/src/collections.ts +109 -470
- package/src/index.ts +10 -11
- package/src/localReference.ts +3 -4
- package/src/snapshotV1.ts +1 -1
- package/src/snapshotlegacy.ts +9 -22
package/dist/snapshotV1.d.ts
CHANGED
|
@@ -20,7 +20,7 @@ export declare class SnapshotV1 {
|
|
|
20
20
|
private readonly logger;
|
|
21
21
|
private readonly chunkSize;
|
|
22
22
|
constructor(mergeTree: MergeTree, logger: ITelemetryLogger, filename?: string | undefined, onCompletion?: (() => void) | undefined);
|
|
23
|
-
getSeqLengthSegs
|
|
23
|
+
private getSeqLengthSegs;
|
|
24
24
|
/**
|
|
25
25
|
* Emits the snapshot to an ITree. If provided the optional IFluidSerializer will be used when serializing
|
|
26
26
|
* the summary data rather than JSON.stringify.
|
package/dist/snapshotV1.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshotV1.d.ts","sourceRoot":"","sources":["../src/snapshotV1.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EACH,YAAY,EACZ,gBAAgB,EACnB,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EAEH,KAAK,EAGR,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAE/E,OAAO,EAEH,SAAS,EACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAEH,WAAW,EACd,MAAM,cAAc,CAAC;AACtB,OAAO,EAEH,gBAAgB,EAEhB,gBAAgB,EAGnB,MAAM,kBAAkB,CAAC;AAG1B,qBAAa,UAAU;IAgBR,SAAS,EAAE,SAAS;IAEpB,QAAQ,CAAC;IACT,YAAY,CAAC,SAAQ,IAAI;IAZpC,gBAAuB,SAAS,EAAE,MAAM,CAAS;IAEjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IACjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAW;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAGxB,SAAS,EAAE,SAAS,EAC3B,MAAM,EAAE,gBAAgB,EACjB,QAAQ,CAAC,oBAAQ,EACjB,YAAY,CAAC,SAAQ,IAAI,aAAA;IAkBpC,
|
|
1
|
+
{"version":3,"file":"snapshotV1.d.ts","sourceRoot":"","sources":["../src/snapshotV1.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EACH,YAAY,EACZ,gBAAgB,EACnB,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EAEH,KAAK,EAGR,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAE/E,OAAO,EAEH,SAAS,EACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAEH,WAAW,EACd,MAAM,cAAc,CAAC;AACtB,OAAO,EAEH,gBAAgB,EAEhB,gBAAgB,EAGnB,MAAM,kBAAkB,CAAC;AAG1B,qBAAa,UAAU;IAgBR,SAAS,EAAE,SAAS;IAEpB,QAAQ,CAAC;IACT,YAAY,CAAC,SAAQ,IAAI;IAZpC,gBAAuB,SAAS,EAAE,MAAM,CAAS;IAEjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IACjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAW;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAGxB,SAAS,EAAE,SAAS,EAC3B,MAAM,EAAE,gBAAgB,EACjB,QAAQ,CAAC,oBAAQ,EACjB,YAAY,CAAC,SAAQ,IAAI,aAAA;IAkBpC,OAAO,CAAC,gBAAgB;IAwBxB;;;OAGG;IACH,IAAI,CACA,UAAU,EAAE,gBAAgB,EAC5B,IAAI,EAAE,YAAY,GACnB,KAAK;IAgER,WAAW;WA+FS,SAAS,CACzB,OAAO,EAAE,sBAAsB,EAC/B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,WAAW,GAAG,SAAS,EAChC,UAAU,CAAC,EAAE,gBAAgB,GAC9B,OAAO,CAAC,gBAAgB,CAAC;WAMd,YAAY,CACtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,WAAW,GAAG,SAAS,EAChC,UAAU,CAAC,EAAE,gBAAgB,GAC9B,gBAAgB;CAItB"}
|
package/dist/snapshotV1.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshotV1.js","sourceRoot":"","sources":["../src/snapshotV1.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 { ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport {\n IFluidHandle,\n IFluidSerializer,\n} from \"@fluidframework/core-interfaces\";\nimport { assert, bufferToString } from \"@fluidframework/common-utils\";\nimport { ChildLogger } from \"@fluidframework/telemetry-utils\";\nimport {\n FileMode,\n ITree,\n TreeEntry,\n ITreeEntry,\n} from \"@fluidframework/protocol-definitions\";\nimport { IChannelStorageService } from \"@fluidframework/datastore-definitions\";\nimport { UnassignedSequenceNumber } from \"./constants\";\nimport {\n ISegment,\n MergeTree,\n} from \"./mergeTree\";\nimport {\n matchProperties,\n PropertySet,\n} from \"./properties\";\nimport {\n IJSONSegmentWithMergeInfo,\n JsonSegmentSpecs,\n MergeTreeHeaderMetadata,\n MergeTreeChunkV1,\n toLatestVersion,\n serializeAsMaxSupportedVersion,\n} from \"./snapshotChunks\";\nimport { SnapshotLegacy } from \"./snapshotlegacy\";\n\nexport class SnapshotV1 {\n // Split snapshot into two entries - headers (small) and body (overflow) for faster loading initial content\n // Please note that this number has no direct relationship to anything other than size of raw text (characters).\n // As we produce json for the blob (and then send over the wire compressed), this number\n // is really hard to correlate with any actual metric that matters (like bytes over the wire).\n // For test with small number of chunks it would be closer to blob size,\n // for very chunky text, blob size can easily be 4x-8x of that number.\n public static readonly chunkSize: number = 10000;\n\n private readonly header: MergeTreeHeaderMetadata;\n private readonly segments: JsonSegmentSpecs[];\n private readonly segmentLengths: number[];\n private readonly logger: ITelemetryLogger;\n private readonly chunkSize: number;\n\n constructor(\n public mergeTree: MergeTree,\n logger: ITelemetryLogger,\n public filename?: string,\n public onCompletion?: () => void,\n ) {\n this.logger = ChildLogger.create(logger, \"Snapshot\");\n this.chunkSize = mergeTree?.options?.mergeTreeSnapshotChunkSize ?? SnapshotV1.chunkSize;\n\n const { currentSeq, minSeq } = mergeTree.getCollabWindow();\n this.header = {\n minSequenceNumber: minSeq,\n sequenceNumber: currentSeq,\n orderedChunkMetadata: [],\n totalLength: 0,\n totalSegmentCount: 0,\n };\n\n this.segments = [];\n this.segmentLengths = [];\n }\n\n getSeqLengthSegs(\n allSegments: JsonSegmentSpecs[],\n allLengths: number[],\n approxSequenceLength: number,\n startIndex = 0): MergeTreeChunkV1 {\n const segments: JsonSegmentSpecs[] = [];\n let length = 0;\n let segmentCount = 0;\n while ((length < approxSequenceLength) && ((startIndex + segmentCount) < allSegments.length)) {\n const pseg = allSegments[startIndex + segmentCount];\n segments.push(pseg);\n length += allLengths[startIndex + segmentCount];\n segmentCount++;\n }\n return {\n version: \"1\",\n segmentCount,\n length,\n segments,\n startIndex,\n headerMetadata: undefined,\n };\n }\n\n /**\n * Emits the snapshot to an ITree. If provided the optional IFluidSerializer will be used when serializing\n * the summary data rather than JSON.stringify.\n */\n emit(\n serializer: IFluidSerializer,\n bind: IFluidHandle,\n ): ITree {\n const chunks: MergeTreeChunkV1[] = [];\n this.header.totalSegmentCount = 0;\n this.header.totalLength = 0;\n do {\n const chunk = this.getSeqLengthSegs(\n this.segments,\n this.segmentLengths,\n this.chunkSize,\n this.header.totalSegmentCount);\n chunks.push(chunk);\n this.header.totalSegmentCount += chunk.segmentCount;\n this.header.totalLength += chunk.length;\n } while (this.header.totalSegmentCount < this.segments.length);\n\n // The do while loop should have added at least one chunk\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const headerChunk = chunks.shift()!;\n headerChunk.headerMetadata = this.header;\n headerChunk.headerMetadata.orderedChunkMetadata = [{ id: SnapshotLegacy.header }];\n const entries: ITreeEntry[] = chunks.map<ITreeEntry>((chunk, index) => {\n const id = `${SnapshotLegacy.body}_${index}`;\n this.header.orderedChunkMetadata.push({ id });\n return {\n mode: FileMode.File,\n path: id,\n type: TreeEntry.Blob,\n value: {\n contents: serializeAsMaxSupportedVersion(\n id,\n chunk,\n this.logger,\n this.mergeTree.options,\n serializer,\n bind),\n encoding: \"utf-8\",\n },\n };\n });\n\n const tree: ITree = {\n entries: [\n {\n mode: FileMode.File,\n path: SnapshotLegacy.header,\n type: TreeEntry.Blob,\n value: {\n contents: serializeAsMaxSupportedVersion(\n SnapshotLegacy.header,\n headerChunk,\n this.logger,\n this.mergeTree.options,\n serializer,\n bind),\n encoding: \"utf-8\",\n },\n },\n ...entries,\n ],\n };\n\n return tree;\n }\n\n extractSync() {\n const mergeTree = this.mergeTree;\n const minSeq = this.header.minSequenceNumber;\n\n // Helper to add the given `MergeTreeChunkV0SegmentSpec` to the snapshot.\n const pushSegRaw = (json: JsonSegmentSpecs, length: number) => {\n this.segments.push(json);\n this.segmentLengths.push(length);\n };\n\n // Helper to serialize the given `segment` and add it to the snapshot (if a segment is provided).\n const pushSeg = (segment?: ISegment) => {\n if (segment) { pushSegRaw(segment.toJSONObject(), segment.cachedLength); }\n };\n\n let prev: ISegment | undefined;\n const extractSegment = (segment: ISegment) => {\n // Elide segments that do not need to be included in the snapshot. A segment may be elided if\n // either condition is true:\n // a) The segment has not yet been ACKed. We do not need to snapshot unACKed segments because\n // there is a pending insert op that will deliver the segment on reconnection.\n // b) The segment was removed at or below the MSN. Pending ops can no longer reference this\n // segment, and therefore we can discard it.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if (segment.seq === UnassignedSequenceNumber || segment.removedSeq! <= minSeq) {\n return true;\n }\n\n // Next determine if the snapshot needs to preserve information required for merging the segment\n // (seq, client, etc.) This information is only needed if the segment is above the MSN (and doesn't\n // have a pending remove.)\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if ((segment.seq! <= minSeq) // Segment is below the MSN, and...\n && (segment.removedSeq === undefined // .. Segment has not been removed, or...\n || segment.removedSeq === UnassignedSequenceNumber) // .. Removal op to be delivered on reconnect\n ) {\n // This segment is below the MSN, which means that future ops will not reference it. Attempt to\n // coalesce the new segment with the previous (if any).\n if (!prev) {\n // We do not have a previous candidate for coalescing. Make the current segment the new candidate.\n prev = segment;\n } else if (prev.canAppend(segment) && matchProperties(prev.properties, segment.properties)) {\n // We have a compatible pair. Replace `prev` with the coalesced segment. Clone to avoid\n // modifying the segment instances currently in the MergeTree.\n prev = prev.clone();\n prev.append(segment.clone());\n } else {\n // The segment pair could not be coalesced. Record the `prev` segment in the snapshot\n // and make the current segment the new candidate for coalescing.\n pushSeg(prev);\n prev = segment;\n }\n } else {\n // This segment needs to preserve it's metadata as it may be referenced by future ops. It's ineligible\n // for coalescing, so emit the 'prev' segment now (if any).\n pushSeg(prev);\n prev = undefined;\n\n const raw: IJSONSegmentWithMergeInfo = { json: segment.toJSONObject() };\n // If the segment insertion is above the MSN, record the insertion merge info.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if (segment.seq! > minSeq) {\n raw.seq = segment.seq;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n raw.client = mergeTree.getLongClientId!(segment.clientId);\n }\n // We have already dispensed with removed segments below the MSN and removed segments with unassigned\n // sequence numbers. Any remaining removal info should be preserved.\n if (segment.removedSeq !== undefined) {\n assert(segment.removedSeq !== UnassignedSequenceNumber && segment.removedSeq > minSeq,\n 0x065 /* \"On removal info preservation, segment has invalid removed sequence number!\" */);\n raw.removedSeq = segment.removedSeq;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n raw.removedClient = mergeTree.getLongClientId!(segment.removedClientId!);\n }\n\n // Sanity check that we are preserving either the seq < minSeq or a removed segment's info.\n assert(raw.seq !== undefined && raw.client !== undefined\n || raw.removedSeq !== undefined && raw.removedClient !== undefined,\n 0x066 /* \"Corrupted preservation of segment metadata!\" */);\n\n // Record the segment with it's required metadata.\n pushSegRaw(raw, segment.cachedLength);\n }\n return true;\n };\n\n mergeTree.walkAllSegments(mergeTree.root, extractSegment, this);\n\n // If the last segment in the walk was coalescable, push it now.\n pushSeg(prev);\n\n return this.segments;\n }\n\n public static async loadChunk(\n storage: IChannelStorageService,\n path: string,\n logger: ITelemetryLogger,\n options: PropertySet | undefined,\n serializer?: IFluidSerializer,\n ): Promise<MergeTreeChunkV1> {\n const blob = await storage.readBlob(path);\n const chunkAsString = bufferToString(blob, \"utf8\");\n return SnapshotV1.processChunk(path, chunkAsString, logger, options, serializer);\n }\n\n public static processChunk(\n path: string,\n chunk: string,\n logger: ITelemetryLogger,\n options: PropertySet | undefined,\n serializer?: IFluidSerializer,\n ): MergeTreeChunkV1 {\n const chunkObj = serializer ? serializer.parse(chunk) : JSON.parse(chunk);\n return toLatestVersion(path, chunkObj, logger, options);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"snapshotV1.js","sourceRoot":"","sources":["../src/snapshotV1.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 { ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport {\n IFluidHandle,\n IFluidSerializer,\n} from \"@fluidframework/core-interfaces\";\nimport { assert, bufferToString } from \"@fluidframework/common-utils\";\nimport { ChildLogger } from \"@fluidframework/telemetry-utils\";\nimport {\n FileMode,\n ITree,\n TreeEntry,\n ITreeEntry,\n} from \"@fluidframework/protocol-definitions\";\nimport { IChannelStorageService } from \"@fluidframework/datastore-definitions\";\nimport { UnassignedSequenceNumber } from \"./constants\";\nimport {\n ISegment,\n MergeTree,\n} from \"./mergeTree\";\nimport {\n matchProperties,\n PropertySet,\n} from \"./properties\";\nimport {\n IJSONSegmentWithMergeInfo,\n JsonSegmentSpecs,\n MergeTreeHeaderMetadata,\n MergeTreeChunkV1,\n toLatestVersion,\n serializeAsMaxSupportedVersion,\n} from \"./snapshotChunks\";\nimport { SnapshotLegacy } from \"./snapshotlegacy\";\n\nexport class SnapshotV1 {\n // Split snapshot into two entries - headers (small) and body (overflow) for faster loading initial content\n // Please note that this number has no direct relationship to anything other than size of raw text (characters).\n // As we produce json for the blob (and then send over the wire compressed), this number\n // is really hard to correlate with any actual metric that matters (like bytes over the wire).\n // For test with small number of chunks it would be closer to blob size,\n // for very chunky text, blob size can easily be 4x-8x of that number.\n public static readonly chunkSize: number = 10000;\n\n private readonly header: MergeTreeHeaderMetadata;\n private readonly segments: JsonSegmentSpecs[];\n private readonly segmentLengths: number[];\n private readonly logger: ITelemetryLogger;\n private readonly chunkSize: number;\n\n constructor(\n public mergeTree: MergeTree,\n logger: ITelemetryLogger,\n public filename?: string,\n public onCompletion?: () => void,\n ) {\n this.logger = ChildLogger.create(logger, \"Snapshot\");\n this.chunkSize = mergeTree?.options?.mergeTreeSnapshotChunkSize ?? SnapshotV1.chunkSize;\n\n const { currentSeq, minSeq } = mergeTree.getCollabWindow();\n this.header = {\n minSequenceNumber: minSeq,\n sequenceNumber: currentSeq,\n orderedChunkMetadata: [],\n totalLength: 0,\n totalSegmentCount: 0,\n };\n\n this.segments = [];\n this.segmentLengths = [];\n }\n\n private getSeqLengthSegs(\n allSegments: JsonSegmentSpecs[],\n allLengths: number[],\n approxSequenceLength: number,\n startIndex = 0): MergeTreeChunkV1 {\n const segments: JsonSegmentSpecs[] = [];\n let length = 0;\n let segmentCount = 0;\n while ((length < approxSequenceLength) && ((startIndex + segmentCount) < allSegments.length)) {\n const pseg = allSegments[startIndex + segmentCount];\n segments.push(pseg);\n length += allLengths[startIndex + segmentCount];\n segmentCount++;\n }\n return {\n version: \"1\",\n segmentCount,\n length,\n segments,\n startIndex,\n headerMetadata: undefined,\n };\n }\n\n /**\n * Emits the snapshot to an ITree. If provided the optional IFluidSerializer will be used when serializing\n * the summary data rather than JSON.stringify.\n */\n emit(\n serializer: IFluidSerializer,\n bind: IFluidHandle,\n ): ITree {\n const chunks: MergeTreeChunkV1[] = [];\n this.header.totalSegmentCount = 0;\n this.header.totalLength = 0;\n do {\n const chunk = this.getSeqLengthSegs(\n this.segments,\n this.segmentLengths,\n this.chunkSize,\n this.header.totalSegmentCount);\n chunks.push(chunk);\n this.header.totalSegmentCount += chunk.segmentCount;\n this.header.totalLength += chunk.length;\n } while (this.header.totalSegmentCount < this.segments.length);\n\n // The do while loop should have added at least one chunk\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const headerChunk = chunks.shift()!;\n headerChunk.headerMetadata = this.header;\n headerChunk.headerMetadata.orderedChunkMetadata = [{ id: SnapshotLegacy.header }];\n const entries: ITreeEntry[] = chunks.map<ITreeEntry>((chunk, index) => {\n const id = `${SnapshotLegacy.body}_${index}`;\n this.header.orderedChunkMetadata.push({ id });\n return {\n mode: FileMode.File,\n path: id,\n type: TreeEntry.Blob,\n value: {\n contents: serializeAsMaxSupportedVersion(\n id,\n chunk,\n this.logger,\n this.mergeTree.options,\n serializer,\n bind),\n encoding: \"utf-8\",\n },\n };\n });\n\n const tree: ITree = {\n entries: [\n {\n mode: FileMode.File,\n path: SnapshotLegacy.header,\n type: TreeEntry.Blob,\n value: {\n contents: serializeAsMaxSupportedVersion(\n SnapshotLegacy.header,\n headerChunk,\n this.logger,\n this.mergeTree.options,\n serializer,\n bind),\n encoding: \"utf-8\",\n },\n },\n ...entries,\n ],\n };\n\n return tree;\n }\n\n extractSync() {\n const mergeTree = this.mergeTree;\n const minSeq = this.header.minSequenceNumber;\n\n // Helper to add the given `MergeTreeChunkV0SegmentSpec` to the snapshot.\n const pushSegRaw = (json: JsonSegmentSpecs, length: number) => {\n this.segments.push(json);\n this.segmentLengths.push(length);\n };\n\n // Helper to serialize the given `segment` and add it to the snapshot (if a segment is provided).\n const pushSeg = (segment?: ISegment) => {\n if (segment) { pushSegRaw(segment.toJSONObject(), segment.cachedLength); }\n };\n\n let prev: ISegment | undefined;\n const extractSegment = (segment: ISegment) => {\n // Elide segments that do not need to be included in the snapshot. A segment may be elided if\n // either condition is true:\n // a) The segment has not yet been ACKed. We do not need to snapshot unACKed segments because\n // there is a pending insert op that will deliver the segment on reconnection.\n // b) The segment was removed at or below the MSN. Pending ops can no longer reference this\n // segment, and therefore we can discard it.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if (segment.seq === UnassignedSequenceNumber || segment.removedSeq! <= minSeq) {\n return true;\n }\n\n // Next determine if the snapshot needs to preserve information required for merging the segment\n // (seq, client, etc.) This information is only needed if the segment is above the MSN (and doesn't\n // have a pending remove.)\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if ((segment.seq! <= minSeq) // Segment is below the MSN, and...\n && (segment.removedSeq === undefined // .. Segment has not been removed, or...\n || segment.removedSeq === UnassignedSequenceNumber) // .. Removal op to be delivered on reconnect\n ) {\n // This segment is below the MSN, which means that future ops will not reference it. Attempt to\n // coalesce the new segment with the previous (if any).\n if (!prev) {\n // We do not have a previous candidate for coalescing. Make the current segment the new candidate.\n prev = segment;\n } else if (prev.canAppend(segment) && matchProperties(prev.properties, segment.properties)) {\n // We have a compatible pair. Replace `prev` with the coalesced segment. Clone to avoid\n // modifying the segment instances currently in the MergeTree.\n prev = prev.clone();\n prev.append(segment.clone());\n } else {\n // The segment pair could not be coalesced. Record the `prev` segment in the snapshot\n // and make the current segment the new candidate for coalescing.\n pushSeg(prev);\n prev = segment;\n }\n } else {\n // This segment needs to preserve it's metadata as it may be referenced by future ops. It's ineligible\n // for coalescing, so emit the 'prev' segment now (if any).\n pushSeg(prev);\n prev = undefined;\n\n const raw: IJSONSegmentWithMergeInfo = { json: segment.toJSONObject() };\n // If the segment insertion is above the MSN, record the insertion merge info.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if (segment.seq! > minSeq) {\n raw.seq = segment.seq;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n raw.client = mergeTree.getLongClientId!(segment.clientId);\n }\n // We have already dispensed with removed segments below the MSN and removed segments with unassigned\n // sequence numbers. Any remaining removal info should be preserved.\n if (segment.removedSeq !== undefined) {\n assert(segment.removedSeq !== UnassignedSequenceNumber && segment.removedSeq > minSeq,\n 0x065 /* \"On removal info preservation, segment has invalid removed sequence number!\" */);\n raw.removedSeq = segment.removedSeq;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n raw.removedClient = mergeTree.getLongClientId!(segment.removedClientId!);\n }\n\n // Sanity check that we are preserving either the seq < minSeq or a removed segment's info.\n assert(raw.seq !== undefined && raw.client !== undefined\n || raw.removedSeq !== undefined && raw.removedClient !== undefined,\n 0x066 /* \"Corrupted preservation of segment metadata!\" */);\n\n // Record the segment with it's required metadata.\n pushSegRaw(raw, segment.cachedLength);\n }\n return true;\n };\n\n mergeTree.walkAllSegments(mergeTree.root, extractSegment, this);\n\n // If the last segment in the walk was coalescable, push it now.\n pushSeg(prev);\n\n return this.segments;\n }\n\n public static async loadChunk(\n storage: IChannelStorageService,\n path: string,\n logger: ITelemetryLogger,\n options: PropertySet | undefined,\n serializer?: IFluidSerializer,\n ): Promise<MergeTreeChunkV1> {\n const blob = await storage.readBlob(path);\n const chunkAsString = bufferToString(blob, \"utf8\");\n return SnapshotV1.processChunk(path, chunkAsString, logger, options, serializer);\n }\n\n public static processChunk(\n path: string,\n chunk: string,\n logger: ITelemetryLogger,\n options: PropertySet | undefined,\n serializer?: IFluidSerializer,\n ): MergeTreeChunkV1 {\n const chunkObj = serializer ? serializer.parse(chunk) : JSON.parse(chunk);\n return toLatestVersion(path, chunkObj, logger, options);\n }\n}\n"]}
|
package/dist/snapshotlegacy.d.ts
CHANGED
|
@@ -3,47 +3,26 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
import { ITelemetryLogger } from "@fluidframework/common-definitions";
|
|
6
|
-
import { IsoBuffer } from "@fluidframework/common-utils";
|
|
7
6
|
import { IFluidHandle, IFluidSerializer } from "@fluidframework/core-interfaces";
|
|
8
7
|
import { ISequencedDocumentMessage, ITree } from "@fluidframework/protocol-definitions";
|
|
9
8
|
import { MergeTree } from "./mergeTree";
|
|
10
9
|
import { IJSONSegment } from "./ops";
|
|
11
|
-
import { MergeTreeChunkLegacy } from "./snapshotChunks";
|
|
12
|
-
export interface SnapChunk {
|
|
13
|
-
/**
|
|
14
|
-
* Offset from beginning of segments.
|
|
15
|
-
*/
|
|
16
|
-
position: number;
|
|
17
|
-
lengthBytes: number;
|
|
18
|
-
sequenceLength: number;
|
|
19
|
-
buffer?: IsoBuffer;
|
|
20
|
-
}
|
|
21
|
-
export interface SnapshotHeader {
|
|
22
|
-
chunkCount?: number;
|
|
23
|
-
segmentsTotalLength: number;
|
|
24
|
-
indexOffset?: number;
|
|
25
|
-
segmentsOffset?: number;
|
|
26
|
-
seq: number;
|
|
27
|
-
minSeq?: number;
|
|
28
|
-
}
|
|
29
10
|
export declare class SnapshotLegacy {
|
|
30
11
|
mergeTree: MergeTree;
|
|
31
12
|
filename?: string | undefined;
|
|
32
13
|
onCompletion?: (() => void) | undefined;
|
|
33
14
|
static readonly header = "header";
|
|
34
15
|
static readonly body = "body";
|
|
35
|
-
static readonly catchupOps
|
|
16
|
+
private static readonly catchupOps;
|
|
36
17
|
static readonly sizeOfFirstChunk: number;
|
|
37
|
-
header
|
|
38
|
-
seq
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
segmentLengths: number[] | undefined;
|
|
43
|
-
logger: ITelemetryLogger;
|
|
18
|
+
private header;
|
|
19
|
+
private seq;
|
|
20
|
+
private segments;
|
|
21
|
+
private segmentLengths;
|
|
22
|
+
private readonly logger;
|
|
44
23
|
private readonly chunkSize;
|
|
45
24
|
constructor(mergeTree: MergeTree, logger: ITelemetryLogger, filename?: string | undefined, onCompletion?: (() => void) | undefined);
|
|
46
|
-
getSeqLengthSegs
|
|
25
|
+
private getSeqLengthSegs;
|
|
47
26
|
/**
|
|
48
27
|
* Emits the snapshot to an ITree. If provided the optional IFluidSerializer will be used when serializing
|
|
49
28
|
* the summary data rather than JSON.stringify.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshotlegacy.d.ts","sourceRoot":"","sources":["../src/snapshotlegacy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"snapshotlegacy.d.ts","sourceRoot":"","sources":["../src/snapshotlegacy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAEtE,OAAO,EACH,YAAY,EACZ,gBAAgB,EACnB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAY,yBAAyB,EAAE,KAAK,EAAa,MAAM,sCAAsC,CAAC;AAE7G,OAAO,EAEH,SAAS,EACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAkBrC,qBAAa,cAAc;IAoBJ,SAAS,EAAE,SAAS;IAAmC,QAAQ,CAAC;IACxE,YAAY,CAAC,SAAQ,IAAI;IApBpC,gBAAuB,MAAM,YAAY;IACzC,gBAAuB,IAAI,UAAU;IACrC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAQlD,gBAAuB,gBAAgB,EAAE,MAAM,CAAS;IAExD,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,GAAG,CAAqB;IAChC,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEhB,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAS,QAAQ,CAAC,oBAAQ,EAChF,YAAY,CAAC,SAAQ,IAAI,aAAA;IAKpC,OAAO,CAAC,gBAAgB;IA0BxB;;;OAGG;IACH,IAAI,CACA,WAAW,EAAE,yBAAyB,EAAE,EACxC,UAAU,EAAE,gBAAgB,EAC5B,IAAI,EAAE,YAAY,GACnB,KAAK;IAqER,WAAW;CAgEd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshotlegacy.js","sourceRoot":"","sources":["../src/snapshotlegacy.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAKH,+DAAiE;AAKjE,qEAA8D;AAC9D,+EAA6G;AAC7G,2CAAwE;AAMxE,6CAA+C;AAC/C,qDAG0B;AAwB1B,MAAa,cAAc;IAsBvB,YAAmB,SAAoB,EAAE,MAAwB,EAAS,QAAiB,EAChF,YAAyB;;QADjB,cAAS,GAAT,SAAS,CAAW;QAAmC,aAAQ,GAAR,QAAQ,CAAS;QAChF,iBAAY,GAAZ,YAAY,CAAa;QAChC,IAAI,CAAC,MAAM,GAAG,6BAAW,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC,SAAS,eAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO,0CAAE,0BAA0B,mCAAI,cAAc,CAAC,gBAAgB,CAAC;IACvG,CAAC;IAED,gBAAgB,CACZ,WAA2B,EAC3B,UAAoB,EACpB,oBAA4B,EAC5B,UAAU,GAAG,CAAC;QACd,MAAM,IAAI,GAAmB,EAAE,CAAC;QAChC,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,OAAO,CAAC,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,QAAQ,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE;YAC9F,MAAM,IAAI,GAAG,WAAW,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC;YAChD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChB,cAAc,IAAI,UAAU,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC;YACpD,QAAQ,EAAE,CAAC;SACd;QACD,OAAO;YACH,OAAO,EAAE,SAAS;YAClB,sBAAsB,EAAE,UAAU;YAClC,iBAAiB,EAAE,QAAQ;YAC3B,gBAAgB,EAAE,cAAc;YAChC,gBAAgB,EAAE,IAAI,CAAC,MAAO,CAAC,mBAAmB;YAClD,iBAAiB,EAAE,WAAW,CAAC,MAAM;YACrC,mBAAmB,EAAE,IAAI,CAAC,MAAO,CAAC,GAAG;YACrC,YAAY,EAAE,IAAI;SACrB,CAAC;IACN,CAAC;IAED;;;OAGG;IACH,IAAI,CACA,WAAwC,EACxC,UAA4B,EAC5B,IAAkB;;QAElB,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAS,EAAE,IAAI,CAAC,cAAe,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3F,IAAI,MAAM,GAAW,MAAM,CAAC,gBAAgB,CAAC;QAC7C,IAAI,QAAQ,GAAW,MAAM,CAAC,iBAAiB,CAAC;QAChD,MAAM,IAAI,GAAU;YAChB,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,+BAAQ,CAAC,IAAI;oBACnB,IAAI,EAAE,cAAc,CAAC,MAAM;oBAC3B,IAAI,EAAE,gCAAS,CAAC,IAAI;oBACpB,KAAK,EAAE;wBACH,QAAQ,EAAE,+CAA8B,CACpC,cAAc,CAAC,MAAM,EACrB,MAAM,EACN,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,SAAS,CAAC,OAAO,EACtB,UAAU,EACV,IAAI,CAAC;wBACT,QAAQ,EAAE,OAAO;qBACpB;iBACJ;aACJ;SACJ,CAAC;QAEF,IAAI,MAAM,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAkB,EAAE;YACtD,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAS,EAAE,IAAI,CAAC,cAAe,EACrE,IAAI,CAAC,MAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;YAChE,MAAM,IAAI,MAAM,CAAC,gBAAgB,CAAC;YAClC,QAAQ,IAAI,MAAM,CAAC,iBAAiB,CAAC;YACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,+BAAQ,CAAC,IAAI;gBACnB,IAAI,EAAE,cAAc,CAAC,IAAI;gBACzB,IAAI,EAAE,gCAAS,CAAC,IAAI;gBACpB,KAAK,EAAE;oBACH,QAAQ,EAAE,+CAA8B,CACpC,cAAc,CAAC,IAAI,EACnB,MAAM,EACN,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,SAAS,CAAC,OAAO,EACtB,UAAU,EACV,IAAI,CAAC;oBACT,QAAQ,EAAE,OAAO;iBACpB;aACJ,CAAC,CAAC;SACN;QAED,qBAAM,CACF,MAAM,KAAK,IAAI,CAAC,MAAO,CAAC,mBAAmB,EAC3C,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAEzD,qBAAM,CACF,QAAQ,KAAK,MAAM,CAAC,iBAAiB,EACrC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAEvD,IAAG,WAAW,KAAK,SAAS,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YACpD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,+BAAQ,CAAC,IAAI;gBACnB,IAAI,cAAE,IAAI,CAAC,SAAS,CAAC,OAAO,0CAAE,eAAe,mCAAI,cAAc,CAAC,UAAU;gBAC1E,IAAI,EAAE,gCAAS,CAAC,IAAI;gBACpB,KAAK,EAAE;oBACH,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;oBAC5F,QAAQ,EAAE,OAAO;iBACpB;aACJ,CAAC,CAAC;SACN;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,WAAW;QACP,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;QACtD,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG;YACV,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,EAC5E,2BAAe,CAAC;YACpB,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM;SAC1C,CAAC;QAEF,MAAM,IAAI,GAAe,EAAE,CAAC;QAC5B,IAAI,IAA0B,CAAC;QAC/B,MAAM,cAAc;QAChB,mCAAmC;QACnC,CAAC,OAAiB,EAAE,GAAW,EAAE,MAAc,EAAE,QAAgB,EAAE,KAAyB,EAAE,GAAuB,EAAE,EAAE;YACrH,kCAAkC;YAClC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,oCAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAI,IAAI,IAAI,CAAC,GAAI,CAAC;gBACxE,kCAAkC;gBAClC,CAAC,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,oCAAwB,CAAC;oBACnF,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,GAAI,CAAC,CAAC,EAAE;gBACvC,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;uBAC5B,4BAAe,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,EACzD;oBACE,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;oBACpB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;iBAChC;qBAAM;oBACH,IAAI,IAAI,EAAE;wBACN,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;qBACnB;oBACD,IAAI,GAAG,OAAO,CAAC;iBAClB;aACJ;YACD,OAAO,IAAI,CAAC;QAChB,CAAC,CAAC;QAEN,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,2BAAe,EAAE,SAAS,CAAC,CAAC;QACnF,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACnB;QAED,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,WAAW,GAAW,CAAC,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YACjB,WAAW,IAAI,OAAO,CAAC,YAAY,CAAC;YACpC,IAAI,CAAC,QAAS,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;YAC5C,IAAI,CAAC,cAAe,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,oFAAoF;QACpF,yFAAyF;QACzF,uFAAuF;QACvF,gFAAgF;QAChF,kCAAkC;QAClC,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,IAAI,WAAW,EAAE;YAChD,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;gBACvB,SAAS,EAAE,6BAA6B;gBACxC,WAAW;gBACX,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,mBAAmB;aACvD,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,mBAAmB,GAAG,WAAW,CAAC;SACjD;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;;AAlML,wCAmMC;AAlM0B,qBAAM,GAAG,QAAQ,CAAC;AAClB,mBAAI,GAAG,MAAM,CAAC;AACd,yBAAU,GAAG,YAAY,CAAC;AAEjD,2GAA2G;AAC3G,gHAAgH;AAChH,wFAAwF;AACxF,8FAA8F;AAC9F,wEAAwE;AACxE,sEAAsE;AAC/C,+BAAgB,GAAW,KAAK,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\nimport { ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport { assert, IsoBuffer } from \"@fluidframework/common-utils\";\nimport {\n IFluidHandle,\n IFluidSerializer,\n} from \"@fluidframework/core-interfaces\";\nimport { ChildLogger } from \"@fluidframework/telemetry-utils\";\nimport { FileMode, ISequencedDocumentMessage, ITree, TreeEntry } from \"@fluidframework/protocol-definitions\";\nimport { NonCollabClient, UnassignedSequenceNumber } from \"./constants\";\nimport {\n ISegment,\n MergeTree,\n} from \"./mergeTree\";\nimport { IJSONSegment } from \"./ops\";\nimport { matchProperties } from \"./properties\";\nimport {\n MergeTreeChunkLegacy,\n serializeAsMinSupportedVersion,\n} from \"./snapshotChunks\";\n\n// first three are index entry\nexport interface SnapChunk {\n /**\n * Offset from beginning of segments.\n */\n position: number;\n lengthBytes: number;\n sequenceLength: number;\n buffer?: IsoBuffer;\n}\n\nexport interface SnapshotHeader {\n chunkCount?: number;\n segmentsTotalLength: number;\n indexOffset?: number;\n segmentsOffset?: number;\n seq: number;\n // TODO: Make 'minSeq' non-optional once the new snapshot format becomes the default?\n // (See https://github.com/microsoft/FluidFramework/issues/84)\n minSeq?: number;\n}\n\nexport class SnapshotLegacy {\n public static readonly header = \"header\";\n public static readonly body = \"body\";\n public static readonly catchupOps = \"catchupOps\";\n\n // Split snapshot into two entries - headers (small) and body (overflow) for faster loading initial content\n // Please note that this number has no direct relationship to anything other than size of raw text (characters).\n // As we produce json for the blob (and then send over the wire compressed), this number\n // is really hard to correlate with any actual metric that matters (like bytes over the wire).\n // For test with small number of chunks it would be closer to blob size,\n // for very chunky text, blob size can easily be 4x-8x of that number.\n public static readonly sizeOfFirstChunk: number = 10000;\n\n header: SnapshotHeader | undefined;\n seq: number | undefined;\n buffer: IsoBuffer | undefined;\n pendingChunk: SnapChunk | undefined;\n segments: IJSONSegment[] | undefined;\n segmentLengths: number[] | undefined;\n logger: ITelemetryLogger;\n private readonly chunkSize: number;\n\n constructor(public mergeTree: MergeTree, logger: ITelemetryLogger, public filename?: string,\n public onCompletion?: () => void) {\n this.logger = ChildLogger.create(logger, \"Snapshot\");\n this.chunkSize = mergeTree?.options?.mergeTreeSnapshotChunkSize ?? SnapshotLegacy.sizeOfFirstChunk;\n }\n\n getSeqLengthSegs(\n allSegments: IJSONSegment[],\n allLengths: number[],\n approxSequenceLength: number,\n startIndex = 0): MergeTreeChunkLegacy {\n const segs: IJSONSegment[] = [];\n let sequenceLength = 0;\n let segCount = 0;\n while ((sequenceLength < approxSequenceLength) && ((startIndex + segCount) < allSegments.length)) {\n const pseg = allSegments[startIndex + segCount];\n segs.push(pseg);\n sequenceLength += allLengths[startIndex + segCount];\n segCount++;\n }\n return {\n version: undefined,\n chunkStartSegmentIndex: startIndex,\n chunkSegmentCount: segCount,\n chunkLengthChars: sequenceLength,\n totalLengthChars: this.header!.segmentsTotalLength,\n totalSegmentCount: allSegments.length,\n chunkSequenceNumber: this.header!.seq,\n segmentTexts: segs,\n };\n }\n\n /**\n * Emits the snapshot to an ITree. If provided the optional IFluidSerializer will be used when serializing\n * the summary data rather than JSON.stringify.\n */\n emit(\n catchUpMsgs: ISequencedDocumentMessage[],\n serializer: IFluidSerializer,\n bind: IFluidHandle,\n ): ITree {\n const chunk1 = this.getSeqLengthSegs(this.segments!, this.segmentLengths!, this.chunkSize);\n let length: number = chunk1.chunkLengthChars;\n let segments: number = chunk1.chunkSegmentCount;\n const tree: ITree = {\n entries: [\n {\n mode: FileMode.File,\n path: SnapshotLegacy.header,\n type: TreeEntry.Blob,\n value: {\n contents: serializeAsMinSupportedVersion(\n SnapshotLegacy.header,\n chunk1,\n this.logger,\n this.mergeTree.options,\n serializer,\n bind),\n encoding: \"utf-8\",\n },\n },\n ],\n };\n\n if (chunk1.chunkSegmentCount < chunk1.totalSegmentCount!) {\n const chunk2 = this.getSeqLengthSegs(this.segments!, this.segmentLengths!,\n this.header!.segmentsTotalLength, chunk1.chunkSegmentCount);\n length += chunk2.chunkLengthChars;\n segments += chunk2.chunkSegmentCount;\n tree.entries.push({\n mode: FileMode.File,\n path: SnapshotLegacy.body,\n type: TreeEntry.Blob,\n value: {\n contents: serializeAsMinSupportedVersion(\n SnapshotLegacy.body,\n chunk2,\n this.logger,\n this.mergeTree.options,\n serializer,\n bind),\n encoding: \"utf-8\",\n },\n });\n }\n\n assert(\n length === this.header!.segmentsTotalLength,\n 0x05d /* \"emit: mismatch in segmentsTotalLength\" */);\n\n assert(\n segments === chunk1.totalSegmentCount,\n 0x05e /* \"emit: mismatch in totalSegmentCount\" */);\n\n if(catchUpMsgs !== undefined && catchUpMsgs.length > 0) {\n tree.entries.push({\n mode: FileMode.File,\n path: this.mergeTree.options?.catchUpBlobName ?? SnapshotLegacy.catchupOps,\n type: TreeEntry.Blob,\n value: {\n contents: serializer ? serializer.stringify(catchUpMsgs, bind) : JSON.stringify(catchUpMsgs),\n encoding: \"utf-8\",\n },\n });\n }\n\n return tree;\n }\n\n extractSync() {\n const collabWindow = this.mergeTree.getCollabWindow();\n this.seq = collabWindow.minSeq;\n this.header = {\n segmentsTotalLength: this.mergeTree.getLength(this.mergeTree.collabWindow.minSeq,\n NonCollabClient),\n seq: this.mergeTree.collabWindow.minSeq,\n };\n\n const segs: ISegment[] = [];\n let prev: ISegment | undefined;\n const extractSegment =\n // eslint-disable-next-line max-len\n (segment: ISegment, pos: number, refSeq: number, clientId: number, start: number | undefined, end: number | undefined) => {\n // eslint-disable-next-line eqeqeq\n if ((segment.seq != UnassignedSequenceNumber) && (segment.seq! <= this.seq!) &&\n // eslint-disable-next-line eqeqeq\n ((segment.removedSeq === undefined) || (segment.removedSeq == UnassignedSequenceNumber) ||\n (segment.removedSeq > this.seq!))) {\n if (prev && prev.canAppend(segment)\n && matchProperties(prev.properties, segment.properties)\n ) {\n prev = prev.clone();\n prev.append(segment.clone());\n } else {\n if (prev) {\n segs.push(prev);\n }\n prev = segment;\n }\n }\n return true;\n };\n\n this.mergeTree.map({ leaf: extractSegment }, this.seq, NonCollabClient, undefined);\n if (prev) {\n segs.push(prev);\n }\n\n this.segments = [];\n this.segmentLengths = [];\n let totalLength: number = 0;\n segs.map((segment) => {\n totalLength += segment.cachedLength;\n this.segments!.push(segment.toJSONObject());\n this.segmentLengths!.push(segment.cachedLength);\n });\n\n // We observed this.header.segmentsTotalLength < totalLength to happen in some cases\n // When this condition happens, we might not write out all segments in getSeqLengthSegs()\n // when writing out \"body\". Issue #1995 tracks following up on the core of the problem.\n // In the meantime, this code makes sure we will write out all segments properly\n // eslint-disable-next-line eqeqeq\n if (this.header.segmentsTotalLength != totalLength) {\n this.logger.sendErrorEvent({\n eventName: \"SegmentsTotalLengthMismatch\",\n totalLength,\n segmentsTotalLength: this.header.segmentsTotalLength,\n });\n this.header.segmentsTotalLength = totalLength;\n }\n\n return this.segments;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"snapshotlegacy.js","sourceRoot":"","sources":["../src/snapshotlegacy.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 @typescript-eslint/no-non-null-assertion */\n\nimport { ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport { assert } from \"@fluidframework/common-utils\";\nimport {\n IFluidHandle,\n IFluidSerializer,\n} from \"@fluidframework/core-interfaces\";\nimport { ChildLogger } from \"@fluidframework/telemetry-utils\";\nimport { FileMode, ISequencedDocumentMessage, ITree, TreeEntry } from \"@fluidframework/protocol-definitions\";\nimport { NonCollabClient, UnassignedSequenceNumber } from \"./constants\";\nimport {\n ISegment,\n MergeTree,\n} from \"./mergeTree\";\nimport { IJSONSegment } from \"./ops\";\nimport { matchProperties } from \"./properties\";\nimport {\n MergeTreeChunkLegacy,\n serializeAsMinSupportedVersion,\n} from \"./snapshotChunks\";\n\ninterface SnapshotHeader {\n chunkCount?: number;\n segmentsTotalLength: number;\n indexOffset?: number;\n segmentsOffset?: number;\n seq: number;\n // TODO: Make 'minSeq' non-optional once the new snapshot format becomes the default?\n // (See https://github.com/microsoft/FluidFramework/issues/84)\n minSeq?: number;\n}\n\nexport class SnapshotLegacy {\n public static readonly header = \"header\";\n public static readonly body = \"body\";\n private static readonly catchupOps = \"catchupOps\";\n\n // Split snapshot into two entries - headers (small) and body (overflow) for faster loading initial content\n // Please note that this number has no direct relationship to anything other than size of raw text (characters).\n // As we produce json for the blob (and then send over the wire compressed), this number\n // is really hard to correlate with any actual metric that matters (like bytes over the wire).\n // For test with small number of chunks it would be closer to blob size,\n // for very chunky text, blob size can easily be 4x-8x of that number.\n public static readonly sizeOfFirstChunk: number = 10000;\n\n private header: SnapshotHeader | undefined;\n private seq: number | undefined;\n private segments: IJSONSegment[] | undefined;\n private segmentLengths: number[] | undefined;\n private readonly logger: ITelemetryLogger;\n private readonly chunkSize: number;\n\n constructor(public mergeTree: MergeTree, logger: ITelemetryLogger, public filename?: string,\n public onCompletion?: () => void) {\n this.logger = ChildLogger.create(logger, \"Snapshot\");\n this.chunkSize = mergeTree?.options?.mergeTreeSnapshotChunkSize ?? SnapshotLegacy.sizeOfFirstChunk;\n }\n\n private getSeqLengthSegs(\n allSegments: IJSONSegment[],\n allLengths: number[],\n approxSequenceLength: number,\n startIndex = 0): MergeTreeChunkLegacy {\n const segs: IJSONSegment[] = [];\n let sequenceLength = 0;\n let segCount = 0;\n while ((sequenceLength < approxSequenceLength) && ((startIndex + segCount) < allSegments.length)) {\n const pseg = allSegments[startIndex + segCount];\n segs.push(pseg);\n sequenceLength += allLengths[startIndex + segCount];\n segCount++;\n }\n return {\n version: undefined,\n chunkStartSegmentIndex: startIndex,\n chunkSegmentCount: segCount,\n chunkLengthChars: sequenceLength,\n totalLengthChars: this.header!.segmentsTotalLength,\n totalSegmentCount: allSegments.length,\n chunkSequenceNumber: this.header!.seq,\n segmentTexts: segs,\n };\n }\n\n /**\n * Emits the snapshot to an ITree. If provided the optional IFluidSerializer will be used when serializing\n * the summary data rather than JSON.stringify.\n */\n emit(\n catchUpMsgs: ISequencedDocumentMessage[],\n serializer: IFluidSerializer,\n bind: IFluidHandle,\n ): ITree {\n const chunk1 = this.getSeqLengthSegs(this.segments!, this.segmentLengths!, this.chunkSize);\n let length: number = chunk1.chunkLengthChars;\n let segments: number = chunk1.chunkSegmentCount;\n const tree: ITree = {\n entries: [\n {\n mode: FileMode.File,\n path: SnapshotLegacy.header,\n type: TreeEntry.Blob,\n value: {\n contents: serializeAsMinSupportedVersion(\n SnapshotLegacy.header,\n chunk1,\n this.logger,\n this.mergeTree.options,\n serializer,\n bind),\n encoding: \"utf-8\",\n },\n },\n ],\n };\n\n if (chunk1.chunkSegmentCount < chunk1.totalSegmentCount!) {\n const chunk2 = this.getSeqLengthSegs(this.segments!, this.segmentLengths!,\n this.header!.segmentsTotalLength, chunk1.chunkSegmentCount);\n length += chunk2.chunkLengthChars;\n segments += chunk2.chunkSegmentCount;\n tree.entries.push({\n mode: FileMode.File,\n path: SnapshotLegacy.body,\n type: TreeEntry.Blob,\n value: {\n contents: serializeAsMinSupportedVersion(\n SnapshotLegacy.body,\n chunk2,\n this.logger,\n this.mergeTree.options,\n serializer,\n bind),\n encoding: \"utf-8\",\n },\n });\n }\n\n assert(\n length === this.header!.segmentsTotalLength,\n 0x05d /* \"emit: mismatch in segmentsTotalLength\" */);\n\n assert(\n segments === chunk1.totalSegmentCount,\n 0x05e /* \"emit: mismatch in totalSegmentCount\" */);\n\n if(catchUpMsgs !== undefined && catchUpMsgs.length > 0) {\n tree.entries.push({\n mode: FileMode.File,\n path: this.mergeTree.options?.catchUpBlobName ?? SnapshotLegacy.catchupOps,\n type: TreeEntry.Blob,\n value: {\n contents: serializer ? serializer.stringify(catchUpMsgs, bind) : JSON.stringify(catchUpMsgs),\n encoding: \"utf-8\",\n },\n });\n }\n\n return tree;\n }\n\n extractSync() {\n const collabWindow = this.mergeTree.getCollabWindow();\n this.seq = collabWindow.minSeq;\n this.header = {\n segmentsTotalLength: this.mergeTree.getLength(this.mergeTree.collabWindow.minSeq,\n NonCollabClient),\n seq: this.mergeTree.collabWindow.minSeq,\n };\n\n const segs: ISegment[] = [];\n let prev: ISegment | undefined;\n const extractSegment =\n // eslint-disable-next-line max-len\n (segment: ISegment, pos: number, refSeq: number, clientId: number, start: number | undefined, end: number | undefined) => {\n // eslint-disable-next-line eqeqeq\n if ((segment.seq != UnassignedSequenceNumber) && (segment.seq! <= this.seq!) &&\n // eslint-disable-next-line eqeqeq\n ((segment.removedSeq === undefined) || (segment.removedSeq == UnassignedSequenceNumber) ||\n (segment.removedSeq > this.seq!))) {\n if (prev && prev.canAppend(segment)\n && matchProperties(prev.properties, segment.properties)\n ) {\n prev = prev.clone();\n prev.append(segment.clone());\n } else {\n if (prev) {\n segs.push(prev);\n }\n prev = segment;\n }\n }\n return true;\n };\n\n this.mergeTree.map({ leaf: extractSegment }, this.seq, NonCollabClient, undefined);\n if (prev) {\n segs.push(prev);\n }\n\n this.segments = [];\n this.segmentLengths = [];\n let totalLength: number = 0;\n segs.map((segment) => {\n totalLength += segment.cachedLength;\n this.segments!.push(segment.toJSONObject());\n this.segmentLengths!.push(segment.cachedLength);\n });\n\n // We observed this.header.segmentsTotalLength < totalLength to happen in some cases\n // When this condition happens, we might not write out all segments in getSeqLengthSegs()\n // when writing out \"body\". Issue #1995 tracks following up on the core of the problem.\n // In the meantime, this code makes sure we will write out all segments properly\n // eslint-disable-next-line eqeqeq\n if (this.header.segmentsTotalLength != totalLength) {\n this.logger.sendErrorEvent({\n eventName: \"SegmentsTotalLengthMismatch\",\n totalLength,\n segmentsTotalLength: this.header.segmentsTotalLength,\n });\n this.header.segmentsTotalLength = totalLength;\n }\n\n return this.segments;\n }\n}\n"]}
|
package/lib/collections.d.ts
CHANGED
|
@@ -10,17 +10,15 @@ export declare class Stack<T> {
|
|
|
10
10
|
top(): T | undefined;
|
|
11
11
|
pop(): T | undefined;
|
|
12
12
|
}
|
|
13
|
-
export declare function ListRemoveEntry<U>(entry: List<U>): List<U> | undefined;
|
|
14
|
-
export declare function ListMakeEntry<U>(data: U): List<U>;
|
|
15
13
|
export declare function ListMakeHead<U>(): List<U>;
|
|
16
14
|
export declare class List<T> {
|
|
17
15
|
isHead: boolean;
|
|
18
|
-
data
|
|
16
|
+
private data;
|
|
19
17
|
next: List<T>;
|
|
20
18
|
prev: List<T>;
|
|
21
19
|
constructor(isHead: boolean, data: T | undefined);
|
|
22
20
|
clear(): void;
|
|
23
|
-
add
|
|
21
|
+
private add;
|
|
24
22
|
dequeue(): T | undefined;
|
|
25
23
|
enqueue(data: T): List<T>;
|
|
26
24
|
walk(fn: (data: T, l: List<T>) => void): void;
|
|
@@ -29,22 +27,15 @@ export declare class List<T> {
|
|
|
29
27
|
first(): T | undefined;
|
|
30
28
|
last(): T | undefined;
|
|
31
29
|
empty(): boolean;
|
|
32
|
-
pushEntry(entry: List<T>): void;
|
|
33
30
|
push(data: T): void;
|
|
34
|
-
popEntry(head: List<T>): List<T> | undefined;
|
|
35
|
-
insertEntry(entry: List<T>): List<T>;
|
|
36
|
-
insertAfter(data: T): List<T>;
|
|
37
|
-
insertBefore(data: T): List<T>;
|
|
38
|
-
insertEntryBefore(entry: List<T>): List<T>;
|
|
39
31
|
}
|
|
40
32
|
export interface Comparer<T> {
|
|
41
33
|
compare(a: T, b: T): number;
|
|
42
34
|
min: T;
|
|
43
35
|
}
|
|
44
|
-
export declare const numberComparer: Comparer<number>;
|
|
45
36
|
export declare class Heap<T> {
|
|
46
37
|
comp: Comparer<T>;
|
|
47
|
-
L
|
|
38
|
+
private L;
|
|
48
39
|
count(): number;
|
|
49
40
|
constructor(a: T[], comp: Comparer<T>);
|
|
50
41
|
peek(): T;
|
|
@@ -53,7 +44,6 @@ export declare class Heap<T> {
|
|
|
53
44
|
private fixup;
|
|
54
45
|
private fixdown;
|
|
55
46
|
}
|
|
56
|
-
export declare function LinearDictionary<TKey, TData>(compareKeys: KeyComparer<TKey>): SortedDictionary<TKey, TData>;
|
|
57
47
|
export declare const enum RBColor {
|
|
58
48
|
RED = 0,
|
|
59
49
|
BLACK = 1
|
|
@@ -80,51 +70,48 @@ export interface RBNodeActions<TKey, TData> {
|
|
|
80
70
|
showStructure?: boolean;
|
|
81
71
|
}
|
|
82
72
|
export declare class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData> {
|
|
83
|
-
compareKeys
|
|
84
|
-
|
|
85
|
-
root
|
|
73
|
+
private readonly compareKeys;
|
|
74
|
+
private readonly aug?;
|
|
75
|
+
private root;
|
|
86
76
|
constructor(compareKeys: KeyComparer<TKey>, aug?: IRBAugmentation<TKey, TData> | undefined);
|
|
87
|
-
makeNode
|
|
88
|
-
isRed
|
|
89
|
-
nodeSize
|
|
77
|
+
private makeNode;
|
|
78
|
+
private isRed;
|
|
79
|
+
private nodeSize;
|
|
90
80
|
size(): number;
|
|
91
81
|
isEmpty(): boolean;
|
|
92
82
|
get(key: TKey): RBNode<TKey, TData> | undefined;
|
|
93
|
-
nodeGet
|
|
94
|
-
contains
|
|
83
|
+
private nodeGet;
|
|
84
|
+
private contains;
|
|
95
85
|
gather(key: TKey, matcher: IRBMatcher<TKey, TData>): RBNode<TKey, TData>[];
|
|
96
|
-
nodeGather
|
|
86
|
+
private nodeGather;
|
|
97
87
|
walkExactMatchesForward(compareFn: (node: RBNode<TKey, TData>) => number, actionFn: (node: RBNode<TKey, TData>) => void, continueLeftFn: (number: number) => boolean, continueRightFn: (number: number) => boolean): void;
|
|
98
|
-
nodeWalkExactMatchesForward
|
|
88
|
+
private nodeWalkExactMatchesForward;
|
|
99
89
|
walkExactMatchesBackward(compareFn: (node: RBNode<TKey, TData>) => number, actionFn: (node: RBNode<TKey, TData>) => void, continueLeftFn: (number: number) => boolean, continueRightFn: (number: number) => boolean): void;
|
|
100
|
-
nodeWalkExactMatchesBackward
|
|
90
|
+
private nodeWalkExactMatchesBackward;
|
|
101
91
|
put(key: TKey, data: TData, conflict?: ConflictAction<TKey, TData>): void;
|
|
102
|
-
nodePut
|
|
103
|
-
updateLocal
|
|
104
|
-
|
|
105
|
-
nodeRemoveMin(node: RBNode<TKey, TData>): RBNode<TKey, TData> | undefined;
|
|
106
|
-
removeMax(): void;
|
|
107
|
-
nodeRemoveMax(node: RBNode<TKey, TData>): RBNode<TKey, TData> | undefined;
|
|
92
|
+
private nodePut;
|
|
93
|
+
private updateLocal;
|
|
94
|
+
private nodeRemoveMin;
|
|
108
95
|
remove(key: TKey): void;
|
|
109
96
|
removeExisting(key: TKey): void;
|
|
110
|
-
nodeRemove
|
|
111
|
-
height
|
|
112
|
-
nodeHeight
|
|
97
|
+
private nodeRemove;
|
|
98
|
+
private height;
|
|
99
|
+
private nodeHeight;
|
|
113
100
|
floor(key: TKey): RBNode<TKey, TData> | undefined;
|
|
114
|
-
nodeFloor
|
|
101
|
+
private nodeFloor;
|
|
115
102
|
ceil(key: TKey): RBNode<TKey, TData> | undefined;
|
|
116
|
-
nodeCeil
|
|
103
|
+
private nodeCeil;
|
|
117
104
|
min(): RBNode<TKey, TData> | undefined;
|
|
118
|
-
nodeMin
|
|
105
|
+
private nodeMin;
|
|
119
106
|
max(): RBNode<TKey, TData> | undefined;
|
|
120
|
-
nodeMax
|
|
121
|
-
rotateRight
|
|
122
|
-
rotateLeft
|
|
123
|
-
oppositeColor
|
|
124
|
-
flipColors
|
|
125
|
-
moveRedLeft
|
|
126
|
-
moveRedRight
|
|
127
|
-
balance
|
|
107
|
+
private nodeMax;
|
|
108
|
+
private rotateRight;
|
|
109
|
+
private rotateLeft;
|
|
110
|
+
private oppositeColor;
|
|
111
|
+
private flipColors;
|
|
112
|
+
private moveRedLeft;
|
|
113
|
+
private moveRedRight;
|
|
114
|
+
private balance;
|
|
128
115
|
mapRange<TAccum>(action: PropertyAction<TKey, TData>, accum?: TAccum, start?: TKey, end?: TKey): void;
|
|
129
116
|
map<TAccum>(action: PropertyAction<TKey, TData>, accum?: TAccum): void;
|
|
130
117
|
keys(): TKey[];
|
|
@@ -135,41 +122,15 @@ export declare class RedBlackTree<TKey, TData> implements SortedDictionary<TKey,
|
|
|
135
122
|
*/
|
|
136
123
|
walk(actions: RBNodeActions<TKey, TData>): void;
|
|
137
124
|
walkBackward(actions: RBNodeActions<TKey, TData>): void;
|
|
138
|
-
nodeWalk
|
|
139
|
-
nodeWalkBackward
|
|
140
|
-
nodeMap
|
|
125
|
+
private nodeWalk;
|
|
126
|
+
private nodeWalkBackward;
|
|
127
|
+
private nodeMap;
|
|
141
128
|
diag(): void;
|
|
142
129
|
}
|
|
143
|
-
export interface AugIntegerRangeNode {
|
|
144
|
-
minmax: IIntegerRange;
|
|
145
|
-
}
|
|
146
130
|
export interface AugmentedIntervalNode {
|
|
147
131
|
minmax: IInterval;
|
|
148
132
|
}
|
|
149
|
-
/**
|
|
150
|
-
* Union of two ranges; assumes for both ranges start \<= end.
|
|
151
|
-
* @param a - A range
|
|
152
|
-
* @param b - A range
|
|
153
|
-
*/
|
|
154
|
-
export declare function integerRangeUnion(a: IIntegerRange, b: IIntegerRange): IIntegerRange;
|
|
155
|
-
export declare function integerRangeOverlaps(a: IIntegerRange, b: IIntegerRange): boolean;
|
|
156
|
-
export declare function integerRangeComparer(a: IIntegerRange, b: IIntegerRange): number;
|
|
157
|
-
export declare const integerRangeCopy: (r: IIntegerRange) => IIntegerRange;
|
|
158
133
|
export declare const integerRangeToString: (range: IIntegerRange) => string;
|
|
159
|
-
export declare type IntegerRangeNode = RBNode<IIntegerRange, AugIntegerRangeNode>;
|
|
160
|
-
export declare class IntegerRangeTree implements IRBAugmentation<IIntegerRange, AugIntegerRangeNode>, IRBMatcher<IIntegerRange, AugIntegerRangeNode> {
|
|
161
|
-
ranges: RedBlackTree<IIntegerRange, AugIntegerRangeNode>;
|
|
162
|
-
diag: boolean;
|
|
163
|
-
remove(r: IIntegerRange): void;
|
|
164
|
-
put(r: IIntegerRange): void;
|
|
165
|
-
toString(): string;
|
|
166
|
-
nodeToString(node: IntegerRangeNode | undefined): string;
|
|
167
|
-
matchPos(pos: number): RBNode<IIntegerRange, AugIntegerRangeNode>[];
|
|
168
|
-
match(r: IIntegerRange): RBNode<IIntegerRange, AugIntegerRangeNode>[];
|
|
169
|
-
matchNode(node: IntegerRangeNode | undefined, key: IIntegerRange): boolean;
|
|
170
|
-
continueSubtree(node: IntegerRangeNode | undefined, key: IIntegerRange): boolean;
|
|
171
|
-
update(node: IntegerRangeNode): void;
|
|
172
|
-
}
|
|
173
134
|
export interface IInterval {
|
|
174
135
|
clone(): IInterval;
|
|
175
136
|
compare(b: IInterval): number;
|
|
@@ -179,16 +140,10 @@ export interface IInterval {
|
|
|
179
140
|
overlaps(b: IInterval): boolean;
|
|
180
141
|
union(b: IInterval): IInterval;
|
|
181
142
|
}
|
|
182
|
-
export declare const intervalComparer: (a: IInterval, b: IInterval) => number;
|
|
183
143
|
export declare type IntervalNode<T extends IInterval> = RBNode<T, AugmentedIntervalNode>;
|
|
184
144
|
export declare type IntervalConflictResolver<TInterval> = (a: TInterval, b: TInterval) => TInterval;
|
|
185
145
|
export declare class IntervalTree<T extends IInterval> implements IRBAugmentation<T, AugmentedIntervalNode>, IRBMatcher<T, AugmentedIntervalNode> {
|
|
186
146
|
intervals: RedBlackTree<T, AugmentedIntervalNode>;
|
|
187
|
-
diag: boolean;
|
|
188
|
-
timePut: boolean;
|
|
189
|
-
putTime: number;
|
|
190
|
-
putCount: number;
|
|
191
|
-
printTiming(): void;
|
|
192
147
|
remove(x: T): void;
|
|
193
148
|
removeExisting(x: T): void;
|
|
194
149
|
put(x: T, conflict?: IntervalConflictResolver<T>): void;
|
|
@@ -211,9 +166,6 @@ export interface TSTNode<T> {
|
|
|
211
166
|
right?: TSTNode<T>;
|
|
212
167
|
val?: T;
|
|
213
168
|
}
|
|
214
|
-
export interface TSTPrefix {
|
|
215
|
-
text: string;
|
|
216
|
-
}
|
|
217
169
|
export interface ProxString<T> {
|
|
218
170
|
text: string;
|
|
219
171
|
invDistance: number;
|
|
@@ -222,22 +174,19 @@ export interface ProxString<T> {
|
|
|
222
174
|
export declare class TST<T> {
|
|
223
175
|
private n;
|
|
224
176
|
private root;
|
|
225
|
-
constructor();
|
|
226
177
|
size(): number;
|
|
227
|
-
contains
|
|
178
|
+
private contains;
|
|
228
179
|
get(key: string): T | undefined;
|
|
229
|
-
nodeGet
|
|
180
|
+
private nodeGet;
|
|
230
181
|
put(key: string, val: T): void;
|
|
231
|
-
nodePut
|
|
182
|
+
private nodePut;
|
|
232
183
|
neighbors(text: string, distance?: number): ProxString<T>[];
|
|
233
184
|
keysWithPrefix(text: string): string[];
|
|
234
|
-
collect
|
|
235
|
-
mapNode
|
|
185
|
+
private collect;
|
|
186
|
+
private mapNode;
|
|
236
187
|
map(fn: (key: string, val: T) => void): void;
|
|
237
188
|
pairsWithPrefix(text: string): TSTResult<T>[];
|
|
238
|
-
collectPairs
|
|
239
|
-
|
|
240
|
-
nodeProximity(x: TSTNode<T> | undefined, prefix: TSTPrefix, d: number, pattern: string, distance: number, q: ProxString<T>[]): void;
|
|
241
|
-
match(pattern: string): string[];
|
|
189
|
+
private collectPairs;
|
|
190
|
+
private nodeProximity;
|
|
242
191
|
}
|
|
243
192
|
//# sourceMappingURL=collections.d.ts.map
|
package/lib/collections.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collections.d.ts","sourceRoot":"","sources":["../src/collections.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"collections.d.ts","sourceRoot":"","sources":["../src/collections.ts"],"names":[],"mappings":"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"}
|