@fluidframework/sequence 2.0.0-rc.1.0.6 → 2.0.0-rc.2.0.1
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/{.eslintrc.js → .eslintrc.cjs} +4 -1
- package/{.mocharc.js → .mocharc.cjs} +1 -1
- package/CHANGELOG.md +8 -0
- package/README.md +2 -2
- package/{api-extractor-esm.json → api-extractor-cjs.json} +5 -1
- package/api-extractor.json +1 -1
- package/api-report/sequence.api.md +15 -27
- package/dist/defaultMap.d.ts +10 -16
- package/dist/defaultMap.d.ts.map +1 -1
- package/dist/defaultMap.js +73 -70
- package/dist/defaultMap.js.map +1 -1
- package/dist/defaultMapInterfaces.d.ts +1 -8
- package/dist/defaultMapInterfaces.d.ts.map +1 -1
- package/dist/defaultMapInterfaces.js.map +1 -1
- package/dist/index.d.ts +11 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +42 -42
- package/dist/index.js.map +1 -1
- package/dist/intervalCollection.d.ts +21 -15
- package/dist/intervalCollection.d.ts.map +1 -1
- package/dist/intervalCollection.js +59 -110
- package/dist/intervalCollection.js.map +1 -1
- package/dist/intervalIndex/endpointInRangeIndex.d.ts +3 -3
- package/dist/intervalIndex/endpointInRangeIndex.d.ts.map +1 -1
- package/dist/intervalIndex/endpointInRangeIndex.js +8 -8
- package/dist/intervalIndex/endpointInRangeIndex.js.map +1 -1
- package/dist/intervalIndex/endpointIndex.d.ts +3 -3
- package/dist/intervalIndex/endpointIndex.d.ts.map +1 -1
- package/dist/intervalIndex/endpointIndex.js +4 -4
- package/dist/intervalIndex/endpointIndex.js.map +1 -1
- package/dist/intervalIndex/idIntervalIndex.d.ts +2 -2
- package/dist/intervalIndex/idIntervalIndex.d.ts.map +1 -1
- package/dist/intervalIndex/idIntervalIndex.js +2 -2
- package/dist/intervalIndex/idIntervalIndex.js.map +1 -1
- package/dist/intervalIndex/index.d.ts +8 -8
- package/dist/intervalIndex/index.d.ts.map +1 -1
- package/dist/intervalIndex/index.js +16 -16
- package/dist/intervalIndex/index.js.map +1 -1
- package/dist/intervalIndex/intervalIndex.d.ts +1 -1
- package/dist/intervalIndex/intervalIndex.d.ts.map +1 -1
- package/dist/intervalIndex/intervalIndex.js.map +1 -1
- package/dist/intervalIndex/overlappingIntervalsIndex.d.ts +7 -10
- package/dist/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -1
- package/dist/intervalIndex/overlappingIntervalsIndex.js +9 -12
- package/dist/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts +2 -2
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +1 -1
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js +7 -7
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -1
- package/dist/intervalIndex/sequenceIntervalIndexes.d.ts +2 -2
- package/dist/intervalIndex/sequenceIntervalIndexes.d.ts.map +1 -1
- package/dist/intervalIndex/sequenceIntervalIndexes.js.map +1 -1
- package/dist/intervalIndex/startpointInRangeIndex.d.ts +3 -3
- package/dist/intervalIndex/startpointInRangeIndex.d.ts.map +1 -1
- package/dist/intervalIndex/startpointInRangeIndex.js +8 -8
- 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.map +1 -1
- package/dist/intervals/index.d.ts +3 -3
- package/dist/intervals/index.d.ts.map +1 -1
- package/dist/intervals/index.js +16 -16
- package/dist/intervals/index.js.map +1 -1
- package/dist/intervals/interval.d.ts +2 -2
- package/dist/intervals/interval.d.ts.map +1 -1
- package/dist/intervals/interval.js +2 -2
- package/dist/intervals/interval.js.map +1 -1
- package/dist/intervals/intervalUtils.d.ts +3 -3
- package/dist/intervals/intervalUtils.d.ts.map +1 -1
- package/dist/intervals/intervalUtils.js +1 -1
- package/dist/intervals/intervalUtils.js.map +1 -1
- package/dist/intervals/sequenceInterval.d.ts +2 -2
- package/dist/intervals/sequenceInterval.d.ts.map +1 -1
- package/dist/intervals/sequenceInterval.js +22 -23
- package/dist/intervals/sequenceInterval.js.map +1 -1
- package/dist/localValues.d.ts +2 -2
- package/dist/localValues.d.ts.map +1 -1
- package/dist/localValues.js.map +1 -1
- package/dist/package.json +3 -0
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/revertibles.d.ts +12 -12
- package/dist/revertibles.d.ts.map +1 -1
- package/dist/revertibles.js +26 -26
- package/dist/revertibles.js.map +1 -1
- package/dist/sequence-alpha.d.ts +167 -13
- package/dist/sequence-beta.d.ts +2 -0
- package/dist/sequence-public.d.ts +2 -0
- package/dist/sequence-untrimmed.d.ts +68 -14
- package/dist/sequence.d.ts +43 -5
- package/dist/sequence.d.ts.map +1 -1
- package/dist/sequence.js +98 -29
- package/dist/sequence.js.map +1 -1
- package/dist/sequenceFactory.d.ts +4 -1
- package/dist/sequenceFactory.d.ts.map +1 -1
- package/dist/sequenceFactory.js +8 -5
- package/dist/sequenceFactory.js.map +1 -1
- package/dist/sharedIntervalCollection.d.ts +2 -2
- 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 +1 -1
- package/dist/sharedSequence.d.ts.map +1 -1
- package/dist/sharedSequence.js +2 -2
- 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 +6 -6
- package/dist/sharedString.js.map +1 -1
- package/dist/tsdoc-metadata.json +1 -1
- package/lib/{defaultMap.d.mts → defaultMap.d.ts} +11 -17
- package/lib/defaultMap.d.ts.map +1 -0
- package/lib/{defaultMap.mjs → defaultMap.js} +72 -69
- package/lib/defaultMap.js.map +1 -0
- package/lib/{defaultMapInterfaces.d.mts → defaultMapInterfaces.d.ts} +2 -9
- package/lib/defaultMapInterfaces.d.ts.map +1 -0
- package/lib/{defaultMapInterfaces.mjs → defaultMapInterfaces.js} +1 -1
- package/lib/defaultMapInterfaces.js.map +1 -0
- package/lib/{index.d.mts → index.d.ts} +24 -12
- package/lib/index.d.ts.map +1 -0
- package/lib/{index.mjs → index.js} +11 -11
- package/lib/index.js.map +1 -0
- package/lib/{intervalCollection.d.mts → intervalCollection.d.ts} +22 -16
- package/lib/intervalCollection.d.ts.map +1 -0
- package/lib/{intervalCollection.mjs → intervalCollection.js} +23 -74
- package/lib/intervalCollection.js.map +1 -0
- package/lib/intervalIndex/{endpointInRangeIndex.d.mts → endpointInRangeIndex.d.ts} +4 -4
- package/lib/intervalIndex/endpointInRangeIndex.d.ts.map +1 -0
- package/lib/intervalIndex/{endpointInRangeIndex.mjs → endpointInRangeIndex.js} +3 -3
- package/lib/intervalIndex/endpointInRangeIndex.js.map +1 -0
- package/lib/intervalIndex/{endpointIndex.d.mts → endpointIndex.d.ts} +4 -4
- package/lib/intervalIndex/endpointIndex.d.ts.map +1 -0
- package/lib/intervalIndex/{endpointIndex.mjs → endpointIndex.js} +2 -2
- package/lib/intervalIndex/endpointIndex.js.map +1 -0
- package/lib/intervalIndex/{idIntervalIndex.d.mts → idIntervalIndex.d.ts} +3 -3
- package/lib/intervalIndex/idIntervalIndex.d.ts.map +1 -0
- package/lib/intervalIndex/{idIntervalIndex.mjs → idIntervalIndex.js} +2 -2
- package/lib/intervalIndex/idIntervalIndex.js.map +1 -0
- package/lib/intervalIndex/{index.d.mts → index.d.ts} +9 -9
- package/lib/intervalIndex/index.d.ts.map +1 -0
- package/lib/intervalIndex/{index.mjs → index.js} +7 -7
- package/lib/intervalIndex/index.js.map +1 -0
- package/lib/intervalIndex/{intervalIndex.d.mts → intervalIndex.d.ts} +2 -2
- package/lib/intervalIndex/intervalIndex.d.ts.map +1 -0
- package/lib/intervalIndex/{intervalIndex.mjs → intervalIndex.js} +1 -1
- package/lib/intervalIndex/intervalIndex.js.map +1 -0
- package/lib/intervalIndex/{intervalIndexUtils.d.mts → intervalIndexUtils.d.ts} +1 -1
- package/lib/intervalIndex/intervalIndexUtils.d.ts.map +1 -0
- package/lib/intervalIndex/{intervalIndexUtils.mjs → intervalIndexUtils.js} +1 -1
- package/lib/intervalIndex/intervalIndexUtils.js.map +1 -0
- package/lib/intervalIndex/{overlappingIntervalsIndex.d.mts → overlappingIntervalsIndex.d.ts} +8 -11
- package/lib/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -0
- package/lib/intervalIndex/{overlappingIntervalsIndex.mjs → overlappingIntervalsIndex.js} +5 -8
- package/lib/intervalIndex/overlappingIntervalsIndex.js.map +1 -0
- package/lib/intervalIndex/{overlappingSequenceIntervalsIndex.d.mts → overlappingSequenceIntervalsIndex.d.ts} +3 -3
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +1 -0
- package/lib/intervalIndex/{overlappingSequenceIntervalsIndex.mjs → overlappingSequenceIntervalsIndex.js} +3 -3
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -0
- package/lib/intervalIndex/{sequenceIntervalIndexes.d.mts → sequenceIntervalIndexes.d.ts} +3 -3
- package/lib/intervalIndex/sequenceIntervalIndexes.d.ts.map +1 -0
- package/lib/intervalIndex/{sequenceIntervalIndexes.mjs → sequenceIntervalIndexes.js} +1 -1
- package/lib/intervalIndex/sequenceIntervalIndexes.js.map +1 -0
- package/lib/intervalIndex/{startpointInRangeIndex.d.mts → startpointInRangeIndex.d.ts} +4 -4
- package/lib/intervalIndex/startpointInRangeIndex.d.ts.map +1 -0
- package/lib/intervalIndex/{startpointInRangeIndex.mjs → startpointInRangeIndex.js} +3 -3
- package/lib/intervalIndex/startpointInRangeIndex.js.map +1 -0
- package/lib/{intervalTree.d.mts → intervalTree.d.ts} +2 -2
- package/lib/intervalTree.d.ts.map +1 -0
- package/lib/{intervalTree.mjs → intervalTree.js} +1 -1
- package/lib/intervalTree.js.map +1 -0
- package/lib/intervals/{index.d.mts → index.d.ts} +4 -4
- package/lib/intervals/index.d.ts.map +1 -0
- package/lib/intervals/{index.mjs → index.js} +4 -4
- package/lib/intervals/index.js.map +1 -0
- package/lib/intervals/{interval.d.mts → interval.d.ts} +3 -3
- package/lib/intervals/{interval.d.mts.map → interval.d.ts.map} +1 -1
- package/lib/intervals/{interval.mjs → interval.js} +2 -2
- package/lib/intervals/interval.js.map +1 -0
- package/lib/intervals/{intervalUtils.d.mts → intervalUtils.d.ts} +4 -4
- package/lib/intervals/intervalUtils.d.ts.map +1 -0
- package/lib/intervals/{intervalUtils.mjs → intervalUtils.js} +3 -2
- package/lib/intervals/intervalUtils.js.map +1 -0
- package/lib/intervals/{sequenceInterval.d.mts → sequenceInterval.d.ts} +3 -3
- package/lib/intervals/sequenceInterval.d.ts.map +1 -0
- package/lib/intervals/{sequenceInterval.mjs → sequenceInterval.js} +5 -4
- package/lib/intervals/{sequenceInterval.mjs.map → sequenceInterval.js.map} +1 -1
- package/lib/{localValues.d.mts → localValues.d.ts} +3 -3
- package/lib/{localValues.d.mts.map → localValues.d.ts.map} +1 -1
- package/lib/{localValues.mjs → localValues.js} +1 -1
- package/lib/localValues.js.map +1 -0
- package/lib/{packageVersion.d.mts → packageVersion.d.ts} +2 -2
- package/lib/packageVersion.d.ts.map +1 -0
- package/lib/{packageVersion.mjs → packageVersion.js} +2 -2
- package/lib/packageVersion.js.map +1 -0
- package/lib/{revertibles.d.mts → revertibles.d.ts} +13 -13
- package/lib/revertibles.d.ts.map +1 -0
- package/lib/{revertibles.mjs → revertibles.js} +11 -10
- package/lib/revertibles.js.map +1 -0
- package/lib/{sequence-alpha.d.mts → sequence-alpha.d.ts} +180 -13
- package/lib/{sequence-public.d.mts → sequence-beta.d.ts} +15 -0
- package/lib/{sequence-beta.d.mts → sequence-public.d.ts} +15 -0
- package/lib/{sequence-untrimmed.d.mts → sequence-untrimmed.d.ts} +81 -14
- package/lib/{sequence.d.mts → sequence.d.ts} +44 -6
- package/lib/sequence.d.ts.map +1 -0
- package/lib/{sequence.mjs → sequence.js} +95 -29
- package/lib/sequence.js.map +1 -0
- package/lib/{sequenceDeltaEvent.d.mts → sequenceDeltaEvent.d.ts} +1 -1
- package/lib/sequenceDeltaEvent.d.ts.map +1 -0
- package/lib/{sequenceDeltaEvent.mjs → sequenceDeltaEvent.js} +1 -1
- package/lib/sequenceDeltaEvent.js.map +1 -0
- package/lib/{sequenceFactory.d.mts → sequenceFactory.d.ts} +5 -2
- package/lib/sequenceFactory.d.ts.map +1 -0
- package/lib/{sequenceFactory.mjs → sequenceFactory.js} +6 -3
- package/lib/sequenceFactory.js.map +1 -0
- package/lib/{sharedIntervalCollection.d.mts → sharedIntervalCollection.d.ts} +3 -3
- package/lib/sharedIntervalCollection.d.ts.map +1 -0
- package/lib/{sharedIntervalCollection.mjs → sharedIntervalCollection.js} +4 -4
- package/lib/sharedIntervalCollection.js.map +1 -0
- package/lib/{sharedSequence.d.mts → sharedSequence.d.ts} +2 -2
- package/lib/sharedSequence.d.ts.map +1 -0
- package/lib/{sharedSequence.mjs → sharedSequence.js} +2 -2
- package/lib/sharedSequence.js.map +1 -0
- package/lib/{sharedString.d.mts → sharedString.d.ts} +3 -3
- package/lib/sharedString.d.ts.map +1 -0
- package/lib/{sharedString.mjs → sharedString.js} +3 -3
- package/lib/sharedString.js.map +1 -0
- package/lib/test/collections.intervalTree.js +73 -0
- package/lib/test/collections.intervalTree.js.map +1 -0
- package/lib/test/createSnapshotFiles.js +15 -0
- package/lib/test/createSnapshotFiles.js.map +1 -0
- package/lib/test/dirname.cjs +16 -0
- package/lib/test/dirname.cjs.map +1 -0
- package/lib/test/endpointInRangeIndex.spec.js +182 -0
- package/lib/test/endpointInRangeIndex.spec.js.map +1 -0
- package/lib/test/fuzz/fuzzUtils.js +250 -0
- package/lib/test/fuzz/fuzzUtils.js.map +1 -0
- package/lib/test/fuzz/intervalCollection.fuzz.spec.js +200 -0
- package/lib/test/fuzz/intervalCollection.fuzz.spec.js.map +1 -0
- package/lib/test/fuzz/intervalRevertibles.fuzz.spec.js +129 -0
- package/lib/test/fuzz/intervalRevertibles.fuzz.spec.js.map +1 -0
- package/lib/test/fuzz/sharedString.fuzz.spec.js +91 -0
- package/lib/test/fuzz/sharedString.fuzz.spec.js.map +1 -0
- package/lib/test/generateSharedStrings.js +138 -0
- package/lib/test/generateSharedStrings.js.map +1 -0
- package/lib/test/intervalCollection.detached.spec.js +126 -0
- package/lib/test/intervalCollection.detached.spec.js.map +1 -0
- package/lib/test/intervalCollection.events.spec.js +491 -0
- package/lib/test/intervalCollection.events.spec.js.map +1 -0
- package/lib/test/intervalCollection.perf.spec.js +88 -0
- package/lib/test/intervalCollection.perf.spec.js.map +1 -0
- package/lib/test/intervalCollection.snapshot.spec.js +171 -0
- package/lib/test/intervalCollection.snapshot.spec.js.map +1 -0
- package/lib/test/intervalCollection.spec.js +1660 -0
- package/lib/test/intervalCollection.spec.js.map +1 -0
- package/lib/test/intervalIndexTestUtils.js +49 -0
- package/lib/test/intervalIndexTestUtils.js.map +1 -0
- package/lib/test/intervalRebasing.spec.js +589 -0
- package/lib/test/intervalRebasing.spec.js.map +1 -0
- package/lib/test/intervalStashedOps.spec.js +142 -0
- package/lib/test/intervalStashedOps.spec.js.map +1 -0
- package/lib/test/intervalTestUtils.js +81 -0
- package/lib/test/intervalTestUtils.js.map +1 -0
- package/lib/test/marshalling.spec.js +55 -0
- package/lib/test/marshalling.spec.js.map +1 -0
- package/lib/test/memory/sharedSequence.spec.js +82 -0
- package/lib/test/memory/sharedSequence.spec.js.map +1 -0
- package/lib/test/memory/sharedString.spec.js +134 -0
- package/lib/test/memory/sharedString.spec.js.map +1 -0
- package/lib/test/overlappingSequenceIntervalsIndex.spec.js +348 -0
- package/lib/test/overlappingSequenceIntervalsIndex.spec.js.map +1 -0
- package/lib/test/partialLoad.spec.js +211 -0
- package/lib/test/partialLoad.spec.js.map +1 -0
- package/lib/test/rebasing.spec.js +81 -0
- package/lib/test/rebasing.spec.js.map +1 -0
- package/lib/test/reentrancy.spec.js +174 -0
- package/lib/test/reentrancy.spec.js.map +1 -0
- package/lib/test/revertibles.spec.js +971 -0
- package/lib/test/revertibles.spec.js.map +1 -0
- package/lib/test/sequenceDeltaEvent.spec.js +2144 -0
- package/lib/test/sequenceDeltaEvent.spec.js.map +1 -0
- package/lib/test/sharedIntervalCollection.spec.js +159 -0
- package/lib/test/sharedIntervalCollection.spec.js.map +1 -0
- package/lib/test/sharedString.spec.js +532 -0
- package/lib/test/sharedString.spec.js.map +1 -0
- package/lib/test/snapshotEmptyProps.spec.js +45 -0
- package/lib/test/snapshotEmptyProps.spec.js.map +1 -0
- package/lib/test/snapshotVersion.spec.js +149 -0
- package/lib/test/snapshotVersion.spec.js.map +1 -0
- package/lib/test/startpointInRangeIndex.spec.js +182 -0
- package/lib/test/startpointInRangeIndex.spec.js.map +1 -0
- package/lib/test/subSequence.spec.js +92 -0
- package/lib/test/subSequence.spec.js.map +1 -0
- package/lib/test/types/validateSequencePrevious.generated.js +162 -0
- package/lib/test/types/validateSequencePrevious.generated.js.map +1 -0
- package/lib/test/v1IntervalCollectionHelpers.js +93 -0
- package/lib/test/v1IntervalCollectionHelpers.js.map +1 -0
- package/package.json +66 -60
- package/src/defaultMap.ts +97 -123
- package/src/defaultMapInterfaces.ts +1 -9
- package/src/index.ts +15 -11
- package/src/intervalCollection.ts +57 -84
- package/src/intervalIndex/endpointInRangeIndex.ts +4 -4
- package/src/intervalIndex/endpointIndex.ts +3 -3
- package/src/intervalIndex/idIntervalIndex.ts +3 -4
- package/src/intervalIndex/index.ts +8 -8
- package/src/intervalIndex/intervalIndex.ts +1 -1
- package/src/intervalIndex/overlappingIntervalsIndex.ts +7 -10
- package/src/intervalIndex/overlappingSequenceIntervalsIndex.ts +4 -4
- package/src/intervalIndex/sequenceIntervalIndexes.ts +2 -2
- package/src/intervalIndex/startpointInRangeIndex.ts +4 -4
- package/src/intervalTree.ts +1 -1
- package/src/intervals/index.ts +3 -3
- package/src/intervals/interval.ts +2 -4
- package/src/intervals/intervalUtils.ts +3 -3
- package/src/intervals/sequenceInterval.ts +3 -4
- package/src/localValues.ts +2 -2
- package/src/packageVersion.ts +1 -1
- package/src/revertibles.ts +13 -13
- package/src/sequence.ts +121 -44
- package/src/sequenceFactory.ts +5 -2
- package/src/sharedIntervalCollection.ts +5 -5
- package/src/sharedSequence.ts +1 -1
- package/src/sharedString.ts +2 -2
- package/tsconfig.cjs.json +7 -0
- package/tsconfig.json +2 -5
- package/lib/defaultMap.d.mts.map +0 -1
- package/lib/defaultMap.mjs.map +0 -1
- package/lib/defaultMapInterfaces.d.mts.map +0 -1
- package/lib/defaultMapInterfaces.mjs.map +0 -1
- package/lib/index.d.mts.map +0 -1
- package/lib/index.mjs.map +0 -1
- package/lib/intervalCollection.d.mts.map +0 -1
- package/lib/intervalCollection.mjs.map +0 -1
- package/lib/intervalIndex/endpointInRangeIndex.d.mts.map +0 -1
- package/lib/intervalIndex/endpointInRangeIndex.mjs.map +0 -1
- package/lib/intervalIndex/endpointIndex.d.mts.map +0 -1
- package/lib/intervalIndex/endpointIndex.mjs.map +0 -1
- package/lib/intervalIndex/idIntervalIndex.d.mts.map +0 -1
- package/lib/intervalIndex/idIntervalIndex.mjs.map +0 -1
- package/lib/intervalIndex/index.d.mts.map +0 -1
- package/lib/intervalIndex/index.mjs.map +0 -1
- package/lib/intervalIndex/intervalIndex.d.mts.map +0 -1
- package/lib/intervalIndex/intervalIndex.mjs.map +0 -1
- package/lib/intervalIndex/intervalIndexUtils.d.mts.map +0 -1
- package/lib/intervalIndex/intervalIndexUtils.mjs.map +0 -1
- package/lib/intervalIndex/overlappingIntervalsIndex.d.mts.map +0 -1
- package/lib/intervalIndex/overlappingIntervalsIndex.mjs.map +0 -1
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.mts.map +0 -1
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.mjs.map +0 -1
- package/lib/intervalIndex/sequenceIntervalIndexes.d.mts.map +0 -1
- package/lib/intervalIndex/sequenceIntervalIndexes.mjs.map +0 -1
- package/lib/intervalIndex/startpointInRangeIndex.d.mts.map +0 -1
- package/lib/intervalIndex/startpointInRangeIndex.mjs.map +0 -1
- package/lib/intervalTree.d.mts.map +0 -1
- package/lib/intervalTree.mjs.map +0 -1
- package/lib/intervals/index.d.mts.map +0 -1
- package/lib/intervals/index.mjs.map +0 -1
- package/lib/intervals/interval.mjs.map +0 -1
- package/lib/intervals/intervalUtils.d.mts.map +0 -1
- package/lib/intervals/intervalUtils.mjs.map +0 -1
- package/lib/intervals/sequenceInterval.d.mts.map +0 -1
- package/lib/localValues.mjs.map +0 -1
- package/lib/packageVersion.d.mts.map +0 -1
- package/lib/packageVersion.mjs.map +0 -1
- package/lib/revertibles.d.mts.map +0 -1
- package/lib/revertibles.mjs.map +0 -1
- package/lib/sequence.d.mts.map +0 -1
- package/lib/sequence.mjs.map +0 -1
- package/lib/sequenceDeltaEvent.d.mts.map +0 -1
- package/lib/sequenceDeltaEvent.mjs.map +0 -1
- package/lib/sequenceFactory.d.mts.map +0 -1
- package/lib/sequenceFactory.mjs.map +0 -1
- package/lib/sharedIntervalCollection.d.mts.map +0 -1
- package/lib/sharedIntervalCollection.mjs.map +0 -1
- package/lib/sharedSequence.d.mts.map +0 -1
- package/lib/sharedSequence.mjs.map +0 -1
- package/lib/sharedString.d.mts.map +0 -1
- package/lib/sharedString.mjs.map +0 -1
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Licensed under the MIT License.
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.intervalLocatorFromEndpoint = exports.IntervalCollection = exports.makeOpsMap = exports.IntervalCollectionValueType = exports.SequenceIntervalCollectionValueType = exports.LocalIntervalCollection = exports.createIntervalIndex = exports.computeStickinessFromSide = exports.endpointPosAndSide = exports.sidesFromStickiness = exports.Side = void 0;
|
|
7
|
+
exports.intervalLocatorFromEndpoint = exports.IntervalCollection = exports.makeOpsMap = exports.IntervalCollectionValueType = exports.SequenceIntervalCollectionValueType = exports.LocalIntervalCollection = exports.createIntervalIndex = exports.computeStickinessFromSide = exports.toOptionalSequencePlace = exports.toSequencePlace = exports.endpointPosAndSide = exports.sidesFromStickiness = exports.reservedIntervalIdKey = exports.Side = void 0;
|
|
8
8
|
/* eslint-disable no-bitwise */
|
|
9
9
|
/* eslint-disable import/no-deprecated */
|
|
10
10
|
const client_utils_1 = require("@fluid-internal/client-utils");
|
|
@@ -12,8 +12,8 @@ const core_utils_1 = require("@fluidframework/core-utils");
|
|
|
12
12
|
const merge_tree_1 = require("@fluidframework/merge-tree");
|
|
13
13
|
const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
|
|
14
14
|
const uuid_1 = require("uuid");
|
|
15
|
-
const
|
|
16
|
-
const
|
|
15
|
+
const index_js_1 = require("./intervals/index.js");
|
|
16
|
+
const index_js_2 = require("./intervalIndex/index.js");
|
|
17
17
|
/**
|
|
18
18
|
* Defines a side relative to a character in a sequence.
|
|
19
19
|
*
|
|
@@ -25,10 +25,10 @@ var Side;
|
|
|
25
25
|
Side[Side["Before"] = 0] = "Before";
|
|
26
26
|
Side[Side["After"] = 1] = "After";
|
|
27
27
|
})(Side || (exports.Side = Side = {}));
|
|
28
|
-
|
|
28
|
+
exports.reservedIntervalIdKey = "intervalId";
|
|
29
29
|
function sidesFromStickiness(stickiness) {
|
|
30
|
-
const startSide = (stickiness &
|
|
31
|
-
const endSide = (stickiness &
|
|
30
|
+
const startSide = (stickiness & index_js_1.IntervalStickiness.START) !== 0 ? Side.After : Side.Before;
|
|
31
|
+
const endSide = (stickiness & index_js_1.IntervalStickiness.END) !== 0 ? Side.Before : Side.After;
|
|
32
32
|
return { startSide, endSide };
|
|
33
33
|
}
|
|
34
34
|
exports.sidesFromStickiness = sidesFromStickiness;
|
|
@@ -37,7 +37,7 @@ exports.sidesFromStickiness = sidesFromStickiness;
|
|
|
37
37
|
* of this compression is unspecified and subject to change
|
|
38
38
|
*/
|
|
39
39
|
function decompressInterval(interval, label) {
|
|
40
|
-
const stickiness = interval[5] ??
|
|
40
|
+
const stickiness = interval[5] ?? index_js_1.IntervalStickiness.END;
|
|
41
41
|
const { startSide, endSide } = sidesFromStickiness(stickiness);
|
|
42
42
|
return {
|
|
43
43
|
start: interval[0],
|
|
@@ -65,7 +65,7 @@ function compressInterval(interval) {
|
|
|
65
65
|
// in the `label` field of the summary
|
|
66
66
|
{ ...properties, [merge_tree_1.reservedRangeLabelsKey]: undefined },
|
|
67
67
|
];
|
|
68
|
-
if (interval.stickiness !== undefined && interval.stickiness !==
|
|
68
|
+
if (interval.stickiness !== undefined && interval.stickiness !== index_js_1.IntervalStickiness.END) {
|
|
69
69
|
// reassignment to make it easier for typescript to reason about types
|
|
70
70
|
base = [...base, interval.stickiness];
|
|
71
71
|
}
|
|
@@ -87,25 +87,27 @@ function endpointPosAndSide(start, end) {
|
|
|
87
87
|
}
|
|
88
88
|
exports.endpointPosAndSide = endpointPosAndSide;
|
|
89
89
|
function toSequencePlace(pos, side) {
|
|
90
|
-
return typeof pos === "number" ? { pos, side } : pos;
|
|
90
|
+
return typeof pos === "number" && side !== undefined ? { pos, side } : pos;
|
|
91
91
|
}
|
|
92
|
-
|
|
93
|
-
|
|
92
|
+
exports.toSequencePlace = toSequencePlace;
|
|
93
|
+
function toOptionalSequencePlace(pos, side) {
|
|
94
|
+
return typeof pos === "number" && side !== undefined ? { pos, side } : pos;
|
|
94
95
|
}
|
|
96
|
+
exports.toOptionalSequencePlace = toOptionalSequencePlace;
|
|
95
97
|
function computeStickinessFromSide(startPos = -1, startSide = Side.Before, endPos = -1, endSide = Side.Before) {
|
|
96
|
-
let stickiness =
|
|
98
|
+
let stickiness = index_js_1.IntervalStickiness.NONE;
|
|
97
99
|
if (startSide === Side.After || startPos === "start") {
|
|
98
|
-
stickiness |=
|
|
100
|
+
stickiness |= index_js_1.IntervalStickiness.START;
|
|
99
101
|
}
|
|
100
102
|
if (endSide === Side.Before || endPos === "end") {
|
|
101
|
-
stickiness |=
|
|
103
|
+
stickiness |= index_js_1.IntervalStickiness.END;
|
|
102
104
|
}
|
|
103
105
|
return stickiness;
|
|
104
106
|
}
|
|
105
107
|
exports.computeStickinessFromSide = computeStickinessFromSide;
|
|
106
108
|
function createIntervalIndex() {
|
|
107
109
|
const helpers = {
|
|
108
|
-
create:
|
|
110
|
+
create: index_js_1.createInterval,
|
|
109
111
|
};
|
|
110
112
|
const lc = new LocalIntervalCollection(undefined, "", helpers, {});
|
|
111
113
|
return lc;
|
|
@@ -120,9 +122,9 @@ class LocalIntervalCollection {
|
|
|
120
122
|
this.helpers = helpers;
|
|
121
123
|
this.options = options;
|
|
122
124
|
this.onPositionChange = onPositionChange;
|
|
123
|
-
this.overlappingIntervalsIndex = new
|
|
124
|
-
this.idIntervalIndex = (0,
|
|
125
|
-
this.endIntervalIndex = new
|
|
125
|
+
this.overlappingIntervalsIndex = new index_js_2.OverlappingIntervalsIndex(client, helpers);
|
|
126
|
+
this.idIntervalIndex = (0, index_js_2.createIdIntervalIndex)();
|
|
127
|
+
this.endIntervalIndex = new index_js_2.EndpointIndex(client, helpers);
|
|
126
128
|
this.indexes = new Set([
|
|
127
129
|
this.overlappingIntervalsIndex,
|
|
128
130
|
this.idIntervalIndex,
|
|
@@ -142,19 +144,19 @@ class LocalIntervalCollection {
|
|
|
142
144
|
* @returns The interval's existing or newly created id
|
|
143
145
|
*/
|
|
144
146
|
ensureSerializedId(serializedInterval) {
|
|
145
|
-
let id = serializedInterval.properties?.[reservedIntervalIdKey];
|
|
147
|
+
let id = serializedInterval.properties?.[exports.reservedIntervalIdKey];
|
|
146
148
|
if (id === undefined) {
|
|
147
149
|
// Back-compat: 0.39 and earlier did not have IDs on intervals. If an interval from such a client
|
|
148
150
|
// comes over the wire, create a non-unique one based on start/end.
|
|
149
151
|
// This will allow all clients to refer to this interval consistently.
|
|
150
152
|
id = this.createLegacyId(serializedInterval.start, serializedInterval.end);
|
|
151
153
|
const newProps = {
|
|
152
|
-
[reservedIntervalIdKey]: id,
|
|
154
|
+
[exports.reservedIntervalIdKey]: id,
|
|
153
155
|
};
|
|
154
156
|
serializedInterval.properties = (0, merge_tree_1.addProperties)(serializedInterval.properties, newProps);
|
|
155
157
|
}
|
|
156
158
|
// Make the ID immutable for safety's sake.
|
|
157
|
-
Object.defineProperty(serializedInterval.properties, reservedIntervalIdKey, {
|
|
159
|
+
Object.defineProperty(serializedInterval.properties, exports.reservedIntervalIdKey, {
|
|
158
160
|
configurable: false,
|
|
159
161
|
enumerable: true,
|
|
160
162
|
writable: false,
|
|
@@ -196,13 +198,13 @@ class LocalIntervalCollection {
|
|
|
196
198
|
}
|
|
197
199
|
interval.addProperties(props);
|
|
198
200
|
}
|
|
199
|
-
(_a = interval.properties)[reservedIntervalIdKey] ?? (_a[reservedIntervalIdKey] = (0, uuid_1.v4)());
|
|
201
|
+
(_a = interval.properties)[exports.reservedIntervalIdKey] ?? (_a[exports.reservedIntervalIdKey] = (0, uuid_1.v4)());
|
|
200
202
|
this.add(interval);
|
|
201
203
|
}
|
|
202
204
|
return interval;
|
|
203
205
|
}
|
|
204
206
|
linkEndpointsToInterval(interval) {
|
|
205
|
-
if (interval instanceof
|
|
207
|
+
if (interval instanceof index_js_1.SequenceInterval) {
|
|
206
208
|
interval.start.addProperties({ interval });
|
|
207
209
|
interval.end.addProperties({ interval });
|
|
208
210
|
}
|
|
@@ -243,7 +245,7 @@ class LocalIntervalCollection {
|
|
|
243
245
|
}
|
|
244
246
|
return this.client.createLocalReferencePosition(segment, ref.getOffset(), merge_tree_1.ReferenceType.Transient, ref.properties, ref.slidingPreference, ref.canSlideToEndpoint);
|
|
245
247
|
};
|
|
246
|
-
if (interval instanceof
|
|
248
|
+
if (interval instanceof index_js_1.SequenceInterval) {
|
|
247
249
|
let previousInterval;
|
|
248
250
|
let pendingChanges = 0;
|
|
249
251
|
interval.addPositionChangeListeners(() => {
|
|
@@ -267,7 +269,7 @@ class LocalIntervalCollection {
|
|
|
267
269
|
}
|
|
268
270
|
}
|
|
269
271
|
removeIntervalListeners(interval) {
|
|
270
|
-
if (interval instanceof
|
|
272
|
+
if (interval instanceof index_js_1.SequenceInterval) {
|
|
271
273
|
interval.removePositionChangeListeners();
|
|
272
274
|
}
|
|
273
275
|
}
|
|
@@ -276,7 +278,7 @@ exports.LocalIntervalCollection = LocalIntervalCollection;
|
|
|
276
278
|
LocalIntervalCollection.legacyIdPrefix = "legacy";
|
|
277
279
|
class SequenceIntervalCollectionFactory {
|
|
278
280
|
load(emitter, raw = [], options) {
|
|
279
|
-
return new IntervalCollection(
|
|
281
|
+
return new IntervalCollection(index_js_1.sequenceIntervalHelpers, true, emitter, raw, options);
|
|
280
282
|
}
|
|
281
283
|
store(value) {
|
|
282
284
|
return value.serializeInternal();
|
|
@@ -300,7 +302,7 @@ SequenceIntervalCollectionValueType._ops = makeOpsMap();
|
|
|
300
302
|
class IntervalCollectionFactory {
|
|
301
303
|
load(emitter, raw = [], options) {
|
|
302
304
|
const helpers = {
|
|
303
|
-
create:
|
|
305
|
+
create: index_js_1.createInterval,
|
|
304
306
|
};
|
|
305
307
|
const collection = new IntervalCollection(helpers, false, emitter, raw, options);
|
|
306
308
|
collection.attachGraph(undefined, "");
|
|
@@ -335,12 +337,9 @@ function makeOpsMap() {
|
|
|
335
337
|
const rebasedOp = { ...op, value: rebasedValue };
|
|
336
338
|
return { rebasedOp, rebasedLocalOpMetadata: localOpMetadata };
|
|
337
339
|
};
|
|
338
|
-
const applyStashedOp = (collection, op) => {
|
|
339
|
-
return collection.applyStashedOp(op);
|
|
340
|
-
};
|
|
341
340
|
return new Map([
|
|
342
341
|
[
|
|
343
|
-
|
|
342
|
+
index_js_1.IntervalOpType.ADD,
|
|
344
343
|
{
|
|
345
344
|
process: (collection, params, local, op, localOpMetadata) => {
|
|
346
345
|
// if params is undefined, the interval was deleted during
|
|
@@ -352,11 +351,10 @@ function makeOpsMap() {
|
|
|
352
351
|
collection.ackAdd(params, local, op, localOpMetadata);
|
|
353
352
|
},
|
|
354
353
|
rebase,
|
|
355
|
-
applyStashedOp,
|
|
356
354
|
},
|
|
357
355
|
],
|
|
358
356
|
[
|
|
359
|
-
|
|
357
|
+
index_js_1.IntervalOpType.DELETE,
|
|
360
358
|
{
|
|
361
359
|
process: (collection, params, local, op) => {
|
|
362
360
|
(0, core_utils_1.assert)(op !== undefined, 0x3fc /* op should exist here */);
|
|
@@ -366,11 +364,10 @@ function makeOpsMap() {
|
|
|
366
364
|
// Deletion of intervals is based on id, so requires no rebasing.
|
|
367
365
|
return { rebasedOp: op, rebasedLocalOpMetadata: localOpMetadata };
|
|
368
366
|
},
|
|
369
|
-
applyStashedOp,
|
|
370
367
|
},
|
|
371
368
|
],
|
|
372
369
|
[
|
|
373
|
-
|
|
370
|
+
index_js_1.IntervalOpType.CHANGE,
|
|
374
371
|
{
|
|
375
372
|
process: (collection, params, local, op, localOpMetadata) => {
|
|
376
373
|
// if params is undefined, the interval was deleted during
|
|
@@ -382,7 +379,6 @@ function makeOpsMap() {
|
|
|
382
379
|
collection.ackChange(params, local, op, localOpMetadata);
|
|
383
380
|
},
|
|
384
381
|
rebase,
|
|
385
|
-
applyStashedOp,
|
|
386
382
|
},
|
|
387
383
|
],
|
|
388
384
|
]);
|
|
@@ -414,7 +410,6 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
414
410
|
get attached() {
|
|
415
411
|
return !!this.localCollection;
|
|
416
412
|
}
|
|
417
|
-
/** @internal */
|
|
418
413
|
constructor(helpers, requiresClient, emitter, serializedIntervals, options = {}) {
|
|
419
414
|
super();
|
|
420
415
|
this.helpers = helpers;
|
|
@@ -493,7 +488,6 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
493
488
|
}
|
|
494
489
|
return rebased;
|
|
495
490
|
}
|
|
496
|
-
/** @internal */
|
|
497
491
|
attachGraph(client, label) {
|
|
498
492
|
if (this.attached) {
|
|
499
493
|
throw new telemetry_utils_1.LoggingError("Only supports one Sequence attach");
|
|
@@ -545,17 +539,19 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
545
539
|
// is restored as single-endpoint changes re-use previous references.
|
|
546
540
|
let startRefType;
|
|
547
541
|
let endRefType;
|
|
548
|
-
if (previousInterval instanceof
|
|
542
|
+
if (previousInterval instanceof index_js_1.SequenceInterval) {
|
|
549
543
|
startRefType = previousInterval.start.refType;
|
|
550
544
|
endRefType = previousInterval.end.refType;
|
|
551
545
|
previousInterval.start.refType = merge_tree_1.ReferenceType.Transient;
|
|
552
546
|
previousInterval.end.refType = merge_tree_1.ReferenceType.Transient;
|
|
553
547
|
this.emit("changeInterval", interval, previousInterval, local, op, slide);
|
|
548
|
+
this.emit("changed", interval, undefined, previousInterval ?? undefined, local, slide);
|
|
554
549
|
previousInterval.start.refType = startRefType;
|
|
555
550
|
previousInterval.end.refType = endRefType;
|
|
556
551
|
}
|
|
557
552
|
else {
|
|
558
553
|
this.emit("changeInterval", interval, previousInterval, local, op, slide);
|
|
554
|
+
this.emit("changed", interval, undefined, previousInterval ?? undefined, local, slide);
|
|
559
555
|
}
|
|
560
556
|
}
|
|
561
557
|
/**
|
|
@@ -587,16 +583,16 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
587
583
|
endSide !== undefined, 0x793 /* start and end cannot be undefined because they were not passed in as undefined */);
|
|
588
584
|
const stickiness = computeStickinessFromSide(startPos, startSide, endPos, endSide);
|
|
589
585
|
this.assertStickinessEnabled(start, end);
|
|
590
|
-
const interval = this.localCollection.addInterval(toSequencePlace(startPos, startSide), toSequencePlace(endPos, endSide),
|
|
586
|
+
const interval = this.localCollection.addInterval(toSequencePlace(startPos, startSide), toSequencePlace(endPos, endSide), index_js_1.IntervalType.SlideOnRemove, props);
|
|
591
587
|
if (interval) {
|
|
592
|
-
if (!this.isCollaborating && interval instanceof
|
|
588
|
+
if (!this.isCollaborating && interval instanceof index_js_1.SequenceInterval) {
|
|
593
589
|
setSlideOnRemove(interval.start);
|
|
594
590
|
setSlideOnRemove(interval.end);
|
|
595
591
|
}
|
|
596
592
|
const serializedInterval = {
|
|
597
593
|
start: startPos,
|
|
598
594
|
end: endPos,
|
|
599
|
-
intervalType:
|
|
595
|
+
intervalType: index_js_1.IntervalType.SlideOnRemove,
|
|
600
596
|
properties: interval.properties,
|
|
601
597
|
sequenceNumber: this.client?.getCurrentSeq() ?? 0,
|
|
602
598
|
stickiness,
|
|
@@ -604,7 +600,9 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
604
600
|
endSide,
|
|
605
601
|
};
|
|
606
602
|
const localSeq = this.getNextLocalSeq();
|
|
607
|
-
this.
|
|
603
|
+
if (this.isCollaborating) {
|
|
604
|
+
this.localSeqToSerializedInterval.set(localSeq, serializedInterval);
|
|
605
|
+
}
|
|
608
606
|
// Local ops get submitted to the server. Remote ops have the deserializer run.
|
|
609
607
|
this.emitter.emit("add", undefined, serializedInterval, { localSeq });
|
|
610
608
|
}
|
|
@@ -674,7 +672,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
674
672
|
}
|
|
675
673
|
if (start !== undefined && end !== undefined) {
|
|
676
674
|
newInterval = this.localCollection.changeInterval(interval, start, end);
|
|
677
|
-
if (!this.isCollaborating && newInterval instanceof
|
|
675
|
+
if (!this.isCollaborating && newInterval instanceof index_js_1.SequenceInterval) {
|
|
678
676
|
setSlideOnRemove(newInterval.start);
|
|
679
677
|
setSlideOnRemove(newInterval.end);
|
|
680
678
|
}
|
|
@@ -689,14 +687,17 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
689
687
|
serializedInterval.stickiness = stickiness;
|
|
690
688
|
// Emit a property bag containing the ID and the other (if any) properties changed
|
|
691
689
|
serializedInterval.properties = {
|
|
692
|
-
[reservedIntervalIdKey]: interval.getIntervalId(),
|
|
690
|
+
[exports.reservedIntervalIdKey]: interval.getIntervalId(),
|
|
693
691
|
...props,
|
|
694
692
|
};
|
|
695
693
|
const localSeq = this.getNextLocalSeq();
|
|
696
|
-
this.
|
|
694
|
+
if (this.isCollaborating) {
|
|
695
|
+
this.localSeqToSerializedInterval.set(localSeq, serializedInterval);
|
|
696
|
+
}
|
|
697
697
|
this.emitter.emit("change", undefined, serializedInterval, { localSeq });
|
|
698
698
|
if (deltaProps !== undefined) {
|
|
699
699
|
this.emit("propertyChanged", interval, deltaProps, true, undefined);
|
|
700
|
+
this.emit("changed", newInterval ?? interval, deltaProps, newInterval ? interval : undefined, true, false);
|
|
700
701
|
}
|
|
701
702
|
if (newInterval) {
|
|
702
703
|
this.addPendingChange(id, serializedInterval);
|
|
@@ -731,7 +732,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
731
732
|
}
|
|
732
733
|
removePendingChange(serializedInterval) {
|
|
733
734
|
// Change ops always have an ID.
|
|
734
|
-
const id = serializedInterval.properties?.[reservedIntervalIdKey];
|
|
735
|
+
const id = serializedInterval.properties?.[exports.reservedIntervalIdKey];
|
|
735
736
|
if (serializedInterval.start !== undefined) {
|
|
736
737
|
this.removePendingChangeHelper(id, this.pendingChangesStart, serializedInterval);
|
|
737
738
|
}
|
|
@@ -760,7 +761,6 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
760
761
|
const entries = this.pendingChangesEnd.get(id);
|
|
761
762
|
return entries && entries.length !== 0;
|
|
762
763
|
}
|
|
763
|
-
/** @internal */
|
|
764
764
|
ackChange(serializedInterval, local, op, localOpMetadata) {
|
|
765
765
|
if (!this.localCollection) {
|
|
766
766
|
throw new telemetry_utils_1.LoggingError("Attach must be called before accessing intervals");
|
|
@@ -774,7 +774,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
774
774
|
// Note that the ID is in the property bag only to allow us to find the interval.
|
|
775
775
|
// This API cannot change the ID, and writing to the ID property will result in an exception. So we
|
|
776
776
|
// strip it out of the properties here.
|
|
777
|
-
const { [reservedIntervalIdKey]: id, ...newProps } = serializedInterval.properties ?? {};
|
|
777
|
+
const { [exports.reservedIntervalIdKey]: id, ...newProps } = serializedInterval.properties ?? {};
|
|
778
778
|
(0, core_utils_1.assert)(id !== undefined, 0x3fe /* id must exist on the interval */);
|
|
779
779
|
const interval = this.getIntervalById(id);
|
|
780
780
|
if (!interval) {
|
|
@@ -806,7 +806,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
806
806
|
// If changeInterval gives us a new interval, work with that one. Otherwise keep working with
|
|
807
807
|
// the one we originally found in the tree.
|
|
808
808
|
newInterval =
|
|
809
|
-
this.localCollection.changeInterval(interval, toOptionalSequencePlace(start, serializedInterval.startSide), toOptionalSequencePlace(end, serializedInterval.endSide), op) ?? interval;
|
|
809
|
+
this.localCollection.changeInterval(interval, toOptionalSequencePlace(start, serializedInterval.startSide ?? Side.Before), toOptionalSequencePlace(end, serializedInterval.endSide ?? Side.Before), op) ?? interval;
|
|
810
810
|
}
|
|
811
811
|
const deltaProps = newInterval.addProperties(newProps, true, op.sequenceNumber);
|
|
812
812
|
if (this.onDeserialize) {
|
|
@@ -818,6 +818,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
818
818
|
const changedProperties = Object.keys(newProps).length > 0;
|
|
819
819
|
if (changedProperties) {
|
|
820
820
|
this.emit("propertyChanged", interval, deltaProps, local, op);
|
|
821
|
+
this.emit("changed", interval, deltaProps, undefined, local, false);
|
|
821
822
|
}
|
|
822
823
|
}
|
|
823
824
|
}
|
|
@@ -841,7 +842,6 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
841
842
|
* deleted as a result of rebasing. This can occur if the interval applies
|
|
842
843
|
* to a range that no longer exists, and the interval was unable to slide.
|
|
843
844
|
*
|
|
844
|
-
* @internal
|
|
845
845
|
*/
|
|
846
846
|
rebaseLocalInterval(opName, serializedInterval, localSeq) {
|
|
847
847
|
if (!this.client) {
|
|
@@ -853,7 +853,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
853
853
|
}
|
|
854
854
|
const { intervalType, properties, stickiness, startSide, endSide } = serializedInterval;
|
|
855
855
|
const { start: startRebased, end: endRebased } = this.localSeqToRebasedInterval.get(localSeq) ?? this.computeRebasedPositions(localSeq);
|
|
856
|
-
const intervalId = properties?.[reservedIntervalIdKey];
|
|
856
|
+
const intervalId = properties?.[exports.reservedIntervalIdKey];
|
|
857
857
|
const localInterval = this.localCollection?.idIntervalIndex.getIntervalById(intervalId);
|
|
858
858
|
const rebased = {
|
|
859
859
|
start: startRebased,
|
|
@@ -881,59 +881,13 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
881
881
|
}
|
|
882
882
|
if (localInterval !== undefined) {
|
|
883
883
|
// we know we must be using `SequenceInterval` because `this.client` exists
|
|
884
|
-
(0, core_utils_1.assert)(localInterval instanceof
|
|
884
|
+
(0, core_utils_1.assert)(localInterval instanceof index_js_1.SequenceInterval, 0x3a0 /* localInterval must be `SequenceInterval` when used with client */);
|
|
885
885
|
// The rebased op may place this interval's endpoints on different segments. Calling `changeInterval` here
|
|
886
886
|
// updates the local client's state to be consistent with the emitted op.
|
|
887
|
-
this.localCollection?.changeInterval(localInterval, toOptionalSequencePlace(startRebased, startSide), toOptionalSequencePlace(endRebased, endSide), undefined, localSeq);
|
|
887
|
+
this.localCollection?.changeInterval(localInterval, toOptionalSequencePlace(startRebased, startSide ?? Side.Before), toOptionalSequencePlace(endRebased, endSide ?? Side.Before), undefined, localSeq);
|
|
888
888
|
}
|
|
889
889
|
return rebased;
|
|
890
890
|
}
|
|
891
|
-
applyStashedOp(op) {
|
|
892
|
-
let interval;
|
|
893
|
-
let props;
|
|
894
|
-
let intervalId;
|
|
895
|
-
switch (op.opName) {
|
|
896
|
-
case intervals_1.IntervalDeltaOpType.ADD: {
|
|
897
|
-
(0, core_utils_1.assert)(op.value.start !== undefined, 0x87a /* start is undefined */);
|
|
898
|
-
(0, core_utils_1.assert)(op.value.end !== undefined, 0x87b /* end is undefined */);
|
|
899
|
-
interval = this.add({
|
|
900
|
-
start: op.value.start,
|
|
901
|
-
end: op.value.end,
|
|
902
|
-
props: op.value.properties,
|
|
903
|
-
});
|
|
904
|
-
const metadata = {
|
|
905
|
-
localSeq: this.getNextLocalSeq(),
|
|
906
|
-
};
|
|
907
|
-
if (interval !== undefined) {
|
|
908
|
-
this.localSeqToSerializedInterval.set(metadata.localSeq, interval.serialize());
|
|
909
|
-
}
|
|
910
|
-
return metadata;
|
|
911
|
-
}
|
|
912
|
-
case intervals_1.IntervalDeltaOpType.DELETE:
|
|
913
|
-
this.removeIntervalById(op.value.properties?.intervalId);
|
|
914
|
-
return {
|
|
915
|
-
localSeq: this.getNextLocalSeq(),
|
|
916
|
-
};
|
|
917
|
-
case intervals_1.IntervalDeltaOpType.CHANGE: {
|
|
918
|
-
(0, core_utils_1.assert)(op.value.properties !== undefined, 0x87c /* properties is undefined */);
|
|
919
|
-
({ intervalId, ...props } = op.value.properties);
|
|
920
|
-
interval = this.change(intervalId, {
|
|
921
|
-
start: op.value.start,
|
|
922
|
-
end: op.value.end,
|
|
923
|
-
props,
|
|
924
|
-
});
|
|
925
|
-
const metadata = {
|
|
926
|
-
localSeq: this.getNextLocalSeq(),
|
|
927
|
-
};
|
|
928
|
-
if (interval !== undefined) {
|
|
929
|
-
this.localSeqToSerializedInterval.set(metadata.localSeq, interval.serialize());
|
|
930
|
-
}
|
|
931
|
-
return metadata;
|
|
932
|
-
}
|
|
933
|
-
default:
|
|
934
|
-
(0, core_utils_1.unreachableCase)(op.opName, `Unknown interval op type: ${op.opName}`);
|
|
935
|
-
}
|
|
936
|
-
}
|
|
937
891
|
getSlideToSegment(lref) {
|
|
938
892
|
if (!this.client) {
|
|
939
893
|
throw new telemetry_utils_1.LoggingError("client does not exist");
|
|
@@ -950,7 +904,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
950
904
|
}
|
|
951
905
|
ackInterval(interval, op) {
|
|
952
906
|
// Only SequenceIntervals need potential sliding
|
|
953
|
-
if (!(interval instanceof
|
|
907
|
+
if (!(interval instanceof index_js_1.SequenceInterval)) {
|
|
954
908
|
return;
|
|
955
909
|
}
|
|
956
910
|
if (!(0, merge_tree_1.refTypeIncludesFlag)(interval.start, merge_tree_1.ReferenceType.StayOnRemove) &&
|
|
@@ -959,7 +913,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
959
913
|
}
|
|
960
914
|
const newStart = this.getSlideToSegment(interval.start);
|
|
961
915
|
const newEnd = this.getSlideToSegment(interval.end);
|
|
962
|
-
const id = interval.properties[reservedIntervalIdKey];
|
|
916
|
+
const id = interval.properties[exports.reservedIntervalIdKey];
|
|
963
917
|
const hasPendingStartChange = this.hasPendingChangeStart(id);
|
|
964
918
|
const hasPendingEndChange = this.hasPendingChangeEnd(id);
|
|
965
919
|
if (!hasPendingStartChange) {
|
|
@@ -985,7 +939,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
985
939
|
}
|
|
986
940
|
if (needsStartUpdate) {
|
|
987
941
|
const props = interval.start.properties;
|
|
988
|
-
interval.start = (0,
|
|
942
|
+
interval.start = (0, index_js_1.createPositionReferenceFromSegoff)(this.client, newStart, interval.start.refType, op, undefined, undefined, (0, index_js_1.startReferenceSlidingPreference)(interval.stickiness), (0, index_js_1.startReferenceSlidingPreference)(interval.stickiness) ===
|
|
989
943
|
merge_tree_1.SlidingPreference.BACKWARD);
|
|
990
944
|
if (props) {
|
|
991
945
|
interval.start.addProperties(props);
|
|
@@ -998,7 +952,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
998
952
|
}
|
|
999
953
|
if (needsEndUpdate) {
|
|
1000
954
|
const props = interval.end.properties;
|
|
1001
|
-
interval.end = (0,
|
|
955
|
+
interval.end = (0, index_js_1.createPositionReferenceFromSegoff)(this.client, newEnd, interval.end.refType, op, undefined, undefined, (0, index_js_1.endReferenceSlidingPreference)(interval.stickiness), (0, index_js_1.endReferenceSlidingPreference)(interval.stickiness) ===
|
|
1002
956
|
merge_tree_1.SlidingPreference.FORWARD);
|
|
1003
957
|
if (props) {
|
|
1004
958
|
interval.end.addProperties(props);
|
|
@@ -1013,12 +967,11 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
1013
967
|
this.emitChange(interval, oldInterval, true, true, op);
|
|
1014
968
|
}
|
|
1015
969
|
}
|
|
1016
|
-
/** @internal */
|
|
1017
970
|
ackAdd(serializedInterval, local, op, localOpMetadata) {
|
|
1018
971
|
if (local) {
|
|
1019
972
|
(0, core_utils_1.assert)(localOpMetadata !== undefined, 0x553 /* op metadata should be defined for local op */);
|
|
1020
973
|
this.localSeqToSerializedInterval.delete(localOpMetadata.localSeq);
|
|
1021
|
-
const id = serializedInterval.properties?.[reservedIntervalIdKey];
|
|
974
|
+
const id = serializedInterval.properties?.[exports.reservedIntervalIdKey];
|
|
1022
975
|
const localInterval = this.getIntervalById(id);
|
|
1023
976
|
if (localInterval) {
|
|
1024
977
|
this.ackInterval(localInterval, op);
|
|
@@ -1038,7 +991,6 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
1038
991
|
this.emit("addInterval", interval, local, op);
|
|
1039
992
|
return interval;
|
|
1040
993
|
}
|
|
1041
|
-
/** @internal */
|
|
1042
994
|
ackDelete(serializedInterval, local, op) {
|
|
1043
995
|
if (local) {
|
|
1044
996
|
// Local ops were applied when the message was created and there's no "pending delete"
|
|
@@ -1055,9 +1007,6 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
1055
1007
|
this.deleteExistingInterval(interval, local, op);
|
|
1056
1008
|
}
|
|
1057
1009
|
}
|
|
1058
|
-
/**
|
|
1059
|
-
* @internal
|
|
1060
|
-
*/
|
|
1061
1010
|
serializeInternal() {
|
|
1062
1011
|
if (!this.localCollection) {
|
|
1063
1012
|
throw new telemetry_utils_1.LoggingError("attachSequence must be called");
|