@fluidframework/sequence 2.0.0-dev-rc.3.0.0.250606 → 2.0.0-dev-rc.3.0.0.253463

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (277) hide show
  1. package/api-report/sequence.api.md +32 -32
  2. package/dist/IntervalCollectionValues.d.ts.map +1 -1
  3. package/dist/IntervalCollectionValues.js +2 -2
  4. package/dist/IntervalCollectionValues.js.map +1 -1
  5. package/dist/index.d.ts +1 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +10 -10
  8. package/dist/index.js.map +1 -1
  9. package/dist/intervalCollection.d.ts +1 -1
  10. package/dist/intervalCollection.d.ts.map +1 -1
  11. package/dist/intervalCollection.js +70 -70
  12. package/dist/intervalCollection.js.map +1 -1
  13. package/dist/intervalCollectionMap.d.ts.map +1 -1
  14. package/dist/intervalCollectionMap.js +7 -7
  15. package/dist/intervalCollectionMap.js.map +1 -1
  16. package/dist/intervalCollectionMapInterfaces.d.ts.map +1 -1
  17. package/dist/intervalCollectionMapInterfaces.js.map +1 -1
  18. package/dist/intervalIndex/endpointInRangeIndex.d.ts +1 -1
  19. package/dist/intervalIndex/endpointInRangeIndex.d.ts.map +1 -1
  20. package/dist/intervalIndex/endpointInRangeIndex.js +2 -2
  21. package/dist/intervalIndex/endpointInRangeIndex.js.map +1 -1
  22. package/dist/intervalIndex/endpointIndex.d.ts +1 -1
  23. package/dist/intervalIndex/endpointIndex.d.ts.map +1 -1
  24. package/dist/intervalIndex/endpointIndex.js +2 -2
  25. package/dist/intervalIndex/endpointIndex.js.map +1 -1
  26. package/dist/intervalIndex/idIntervalIndex.d.ts.map +1 -1
  27. package/dist/intervalIndex/idIntervalIndex.js +3 -3
  28. package/dist/intervalIndex/idIntervalIndex.js.map +1 -1
  29. package/dist/intervalIndex/overlappingIntervalsIndex.d.ts +1 -1
  30. package/dist/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -1
  31. package/dist/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
  32. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +1 -1
  33. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js +5 -5
  34. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -1
  35. package/dist/intervalIndex/sequenceIntervalIndexes.d.ts +1 -1
  36. package/dist/intervalIndex/sequenceIntervalIndexes.d.ts.map +1 -1
  37. package/dist/intervalIndex/sequenceIntervalIndexes.js.map +1 -1
  38. package/dist/intervalIndex/startpointInRangeIndex.d.ts +1 -1
  39. package/dist/intervalIndex/startpointInRangeIndex.d.ts.map +1 -1
  40. package/dist/intervalIndex/startpointInRangeIndex.js +2 -2
  41. package/dist/intervalIndex/startpointInRangeIndex.js.map +1 -1
  42. package/dist/intervalTree.d.ts +1 -1
  43. package/dist/intervalTree.d.ts.map +1 -1
  44. package/dist/intervalTree.js +2 -2
  45. package/dist/intervalTree.js.map +1 -1
  46. package/dist/intervals/interval.d.ts +1 -1
  47. package/dist/intervals/interval.d.ts.map +1 -1
  48. package/dist/intervals/interval.js +9 -9
  49. package/dist/intervals/interval.js.map +1 -1
  50. package/dist/intervals/intervalUtils.d.ts +1 -1
  51. package/dist/intervals/intervalUtils.d.ts.map +1 -1
  52. package/dist/intervals/intervalUtils.js +5 -5
  53. package/dist/intervals/intervalUtils.js.map +1 -1
  54. package/dist/intervals/sequenceInterval.d.ts +1 -1
  55. package/dist/intervals/sequenceInterval.d.ts.map +1 -1
  56. package/dist/intervals/sequenceInterval.js +34 -34
  57. package/dist/intervals/sequenceInterval.js.map +1 -1
  58. package/dist/packageVersion.d.ts +1 -1
  59. package/dist/packageVersion.js +1 -1
  60. package/dist/packageVersion.js.map +1 -1
  61. package/dist/revertibles.d.ts +1 -1
  62. package/dist/revertibles.d.ts.map +1 -1
  63. package/dist/revertibles.js +34 -34
  64. package/dist/revertibles.js.map +1 -1
  65. package/dist/sequence-alpha.d.ts +32 -32
  66. package/dist/sequence-beta.d.ts +32 -32
  67. package/dist/sequence-public.d.ts +32 -32
  68. package/dist/sequence-untrimmed.d.ts +32 -32
  69. package/dist/sequence.d.ts +4 -3
  70. package/dist/sequence.d.ts.map +1 -1
  71. package/dist/sequence.js +31 -31
  72. package/dist/sequence.js.map +1 -1
  73. package/dist/sequenceDeltaEvent.d.ts +1 -1
  74. package/dist/sequenceDeltaEvent.d.ts.map +1 -1
  75. package/dist/sequenceDeltaEvent.js +4 -4
  76. package/dist/sequenceDeltaEvent.js.map +1 -1
  77. package/dist/sequenceFactory.d.ts.map +1 -1
  78. package/dist/sequenceFactory.js +3 -3
  79. package/dist/sequenceFactory.js.map +1 -1
  80. package/dist/sharedIntervalCollection.d.ts +2 -1
  81. package/dist/sharedIntervalCollection.d.ts.map +1 -1
  82. package/dist/sharedIntervalCollection.js +3 -3
  83. package/dist/sharedIntervalCollection.js.map +1 -1
  84. package/dist/sharedSequence.d.ts +3 -2
  85. package/dist/sharedSequence.d.ts.map +1 -1
  86. package/dist/sharedSequence.js +4 -4
  87. package/dist/sharedSequence.js.map +1 -1
  88. package/dist/sharedString.d.ts +1 -1
  89. package/dist/sharedString.d.ts.map +1 -1
  90. package/dist/sharedString.js +9 -9
  91. package/dist/sharedString.js.map +1 -1
  92. package/lib/IntervalCollectionValues.d.ts.map +1 -1
  93. package/lib/IntervalCollectionValues.js +1 -1
  94. package/lib/IntervalCollectionValues.js.map +1 -1
  95. package/lib/index.d.ts +1 -1
  96. package/lib/index.d.ts.map +1 -1
  97. package/lib/index.js +1 -1
  98. package/lib/index.js.map +1 -1
  99. package/lib/intervalCollection.d.ts +1 -1
  100. package/lib/intervalCollection.d.ts.map +1 -1
  101. package/lib/intervalCollection.js +3 -3
  102. package/lib/intervalCollection.js.map +1 -1
  103. package/lib/intervalCollectionMap.d.ts.map +1 -1
  104. package/lib/intervalCollectionMap.js +2 -2
  105. package/lib/intervalCollectionMap.js.map +1 -1
  106. package/lib/intervalCollectionMapInterfaces.d.ts.map +1 -1
  107. package/lib/intervalCollectionMapInterfaces.js.map +1 -1
  108. package/lib/intervalIndex/endpointInRangeIndex.d.ts +1 -1
  109. package/lib/intervalIndex/endpointInRangeIndex.d.ts.map +1 -1
  110. package/lib/intervalIndex/endpointInRangeIndex.js +1 -1
  111. package/lib/intervalIndex/endpointInRangeIndex.js.map +1 -1
  112. package/lib/intervalIndex/endpointIndex.d.ts +1 -1
  113. package/lib/intervalIndex/endpointIndex.d.ts.map +1 -1
  114. package/lib/intervalIndex/endpointIndex.js +1 -1
  115. package/lib/intervalIndex/endpointIndex.js.map +1 -1
  116. package/lib/intervalIndex/idIntervalIndex.d.ts.map +1 -1
  117. package/lib/intervalIndex/idIntervalIndex.js +1 -1
  118. package/lib/intervalIndex/idIntervalIndex.js.map +1 -1
  119. package/lib/intervalIndex/overlappingIntervalsIndex.d.ts +1 -1
  120. package/lib/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -1
  121. package/lib/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
  122. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +1 -1
  123. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js +1 -1
  124. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -1
  125. package/lib/intervalIndex/sequenceIntervalIndexes.d.ts +1 -1
  126. package/lib/intervalIndex/sequenceIntervalIndexes.d.ts.map +1 -1
  127. package/lib/intervalIndex/sequenceIntervalIndexes.js.map +1 -1
  128. package/lib/intervalIndex/startpointInRangeIndex.d.ts +1 -1
  129. package/lib/intervalIndex/startpointInRangeIndex.d.ts.map +1 -1
  130. package/lib/intervalIndex/startpointInRangeIndex.js +1 -1
  131. package/lib/intervalIndex/startpointInRangeIndex.js.map +1 -1
  132. package/lib/intervalTree.d.ts +1 -1
  133. package/lib/intervalTree.d.ts.map +1 -1
  134. package/lib/intervalTree.js +1 -1
  135. package/lib/intervalTree.js.map +1 -1
  136. package/lib/intervals/interval.d.ts +1 -1
  137. package/lib/intervals/interval.d.ts.map +1 -1
  138. package/lib/intervals/interval.js +3 -3
  139. package/lib/intervals/interval.js.map +1 -1
  140. package/lib/intervals/intervalUtils.d.ts +1 -1
  141. package/lib/intervals/intervalUtils.d.ts.map +1 -1
  142. package/lib/intervals/intervalUtils.js +1 -1
  143. package/lib/intervals/intervalUtils.js.map +1 -1
  144. package/lib/intervals/sequenceInterval.d.ts +1 -1
  145. package/lib/intervals/sequenceInterval.d.ts.map +1 -1
  146. package/lib/intervals/sequenceInterval.js +3 -3
  147. package/lib/intervals/sequenceInterval.js.map +1 -1
  148. package/lib/packageVersion.d.ts +1 -1
  149. package/lib/packageVersion.js +1 -1
  150. package/lib/packageVersion.js.map +1 -1
  151. package/lib/revertibles.d.ts +1 -1
  152. package/lib/revertibles.d.ts.map +1 -1
  153. package/lib/revertibles.js +3 -4
  154. package/lib/revertibles.js.map +1 -1
  155. package/lib/sequence-alpha.d.ts +32 -32
  156. package/lib/sequence-beta.d.ts +32 -32
  157. package/lib/sequence-public.d.ts +32 -32
  158. package/lib/sequence-untrimmed.d.ts +32 -32
  159. package/lib/sequence.d.ts +4 -3
  160. package/lib/sequence.d.ts.map +1 -1
  161. package/lib/sequence.js +6 -7
  162. package/lib/sequence.js.map +1 -1
  163. package/lib/sequenceDeltaEvent.d.ts +1 -1
  164. package/lib/sequenceDeltaEvent.d.ts.map +1 -1
  165. package/lib/sequenceDeltaEvent.js +3 -4
  166. package/lib/sequenceDeltaEvent.js.map +1 -1
  167. package/lib/sequenceFactory.d.ts.map +1 -1
  168. package/lib/sequenceFactory.js +1 -1
  169. package/lib/sequenceFactory.js.map +1 -1
  170. package/lib/sharedIntervalCollection.d.ts +2 -1
  171. package/lib/sharedIntervalCollection.d.ts.map +1 -1
  172. package/lib/sharedIntervalCollection.js +1 -1
  173. package/lib/sharedIntervalCollection.js.map +1 -1
  174. package/lib/sharedSequence.d.ts +3 -2
  175. package/lib/sharedSequence.d.ts.map +1 -1
  176. package/lib/sharedSequence.js +2 -2
  177. package/lib/sharedSequence.js.map +1 -1
  178. package/lib/sharedString.d.ts +1 -1
  179. package/lib/sharedString.d.ts.map +1 -1
  180. package/lib/sharedString.js +1 -1
  181. package/lib/sharedString.js.map +1 -1
  182. package/lib/tsdoc-metadata.json +11 -0
  183. package/package.json +17 -29
  184. package/src/IntervalCollectionValues.ts +3 -1
  185. package/src/index.ts +1 -1
  186. package/src/intervalCollection.ts +4 -3
  187. package/src/intervalCollectionMap.ts +4 -2
  188. package/src/intervalCollectionMapInterfaces.ts +1 -0
  189. package/src/intervalIndex/endpointInRangeIndex.ts +3 -1
  190. package/src/intervalIndex/endpointIndex.ts +3 -1
  191. package/src/intervalIndex/idIntervalIndex.ts +3 -1
  192. package/src/intervalIndex/overlappingIntervalsIndex.ts +3 -1
  193. package/src/intervalIndex/overlappingSequenceIntervalsIndex.ts +3 -1
  194. package/src/intervalIndex/sequenceIntervalIndexes.ts +3 -1
  195. package/src/intervalIndex/startpointInRangeIndex.ts +3 -1
  196. package/src/intervalTree.ts +2 -1
  197. package/src/intervals/interval.ts +5 -3
  198. package/src/intervals/intervalUtils.ts +4 -2
  199. package/src/intervals/sequenceInterval.ts +5 -3
  200. package/src/packageVersion.ts +1 -1
  201. package/src/revertibles.ts +4 -4
  202. package/src/sequence.ts +8 -11
  203. package/src/sequenceDeltaEvent.ts +3 -4
  204. package/src/sequenceFactory.ts +2 -1
  205. package/src/sharedIntervalCollection.ts +3 -5
  206. package/src/sharedSequence.ts +9 -6
  207. package/src/sharedString.ts +2 -1
  208. package/lib/test/collections.intervalTree.js +0 -73
  209. package/lib/test/collections.intervalTree.js.map +0 -1
  210. package/lib/test/createSnapshotFiles.js +0 -15
  211. package/lib/test/createSnapshotFiles.js.map +0 -1
  212. package/lib/test/dirname.cjs +0 -16
  213. package/lib/test/dirname.cjs.map +0 -1
  214. package/lib/test/endpointInRangeIndex.spec.js +0 -182
  215. package/lib/test/endpointInRangeIndex.spec.js.map +0 -1
  216. package/lib/test/fuzz/fuzzUtils.js +0 -362
  217. package/lib/test/fuzz/fuzzUtils.js.map +0 -1
  218. package/lib/test/fuzz/intervalCollection.fuzz.spec.js +0 -87
  219. package/lib/test/fuzz/intervalCollection.fuzz.spec.js.map +0 -1
  220. package/lib/test/fuzz/intervalRevertibles.fuzz.spec.js +0 -128
  221. package/lib/test/fuzz/intervalRevertibles.fuzz.spec.js.map +0 -1
  222. package/lib/test/fuzz/sharedString.fuzz.spec.js +0 -91
  223. package/lib/test/fuzz/sharedString.fuzz.spec.js.map +0 -1
  224. package/lib/test/generateSharedStrings.js +0 -138
  225. package/lib/test/generateSharedStrings.js.map +0 -1
  226. package/lib/test/intervalCollection.detached.spec.js +0 -128
  227. package/lib/test/intervalCollection.detached.spec.js.map +0 -1
  228. package/lib/test/intervalCollection.events.spec.js +0 -491
  229. package/lib/test/intervalCollection.events.spec.js.map +0 -1
  230. package/lib/test/intervalCollection.perf.spec.js +0 -88
  231. package/lib/test/intervalCollection.perf.spec.js.map +0 -1
  232. package/lib/test/intervalCollection.snapshot.spec.js +0 -171
  233. package/lib/test/intervalCollection.snapshot.spec.js.map +0 -1
  234. package/lib/test/intervalCollection.spec.js +0 -1660
  235. package/lib/test/intervalCollection.spec.js.map +0 -1
  236. package/lib/test/intervalIndexTestUtils.js +0 -49
  237. package/lib/test/intervalIndexTestUtils.js.map +0 -1
  238. package/lib/test/intervalRebasing.spec.js +0 -589
  239. package/lib/test/intervalRebasing.spec.js.map +0 -1
  240. package/lib/test/intervalStashedOps.spec.js +0 -142
  241. package/lib/test/intervalStashedOps.spec.js.map +0 -1
  242. package/lib/test/intervalTestUtils.js +0 -81
  243. package/lib/test/intervalTestUtils.js.map +0 -1
  244. package/lib/test/marshalling.spec.js +0 -55
  245. package/lib/test/marshalling.spec.js.map +0 -1
  246. package/lib/test/memory/sharedSequence.spec.js +0 -82
  247. package/lib/test/memory/sharedSequence.spec.js.map +0 -1
  248. package/lib/test/memory/sharedString.spec.js +0 -134
  249. package/lib/test/memory/sharedString.spec.js.map +0 -1
  250. package/lib/test/overlappingSequenceIntervalsIndex.spec.js +0 -348
  251. package/lib/test/overlappingSequenceIntervalsIndex.spec.js.map +0 -1
  252. package/lib/test/partialLoad.spec.js +0 -211
  253. package/lib/test/partialLoad.spec.js.map +0 -1
  254. package/lib/test/rebasing.spec.js +0 -81
  255. package/lib/test/rebasing.spec.js.map +0 -1
  256. package/lib/test/reentrancy.spec.js +0 -174
  257. package/lib/test/reentrancy.spec.js.map +0 -1
  258. package/lib/test/revertibles.spec.js +0 -1019
  259. package/lib/test/revertibles.spec.js.map +0 -1
  260. package/lib/test/sequenceDeltaEvent.spec.js +0 -2144
  261. package/lib/test/sequenceDeltaEvent.spec.js.map +0 -1
  262. package/lib/test/sharedIntervalCollection.spec.js +0 -159
  263. package/lib/test/sharedIntervalCollection.spec.js.map +0 -1
  264. package/lib/test/sharedString.spec.js +0 -532
  265. package/lib/test/sharedString.spec.js.map +0 -1
  266. package/lib/test/snapshotEmptyProps.spec.js +0 -45
  267. package/lib/test/snapshotEmptyProps.spec.js.map +0 -1
  268. package/lib/test/snapshotVersion.spec.js +0 -149
  269. package/lib/test/snapshotVersion.spec.js.map +0 -1
  270. package/lib/test/startpointInRangeIndex.spec.js +0 -182
  271. package/lib/test/startpointInRangeIndex.spec.js.map +0 -1
  272. package/lib/test/subSequence.spec.js +0 -92
  273. package/lib/test/subSequence.spec.js.map +0 -1
  274. package/lib/test/types/validateSequencePrevious.generated.js +0 -162
  275. package/lib/test/types/validateSequencePrevious.generated.js.map +0 -1
  276. package/lib/test/v1IntervalCollectionHelpers.js +0 -93
  277. package/lib/test/v1IntervalCollectionHelpers.js.map +0 -1
@@ -1,159 +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, MockContainerRuntimeFactoryForReconnection, MockFluidDataStoreRuntime, MockStorage, } from "@fluidframework/test-runtime-utils";
7
- import { OverlappingIntervalsIndex } from "../intervalIndex/index.js";
8
- import { intervalHelpers } from "../intervals/index.js";
9
- import { SharedIntervalCollection, SharedIntervalCollectionFactory, } from "../sharedIntervalCollection.js";
10
- const assertIntervals = (intervalCollection, expected, overlappingIntervalsIndex) => {
11
- const actual = Array.from(intervalCollection);
12
- if (overlappingIntervalsIndex) {
13
- const overlapping = overlappingIntervalsIndex.findOverlappingIntervals(Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY);
14
- assert.deepEqual(actual, overlapping, "Interval search returned inconsistent results");
15
- }
16
- assert.strictEqual(actual.length, expected.length, `the number of intervals must be consistent`);
17
- const actualPos = actual.map((interval) => {
18
- assert(interval);
19
- return { start: interval.start, end: interval.end };
20
- });
21
- assert.deepEqual(actualPos, expected, "intervals are not as expected");
22
- };
23
- function createConnectedIntervalCollection(id, runtimeFactory) {
24
- const dataStoreRuntime = new MockFluidDataStoreRuntime();
25
- const intervals = new SharedIntervalCollection(id, dataStoreRuntime, SharedIntervalCollectionFactory.Attributes);
26
- const containerRuntime = runtimeFactory.createContainerRuntime(dataStoreRuntime);
27
- const services = {
28
- deltaConnection: dataStoreRuntime.createDeltaConnection(),
29
- objectStorage: new MockStorage(undefined),
30
- };
31
- intervals.connect(services);
32
- intervals.initializeLocal();
33
- return { intervals, containerRuntime };
34
- }
35
- describe("SharedIntervalCollection", () => {
36
- describe("In a connected state", () => {
37
- let runtimeFactory;
38
- let intervals1;
39
- let intervals2;
40
- let collection1;
41
- let collection2;
42
- let overlappingIntervalsIndex1;
43
- let overlappingIntervalsIndex2;
44
- beforeEach(() => {
45
- runtimeFactory = new MockContainerRuntimeFactory();
46
- intervals1 = createConnectedIntervalCollection("collection 1", runtimeFactory).intervals;
47
- intervals2 = createConnectedIntervalCollection("collection 2", runtimeFactory).intervals;
48
- collection1 = intervals1.getIntervalCollection("test");
49
- collection2 = intervals2.getIntervalCollection("test");
50
- overlappingIntervalsIndex1 = new OverlappingIntervalsIndex(undefined, intervalHelpers);
51
- overlappingIntervalsIndex2 = new OverlappingIntervalsIndex(undefined, intervalHelpers);
52
- collection1.attachIndex(overlappingIntervalsIndex1);
53
- collection2.attachIndex(overlappingIntervalsIndex2);
54
- });
55
- afterEach(() => {
56
- collection1.detachIndex(overlappingIntervalsIndex1);
57
- collection2.detachIndex(overlappingIntervalsIndex2);
58
- });
59
- it("Can add intervals from multiple clients", () => {
60
- collection1.add({ start: 0, end: 20 });
61
- collection2.add({ start: 10, end: 30 });
62
- assertIntervals(collection1, [{ start: 0, end: 20 }], overlappingIntervalsIndex1);
63
- assertIntervals(collection2, [{ start: 10, end: 30 }], overlappingIntervalsIndex2);
64
- assert.equal(overlappingIntervalsIndex1.findOverlappingIntervals(1, 3).length, 1);
65
- assert.equal(overlappingIntervalsIndex2.findOverlappingIntervals(1, 3).length, 0);
66
- assert.equal(overlappingIntervalsIndex1.findOverlappingIntervals(1, 19).length, 1);
67
- assert.equal(overlappingIntervalsIndex2.findOverlappingIntervals(1, 19).length, 1);
68
- runtimeFactory.processAllMessages();
69
- const expected = [
70
- { start: 0, end: 20 },
71
- { start: 10, end: 30 },
72
- ];
73
- assertIntervals(collection1, expected, overlappingIntervalsIndex1);
74
- assertIntervals(collection2, expected, overlappingIntervalsIndex2);
75
- assert.equal(overlappingIntervalsIndex1.findOverlappingIntervals(1, 3).length, 1);
76
- assert.equal(overlappingIntervalsIndex2.findOverlappingIntervals(1, 3).length, 1);
77
- assert.equal(overlappingIntervalsIndex1.findOverlappingIntervals(1, 19).length, 2);
78
- assert.equal(overlappingIntervalsIndex2.findOverlappingIntervals(1, 19).length, 2);
79
- });
80
- it("Can remove intervals that were added", () => {
81
- const interval = collection1.add({ start: 0, end: 20 });
82
- collection2.add({ start: 10, end: 30 });
83
- runtimeFactory.processAllMessages();
84
- const id = interval.getIntervalId() ?? assert.fail("expected interval to have id");
85
- collection1.removeIntervalById(id);
86
- assertIntervals(collection1, [{ start: 10, end: 30 }], overlappingIntervalsIndex1);
87
- assertIntervals(collection2, [
88
- { start: 0, end: 20 },
89
- { start: 10, end: 30 },
90
- ], overlappingIntervalsIndex2);
91
- runtimeFactory.processAllMessages();
92
- assertIntervals(collection1, [{ start: 10, end: 30 }], overlappingIntervalsIndex1);
93
- assertIntervals(collection2, [{ start: 10, end: 30 }], overlappingIntervalsIndex2);
94
- });
95
- it("Can change intervals", () => {
96
- const interval = collection1.add({ start: 0, end: 20 });
97
- collection2.add({ start: 10, end: 30 });
98
- runtimeFactory.processAllMessages();
99
- const id = interval.getIntervalId() ?? assert.fail("expected interval to have id");
100
- collection1.change(id, { start: 10, end: 20 });
101
- assertIntervals(collection1, [
102
- { start: 10, end: 20 },
103
- { start: 10, end: 30 },
104
- ], overlappingIntervalsIndex1);
105
- assertIntervals(collection2, [
106
- { start: 0, end: 20 },
107
- { start: 10, end: 30 },
108
- ], overlappingIntervalsIndex2);
109
- runtimeFactory.processAllMessages();
110
- assertIntervals(collection1, [
111
- { start: 10, end: 20 },
112
- { start: 10, end: 30 },
113
- ], overlappingIntervalsIndex1);
114
- assertIntervals(collection2, [
115
- { start: 10, end: 20 },
116
- { start: 10, end: 30 },
117
- ], overlappingIntervalsIndex2);
118
- });
119
- });
120
- describe("on reconnect", () => {
121
- let runtimeFactory;
122
- let intervals1;
123
- let intervals2;
124
- let runtime1;
125
- let collection1;
126
- let collection2;
127
- let overlappingIntervalsIndex1;
128
- let overlappingIntervalsIndex2;
129
- beforeEach(() => {
130
- runtimeFactory = new MockContainerRuntimeFactoryForReconnection();
131
- const client1 = createConnectedIntervalCollection("collection 1", runtimeFactory);
132
- runtime1 = client1.containerRuntime;
133
- intervals1 = client1.intervals;
134
- intervals2 = createConnectedIntervalCollection("collection 2", runtimeFactory).intervals;
135
- collection1 = intervals1.getIntervalCollection("test");
136
- collection2 = intervals2.getIntervalCollection("test");
137
- overlappingIntervalsIndex1 = new OverlappingIntervalsIndex(undefined, intervalHelpers);
138
- overlappingIntervalsIndex2 = new OverlappingIntervalsIndex(undefined, intervalHelpers);
139
- collection1.attachIndex(overlappingIntervalsIndex1);
140
- collection2.attachIndex(overlappingIntervalsIndex2);
141
- });
142
- afterEach(() => {
143
- collection1.detachIndex(overlappingIntervalsIndex1);
144
- collection2.detachIndex(overlappingIntervalsIndex2);
145
- });
146
- it("can rebase add ops", () => {
147
- runtime1.connected = false;
148
- collection1.add({ start: 15, end: 17 });
149
- runtimeFactory.processAllMessages();
150
- assertIntervals(collection1, [{ start: 15, end: 17 }], overlappingIntervalsIndex1);
151
- assertIntervals(collection2, [], overlappingIntervalsIndex2);
152
- runtime1.connected = true;
153
- runtimeFactory.processAllMessages();
154
- assertIntervals(collection1, [{ start: 15, end: 17 }], overlappingIntervalsIndex1);
155
- assertIntervals(collection2, [{ start: 15, end: 17 }], overlappingIntervalsIndex2);
156
- });
157
- });
158
- });
159
- //# sourceMappingURL=sharedIntervalCollection.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sharedIntervalCollection.spec.js","sourceRoot":"","sources":["../../src/test/sharedIntervalCollection.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 { Client } from \"@fluidframework/merge-tree\";\nimport {\n\tMockContainerRuntime,\n\tMockContainerRuntimeFactory,\n\tMockContainerRuntimeFactoryForReconnection,\n\tMockContainerRuntimeForReconnection,\n\tMockFluidDataStoreRuntime,\n\tMockStorage,\n} from \"@fluidframework/test-runtime-utils\";\nimport { IIntervalCollection } from \"../intervalCollection.js\";\nimport { IOverlappingIntervalsIndex, OverlappingIntervalsIndex } from \"../intervalIndex/index.js\";\nimport { Interval, intervalHelpers } from \"../intervals/index.js\";\nimport {\n\tSharedIntervalCollection,\n\tSharedIntervalCollectionFactory,\n} from \"../sharedIntervalCollection.js\";\n\nconst assertIntervals = (\n\tintervalCollection: IIntervalCollection<Interval>,\n\texpected: readonly { start: number; end: number }[],\n\toverlappingIntervalsIndex?: IOverlappingIntervalsIndex<Interval>,\n) => {\n\tconst actual = Array.from(intervalCollection);\n\tif (overlappingIntervalsIndex) {\n\t\tconst overlapping = overlappingIntervalsIndex.findOverlappingIntervals(\n\t\t\tNumber.NEGATIVE_INFINITY,\n\t\t\tNumber.POSITIVE_INFINITY,\n\t\t);\n\t\tassert.deepEqual(actual, overlapping, \"Interval search returned inconsistent results\");\n\t}\n\tassert.strictEqual(\n\t\tactual.length,\n\t\texpected.length,\n\t\t`the number of intervals must be consistent`,\n\t);\n\n\tconst actualPos = actual.map((interval) => {\n\t\tassert(interval);\n\t\treturn { start: interval.start, end: interval.end };\n\t});\n\tassert.deepEqual(actualPos, expected, \"intervals are not as expected\");\n};\n\nfunction createConnectedIntervalCollection(\n\tid: string,\n\truntimeFactory: MockContainerRuntimeFactoryForReconnection,\n): {\n\tintervals: SharedIntervalCollection;\n\tcontainerRuntime: MockContainerRuntimeForReconnection;\n};\nfunction createConnectedIntervalCollection(\n\tid: string,\n\truntimeFactory: MockContainerRuntimeFactory,\n): {\n\tintervals: SharedIntervalCollection;\n\tcontainerRuntime: MockContainerRuntime;\n};\nfunction createConnectedIntervalCollection(\n\tid: string,\n\truntimeFactory: MockContainerRuntimeFactory | MockContainerRuntimeFactoryForReconnection,\n) {\n\tconst dataStoreRuntime = new MockFluidDataStoreRuntime();\n\tconst intervals = new SharedIntervalCollection(\n\t\tid,\n\t\tdataStoreRuntime,\n\t\tSharedIntervalCollectionFactory.Attributes,\n\t);\n\tconst containerRuntime = runtimeFactory.createContainerRuntime(dataStoreRuntime);\n\tconst services = {\n\t\tdeltaConnection: dataStoreRuntime.createDeltaConnection(),\n\t\tobjectStorage: new MockStorage(undefined),\n\t};\n\tintervals.connect(services);\n\tintervals.initializeLocal();\n\treturn { intervals, containerRuntime };\n}\n\ndescribe(\"SharedIntervalCollection\", () => {\n\tdescribe(\"In a connected state\", () => {\n\t\tlet runtimeFactory: MockContainerRuntimeFactory;\n\t\tlet intervals1: SharedIntervalCollection;\n\t\tlet intervals2: SharedIntervalCollection;\n\t\tlet collection1: IIntervalCollection<Interval>;\n\t\tlet collection2: IIntervalCollection<Interval>;\n\t\tlet overlappingIntervalsIndex1: IOverlappingIntervalsIndex<Interval>;\n\t\tlet overlappingIntervalsIndex2: IOverlappingIntervalsIndex<Interval>;\n\n\t\tbeforeEach(() => {\n\t\t\truntimeFactory = new MockContainerRuntimeFactory();\n\t\t\tintervals1 = createConnectedIntervalCollection(\n\t\t\t\t\"collection 1\",\n\t\t\t\truntimeFactory,\n\t\t\t).intervals;\n\t\t\tintervals2 = createConnectedIntervalCollection(\n\t\t\t\t\"collection 2\",\n\t\t\t\truntimeFactory,\n\t\t\t).intervals;\n\t\t\tcollection1 = intervals1.getIntervalCollection(\"test\");\n\t\t\tcollection2 = intervals2.getIntervalCollection(\"test\");\n\t\t\toverlappingIntervalsIndex1 = new OverlappingIntervalsIndex(\n\t\t\t\tundefined as unknown as Client,\n\t\t\t\tintervalHelpers,\n\t\t\t);\n\t\t\toverlappingIntervalsIndex2 = new OverlappingIntervalsIndex(\n\t\t\t\tundefined as unknown as Client,\n\t\t\t\tintervalHelpers,\n\t\t\t);\n\t\t\tcollection1.attachIndex(overlappingIntervalsIndex1);\n\t\t\tcollection2.attachIndex(overlappingIntervalsIndex2);\n\t\t});\n\n\t\tafterEach(() => {\n\t\t\tcollection1.detachIndex(overlappingIntervalsIndex1);\n\t\t\tcollection2.detachIndex(overlappingIntervalsIndex2);\n\t\t});\n\n\t\tit(\"Can add intervals from multiple clients\", () => {\n\t\t\tcollection1.add({ start: 0, end: 20 });\n\t\t\tcollection2.add({ start: 10, end: 30 });\n\t\t\tassertIntervals(collection1, [{ start: 0, end: 20 }], overlappingIntervalsIndex1);\n\t\t\tassertIntervals(collection2, [{ start: 10, end: 30 }], overlappingIntervalsIndex2);\n\n\t\t\tassert.equal(overlappingIntervalsIndex1.findOverlappingIntervals(1, 3).length, 1);\n\t\t\tassert.equal(overlappingIntervalsIndex2.findOverlappingIntervals(1, 3).length, 0);\n\t\t\tassert.equal(overlappingIntervalsIndex1.findOverlappingIntervals(1, 19).length, 1);\n\t\t\tassert.equal(overlappingIntervalsIndex2.findOverlappingIntervals(1, 19).length, 1);\n\n\t\t\truntimeFactory.processAllMessages();\n\t\t\tconst expected = [\n\t\t\t\t{ start: 0, end: 20 },\n\t\t\t\t{ start: 10, end: 30 },\n\t\t\t];\n\t\t\tassertIntervals(collection1, expected, overlappingIntervalsIndex1);\n\t\t\tassertIntervals(collection2, expected, overlappingIntervalsIndex2);\n\n\t\t\tassert.equal(overlappingIntervalsIndex1.findOverlappingIntervals(1, 3).length, 1);\n\t\t\tassert.equal(overlappingIntervalsIndex2.findOverlappingIntervals(1, 3).length, 1);\n\t\t\tassert.equal(overlappingIntervalsIndex1.findOverlappingIntervals(1, 19).length, 2);\n\t\t\tassert.equal(overlappingIntervalsIndex2.findOverlappingIntervals(1, 19).length, 2);\n\t\t});\n\n\t\tit(\"Can remove intervals that were added\", () => {\n\t\t\tconst interval = collection1.add({ start: 0, end: 20 });\n\t\t\tcollection2.add({ start: 10, end: 30 });\n\t\t\truntimeFactory.processAllMessages();\n\n\t\t\tconst id = interval.getIntervalId() ?? assert.fail(\"expected interval to have id\");\n\t\t\tcollection1.removeIntervalById(id);\n\t\t\tassertIntervals(collection1, [{ start: 10, end: 30 }], overlappingIntervalsIndex1);\n\t\t\tassertIntervals(\n\t\t\t\tcollection2,\n\t\t\t\t[\n\t\t\t\t\t{ start: 0, end: 20 },\n\t\t\t\t\t{ start: 10, end: 30 },\n\t\t\t\t],\n\t\t\t\toverlappingIntervalsIndex2,\n\t\t\t);\n\n\t\t\truntimeFactory.processAllMessages();\n\t\t\tassertIntervals(collection1, [{ start: 10, end: 30 }], overlappingIntervalsIndex1);\n\t\t\tassertIntervals(collection2, [{ start: 10, end: 30 }], overlappingIntervalsIndex2);\n\t\t});\n\n\t\tit(\"Can change intervals\", () => {\n\t\t\tconst interval = collection1.add({ start: 0, end: 20 });\n\t\t\tcollection2.add({ start: 10, end: 30 });\n\t\t\truntimeFactory.processAllMessages();\n\n\t\t\tconst id = interval.getIntervalId() ?? assert.fail(\"expected interval to have id\");\n\t\t\tcollection1.change(id, { start: 10, end: 20 });\n\t\t\tassertIntervals(\n\t\t\t\tcollection1,\n\t\t\t\t[\n\t\t\t\t\t{ start: 10, end: 20 },\n\t\t\t\t\t{ start: 10, end: 30 },\n\t\t\t\t],\n\t\t\t\toverlappingIntervalsIndex1,\n\t\t\t);\n\t\t\tassertIntervals(\n\t\t\t\tcollection2,\n\t\t\t\t[\n\t\t\t\t\t{ start: 0, end: 20 },\n\t\t\t\t\t{ start: 10, end: 30 },\n\t\t\t\t],\n\t\t\t\toverlappingIntervalsIndex2,\n\t\t\t);\n\n\t\t\truntimeFactory.processAllMessages();\n\t\t\tassertIntervals(\n\t\t\t\tcollection1,\n\t\t\t\t[\n\t\t\t\t\t{ start: 10, end: 20 },\n\t\t\t\t\t{ start: 10, end: 30 },\n\t\t\t\t],\n\t\t\t\toverlappingIntervalsIndex1,\n\t\t\t);\n\t\t\tassertIntervals(\n\t\t\t\tcollection2,\n\t\t\t\t[\n\t\t\t\t\t{ start: 10, end: 20 },\n\t\t\t\t\t{ start: 10, end: 30 },\n\t\t\t\t],\n\t\t\t\toverlappingIntervalsIndex2,\n\t\t\t);\n\t\t});\n\t});\n\n\tdescribe(\"on reconnect\", () => {\n\t\tlet runtimeFactory: MockContainerRuntimeFactoryForReconnection;\n\t\tlet intervals1: SharedIntervalCollection;\n\t\tlet intervals2: SharedIntervalCollection;\n\t\tlet runtime1: MockContainerRuntimeForReconnection;\n\t\tlet collection1: IIntervalCollection<Interval>;\n\t\tlet collection2: IIntervalCollection<Interval>;\n\t\tlet overlappingIntervalsIndex1: IOverlappingIntervalsIndex<Interval>;\n\t\tlet overlappingIntervalsIndex2: IOverlappingIntervalsIndex<Interval>;\n\n\t\tbeforeEach(() => {\n\t\t\truntimeFactory = new MockContainerRuntimeFactoryForReconnection();\n\t\t\tconst client1 = createConnectedIntervalCollection(\"collection 1\", runtimeFactory);\n\t\t\truntime1 = client1.containerRuntime;\n\t\t\tintervals1 = client1.intervals;\n\t\t\tintervals2 = createConnectedIntervalCollection(\n\t\t\t\t\"collection 2\",\n\t\t\t\truntimeFactory,\n\t\t\t).intervals;\n\t\t\tcollection1 = intervals1.getIntervalCollection(\"test\");\n\t\t\tcollection2 = intervals2.getIntervalCollection(\"test\");\n\n\t\t\toverlappingIntervalsIndex1 = new OverlappingIntervalsIndex(\n\t\t\t\tundefined as unknown as Client,\n\t\t\t\tintervalHelpers,\n\t\t\t);\n\t\t\toverlappingIntervalsIndex2 = new OverlappingIntervalsIndex(\n\t\t\t\tundefined as unknown as Client,\n\t\t\t\tintervalHelpers,\n\t\t\t);\n\t\t\tcollection1.attachIndex(overlappingIntervalsIndex1);\n\t\t\tcollection2.attachIndex(overlappingIntervalsIndex2);\n\t\t});\n\n\t\tafterEach(() => {\n\t\t\tcollection1.detachIndex(overlappingIntervalsIndex1);\n\t\t\tcollection2.detachIndex(overlappingIntervalsIndex2);\n\t\t});\n\n\t\tit(\"can rebase add ops\", () => {\n\t\t\truntime1.connected = false;\n\t\t\tcollection1.add({ start: 15, end: 17 });\n\t\t\truntimeFactory.processAllMessages();\n\n\t\t\tassertIntervals(collection1, [{ start: 15, end: 17 }], overlappingIntervalsIndex1);\n\t\t\tassertIntervals(collection2, [], overlappingIntervalsIndex2);\n\n\t\t\truntime1.connected = true;\n\t\t\truntimeFactory.processAllMessages();\n\n\t\t\tassertIntervals(collection1, [{ start: 15, end: 17 }], overlappingIntervalsIndex1);\n\t\t\tassertIntervals(collection2, [{ start: 15, end: 17 }], overlappingIntervalsIndex2);\n\t\t});\n\t});\n});\n"]}