@fluidframework/tree 2.51.0 → 2.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (579) hide show
  1. package/.vscode/settings.json +0 -1
  2. package/CHANGELOG.md +43 -0
  3. package/api-report/tree.alpha.api.md +3 -2
  4. package/dist/codec/codec.d.ts +2 -1
  5. package/dist/codec/codec.d.ts.map +1 -1
  6. package/dist/codec/codec.js +4 -3
  7. package/dist/codec/codec.js.map +1 -1
  8. package/dist/core/index.d.ts +1 -1
  9. package/dist/core/index.d.ts.map +1 -1
  10. package/dist/core/index.js +3 -2
  11. package/dist/core/index.js.map +1 -1
  12. package/dist/core/rebase/index.d.ts +1 -1
  13. package/dist/core/rebase/index.d.ts.map +1 -1
  14. package/dist/core/rebase/index.js +2 -1
  15. package/dist/core/rebase/index.js.map +1 -1
  16. package/dist/core/rebase/types.d.ts +3 -1
  17. package/dist/core/rebase/types.d.ts.map +1 -1
  18. package/dist/core/rebase/types.js +2 -1
  19. package/dist/core/rebase/types.js.map +1 -1
  20. package/dist/core/schema-stored/schema.d.ts +1 -23
  21. package/dist/core/schema-stored/schema.d.ts.map +1 -1
  22. package/dist/core/schema-stored/schema.js +2 -2
  23. package/dist/core/schema-stored/schema.js.map +1 -1
  24. package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
  25. package/dist/core/tree/detachedFieldIndex.js +2 -3
  26. package/dist/core/tree/detachedFieldIndex.js.map +1 -1
  27. package/dist/core/tree/detachedFieldIndexCodecCommon.d.ts +17 -0
  28. package/dist/core/tree/detachedFieldIndexCodecCommon.d.ts.map +1 -0
  29. package/dist/core/tree/detachedFieldIndexCodecCommon.js +68 -0
  30. package/dist/core/tree/detachedFieldIndexCodecCommon.js.map +1 -0
  31. package/dist/core/tree/detachedFieldIndexCodecV1.d.ts +11 -0
  32. package/dist/core/tree/detachedFieldIndexCodecV1.d.ts.map +1 -0
  33. package/dist/core/tree/detachedFieldIndexCodecV1.js +55 -0
  34. package/dist/core/tree/detachedFieldIndexCodecV1.js.map +1 -0
  35. package/dist/core/tree/detachedFieldIndexCodecV2.d.ts +11 -0
  36. package/dist/core/tree/detachedFieldIndexCodecV2.d.ts.map +1 -0
  37. package/dist/core/tree/detachedFieldIndexCodecV2.js +49 -0
  38. package/dist/core/tree/detachedFieldIndexCodecV2.js.map +1 -0
  39. package/dist/core/tree/detachedFieldIndexCodecs.d.ts +11 -0
  40. package/dist/core/tree/detachedFieldIndexCodecs.d.ts.map +1 -0
  41. package/dist/core/tree/detachedFieldIndexCodecs.js +26 -0
  42. package/dist/core/tree/detachedFieldIndexCodecs.js.map +1 -0
  43. package/dist/core/tree/detachedFieldIndexFormatCommon.d.ts +37 -0
  44. package/dist/core/tree/detachedFieldIndexFormatCommon.d.ts.map +1 -0
  45. package/dist/core/tree/{detachedFieldIndexFormat.js → detachedFieldIndexFormatCommon.js} +18 -13
  46. package/dist/core/tree/detachedFieldIndexFormatCommon.js.map +1 -0
  47. package/dist/core/tree/detachedFieldIndexFormatV1.d.ts +13 -0
  48. package/dist/core/tree/detachedFieldIndexFormatV1.d.ts.map +1 -0
  49. package/dist/core/tree/detachedFieldIndexFormatV1.js +12 -0
  50. package/dist/core/tree/detachedFieldIndexFormatV1.js.map +1 -0
  51. package/dist/core/tree/detachedFieldIndexFormatV2.d.ts +14 -0
  52. package/dist/core/tree/detachedFieldIndexFormatV2.d.ts.map +1 -0
  53. package/dist/core/tree/detachedFieldIndexFormatV2.js +14 -0
  54. package/dist/core/tree/detachedFieldIndexFormatV2.js.map +1 -0
  55. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +9 -9
  56. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  57. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js +21 -21
  58. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  59. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +4 -2
  60. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
  61. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js +4 -4
  62. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
  63. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +50 -31
  64. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  65. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js +74 -61
  66. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  67. package/dist/feature-libraries/chunked-forest/codec/format.d.ts +20 -14
  68. package/dist/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
  69. package/dist/feature-libraries/chunked-forest/codec/format.js +18 -12
  70. package/dist/feature-libraries/chunked-forest/codec/format.js.map +1 -1
  71. package/{lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts → dist/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts} +20 -14
  72. package/dist/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts.map +1 -0
  73. package/dist/feature-libraries/chunked-forest/codec/{nodeShape.js → nodeEncoder.js} +23 -17
  74. package/dist/feature-libraries/chunked-forest/codec/nodeEncoder.js.map +1 -0
  75. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +7 -7
  76. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
  77. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +22 -22
  78. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  79. package/dist/feature-libraries/chunked-forest/codec/uncompressedEncode.js +2 -2
  80. package/dist/feature-libraries/chunked-forest/codec/uncompressedEncode.js.map +1 -1
  81. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +5 -1
  82. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  83. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +14 -2
  84. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  85. package/dist/feature-libraries/default-schema/defaultSchema.d.ts.map +1 -1
  86. package/dist/feature-libraries/default-schema/defaultSchema.js +0 -2
  87. package/dist/feature-libraries/default-schema/defaultSchema.js.map +1 -1
  88. package/dist/feature-libraries/default-schema/index.d.ts +1 -1
  89. package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
  90. package/dist/feature-libraries/default-schema/index.js +2 -2
  91. package/dist/feature-libraries/default-schema/index.js.map +1 -1
  92. package/dist/feature-libraries/default-schema/schemaChecker.d.ts +14 -4
  93. package/dist/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
  94. package/dist/feature-libraries/default-schema/schemaChecker.js +31 -26
  95. package/dist/feature-libraries/default-schema/schemaChecker.js.map +1 -1
  96. package/dist/feature-libraries/index.d.ts +1 -2
  97. package/dist/feature-libraries/index.d.ts.map +1 -1
  98. package/dist/feature-libraries/index.js +2 -4
  99. package/dist/feature-libraries/index.js.map +1 -1
  100. package/dist/feature-libraries/modular-schema/comparison.d.ts +5 -6
  101. package/dist/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
  102. package/dist/feature-libraries/modular-schema/comparison.js +15 -16
  103. package/dist/feature-libraries/modular-schema/comparison.js.map +1 -1
  104. package/dist/feature-libraries/modular-schema/modularChangeFormat.d.ts +9 -3
  105. package/dist/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +1 -1
  106. package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  107. package/dist/feature-libraries/object-forest/objectForest.js +2 -3
  108. package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
  109. package/dist/index.d.ts +1 -1
  110. package/dist/index.d.ts.map +1 -1
  111. package/dist/index.js +6 -2
  112. package/dist/index.js.map +1 -1
  113. package/dist/packageVersion.d.ts +1 -1
  114. package/dist/packageVersion.js +1 -1
  115. package/dist/packageVersion.js.map +1 -1
  116. package/dist/shared-tree/independentView.d.ts +8 -0
  117. package/dist/shared-tree/independentView.d.ts.map +1 -1
  118. package/dist/shared-tree/independentView.js +23 -11
  119. package/dist/shared-tree/independentView.js.map +1 -1
  120. package/dist/shared-tree/schematizeTree.js +1 -1
  121. package/dist/shared-tree/schematizeTree.js.map +1 -1
  122. package/dist/shared-tree/schematizingTreeView.d.ts +0 -1
  123. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  124. package/dist/shared-tree/schematizingTreeView.js +7 -10
  125. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  126. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  127. package/dist/shared-tree/sharedTree.js +1 -29
  128. package/dist/shared-tree/sharedTree.js.map +1 -1
  129. package/dist/shared-tree/treeAlpha.d.ts +20 -6
  130. package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
  131. package/dist/shared-tree/treeAlpha.js +9 -4
  132. package/dist/shared-tree/treeAlpha.js.map +1 -1
  133. package/dist/shared-tree/treeCheckout.d.ts +2 -1
  134. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  135. package/dist/shared-tree/treeCheckout.js +32 -0
  136. package/dist/shared-tree/treeCheckout.js.map +1 -1
  137. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  138. package/dist/shared-tree-core/branch.js +1 -1
  139. package/dist/shared-tree-core/branch.js.map +1 -1
  140. package/dist/simple-tree/api/conciseTree.d.ts +2 -2
  141. package/dist/simple-tree/api/conciseTree.d.ts.map +1 -1
  142. package/dist/simple-tree/api/conciseTree.js +6 -6
  143. package/dist/simple-tree/api/conciseTree.js.map +1 -1
  144. package/dist/simple-tree/api/configuration.d.ts +8 -2
  145. package/dist/simple-tree/api/configuration.d.ts.map +1 -1
  146. package/dist/simple-tree/api/configuration.js.map +1 -1
  147. package/dist/simple-tree/api/create.d.ts +8 -7
  148. package/dist/simple-tree/api/create.d.ts.map +1 -1
  149. package/dist/simple-tree/api/create.js +35 -22
  150. package/dist/simple-tree/api/create.js.map +1 -1
  151. package/dist/simple-tree/api/customTree.d.ts +25 -4
  152. package/dist/simple-tree/api/customTree.d.ts.map +1 -1
  153. package/dist/simple-tree/api/customTree.js +42 -16
  154. package/dist/simple-tree/api/customTree.js.map +1 -1
  155. package/dist/simple-tree/api/discrepancies.d.ts +98 -0
  156. package/dist/simple-tree/api/discrepancies.d.ts.map +1 -0
  157. package/dist/simple-tree/api/discrepancies.js +255 -0
  158. package/dist/simple-tree/api/discrepancies.js.map +1 -0
  159. package/dist/simple-tree/api/schemaCompatibilityTester.d.ts +9 -7
  160. package/dist/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
  161. package/dist/simple-tree/api/schemaCompatibilityTester.js +18 -117
  162. package/dist/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
  163. package/dist/simple-tree/api/schemaFactory.d.ts +7 -4
  164. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  165. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  166. package/dist/simple-tree/api/storedSchema.d.ts.map +1 -1
  167. package/dist/simple-tree/api/storedSchema.js +5 -1
  168. package/dist/simple-tree/api/storedSchema.js.map +1 -1
  169. package/dist/simple-tree/api/treeBeta.d.ts +2 -2
  170. package/dist/simple-tree/api/treeBeta.d.ts.map +1 -1
  171. package/dist/simple-tree/api/treeBeta.js +10 -4
  172. package/dist/simple-tree/api/treeBeta.js.map +1 -1
  173. package/dist/simple-tree/api/verboseTree.d.ts +2 -2
  174. package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
  175. package/dist/simple-tree/api/verboseTree.js +15 -15
  176. package/dist/simple-tree/api/verboseTree.js.map +1 -1
  177. package/dist/simple-tree/core/allowedTypes.d.ts +20 -4
  178. package/dist/simple-tree/core/allowedTypes.d.ts.map +1 -1
  179. package/dist/simple-tree/core/allowedTypes.js +45 -13
  180. package/dist/simple-tree/core/allowedTypes.js.map +1 -1
  181. package/dist/simple-tree/core/context.d.ts +13 -2
  182. package/dist/simple-tree/core/context.d.ts.map +1 -1
  183. package/dist/simple-tree/core/context.js +22 -9
  184. package/dist/simple-tree/core/context.js.map +1 -1
  185. package/dist/simple-tree/core/index.d.ts +2 -2
  186. package/dist/simple-tree/core/index.d.ts.map +1 -1
  187. package/dist/simple-tree/core/index.js +3 -1
  188. package/dist/simple-tree/core/index.js.map +1 -1
  189. package/dist/simple-tree/core/treeNodeKernel.d.ts +1 -1
  190. package/dist/simple-tree/core/treeNodeKernel.js +1 -1
  191. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  192. package/dist/simple-tree/core/treeNodeValid.d.ts +1 -1
  193. package/dist/simple-tree/core/treeNodeValid.d.ts.map +1 -1
  194. package/dist/simple-tree/core/treeNodeValid.js +8 -1
  195. package/dist/simple-tree/core/treeNodeValid.js.map +1 -1
  196. package/dist/simple-tree/core/walkSchema.d.ts +3 -0
  197. package/dist/simple-tree/core/walkSchema.d.ts.map +1 -1
  198. package/dist/simple-tree/core/walkSchema.js +2 -0
  199. package/dist/simple-tree/core/walkSchema.js.map +1 -1
  200. package/dist/simple-tree/createContext.d.ts +2 -0
  201. package/dist/simple-tree/createContext.d.ts.map +1 -1
  202. package/dist/simple-tree/createContext.js +3 -1
  203. package/dist/simple-tree/createContext.js.map +1 -1
  204. package/dist/simple-tree/fieldSchema.d.ts +1 -0
  205. package/dist/simple-tree/fieldSchema.d.ts.map +1 -1
  206. package/dist/simple-tree/fieldSchema.js +1 -0
  207. package/dist/simple-tree/fieldSchema.js.map +1 -1
  208. package/dist/simple-tree/index.d.ts +4 -4
  209. package/dist/simple-tree/index.d.ts.map +1 -1
  210. package/dist/simple-tree/index.js +7 -8
  211. package/dist/simple-tree/index.js.map +1 -1
  212. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  213. package/dist/simple-tree/node-kinds/array/arrayNode.js +1 -1
  214. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  215. package/dist/simple-tree/node-kinds/index.d.ts +1 -1
  216. package/dist/simple-tree/node-kinds/index.d.ts.map +1 -1
  217. package/dist/simple-tree/node-kinds/index.js +1 -2
  218. package/dist/simple-tree/node-kinds/index.js.map +1 -1
  219. package/dist/simple-tree/node-kinds/object/index.d.ts +1 -1
  220. package/dist/simple-tree/node-kinds/object/index.d.ts.map +1 -1
  221. package/dist/simple-tree/node-kinds/object/index.js +1 -2
  222. package/dist/simple-tree/node-kinds/object/index.js.map +1 -1
  223. package/dist/simple-tree/node-kinds/object/objectNode.d.ts +2 -7
  224. package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  225. package/dist/simple-tree/node-kinds/object/objectNode.js +4 -18
  226. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  227. package/dist/simple-tree/prepareForInsertion.d.ts +5 -5
  228. package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
  229. package/dist/simple-tree/prepareForInsertion.js +9 -3
  230. package/dist/simple-tree/prepareForInsertion.js.map +1 -1
  231. package/dist/simple-tree/toStoredSchema.d.ts +3 -0
  232. package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
  233. package/dist/simple-tree/toStoredSchema.js +3 -0
  234. package/dist/simple-tree/toStoredSchema.js.map +1 -1
  235. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +2 -2
  236. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  237. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  238. package/dist/simple-tree/walkFieldSchema.d.ts +1 -0
  239. package/dist/simple-tree/walkFieldSchema.d.ts.map +1 -1
  240. package/dist/simple-tree/walkFieldSchema.js +1 -0
  241. package/dist/simple-tree/walkFieldSchema.js.map +1 -1
  242. package/lib/codec/codec.d.ts +2 -1
  243. package/lib/codec/codec.d.ts.map +1 -1
  244. package/lib/codec/codec.js +4 -3
  245. package/lib/codec/codec.js.map +1 -1
  246. package/lib/core/index.d.ts +1 -1
  247. package/lib/core/index.d.ts.map +1 -1
  248. package/lib/core/index.js +1 -1
  249. package/lib/core/index.js.map +1 -1
  250. package/lib/core/rebase/index.d.ts +1 -1
  251. package/lib/core/rebase/index.d.ts.map +1 -1
  252. package/lib/core/rebase/index.js +1 -1
  253. package/lib/core/rebase/index.js.map +1 -1
  254. package/lib/core/rebase/types.d.ts +3 -1
  255. package/lib/core/rebase/types.d.ts.map +1 -1
  256. package/lib/core/rebase/types.js +1 -0
  257. package/lib/core/rebase/types.js.map +1 -1
  258. package/lib/core/schema-stored/schema.d.ts +1 -23
  259. package/lib/core/schema-stored/schema.d.ts.map +1 -1
  260. package/lib/core/schema-stored/schema.js +2 -2
  261. package/lib/core/schema-stored/schema.js.map +1 -1
  262. package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
  263. package/lib/core/tree/detachedFieldIndex.js +2 -3
  264. package/lib/core/tree/detachedFieldIndex.js.map +1 -1
  265. package/lib/core/tree/detachedFieldIndexCodecCommon.d.ts +17 -0
  266. package/lib/core/tree/detachedFieldIndexCodecCommon.d.ts.map +1 -0
  267. package/lib/core/tree/detachedFieldIndexCodecCommon.js +64 -0
  268. package/lib/core/tree/detachedFieldIndexCodecCommon.js.map +1 -0
  269. package/lib/core/tree/detachedFieldIndexCodecV1.d.ts +11 -0
  270. package/lib/core/tree/detachedFieldIndexCodecV1.d.ts.map +1 -0
  271. package/lib/core/tree/detachedFieldIndexCodecV1.js +51 -0
  272. package/lib/core/tree/detachedFieldIndexCodecV1.js.map +1 -0
  273. package/lib/core/tree/detachedFieldIndexCodecV2.d.ts +11 -0
  274. package/lib/core/tree/detachedFieldIndexCodecV2.d.ts.map +1 -0
  275. package/lib/core/tree/detachedFieldIndexCodecV2.js +45 -0
  276. package/lib/core/tree/detachedFieldIndexCodecV2.js.map +1 -0
  277. package/lib/core/tree/detachedFieldIndexCodecs.d.ts +11 -0
  278. package/lib/core/tree/detachedFieldIndexCodecs.d.ts.map +1 -0
  279. package/lib/core/tree/detachedFieldIndexCodecs.js +21 -0
  280. package/lib/core/tree/detachedFieldIndexCodecs.js.map +1 -0
  281. package/lib/core/tree/detachedFieldIndexFormatCommon.d.ts +37 -0
  282. package/lib/core/tree/detachedFieldIndexFormatCommon.d.ts.map +1 -0
  283. package/lib/core/tree/{detachedFieldIndexFormat.js → detachedFieldIndexFormatCommon.js} +13 -10
  284. package/lib/core/tree/detachedFieldIndexFormatCommon.js.map +1 -0
  285. package/lib/core/tree/detachedFieldIndexFormatV1.d.ts +13 -0
  286. package/lib/core/tree/detachedFieldIndexFormatV1.d.ts.map +1 -0
  287. package/lib/core/tree/detachedFieldIndexFormatV1.js +9 -0
  288. package/lib/core/tree/detachedFieldIndexFormatV1.js.map +1 -0
  289. package/lib/core/tree/detachedFieldIndexFormatV2.d.ts +14 -0
  290. package/lib/core/tree/detachedFieldIndexFormatV2.d.ts.map +1 -0
  291. package/lib/core/tree/detachedFieldIndexFormatV2.js +11 -0
  292. package/lib/core/tree/detachedFieldIndexFormatV2.js.map +1 -0
  293. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +9 -9
  294. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  295. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js +19 -19
  296. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  297. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +4 -2
  298. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
  299. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js +4 -4
  300. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
  301. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +50 -31
  302. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  303. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js +70 -57
  304. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  305. package/lib/feature-libraries/chunked-forest/codec/format.d.ts +20 -14
  306. package/lib/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
  307. package/lib/feature-libraries/chunked-forest/codec/format.js +17 -11
  308. package/lib/feature-libraries/chunked-forest/codec/format.js.map +1 -1
  309. package/{dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts → lib/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts} +20 -14
  310. package/lib/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts.map +1 -0
  311. package/lib/feature-libraries/chunked-forest/codec/{nodeShape.js → nodeEncoder.js} +21 -15
  312. package/lib/feature-libraries/chunked-forest/codec/nodeEncoder.js.map +1 -0
  313. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +7 -7
  314. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
  315. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +19 -19
  316. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  317. package/lib/feature-libraries/chunked-forest/codec/uncompressedEncode.js +2 -2
  318. package/lib/feature-libraries/chunked-forest/codec/uncompressedEncode.js.map +1 -1
  319. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +5 -1
  320. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  321. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +14 -2
  322. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  323. package/lib/feature-libraries/default-schema/defaultSchema.d.ts.map +1 -1
  324. package/lib/feature-libraries/default-schema/defaultSchema.js +0 -2
  325. package/lib/feature-libraries/default-schema/defaultSchema.js.map +1 -1
  326. package/lib/feature-libraries/default-schema/index.d.ts +1 -1
  327. package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
  328. package/lib/feature-libraries/default-schema/index.js +1 -1
  329. package/lib/feature-libraries/default-schema/index.js.map +1 -1
  330. package/lib/feature-libraries/default-schema/schemaChecker.d.ts +14 -4
  331. package/lib/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
  332. package/lib/feature-libraries/default-schema/schemaChecker.js +29 -24
  333. package/lib/feature-libraries/default-schema/schemaChecker.js.map +1 -1
  334. package/lib/feature-libraries/index.d.ts +1 -2
  335. package/lib/feature-libraries/index.d.ts.map +1 -1
  336. package/lib/feature-libraries/index.js +1 -2
  337. package/lib/feature-libraries/index.js.map +1 -1
  338. package/lib/feature-libraries/modular-schema/comparison.d.ts +5 -6
  339. package/lib/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
  340. package/lib/feature-libraries/modular-schema/comparison.js +14 -14
  341. package/lib/feature-libraries/modular-schema/comparison.js.map +1 -1
  342. package/lib/feature-libraries/modular-schema/modularChangeFormat.d.ts +9 -3
  343. package/lib/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +1 -1
  344. package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  345. package/lib/feature-libraries/object-forest/objectForest.js +3 -4
  346. package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
  347. package/lib/index.d.ts +1 -1
  348. package/lib/index.d.ts.map +1 -1
  349. package/lib/index.js +2 -2
  350. package/lib/index.js.map +1 -1
  351. package/lib/packageVersion.d.ts +1 -1
  352. package/lib/packageVersion.js +1 -1
  353. package/lib/packageVersion.js.map +1 -1
  354. package/lib/shared-tree/independentView.d.ts +8 -0
  355. package/lib/shared-tree/independentView.d.ts.map +1 -1
  356. package/lib/shared-tree/independentView.js +21 -10
  357. package/lib/shared-tree/independentView.js.map +1 -1
  358. package/lib/shared-tree/schematizeTree.js +1 -1
  359. package/lib/shared-tree/schematizeTree.js.map +1 -1
  360. package/lib/shared-tree/schematizingTreeView.d.ts +0 -1
  361. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  362. package/lib/shared-tree/schematizingTreeView.js +8 -11
  363. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  364. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  365. package/lib/shared-tree/sharedTree.js +2 -30
  366. package/lib/shared-tree/sharedTree.js.map +1 -1
  367. package/lib/shared-tree/treeAlpha.d.ts +20 -6
  368. package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
  369. package/lib/shared-tree/treeAlpha.js +10 -5
  370. package/lib/shared-tree/treeAlpha.js.map +1 -1
  371. package/lib/shared-tree/treeCheckout.d.ts +2 -1
  372. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  373. package/lib/shared-tree/treeCheckout.js +33 -1
  374. package/lib/shared-tree/treeCheckout.js.map +1 -1
  375. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  376. package/lib/shared-tree-core/branch.js +1 -1
  377. package/lib/shared-tree-core/branch.js.map +1 -1
  378. package/lib/simple-tree/api/conciseTree.d.ts +2 -2
  379. package/lib/simple-tree/api/conciseTree.d.ts.map +1 -1
  380. package/lib/simple-tree/api/conciseTree.js +6 -6
  381. package/lib/simple-tree/api/conciseTree.js.map +1 -1
  382. package/lib/simple-tree/api/configuration.d.ts +8 -2
  383. package/lib/simple-tree/api/configuration.d.ts.map +1 -1
  384. package/lib/simple-tree/api/configuration.js.map +1 -1
  385. package/lib/simple-tree/api/create.d.ts +8 -7
  386. package/lib/simple-tree/api/create.d.ts.map +1 -1
  387. package/lib/simple-tree/api/create.js +38 -25
  388. package/lib/simple-tree/api/create.js.map +1 -1
  389. package/lib/simple-tree/api/customTree.d.ts +25 -4
  390. package/lib/simple-tree/api/customTree.d.ts.map +1 -1
  391. package/lib/simple-tree/api/customTree.js +43 -17
  392. package/lib/simple-tree/api/customTree.js.map +1 -1
  393. package/lib/simple-tree/api/discrepancies.d.ts +98 -0
  394. package/lib/simple-tree/api/discrepancies.d.ts.map +1 -0
  395. package/lib/simple-tree/{discrepancies.js → api/discrepancies.js} +80 -206
  396. package/lib/simple-tree/api/discrepancies.js.map +1 -0
  397. package/lib/simple-tree/api/schemaCompatibilityTester.d.ts +9 -7
  398. package/lib/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
  399. package/lib/simple-tree/api/schemaCompatibilityTester.js +19 -118
  400. package/lib/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
  401. package/lib/simple-tree/api/schemaFactory.d.ts +7 -4
  402. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  403. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  404. package/lib/simple-tree/api/storedSchema.d.ts.map +1 -1
  405. package/lib/simple-tree/api/storedSchema.js +6 -2
  406. package/lib/simple-tree/api/storedSchema.js.map +1 -1
  407. package/lib/simple-tree/api/treeBeta.d.ts +2 -2
  408. package/lib/simple-tree/api/treeBeta.d.ts.map +1 -1
  409. package/lib/simple-tree/api/treeBeta.js +8 -2
  410. package/lib/simple-tree/api/treeBeta.js.map +1 -1
  411. package/lib/simple-tree/api/verboseTree.d.ts +2 -2
  412. package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
  413. package/lib/simple-tree/api/verboseTree.js +9 -9
  414. package/lib/simple-tree/api/verboseTree.js.map +1 -1
  415. package/lib/simple-tree/core/allowedTypes.d.ts +20 -4
  416. package/lib/simple-tree/core/allowedTypes.d.ts.map +1 -1
  417. package/lib/simple-tree/core/allowedTypes.js +42 -12
  418. package/lib/simple-tree/core/allowedTypes.js.map +1 -1
  419. package/lib/simple-tree/core/context.d.ts +13 -2
  420. package/lib/simple-tree/core/context.d.ts.map +1 -1
  421. package/lib/simple-tree/core/context.js +22 -9
  422. package/lib/simple-tree/core/context.js.map +1 -1
  423. package/lib/simple-tree/core/index.d.ts +2 -2
  424. package/lib/simple-tree/core/index.d.ts.map +1 -1
  425. package/lib/simple-tree/core/index.js +2 -2
  426. package/lib/simple-tree/core/index.js.map +1 -1
  427. package/lib/simple-tree/core/treeNodeKernel.d.ts +1 -1
  428. package/lib/simple-tree/core/treeNodeKernel.js +1 -1
  429. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  430. package/lib/simple-tree/core/treeNodeValid.d.ts +1 -1
  431. package/lib/simple-tree/core/treeNodeValid.d.ts.map +1 -1
  432. package/lib/simple-tree/core/treeNodeValid.js +8 -1
  433. package/lib/simple-tree/core/treeNodeValid.js.map +1 -1
  434. package/lib/simple-tree/core/walkSchema.d.ts +3 -0
  435. package/lib/simple-tree/core/walkSchema.d.ts.map +1 -1
  436. package/lib/simple-tree/core/walkSchema.js +2 -0
  437. package/lib/simple-tree/core/walkSchema.js.map +1 -1
  438. package/lib/simple-tree/createContext.d.ts +2 -0
  439. package/lib/simple-tree/createContext.d.ts.map +1 -1
  440. package/lib/simple-tree/createContext.js +3 -1
  441. package/lib/simple-tree/createContext.js.map +1 -1
  442. package/lib/simple-tree/fieldSchema.d.ts +1 -0
  443. package/lib/simple-tree/fieldSchema.d.ts.map +1 -1
  444. package/lib/simple-tree/fieldSchema.js +1 -0
  445. package/lib/simple-tree/fieldSchema.js.map +1 -1
  446. package/lib/simple-tree/index.d.ts +4 -4
  447. package/lib/simple-tree/index.d.ts.map +1 -1
  448. package/lib/simple-tree/index.js +4 -4
  449. package/lib/simple-tree/index.js.map +1 -1
  450. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  451. package/lib/simple-tree/node-kinds/array/arrayNode.js +1 -1
  452. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  453. package/lib/simple-tree/node-kinds/index.d.ts +1 -1
  454. package/lib/simple-tree/node-kinds/index.d.ts.map +1 -1
  455. package/lib/simple-tree/node-kinds/index.js +1 -1
  456. package/lib/simple-tree/node-kinds/index.js.map +1 -1
  457. package/lib/simple-tree/node-kinds/object/index.d.ts +1 -1
  458. package/lib/simple-tree/node-kinds/object/index.d.ts.map +1 -1
  459. package/lib/simple-tree/node-kinds/object/index.js +1 -1
  460. package/lib/simple-tree/node-kinds/object/index.js.map +1 -1
  461. package/lib/simple-tree/node-kinds/object/objectNode.d.ts +2 -7
  462. package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  463. package/lib/simple-tree/node-kinds/object/objectNode.js +3 -16
  464. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  465. package/lib/simple-tree/prepareForInsertion.d.ts +5 -5
  466. package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
  467. package/lib/simple-tree/prepareForInsertion.js +11 -5
  468. package/lib/simple-tree/prepareForInsertion.js.map +1 -1
  469. package/lib/simple-tree/toStoredSchema.d.ts +3 -0
  470. package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
  471. package/lib/simple-tree/toStoredSchema.js +3 -0
  472. package/lib/simple-tree/toStoredSchema.js.map +1 -1
  473. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +2 -2
  474. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  475. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +1 -1
  476. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  477. package/lib/simple-tree/walkFieldSchema.d.ts +1 -0
  478. package/lib/simple-tree/walkFieldSchema.d.ts.map +1 -1
  479. package/lib/simple-tree/walkFieldSchema.js +1 -0
  480. package/lib/simple-tree/walkFieldSchema.js.map +1 -1
  481. package/package.json +23 -23
  482. package/src/codec/codec.ts +4 -3
  483. package/src/core/index.ts +2 -0
  484. package/src/core/rebase/index.ts +2 -0
  485. package/src/core/rebase/types.ts +4 -0
  486. package/src/core/schema-stored/schema.ts +2 -26
  487. package/src/core/tree/detachedFieldIndex.ts +4 -6
  488. package/src/core/tree/detachedFieldIndexCodecCommon.ts +87 -0
  489. package/src/core/tree/{detachedFieldIndexCodec.ts → detachedFieldIndexCodecV1.ts} +22 -68
  490. package/src/core/tree/detachedFieldIndexCodecV2.ts +72 -0
  491. package/src/core/tree/detachedFieldIndexCodecs.ts +44 -0
  492. package/src/core/tree/{detachedFieldIndexFormat.ts → detachedFieldIndexFormatCommon.ts} +32 -23
  493. package/src/core/tree/detachedFieldIndexFormatV1.ts +15 -0
  494. package/src/core/tree/detachedFieldIndexFormatV2.ts +17 -0
  495. package/src/feature-libraries/chunked-forest/codec/README.md +1 -1
  496. package/src/feature-libraries/chunked-forest/codec/chunkDecoding.ts +25 -25
  497. package/src/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.ts +10 -6
  498. package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +96 -73
  499. package/src/feature-libraries/chunked-forest/codec/format.ts +20 -14
  500. package/src/feature-libraries/chunked-forest/codec/{nodeShape.ts → nodeEncoder.ts} +23 -17
  501. package/src/feature-libraries/chunked-forest/codec/schemaBasedEncode.ts +34 -34
  502. package/src/feature-libraries/chunked-forest/codec/uncompressedEncode.ts +5 -5
  503. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +10 -0
  504. package/src/feature-libraries/default-schema/defaultSchema.ts +0 -2
  505. package/src/feature-libraries/default-schema/index.ts +1 -1
  506. package/src/feature-libraries/default-schema/schemaChecker.ts +47 -30
  507. package/src/feature-libraries/index.ts +1 -3
  508. package/src/feature-libraries/modular-schema/comparison.ts +14 -29
  509. package/src/feature-libraries/object-forest/objectForest.ts +10 -6
  510. package/src/index.ts +5 -0
  511. package/src/packageVersion.ts +1 -1
  512. package/src/shared-tree/independentView.ts +45 -19
  513. package/src/shared-tree/schematizeTree.ts +1 -1
  514. package/src/shared-tree/schematizingTreeView.ts +16 -13
  515. package/src/shared-tree/sharedTree.ts +2 -42
  516. package/src/shared-tree/treeAlpha.ts +30 -18
  517. package/src/shared-tree/treeCheckout.ts +54 -10
  518. package/src/shared-tree-core/branch.ts +1 -6
  519. package/src/simple-tree/api/conciseTree.ts +9 -7
  520. package/src/simple-tree/api/configuration.ts +8 -2
  521. package/src/simple-tree/api/create.ts +49 -36
  522. package/src/simple-tree/api/customTree.ts +59 -20
  523. package/src/simple-tree/{discrepancies.ts → api/discrepancies.ts} +128 -303
  524. package/src/simple-tree/api/schemaCompatibilityTester.ts +27 -151
  525. package/src/simple-tree/api/schemaFactory.ts +7 -4
  526. package/src/simple-tree/api/storedSchema.ts +6 -9
  527. package/src/simple-tree/api/treeBeta.ts +17 -4
  528. package/src/simple-tree/api/verboseTree.ts +17 -8
  529. package/src/simple-tree/core/allowedTypes.ts +54 -21
  530. package/src/simple-tree/core/context.ts +24 -22
  531. package/src/simple-tree/core/index.ts +2 -1
  532. package/src/simple-tree/core/treeNodeKernel.ts +1 -1
  533. package/src/simple-tree/core/treeNodeValid.ts +9 -2
  534. package/src/simple-tree/core/walkSchema.ts +3 -0
  535. package/src/simple-tree/createContext.ts +6 -1
  536. package/src/simple-tree/fieldSchema.ts +1 -0
  537. package/src/simple-tree/index.ts +5 -10
  538. package/src/simple-tree/node-kinds/array/arrayNode.ts +32 -19
  539. package/src/simple-tree/node-kinds/index.ts +0 -1
  540. package/src/simple-tree/node-kinds/object/index.ts +0 -1
  541. package/src/simple-tree/node-kinds/object/objectNode.ts +9 -27
  542. package/src/simple-tree/prepareForInsertion.ts +17 -9
  543. package/src/simple-tree/toStoredSchema.ts +3 -0
  544. package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +6 -2
  545. package/src/simple-tree/walkFieldSchema.ts +1 -0
  546. package/dist/core/tree/detachedFieldIndexCodec.d.ts +0 -11
  547. package/dist/core/tree/detachedFieldIndexCodec.d.ts.map +0 -1
  548. package/dist/core/tree/detachedFieldIndexCodec.js +0 -100
  549. package/dist/core/tree/detachedFieldIndexCodec.js.map +0 -1
  550. package/dist/core/tree/detachedFieldIndexFormat.d.ts +0 -33
  551. package/dist/core/tree/detachedFieldIndexFormat.d.ts.map +0 -1
  552. package/dist/core/tree/detachedFieldIndexFormat.js.map +0 -1
  553. package/dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +0 -1
  554. package/dist/feature-libraries/chunked-forest/codec/nodeShape.js.map +0 -1
  555. package/dist/feature-libraries/initializeForest.d.ts +0 -18
  556. package/dist/feature-libraries/initializeForest.d.ts.map +0 -1
  557. package/dist/feature-libraries/initializeForest.js +0 -35
  558. package/dist/feature-libraries/initializeForest.js.map +0 -1
  559. package/dist/simple-tree/discrepancies.d.ts +0 -167
  560. package/dist/simple-tree/discrepancies.d.ts.map +0 -1
  561. package/dist/simple-tree/discrepancies.js +0 -382
  562. package/dist/simple-tree/discrepancies.js.map +0 -1
  563. package/lib/core/tree/detachedFieldIndexCodec.d.ts +0 -11
  564. package/lib/core/tree/detachedFieldIndexCodec.d.ts.map +0 -1
  565. package/lib/core/tree/detachedFieldIndexCodec.js +0 -96
  566. package/lib/core/tree/detachedFieldIndexCodec.js.map +0 -1
  567. package/lib/core/tree/detachedFieldIndexFormat.d.ts +0 -33
  568. package/lib/core/tree/detachedFieldIndexFormat.d.ts.map +0 -1
  569. package/lib/core/tree/detachedFieldIndexFormat.js.map +0 -1
  570. package/lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +0 -1
  571. package/lib/feature-libraries/chunked-forest/codec/nodeShape.js.map +0 -1
  572. package/lib/feature-libraries/initializeForest.d.ts +0 -18
  573. package/lib/feature-libraries/initializeForest.d.ts.map +0 -1
  574. package/lib/feature-libraries/initializeForest.js +0 -31
  575. package/lib/feature-libraries/initializeForest.js.map +0 -1
  576. package/lib/simple-tree/discrepancies.d.ts +0 -167
  577. package/lib/simple-tree/discrepancies.d.ts.map +0 -1
  578. package/lib/simple-tree/discrepancies.js.map +0 -1
  579. package/src/feature-libraries/initializeForest.ts +0 -55
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluidframework/tree",
3
- "version": "2.51.0",
3
+ "version": "2.52.0",
4
4
  "description": "Distributed tree",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -101,17 +101,17 @@
101
101
  "temp-directory": "nyc/.nyc_output"
102
102
  },
103
103
  "dependencies": {
104
- "@fluid-internal/client-utils": "~2.51.0",
105
- "@fluidframework/container-runtime": "~2.51.0",
106
- "@fluidframework/core-interfaces": "~2.51.0",
107
- "@fluidframework/core-utils": "~2.51.0",
108
- "@fluidframework/datastore-definitions": "~2.51.0",
109
- "@fluidframework/driver-definitions": "~2.51.0",
110
- "@fluidframework/id-compressor": "~2.51.0",
111
- "@fluidframework/runtime-definitions": "~2.51.0",
112
- "@fluidframework/runtime-utils": "~2.51.0",
113
- "@fluidframework/shared-object-base": "~2.51.0",
114
- "@fluidframework/telemetry-utils": "~2.51.0",
104
+ "@fluid-internal/client-utils": "~2.52.0",
105
+ "@fluidframework/container-runtime": "~2.52.0",
106
+ "@fluidframework/core-interfaces": "~2.52.0",
107
+ "@fluidframework/core-utils": "~2.52.0",
108
+ "@fluidframework/datastore-definitions": "~2.52.0",
109
+ "@fluidframework/driver-definitions": "~2.52.0",
110
+ "@fluidframework/id-compressor": "~2.52.0",
111
+ "@fluidframework/runtime-definitions": "~2.52.0",
112
+ "@fluidframework/runtime-utils": "~2.52.0",
113
+ "@fluidframework/shared-object-base": "~2.52.0",
114
+ "@fluidframework/telemetry-utils": "~2.52.0",
115
115
  "@sinclair/typebox": "^0.34.13",
116
116
  "@tylerbu/sorted-btree-es6": "^1.8.0",
117
117
  "@types/ungap__structured-clone": "^1.2.0",
@@ -121,20 +121,20 @@
121
121
  "devDependencies": {
122
122
  "@arethetypeswrong/cli": "^0.17.1",
123
123
  "@biomejs/biome": "~1.9.3",
124
- "@fluid-internal/mocha-test-setup": "~2.51.0",
125
- "@fluid-private/stochastic-test-utils": "~2.51.0",
126
- "@fluid-private/test-dds-utils": "~2.51.0",
127
- "@fluid-private/test-drivers": "~2.51.0",
124
+ "@fluid-internal/mocha-test-setup": "~2.52.0",
125
+ "@fluid-private/stochastic-test-utils": "~2.52.0",
126
+ "@fluid-private/test-dds-utils": "~2.52.0",
127
+ "@fluid-private/test-drivers": "~2.52.0",
128
128
  "@fluid-tools/benchmark": "^0.51.0",
129
- "@fluid-tools/build-cli": "^0.56.0",
129
+ "@fluid-tools/build-cli": "^0.57.0",
130
130
  "@fluidframework/build-common": "^2.0.3",
131
- "@fluidframework/build-tools": "^0.56.0",
132
- "@fluidframework/container-definitions": "~2.51.0",
133
- "@fluidframework/container-loader": "~2.51.0",
131
+ "@fluidframework/build-tools": "^0.57.0",
132
+ "@fluidframework/container-definitions": "~2.52.0",
133
+ "@fluidframework/container-loader": "~2.52.0",
134
134
  "@fluidframework/eslint-config-fluid": "^5.7.4",
135
- "@fluidframework/test-runtime-utils": "~2.51.0",
136
- "@fluidframework/test-utils": "~2.51.0",
137
- "@fluidframework/tree-previous": "npm:@fluidframework/tree@2.50.0",
135
+ "@fluidframework/test-runtime-utils": "~2.52.0",
136
+ "@fluidframework/test-utils": "~2.52.0",
137
+ "@fluidframework/tree-previous": "npm:@fluidframework/tree@2.51.0",
138
138
  "@microsoft/api-extractor": "7.52.8",
139
139
  "@types/diff": "^3.5.1",
140
140
  "@types/easy-table": "^0.0.32",
@@ -409,9 +409,10 @@ export enum FluidClientVersion {
409
409
  // then update it to "2.001" once we actually have the opt in working.
410
410
  // v2_1 = v2_0,
411
411
 
412
- /** Fluid Framework Client 2.41 and newer. */
413
- // If we land some new formats in 2.41, we can enable selecting
414
- // v2_41 = 2.041,
412
+ /** Fluid Framework Client 2.52 and newer. */
413
+ // New formats introduced in 2.52:
414
+ // - DetachedFieldIndex FormatV2
415
+ v2_52 = 2.052,
415
416
 
416
417
  /**
417
418
  * Enable unreleased and unfinished features.
package/src/core/index.ts CHANGED
@@ -192,10 +192,12 @@ export {
192
192
  revisionMetadataSourceFromInfo,
193
193
  type RevisionInfo,
194
194
  type EncodedRevisionTag,
195
+ type EncodedStableId,
195
196
  type EncodedChangeAtomId,
196
197
  taggedAtomId,
197
198
  taggedOptAtomId,
198
199
  offsetChangeAtomId,
200
+ StableIdSchema,
199
201
  subtractChangeAtomIds,
200
202
  replaceAtomRevisions,
201
203
  replaceChange,
@@ -16,6 +16,7 @@ export {
16
16
  RevisionTagSchema,
17
17
  type EncodedRevisionTag,
18
18
  type EncodedChangeAtomId,
19
+ type EncodedStableId,
19
20
  type ChangesetLocalId,
20
21
  type ChangeAtomId,
21
22
  type ChangeAtomIdMap,
@@ -23,6 +24,7 @@ export {
23
24
  taggedAtomId,
24
25
  taggedOptAtomId,
25
26
  offsetChangeAtomId,
27
+ StableIdSchema,
26
28
  subtractChangeAtomIds,
27
29
  replaceAtomRevisions,
28
30
  type ChangeAtomIdRangeMap,
@@ -7,6 +7,7 @@ import type {
7
7
  OpSpaceCompressedId,
8
8
  SessionId,
9
9
  SessionSpaceCompressedId,
10
+ StableId,
10
11
  } from "@fluidframework/id-compressor";
11
12
  import { Type } from "@sinclair/typebox";
12
13
 
@@ -38,6 +39,9 @@ export const RevisionTagSchema = Type.Union([
38
39
  brandedNumberType<Exclude<EncodedRevisionTag, string>>(),
39
40
  ]);
40
41
 
42
+ export type EncodedStableId = Brand<StableId, "EncodedStableId">;
43
+ export const StableIdSchema = Type.String();
44
+
41
45
  /**
42
46
  * An ID which is unique within a revision of a `ModularChangeset`.
43
47
  * A `ModularChangeset` which is a composition of multiple revisions may contain duplicate `ChangesetLocalId`s,
@@ -110,9 +110,6 @@ export interface SchemaAndPolicy {
110
110
  * This contains information that describes the semantics of things which can be referenced in stored schema.
111
111
  * For example, field kind identifiers refer to specific field kinds, which imply specific rules around what is valid in a given field (the multiplicity).
112
112
  * This structure provides such information, allowing it to be possible to determine if a given tree complies with a particular stored schema.
113
- *
114
- * TODO: AB#43546
115
- * Some additional data which is not needed to define compatibility with a given stored schema is currently included here, and should be removed.
116
113
  */
117
114
  export interface SchemaPolicy {
118
115
  /**
@@ -123,27 +120,6 @@ export interface SchemaPolicy {
123
120
  * and will be unable to process any changes that use those FieldKinds.
124
121
  */
125
122
  readonly fieldKinds: ReadonlyMap<FieldKindIdentifier, FieldKindData>;
126
-
127
- /**
128
- * If true, new content inserted into the tree should be validated against the stored schema.
129
- * @remarks
130
- * TODO: AB#43546: This is not information used to interpret the stored schema: this configuration should be moved elsewhere.
131
- */
132
- readonly validateSchema: boolean;
133
-
134
- /**
135
- * Whether to allow a document to be opened when a particular stored schema (identified by `identifier`)
136
- * contains optional fields that are not known to the view schema.
137
- *
138
- * @privateRemarks
139
- * Plumbing this in via `SchemaPolicy` avoids needing to walk the view schema representation repeatedly in places
140
- * that need it (schema validation, view vs stored compatibility checks).
141
- *
142
- * TODO: AB#43546
143
- * This is not information used to interpret the stored schema: it is instead about view schema, and how compatible they are with a stored schema.
144
- * SchemaCompatibilityTester should be updated to not store this table in here, and then this field should be removed.
145
- */
146
- allowUnknownOptionalFields(identifier: TreeNodeSchemaIdentifier): boolean;
147
123
  }
148
124
 
149
125
  /**
@@ -179,7 +155,7 @@ export interface TreeFieldStoredSchema {
179
155
  *
180
156
  * 2. The schema used for out of schema fields (which thus must be empty/not exist) on object and leaf nodes.
181
157
  */
182
- export const forbiddenFieldKindIdentifier = "Forbidden";
158
+ export const forbiddenFieldKindIdentifier: FieldKindIdentifier = brand("Forbidden");
183
159
 
184
160
  /**
185
161
  * A schema for empty fields (fields which must always be empty).
@@ -187,7 +163,7 @@ export const forbiddenFieldKindIdentifier = "Forbidden";
187
163
  */
188
164
  export const storedEmptyFieldSchema: TreeFieldStoredSchema = {
189
165
  // This kind requires the field to be empty.
190
- kind: brand(forbiddenFieldKindIdentifier),
166
+ kind: forbiddenFieldKindIdentifier,
191
167
  // This type set also forces the field to be empty not not allowing any types as all.
192
168
  types: new Set(),
193
169
  persistedMetadata: undefined,
@@ -28,8 +28,6 @@ import type { RevisionTag, RevisionTagCodec } from "../rebase/index.js";
28
28
  import type { FieldKey } from "../schema-stored/index.js";
29
29
 
30
30
  import type * as Delta from "./delta.js";
31
- import { makeDetachedNodeToFieldCodec } from "./detachedFieldIndexCodec.js";
32
- import type { Format } from "./detachedFieldIndexFormat.js";
33
31
  import type {
34
32
  DetachedField,
35
33
  DetachedFieldSummaryData,
@@ -37,6 +35,7 @@ import type {
37
35
  Major,
38
36
  Minor,
39
37
  } from "./detachedFieldIndexTypes.js";
38
+ import { makeDetachedFieldIndexCodec } from "./detachedFieldIndexCodecs.js";
40
39
 
41
40
  /**
42
41
  * The tree index records detached field IDs and associates them with a change atom ID.
@@ -59,7 +58,7 @@ export class DetachedFieldIndex {
59
58
  Delta.DetachedNodeId
60
59
  > = new Map();
61
60
 
62
- private readonly codec: IJsonCodec<DetachedFieldSummaryData, Format>;
61
+ private readonly codec: IJsonCodec<DetachedFieldSummaryData>;
63
62
  private readonly options: CodecWriteOptions;
64
63
 
65
64
  /**
@@ -87,8 +86,7 @@ export class DetachedFieldIndex {
87
86
  jsonValidator: noopValidator,
88
87
  oldestCompatibleClient: FluidClientVersion.v2_0,
89
88
  };
90
- // TODO: this should take in CodecWriteOptions, and use it to pick the write version.
91
- this.codec = makeDetachedNodeToFieldCodec(revisionTagCodec, this.options, idCompressor);
89
+ this.codec = makeDetachedFieldIndexCodec(revisionTagCodec, this.options, idCompressor);
92
90
  }
93
91
 
94
92
  public clone(): DetachedFieldIndex {
@@ -337,7 +335,7 @@ export class DetachedFieldIndex {
337
335
  * Loads the tree index from the given string, this overrides any existing data.
338
336
  */
339
337
  public loadData(data: JsonCompatibleReadOnly): void {
340
- const detachedFieldIndex: DetachedFieldSummaryData = this.codec.decode(data as Format);
338
+ const detachedFieldIndex: DetachedFieldSummaryData = this.codec.decode(data);
341
339
 
342
340
  this.rootIdAllocator = idAllocatorFromMaxId(
343
341
  detachedFieldIndex.maxId,
@@ -0,0 +1,87 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import {
7
+ type ICodecOptions,
8
+ type IJsonCodec,
9
+ makeVersionedValidatedCodec,
10
+ } from "../../codec/index.js";
11
+ import { hasSingle } from "../../util/index.js";
12
+
13
+ import {
14
+ Format,
15
+ type EncodedRootsForRevision,
16
+ type RootRanges,
17
+ } from "./detachedFieldIndexFormatCommon.js";
18
+ import type {
19
+ DetachedField,
20
+ DetachedFieldSummaryData,
21
+ Major,
22
+ } from "./detachedFieldIndexTypes.js";
23
+ import type { Static, TSchema } from "@sinclair/typebox";
24
+
25
+ // Return type is intentionally derived.
26
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
27
+ export function makeDetachedFieldIndexCodecFromMajorCodec<
28
+ TEncodedRevisionTag,
29
+ TEncodedRevisionTagSchema extends TSchema,
30
+ TVersion extends number,
31
+ >(
32
+ options: ICodecOptions,
33
+ majorCodec: IJsonCodec<Major, TEncodedRevisionTag>,
34
+ version: TVersion,
35
+ encodedRevisionTagSchema: TEncodedRevisionTagSchema,
36
+ ) {
37
+ const formatSchema = Format(version, encodedRevisionTagSchema);
38
+ return makeVersionedValidatedCodec(options, new Set([version]), formatSchema, {
39
+ encode: (data: DetachedFieldSummaryData): Static<typeof formatSchema> => {
40
+ const rootsForRevisions: EncodedRootsForRevision[] = [];
41
+ for (const [major, innerMap] of data.data) {
42
+ const encodedRevision = majorCodec.encode(major);
43
+ const rootRanges: RootRanges = [];
44
+ for (const [minor, detachedField] of innerMap) {
45
+ rootRanges.push([minor, detachedField.root]);
46
+ }
47
+ if (hasSingle(rootRanges)) {
48
+ const firstRootRange = rootRanges[0];
49
+ const rootsForRevision: EncodedRootsForRevision = [
50
+ encodedRevision,
51
+ firstRootRange[0],
52
+ firstRootRange[1],
53
+ ];
54
+ rootsForRevisions.push(rootsForRevision);
55
+ } else {
56
+ const rootsForRevision: EncodedRootsForRevision = [encodedRevision, rootRanges];
57
+ rootsForRevisions.push(rootsForRevision);
58
+ }
59
+ }
60
+ const encoded: Static<typeof formatSchema> = {
61
+ version,
62
+ data: rootsForRevisions,
63
+ maxId: data.maxId,
64
+ };
65
+ return encoded;
66
+ },
67
+ decode: (parsed: Static<typeof formatSchema>): DetachedFieldSummaryData => {
68
+ const map = new Map();
69
+ for (const rootsForRevision of parsed.data) {
70
+ const innerMap = new Map<number, DetachedField>();
71
+ if (rootsForRevision.length === 2) {
72
+ for (const [minor, root] of rootsForRevision[1]) {
73
+ innerMap.set(minor, { root });
74
+ }
75
+ } else {
76
+ innerMap.set(rootsForRevision[1], { root: rootsForRevision[2] });
77
+ }
78
+ const revision = rootsForRevision[0] as TEncodedRevisionTag;
79
+ map.set(majorCodec.decode(revision), innerMap);
80
+ }
81
+ return {
82
+ data: map,
83
+ maxId: parsed.maxId,
84
+ };
85
+ },
86
+ });
87
+ }
@@ -6,27 +6,19 @@
6
6
  import { assert } from "@fluidframework/core-utils/internal";
7
7
  import type { IIdCompressor } from "@fluidframework/id-compressor";
8
8
 
9
+ import type { ICodecOptions, IJsonCodec } from "../../codec/index.js";
9
10
  import {
10
- type ICodecOptions,
11
- type IJsonCodec,
12
- makeVersionedValidatedCodec,
13
- } from "../../codec/index.js";
14
- import { hasSingle } from "../../util/index.js";
15
- import type { EncodedRevisionTag, RevisionTagCodec, RevisionTag } from "../rebase/index.js";
11
+ type EncodedRevisionTag,
12
+ type RevisionTagCodec,
13
+ type RevisionTag,
14
+ RevisionTagSchema,
15
+ } from "../rebase/index.js";
16
16
 
17
- import {
18
- type EncodedRootsForRevision,
19
- Format,
20
- type RootRanges,
21
- version,
22
- } from "./detachedFieldIndexFormat.js";
23
- import type {
24
- DetachedField,
25
- DetachedFieldSummaryData,
26
- Major,
27
- } from "./detachedFieldIndexTypes.js";
17
+ import { type FormatV1, version1 } from "./detachedFieldIndexFormatV1.js";
18
+ import type { DetachedFieldSummaryData, Major } from "./detachedFieldIndexTypes.js";
19
+ import { makeDetachedFieldIndexCodecFromMajorCodec } from "./detachedFieldIndexCodecCommon.js";
28
20
 
29
- class MajorCodec implements IJsonCodec<Major> {
21
+ class MajorCodec implements IJsonCodec<Major, EncodedRevisionTag> {
30
22
  public constructor(
31
23
  private readonly revisionTagCodec: RevisionTagCodec,
32
24
  private readonly options: ICodecOptions,
@@ -48,6 +40,10 @@ class MajorCodec implements IJsonCodec<Major> {
48
40
  * This assert is valid because the revision for an acked edit will have already been finalized, and a revision
49
41
  * for a local-only edit will be finalizable at summarization time (local edits can only occur on a summarizing client
50
42
  * if they're created while detached, and local ids made while detached are finalized before generating the attach summary).
43
+ *
44
+ * WARNING: the above is true when the whole container transitions from detached to attached,
45
+ * but not when the container is already attached and it's just the shared-tree that is attaching.
46
+ * The assert below will fail in such a scenario. This is addressed in the v2 codec.
51
47
  */
52
48
  assert(
53
49
  id === "root" || id >= 0,
@@ -69,58 +65,16 @@ class MajorCodec implements IJsonCodec<Major> {
69
65
  }
70
66
  }
71
67
 
72
- export function makeDetachedNodeToFieldCodec(
68
+ export function makeDetachedNodeToFieldCodecV1(
73
69
  revisionTagCodec: RevisionTagCodec,
74
70
  options: ICodecOptions,
75
71
  idCompressor: IIdCompressor,
76
- ): IJsonCodec<DetachedFieldSummaryData, Format> {
72
+ ): IJsonCodec<DetachedFieldSummaryData, FormatV1> {
77
73
  const majorCodec = new MajorCodec(revisionTagCodec, options, idCompressor);
78
- return makeVersionedValidatedCodec(options, new Set([version]), Format, {
79
- encode: (data: DetachedFieldSummaryData): Format => {
80
- const rootsForRevisions: EncodedRootsForRevision[] = [];
81
- for (const [major, innerMap] of data.data) {
82
- const encodedRevision = majorCodec.encode(major);
83
- const rootRanges: RootRanges = [];
84
- for (const [minor, detachedField] of innerMap) {
85
- rootRanges.push([minor, detachedField.root]);
86
- }
87
- if (hasSingle(rootRanges)) {
88
- const firstRootRange = rootRanges[0];
89
- const rootsForRevision: EncodedRootsForRevision = [
90
- encodedRevision,
91
- firstRootRange[0],
92
- firstRootRange[1],
93
- ];
94
- rootsForRevisions.push(rootsForRevision);
95
- } else {
96
- const rootsForRevision: EncodedRootsForRevision = [encodedRevision, rootRanges];
97
- rootsForRevisions.push(rootsForRevision);
98
- }
99
- }
100
- const encoded: Format = {
101
- version,
102
- data: rootsForRevisions,
103
- maxId: data.maxId,
104
- };
105
- return encoded;
106
- },
107
- decode: (parsed: Format): DetachedFieldSummaryData => {
108
- const map = new Map();
109
- for (const rootsForRevision of parsed.data) {
110
- const innerMap = new Map<number, DetachedField>();
111
- if (rootsForRevision.length === 2) {
112
- for (const [minor, root] of rootsForRevision[1]) {
113
- innerMap.set(minor, { root });
114
- }
115
- } else {
116
- innerMap.set(rootsForRevision[1], { root: rootsForRevision[2] });
117
- }
118
- map.set(majorCodec.decode(rootsForRevision[0]), innerMap);
119
- }
120
- return {
121
- data: map,
122
- maxId: parsed.maxId,
123
- };
124
- },
125
- });
74
+ return makeDetachedFieldIndexCodecFromMajorCodec(
75
+ options,
76
+ majorCodec,
77
+ version1,
78
+ RevisionTagSchema,
79
+ );
126
80
  }
@@ -0,0 +1,72 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { assert } from "@fluidframework/core-utils/internal";
7
+ import type { IIdCompressor, StableId } from "@fluidframework/id-compressor";
8
+
9
+ import type { ICodecOptions, IJsonCodec } from "../../codec/index.js";
10
+ import type { EncodedRevisionTag, RevisionTagCodec, RevisionTag } from "../rebase/index.js";
11
+
12
+ import {
13
+ type FormatV2,
14
+ StableOrFinalRevisionTag,
15
+ version2,
16
+ } from "./detachedFieldIndexFormatV2.js";
17
+ import type { DetachedFieldSummaryData, Major } from "./detachedFieldIndexTypes.js";
18
+ import { makeDetachedFieldIndexCodecFromMajorCodec } from "./detachedFieldIndexCodecCommon.js";
19
+ import { isStableId } from "@fluidframework/id-compressor/internal";
20
+
21
+ class MajorCodec implements IJsonCodec<Major> {
22
+ public constructor(
23
+ private readonly revisionTagCodec: RevisionTagCodec,
24
+ private readonly options: ICodecOptions,
25
+ private readonly idCompressor: IIdCompressor,
26
+ ) {}
27
+
28
+ public encode(major: Major): EncodedRevisionTag | StableId {
29
+ assert(major !== undefined, 0xbfb /* Unexpected undefined revision */);
30
+ const id = this.revisionTagCodec.encode(major);
31
+
32
+ if (id !== "root" && id < 0) {
33
+ /**
34
+ * This code path handles the case where the major revision is not finalized.
35
+ * This can happen the SharedTree is being attached to an already attached container.
36
+ */
37
+ assert(major !== "root", 0xbfc /* Major revision cannot be 'root' */);
38
+ const long = this.idCompressor.decompress(major);
39
+ return long;
40
+ }
41
+ return id;
42
+ }
43
+
44
+ public decode(major: EncodedRevisionTag | StableId): RevisionTag {
45
+ assert(
46
+ major === "root" || (typeof major === "string" && isStableId(major)) || major >= 0,
47
+ 0xbfd /* Expected root, stable, or final compressed id */,
48
+ );
49
+ if (typeof major === "string" && isStableId(major)) {
50
+ return this.idCompressor.recompress(major);
51
+ }
52
+ return this.revisionTagCodec.decode(major, {
53
+ originatorId: this.revisionTagCodec.localSessionId,
54
+ idCompressor: this.idCompressor,
55
+ revision: undefined,
56
+ });
57
+ }
58
+ }
59
+
60
+ export function makeDetachedNodeToFieldCodecV2(
61
+ revisionTagCodec: RevisionTagCodec,
62
+ options: ICodecOptions,
63
+ idCompressor: IIdCompressor,
64
+ ): IJsonCodec<DetachedFieldSummaryData, FormatV2> {
65
+ const majorCodec = new MajorCodec(revisionTagCodec, options, idCompressor);
66
+ return makeDetachedFieldIndexCodecFromMajorCodec(
67
+ options,
68
+ majorCodec,
69
+ version2,
70
+ StableOrFinalRevisionTag,
71
+ );
72
+ }
@@ -0,0 +1,44 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import type { IIdCompressor } from "@fluidframework/id-compressor";
7
+
8
+ import {
9
+ type CodecWriteOptions,
10
+ FluidClientVersion,
11
+ type ICodecFamily,
12
+ type IJsonCodec,
13
+ makeCodecFamily,
14
+ makeVersionDispatchingCodec,
15
+ } from "../../codec/index.js";
16
+ import type { RevisionTagCodec } from "../rebase/index.js";
17
+
18
+ import { version1 } from "./detachedFieldIndexFormatV1.js";
19
+ import { version2 } from "./detachedFieldIndexFormatV2.js";
20
+ import { makeDetachedNodeToFieldCodecV1 } from "./detachedFieldIndexCodecV1.js";
21
+ import { makeDetachedNodeToFieldCodecV2 } from "./detachedFieldIndexCodecV2.js";
22
+ import type { DetachedFieldSummaryData } from "./detachedFieldIndexTypes.js";
23
+
24
+ export function makeDetachedFieldIndexCodec(
25
+ revisionTagCodec: RevisionTagCodec,
26
+ options: CodecWriteOptions,
27
+ idCompressor: IIdCompressor,
28
+ ): IJsonCodec<DetachedFieldSummaryData> {
29
+ const family = makeDetachedFieldIndexCodecFamily(revisionTagCodec, options, idCompressor);
30
+ const writeVersion =
31
+ options.oldestCompatibleClient < FluidClientVersion.v2_52 ? version1 : version2;
32
+ return makeVersionDispatchingCodec(family, { ...options, writeVersion });
33
+ }
34
+
35
+ export function makeDetachedFieldIndexCodecFamily(
36
+ revisionTagCodec: RevisionTagCodec,
37
+ options: CodecWriteOptions,
38
+ idCompressor: IIdCompressor,
39
+ ): ICodecFamily<DetachedFieldSummaryData> {
40
+ return makeCodecFamily([
41
+ [version1, makeDetachedNodeToFieldCodecV1(revisionTagCodec, options, idCompressor)],
42
+ [version2, makeDetachedNodeToFieldCodecV2(revisionTagCodec, options, idCompressor)],
43
+ ]);
44
+ }
@@ -3,15 +3,12 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { type Static, Type } from "@sinclair/typebox";
6
+ import { type Static, type TSchema, Type } from "@sinclair/typebox";
7
7
 
8
8
  import { brandedNumberType } from "../../util/index.js";
9
- import { RevisionTagSchema } from "../rebase/index.js";
10
9
 
11
10
  import type { ForestRootId } from "./detachedFieldIndexTypes.js";
12
11
 
13
- export const version = 1.0;
14
-
15
12
  /**
16
13
  * The ID of a detached node. Is not globally unique on.
17
14
  * A `RevisionTag` + `DetachId` pair is globally unique and eventually consistent across clients.
@@ -22,7 +19,10 @@ export const DetachId = Type.Number({ multipleOf: 1 });
22
19
  * The ID of a root node in the forest associated with the owning checkout. Is unique for that forest.
23
20
  * Is not consistent across clients.
24
21
  */
25
- const ForestRootIdSchema = brandedNumberType<ForestRootId>({ minimum: -1, multipleOf: 1 });
22
+ export const ForestRootIdSchema = brandedNumberType<ForestRootId>({
23
+ minimum: -1,
24
+ multipleOf: 1,
25
+ });
26
26
 
27
27
  /**
28
28
  * A mapping from a range of the detached node IDs the corresponding range root IDs.
@@ -43,21 +43,30 @@ export type RootRanges = Static<typeof RootRanges>;
43
43
  /**
44
44
  * For all the roots detached in a revision, represents a mapping from the detached node ID to corresponding root ID.
45
45
  */
46
- export const EncodedRootsForRevision = Type.Union([
47
- // Used to represent a revision in which more than one node were detached
48
- Type.Tuple([RevisionTagSchema, RootRanges]),
49
- // Used to represent a revision in which a single node was detached
50
- Type.Tuple([RevisionTagSchema, DetachId, ForestRootIdSchema]),
51
- ]);
52
- export type EncodedRootsForRevision = Static<typeof EncodedRootsForRevision>;
53
-
54
- export const Format = Type.Object(
55
- {
56
- version: Type.Literal(version),
57
- data: Type.Array(EncodedRootsForRevision),
58
- maxId: ForestRootIdSchema,
59
- },
60
- { additionalProperties: false },
61
- );
62
-
63
- export type Format = Static<typeof Format>;
46
+ // Return type is intentionally derived.
47
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
48
+ export const EncodedRootsForRevision = <Schema extends TSchema>(tRevisionTag: Schema) =>
49
+ Type.Union([
50
+ // Used to represent a revision in which more than one node were detached
51
+ Type.Tuple([tRevisionTag, RootRanges]),
52
+ // Used to represent a revision in which a single node was detached
53
+ Type.Tuple([tRevisionTag, DetachId, ForestRootIdSchema]),
54
+ ]);
55
+ export type EncodedRootsForRevision = Static<ReturnType<typeof EncodedRootsForRevision>>;
56
+
57
+ export const Format = <TVersion extends number, TRevisionTagSchema extends TSchema>(
58
+ tVersion: TVersion,
59
+ tRevisionTag: TRevisionTagSchema,
60
+ // Return type is intentionally derived.
61
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
62
+ ) =>
63
+ Type.Object(
64
+ {
65
+ version: Type.Literal(tVersion),
66
+ data: Type.Array(EncodedRootsForRevision(tRevisionTag)),
67
+ maxId: ForestRootIdSchema,
68
+ },
69
+ { additionalProperties: false },
70
+ );
71
+
72
+ export type Format = Static<ReturnType<typeof Format>>;
@@ -0,0 +1,15 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import type { Static } from "@sinclair/typebox";
7
+
8
+ import { Format } from "./detachedFieldIndexFormatCommon.js";
9
+ import { RevisionTagSchema } from "../rebase/index.js";
10
+
11
+ export const version1 = 1.0;
12
+
13
+ export const FormatV1 = Format(version1, RevisionTagSchema);
14
+
15
+ export type FormatV1 = Static<typeof FormatV1>;
@@ -0,0 +1,17 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { Type, type Static } from "@sinclair/typebox";
7
+
8
+ import { Format } from "./detachedFieldIndexFormatCommon.js";
9
+ import { RevisionTagSchema, StableIdSchema } from "../rebase/index.js";
10
+
11
+ export const version2 = 2.0;
12
+
13
+ export const StableOrFinalRevisionTag = Type.Union([RevisionTagSchema, StableIdSchema]);
14
+
15
+ export const FormatV2 = Format(version2, StableOrFinalRevisionTag);
16
+
17
+ export type FormatV2 = Static<typeof FormatV2>;