@fluidframework/sequence 2.0.0-rc.2.0.2 → 2.0.0-rc.3.0.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/CHANGELOG.md +23 -0
- package/README.md +1 -1
- package/api-report/sequence.api.md +32 -32
- package/beta.d.ts +11 -0
- package/dist/{localValues.d.ts → IntervalCollectionValues.d.ts} +13 -12
- package/dist/IntervalCollectionValues.d.ts.map +1 -0
- package/dist/{localValues.js → IntervalCollectionValues.js} +6 -6
- package/dist/IntervalCollectionValues.js.map +1 -0
- package/dist/beta.d.ts +12 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -10
- package/dist/index.js.map +1 -1
- package/dist/intervalCollection.d.ts +10 -10
- package/dist/intervalCollection.d.ts.map +1 -1
- package/dist/intervalCollection.js +103 -99
- package/dist/intervalCollection.js.map +1 -1
- package/dist/{defaultMap.d.ts → intervalCollectionMap.d.ts} +11 -44
- package/dist/intervalCollectionMap.d.ts.map +1 -0
- package/dist/{defaultMap.js → intervalCollectionMap.js} +15 -70
- package/dist/intervalCollectionMap.js.map +1 -0
- package/dist/{defaultMapInterfaces.d.ts → intervalCollectionMapInterfaces.d.ts} +17 -16
- package/dist/intervalCollectionMapInterfaces.d.ts.map +1 -0
- package/dist/{defaultMapInterfaces.js → intervalCollectionMapInterfaces.js} +1 -1
- package/dist/intervalCollectionMapInterfaces.js.map +1 -0
- package/dist/intervalIndex/endpointInRangeIndex.d.ts +1 -1
- package/dist/intervalIndex/endpointInRangeIndex.d.ts.map +1 -1
- package/dist/intervalIndex/endpointInRangeIndex.js +3 -3
- package/dist/intervalIndex/endpointInRangeIndex.js.map +1 -1
- package/dist/intervalIndex/endpointIndex.d.ts +1 -1
- package/dist/intervalIndex/endpointIndex.d.ts.map +1 -1
- package/dist/intervalIndex/endpointIndex.js +3 -3
- package/dist/intervalIndex/endpointIndex.js.map +1 -1
- package/dist/intervalIndex/idIntervalIndex.d.ts.map +1 -1
- package/dist/intervalIndex/idIntervalIndex.js +3 -3
- package/dist/intervalIndex/idIntervalIndex.js.map +1 -1
- package/dist/intervalIndex/overlappingIntervalsIndex.d.ts +3 -3
- package/dist/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -1
- package/dist/intervalIndex/overlappingIntervalsIndex.js +2 -3
- package/dist/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +1 -1
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js +6 -6
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -1
- package/dist/intervalIndex/sequenceIntervalIndexes.d.ts +1 -1
- package/dist/intervalIndex/sequenceIntervalIndexes.d.ts.map +1 -1
- package/dist/intervalIndex/sequenceIntervalIndexes.js.map +1 -1
- package/dist/intervalIndex/startpointInRangeIndex.d.ts +1 -1
- package/dist/intervalIndex/startpointInRangeIndex.d.ts.map +1 -1
- package/dist/intervalIndex/startpointInRangeIndex.js +3 -3
- package/dist/intervalIndex/startpointInRangeIndex.js.map +1 -1
- package/dist/intervalTree.d.ts +1 -1
- package/dist/intervalTree.d.ts.map +1 -1
- package/dist/intervalTree.js +2 -2
- package/dist/intervalTree.js.map +1 -1
- package/dist/intervals/interval.d.ts +1 -1
- package/dist/intervals/interval.d.ts.map +1 -1
- package/dist/intervals/interval.js +10 -10
- package/dist/intervals/interval.js.map +1 -1
- package/dist/intervals/intervalUtils.d.ts +1 -1
- package/dist/intervals/intervalUtils.d.ts.map +1 -1
- package/dist/intervals/intervalUtils.js +5 -5
- package/dist/intervals/intervalUtils.js.map +1 -1
- package/dist/intervals/sequenceInterval.d.ts +1 -1
- package/dist/intervals/sequenceInterval.d.ts.map +1 -1
- package/dist/intervals/sequenceInterval.js +34 -34
- package/dist/intervals/sequenceInterval.js.map +1 -1
- package/dist/legacy.d.ts +61 -0
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/public.d.ts +12 -0
- package/dist/revertibles.d.ts +2 -2
- package/dist/revertibles.d.ts.map +1 -1
- package/dist/revertibles.js +34 -34
- package/dist/revertibles.js.map +1 -1
- package/dist/sequence.d.ts +7 -6
- package/dist/sequence.d.ts.map +1 -1
- package/dist/sequence.js +34 -34
- package/dist/sequence.js.map +1 -1
- package/dist/sequenceDeltaEvent.d.ts +1 -1
- package/dist/sequenceDeltaEvent.d.ts.map +1 -1
- package/dist/sequenceDeltaEvent.js +4 -4
- package/dist/sequenceDeltaEvent.js.map +1 -1
- package/dist/sequenceFactory.d.ts +1 -1
- package/dist/sequenceFactory.d.ts.map +1 -1
- package/dist/sequenceFactory.js +3 -3
- package/dist/sequenceFactory.js.map +1 -1
- package/dist/sharedIntervalCollection.d.ts +4 -3
- package/dist/sharedIntervalCollection.d.ts.map +1 -1
- package/dist/sharedIntervalCollection.js +5 -5
- package/dist/sharedIntervalCollection.js.map +1 -1
- package/dist/sharedSequence.d.ts +3 -2
- package/dist/sharedSequence.d.ts.map +1 -1
- package/dist/sharedSequence.js +4 -4
- package/dist/sharedSequence.js.map +1 -1
- package/dist/sharedString.d.ts +2 -2
- package/dist/sharedString.d.ts.map +1 -1
- package/dist/sharedString.js +9 -9
- package/dist/sharedString.js.map +1 -1
- package/internal.d.ts +11 -0
- package/legacy.d.ts +11 -0
- package/lib/{localValues.d.ts → IntervalCollectionValues.d.ts} +13 -12
- package/lib/IntervalCollectionValues.d.ts.map +1 -0
- package/lib/{localValues.js → IntervalCollectionValues.js} +3 -3
- package/lib/IntervalCollectionValues.js.map +1 -0
- package/lib/beta.d.ts +12 -0
- package/lib/index.d.ts +2 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/intervalCollection.d.ts +10 -10
- package/lib/intervalCollection.d.ts.map +1 -1
- package/lib/intervalCollection.js +8 -4
- package/lib/intervalCollection.js.map +1 -1
- package/lib/{defaultMap.d.ts → intervalCollectionMap.d.ts} +11 -44
- package/lib/intervalCollectionMap.d.ts.map +1 -0
- package/lib/{defaultMap.js → intervalCollectionMap.js} +8 -63
- package/lib/intervalCollectionMap.js.map +1 -0
- package/lib/{defaultMapInterfaces.d.ts → intervalCollectionMapInterfaces.d.ts} +17 -16
- package/lib/intervalCollectionMapInterfaces.d.ts.map +1 -0
- package/lib/{defaultMapInterfaces.js → intervalCollectionMapInterfaces.js} +1 -1
- package/lib/intervalCollectionMapInterfaces.js.map +1 -0
- package/lib/intervalIndex/endpointInRangeIndex.d.ts +1 -1
- package/lib/intervalIndex/endpointInRangeIndex.d.ts.map +1 -1
- package/lib/intervalIndex/endpointInRangeIndex.js +1 -1
- package/lib/intervalIndex/endpointInRangeIndex.js.map +1 -1
- package/lib/intervalIndex/endpointIndex.d.ts +1 -1
- package/lib/intervalIndex/endpointIndex.d.ts.map +1 -1
- package/lib/intervalIndex/endpointIndex.js +1 -1
- package/lib/intervalIndex/endpointIndex.js.map +1 -1
- package/lib/intervalIndex/idIntervalIndex.d.ts.map +1 -1
- package/lib/intervalIndex/idIntervalIndex.js +1 -1
- package/lib/intervalIndex/idIntervalIndex.js.map +1 -1
- package/lib/intervalIndex/overlappingIntervalsIndex.d.ts +3 -3
- package/lib/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -1
- package/lib/intervalIndex/overlappingIntervalsIndex.js +2 -3
- package/lib/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +1 -1
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js +2 -2
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -1
- package/lib/intervalIndex/sequenceIntervalIndexes.d.ts +1 -1
- package/lib/intervalIndex/sequenceIntervalIndexes.d.ts.map +1 -1
- package/lib/intervalIndex/sequenceIntervalIndexes.js.map +1 -1
- package/lib/intervalIndex/startpointInRangeIndex.d.ts +1 -1
- package/lib/intervalIndex/startpointInRangeIndex.d.ts.map +1 -1
- package/lib/intervalIndex/startpointInRangeIndex.js +1 -1
- package/lib/intervalIndex/startpointInRangeIndex.js.map +1 -1
- package/lib/intervalTree.d.ts +1 -1
- package/lib/intervalTree.d.ts.map +1 -1
- package/lib/intervalTree.js +1 -1
- package/lib/intervalTree.js.map +1 -1
- package/lib/intervals/interval.d.ts +1 -1
- package/lib/intervals/interval.d.ts.map +1 -1
- package/lib/intervals/interval.js +3 -3
- package/lib/intervals/interval.js.map +1 -1
- package/lib/intervals/intervalUtils.d.ts +1 -1
- package/lib/intervals/intervalUtils.d.ts.map +1 -1
- package/lib/intervals/intervalUtils.js +1 -1
- package/lib/intervals/intervalUtils.js.map +1 -1
- package/lib/intervals/sequenceInterval.d.ts +1 -1
- package/lib/intervals/sequenceInterval.d.ts.map +1 -1
- package/lib/intervals/sequenceInterval.js +3 -3
- package/lib/intervals/sequenceInterval.js.map +1 -1
- package/lib/legacy.d.ts +61 -0
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/public.d.ts +12 -0
- package/lib/revertibles.d.ts +2 -2
- package/lib/revertibles.d.ts.map +1 -1
- package/lib/revertibles.js +3 -4
- package/lib/revertibles.js.map +1 -1
- package/lib/sequence.d.ts +7 -6
- package/lib/sequence.d.ts.map +1 -1
- package/lib/sequence.js +11 -12
- package/lib/sequence.js.map +1 -1
- package/lib/sequenceDeltaEvent.d.ts +1 -1
- package/lib/sequenceDeltaEvent.d.ts.map +1 -1
- package/lib/sequenceDeltaEvent.js +3 -4
- package/lib/sequenceDeltaEvent.js.map +1 -1
- package/lib/sequenceFactory.d.ts +1 -1
- package/lib/sequenceFactory.d.ts.map +1 -1
- package/lib/sequenceFactory.js +1 -1
- package/lib/sequenceFactory.js.map +1 -1
- package/lib/sharedIntervalCollection.d.ts +4 -3
- package/lib/sharedIntervalCollection.d.ts.map +1 -1
- package/lib/sharedIntervalCollection.js +4 -4
- package/lib/sharedIntervalCollection.js.map +1 -1
- package/lib/sharedSequence.d.ts +3 -2
- package/lib/sharedSequence.d.ts.map +1 -1
- package/lib/sharedSequence.js +2 -2
- package/lib/sharedSequence.js.map +1 -1
- package/lib/sharedString.d.ts +2 -2
- package/lib/sharedString.d.ts.map +1 -1
- package/lib/sharedString.js +1 -1
- package/lib/sharedString.js.map +1 -1
- package/package.json +41 -58
- package/src/{localValues.ts → IntervalCollectionValues.ts} +26 -18
- package/src/index.ts +2 -2
- package/src/intervalCollection.ts +46 -47
- package/src/{defaultMap.ts → intervalCollectionMap.ts} +42 -105
- package/src/{defaultMapInterfaces.ts → intervalCollectionMapInterfaces.ts} +26 -16
- package/src/intervalIndex/endpointInRangeIndex.ts +4 -1
- package/src/intervalIndex/endpointIndex.ts +4 -1
- package/src/intervalIndex/idIntervalIndex.ts +4 -2
- package/src/intervalIndex/overlappingIntervalsIndex.ts +8 -5
- package/src/intervalIndex/overlappingSequenceIntervalsIndex.ts +6 -3
- package/src/intervalIndex/sequenceIntervalIndexes.ts +3 -1
- package/src/intervalIndex/startpointInRangeIndex.ts +4 -1
- package/src/intervalTree.ts +4 -3
- package/src/intervals/interval.ts +6 -3
- package/src/intervals/intervalUtils.ts +4 -2
- package/src/intervals/sequenceInterval.ts +5 -3
- package/src/packageVersion.ts +1 -1
- package/src/revertibles.ts +10 -10
- package/src/sequence.ts +24 -31
- package/src/sequenceDeltaEvent.ts +3 -4
- package/src/sequenceFactory.ts +4 -3
- package/src/sharedIntervalCollection.ts +12 -18
- package/src/sharedSequence.ts +9 -6
- package/src/sharedString.ts +4 -3
- package/api-extractor-cjs.json +0 -8
- package/dist/defaultMap.d.ts.map +0 -1
- package/dist/defaultMap.js.map +0 -1
- package/dist/defaultMapInterfaces.d.ts.map +0 -1
- package/dist/defaultMapInterfaces.js.map +0 -1
- package/dist/localValues.d.ts.map +0 -1
- package/dist/localValues.js.map +0 -1
- package/dist/sequence-alpha.d.ts +0 -1432
- package/dist/sequence-beta.d.ts +0 -246
- package/dist/sequence-public.d.ts +0 -246
- package/dist/sequence-untrimmed.d.ts +0 -1820
- package/lib/defaultMap.d.ts.map +0 -1
- package/lib/defaultMap.js.map +0 -1
- package/lib/defaultMapInterfaces.d.ts.map +0 -1
- package/lib/defaultMapInterfaces.js.map +0 -1
- package/lib/localValues.d.ts.map +0 -1
- package/lib/localValues.js.map +0 -1
- package/lib/sequence-alpha.d.ts +0 -1432
- package/lib/sequence-beta.d.ts +0 -246
- package/lib/sequence-public.d.ts +0 -246
- package/lib/sequence-untrimmed.d.ts +0 -1820
- package/lib/test/collections.intervalTree.js +0 -73
- package/lib/test/collections.intervalTree.js.map +0 -1
- package/lib/test/createSnapshotFiles.js +0 -15
- package/lib/test/createSnapshotFiles.js.map +0 -1
- package/lib/test/dirname.cjs +0 -16
- package/lib/test/dirname.cjs.map +0 -1
- package/lib/test/endpointInRangeIndex.spec.js +0 -182
- package/lib/test/endpointInRangeIndex.spec.js.map +0 -1
- package/lib/test/fuzz/fuzzUtils.js +0 -250
- package/lib/test/fuzz/fuzzUtils.js.map +0 -1
- package/lib/test/fuzz/intervalCollection.fuzz.spec.js +0 -200
- package/lib/test/fuzz/intervalCollection.fuzz.spec.js.map +0 -1
- package/lib/test/fuzz/intervalRevertibles.fuzz.spec.js +0 -129
- package/lib/test/fuzz/intervalRevertibles.fuzz.spec.js.map +0 -1
- package/lib/test/fuzz/sharedString.fuzz.spec.js +0 -91
- package/lib/test/fuzz/sharedString.fuzz.spec.js.map +0 -1
- package/lib/test/generateSharedStrings.js +0 -138
- package/lib/test/generateSharedStrings.js.map +0 -1
- package/lib/test/intervalCollection.detached.spec.js +0 -126
- package/lib/test/intervalCollection.detached.spec.js.map +0 -1
- package/lib/test/intervalCollection.events.spec.js +0 -491
- package/lib/test/intervalCollection.events.spec.js.map +0 -1
- package/lib/test/intervalCollection.perf.spec.js +0 -88
- package/lib/test/intervalCollection.perf.spec.js.map +0 -1
- package/lib/test/intervalCollection.snapshot.spec.js +0 -171
- package/lib/test/intervalCollection.snapshot.spec.js.map +0 -1
- package/lib/test/intervalCollection.spec.js +0 -1660
- package/lib/test/intervalCollection.spec.js.map +0 -1
- package/lib/test/intervalIndexTestUtils.js +0 -49
- package/lib/test/intervalIndexTestUtils.js.map +0 -1
- package/lib/test/intervalRebasing.spec.js +0 -589
- package/lib/test/intervalRebasing.spec.js.map +0 -1
- package/lib/test/intervalStashedOps.spec.js +0 -142
- package/lib/test/intervalStashedOps.spec.js.map +0 -1
- package/lib/test/intervalTestUtils.js +0 -81
- package/lib/test/intervalTestUtils.js.map +0 -1
- package/lib/test/marshalling.spec.js +0 -55
- package/lib/test/marshalling.spec.js.map +0 -1
- package/lib/test/memory/sharedSequence.spec.js +0 -82
- package/lib/test/memory/sharedSequence.spec.js.map +0 -1
- package/lib/test/memory/sharedString.spec.js +0 -134
- package/lib/test/memory/sharedString.spec.js.map +0 -1
- package/lib/test/overlappingSequenceIntervalsIndex.spec.js +0 -348
- package/lib/test/overlappingSequenceIntervalsIndex.spec.js.map +0 -1
- package/lib/test/partialLoad.spec.js +0 -211
- package/lib/test/partialLoad.spec.js.map +0 -1
- package/lib/test/rebasing.spec.js +0 -81
- package/lib/test/rebasing.spec.js.map +0 -1
- package/lib/test/reentrancy.spec.js +0 -174
- package/lib/test/reentrancy.spec.js.map +0 -1
- package/lib/test/revertibles.spec.js +0 -971
- package/lib/test/revertibles.spec.js.map +0 -1
- package/lib/test/sequenceDeltaEvent.spec.js +0 -2144
- package/lib/test/sequenceDeltaEvent.spec.js.map +0 -1
- package/lib/test/sharedIntervalCollection.spec.js +0 -159
- package/lib/test/sharedIntervalCollection.spec.js.map +0 -1
- package/lib/test/sharedString.spec.js +0 -532
- package/lib/test/sharedString.spec.js.map +0 -1
- package/lib/test/snapshotEmptyProps.spec.js +0 -45
- package/lib/test/snapshotEmptyProps.spec.js.map +0 -1
- package/lib/test/snapshotVersion.spec.js +0 -149
- package/lib/test/snapshotVersion.spec.js.map +0 -1
- package/lib/test/startpointInRangeIndex.spec.js +0 -182
- package/lib/test/startpointInRangeIndex.spec.js.map +0 -1
- package/lib/test/subSequence.spec.js +0 -92
- package/lib/test/subSequence.spec.js.map +0 -1
- package/lib/test/types/validateSequencePrevious.generated.js +0 -162
- package/lib/test/types/validateSequencePrevious.generated.js.map +0 -1
- package/lib/test/v1IntervalCollectionHelpers.js +0 -93
- package/lib/test/v1IntervalCollectionHelpers.js.map +0 -1
- /package/{dist → lib}/tsdoc-metadata.json +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generateSharedStrings.js","sourceRoot":"","sources":["../../src/test/generateSharedStrings.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-next-line import/no-internal-modules\nimport { SnapshotLegacy as Snapshot } from \"@fluidframework/merge-tree/test\";\nimport { MersenneTwister19937, Random } from \"random-js\";\nimport * as mocks from \"@fluidframework/test-runtime-utils\";\nimport { SharedString } from \"../sharedString.js\";\nimport { SharedStringFactory } from \"../sequenceFactory.js\";\nimport {\n\tSharedStringWithV1IntervalCollection,\n\tV1IntervalCollectionSharedStringFactory,\n} from \"./v1IntervalCollectionHelpers.js\";\n\nexport const LocationBase: string = \"src/test/snapshots/\";\n\nexport const supportedVersions = new Map<string, any>([\n\t// the catchUpBlob had to be renamed.\n\t// We are now support any name for this blob.\n\t// so for legacy set it to another name to ensure\n\t// we keep support\n\t[\"legacy\", { catchUpBlobName: \"randomNameForCatchUpOps\" }],\n\t[\"legacyWithCatchUp\", {}],\n\t[\"v1\", { newMergeTreeSnapshotFormat: true }],\n\t[\"v1Intervals\", {}],\n]);\n\nfunction createIntervals(sharedString) {\n\tconst rand = new Random(MersenneTwister19937.seed(0));\n\tconst collection1 = sharedString.getIntervalCollection(\"collection1\");\n\tcollection1.add({ start: 1, end: 5, props: { intervalId: rand.uuid4() } });\n\n\tconst collection2 = sharedString.getIntervalCollection(\"collection2\");\n\tfor (let i = 0; i < sharedString.getLength() - 5; i += 100) {\n\t\tcollection2.add({ start: i, end: i + 5, props: { intervalId: rand.uuid4() } });\n\t}\n}\n\nexport function* generateStrings(): Generator<{\n\tsnapshotPath: string;\n\texpected: SharedString;\n\tsnapshotIsNormalized: boolean; // false for v1, true for new formats\n}> {\n\tfor (const [version, options] of supportedVersions) {\n\t\tconst documentId = \"fakeId\";\n\t\tconst dataStoreRuntime: mocks.MockFluidDataStoreRuntime =\n\t\t\tnew mocks.MockFluidDataStoreRuntime();\n\t\tconst createNewSharedString = (): SharedString => {\n\t\t\tconst string = new SharedString(\n\t\t\t\tdataStoreRuntime,\n\t\t\t\tdocumentId,\n\t\t\t\tSharedStringFactory.Attributes,\n\t\t\t);\n\t\t\tstring.initializeLocal();\n\t\t\treturn string;\n\t\t};\n\t\tconst createNewV1SharedString = (): SharedStringWithV1IntervalCollection => {\n\t\t\tconst string = new SharedStringWithV1IntervalCollection(\n\t\t\t\tdataStoreRuntime,\n\t\t\t\tdocumentId,\n\t\t\t\tV1IntervalCollectionSharedStringFactory.Attributes,\n\t\t\t);\n\t\t\tstring.initializeLocal();\n\t\t\treturn string;\n\t\t};\n\n\t\tconst normalized = version !== \"v1Intervals\";\n\n\t\tfor (const key of Object.keys(options)) {\n\t\t\tdataStoreRuntime.options[key] = options[key];\n\t\t}\n\t\tconst insertText = \"text\";\n\n\t\tlet sharedString = createNewSharedString();\n\t\t// Small enough so snapshot won't have body\n\t\tfor (let i = 0; i < Snapshot.sizeOfFirstChunk / insertText.length / 2; ++i) {\n\t\t\tsharedString.insertText(0, `${insertText}${i}`);\n\t\t}\n\n\t\tyield {\n\t\t\tsnapshotPath: `${version}/headerOnly`,\n\t\t\texpected: sharedString,\n\t\t\tsnapshotIsNormalized: normalized,\n\t\t};\n\n\t\tsharedString = createNewSharedString();\n\t\t// Big enough that snapshot will have body\n\t\tfor (let i = 0; i < (Snapshot.sizeOfFirstChunk / insertText.length) * 2; ++i) {\n\t\t\tsharedString.insertText(0, `${insertText}${i}`);\n\t\t}\n\n\t\tyield {\n\t\t\tsnapshotPath: `${version}/headerAndBody`,\n\t\t\texpected: sharedString,\n\t\t\tsnapshotIsNormalized: normalized,\n\t\t};\n\n\t\tsharedString = createNewSharedString();\n\t\t// Very big sharedString\n\t\tfor (let i = 0; i < Snapshot.sizeOfFirstChunk; ++i) {\n\t\t\tsharedString.insertText(0, `${insertText}-${i}`);\n\t\t}\n\n\t\tyield {\n\t\t\tsnapshotPath: `${version}/largeBody`,\n\t\t\texpected: sharedString,\n\t\t\tsnapshotIsNormalized: normalized,\n\t\t};\n\n\t\tsharedString = createNewSharedString();\n\t\t// SharedString with markers\n\t\tfor (let i = 0; i < (Snapshot.sizeOfFirstChunk / insertText.length) * 2; ++i) {\n\t\t\tsharedString.insertText(0, `${insertText}${i}`);\n\t\t}\n\t\tfor (let i = 0; i < sharedString.getLength(); i += 70) {\n\t\t\tsharedString.insertMarker(i, 1, {\n\t\t\t\tItemType: \"Paragraph\",\n\t\t\t\tProperties: { Bold: false },\n\t\t\t\tmarkerId: `marker${i}`,\n\t\t\t\treferenceTileLabels: [\"Eop\"],\n\t\t\t});\n\t\t}\n\n\t\tyield {\n\t\t\tsnapshotPath: `${version}/withMarkers`,\n\t\t\texpected: sharedString,\n\t\t\tsnapshotIsNormalized: normalized,\n\t\t};\n\n\t\tsharedString = createNewSharedString();\n\t\t// SharedString with annotations\n\t\tfor (let i = 0; i < (Snapshot.sizeOfFirstChunk / insertText.length) * 2; ++i) {\n\t\t\tsharedString.insertText(0, `${insertText}${i}`);\n\t\t}\n\t\tfor (let i = 0; i < sharedString.getLength(); i += 70) {\n\t\t\tsharedString.annotateRange(i, i + 10, { bold: true });\n\t\t}\n\n\t\tyield {\n\t\t\tsnapshotPath: `${version}/withAnnotations`,\n\t\t\texpected: sharedString,\n\t\t\tsnapshotIsNormalized: normalized,\n\t\t};\n\n\t\tsharedString = createNewSharedString();\n\t\t// SharedString with intervals\n\t\tfor (let i = 0; i < Snapshot.sizeOfFirstChunk / insertText.length / 2; i++) {\n\t\t\tsharedString.insertText(0, `${insertText}${i}`);\n\t\t}\n\n\t\tcreateIntervals(sharedString);\n\n\t\tyield {\n\t\t\tsnapshotPath: `${version}/withIntervals`,\n\t\t\texpected: sharedString,\n\t\t\tsnapshotIsNormalized: normalized,\n\t\t};\n\n\t\tif (version === \"v1Intervals\") {\n\t\t\tsharedString = createNewV1SharedString();\n\t\t\t// SharedString with V1 intervals\n\t\t\tfor (let i = 0; i < Snapshot.sizeOfFirstChunk / insertText.length / 2; i++) {\n\t\t\t\tsharedString.insertText(0, `${insertText}${i}`);\n\t\t\t}\n\t\t\tcreateIntervals(sharedString);\n\n\t\t\tyield {\n\t\t\t\tsnapshotPath: `${version}/withV1Intervals`,\n\t\t\t\texpected: sharedString,\n\t\t\t\tsnapshotIsNormalized: normalized,\n\t\t\t};\n\t\t}\n\t}\n}\n"]}
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
import { strict as assert } from "assert";
|
|
6
|
-
import { MockContainerRuntimeFactory, MockFluidDataStoreRuntime, MockStorage, } from "@fluidframework/test-runtime-utils";
|
|
7
|
-
import { SharedString } from "../sharedString.js";
|
|
8
|
-
import { assertEquivalentSharedStrings } from "./intervalTestUtils.js";
|
|
9
|
-
describe("IntervalCollection detached", () => {
|
|
10
|
-
const factory = SharedString.getFactory();
|
|
11
|
-
let dataStoreRuntime;
|
|
12
|
-
let sharedString;
|
|
13
|
-
let collection;
|
|
14
|
-
beforeEach(() => {
|
|
15
|
-
dataStoreRuntime = new MockFluidDataStoreRuntime();
|
|
16
|
-
sharedString = factory.create(dataStoreRuntime, "A");
|
|
17
|
-
collection = sharedString.getIntervalCollection("intervals");
|
|
18
|
-
});
|
|
19
|
-
const attachAndLoadSecondSharedString = async () => {
|
|
20
|
-
assert.equal(sharedString.isAttached(), false);
|
|
21
|
-
const containerRuntimeFactory = new MockContainerRuntimeFactory();
|
|
22
|
-
const containerRuntime = containerRuntimeFactory.createContainerRuntime(dataStoreRuntime);
|
|
23
|
-
const attachSummary = sharedString.getAttachSummary().summary;
|
|
24
|
-
sharedString.connect({
|
|
25
|
-
deltaConnection: containerRuntime.createDeltaConnection(),
|
|
26
|
-
objectStorage: new MockStorage(),
|
|
27
|
-
});
|
|
28
|
-
const dataStoreRuntime2 = new MockFluidDataStoreRuntime();
|
|
29
|
-
const containerRuntime2 = containerRuntimeFactory.createContainerRuntime(dataStoreRuntime2);
|
|
30
|
-
const sharedString2 = await factory.load(dataStoreRuntime2, "B", {
|
|
31
|
-
deltaConnection: containerRuntime2.createDeltaConnection(),
|
|
32
|
-
objectStorage: MockStorage.createFromSummary(attachSummary),
|
|
33
|
-
}, factory.attributes);
|
|
34
|
-
return { sharedString2, containerRuntimeFactory };
|
|
35
|
-
};
|
|
36
|
-
describe("interval created while detached", () => {
|
|
37
|
-
it("slides immediately on segment removal", () => {
|
|
38
|
-
sharedString.insertText(0, "0123");
|
|
39
|
-
const interval = collection.add({ start: 0, end: 2 });
|
|
40
|
-
sharedString.removeText(2, 3);
|
|
41
|
-
assert.equal(interval.end.getSegment()?.text, "3");
|
|
42
|
-
});
|
|
43
|
-
it("synchronizes correctly on another client", async () => {
|
|
44
|
-
sharedString.insertText(0, "0123");
|
|
45
|
-
collection.add({ start: 0, end: 2 });
|
|
46
|
-
const { sharedString2, containerRuntimeFactory } = await attachAndLoadSecondSharedString();
|
|
47
|
-
sharedString2.removeText(2, 3);
|
|
48
|
-
containerRuntimeFactory.processAllMessages();
|
|
49
|
-
assertEquivalentSharedStrings(sharedString, sharedString2);
|
|
50
|
-
});
|
|
51
|
-
it("can be changed by another client after attaching", async () => {
|
|
52
|
-
sharedString.insertText(0, "0123");
|
|
53
|
-
const interval = collection.add({ start: 0, end: 2 });
|
|
54
|
-
const { sharedString2, containerRuntimeFactory } = await attachAndLoadSecondSharedString();
|
|
55
|
-
const collection2 = sharedString2.getIntervalCollection("intervals");
|
|
56
|
-
collection2.change(interval.getIntervalId(), { start: 1, end: 1 });
|
|
57
|
-
containerRuntimeFactory.processAllMessages();
|
|
58
|
-
assertEquivalentSharedStrings(sharedString, sharedString2);
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
describe("interval changed while detached", () => {
|
|
62
|
-
it("slides immediately on segment removal", () => {
|
|
63
|
-
sharedString.insertText(0, "0123");
|
|
64
|
-
const interval = collection.add({ start: 0, end: 2 });
|
|
65
|
-
collection.change(interval.getIntervalId(), { start: 0, end: 0 });
|
|
66
|
-
sharedString.removeText(0, 1);
|
|
67
|
-
assert.equal(interval.start.getSegment()?.text, "123");
|
|
68
|
-
assert.equal(interval.end.getSegment()?.text, "123");
|
|
69
|
-
});
|
|
70
|
-
it("synchronizes correctly on another client", async () => {
|
|
71
|
-
sharedString.insertText(0, "0123");
|
|
72
|
-
const interval = collection.add({ start: 0, end: 2 });
|
|
73
|
-
collection.change(interval.getIntervalId(), { start: 0, end: 0 });
|
|
74
|
-
const { sharedString2, containerRuntimeFactory } = await attachAndLoadSecondSharedString();
|
|
75
|
-
sharedString2.removeText(0, 1);
|
|
76
|
-
containerRuntimeFactory.processAllMessages();
|
|
77
|
-
assertEquivalentSharedStrings(sharedString, sharedString2);
|
|
78
|
-
});
|
|
79
|
-
it("can be changed by another client after attaching", async () => {
|
|
80
|
-
sharedString.insertText(0, "0123");
|
|
81
|
-
const interval = collection.add({ start: 0, end: 2 });
|
|
82
|
-
collection.change(interval.getIntervalId(), { start: 0, end: 0 });
|
|
83
|
-
const { sharedString2, containerRuntimeFactory } = await attachAndLoadSecondSharedString();
|
|
84
|
-
const collection2 = sharedString2.getIntervalCollection("intervals");
|
|
85
|
-
collection2.change(interval.getIntervalId(), { start: 1, end: 1 });
|
|
86
|
-
containerRuntimeFactory.processAllMessages();
|
|
87
|
-
assertEquivalentSharedStrings(sharedString, sharedString2);
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
describe("interval with properties changed while detached", () => {
|
|
91
|
-
it("synchronizes correctly on another client", async () => {
|
|
92
|
-
sharedString.insertText(0, "0123");
|
|
93
|
-
const interval = collection.add({ start: 0, end: 2, props: { foo: "a1" } });
|
|
94
|
-
collection.change(interval.getIntervalId(), { props: { foo: "a2" } });
|
|
95
|
-
const { sharedString2, containerRuntimeFactory } = await attachAndLoadSecondSharedString();
|
|
96
|
-
containerRuntimeFactory.processAllMessages();
|
|
97
|
-
assertEquivalentSharedStrings(sharedString, sharedString2);
|
|
98
|
-
assert.equal(collection.getIntervalById(interval.getIntervalId())?.properties.foo, "a2");
|
|
99
|
-
});
|
|
100
|
-
it("can be changed by another client after attaching", async () => {
|
|
101
|
-
sharedString.insertText(0, "0123");
|
|
102
|
-
const interval = collection.add({ start: 0, end: 2, props: { foo: "a1" } });
|
|
103
|
-
collection.change(interval.getIntervalId(), { props: { foo: "a2" } });
|
|
104
|
-
const { sharedString2, containerRuntimeFactory } = await attachAndLoadSecondSharedString();
|
|
105
|
-
const collection2 = sharedString2.getIntervalCollection("intervals");
|
|
106
|
-
collection2.change(interval.getIntervalId(), { props: { foo: "b1" } });
|
|
107
|
-
containerRuntimeFactory.processAllMessages();
|
|
108
|
-
assertEquivalentSharedStrings(sharedString, sharedString2);
|
|
109
|
-
assert.equal(collection.getIntervalById(interval.getIntervalId())?.properties.foo, "b1");
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
describe("intervals deleted while detached", () => {
|
|
113
|
-
it("aren't added to the remote client", async () => {
|
|
114
|
-
sharedString.insertText(0, "0123");
|
|
115
|
-
const interval = collection.add({ start: 0, end: 2 });
|
|
116
|
-
const id = interval.getIntervalId();
|
|
117
|
-
collection.removeIntervalById(id);
|
|
118
|
-
const { sharedString2 } = await attachAndLoadSecondSharedString();
|
|
119
|
-
const collection2 = sharedString2.getIntervalCollection("intervals");
|
|
120
|
-
assert.equal(Array.from(collection2).length, 0);
|
|
121
|
-
assert.equal(collection2.getIntervalById(id), undefined);
|
|
122
|
-
assertEquivalentSharedStrings(sharedString, sharedString2);
|
|
123
|
-
});
|
|
124
|
-
});
|
|
125
|
-
});
|
|
126
|
-
//# sourceMappingURL=intervalCollection.detached.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"intervalCollection.detached.spec.js","sourceRoot":"","sources":["../../src/test/intervalCollection.detached.spec.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 { strict as assert } from \"assert\";\nimport {\n\tMockContainerRuntimeFactory,\n\tMockFluidDataStoreRuntime,\n\tMockStorage,\n} from \"@fluidframework/test-runtime-utils\";\nimport { TextSegment } from \"@fluidframework/merge-tree\";\nimport { SharedString } from \"../sharedString.js\";\nimport { SequenceInterval } from \"../intervals/index.js\";\nimport { IIntervalCollection } from \"../intervalCollection.js\";\nimport { assertEquivalentSharedStrings } from \"./intervalTestUtils.js\";\n\ndescribe(\"IntervalCollection detached\", () => {\n\tconst factory = SharedString.getFactory();\n\tlet dataStoreRuntime: MockFluidDataStoreRuntime;\n\tlet sharedString: SharedString;\n\tlet collection: IIntervalCollection<SequenceInterval>;\n\tbeforeEach(() => {\n\t\tdataStoreRuntime = new MockFluidDataStoreRuntime();\n\t\tsharedString = factory.create(dataStoreRuntime, \"A\");\n\t\tcollection = sharedString.getIntervalCollection(\"intervals\");\n\t});\n\n\tconst attachAndLoadSecondSharedString = async (): Promise<{\n\t\tcontainerRuntimeFactory: MockContainerRuntimeFactory;\n\t\tsharedString2: SharedString;\n\t}> => {\n\t\tassert.equal(sharedString.isAttached(), false);\n\t\tconst containerRuntimeFactory = new MockContainerRuntimeFactory();\n\t\tconst containerRuntime = containerRuntimeFactory.createContainerRuntime(dataStoreRuntime);\n\t\tconst attachSummary = sharedString.getAttachSummary().summary;\n\t\tsharedString.connect({\n\t\t\tdeltaConnection: containerRuntime.createDeltaConnection(),\n\t\t\tobjectStorage: new MockStorage(),\n\t\t});\n\n\t\tconst dataStoreRuntime2 = new MockFluidDataStoreRuntime();\n\t\tconst containerRuntime2 = containerRuntimeFactory.createContainerRuntime(dataStoreRuntime2);\n\t\tconst sharedString2 = await factory.load(\n\t\t\tdataStoreRuntime2,\n\t\t\t\"B\",\n\t\t\t{\n\t\t\t\tdeltaConnection: containerRuntime2.createDeltaConnection(),\n\t\t\t\tobjectStorage: MockStorage.createFromSummary(attachSummary),\n\t\t\t},\n\t\t\tfactory.attributes,\n\t\t);\n\t\treturn { sharedString2, containerRuntimeFactory };\n\t};\n\n\tdescribe(\"interval created while detached\", () => {\n\t\tit(\"slides immediately on segment removal\", () => {\n\t\t\tsharedString.insertText(0, \"0123\");\n\t\t\tconst interval = collection.add({ start: 0, end: 2 });\n\t\t\tsharedString.removeText(2, 3);\n\t\t\tassert.equal((interval.end.getSegment() as TextSegment)?.text, \"3\");\n\t\t});\n\n\t\tit(\"synchronizes correctly on another client\", async () => {\n\t\t\tsharedString.insertText(0, \"0123\");\n\t\t\tcollection.add({ start: 0, end: 2 });\n\t\t\tconst { sharedString2, containerRuntimeFactory } =\n\t\t\t\tawait attachAndLoadSecondSharedString();\n\n\t\t\tsharedString2.removeText(2, 3);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassertEquivalentSharedStrings(sharedString, sharedString2);\n\t\t});\n\n\t\tit(\"can be changed by another client after attaching\", async () => {\n\t\t\tsharedString.insertText(0, \"0123\");\n\t\t\tconst interval = collection.add({ start: 0, end: 2 });\n\t\t\tconst { sharedString2, containerRuntimeFactory } =\n\t\t\t\tawait attachAndLoadSecondSharedString();\n\n\t\t\tconst collection2 = sharedString2.getIntervalCollection(\"intervals\");\n\t\t\tcollection2.change(interval.getIntervalId(), { start: 1, end: 1 });\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassertEquivalentSharedStrings(sharedString, sharedString2);\n\t\t});\n\t});\n\n\tdescribe(\"interval changed while detached\", () => {\n\t\tit(\"slides immediately on segment removal\", () => {\n\t\t\tsharedString.insertText(0, \"0123\");\n\t\t\tconst interval = collection.add({ start: 0, end: 2 });\n\t\t\tcollection.change(interval.getIntervalId(), { start: 0, end: 0 });\n\t\t\tsharedString.removeText(0, 1);\n\t\t\tassert.equal((interval.start.getSegment() as TextSegment)?.text, \"123\");\n\t\t\tassert.equal((interval.end.getSegment() as TextSegment)?.text, \"123\");\n\t\t});\n\n\t\tit(\"synchronizes correctly on another client\", async () => {\n\t\t\tsharedString.insertText(0, \"0123\");\n\t\t\tconst interval = collection.add({ start: 0, end: 2 });\n\t\t\tcollection.change(interval.getIntervalId(), { start: 0, end: 0 });\n\t\t\tconst { sharedString2, containerRuntimeFactory } =\n\t\t\t\tawait attachAndLoadSecondSharedString();\n\n\t\t\tsharedString2.removeText(0, 1);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassertEquivalentSharedStrings(sharedString, sharedString2);\n\t\t});\n\n\t\tit(\"can be changed by another client after attaching\", async () => {\n\t\t\tsharedString.insertText(0, \"0123\");\n\t\t\tconst interval = collection.add({ start: 0, end: 2 });\n\t\t\tcollection.change(interval.getIntervalId(), { start: 0, end: 0 });\n\t\t\tconst { sharedString2, containerRuntimeFactory } =\n\t\t\t\tawait attachAndLoadSecondSharedString();\n\n\t\t\tconst collection2 = sharedString2.getIntervalCollection(\"intervals\");\n\t\t\tcollection2.change(interval.getIntervalId(), { start: 1, end: 1 });\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassertEquivalentSharedStrings(sharedString, sharedString2);\n\t\t});\n\t});\n\n\tdescribe(\"interval with properties changed while detached\", () => {\n\t\tit(\"synchronizes correctly on another client\", async () => {\n\t\t\tsharedString.insertText(0, \"0123\");\n\t\t\tconst interval = collection.add({ start: 0, end: 2, props: { foo: \"a1\" } });\n\t\t\tcollection.change(interval.getIntervalId(), { props: { foo: \"a2\" } });\n\t\t\tconst { sharedString2, containerRuntimeFactory } =\n\t\t\t\tawait attachAndLoadSecondSharedString();\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassertEquivalentSharedStrings(sharedString, sharedString2);\n\t\t\tassert.equal(\n\t\t\t\tcollection.getIntervalById(interval.getIntervalId())?.properties.foo,\n\t\t\t\t\"a2\",\n\t\t\t);\n\t\t});\n\n\t\tit(\"can be changed by another client after attaching\", async () => {\n\t\t\tsharedString.insertText(0, \"0123\");\n\t\t\tconst interval = collection.add({ start: 0, end: 2, props: { foo: \"a1\" } });\n\t\t\tcollection.change(interval.getIntervalId(), { props: { foo: \"a2\" } });\n\t\t\tconst { sharedString2, containerRuntimeFactory } =\n\t\t\t\tawait attachAndLoadSecondSharedString();\n\n\t\t\tconst collection2 = sharedString2.getIntervalCollection(\"intervals\");\n\t\t\tcollection2.change(interval.getIntervalId(), { props: { foo: \"b1\" } });\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassertEquivalentSharedStrings(sharedString, sharedString2);\n\t\t\tassert.equal(\n\t\t\t\tcollection.getIntervalById(interval.getIntervalId())?.properties.foo,\n\t\t\t\t\"b1\",\n\t\t\t);\n\t\t});\n\t});\n\n\tdescribe(\"intervals deleted while detached\", () => {\n\t\tit(\"aren't added to the remote client\", async () => {\n\t\t\tsharedString.insertText(0, \"0123\");\n\t\t\tconst interval = collection.add({ start: 0, end: 2 });\n\t\t\tconst id = interval.getIntervalId();\n\t\t\tcollection.removeIntervalById(id);\n\t\t\tconst { sharedString2 } = await attachAndLoadSecondSharedString();\n\n\t\t\tconst collection2 = sharedString2.getIntervalCollection(\"intervals\");\n\t\t\tassert.equal(Array.from(collection2).length, 0);\n\t\t\tassert.equal(collection2.getIntervalById(id), undefined);\n\t\t\tassertEquivalentSharedStrings(sharedString, sharedString2);\n\t\t});\n\t});\n});\n"]}
|