@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
@@ -14,7 +14,8 @@ import {
14
14
  ReferenceType,
15
15
  TextSegment,
16
16
  refHasTileLabel,
17
- } from "@fluidframework/merge-tree";
17
+ } from "@fluidframework/merge-tree/internal";
18
+
18
19
  import { SharedSegmentSequence } from "./sequence.js";
19
20
  import { SharedStringFactory } from "./sequenceFactory.js";
20
21
 
@@ -1,73 +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 { IntervalTree } from "../intervalTree.js";
7
- class TestInterval {
8
- constructor(start, end) {
9
- this.start = start;
10
- this.end = end;
11
- }
12
- clone() {
13
- return new TestInterval(this.start, this.end);
14
- }
15
- compare(b) {
16
- const startResult = this.compareStart(b);
17
- return startResult === 0 ? this.compareEnd(b) : startResult;
18
- }
19
- compareStart(b) {
20
- return this.start - b.start;
21
- }
22
- compareEnd(b) {
23
- return this.end - b.end;
24
- }
25
- overlaps(b) {
26
- const result = this.start <= b.end && this.end >= b.start;
27
- return result;
28
- }
29
- union(b) {
30
- return new TestInterval(Math.min(this.start, b.start), Math.max(this.end, b.end));
31
- }
32
- modify(label, start, end) {
33
- const startPos = start ?? this.start;
34
- const endPos = end ?? this.end;
35
- if (this.start === startPos && this.end === endPos) {
36
- // Return undefined to indicate that no change is necessary.
37
- return;
38
- }
39
- return new TestInterval(startPos, endPos);
40
- }
41
- }
42
- describe("Collections.IntervalTree", () => {
43
- let intervalTree;
44
- beforeEach(() => {
45
- intervalTree = new IntervalTree();
46
- });
47
- describe(".map", () => {
48
- it("Should run each node through the given function", () => {
49
- intervalTree.put(new TestInterval(1, 5));
50
- intervalTree.put(new TestInterval(4, 8));
51
- intervalTree.put(new TestInterval(1, 10));
52
- let range1Pass = false;
53
- let range2Pass = false;
54
- let range3Pass = false;
55
- const map = (interval) => {
56
- if (interval.start === 1 && interval.end === 5) {
57
- range1Pass = true;
58
- }
59
- else if (interval.start === 4 && interval.end === 8) {
60
- range2Pass = true;
61
- }
62
- else if (interval.start === 1 && interval.end === 10) {
63
- range3Pass = true;
64
- }
65
- return true;
66
- };
67
- intervalTree.map(map);
68
- const fullWalk = range1Pass && range2Pass && range3Pass;
69
- assert.equal(fullWalk, true, "Full walk of the interval tree did not occur");
70
- });
71
- });
72
- });
73
- //# sourceMappingURL=collections.intervalTree.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"collections.intervalTree.js","sourceRoot":"","sources":["../../src/test/collections.intervalTree.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 { IntervalTree } from \"../intervalTree.js\";\nimport { IInterval } from \"../intervals/index.js\";\n\nclass TestInterval implements IInterval {\n\tconstructor(\n\t\tpublic start: number,\n\t\tpublic end: number,\n\t) {}\n\n\tpublic clone() {\n\t\treturn new TestInterval(this.start, this.end);\n\t}\n\n\tpublic compare(b: TestInterval) {\n\t\tconst startResult = this.compareStart(b);\n\t\treturn startResult === 0 ? this.compareEnd(b) : startResult;\n\t}\n\n\tpublic compareStart(b: TestInterval) {\n\t\treturn this.start - b.start;\n\t}\n\n\tpublic compareEnd(b: TestInterval) {\n\t\treturn this.end - b.end;\n\t}\n\n\tpublic overlaps(b: TestInterval) {\n\t\tconst result = this.start <= b.end && this.end >= b.start;\n\t\treturn result;\n\t}\n\n\tpublic union(b: TestInterval) {\n\t\treturn new TestInterval(Math.min(this.start, b.start), Math.max(this.end, b.end));\n\t}\n\n\tpublic modify(label: string, start: number, end: number) {\n\t\tconst startPos = start ?? this.start;\n\t\tconst endPos = end ?? this.end;\n\t\tif (this.start === startPos && this.end === endPos) {\n\t\t\t// Return undefined to indicate that no change is necessary.\n\t\t\treturn;\n\t\t}\n\t\treturn new TestInterval(startPos, endPos);\n\t}\n}\n\ndescribe(\"Collections.IntervalTree\", () => {\n\tlet intervalTree: IntervalTree<TestInterval>;\n\n\tbeforeEach(() => {\n\t\tintervalTree = new IntervalTree<TestInterval>();\n\t});\n\n\tdescribe(\".map\", () => {\n\t\tit(\"Should run each node through the given function\", () => {\n\t\t\tintervalTree.put(new TestInterval(1, 5));\n\t\t\tintervalTree.put(new TestInterval(4, 8));\n\t\t\tintervalTree.put(new TestInterval(1, 10));\n\n\t\t\tlet range1Pass = false;\n\t\t\tlet range2Pass = false;\n\t\t\tlet range3Pass = false;\n\n\t\t\tconst map = (interval: TestInterval) => {\n\t\t\t\tif (interval.start === 1 && interval.end === 5) {\n\t\t\t\t\trange1Pass = true;\n\t\t\t\t} else if (interval.start === 4 && interval.end === 8) {\n\t\t\t\t\trange2Pass = true;\n\t\t\t\t} else if (interval.start === 1 && interval.end === 10) {\n\t\t\t\t\trange3Pass = true;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t};\n\n\t\t\tintervalTree.map(map);\n\n\t\t\tconst fullWalk = range1Pass && range2Pass && range3Pass;\n\t\t\tassert.equal(fullWalk, true, \"Full walk of the interval tree did not occur\");\n\t\t});\n\t});\n});\n"]}
@@ -1,15 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
- import fs from "fs";
6
- import { convertSummaryTreeToITree } from "@fluidframework/runtime-utils";
7
- import { LocationBase, generateStrings } from "./generateSharedStrings.js";
8
- for (const { snapshotPath, expected, snapshotIsNormalized } of generateStrings()) {
9
- const summaryTree = expected.getAttachSummary().summary;
10
- const snapshotTree = convertSummaryTreeToITree(summaryTree);
11
- if (snapshotIsNormalized || snapshotPath === "v1Intervals/withV1Intervals") {
12
- fs.writeFileSync(`${LocationBase}${snapshotPath}.json`, JSON.stringify(snapshotTree, undefined, 1));
13
- }
14
- }
15
- //# sourceMappingURL=createSnapshotFiles.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createSnapshotFiles.js","sourceRoot":"","sources":["../../src/test/createSnapshotFiles.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE3E,KAAK,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,oBAAoB,EAAE,IAAI,eAAe,EAAE,EAAE;IACjF,MAAM,WAAW,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAC,OAAO,CAAC;IACxD,MAAM,YAAY,GAAG,yBAAyB,CAAC,WAAW,CAAC,CAAC;IAC5D,IAAI,oBAAoB,IAAI,YAAY,KAAK,6BAA6B,EAAE;QAC3E,EAAE,CAAC,aAAa,CACf,GAAG,YAAY,GAAG,YAAY,OAAO,EACrC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC,CAC1C,CAAC;KACF;CACD","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport fs from \"fs\";\nimport { convertSummaryTreeToITree } from \"@fluidframework/runtime-utils\";\nimport { LocationBase, generateStrings } from \"./generateSharedStrings.js\";\n\nfor (const { snapshotPath, expected, snapshotIsNormalized } of generateStrings()) {\n\tconst summaryTree = expected.getAttachSummary().summary;\n\tconst snapshotTree = convertSummaryTreeToITree(summaryTree);\n\tif (snapshotIsNormalized || snapshotPath === \"v1Intervals/withV1Intervals\") {\n\t\tfs.writeFileSync(\n\t\t\t`${LocationBase}${snapshotPath}.json`,\n\t\t\tJSON.stringify(snapshotTree, undefined, 1),\n\t\t);\n\t}\n}\n"]}
@@ -1,16 +0,0 @@
1
- "use strict";
2
- /*!
3
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
4
- * Licensed under the MIT License.
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports._dirname = void 0;
8
- // Problem:
9
- // - `__dirname` is not defined in ESM
10
- // - `import.meta.url` is not defined in CJS
11
- // Solution:
12
- // - Export '__dirname' from a .cjs file in the same directory.
13
- //
14
- // Note that *.cjs files are always CommonJS, but can be imported from ESM.
15
- exports._dirname = __dirname;
16
- //# sourceMappingURL=dirname.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dirname.cjs","sourceRoot":"","sources":["../../src/test/dirname.cts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,WAAW;AACX,wCAAwC;AACxC,8CAA8C;AAC9C,YAAY;AACZ,iEAAiE;AACjE,EAAE;AACF,2EAA2E;AAC9D,QAAA,QAAQ,GAAG,SAAS,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n// Problem:\n// - `__dirname` is not defined in ESM\n// - `import.meta.url` is not defined in CJS\n// Solution:\n// - Export '__dirname' from a .cjs file in the same directory.\n//\n// Note that *.cjs files are always CommonJS, but can be imported from ESM.\nexport const _dirname = __dirname;\n"]}
@@ -1,182 +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 { makeRandom } from "@fluid-private/stochastic-test-utils";
7
- import { EndpointInRangeIndex } from "../intervalIndex/index.js";
8
- import { intervalHelpers } from "../intervals/index.js";
9
- import { assertPlainNumberIntervals, createTestInterval, generateRandomIntervals, } from "./intervalIndexTestUtils.js";
10
- class TestEndpointInRangeIndex {
11
- constructor() {
12
- this.intervals = [];
13
- }
14
- add(interval) {
15
- this.intervals.push(interval);
16
- }
17
- remove(interval) {
18
- const index = this.intervals.findIndex((i) => i === interval);
19
- if (index !== -1) {
20
- this.intervals.splice(index, 1);
21
- }
22
- }
23
- findIntervalsWithEndpointInRange(start, end) {
24
- return this.intervals.filter((interval) => interval.end >= start && interval.end <= end);
25
- }
26
- }
27
- describe("findIntervalsWithEndpointInRange", () => {
28
- const helpers = intervalHelpers;
29
- // sort the query result by the interval endpoint value
30
- const compareFn = (a, b) => {
31
- if (a.end === b.end) {
32
- return a.start - b.start;
33
- }
34
- return a.end - b.end;
35
- };
36
- let endpointInRangeIndex;
37
- let results;
38
- beforeEach(() => {
39
- endpointInRangeIndex = new EndpointInRangeIndex(undefined, helpers);
40
- });
41
- describe("finds no intervals", () => {
42
- it("when the index is empty", () => {
43
- results = endpointInRangeIndex.findIntervalsWithEndpointInRange(1, 1);
44
- assert.equal(results.length, 0);
45
- });
46
- describe("with intervals in the index", () => {
47
- beforeEach(() => {
48
- endpointInRangeIndex.add(createTestInterval(1, 2));
49
- endpointInRangeIndex.add(createTestInterval(2, 3));
50
- });
51
- it("when start > end for the query range", () => {
52
- results = endpointInRangeIndex.findIntervalsWithEndpointInRange(2, 1);
53
- assert.equal(results.length, 0);
54
- });
55
- it("when start is 0 for the query range", () => {
56
- results = endpointInRangeIndex.findIntervalsWithEndpointInRange(0, 1);
57
- assert.equal(results.length, 0);
58
- });
59
- it("when endpoint(s) of the query range are negative", () => {
60
- results = endpointInRangeIndex.findIntervalsWithEndpointInRange(-2, -1);
61
- assert.equal(results.length, 0);
62
- results = endpointInRangeIndex.findIntervalsWithEndpointInRange(-1, 1);
63
- assert.equal(results.length, 0);
64
- });
65
- it("when all intervals are above the query range", () => {
66
- results = endpointInRangeIndex.findIntervalsWithEndpointInRange(1, 1);
67
- assert.equal(results.length, 0);
68
- });
69
- it("when all intervals are below the query range", () => {
70
- results = endpointInRangeIndex.findIntervalsWithEndpointInRange(4, 5);
71
- assert.equal(results.length, 0);
72
- });
73
- });
74
- });
75
- describe("finds intervals while performing multiple adding operations on the index", () => {
76
- beforeEach(() => {
77
- endpointInRangeIndex.add(createTestInterval(1, 1));
78
- endpointInRangeIndex.add(createTestInterval(1, 3));
79
- });
80
- it("when quering the intervals which the startpoints exactly fall on the range boundary", () => {
81
- results = endpointInRangeIndex.findIntervalsWithEndpointInRange(1, 1);
82
- assertPlainNumberIntervals(results, [{ start: 1, end: 1 }]);
83
- results = endpointInRangeIndex.findIntervalsWithEndpointInRange(1, 3);
84
- assertPlainNumberIntervals(results, [
85
- { start: 1, end: 1 },
86
- { start: 1, end: 3 },
87
- ]);
88
- });
89
- it("when querying various kinds of intervals within the range", () => {
90
- endpointInRangeIndex.add(createTestInterval(2, 4));
91
- endpointInRangeIndex.add(createTestInterval(3, 5));
92
- endpointInRangeIndex.add(createTestInterval(3, 4));
93
- endpointInRangeIndex.add(createTestInterval(3, 4)); // duplicate interval
94
- results = endpointInRangeIndex.findIntervalsWithEndpointInRange(3, 6);
95
- results.sort(compareFn);
96
- assertPlainNumberIntervals(results, [
97
- { start: 1, end: 3 },
98
- { start: 2, end: 4 },
99
- { start: 3, end: 4 },
100
- { start: 3, end: 4 },
101
- { start: 3, end: 5 },
102
- ]);
103
- });
104
- });
105
- describe("find intervals while performing removing operations on the index", () => {
106
- let interval1;
107
- let interval2;
108
- beforeEach(() => {
109
- interval1 = createTestInterval(1, 1);
110
- interval2 = createTestInterval(1, 3);
111
- endpointInRangeIndex.add(interval1);
112
- endpointInRangeIndex.add(interval2);
113
- });
114
- it("when removing the interval with duplicate startpoints/endpoints", () => {
115
- const interval3 = createTestInterval(1, 1);
116
- endpointInRangeIndex.add(interval3);
117
- endpointInRangeIndex.remove(interval1);
118
- results = endpointInRangeIndex.findIntervalsWithEndpointInRange(1, 3);
119
- results.sort(compareFn);
120
- assertPlainNumberIntervals(results, [
121
- { start: 1, end: 1 },
122
- { start: 1, end: 3 },
123
- ]);
124
- endpointInRangeIndex.remove(interval3);
125
- results = endpointInRangeIndex.findIntervalsWithEndpointInRange(1, 3);
126
- assertPlainNumberIntervals(results, [{ start: 1, end: 3 }]);
127
- });
128
- it("when removing the interval does not exist in the index", () => {
129
- const interval3 = createTestInterval(1, 1);
130
- endpointInRangeIndex.remove(interval3);
131
- results = endpointInRangeIndex.findIntervalsWithEndpointInRange(1, 3);
132
- results.sort(compareFn);
133
- assertPlainNumberIntervals(results, [
134
- { start: 1, end: 1 },
135
- { start: 1, end: 3 },
136
- ]);
137
- });
138
- it("when removing the interval within the target range", () => {
139
- endpointInRangeIndex.remove(interval2);
140
- results = endpointInRangeIndex.findIntervalsWithEndpointInRange(1, 3);
141
- assertPlainNumberIntervals(results, [{ start: 1, end: 1 }]);
142
- const interval3 = createTestInterval(2, 4);
143
- endpointInRangeIndex.add(interval3);
144
- const interval4 = createTestInterval(3, 4);
145
- endpointInRangeIndex.add(interval4);
146
- endpointInRangeIndex.remove(interval3);
147
- results = endpointInRangeIndex.findIntervalsWithEndpointInRange(1, 5);
148
- results.sort(compareFn);
149
- assertPlainNumberIntervals(results, [
150
- { start: 1, end: 1 },
151
- { start: 3, end: 4 },
152
- ]);
153
- });
154
- });
155
- describe("find exactly the same intervals as those obtained by `brute-force` method", () => {
156
- it("when given massive random inputs", () => {
157
- const testIndex = new TestEndpointInRangeIndex();
158
- const random = makeRandom(0);
159
- const count = 800;
160
- const min = 1;
161
- const max = 1500;
162
- // Generate intervals randomly and add them to both index
163
- const intervals = generateRandomIntervals({ random, count, min, max });
164
- for (const interval of intervals) {
165
- testIndex.add(interval);
166
- endpointInRangeIndex.add(interval);
167
- }
168
- // Test with running 1000 random queries
169
- for (let i = 0; i < 1000; ++i) {
170
- const start = random.integer(min, max);
171
- const end = random.integer(start, max);
172
- // Query intervals using both index
173
- results = endpointInRangeIndex.findIntervalsWithEndpointInRange(start, end);
174
- const expected = testIndex.findIntervalsWithEndpointInRange(start, end);
175
- results.sort(compareFn);
176
- expected.sort(compareFn);
177
- assertPlainNumberIntervals(results, expected);
178
- }
179
- });
180
- });
181
- });
182
- //# sourceMappingURL=endpointInRangeIndex.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"endpointInRangeIndex.spec.js","sourceRoot":"","sources":["../../src/test/endpointInRangeIndex.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 { makeRandom } from \"@fluid-private/stochastic-test-utils\";\nimport { Client } from \"@fluidframework/merge-tree\";\nimport { EndpointInRangeIndex, IEndpointInRangeIndex } from \"../intervalIndex/index.js\";\nimport { Interval, intervalHelpers } from \"../intervals/index.js\";\nimport {\n\tassertPlainNumberIntervals,\n\tcreateTestInterval,\n\tgenerateRandomIntervals,\n} from \"./intervalIndexTestUtils.js\";\n\nclass TestEndpointInRangeIndex implements IEndpointInRangeIndex<Interval> {\n\tprivate readonly intervals: Interval[];\n\n\tconstructor() {\n\t\tthis.intervals = [];\n\t}\n\n\tadd(interval: Interval) {\n\t\tthis.intervals.push(interval);\n\t}\n\n\tremove(interval: Interval) {\n\t\tconst index = this.intervals.findIndex((i) => i === interval);\n\t\tif (index !== -1) {\n\t\t\tthis.intervals.splice(index, 1);\n\t\t}\n\t}\n\n\tfindIntervalsWithEndpointInRange(start: number, end: number): Interval[] {\n\t\treturn this.intervals.filter((interval) => interval.end >= start && interval.end <= end);\n\t}\n}\n\ndescribe(\"findIntervalsWithEndpointInRange\", () => {\n\tconst helpers = intervalHelpers;\n\t// sort the query result by the interval endpoint value\n\tconst compareFn = (a: Interval, b: Interval) => {\n\t\tif (a.end === b.end) {\n\t\t\treturn a.start - b.start;\n\t\t}\n\t\treturn a.end - b.end;\n\t};\n\tlet endpointInRangeIndex;\n\tlet results;\n\n\tbeforeEach(() => {\n\t\tendpointInRangeIndex = new EndpointInRangeIndex(undefined as any as Client, helpers);\n\t});\n\n\tdescribe(\"finds no intervals\", () => {\n\t\tit(\"when the index is empty\", () => {\n\t\t\tresults = endpointInRangeIndex.findIntervalsWithEndpointInRange(1, 1);\n\t\t\tassert.equal(results.length, 0);\n\t\t});\n\n\t\tdescribe(\"with intervals in the index\", () => {\n\t\t\tbeforeEach(() => {\n\t\t\t\tendpointInRangeIndex.add(createTestInterval(1, 2));\n\t\t\t\tendpointInRangeIndex.add(createTestInterval(2, 3));\n\t\t\t});\n\n\t\t\tit(\"when start > end for the query range\", () => {\n\t\t\t\tresults = endpointInRangeIndex.findIntervalsWithEndpointInRange(2, 1);\n\t\t\t\tassert.equal(results.length, 0);\n\t\t\t});\n\n\t\t\tit(\"when start is 0 for the query range\", () => {\n\t\t\t\tresults = endpointInRangeIndex.findIntervalsWithEndpointInRange(0, 1);\n\t\t\t\tassert.equal(results.length, 0);\n\t\t\t});\n\n\t\t\tit(\"when endpoint(s) of the query range are negative\", () => {\n\t\t\t\tresults = endpointInRangeIndex.findIntervalsWithEndpointInRange(-2, -1);\n\t\t\t\tassert.equal(results.length, 0);\n\t\t\t\tresults = endpointInRangeIndex.findIntervalsWithEndpointInRange(-1, 1);\n\t\t\t\tassert.equal(results.length, 0);\n\t\t\t});\n\n\t\t\tit(\"when all intervals are above the query range\", () => {\n\t\t\t\tresults = endpointInRangeIndex.findIntervalsWithEndpointInRange(1, 1);\n\t\t\t\tassert.equal(results.length, 0);\n\t\t\t});\n\n\t\t\tit(\"when all intervals are below the query range\", () => {\n\t\t\t\tresults = endpointInRangeIndex.findIntervalsWithEndpointInRange(4, 5);\n\t\t\t\tassert.equal(results.length, 0);\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\"finds intervals while performing multiple adding operations on the index\", () => {\n\t\tbeforeEach(() => {\n\t\t\tendpointInRangeIndex.add(createTestInterval(1, 1));\n\t\t\tendpointInRangeIndex.add(createTestInterval(1, 3));\n\t\t});\n\n\t\tit(\"when quering the intervals which the startpoints exactly fall on the range boundary\", () => {\n\t\t\tresults = endpointInRangeIndex.findIntervalsWithEndpointInRange(1, 1);\n\t\t\tassertPlainNumberIntervals(results, [{ start: 1, end: 1 }]);\n\n\t\t\tresults = endpointInRangeIndex.findIntervalsWithEndpointInRange(1, 3);\n\t\t\tassertPlainNumberIntervals(results, [\n\t\t\t\t{ start: 1, end: 1 },\n\t\t\t\t{ start: 1, end: 3 },\n\t\t\t]);\n\t\t});\n\n\t\tit(\"when querying various kinds of intervals within the range\", () => {\n\t\t\tendpointInRangeIndex.add(createTestInterval(2, 4));\n\t\t\tendpointInRangeIndex.add(createTestInterval(3, 5));\n\t\t\tendpointInRangeIndex.add(createTestInterval(3, 4));\n\t\t\tendpointInRangeIndex.add(createTestInterval(3, 4)); // duplicate interval\n\n\t\t\tresults = endpointInRangeIndex.findIntervalsWithEndpointInRange(3, 6);\n\t\t\tresults.sort(compareFn);\n\t\t\tassertPlainNumberIntervals(results, [\n\t\t\t\t{ start: 1, end: 3 },\n\t\t\t\t{ start: 2, end: 4 },\n\t\t\t\t{ start: 3, end: 4 },\n\t\t\t\t{ start: 3, end: 4 },\n\t\t\t\t{ start: 3, end: 5 },\n\t\t\t]);\n\t\t});\n\t});\n\n\tdescribe(\"find intervals while performing removing operations on the index\", () => {\n\t\tlet interval1;\n\t\tlet interval2;\n\n\t\tbeforeEach(() => {\n\t\t\tinterval1 = createTestInterval(1, 1);\n\t\t\tinterval2 = createTestInterval(1, 3);\n\t\t\tendpointInRangeIndex.add(interval1);\n\t\t\tendpointInRangeIndex.add(interval2);\n\t\t});\n\n\t\tit(\"when removing the interval with duplicate startpoints/endpoints\", () => {\n\t\t\tconst interval3 = createTestInterval(1, 1);\n\t\t\tendpointInRangeIndex.add(interval3);\n\t\t\tendpointInRangeIndex.remove(interval1);\n\n\t\t\tresults = endpointInRangeIndex.findIntervalsWithEndpointInRange(1, 3);\n\t\t\tresults.sort(compareFn);\n\t\t\tassertPlainNumberIntervals(results, [\n\t\t\t\t{ start: 1, end: 1 },\n\t\t\t\t{ start: 1, end: 3 },\n\t\t\t]);\n\n\t\t\tendpointInRangeIndex.remove(interval3);\n\t\t\tresults = endpointInRangeIndex.findIntervalsWithEndpointInRange(1, 3);\n\t\t\tassertPlainNumberIntervals(results, [{ start: 1, end: 3 }]);\n\t\t});\n\n\t\tit(\"when removing the interval does not exist in the index\", () => {\n\t\t\tconst interval3 = createTestInterval(1, 1);\n\t\t\tendpointInRangeIndex.remove(interval3);\n\n\t\t\tresults = endpointInRangeIndex.findIntervalsWithEndpointInRange(1, 3);\n\t\t\tresults.sort(compareFn);\n\t\t\tassertPlainNumberIntervals(results, [\n\t\t\t\t{ start: 1, end: 1 },\n\t\t\t\t{ start: 1, end: 3 },\n\t\t\t]);\n\t\t});\n\n\t\tit(\"when removing the interval within the target range\", () => {\n\t\t\tendpointInRangeIndex.remove(interval2);\n\n\t\t\tresults = endpointInRangeIndex.findIntervalsWithEndpointInRange(1, 3);\n\t\t\tassertPlainNumberIntervals(results, [{ start: 1, end: 1 }]);\n\n\t\t\tconst interval3 = createTestInterval(2, 4);\n\t\t\tendpointInRangeIndex.add(interval3);\n\n\t\t\tconst interval4 = createTestInterval(3, 4);\n\t\t\tendpointInRangeIndex.add(interval4);\n\n\t\t\tendpointInRangeIndex.remove(interval3);\n\n\t\t\tresults = endpointInRangeIndex.findIntervalsWithEndpointInRange(1, 5);\n\t\t\tresults.sort(compareFn);\n\t\t\tassertPlainNumberIntervals(results, [\n\t\t\t\t{ start: 1, end: 1 },\n\t\t\t\t{ start: 3, end: 4 },\n\t\t\t]);\n\t\t});\n\t});\n\n\tdescribe(\"find exactly the same intervals as those obtained by `brute-force` method\", () => {\n\t\tit(\"when given massive random inputs\", () => {\n\t\t\tconst testIndex = new TestEndpointInRangeIndex();\n\t\t\tconst random = makeRandom(0);\n\t\t\tconst count = 800;\n\t\t\tconst min = 1;\n\t\t\tconst max = 1500;\n\n\t\t\t// Generate intervals randomly and add them to both index\n\t\t\tconst intervals = generateRandomIntervals({ random, count, min, max });\n\t\t\tfor (const interval of intervals) {\n\t\t\t\ttestIndex.add(interval);\n\t\t\t\tendpointInRangeIndex.add(interval);\n\t\t\t}\n\n\t\t\t// Test with running 1000 random queries\n\t\t\tfor (let i = 0; i < 1000; ++i) {\n\t\t\t\tconst start = random.integer(min, max);\n\t\t\t\tconst end = random.integer(start, max);\n\t\t\t\t// Query intervals using both index\n\t\t\t\tresults = endpointInRangeIndex.findIntervalsWithEndpointInRange(start, end);\n\t\t\t\tconst expected = testIndex.findIntervalsWithEndpointInRange(start, end);\n\t\t\t\tresults.sort(compareFn);\n\t\t\t\texpected.sort(compareFn);\n\n\t\t\t\tassertPlainNumberIntervals(results, expected);\n\t\t\t}\n\t\t});\n\t});\n});\n"]}