@fluid-experimental/tree 2.0.0-dev.5.3.2.178189 → 2.0.0-dev.6.4.0.191258

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 (267) hide show
  1. package/.eslintrc.js +1 -0
  2. package/CHANGELOG.md +51 -0
  3. package/dist/ChangeCompression.js +8 -2
  4. package/dist/ChangeCompression.js.map +1 -1
  5. package/dist/ChangeTypes.d.ts +23 -0
  6. package/dist/ChangeTypes.d.ts.map +1 -1
  7. package/dist/ChangeTypes.js +7 -3
  8. package/dist/ChangeTypes.js.map +1 -1
  9. package/dist/Checkout.d.ts +4 -3
  10. package/dist/Checkout.d.ts.map +1 -1
  11. package/dist/Checkout.js +25 -21
  12. package/dist/Checkout.js.map +1 -1
  13. package/dist/Common.d.ts +3 -9
  14. package/dist/Common.d.ts.map +1 -1
  15. package/dist/Common.js +6 -15
  16. package/dist/Common.js.map +1 -1
  17. package/dist/EditLog.d.ts +2 -2
  18. package/dist/EditLog.d.ts.map +1 -1
  19. package/dist/EditLog.js +21 -29
  20. package/dist/EditLog.js.map +1 -1
  21. package/dist/EditUtilities.js +10 -15
  22. package/dist/EditUtilities.js.map +1 -1
  23. package/dist/Forest.js +42 -38
  24. package/dist/Forest.js.map +1 -1
  25. package/dist/HistoryEditFactory.js +7 -8
  26. package/dist/HistoryEditFactory.js.map +1 -1
  27. package/dist/LogViewer.d.ts +2 -2
  28. package/dist/LogViewer.d.ts.map +1 -1
  29. package/dist/LogViewer.js +34 -22
  30. package/dist/LogViewer.js.map +1 -1
  31. package/dist/MergeHealth.d.ts.map +1 -1
  32. package/dist/MergeHealth.js +17 -9
  33. package/dist/MergeHealth.js.map +1 -1
  34. package/dist/NodeIdUtilities.js +2 -3
  35. package/dist/NodeIdUtilities.js.map +1 -1
  36. package/dist/RevisionValueCache.js +3 -4
  37. package/dist/RevisionValueCache.js.map +1 -1
  38. package/dist/RevisionView.js +2 -3
  39. package/dist/RevisionView.js.map +1 -1
  40. package/dist/SerializationUtilities.js +13 -4
  41. package/dist/SerializationUtilities.js.map +1 -1
  42. package/dist/SharedTree.d.ts +1 -1
  43. package/dist/SharedTree.d.ts.map +1 -1
  44. package/dist/SharedTree.js +34 -34
  45. package/dist/SharedTree.js.map +1 -1
  46. package/dist/SharedTreeEncoder.d.ts.map +1 -1
  47. package/dist/SharedTreeEncoder.js +9 -9
  48. package/dist/SharedTreeEncoder.js.map +1 -1
  49. package/dist/StringInterner.js +2 -4
  50. package/dist/StringInterner.js.map +1 -1
  51. package/dist/Summary.js +1 -2
  52. package/dist/Summary.js.map +1 -1
  53. package/dist/SummaryBackCompatibility.js +2 -2
  54. package/dist/SummaryBackCompatibility.js.map +1 -1
  55. package/dist/SummaryTestUtilities.js +2 -2
  56. package/dist/SummaryTestUtilities.js.map +1 -1
  57. package/dist/Transaction.d.ts +2 -2
  58. package/dist/Transaction.d.ts.map +1 -1
  59. package/dist/Transaction.js +2 -2
  60. package/dist/Transaction.js.map +1 -1
  61. package/dist/TransactionInternal.js +19 -11
  62. package/dist/TransactionInternal.js.map +1 -1
  63. package/dist/TreeCompressor.js +5 -7
  64. package/dist/TreeCompressor.js.map +1 -1
  65. package/dist/TreeNodeHandle.js +1 -2
  66. package/dist/TreeNodeHandle.js.map +1 -1
  67. package/dist/TreeView.js +10 -14
  68. package/dist/TreeView.js.map +1 -1
  69. package/dist/TreeViewUtilities.js +2 -3
  70. package/dist/TreeViewUtilities.js.map +1 -1
  71. package/dist/id-compressor/AppendOnlySortedMap.js +4 -5
  72. package/dist/id-compressor/AppendOnlySortedMap.js.map +1 -1
  73. package/dist/id-compressor/IdCompressor.d.ts +3 -3
  74. package/dist/id-compressor/IdCompressor.d.ts.map +1 -1
  75. package/dist/id-compressor/IdCompressor.js +72 -75
  76. package/dist/id-compressor/IdCompressor.js.map +1 -1
  77. package/dist/id-compressor/IdRange.js +4 -4
  78. package/dist/id-compressor/IdRange.js.map +1 -1
  79. package/dist/id-compressor/Logger.d.ts.map +1 -1
  80. package/dist/id-compressor/Logger.js +1 -1
  81. package/dist/id-compressor/Logger.js.map +1 -1
  82. package/dist/id-compressor/SessionIdNormalizer.js +17 -24
  83. package/dist/id-compressor/SessionIdNormalizer.js.map +1 -1
  84. package/dist/id-compressor/persisted-types/0.0.1.d.ts +6 -2
  85. package/dist/id-compressor/persisted-types/0.0.1.d.ts.map +1 -1
  86. package/dist/id-compressor/persisted-types/0.0.1.js.map +1 -1
  87. package/dist/persisted-types/0.1.1.d.ts +4 -0
  88. package/dist/persisted-types/0.1.1.d.ts.map +1 -1
  89. package/dist/persisted-types/0.1.1.js +8 -5
  90. package/dist/persisted-types/0.1.1.js.map +1 -1
  91. package/lib/ChangeCompression.js +8 -2
  92. package/lib/ChangeCompression.js.map +1 -1
  93. package/lib/ChangeTypes.d.ts +23 -0
  94. package/lib/ChangeTypes.d.ts.map +1 -1
  95. package/lib/ChangeTypes.js +5 -1
  96. package/lib/ChangeTypes.js.map +1 -1
  97. package/lib/Checkout.d.ts +4 -3
  98. package/lib/Checkout.d.ts.map +1 -1
  99. package/lib/Checkout.js +15 -11
  100. package/lib/Checkout.js.map +1 -1
  101. package/lib/Common.d.ts +3 -9
  102. package/lib/Common.d.ts.map +1 -1
  103. package/lib/Common.js +5 -13
  104. package/lib/Common.js.map +1 -1
  105. package/lib/EditLog.d.ts +2 -2
  106. package/lib/EditLog.d.ts.map +1 -1
  107. package/lib/EditLog.js +15 -23
  108. package/lib/EditLog.js.map +1 -1
  109. package/lib/EditUtilities.js +10 -15
  110. package/lib/EditUtilities.js.map +1 -1
  111. package/lib/Forest.js +21 -17
  112. package/lib/Forest.js.map +1 -1
  113. package/lib/HistoryEditFactory.js +5 -6
  114. package/lib/HistoryEditFactory.js.map +1 -1
  115. package/lib/LogViewer.d.ts +2 -2
  116. package/lib/LogViewer.d.ts.map +1 -1
  117. package/lib/LogViewer.js +29 -17
  118. package/lib/LogViewer.js.map +1 -1
  119. package/lib/MergeHealth.d.ts.map +1 -1
  120. package/lib/MergeHealth.js +17 -9
  121. package/lib/MergeHealth.js.map +1 -1
  122. package/lib/NodeIdUtilities.js +2 -3
  123. package/lib/NodeIdUtilities.js.map +1 -1
  124. package/lib/RevisionValueCache.js +2 -3
  125. package/lib/RevisionValueCache.js.map +1 -1
  126. package/lib/RevisionView.js +2 -3
  127. package/lib/RevisionView.js.map +1 -1
  128. package/lib/SerializationUtilities.js +13 -4
  129. package/lib/SerializationUtilities.js.map +1 -1
  130. package/lib/SharedTree.d.ts +1 -1
  131. package/lib/SharedTree.d.ts.map +1 -1
  132. package/lib/SharedTree.js +28 -28
  133. package/lib/SharedTree.js.map +1 -1
  134. package/lib/SharedTreeEncoder.d.ts.map +1 -1
  135. package/lib/SharedTreeEncoder.js +3 -3
  136. package/lib/SharedTreeEncoder.js.map +1 -1
  137. package/lib/StringInterner.js +2 -4
  138. package/lib/StringInterner.js.map +1 -1
  139. package/lib/Summary.js +1 -2
  140. package/lib/Summary.js.map +1 -1
  141. package/lib/SummaryBackCompatibility.js +2 -2
  142. package/lib/SummaryBackCompatibility.js.map +1 -1
  143. package/lib/SummaryTestUtilities.js +1 -1
  144. package/lib/SummaryTestUtilities.js.map +1 -1
  145. package/lib/Transaction.d.ts +2 -2
  146. package/lib/Transaction.d.ts.map +1 -1
  147. package/lib/Transaction.js +1 -1
  148. package/lib/Transaction.js.map +1 -1
  149. package/lib/TransactionInternal.js +15 -7
  150. package/lib/TransactionInternal.js.map +1 -1
  151. package/lib/TreeCompressor.js +4 -6
  152. package/lib/TreeCompressor.js.map +1 -1
  153. package/lib/TreeNodeHandle.js +1 -2
  154. package/lib/TreeNodeHandle.js.map +1 -1
  155. package/lib/TreeView.js +9 -13
  156. package/lib/TreeView.js.map +1 -1
  157. package/lib/TreeViewUtilities.js +2 -3
  158. package/lib/TreeViewUtilities.js.map +1 -1
  159. package/lib/id-compressor/AppendOnlySortedMap.js +2 -3
  160. package/lib/id-compressor/AppendOnlySortedMap.js.map +1 -1
  161. package/lib/id-compressor/IdCompressor.d.ts +3 -3
  162. package/lib/id-compressor/IdCompressor.d.ts.map +1 -1
  163. package/lib/id-compressor/IdCompressor.js +50 -53
  164. package/lib/id-compressor/IdCompressor.js.map +1 -1
  165. package/lib/id-compressor/IdRange.js +3 -3
  166. package/lib/id-compressor/IdRange.js.map +1 -1
  167. package/lib/id-compressor/Logger.d.ts.map +1 -1
  168. package/lib/id-compressor/Logger.js +2 -2
  169. package/lib/id-compressor/Logger.js.map +1 -1
  170. package/lib/id-compressor/SessionIdNormalizer.js +10 -17
  171. package/lib/id-compressor/SessionIdNormalizer.js.map +1 -1
  172. package/lib/id-compressor/persisted-types/0.0.1.d.ts +6 -2
  173. package/lib/id-compressor/persisted-types/0.0.1.d.ts.map +1 -1
  174. package/lib/id-compressor/persisted-types/0.0.1.js.map +1 -1
  175. package/lib/persisted-types/0.1.1.d.ts +4 -0
  176. package/lib/persisted-types/0.1.1.d.ts.map +1 -1
  177. package/lib/persisted-types/0.1.1.js +6 -3
  178. package/lib/persisted-types/0.1.1.js.map +1 -1
  179. package/lib/test/AppendOnlySortedMap.tests.js.map +1 -1
  180. package/lib/test/ChangeCompression.tests.js +13 -4
  181. package/lib/test/ChangeCompression.tests.js.map +1 -1
  182. package/lib/test/Checkout.tests.js +12 -6
  183. package/lib/test/Checkout.tests.js.map +1 -1
  184. package/lib/test/EditLog.tests.js +5 -7
  185. package/lib/test/EditLog.tests.js.map +1 -1
  186. package/lib/test/EditUtilities.tests.js +24 -15
  187. package/lib/test/EditUtilities.tests.js.map +1 -1
  188. package/lib/test/Forest.perf.tests.js +1 -1
  189. package/lib/test/Forest.perf.tests.js.map +1 -1
  190. package/lib/test/Forest.tests.js +9 -9
  191. package/lib/test/Forest.tests.js.map +1 -1
  192. package/lib/test/IdCompressor.perf.tests.js +1 -1
  193. package/lib/test/IdCompressor.perf.tests.js.map +1 -1
  194. package/lib/test/IdCompressor.tests.js +5 -8
  195. package/lib/test/IdCompressor.tests.js.map +1 -1
  196. package/lib/test/LogViewer.tests.js +7 -10
  197. package/lib/test/LogViewer.tests.js.map +1 -1
  198. package/lib/test/MergeHealthTelemetryHeartbeat.tests.js +11 -2
  199. package/lib/test/MergeHealthTelemetryHeartbeat.tests.js.map +1 -1
  200. package/lib/test/NumericUuid.tests.js.map +1 -1
  201. package/lib/test/RevisionValueCache.tests.js +1 -2
  202. package/lib/test/RevisionValueCache.tests.js.map +1 -1
  203. package/lib/test/RevisionView.tests.js +3 -5
  204. package/lib/test/RevisionView.tests.js.map +1 -1
  205. package/lib/test/SessionIdNormalizer.tests.js +2 -3
  206. package/lib/test/SessionIdNormalizer.tests.js.map +1 -1
  207. package/lib/test/StringInterner.tests.js.map +1 -1
  208. package/lib/test/Summary.tests.js +6 -8
  209. package/lib/test/Summary.tests.js.map +1 -1
  210. package/lib/test/TransactionInternal.tests.js +15 -6
  211. package/lib/test/TransactionInternal.tests.js.map +1 -1
  212. package/lib/test/TreeCompression.tests.js +1 -1
  213. package/lib/test/TreeCompression.tests.js.map +1 -1
  214. package/lib/test/TreeView.tests.js +3 -3
  215. package/lib/test/TreeView.tests.js.map +1 -1
  216. package/lib/test/UndoRedoHandler.tests.js +2 -2
  217. package/lib/test/UndoRedoHandler.tests.js.map +1 -1
  218. package/lib/test/fuzz/Generators.d.ts.map +1 -1
  219. package/lib/test/fuzz/Generators.js +24 -18
  220. package/lib/test/fuzz/Generators.js.map +1 -1
  221. package/lib/test/fuzz/SharedTreeFuzzTests.js +4 -5
  222. package/lib/test/fuzz/SharedTreeFuzzTests.js.map +1 -1
  223. package/lib/test/utilities/IdCompressorTestUtilities.d.ts +2 -2
  224. package/lib/test/utilities/IdCompressorTestUtilities.d.ts.map +1 -1
  225. package/lib/test/utilities/IdCompressorTestUtilities.js +9 -11
  226. package/lib/test/utilities/IdCompressorTestUtilities.js.map +1 -1
  227. package/lib/test/utilities/PendingLocalStateTests.d.ts.map +1 -1
  228. package/lib/test/utilities/PendingLocalStateTests.js +13 -8
  229. package/lib/test/utilities/PendingLocalStateTests.js.map +1 -1
  230. package/lib/test/utilities/SharedTreeTests.js +70 -34
  231. package/lib/test/utilities/SharedTreeTests.js.map +1 -1
  232. package/lib/test/utilities/SharedTreeVersioningTests.d.ts.map +1 -1
  233. package/lib/test/utilities/SharedTreeVersioningTests.js +39 -14
  234. package/lib/test/utilities/SharedTreeVersioningTests.js.map +1 -1
  235. package/lib/test/utilities/SummarySizeTests.js +3 -3
  236. package/lib/test/utilities/SummarySizeTests.js.map +1 -1
  237. package/lib/test/utilities/TestNode.js +4 -4
  238. package/lib/test/utilities/TestNode.js.map +1 -1
  239. package/lib/test/utilities/TestUtilities.d.ts.map +1 -1
  240. package/lib/test/utilities/TestUtilities.js +30 -26
  241. package/lib/test/utilities/TestUtilities.js.map +1 -1
  242. package/lib/test/utilities/UndoRedoTests.js +3 -4
  243. package/lib/test/utilities/UndoRedoTests.js.map +1 -1
  244. package/package.json +30 -32
  245. package/src/ChangeTypes.ts +24 -1
  246. package/src/Checkout.ts +7 -6
  247. package/src/Common.ts +4 -13
  248. package/src/EditLog.ts +3 -3
  249. package/src/Forest.ts +1 -1
  250. package/src/HistoryEditFactory.ts +1 -1
  251. package/src/LogViewer.ts +3 -2
  252. package/src/MergeHealth.ts +9 -4
  253. package/src/RevisionValueCache.ts +1 -1
  254. package/src/SharedTree.ts +14 -9
  255. package/src/SharedTreeEncoder.ts +2 -1
  256. package/src/SummaryTestUtilities.ts +1 -1
  257. package/src/Transaction.ts +2 -2
  258. package/src/TransactionInternal.ts +1 -1
  259. package/src/TreeCompressor.ts +1 -1
  260. package/src/TreeView.ts +1 -1
  261. package/src/id-compressor/AppendOnlySortedMap.ts +1 -1
  262. package/src/id-compressor/IdCompressor.ts +8 -3
  263. package/src/id-compressor/IdRange.ts +1 -1
  264. package/src/id-compressor/Logger.ts +2 -2
  265. package/src/id-compressor/SessionIdNormalizer.ts +1 -1
  266. package/src/id-compressor/persisted-types/0.0.1.ts +6 -2
  267. package/src/persisted-types/0.1.1.ts +5 -1
package/.eslintrc.js CHANGED
@@ -23,6 +23,7 @@ module.exports = {
23
23
  '@typescript-eslint/no-shadow': 'off',
24
24
  'no-shadow': 'off',
25
25
  '@typescript-eslint/no-unsafe-return': 'off',
26
+ 'import/no-deprecated': 'off',
26
27
  },
27
28
  overrides: [
28
29
  {
package/CHANGELOG.md CHANGED
@@ -1,5 +1,56 @@
1
1
  # @fluid-experimental/tree
2
2
 
3
+ ## 2.0.0-internal.6.3.0
4
+
5
+ Dependency updates only.
6
+
7
+ ## 2.0.0-internal.6.2.0
8
+
9
+ ### Minor Changes
10
+
11
+ - Remove use of @fluidframework/common-definitions ([#16638](https://github.com/microsoft/FluidFramework/issues/16638)) [a8c81509c9](https://github.com/microsoft/FluidFramework/commits/a8c81509c9bf09cfb2092ebcf7265205f9eb6dbf)
12
+
13
+ The **@fluidframework/common-definitions** package is being deprecated, so the following interfaces and types are now
14
+ imported from the **@fluidframework/core-interfaces** package:
15
+
16
+ - interface IDisposable
17
+ - interface IErrorEvent
18
+ - interface IErrorEvent
19
+ - interface IEvent
20
+ - interface IEventProvider
21
+ - interface ILoggingError
22
+ - interface ITaggedTelemetryPropertyType
23
+ - interface ITelemetryBaseEvent
24
+ - interface ITelemetryBaseLogger
25
+ - interface ITelemetryErrorEvent
26
+ - interface ITelemetryGenericEvent
27
+ - interface ITelemetryLogger
28
+ - interface ITelemetryPerformanceEvent
29
+ - interface ITelemetryProperties
30
+ - type ExtendEventProvider
31
+ - type IEventThisPlaceHolder
32
+ - type IEventTransformer
33
+ - type ReplaceIEventThisPlaceHolder
34
+ - type ReplaceIEventThisPlaceHolder
35
+ - type TelemetryEventCategory
36
+ - type TelemetryEventPropertyType
37
+
38
+ ## 2.0.0-internal.6.1.0
39
+
40
+ Dependency updates only.
41
+
42
+ ## 2.0.0-internal.6.0.0
43
+
44
+ ### Major Changes
45
+
46
+ - Upgraded typescript transpilation target to ES2020 [8abce8cdb4](https://github.com/microsoft/FluidFramework/commits/8abce8cdb4e2832fb6405fb44e393bef03d5648a)
47
+
48
+ Upgraded typescript transpilation target to ES2020. This is done in order to decrease the bundle sizes of Fluid Framework packages. This has provided size improvements across the board for ex. Loader, Driver, Runtime etc. Reduced bundle sizes helps to load lesser code in apps and hence also helps to improve the perf.If any app wants to target any older versions of browsers with which this target version is not compatible, then they can use packages like babel to transpile to a older target.
49
+
50
+ ## 2.0.0-internal.5.4.0
51
+
52
+ Dependency updates only.
53
+
3
54
  ## 2.0.0-internal.5.3.0
4
55
 
5
56
  ### Minor Changes
@@ -103,7 +103,10 @@ function normalizeChange(change, normalizeId) {
103
103
  * untouched.
104
104
  */
105
105
  function compressEdit(compressor, interner, idNormalizer, edit) {
106
- return Object.assign(Object.assign({}, edit), { changes: edit.changes.map((change) => compressor.compress(change, interner, idNormalizer)) });
106
+ return {
107
+ ...edit,
108
+ changes: edit.changes.map((change) => compressor.compress(change, interner, idNormalizer)),
109
+ };
107
110
  }
108
111
  exports.compressEdit = compressEdit;
109
112
  /**
@@ -111,7 +114,10 @@ exports.compressEdit = compressEdit;
111
114
  * untouched.
112
115
  */
113
116
  function decompressEdit(compressor, interner, idNormalizer, edit) {
114
- return Object.assign(Object.assign({}, edit), { changes: edit.changes.map((change) => compressor.decompress(change, interner, idNormalizer)) });
117
+ return {
118
+ ...edit,
119
+ changes: edit.changes.map((change) => compressor.decompress(change, interner, idNormalizer)),
120
+ };
115
121
  }
116
122
  exports.decompressEdit = decompressEdit;
117
123
  //# sourceMappingURL=ChangeCompression.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChangeCompression.js","sourceRoot":"","sources":["../src/ChangeCompression.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 { DetachedSequenceId, NodeId, OpSpaceNodeId } from './Identifiers';\nimport {\n\tBuildInternal,\n\tBuildNodeInternal,\n\tChangeInternal,\n\tCompressedChangeInternal,\n\tChangeTypeInternal,\n\tCompressedBuildInternal,\n\tCompressedPlaceholderTree,\n\tInsertInternal,\n\tDetachInternal,\n\tSetValueInternal,\n\tConstraintInternal,\n} from './persisted-types';\nimport { ContextualizedNodeIdNormalizer } from './NodeIdUtilities';\nimport { copyPropertyIfDefined, fail, Mutable, ReplaceRecursive } from './Common';\nimport { TreeCompressor } from './TreeCompressor';\nimport { StringInterner } from './StringInterner';\nimport { convertStablePlaceIds, convertStableRangeIds } from './IdConversion';\n\n/**\n * Encapsulates knowledge of how to compress/decompress a change into a compressed change\n * Compression and decompression each take in a {@link StringInterner} for deduplicating shared strings.\n * @internal\n */\nexport class ChangeCompressor {\n\tpublic constructor(private readonly treeCompressor: TreeCompressor<DetachedSequenceId>) {}\n\n\tpublic compress<TId extends OpSpaceNodeId>(\n\t\tchange: ChangeInternal,\n\t\tinterner: StringInterner,\n\t\tidNormalizer: ContextualizedNodeIdNormalizer<TId>\n\t): CompressedChangeInternal<TId> {\n\t\tif (change.type === ChangeTypeInternal.Build) {\n\t\t\tconst source: CompressedPlaceholderTree<TId, DetachedSequenceId>[] = [];\n\t\t\tfor (const node of change.source) {\n\t\t\t\tsource.push(this.treeCompressor.compress(node, interner, idNormalizer));\n\t\t\t}\n\t\t\tconst newChange: CompressedBuildInternal<TId> = {\n\t\t\t\tdestination: change.destination,\n\t\t\t\tsource,\n\t\t\t\ttype: ChangeTypeInternal.CompressedBuild,\n\t\t\t};\n\t\t\treturn newChange;\n\t\t} else {\n\t\t\treturn normalizeChange(change, (id) => idNormalizer.normalizeToOpSpace(id));\n\t\t}\n\t}\n\n\tpublic decompress<TId extends OpSpaceNodeId>(\n\t\tchange: CompressedChangeInternal<TId>,\n\t\tinterner: StringInterner,\n\t\tidNormalizer: ContextualizedNodeIdNormalizer<TId>\n\t): ChangeInternal {\n\t\tif (change.type === ChangeTypeInternal.CompressedBuild) {\n\t\t\tconst source: BuildNodeInternal[] = [];\n\t\t\tfor (const node of change.source) {\n\t\t\t\tsource.push(this.treeCompressor.decompress(node, interner, idNormalizer));\n\t\t\t}\n\t\t\tconst newChange: BuildInternal = {\n\t\t\t\tdestination: change.destination,\n\t\t\t\tsource,\n\t\t\t\ttype: ChangeTypeInternal.Build,\n\t\t\t};\n\t\t\treturn newChange;\n\t\t} else {\n\t\t\treturn normalizeChange(change, (id) => idNormalizer.normalizeToSessionSpace(id));\n\t\t}\n\t}\n}\n\nfunction normalizeChange<From extends NodeId | OpSpaceNodeId, To extends NodeId | OpSpaceNodeId>(\n\tchange: ReplaceRecursive<Exclude<ChangeInternal, BuildInternal>, NodeId, From>,\n\tnormalizeId: (id: From) => To\n): ReplaceRecursive<Exclude<ChangeInternal, BuildInternal>, NodeId, To> {\n\tswitch (change.type) {\n\t\tcase ChangeTypeInternal.Insert: {\n\t\t\tconst insert: ReplaceRecursive<InsertInternal, NodeId, To> = {\n\t\t\t\tsource: change.source,\n\t\t\t\tdestination: convertStablePlaceIds(change.destination, normalizeId),\n\t\t\t\ttype: ChangeTypeInternal.Insert,\n\t\t\t};\n\t\t\treturn insert;\n\t\t}\n\t\tcase ChangeTypeInternal.Detach: {\n\t\t\tconst detach: ReplaceRecursive<DetachInternal, NodeId, To> = {\n\t\t\t\tsource: convertStableRangeIds(change.source, normalizeId),\n\t\t\t\ttype: ChangeTypeInternal.Detach,\n\t\t\t};\n\t\t\tcopyPropertyIfDefined(change, detach, 'destination');\n\t\t\treturn detach;\n\t\t}\n\t\tcase ChangeTypeInternal.SetValue: {\n\t\t\tconst setValue: ReplaceRecursive<SetValueInternal, NodeId, To> = {\n\t\t\t\tnodeToModify: normalizeId(change.nodeToModify),\n\t\t\t\tpayload: change.payload,\n\t\t\t\ttype: ChangeTypeInternal.SetValue,\n\t\t\t};\n\t\t\treturn setValue;\n\t\t}\n\t\tcase ChangeTypeInternal.Constraint: {\n\t\t\tconst constraint: Mutable<ReplaceRecursive<ConstraintInternal, NodeId, To>> = {\n\t\t\t\teffect: change.effect,\n\t\t\t\ttoConstrain: convertStableRangeIds(change.toConstrain, normalizeId),\n\t\t\t\ttype: ChangeTypeInternal.Constraint,\n\t\t\t};\n\t\t\tcopyPropertyIfDefined(change, constraint, 'contentHash');\n\t\t\tcopyPropertyIfDefined(change, constraint, 'identityHash');\n\t\t\tcopyPropertyIfDefined(change, constraint, 'label');\n\t\t\tcopyPropertyIfDefined(change, constraint, 'length');\n\t\t\tif (change.parentNode !== undefined) {\n\t\t\t\tconstraint.parentNode = normalizeId(change.parentNode);\n\t\t\t}\n\t\t\treturn constraint;\n\t\t}\n\t\tdefault:\n\t\t\tfail('unexpected change type');\n\t}\n}\n\n/**\n * Compresses the provided edit by applying `compressor` to each change and leaving other fields\n * untouched.\n */\nexport function compressEdit<TId extends OpSpaceNodeId, TEdit extends { changes: readonly ChangeInternal[] }>(\n\tcompressor: ChangeCompressor,\n\tinterner: StringInterner,\n\tidNormalizer: ContextualizedNodeIdNormalizer<TId>,\n\tedit: TEdit\n): Omit<TEdit, 'changes'> & { changes: readonly CompressedChangeInternal<TId>[] } {\n\treturn {\n\t\t...edit,\n\t\tchanges: edit.changes.map((change) => compressor.compress(change, interner, idNormalizer)),\n\t};\n}\n\n/**\n * Decompresses the provided edit by applying `compressor` to each change and leaving other fields\n * untouched.\n */\nexport function decompressEdit<\n\tTId extends OpSpaceNodeId,\n\tTEdit extends { changes: readonly CompressedChangeInternal<TId>[] }\n>(\n\tcompressor: ChangeCompressor,\n\tinterner: StringInterner,\n\tidNormalizer: ContextualizedNodeIdNormalizer<TId>,\n\tedit: TEdit\n): Omit<TEdit, 'changes'> & { changes: readonly ChangeInternal[] } {\n\treturn {\n\t\t...edit,\n\t\tchanges: edit.changes.map((change) => compressor.decompress(change, interner, idNormalizer)),\n\t};\n}\n"]}
1
+ {"version":3,"file":"ChangeCompression.js","sourceRoot":"","sources":["../src/ChangeCompression.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 { DetachedSequenceId, NodeId, OpSpaceNodeId } from './Identifiers';\nimport {\n\tBuildInternal,\n\tBuildNodeInternal,\n\tChangeInternal,\n\tCompressedChangeInternal,\n\tChangeTypeInternal,\n\tCompressedBuildInternal,\n\tCompressedPlaceholderTree,\n\tInsertInternal,\n\tDetachInternal,\n\tSetValueInternal,\n\tConstraintInternal,\n} from './persisted-types';\nimport { ContextualizedNodeIdNormalizer } from './NodeIdUtilities';\nimport { copyPropertyIfDefined, fail, Mutable, ReplaceRecursive } from './Common';\nimport { TreeCompressor } from './TreeCompressor';\nimport { StringInterner } from './StringInterner';\nimport { convertStablePlaceIds, convertStableRangeIds } from './IdConversion';\n\n/**\n * Encapsulates knowledge of how to compress/decompress a change into a compressed change\n * Compression and decompression each take in a {@link StringInterner} for deduplicating shared strings.\n * @internal\n */\nexport class ChangeCompressor {\n\tpublic constructor(private readonly treeCompressor: TreeCompressor<DetachedSequenceId>) {}\n\n\tpublic compress<TId extends OpSpaceNodeId>(\n\t\tchange: ChangeInternal,\n\t\tinterner: StringInterner,\n\t\tidNormalizer: ContextualizedNodeIdNormalizer<TId>\n\t): CompressedChangeInternal<TId> {\n\t\tif (change.type === ChangeTypeInternal.Build) {\n\t\t\tconst source: CompressedPlaceholderTree<TId, DetachedSequenceId>[] = [];\n\t\t\tfor (const node of change.source) {\n\t\t\t\tsource.push(this.treeCompressor.compress(node, interner, idNormalizer));\n\t\t\t}\n\t\t\tconst newChange: CompressedBuildInternal<TId> = {\n\t\t\t\tdestination: change.destination,\n\t\t\t\tsource,\n\t\t\t\ttype: ChangeTypeInternal.CompressedBuild,\n\t\t\t};\n\t\t\treturn newChange;\n\t\t} else {\n\t\t\treturn normalizeChange(change, (id) => idNormalizer.normalizeToOpSpace(id));\n\t\t}\n\t}\n\n\tpublic decompress<TId extends OpSpaceNodeId>(\n\t\tchange: CompressedChangeInternal<TId>,\n\t\tinterner: StringInterner,\n\t\tidNormalizer: ContextualizedNodeIdNormalizer<TId>\n\t): ChangeInternal {\n\t\tif (change.type === ChangeTypeInternal.CompressedBuild) {\n\t\t\tconst source: BuildNodeInternal[] = [];\n\t\t\tfor (const node of change.source) {\n\t\t\t\tsource.push(this.treeCompressor.decompress(node, interner, idNormalizer));\n\t\t\t}\n\t\t\tconst newChange: BuildInternal = {\n\t\t\t\tdestination: change.destination,\n\t\t\t\tsource,\n\t\t\t\ttype: ChangeTypeInternal.Build,\n\t\t\t};\n\t\t\treturn newChange;\n\t\t} else {\n\t\t\treturn normalizeChange(change, (id) => idNormalizer.normalizeToSessionSpace(id));\n\t\t}\n\t}\n}\n\nfunction normalizeChange<From extends NodeId | OpSpaceNodeId, To extends NodeId | OpSpaceNodeId>(\n\tchange: ReplaceRecursive<Exclude<ChangeInternal, BuildInternal>, NodeId, From>,\n\tnormalizeId: (id: From) => To\n): ReplaceRecursive<Exclude<ChangeInternal, BuildInternal>, NodeId, To> {\n\tswitch (change.type) {\n\t\tcase ChangeTypeInternal.Insert: {\n\t\t\tconst insert: ReplaceRecursive<InsertInternal, NodeId, To> = {\n\t\t\t\tsource: change.source,\n\t\t\t\tdestination: convertStablePlaceIds(change.destination, normalizeId),\n\t\t\t\ttype: ChangeTypeInternal.Insert,\n\t\t\t};\n\t\t\treturn insert;\n\t\t}\n\t\tcase ChangeTypeInternal.Detach: {\n\t\t\tconst detach: ReplaceRecursive<DetachInternal, NodeId, To> = {\n\t\t\t\tsource: convertStableRangeIds(change.source, normalizeId),\n\t\t\t\ttype: ChangeTypeInternal.Detach,\n\t\t\t};\n\t\t\tcopyPropertyIfDefined(change, detach, 'destination');\n\t\t\treturn detach;\n\t\t}\n\t\tcase ChangeTypeInternal.SetValue: {\n\t\t\tconst setValue: ReplaceRecursive<SetValueInternal, NodeId, To> = {\n\t\t\t\tnodeToModify: normalizeId(change.nodeToModify),\n\t\t\t\tpayload: change.payload,\n\t\t\t\ttype: ChangeTypeInternal.SetValue,\n\t\t\t};\n\t\t\treturn setValue;\n\t\t}\n\t\tcase ChangeTypeInternal.Constraint: {\n\t\t\tconst constraint: Mutable<ReplaceRecursive<ConstraintInternal, NodeId, To>> = {\n\t\t\t\teffect: change.effect,\n\t\t\t\ttoConstrain: convertStableRangeIds(change.toConstrain, normalizeId),\n\t\t\t\ttype: ChangeTypeInternal.Constraint,\n\t\t\t};\n\t\t\tcopyPropertyIfDefined(change, constraint, 'contentHash');\n\t\t\tcopyPropertyIfDefined(change, constraint, 'identityHash');\n\t\t\tcopyPropertyIfDefined(change, constraint, 'label');\n\t\t\tcopyPropertyIfDefined(change, constraint, 'length');\n\t\t\tif (change.parentNode !== undefined) {\n\t\t\t\tconstraint.parentNode = normalizeId(change.parentNode);\n\t\t\t}\n\t\t\treturn constraint;\n\t\t}\n\t\tdefault:\n\t\t\tfail('unexpected change type');\n\t}\n}\n\n/**\n * Compresses the provided edit by applying `compressor` to each change and leaving other fields\n * untouched.\n */\nexport function compressEdit<TId extends OpSpaceNodeId, TEdit extends { changes: readonly ChangeInternal[] }>(\n\tcompressor: ChangeCompressor,\n\tinterner: StringInterner,\n\tidNormalizer: ContextualizedNodeIdNormalizer<TId>,\n\tedit: TEdit\n): Omit<TEdit, 'changes'> & { changes: readonly CompressedChangeInternal<TId>[] } {\n\treturn {\n\t\t...edit,\n\t\tchanges: edit.changes.map((change) => compressor.compress(change, interner, idNormalizer)),\n\t};\n}\n\n/**\n * Decompresses the provided edit by applying `compressor` to each change and leaving other fields\n * untouched.\n */\nexport function decompressEdit<\n\tTId extends OpSpaceNodeId,\n\tTEdit extends { changes: readonly CompressedChangeInternal<TId>[] }\n>(\n\tcompressor: ChangeCompressor,\n\tinterner: StringInterner,\n\tidNormalizer: ContextualizedNodeIdNormalizer<TId>,\n\tedit: TEdit\n): Omit<TEdit, 'changes'> & { changes: readonly ChangeInternal[] } {\n\treturn {\n\t\t...edit,\n\t\tchanges: edit.changes.map((change) => compressor.decompress(change, interner, idNormalizer)),\n\t};\n}\n"]}
@@ -28,9 +28,16 @@ export declare enum ChangeType {
28
28
  /**
29
29
  * A change that composes an Edit.
30
30
  *
31
+ * @remarks
32
+ *
31
33
  * `Change` objects can be conveniently constructed with the helper methods exported on a constant of the same name.
34
+ *
32
35
  * @example
36
+ *
37
+ * ```typescript
33
38
  * Change.insert(sourceId, destination)
39
+ * ```
40
+ *
34
41
  * @public
35
42
  */
36
43
  export declare type Change = Insert | Detach | Build | SetValue | Constraint;
@@ -197,9 +204,14 @@ export declare const Change: {
197
204
  * The anchor (`referenceSibling` or `referenceTrait`) used for a particular `StablePlace` can have an impact in collaborative scenarios.
198
205
  *
199
206
  * `StablePlace` objects can be conveniently constructed with the helper methods exported on a constant of the same name.
207
+ *
200
208
  * @example
209
+ *
210
+ * ```typescript
201
211
  * StablePlace.before(node)
202
212
  * StablePlace.atStartOf(trait)
213
+ * ```
214
+ *
203
215
  * @public
204
216
  */
205
217
  export interface StablePlace {
@@ -226,9 +238,16 @@ export interface StablePlace {
226
238
  *
227
239
  * See {@link (StablePlace:interface)} for what it means for a place to be "after" another place.
228
240
  *
241
+ * @remarks
242
+ *
229
243
  * `StableRange` objects can be conveniently constructed with the helper methods exported on a constant of the same name.
244
+ *
230
245
  * @example
246
+ *
247
+ * ```typescript
231
248
  * StableRange.from(StablePlace.before(startNode)).to(StablePlace.after(endNode))
249
+ * ```
250
+ *
232
251
  * @public
233
252
  */
234
253
  export interface StableRange {
@@ -269,8 +288,12 @@ export declare const StablePlace: {
269
288
  export declare const StableRange: {
270
289
  /**
271
290
  * Factory for producing a `StableRange` from a start `StablePlace` to an end `StablePlace`.
291
+ *
272
292
  * @example
293
+ *
294
+ * ```typescript
273
295
  * StableRange.from(StablePlace.before(startNode)).to(StablePlace.after(endNode))
296
+ * ```
274
297
  */
275
298
  from: (start: StablePlace) => {
276
299
  to: (end: StablePlace) => StableRange;
@@ -1 +1 @@
1
- {"version":3,"file":"ChangeTypes.d.ts","sourceRoot":"","sources":["../src/ChangeTypes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAChG,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C;;;GAGG;AACH,MAAM,WAAW,iBAAiB,CAAC,MAAM;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE;QACjB,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;KACtE,CAAC;CACF;AAED;;;GAGG;AACH,oBAAY,UAAU;IACrB,MAAM,IAAA;IACN,MAAM,IAAA;IACN,KAAK,IAAA;IACL,QAAQ,IAAA;IACR,UAAU,IAAA;CACV;AAED;;;;;;;GAOG;AACH,oBAAY,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,UAAU,CAAC;AAErE;;;;GAIG;AACH,oBAAY,SAAS,GAAG,aAAa,GAAG,MAAM,CAAC;AAE/C;;;;;;;GAOG;AACH,MAAM,WAAW,aAAc,SAAQ,iBAAiB,CAAC,SAAS,CAAC;IAClE,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,KAAK;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACzD,QAAQ,CAAC,IAAI,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACvC;AAED;;;;GAIG;AACH,MAAM,WAAW,MAAM;IACtB,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,UAAU,CAAC,MAAM,CAAC;CACxC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,MAAM;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,UAAU,CAAC,MAAM,CAAC;CACxC;AAED;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B;;;;;OAKG;IAEH,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,OAAO,UAAU,CAAC,QAAQ,CAAC;CAC1C;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,UAAU;IAC1B;;;;;;OAMG;IACH,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAElC;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC;IAEnC;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEzB;;;;;;OAMG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC;IAElC;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAE5B;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAElC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,UAAU,CAAC,UAAU,CAAC;CAC5C;AAGD;;GAEG;AACH,eAAO,MAAM,MAAM;oBACF,SAAS,GAAG,iBAAiB,SAAS,CAAC,eAAe,MAAM,KAAG,KAAK;qBAMnE,MAAM,eAAe,WAAW,KAAG,MAAM;qBAMzC,WAAW,uCAAyB,MAAM;+BAMhC,MAAM,WAAW,OAAO,KAAG,QAAQ;iCAMjC,MAAM,KAAG,QAAQ;8BAQhC,WAAW,UAChB,gBAAgB,gLAMtB,UAAU;IAWb,yDAAyD;IAEzD;;OAEG;0BACmB,WAAW,KAAG,MAAM;IAE1C;;OAEG;wBACiB,SAAS,GAAG,iBAAiB,SAAS,CAAC,eAAe,WAAW,KAAG,MAAM,EAAE;IAKhG;;OAEG;mBACY,WAAW,eAAe,WAAW,KAAG,MAAM,EAAE;CAI/D,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,WAAW;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAEpB;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAEnC;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,aAAa,CAAC;CACxC;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;CAC1B;AAED;;;;;;GAMG;AAGH;;GAEG;AACH,eAAO,MAAM,WAAW;IACvB;;OAEG;mBACY,SAAS,MAAM,CAAC,GAAG,MAAM,KAAG,WAAW;IAItD;;OAEG;kBACW,SAAS,MAAM,CAAC,GAAG,MAAM,KAAG,WAAW;IACrD;;OAEG;uBACgB,aAAa,KAAG,WAAW;IAC9C;;OAEG;qBACc,aAAa,KAAG,WAAW;CAC5C,CAAC;AAGF;;GAEG;AACH,eAAO,MAAM,WAAW;IACvB;;;;OAIG;kBACW,WAAW;kBAAe,WAAW,KAAK,WAAW;;IAenE;;;OAGG;iBACU,SAAS,MAAM,CAAC,GAAG,MAAM,KAAG,WAAW;IAIpD;;;;OAIG;iBACU,aAAa,KAAG,WAAW;CAIxC,CAAC"}
1
+ {"version":3,"file":"ChangeTypes.d.ts","sourceRoot":"","sources":["../src/ChangeTypes.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.StableRange = exports.StablePlace = exports.Change = exports.ChangeType = void 0;
8
- const common_utils_1 = require("@fluidframework/common-utils");
8
+ const core_utils_1 = require("@fluidframework/core-utils");
9
9
  const Common_1 = require("./Common");
10
10
  const persisted_types_1 = require("./persisted-types");
11
11
  const NodeIdUtilities_1 = require("./NodeIdUtilities");
@@ -121,14 +121,18 @@ exports.StablePlace = {
121
121
  exports.StableRange = {
122
122
  /**
123
123
  * Factory for producing a `StableRange` from a start `StablePlace` to an end `StablePlace`.
124
+ *
124
125
  * @example
126
+ *
127
+ * ```typescript
125
128
  * StableRange.from(StablePlace.before(startNode)).to(StablePlace.after(endNode))
129
+ * ```
126
130
  */
127
131
  from: (start) => ({
128
132
  to: (end) => {
129
133
  if (start.referenceTrait && end.referenceTrait) {
130
- (0, common_utils_1.assert)(start.referenceTrait.parent === end.referenceTrait.parent, 0x5fe /* StableRange must be constructed with endpoints from the same trait */);
131
- (0, common_utils_1.assert)(start.referenceTrait.label === end.referenceTrait.label, 0x5ff /* StableRange must be constructed with endpoints from the same trait */);
134
+ (0, core_utils_1.assert)(start.referenceTrait.parent === end.referenceTrait.parent, 0x5fe /* StableRange must be constructed with endpoints from the same trait */);
135
+ (0, core_utils_1.assert)(start.referenceTrait.label === end.referenceTrait.label, 0x5ff /* StableRange must be constructed with endpoints from the same trait */);
132
136
  }
133
137
  return { start, end };
134
138
  },
@@ -1 +1 @@
1
- {"version":3,"file":"ChangeTypes.js","sourceRoot":"","sources":["../src/ChangeTypes.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 { assert } from '@fluidframework/common-utils';\nimport { NodeId, TraitLabel, UuidString } from './Identifiers';\nimport { assertNotUndefined } from './Common';\nimport { ConstraintEffect, NodeData, Payload, Side, TreeNodeSequence } from './persisted-types';\nimport { TraitLocation } from './TreeView';\nimport { getNodeId } from './NodeIdUtilities';\n\n/**\n * An object which may have traits with children of the given type underneath it\n * @public\n */\nexport interface HasVariadicTraits<TChild> {\n\treadonly traits?: {\n\t\treadonly [key: string]: TChild | TreeNodeSequence<TChild> | undefined;\n\t};\n}\n\n/**\n * The type of a Change\n * @public\n */\nexport enum ChangeType {\n\tInsert,\n\tDetach,\n\tBuild,\n\tSetValue,\n\tConstraint,\n}\n\n/**\n * A change that composes an Edit.\n *\n * `Change` objects can be conveniently constructed with the helper methods exported on a constant of the same name.\n * @example\n * Change.insert(sourceId, destination)\n * @public\n */\nexport type Change = Insert | Detach | Build | SetValue | Constraint;\n\n/**\n * Node or a detached sequence of nodes (referred to by a detached sequence ID) for use in a Build change.\n * See `BuildTreeNode` for more.\n * @public\n */\nexport type BuildNode = BuildTreeNode | number;\n\n/**\n * Node for use in a Build change, which is composed of a definition describing what this nodes type, an identifier identifying this node\n * within the tree, and a payload containing an opaque serializable piece of data.\n * An identifier can be provided explicitly if the node must be referred to before the results of the `Change` containing this\n * BuildTreeNode can be observed. If `identifier` is not supplied, one will be generated for it in an especially efficient manner\n * that allows for compact storage and transmission and thus this property should be omitted if convenient.\n * See the SharedTree readme for more on the tree format.\n */\nexport interface BuildTreeNode extends HasVariadicTraits<BuildNode> {\n\tdefinition: string;\n\tidentifier?: NodeId;\n\tpayload?: Payload;\n}\n\n/**\n * Constructs a sequence of nodes, associates it with the supplied ID, and stores it for use in later changes.\n * Does not modify the document.\n *\n * Valid if (transitively) all DetachedSequenceId are used according to their rules (use here counts as a destination),\n * and all Nodes' identifiers are previously unused.\n *\n * @public\n */\nexport interface Build {\n\treadonly destination: number;\n\treadonly source: BuildNode | TreeNodeSequence<BuildNode>;\n\treadonly type: typeof ChangeType.Build;\n}\n\n/**\n * Inserts a sequence of nodes at the specified destination.\n * The source can be constructed either by a Build (used to insert new nodes) or a Detach (amounts to a \"move\" operation).\n * @public\n */\nexport interface Insert {\n\treadonly destination: StablePlace;\n\treadonly source: number;\n\treadonly type: typeof ChangeType.Insert;\n}\n\n/**\n * Removes a sequence of nodes from the tree.\n * If a destination is specified, the detached sequence is associated with that ID and held for possible reuse\n * by later changes in this same Edit (such as by an Insert).\n * A Detach without a destination is a deletion of the specified sequence, as is a Detach with a destination that is not used later.\n * @public\n */\nexport interface Detach {\n\treadonly destination?: number;\n\treadonly source: StableRange;\n\treadonly type: typeof ChangeType.Detach;\n}\n\n/**\n * Modifies the payload of a node.\n * @public\n */\nexport interface SetValue {\n\treadonly nodeToModify: NodeId;\n\t/**\n\t * Sets or clears the payload.\n\t * To improve ease of forwards compatibility, an explicit `null` value is used to represent the clearing of a payload.\n\t * SetValue may use `undefined` in future API versions to mean \"don't change the payload\" (which is useful if e.g. other\n\t * fields are added to SetValue that can be changed without altering the payload)\n\t */\n\t// eslint-disable-next-line @rushstack/no-new-null\n\treadonly payload: Payload | null;\n\treadonly type: typeof ChangeType.SetValue;\n}\n\n/**\n * A set of constraints on the validity of an Edit.\n * A Constraint is used to detect when an Edit, due to other concurrent edits, may have unintended effects or merge in\n * non-semantic ways. It is processed in order like any other Change in an Edit. It can cause an edit to fail if the\n * various constraints are not met at the time of evaluation (ex: the parentNode has changed due to concurrent editing).\n * Does not modify the document.\n * @public\n */\nexport interface Constraint {\n\t/**\n\t * Selects a sequence of nodes which will be checked against the constraints specified by the optional fields.\n\t * If `toConstrain` is invalid, it will be treated like a constraint being unmet.\n\t * Depending on `effect` this may or may not make the Edit invalid.\n\t *\n\t * When a constraint is not met, the effects is specified by `effect`.\n\t */\n\treadonly toConstrain: StableRange;\n\n\t/**\n\t * Require that the identities of all the nodes in toConstrain hash to this value.\n\t * Hash is order dependent.\n\t * TODO: implement and specify exact hash function.\n\t *\n\t * This is an efficient (O(1) space) way to constrain a sequence of nodes to have specific identities.\n\t */\n\treadonly identityHash?: UuidString;\n\n\t/**\n\t * Require that the number of nodes in toConstrain is this value.\n\t */\n\treadonly length?: number;\n\n\t/**\n\t * Require that the contents of all of the nodes in toConstrain hash to this value.\n\t * Hash is an order dependant deep hash, which includes all subtree content recursively.\n\t * TODO: implement and specify exact hash function.\n\t *\n\t * This is an efficient (O(1) space) way to constrain a sequence of nodes have exact values (transitively).\n\t */\n\treadonly contentHash?: UuidString;\n\n\t/**\n\t * Require that parent under which toConstrain is located has this identifier.\n\t */\n\treadonly parentNode?: NodeId;\n\n\t/**\n\t * Require that the trait under which toConstrain is located has this label.\n\t */\n\treadonly label?: TraitLabel;\n\n\t/**\n\t * What to do if a constraint is not met.\n\t */\n\treadonly effect: ConstraintEffect;\n\n\t/**\n\t * Marker for which kind of Change this is.\n\t */\n\treadonly type: typeof ChangeType.Constraint;\n}\n\n// Note: Documentation of this constant is merged with documentation of the `Change` interface.\n/**\n * @public\n */\nexport const Change = {\n\tbuild: (source: BuildNode | TreeNodeSequence<BuildNode>, destination: number): Build => ({\n\t\tdestination,\n\t\tsource,\n\t\ttype: ChangeType.Build,\n\t}),\n\n\tinsert: (source: number, destination: StablePlace): Insert => ({\n\t\tdestination,\n\t\tsource,\n\t\ttype: ChangeType.Insert,\n\t}),\n\n\tdetach: (source: StableRange, destination?: number): Detach => ({\n\t\tdestination,\n\t\tsource,\n\t\ttype: ChangeType.Detach,\n\t}),\n\n\tsetPayload: (nodeToModify: NodeId, payload: Payload): SetValue => ({\n\t\tnodeToModify,\n\t\tpayload,\n\t\ttype: ChangeType.SetValue,\n\t}),\n\n\tclearPayload: (nodeToModify: NodeId): SetValue => ({\n\t\tnodeToModify,\n\t\t// Rationale: 'undefined' is reserved for future use (see 'SetValue' interface above.)\n\t\tpayload: null,\n\t\ttype: ChangeType.SetValue,\n\t}),\n\n\tconstraint: (\n\t\ttoConstrain: StableRange,\n\t\teffect: ConstraintEffect,\n\t\tidentityHash?: UuidString,\n\t\tlength?: number,\n\t\tcontentHash?: UuidString,\n\t\tparentNode?: NodeId,\n\t\tlabel?: TraitLabel\n\t): Constraint => ({\n\t\ttoConstrain,\n\t\teffect,\n\t\tidentityHash,\n\t\tlength,\n\t\tcontentHash,\n\t\tparentNode,\n\t\tlabel,\n\t\ttype: ChangeType.Constraint,\n\t}),\n\n\t/** Helpers for making high-level composite operations */\n\n\t/**\n\t * @returns a change that deletes the supplied part of the tree.\n\t */\n\tdelete: (stableRange: StableRange): Change => Change.detach(stableRange),\n\n\t/**\n\t * @returns changes that insert 'nodes' into the specified location in the tree.\n\t */\n\tinsertTree: (nodes: BuildNode | TreeNodeSequence<BuildNode>, destination: StablePlace): Change[] => {\n\t\tconst build = Change.build(nodes, 0);\n\t\treturn [build, Change.insert(build.destination, destination)];\n\t},\n\n\t/**\n\t * @returns changes that moves the specified content to a new location in the tree.\n\t */\n\tmove: (source: StableRange, destination: StablePlace): Change[] => {\n\t\tconst detach = Change.detach(source, 0);\n\t\treturn [detach, Change.insert(assertNotUndefined(detach.destination), destination)];\n\t},\n};\n\n/**\n * A location in a trait.\n * This is NOT the location of a node, but a location where a node could be inserted:\n * it is next to a sibling or at one end of the trait.\n *\n * To be well formed, either `sibling` or `trait` must be defined, but not both.\n *\n * Any given insertion location can be described by two `StablePlace` objects, one with `Side.After` and one with `Side.Before`.\n * For example, in a trait containing two strings \"foo\" and \"bar\", there are 6 different `StablePlace`s corresponding to 3 locations in the\n * trait a new node could be inserted: at the start, before \"foo\", after \"foo\", before \"bar\", after \"bar\", and at the end.\n * Neither of the two ways to specify the same location are considered to be after each other.\n *\n * The anchor (`referenceSibling` or `referenceTrait`) used for a particular `StablePlace` can have an impact in collaborative scenarios.\n *\n * `StablePlace` objects can be conveniently constructed with the helper methods exported on a constant of the same name.\n * @example\n * StablePlace.before(node)\n * StablePlace.atStartOf(trait)\n * @public\n */\nexport interface StablePlace {\n\t/**\n\t * Where this StablePlace is relative to the sibling (if specified), or an end of the trait (if no sibling specified).\n\t * If 'After' and there is no sibling, this StablePlace is after the front of the trait.\n\t * If 'Before' and there is no sibling, this StablePlace is before the back of the trait.\n\t */\n\treadonly side: Side;\n\n\t/**\n\t * The sibling to which this 'StablePlace' is anchored (by 'side').\n\t * If specified, referenceTrait must be unspecified.\n\t */\n\treadonly referenceSibling?: NodeId;\n\n\t/**\n\t * The trait to which this 'StablePlace' is anchored (by 'side').\n\t * If specified, referenceSibling must be unspecified.\n\t */\n\treadonly referenceTrait?: TraitLocation;\n}\n\n/**\n * Specifies the range of nodes from `start` to `end` within a trait.\n * Valid iff start and end are valid and are within the same trait and the start does not occur after the end in the trait.\n *\n * See {@link (StablePlace:interface)} for what it means for a place to be \"after\" another place.\n *\n * `StableRange` objects can be conveniently constructed with the helper methods exported on a constant of the same name.\n * @example\n * StableRange.from(StablePlace.before(startNode)).to(StablePlace.after(endNode))\n * @public\n */\nexport interface StableRange {\n\treadonly start: StablePlace;\n\treadonly end: StablePlace;\n}\n\n/**\n * The remainder of this file consists of ergonomic factory methods for persisted types, or common combinations thereof (e.g. \"Move\" as a\n * combination of a \"Detach\" change and an \"Insert\" change).\n *\n * None of these helpers are persisted in documents, and therefore changes to their semantics need only follow standard semantic versioning\n * practices.\n */\n\n// Note: Documentation of this constant is merged with documentation of the `StablePlace` interface.\n/**\n * @public\n */\nexport const StablePlace = {\n\t/**\n\t * @returns The location directly before `node`.\n\t */\n\tbefore: (node: NodeData<NodeId> | NodeId): StablePlace => ({\n\t\tside: Side.Before,\n\t\treferenceSibling: getNodeId(node),\n\t}),\n\t/**\n\t * @returns The location directly after `node`.\n\t */\n\tafter: (node: NodeData<NodeId> | NodeId): StablePlace => ({ side: Side.After, referenceSibling: getNodeId(node) }),\n\t/**\n\t * @returns The location at the start of `trait`.\n\t */\n\tatStartOf: (trait: TraitLocation): StablePlace => ({ side: Side.After, referenceTrait: trait }),\n\t/**\n\t * @returns The location at the end of `trait`.\n\t */\n\tatEndOf: (trait: TraitLocation): StablePlace => ({ side: Side.Before, referenceTrait: trait }),\n};\n\n// Note: Documentation of this constant is merged with documentation of the `StableRange` interface.\n/**\n * @public\n */\nexport const StableRange = {\n\t/**\n\t * Factory for producing a `StableRange` from a start `StablePlace` to an end `StablePlace`.\n\t * @example\n\t * StableRange.from(StablePlace.before(startNode)).to(StablePlace.after(endNode))\n\t */\n\tfrom: (start: StablePlace): { to: (end: StablePlace) => StableRange } => ({\n\t\tto: (end: StablePlace): StableRange => {\n\t\t\tif (start.referenceTrait && end.referenceTrait) {\n\t\t\t\tassert(\n\t\t\t\t\tstart.referenceTrait.parent === end.referenceTrait.parent,\n\t\t\t\t\t0x5fe /* StableRange must be constructed with endpoints from the same trait */\n\t\t\t\t);\n\t\t\t\tassert(\n\t\t\t\t\tstart.referenceTrait.label === end.referenceTrait.label,\n\t\t\t\t\t0x5ff /* StableRange must be constructed with endpoints from the same trait */\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn { start, end };\n\t\t},\n\t}),\n\t/**\n\t * @returns a `StableRange` which contains only the provided `node`.\n\t * Both the start and end `StablePlace` objects used to anchor this `StableRange` are in terms of the passed in node.\n\t */\n\tonly: (node: NodeData<NodeId> | NodeId): StableRange => ({\n\t\tstart: StablePlace.before(node),\n\t\tend: StablePlace.after(node),\n\t}),\n\t/**\n\t * @returns a `StableRange` which contains everything in the trait.\n\t * This is anchored using the provided `trait`, and is independent of the actual contents of the trait:\n\t * it does not use sibling anchoring.\n\t */\n\tall: (trait: TraitLocation): StableRange => ({\n\t\tstart: StablePlace.atStartOf(trait),\n\t\tend: StablePlace.atEndOf(trait),\n\t}),\n};\n"]}
1
+ {"version":3,"file":"ChangeTypes.js","sourceRoot":"","sources":["../src/ChangeTypes.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 { assert } from '@fluidframework/core-utils';\nimport { NodeId, TraitLabel, UuidString } from './Identifiers';\nimport { assertNotUndefined } from './Common';\nimport { ConstraintEffect, NodeData, Payload, Side, TreeNodeSequence } from './persisted-types';\nimport { TraitLocation } from './TreeView';\nimport { getNodeId } from './NodeIdUtilities';\n\n/**\n * An object which may have traits with children of the given type underneath it\n * @public\n */\nexport interface HasVariadicTraits<TChild> {\n\treadonly traits?: {\n\t\treadonly [key: string]: TChild | TreeNodeSequence<TChild> | undefined;\n\t};\n}\n\n/**\n * The type of a Change\n * @public\n */\nexport enum ChangeType {\n\tInsert,\n\tDetach,\n\tBuild,\n\tSetValue,\n\tConstraint,\n}\n\n/**\n * A change that composes an Edit.\n *\n * @remarks\n *\n * `Change` objects can be conveniently constructed with the helper methods exported on a constant of the same name.\n *\n * @example\n *\n * ```typescript\n * Change.insert(sourceId, destination)\n * ```\n *\n * @public\n */\nexport type Change = Insert | Detach | Build | SetValue | Constraint;\n\n/**\n * Node or a detached sequence of nodes (referred to by a detached sequence ID) for use in a Build change.\n * See `BuildTreeNode` for more.\n * @public\n */\nexport type BuildNode = BuildTreeNode | number;\n\n/**\n * Node for use in a Build change, which is composed of a definition describing what this nodes type, an identifier identifying this node\n * within the tree, and a payload containing an opaque serializable piece of data.\n * An identifier can be provided explicitly if the node must be referred to before the results of the `Change` containing this\n * BuildTreeNode can be observed. If `identifier` is not supplied, one will be generated for it in an especially efficient manner\n * that allows for compact storage and transmission and thus this property should be omitted if convenient.\n * See the SharedTree readme for more on the tree format.\n */\nexport interface BuildTreeNode extends HasVariadicTraits<BuildNode> {\n\tdefinition: string;\n\tidentifier?: NodeId;\n\tpayload?: Payload;\n}\n\n/**\n * Constructs a sequence of nodes, associates it with the supplied ID, and stores it for use in later changes.\n * Does not modify the document.\n *\n * Valid if (transitively) all DetachedSequenceId are used according to their rules (use here counts as a destination),\n * and all Nodes' identifiers are previously unused.\n *\n * @public\n */\nexport interface Build {\n\treadonly destination: number;\n\treadonly source: BuildNode | TreeNodeSequence<BuildNode>;\n\treadonly type: typeof ChangeType.Build;\n}\n\n/**\n * Inserts a sequence of nodes at the specified destination.\n * The source can be constructed either by a Build (used to insert new nodes) or a Detach (amounts to a \"move\" operation).\n * @public\n */\nexport interface Insert {\n\treadonly destination: StablePlace;\n\treadonly source: number;\n\treadonly type: typeof ChangeType.Insert;\n}\n\n/**\n * Removes a sequence of nodes from the tree.\n * If a destination is specified, the detached sequence is associated with that ID and held for possible reuse\n * by later changes in this same Edit (such as by an Insert).\n * A Detach without a destination is a deletion of the specified sequence, as is a Detach with a destination that is not used later.\n * @public\n */\nexport interface Detach {\n\treadonly destination?: number;\n\treadonly source: StableRange;\n\treadonly type: typeof ChangeType.Detach;\n}\n\n/**\n * Modifies the payload of a node.\n * @public\n */\nexport interface SetValue {\n\treadonly nodeToModify: NodeId;\n\t/**\n\t * Sets or clears the payload.\n\t * To improve ease of forwards compatibility, an explicit `null` value is used to represent the clearing of a payload.\n\t * SetValue may use `undefined` in future API versions to mean \"don't change the payload\" (which is useful if e.g. other\n\t * fields are added to SetValue that can be changed without altering the payload)\n\t */\n\t// eslint-disable-next-line @rushstack/no-new-null\n\treadonly payload: Payload | null;\n\treadonly type: typeof ChangeType.SetValue;\n}\n\n/**\n * A set of constraints on the validity of an Edit.\n * A Constraint is used to detect when an Edit, due to other concurrent edits, may have unintended effects or merge in\n * non-semantic ways. It is processed in order like any other Change in an Edit. It can cause an edit to fail if the\n * various constraints are not met at the time of evaluation (ex: the parentNode has changed due to concurrent editing).\n * Does not modify the document.\n * @public\n */\nexport interface Constraint {\n\t/**\n\t * Selects a sequence of nodes which will be checked against the constraints specified by the optional fields.\n\t * If `toConstrain` is invalid, it will be treated like a constraint being unmet.\n\t * Depending on `effect` this may or may not make the Edit invalid.\n\t *\n\t * When a constraint is not met, the effects is specified by `effect`.\n\t */\n\treadonly toConstrain: StableRange;\n\n\t/**\n\t * Require that the identities of all the nodes in toConstrain hash to this value.\n\t * Hash is order dependent.\n\t * TODO: implement and specify exact hash function.\n\t *\n\t * This is an efficient (O(1) space) way to constrain a sequence of nodes to have specific identities.\n\t */\n\treadonly identityHash?: UuidString;\n\n\t/**\n\t * Require that the number of nodes in toConstrain is this value.\n\t */\n\treadonly length?: number;\n\n\t/**\n\t * Require that the contents of all of the nodes in toConstrain hash to this value.\n\t * Hash is an order dependant deep hash, which includes all subtree content recursively.\n\t * TODO: implement and specify exact hash function.\n\t *\n\t * This is an efficient (O(1) space) way to constrain a sequence of nodes have exact values (transitively).\n\t */\n\treadonly contentHash?: UuidString;\n\n\t/**\n\t * Require that parent under which toConstrain is located has this identifier.\n\t */\n\treadonly parentNode?: NodeId;\n\n\t/**\n\t * Require that the trait under which toConstrain is located has this label.\n\t */\n\treadonly label?: TraitLabel;\n\n\t/**\n\t * What to do if a constraint is not met.\n\t */\n\treadonly effect: ConstraintEffect;\n\n\t/**\n\t * Marker for which kind of Change this is.\n\t */\n\treadonly type: typeof ChangeType.Constraint;\n}\n\n// Note: Documentation of this constant is merged with documentation of the `Change` interface.\n/**\n * @public\n */\nexport const Change = {\n\tbuild: (source: BuildNode | TreeNodeSequence<BuildNode>, destination: number): Build => ({\n\t\tdestination,\n\t\tsource,\n\t\ttype: ChangeType.Build,\n\t}),\n\n\tinsert: (source: number, destination: StablePlace): Insert => ({\n\t\tdestination,\n\t\tsource,\n\t\ttype: ChangeType.Insert,\n\t}),\n\n\tdetach: (source: StableRange, destination?: number): Detach => ({\n\t\tdestination,\n\t\tsource,\n\t\ttype: ChangeType.Detach,\n\t}),\n\n\tsetPayload: (nodeToModify: NodeId, payload: Payload): SetValue => ({\n\t\tnodeToModify,\n\t\tpayload,\n\t\ttype: ChangeType.SetValue,\n\t}),\n\n\tclearPayload: (nodeToModify: NodeId): SetValue => ({\n\t\tnodeToModify,\n\t\t// Rationale: 'undefined' is reserved for future use (see 'SetValue' interface above.)\n\t\tpayload: null,\n\t\ttype: ChangeType.SetValue,\n\t}),\n\n\tconstraint: (\n\t\ttoConstrain: StableRange,\n\t\teffect: ConstraintEffect,\n\t\tidentityHash?: UuidString,\n\t\tlength?: number,\n\t\tcontentHash?: UuidString,\n\t\tparentNode?: NodeId,\n\t\tlabel?: TraitLabel\n\t): Constraint => ({\n\t\ttoConstrain,\n\t\teffect,\n\t\tidentityHash,\n\t\tlength,\n\t\tcontentHash,\n\t\tparentNode,\n\t\tlabel,\n\t\ttype: ChangeType.Constraint,\n\t}),\n\n\t/** Helpers for making high-level composite operations */\n\n\t/**\n\t * @returns a change that deletes the supplied part of the tree.\n\t */\n\tdelete: (stableRange: StableRange): Change => Change.detach(stableRange),\n\n\t/**\n\t * @returns changes that insert 'nodes' into the specified location in the tree.\n\t */\n\tinsertTree: (nodes: BuildNode | TreeNodeSequence<BuildNode>, destination: StablePlace): Change[] => {\n\t\tconst build = Change.build(nodes, 0);\n\t\treturn [build, Change.insert(build.destination, destination)];\n\t},\n\n\t/**\n\t * @returns changes that moves the specified content to a new location in the tree.\n\t */\n\tmove: (source: StableRange, destination: StablePlace): Change[] => {\n\t\tconst detach = Change.detach(source, 0);\n\t\treturn [detach, Change.insert(assertNotUndefined(detach.destination), destination)];\n\t},\n};\n\n/**\n * A location in a trait.\n * This is NOT the location of a node, but a location where a node could be inserted:\n * it is next to a sibling or at one end of the trait.\n *\n * To be well formed, either `sibling` or `trait` must be defined, but not both.\n *\n * Any given insertion location can be described by two `StablePlace` objects, one with `Side.After` and one with `Side.Before`.\n * For example, in a trait containing two strings \"foo\" and \"bar\", there are 6 different `StablePlace`s corresponding to 3 locations in the\n * trait a new node could be inserted: at the start, before \"foo\", after \"foo\", before \"bar\", after \"bar\", and at the end.\n * Neither of the two ways to specify the same location are considered to be after each other.\n *\n * The anchor (`referenceSibling` or `referenceTrait`) used for a particular `StablePlace` can have an impact in collaborative scenarios.\n *\n * `StablePlace` objects can be conveniently constructed with the helper methods exported on a constant of the same name.\n *\n * @example\n *\n * ```typescript\n * StablePlace.before(node)\n * StablePlace.atStartOf(trait)\n * ```\n *\n * @public\n */\nexport interface StablePlace {\n\t/**\n\t * Where this StablePlace is relative to the sibling (if specified), or an end of the trait (if no sibling specified).\n\t * If 'After' and there is no sibling, this StablePlace is after the front of the trait.\n\t * If 'Before' and there is no sibling, this StablePlace is before the back of the trait.\n\t */\n\treadonly side: Side;\n\n\t/**\n\t * The sibling to which this 'StablePlace' is anchored (by 'side').\n\t * If specified, referenceTrait must be unspecified.\n\t */\n\treadonly referenceSibling?: NodeId;\n\n\t/**\n\t * The trait to which this 'StablePlace' is anchored (by 'side').\n\t * If specified, referenceSibling must be unspecified.\n\t */\n\treadonly referenceTrait?: TraitLocation;\n}\n\n/**\n * Specifies the range of nodes from `start` to `end` within a trait.\n * Valid iff start and end are valid and are within the same trait and the start does not occur after the end in the trait.\n *\n * See {@link (StablePlace:interface)} for what it means for a place to be \"after\" another place.\n *\n * @remarks\n *\n * `StableRange` objects can be conveniently constructed with the helper methods exported on a constant of the same name.\n *\n * @example\n *\n * ```typescript\n * StableRange.from(StablePlace.before(startNode)).to(StablePlace.after(endNode))\n * ```\n *\n * @public\n */\nexport interface StableRange {\n\treadonly start: StablePlace;\n\treadonly end: StablePlace;\n}\n\n/**\n * The remainder of this file consists of ergonomic factory methods for persisted types, or common combinations thereof (e.g. \"Move\" as a\n * combination of a \"Detach\" change and an \"Insert\" change).\n *\n * None of these helpers are persisted in documents, and therefore changes to their semantics need only follow standard semantic versioning\n * practices.\n */\n\n// Note: Documentation of this constant is merged with documentation of the `StablePlace` interface.\n/**\n * @public\n */\nexport const StablePlace = {\n\t/**\n\t * @returns The location directly before `node`.\n\t */\n\tbefore: (node: NodeData<NodeId> | NodeId): StablePlace => ({\n\t\tside: Side.Before,\n\t\treferenceSibling: getNodeId(node),\n\t}),\n\t/**\n\t * @returns The location directly after `node`.\n\t */\n\tafter: (node: NodeData<NodeId> | NodeId): StablePlace => ({ side: Side.After, referenceSibling: getNodeId(node) }),\n\t/**\n\t * @returns The location at the start of `trait`.\n\t */\n\tatStartOf: (trait: TraitLocation): StablePlace => ({ side: Side.After, referenceTrait: trait }),\n\t/**\n\t * @returns The location at the end of `trait`.\n\t */\n\tatEndOf: (trait: TraitLocation): StablePlace => ({ side: Side.Before, referenceTrait: trait }),\n};\n\n// Note: Documentation of this constant is merged with documentation of the `StableRange` interface.\n/**\n * @public\n */\nexport const StableRange = {\n\t/**\n\t * Factory for producing a `StableRange` from a start `StablePlace` to an end `StablePlace`.\n\t *\n\t * @example\n\t *\n\t * ```typescript\n\t * StableRange.from(StablePlace.before(startNode)).to(StablePlace.after(endNode))\n\t * ```\n\t */\n\tfrom: (start: StablePlace): { to: (end: StablePlace) => StableRange } => ({\n\t\tto: (end: StablePlace): StableRange => {\n\t\t\tif (start.referenceTrait && end.referenceTrait) {\n\t\t\t\tassert(\n\t\t\t\t\tstart.referenceTrait.parent === end.referenceTrait.parent,\n\t\t\t\t\t0x5fe /* StableRange must be constructed with endpoints from the same trait */\n\t\t\t\t);\n\t\t\t\tassert(\n\t\t\t\t\tstart.referenceTrait.label === end.referenceTrait.label,\n\t\t\t\t\t0x5ff /* StableRange must be constructed with endpoints from the same trait */\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn { start, end };\n\t\t},\n\t}),\n\t/**\n\t * @returns a `StableRange` which contains only the provided `node`.\n\t * Both the start and end `StablePlace` objects used to anchor this `StableRange` are in terms of the passed in node.\n\t */\n\tonly: (node: NodeData<NodeId> | NodeId): StableRange => ({\n\t\tstart: StablePlace.before(node),\n\t\tend: StablePlace.after(node),\n\t}),\n\t/**\n\t * @returns a `StableRange` which contains everything in the trait.\n\t * This is anchored using the provided `trait`, and is independent of the actual contents of the trait:\n\t * it does not use sibling anchoring.\n\t */\n\tall: (trait: TraitLocation): StableRange => ({\n\t\tstart: StablePlace.atStartOf(trait),\n\t\tend: StablePlace.atEndOf(trait),\n\t}),\n};\n"]}
@@ -3,8 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import { EventEmitterWithErrorHandling } from '@fluidframework/telemetry-utils';
6
- import { IErrorEvent } from '@fluidframework/common-definitions';
7
- import { IDisposable } from '@fluidframework/core-interfaces';
6
+ import { IDisposable, IErrorEvent } from '@fluidframework/core-interfaces';
8
7
  import { EditId } from './Identifiers';
9
8
  import { TreeView } from './TreeView';
10
9
  import { RevisionView } from './RevisionView';
@@ -169,6 +168,7 @@ export declare abstract class Checkout extends EventEmitterWithErrorHandling<ICh
169
168
  tryApplyEdit(...changes: readonly Change[]): EditId | undefined;
170
169
  /**
171
170
  * Rebases the ongoing edit to the latest revision loaded by this 'Checkout'.
171
+ *
172
172
  * If the rebase succeeds (none of the changes in the ongoing edit became invalid), the ongoing edit will remain open and the current
173
173
  * view will reflect those changes.
174
174
  *
@@ -176,7 +176,8 @@ export declare abstract class Checkout extends EventEmitterWithErrorHandling<ICh
176
176
  * currentView will return to showing the newest committed revision as it always does when there is no ongoing edit.
177
177
  *
178
178
  * Must only be called during an open edit.
179
- * @returns - the result of the rebase.
179
+ *
180
+ * @returns The result of the rebase.
180
181
  */
181
182
  rebaseCurrentEdit(): EditValidationResult.Valid | EditValidationResult.Invalid;
182
183
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Checkout.d.ts","sourceRoot":"","sources":["../src/Checkout.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Checkout.d.ts","sourceRoot":"","sources":["../src/Checkout.ts"],"names":[],"mappings":"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"}
package/dist/Checkout.js CHANGED
@@ -5,7 +5,7 @@
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.Checkout = exports.EditValidationResult = exports.CheckoutEvent = void 0;
8
- const common_utils_1 = require("@fluidframework/common-utils");
8
+ const core_utils_1 = require("@fluidframework/core-utils");
9
9
  const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
10
10
  const Common_1 = require("./Common");
11
11
  const LogViewer_1 = require("./LogViewer");
@@ -70,7 +70,7 @@ class Checkout extends telemetry_utils_1.EventEmitterWithErrorHandling {
70
70
  });
71
71
  this.disposed = false;
72
72
  this.tree = tree;
73
- this.logger = telemetry_utils_1.ChildLogger.create(this.tree.logger, 'Checkout');
73
+ this.logger = (0, telemetry_utils_1.createChildLogger)({ logger: this.tree.logger, namespace: 'Checkout' });
74
74
  if (tree.logViewer instanceof LogViewer_1.CachingLogViewer) {
75
75
  this.cachingLogViewer = tree.logViewer;
76
76
  }
@@ -84,8 +84,7 @@ class Checkout extends telemetry_utils_1.EventEmitterWithErrorHandling {
84
84
  * Note that any external edits (from other clients) will not added to view while there is a `currentEdit`.
85
85
  */
86
86
  get currentView() {
87
- var _a, _b;
88
- return (_b = (_a = this.currentEdit) === null || _a === void 0 ? void 0 : _a.view) !== null && _b !== void 0 ? _b : this.latestCommittedView;
87
+ return this.currentEdit?.view ?? this.latestCommittedView;
89
88
  }
90
89
  /**
91
90
  * @returns true iff there is an open edit.
@@ -99,7 +98,7 @@ class Checkout extends telemetry_utils_1.EventEmitterWithErrorHandling {
99
98
  * Changes accumulate in the edit via calls to `applyChanges()`.
100
99
  */
101
100
  openEdit() {
102
- (0, common_utils_1.assert)(this.currentEdit === undefined, 0x600 /* An edit is already open. */);
101
+ (0, core_utils_1.assert)(this.currentEdit === undefined, 0x600 /* An edit is already open. */);
103
102
  this.currentEdit = TransactionInternal_1.TransactionInternal.factory(this.latestCommittedView);
104
103
  }
105
104
  /**
@@ -112,9 +111,9 @@ class Checkout extends telemetry_utils_1.EventEmitterWithErrorHandling {
112
111
  */
113
112
  closeEdit() {
114
113
  const { currentEdit } = this;
115
- (0, common_utils_1.assert)(currentEdit !== undefined, 0x601 /* An edit is not open. */);
114
+ (0, core_utils_1.assert)(currentEdit !== undefined, 0x601 /* An edit is not open. */);
116
115
  this.currentEdit = undefined;
117
- (0, common_utils_1.assert)(currentEdit.failure === undefined, 0x66d /* Cannot close a transaction that has already failed. Use abortEdit instead. */);
116
+ (0, core_utils_1.assert)(currentEdit.failure === undefined, 0x66d /* Cannot close a transaction that has already failed. Use abortEdit instead. */);
118
117
  const editingResult = currentEdit.close();
119
118
  this.validateChangesApplied(editingResult);
120
119
  const id = (0, EditUtilities_1.newEditId)();
@@ -145,7 +144,12 @@ class Checkout extends telemetry_utils_1.EventEmitterWithErrorHandling {
145
144
  default:
146
145
  break;
147
146
  }
148
- this.logger.sendErrorEvent(Object.assign({ eventName: 'FailedLocalEdit', status: result.status === 0 ? 'Malformed' : 'Invalid', failureKind: failure.kind }, additionalProps));
147
+ this.logger.sendErrorEvent({
148
+ eventName: 'FailedLocalEdit',
149
+ status: result.status === 0 ? 'Malformed' : 'Invalid',
150
+ failureKind: failure.kind,
151
+ ...additionalProps,
152
+ });
149
153
  (0, Common_1.fail)('Locally constructed edits must be well-formed and valid.');
150
154
  }
151
155
  /**
@@ -153,9 +157,8 @@ class Checkout extends telemetry_utils_1.EventEmitterWithErrorHandling {
153
157
  * This may be used as a caching hint to avoid recomputation.
154
158
  */
155
159
  hintKnownEditingResult(edit, result) {
156
- var _a;
157
160
  // As an optimization, inform logViewer of this editing result so it can reuse it if applied to the same before revision.
158
- (_a = this.cachingLogViewer) === null || _a === void 0 ? void 0 : _a.setKnownEditingResult(edit, result);
161
+ this.cachingLogViewer?.setKnownEditingResult(edit, result);
159
162
  }
160
163
  /**
161
164
  * Take any needed action between when an edit is completed.
@@ -172,14 +175,14 @@ class Checkout extends telemetry_utils_1.EventEmitterWithErrorHandling {
172
175
  this.tree.applyEditInternal(edit);
173
176
  }
174
177
  applyChanges(...changes) {
175
- (0, common_utils_1.assert)(this.currentEdit !== undefined, 0x602 /* Changes must be applied as part of an ongoing edit. */);
178
+ (0, core_utils_1.assert)(this.currentEdit !== undefined, 0x602 /* Changes must be applied as part of an ongoing edit. */);
176
179
  const changeArray = (0, Common_1.unwrapRestOrArray)(changes);
177
180
  const { status } = this.currentEdit.applyChanges(changeArray.map((c) => this.tree.internalizeChange(c)));
178
181
  this.validateChangesApplied({ status, failure: this.currentEdit.failure });
179
182
  this.emitChange();
180
183
  }
181
184
  tryApplyChangesInternal(...changes) {
182
- (0, common_utils_1.assert)(this.currentEdit !== undefined, 0x603 /* Changes must be applied as part of an ongoing edit. */);
185
+ (0, core_utils_1.assert)(this.currentEdit !== undefined, 0x603 /* Changes must be applied as part of an ongoing edit. */);
183
186
  const changeArray = (0, Common_1.unwrapRestOrArray)(changes);
184
187
  const { status } = this.currentEdit.applyChanges(changeArray);
185
188
  if (status === persisted_types_1.EditStatus.Applied) {
@@ -195,7 +198,7 @@ class Checkout extends telemetry_utils_1.EventEmitterWithErrorHandling {
195
198
  }
196
199
  tryApplyEdit(...changes) {
197
200
  this.openEdit();
198
- (0, common_utils_1.assert)(this.currentEdit !== undefined, 0x604 /* Changes must be applied as part of an ongoing edit. */);
201
+ (0, core_utils_1.assert)(this.currentEdit !== undefined, 0x604 /* Changes must be applied as part of an ongoing edit. */);
199
202
  const changeArray = (0, Common_1.unwrapRestOrArray)(changes);
200
203
  const { status } = this.currentEdit.applyChanges(changeArray.map((c) => this.tree.internalizeChange(c)));
201
204
  if (status === persisted_types_1.EditStatus.Applied) {
@@ -207,6 +210,7 @@ class Checkout extends telemetry_utils_1.EventEmitterWithErrorHandling {
207
210
  }
208
211
  /**
209
212
  * Rebases the ongoing edit to the latest revision loaded by this 'Checkout'.
213
+ *
210
214
  * If the rebase succeeds (none of the changes in the ongoing edit became invalid), the ongoing edit will remain open and the current
211
215
  * view will reflect those changes.
212
216
  *
@@ -214,16 +218,17 @@ class Checkout extends telemetry_utils_1.EventEmitterWithErrorHandling {
214
218
  * currentView will return to showing the newest committed revision as it always does when there is no ongoing edit.
215
219
  *
216
220
  * Must only be called during an open edit.
217
- * @returns - the result of the rebase.
221
+ *
222
+ * @returns The result of the rebase.
218
223
  */
219
224
  rebaseCurrentEdit() {
220
- (0, common_utils_1.assert)(this.currentEdit !== undefined, 0x605 /* An edit is not open. */);
221
- (0, common_utils_1.assert)(this.currentEdit.status === persisted_types_1.EditStatus.Applied, 0x606 /* Local edits should always be valid. */);
225
+ (0, core_utils_1.assert)(this.currentEdit !== undefined, 0x605 /* An edit is not open. */);
226
+ (0, core_utils_1.assert)(this.currentEdit.status === persisted_types_1.EditStatus.Applied, 0x606 /* Local edits should always be valid. */);
222
227
  // When closed, the result might indicate Malformed due to unused detached entities.
223
228
  // This is not an error, as the edit was still open and can still use those entities.
224
229
  const priorResults = this.currentEdit.close();
225
230
  const rebasedEdit = TransactionInternal_1.TransactionInternal.factory(this.latestCommittedView).applyChanges(priorResults.changes);
226
- (0, common_utils_1.assert)(rebasedEdit.status !== persisted_types_1.EditStatus.Malformed, 0x607 /* Malformed changes should have been caught on original application. */);
231
+ (0, core_utils_1.assert)(rebasedEdit.status !== persisted_types_1.EditStatus.Malformed, 0x607 /* Malformed changes should have been caught on original application. */);
227
232
  let status;
228
233
  if (rebasedEdit.status === persisted_types_1.EditStatus.Invalid) {
229
234
  status = EditValidationResult.Invalid;
@@ -242,7 +247,7 @@ class Checkout extends telemetry_utils_1.EventEmitterWithErrorHandling {
242
247
  */
243
248
  abortEdit() {
244
249
  const { currentEdit } = this;
245
- (0, common_utils_1.assert)(currentEdit !== undefined, 0x608 /* An edit is not open. */);
250
+ (0, core_utils_1.assert)(currentEdit !== undefined, 0x608 /* An edit is not open. */);
246
251
  this.currentEdit = undefined;
247
252
  this.emitChange();
248
253
  }
@@ -253,7 +258,7 @@ class Checkout extends telemetry_utils_1.EventEmitterWithErrorHandling {
253
258
  */
254
259
  getEditStatus() {
255
260
  const { currentEdit } = this;
256
- (0, common_utils_1.assert)(currentEdit !== undefined, 0x609 /* An edit is not open. */);
261
+ (0, core_utils_1.assert)(currentEdit !== undefined, 0x609 /* An edit is not open. */);
257
262
  // TODO: could this ever be anything other than 'Applied'
258
263
  // TODO: shouldn't this be an EditValidationResult since 'Applied' does not indicate the edit has been applied?
259
264
  return currentEdit.status;
@@ -263,10 +268,9 @@ class Checkout extends telemetry_utils_1.EventEmitterWithErrorHandling {
263
268
  * @param editIds - the edits to revert
264
269
  */
265
270
  revert(editId) {
266
- var _a;
267
271
  (0, Common_1.assertWithMessage)(this.currentEdit !== undefined);
268
272
  const index = this.tree.edits.getIndexOfId(editId);
269
- const edit = (_a = this.tree.edits.tryGetEditAtIndex(index)) !== null && _a !== void 0 ? _a : (0, Common_1.fail)('Edit with the specified ID does not exist in memory');
273
+ const edit = this.tree.edits.tryGetEditAtIndex(index) ?? (0, Common_1.fail)('Edit with the specified ID does not exist in memory');
270
274
  const before = this.tree.logViewer.getRevisionViewInMemory(index);
271
275
  const changes = this.tree.revertChanges(edit.changes, before);
272
276
  if (changes !== undefined) {