@fluidframework/tree 2.0.0-dev-rc.5.0.0.271262 → 2.0.0-dev-rc.5.0.0.272251

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 (458) hide show
  1. package/api-extractor/api-extractor-lint-beta.cjs.json +5 -0
  2. package/api-extractor/api-extractor-lint-beta.esm.json +5 -0
  3. package/api-extractor/api-extractor-lint-bundle.json +5 -0
  4. package/api-extractor/api-extractor-lint-public.cjs.json +5 -0
  5. package/api-extractor/api-extractor-lint-public.esm.json +5 -0
  6. package/api-report/tree.alpha.api.md +2 -13
  7. package/api-report/tree.beta.api.md +2 -13
  8. package/api-report/tree.public.api.md +2 -13
  9. package/dist/beta.d.ts +0 -1
  10. package/dist/codec/codec.js +0 -1
  11. package/dist/codec/codec.js.map +1 -1
  12. package/dist/codec/discriminatedUnions.js +0 -1
  13. package/dist/codec/discriminatedUnions.js.map +1 -1
  14. package/dist/core/change-family/editBuilder.js +0 -2
  15. package/dist/core/change-family/editBuilder.js.map +1 -1
  16. package/dist/core/rebase/revisionTagCodec.js +0 -2
  17. package/dist/core/rebase/revisionTagCodec.js.map +1 -1
  18. package/dist/core/schema-stored/schema.js +0 -4
  19. package/dist/core/schema-stored/schema.js.map +1 -1
  20. package/dist/core/schema-stored/storedSchemaRepository.js +1 -3
  21. package/dist/core/schema-stored/storedSchemaRepository.js.map +1 -1
  22. package/dist/core/schema-view/view.js +0 -2
  23. package/dist/core/schema-view/view.js.map +1 -1
  24. package/dist/core/tree/anchorSet.js +46 -51
  25. package/dist/core/tree/anchorSet.js.map +1 -1
  26. package/dist/core/tree/detachedFieldIndex.js +2 -8
  27. package/dist/core/tree/detachedFieldIndex.js.map +1 -1
  28. package/dist/core/tree/detachedFieldIndexCodec.js +0 -3
  29. package/dist/core/tree/detachedFieldIndexCodec.js.map +1 -1
  30. package/dist/core/tree/sparseTree.js +11 -15
  31. package/dist/core/tree/sparseTree.js.map +1 -1
  32. package/dist/domains/schemaBuilder.js +70 -70
  33. package/dist/domains/schemaBuilder.js.map +1 -1
  34. package/dist/events/events.js +1 -2
  35. package/dist/events/events.js.map +1 -1
  36. package/dist/feature-libraries/chunked-forest/basicChunk.js +1 -14
  37. package/dist/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
  38. package/dist/feature-libraries/chunked-forest/chunkTree.js +6 -13
  39. package/dist/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  40. package/dist/feature-libraries/chunked-forest/chunkedForest.js +2 -9
  41. package/dist/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  42. package/dist/feature-libraries/chunked-forest/codec/chunkCodecUtilities.js +3 -1
  43. package/dist/feature-libraries/chunked-forest/codec/chunkCodecUtilities.js.map +1 -1
  44. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +13 -3
  45. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  46. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js +6 -11
  47. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  48. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +3 -3
  49. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
  50. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js +2 -5
  51. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
  52. package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js +0 -1
  53. package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
  54. package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts +2 -1
  55. package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  56. package/dist/feature-libraries/chunked-forest/codec/codecs.js +4 -1
  57. package/dist/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  58. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js +13 -25
  59. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  60. package/dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +1 -1
  61. package/dist/feature-libraries/chunked-forest/codec/nodeShape.js +5 -8
  62. package/dist/feature-libraries/chunked-forest/codec/nodeShape.js.map +1 -1
  63. package/dist/feature-libraries/chunked-forest/sequenceChunk.js +0 -1
  64. package/dist/feature-libraries/chunked-forest/sequenceChunk.js.map +1 -1
  65. package/dist/feature-libraries/chunked-forest/uniformChunk.js +5 -40
  66. package/dist/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
  67. package/dist/feature-libraries/default-schema/defaultEditBuilder.js +0 -2
  68. package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  69. package/dist/feature-libraries/detachedFieldIndexSummarizer.js +1 -2
  70. package/dist/feature-libraries/detachedFieldIndexSummarizer.js.map +1 -1
  71. package/dist/feature-libraries/editableTreeBinder.js +12 -13
  72. package/dist/feature-libraries/editableTreeBinder.js.map +1 -1
  73. package/dist/feature-libraries/flex-map-tree/mapTreeNode.js +11 -12
  74. package/dist/feature-libraries/flex-map-tree/mapTreeNode.js.map +1 -1
  75. package/dist/feature-libraries/flex-tree/context.js +3 -7
  76. package/dist/feature-libraries/flex-tree/context.js.map +1 -1
  77. package/dist/feature-libraries/flex-tree/lazyEntity.js +22 -13
  78. package/dist/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
  79. package/dist/feature-libraries/flex-tree/lazyField.js +0 -6
  80. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  81. package/dist/feature-libraries/flex-tree/lazyNode.js +17 -10
  82. package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  83. package/dist/feature-libraries/forest-summary/forestSummarizer.js +1 -6
  84. package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  85. package/dist/feature-libraries/index.d.ts +1 -1
  86. package/dist/feature-libraries/index.d.ts.map +1 -1
  87. package/dist/feature-libraries/index.js +2 -3
  88. package/dist/feature-libraries/index.js.map +1 -1
  89. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +7 -7
  90. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  91. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js +6 -6
  92. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  93. package/dist/feature-libraries/modular-schema/fieldKind.js +0 -2
  94. package/dist/feature-libraries/modular-schema/fieldKind.js.map +1 -1
  95. package/dist/feature-libraries/modular-schema/fieldKindWithEditor.js +0 -3
  96. package/dist/feature-libraries/modular-schema/fieldKindWithEditor.js.map +1 -1
  97. package/dist/feature-libraries/modular-schema/index.d.ts +1 -1
  98. package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
  99. package/dist/feature-libraries/modular-schema/index.js +2 -2
  100. package/dist/feature-libraries/modular-schema/index.js.map +1 -1
  101. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +2 -0
  102. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  103. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +2 -0
  104. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  105. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +39 -24
  106. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  107. package/dist/feature-libraries/node-key/mockNodeKeyManager.js +4 -2
  108. package/dist/feature-libraries/node-key/mockNodeKeyManager.js.map +1 -1
  109. package/dist/feature-libraries/node-key/nodeKeyIndex.js +0 -3
  110. package/dist/feature-libraries/node-key/nodeKeyIndex.js.map +1 -1
  111. package/dist/feature-libraries/object-forest/objectForest.js +28 -23
  112. package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
  113. package/dist/feature-libraries/optional-field/optionalField.js +5 -3
  114. package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
  115. package/dist/feature-libraries/schema-index/schemaSummarizer.js +1 -5
  116. package/dist/feature-libraries/schema-index/schemaSummarizer.js.map +1 -1
  117. package/dist/feature-libraries/schemaBuilderBase.js +3 -14
  118. package/dist/feature-libraries/schemaBuilderBase.js.map +1 -1
  119. package/dist/feature-libraries/sequence-field/compose.js +0 -6
  120. package/dist/feature-libraries/sequence-field/compose.js.map +1 -1
  121. package/dist/feature-libraries/sequence-field/markListFactory.js +4 -3
  122. package/dist/feature-libraries/sequence-field/markListFactory.js.map +1 -1
  123. package/dist/feature-libraries/sequence-field/markQueue.js +2 -4
  124. package/dist/feature-libraries/sequence-field/markQueue.js.map +1 -1
  125. package/dist/feature-libraries/sequence-field/rebase.d.ts +2 -2
  126. package/dist/feature-libraries/sequence-field/rebase.d.ts.map +1 -1
  127. package/dist/feature-libraries/sequence-field/rebase.js +20 -20
  128. package/dist/feature-libraries/sequence-field/rebase.js.map +1 -1
  129. package/dist/feature-libraries/treeCursorUtils.js +9 -13
  130. package/dist/feature-libraries/treeCursorUtils.js.map +1 -1
  131. package/dist/feature-libraries/typed-schema/typedTreeSchema.js +4 -23
  132. package/dist/feature-libraries/typed-schema/typedTreeSchema.js.map +1 -1
  133. package/dist/feature-libraries/typed-schema/view.js +0 -7
  134. package/dist/feature-libraries/typed-schema/view.js.map +1 -1
  135. package/dist/index.d.ts +1 -1
  136. package/dist/index.d.ts.map +1 -1
  137. package/dist/index.js +1 -2
  138. package/dist/index.js.map +1 -1
  139. package/dist/packageVersion.d.ts +1 -1
  140. package/dist/packageVersion.js +1 -1
  141. package/dist/packageVersion.js.map +1 -1
  142. package/dist/public.d.ts +0 -1
  143. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  144. package/dist/shared-tree/schematizingTreeView.js +10 -27
  145. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  146. package/dist/shared-tree/sharedTree.d.ts +4 -0
  147. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  148. package/dist/shared-tree/sharedTree.js +13 -10
  149. package/dist/shared-tree/sharedTree.js.map +1 -1
  150. package/dist/shared-tree/sharedTreeChangeEnricher.js +11 -14
  151. package/dist/shared-tree/sharedTreeChangeEnricher.js.map +1 -1
  152. package/dist/shared-tree/sharedTreeChangeFamily.js +3 -5
  153. package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  154. package/dist/shared-tree/sharedTreeEditBuilder.js +0 -2
  155. package/dist/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  156. package/dist/shared-tree/treeCheckout.js +11 -22
  157. package/dist/shared-tree/treeCheckout.js.map +1 -1
  158. package/dist/shared-tree/treeView.js +0 -6
  159. package/dist/shared-tree/treeView.js.map +1 -1
  160. package/dist/shared-tree-core/branch.d.ts +18 -0
  161. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  162. package/dist/shared-tree-core/branch.js +28 -31
  163. package/dist/shared-tree-core/branch.js.map +1 -1
  164. package/dist/shared-tree-core/branchCommitEnricher.d.ts +4 -2
  165. package/dist/shared-tree-core/branchCommitEnricher.d.ts.map +1 -1
  166. package/dist/shared-tree-core/branchCommitEnricher.js +19 -15
  167. package/dist/shared-tree-core/branchCommitEnricher.js.map +1 -1
  168. package/dist/shared-tree-core/defaultResubmitMachine.js +19 -21
  169. package/dist/shared-tree-core/defaultResubmitMachine.js.map +1 -1
  170. package/dist/shared-tree-core/editManager.js +37 -53
  171. package/dist/shared-tree-core/editManager.js.map +1 -1
  172. package/dist/shared-tree-core/editManagerSummarizer.js +1 -5
  173. package/dist/shared-tree-core/editManagerSummarizer.js.map +1 -1
  174. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  175. package/dist/shared-tree-core/sharedTreeCore.js +16 -24
  176. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  177. package/dist/shared-tree-core/transactionEnricher.d.ts +11 -1
  178. package/dist/shared-tree-core/transactionEnricher.d.ts.map +1 -1
  179. package/dist/shared-tree-core/transactionEnricher.js +25 -4
  180. package/dist/shared-tree-core/transactionEnricher.js.map +1 -1
  181. package/dist/shared-tree-core/transactionStack.js +3 -1
  182. package/dist/shared-tree-core/transactionStack.js.map +1 -1
  183. package/dist/simple-tree/arrayNode.js +34 -26
  184. package/dist/simple-tree/arrayNode.js.map +1 -1
  185. package/dist/simple-tree/leafNodeSchema.js +2 -4
  186. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  187. package/dist/simple-tree/mapNode.js +5 -5
  188. package/dist/simple-tree/mapNode.js.map +1 -1
  189. package/dist/simple-tree/objectNode.js +6 -6
  190. package/dist/simple-tree/objectNode.js.map +1 -1
  191. package/dist/simple-tree/schemaFactory.d.ts +18 -5
  192. package/dist/simple-tree/schemaFactory.d.ts.map +1 -1
  193. package/dist/simple-tree/schemaFactory.js +65 -53
  194. package/dist/simple-tree/schemaFactory.js.map +1 -1
  195. package/dist/simple-tree/schemaTypes.js +3 -12
  196. package/dist/simple-tree/schemaTypes.js.map +1 -1
  197. package/dist/simple-tree/tree.d.ts +1 -22
  198. package/dist/simple-tree/tree.d.ts.map +1 -1
  199. package/dist/simple-tree/tree.js +0 -21
  200. package/dist/simple-tree/tree.js.map +1 -1
  201. package/dist/simple-tree/treeNodeApi.d.ts +13 -4
  202. package/dist/simple-tree/treeNodeApi.d.ts.map +1 -1
  203. package/dist/simple-tree/treeNodeApi.js +8 -3
  204. package/dist/simple-tree/treeNodeApi.js.map +1 -1
  205. package/dist/simple-tree/types.d.ts +26 -6
  206. package/dist/simple-tree/types.d.ts.map +1 -1
  207. package/dist/simple-tree/types.js +79 -54
  208. package/dist/simple-tree/types.js.map +1 -1
  209. package/dist/treeFactory.js +10 -9
  210. package/dist/treeFactory.js.map +1 -1
  211. package/dist/util/brand.js +0 -1
  212. package/dist/util/brand.js.map +1 -1
  213. package/dist/util/nestedMap.js +4 -2
  214. package/dist/util/nestedMap.js.map +1 -1
  215. package/dist/util/offsetList.js +4 -2
  216. package/dist/util/offsetList.js.map +1 -1
  217. package/dist/util/referenceCounting.js +0 -1
  218. package/dist/util/referenceCounting.js.map +1 -1
  219. package/dist/util/stackyIterator.js +2 -3
  220. package/dist/util/stackyIterator.js.map +1 -1
  221. package/lib/beta.d.ts +0 -1
  222. package/lib/codec/codec.js +0 -1
  223. package/lib/codec/codec.js.map +1 -1
  224. package/lib/codec/discriminatedUnions.js +0 -1
  225. package/lib/codec/discriminatedUnions.js.map +1 -1
  226. package/lib/core/change-family/editBuilder.js +0 -2
  227. package/lib/core/change-family/editBuilder.js.map +1 -1
  228. package/lib/core/rebase/revisionTagCodec.js +0 -2
  229. package/lib/core/rebase/revisionTagCodec.js.map +1 -1
  230. package/lib/core/schema-stored/schema.js +0 -4
  231. package/lib/core/schema-stored/schema.js.map +1 -1
  232. package/lib/core/schema-stored/storedSchemaRepository.js +1 -3
  233. package/lib/core/schema-stored/storedSchemaRepository.js.map +1 -1
  234. package/lib/core/schema-view/view.js +0 -2
  235. package/lib/core/schema-view/view.js.map +1 -1
  236. package/lib/core/tree/anchorSet.js +46 -51
  237. package/lib/core/tree/anchorSet.js.map +1 -1
  238. package/lib/core/tree/detachedFieldIndex.js +2 -8
  239. package/lib/core/tree/detachedFieldIndex.js.map +1 -1
  240. package/lib/core/tree/detachedFieldIndexCodec.js +0 -3
  241. package/lib/core/tree/detachedFieldIndexCodec.js.map +1 -1
  242. package/lib/core/tree/sparseTree.js +11 -15
  243. package/lib/core/tree/sparseTree.js.map +1 -1
  244. package/lib/domains/schemaBuilder.js +70 -70
  245. package/lib/domains/schemaBuilder.js.map +1 -1
  246. package/lib/events/events.js +1 -2
  247. package/lib/events/events.js.map +1 -1
  248. package/lib/feature-libraries/chunked-forest/basicChunk.js +1 -14
  249. package/lib/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
  250. package/lib/feature-libraries/chunked-forest/chunkTree.js +6 -13
  251. package/lib/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  252. package/lib/feature-libraries/chunked-forest/chunkedForest.js +2 -9
  253. package/lib/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  254. package/lib/feature-libraries/chunked-forest/codec/chunkCodecUtilities.js +3 -1
  255. package/lib/feature-libraries/chunked-forest/codec/chunkCodecUtilities.js.map +1 -1
  256. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +13 -3
  257. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  258. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js +6 -11
  259. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  260. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +3 -3
  261. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
  262. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js +2 -5
  263. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
  264. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js +0 -1
  265. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
  266. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts +2 -1
  267. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  268. package/lib/feature-libraries/chunked-forest/codec/codecs.js +4 -1
  269. package/lib/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  270. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js +13 -25
  271. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  272. package/lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +1 -1
  273. package/lib/feature-libraries/chunked-forest/codec/nodeShape.js +5 -8
  274. package/lib/feature-libraries/chunked-forest/codec/nodeShape.js.map +1 -1
  275. package/lib/feature-libraries/chunked-forest/sequenceChunk.js +0 -1
  276. package/lib/feature-libraries/chunked-forest/sequenceChunk.js.map +1 -1
  277. package/lib/feature-libraries/chunked-forest/uniformChunk.js +5 -40
  278. package/lib/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
  279. package/lib/feature-libraries/default-schema/defaultEditBuilder.js +0 -2
  280. package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  281. package/lib/feature-libraries/detachedFieldIndexSummarizer.js +1 -2
  282. package/lib/feature-libraries/detachedFieldIndexSummarizer.js.map +1 -1
  283. package/lib/feature-libraries/editableTreeBinder.js +12 -13
  284. package/lib/feature-libraries/editableTreeBinder.js.map +1 -1
  285. package/lib/feature-libraries/flex-map-tree/mapTreeNode.js +11 -12
  286. package/lib/feature-libraries/flex-map-tree/mapTreeNode.js.map +1 -1
  287. package/lib/feature-libraries/flex-tree/context.js +3 -7
  288. package/lib/feature-libraries/flex-tree/context.js.map +1 -1
  289. package/lib/feature-libraries/flex-tree/lazyEntity.js +22 -13
  290. package/lib/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
  291. package/lib/feature-libraries/flex-tree/lazyField.js +0 -6
  292. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  293. package/lib/feature-libraries/flex-tree/lazyNode.js +17 -10
  294. package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  295. package/lib/feature-libraries/forest-summary/forestSummarizer.js +1 -6
  296. package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  297. package/lib/feature-libraries/index.d.ts +1 -1
  298. package/lib/feature-libraries/index.d.ts.map +1 -1
  299. package/lib/feature-libraries/index.js +1 -1
  300. package/lib/feature-libraries/index.js.map +1 -1
  301. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +7 -7
  302. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  303. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js +5 -5
  304. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  305. package/lib/feature-libraries/modular-schema/fieldKind.js +0 -2
  306. package/lib/feature-libraries/modular-schema/fieldKind.js.map +1 -1
  307. package/lib/feature-libraries/modular-schema/fieldKindWithEditor.js +0 -3
  308. package/lib/feature-libraries/modular-schema/fieldKindWithEditor.js.map +1 -1
  309. package/lib/feature-libraries/modular-schema/index.d.ts +1 -1
  310. package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
  311. package/lib/feature-libraries/modular-schema/index.js +1 -1
  312. package/lib/feature-libraries/modular-schema/index.js.map +1 -1
  313. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +2 -0
  314. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  315. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +2 -0
  316. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  317. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +40 -25
  318. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  319. package/lib/feature-libraries/node-key/mockNodeKeyManager.js +4 -2
  320. package/lib/feature-libraries/node-key/mockNodeKeyManager.js.map +1 -1
  321. package/lib/feature-libraries/node-key/nodeKeyIndex.js +0 -3
  322. package/lib/feature-libraries/node-key/nodeKeyIndex.js.map +1 -1
  323. package/lib/feature-libraries/object-forest/objectForest.js +28 -23
  324. package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
  325. package/lib/feature-libraries/optional-field/optionalField.js +6 -4
  326. package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
  327. package/lib/feature-libraries/schema-index/schemaSummarizer.js +1 -5
  328. package/lib/feature-libraries/schema-index/schemaSummarizer.js.map +1 -1
  329. package/lib/feature-libraries/schemaBuilderBase.js +3 -14
  330. package/lib/feature-libraries/schemaBuilderBase.js.map +1 -1
  331. package/lib/feature-libraries/sequence-field/compose.js +0 -6
  332. package/lib/feature-libraries/sequence-field/compose.js.map +1 -1
  333. package/lib/feature-libraries/sequence-field/markListFactory.js +4 -3
  334. package/lib/feature-libraries/sequence-field/markListFactory.js.map +1 -1
  335. package/lib/feature-libraries/sequence-field/markQueue.js +2 -4
  336. package/lib/feature-libraries/sequence-field/markQueue.js.map +1 -1
  337. package/lib/feature-libraries/sequence-field/rebase.d.ts +2 -2
  338. package/lib/feature-libraries/sequence-field/rebase.d.ts.map +1 -1
  339. package/lib/feature-libraries/sequence-field/rebase.js +21 -21
  340. package/lib/feature-libraries/sequence-field/rebase.js.map +1 -1
  341. package/lib/feature-libraries/treeCursorUtils.js +9 -13
  342. package/lib/feature-libraries/treeCursorUtils.js.map +1 -1
  343. package/lib/feature-libraries/typed-schema/typedTreeSchema.js +4 -23
  344. package/lib/feature-libraries/typed-schema/typedTreeSchema.js.map +1 -1
  345. package/lib/feature-libraries/typed-schema/view.js +0 -7
  346. package/lib/feature-libraries/typed-schema/view.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 +1 -1
  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/public.d.ts +0 -1
  355. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  356. package/lib/shared-tree/schematizingTreeView.js +10 -27
  357. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  358. package/lib/shared-tree/sharedTree.d.ts +4 -0
  359. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  360. package/lib/shared-tree/sharedTree.js +13 -10
  361. package/lib/shared-tree/sharedTree.js.map +1 -1
  362. package/lib/shared-tree/sharedTreeChangeEnricher.js +11 -14
  363. package/lib/shared-tree/sharedTreeChangeEnricher.js.map +1 -1
  364. package/lib/shared-tree/sharedTreeChangeFamily.js +3 -5
  365. package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  366. package/lib/shared-tree/sharedTreeEditBuilder.js +0 -2
  367. package/lib/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  368. package/lib/shared-tree/treeCheckout.js +11 -22
  369. package/lib/shared-tree/treeCheckout.js.map +1 -1
  370. package/lib/shared-tree/treeView.js +0 -6
  371. package/lib/shared-tree/treeView.js.map +1 -1
  372. package/lib/shared-tree-core/branch.d.ts +18 -0
  373. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  374. package/lib/shared-tree-core/branch.js +28 -31
  375. package/lib/shared-tree-core/branch.js.map +1 -1
  376. package/lib/shared-tree-core/branchCommitEnricher.d.ts +4 -2
  377. package/lib/shared-tree-core/branchCommitEnricher.d.ts.map +1 -1
  378. package/lib/shared-tree-core/branchCommitEnricher.js +19 -15
  379. package/lib/shared-tree-core/branchCommitEnricher.js.map +1 -1
  380. package/lib/shared-tree-core/defaultResubmitMachine.js +19 -21
  381. package/lib/shared-tree-core/defaultResubmitMachine.js.map +1 -1
  382. package/lib/shared-tree-core/editManager.js +37 -53
  383. package/lib/shared-tree-core/editManager.js.map +1 -1
  384. package/lib/shared-tree-core/editManagerSummarizer.js +1 -5
  385. package/lib/shared-tree-core/editManagerSummarizer.js.map +1 -1
  386. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  387. package/lib/shared-tree-core/sharedTreeCore.js +16 -24
  388. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  389. package/lib/shared-tree-core/transactionEnricher.d.ts +11 -1
  390. package/lib/shared-tree-core/transactionEnricher.d.ts.map +1 -1
  391. package/lib/shared-tree-core/transactionEnricher.js +25 -4
  392. package/lib/shared-tree-core/transactionEnricher.js.map +1 -1
  393. package/lib/shared-tree-core/transactionStack.js +3 -1
  394. package/lib/shared-tree-core/transactionStack.js.map +1 -1
  395. package/lib/simple-tree/arrayNode.js +34 -26
  396. package/lib/simple-tree/arrayNode.js.map +1 -1
  397. package/lib/simple-tree/leafNodeSchema.js +2 -4
  398. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  399. package/lib/simple-tree/mapNode.js +5 -5
  400. package/lib/simple-tree/mapNode.js.map +1 -1
  401. package/lib/simple-tree/objectNode.js +6 -6
  402. package/lib/simple-tree/objectNode.js.map +1 -1
  403. package/lib/simple-tree/schemaFactory.d.ts +18 -5
  404. package/lib/simple-tree/schemaFactory.d.ts.map +1 -1
  405. package/lib/simple-tree/schemaFactory.js +65 -53
  406. package/lib/simple-tree/schemaFactory.js.map +1 -1
  407. package/lib/simple-tree/schemaTypes.js +3 -12
  408. package/lib/simple-tree/schemaTypes.js.map +1 -1
  409. package/lib/simple-tree/tree.d.ts +1 -22
  410. package/lib/simple-tree/tree.d.ts.map +1 -1
  411. package/lib/simple-tree/tree.js +0 -21
  412. package/lib/simple-tree/tree.js.map +1 -1
  413. package/lib/simple-tree/treeNodeApi.d.ts +13 -4
  414. package/lib/simple-tree/treeNodeApi.d.ts.map +1 -1
  415. package/lib/simple-tree/treeNodeApi.js +8 -3
  416. package/lib/simple-tree/treeNodeApi.js.map +1 -1
  417. package/lib/simple-tree/types.d.ts +26 -6
  418. package/lib/simple-tree/types.d.ts.map +1 -1
  419. package/lib/simple-tree/types.js +78 -54
  420. package/lib/simple-tree/types.js.map +1 -1
  421. package/lib/treeFactory.js +10 -9
  422. package/lib/treeFactory.js.map +1 -1
  423. package/lib/util/brand.js +0 -1
  424. package/lib/util/brand.js.map +1 -1
  425. package/lib/util/nestedMap.js +4 -2
  426. package/lib/util/nestedMap.js.map +1 -1
  427. package/lib/util/offsetList.js +4 -2
  428. package/lib/util/offsetList.js.map +1 -1
  429. package/lib/util/referenceCounting.js +0 -1
  430. package/lib/util/referenceCounting.js.map +1 -1
  431. package/lib/util/stackyIterator.js +2 -3
  432. package/lib/util/stackyIterator.js.map +1 -1
  433. package/package.json +27 -24
  434. package/src/feature-libraries/chunked-forest/codec/chunkDecoding.ts +22 -6
  435. package/src/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.ts +2 -2
  436. package/src/feature-libraries/chunked-forest/codec/codecs.ts +6 -2
  437. package/src/feature-libraries/chunked-forest/codec/nodeShape.ts +8 -3
  438. package/src/feature-libraries/index.ts +0 -1
  439. package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +6 -7
  440. package/src/feature-libraries/modular-schema/index.ts +1 -1
  441. package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +2 -0
  442. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +55 -23
  443. package/src/feature-libraries/optional-field/optionalField.ts +3 -3
  444. package/src/feature-libraries/sequence-field/rebase.ts +15 -33
  445. package/src/index.ts +0 -1
  446. package/src/packageVersion.ts +1 -1
  447. package/src/shared-tree/schematizingTreeView.ts +0 -2
  448. package/src/shared-tree/sharedTree.ts +8 -1
  449. package/src/shared-tree-core/branch.ts +24 -0
  450. package/src/shared-tree-core/branchCommitEnricher.ts +15 -6
  451. package/src/shared-tree-core/sharedTreeCore.ts +9 -0
  452. package/src/shared-tree-core/transactionEnricher.ts +27 -1
  453. package/src/simple-tree/arrayNode.ts +17 -17
  454. package/src/simple-tree/schemaFactory.ts +18 -5
  455. package/src/simple-tree/tree.ts +1 -26
  456. package/src/simple-tree/treeNodeApi.ts +25 -7
  457. package/src/simple-tree/types.ts +57 -9
  458. package/tsdoc.json +4 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluidframework/tree",
3
- "version": "2.0.0-dev-rc.5.0.0.271262",
3
+ "version": "2.0.0-dev-rc.5.0.0.272251",
4
4
  "description": "Distributed tree",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -67,17 +67,17 @@
67
67
  "temp-directory": "nyc/.nyc_output"
68
68
  },
69
69
  "dependencies": {
70
- "@fluid-internal/client-utils": "2.0.0-dev-rc.5.0.0.271262",
71
- "@fluidframework/container-runtime": "2.0.0-dev-rc.5.0.0.271262",
72
- "@fluidframework/core-interfaces": "2.0.0-dev-rc.5.0.0.271262",
73
- "@fluidframework/core-utils": "2.0.0-dev-rc.5.0.0.271262",
74
- "@fluidframework/datastore-definitions": "2.0.0-dev-rc.5.0.0.271262",
75
- "@fluidframework/driver-definitions": "2.0.0-dev-rc.5.0.0.271262",
76
- "@fluidframework/id-compressor": "2.0.0-dev-rc.5.0.0.271262",
77
- "@fluidframework/runtime-definitions": "2.0.0-dev-rc.5.0.0.271262",
78
- "@fluidframework/runtime-utils": "2.0.0-dev-rc.5.0.0.271262",
79
- "@fluidframework/shared-object-base": "2.0.0-dev-rc.5.0.0.271262",
80
- "@fluidframework/telemetry-utils": "2.0.0-dev-rc.5.0.0.271262",
70
+ "@fluid-internal/client-utils": "2.0.0-dev-rc.5.0.0.272251",
71
+ "@fluidframework/container-runtime": "2.0.0-dev-rc.5.0.0.272251",
72
+ "@fluidframework/core-interfaces": "2.0.0-dev-rc.5.0.0.272251",
73
+ "@fluidframework/core-utils": "2.0.0-dev-rc.5.0.0.272251",
74
+ "@fluidframework/datastore-definitions": "2.0.0-dev-rc.5.0.0.272251",
75
+ "@fluidframework/driver-definitions": "2.0.0-dev-rc.5.0.0.272251",
76
+ "@fluidframework/id-compressor": "2.0.0-dev-rc.5.0.0.272251",
77
+ "@fluidframework/runtime-definitions": "2.0.0-dev-rc.5.0.0.272251",
78
+ "@fluidframework/runtime-utils": "2.0.0-dev-rc.5.0.0.272251",
79
+ "@fluidframework/shared-object-base": "2.0.0-dev-rc.5.0.0.272251",
80
+ "@fluidframework/telemetry-utils": "2.0.0-dev-rc.5.0.0.272251",
81
81
  "@sinclair/typebox": "^0.32.29",
82
82
  "@tylerbu/sorted-btree-es6": "^1.8.0",
83
83
  "@ungap/structured-clone": "^1.2.0",
@@ -86,19 +86,19 @@
86
86
  "devDependencies": {
87
87
  "@arethetypeswrong/cli": "^0.15.2",
88
88
  "@biomejs/biome": "^1.7.3",
89
- "@fluid-internal/mocha-test-setup": "2.0.0-dev-rc.5.0.0.271262",
90
- "@fluid-private/stochastic-test-utils": "2.0.0-dev-rc.5.0.0.271262",
91
- "@fluid-private/test-dds-utils": "2.0.0-dev-rc.5.0.0.271262",
92
- "@fluid-private/test-drivers": "2.0.0-dev-rc.5.0.0.271262",
89
+ "@fluid-internal/mocha-test-setup": "2.0.0-dev-rc.5.0.0.272251",
90
+ "@fluid-private/stochastic-test-utils": "2.0.0-dev-rc.5.0.0.272251",
91
+ "@fluid-private/test-dds-utils": "2.0.0-dev-rc.5.0.0.272251",
92
+ "@fluid-private/test-drivers": "2.0.0-dev-rc.5.0.0.272251",
93
93
  "@fluid-tools/benchmark": "^0.48.0",
94
94
  "@fluid-tools/build-cli": "^0.39.0",
95
95
  "@fluidframework/build-common": "^2.0.3",
96
96
  "@fluidframework/build-tools": "^0.39.0",
97
- "@fluidframework/container-definitions": "2.0.0-dev-rc.5.0.0.271262",
98
- "@fluidframework/container-loader": "2.0.0-dev-rc.5.0.0.271262",
97
+ "@fluidframework/container-definitions": "2.0.0-dev-rc.5.0.0.272251",
98
+ "@fluidframework/container-loader": "2.0.0-dev-rc.5.0.0.272251",
99
99
  "@fluidframework/eslint-config-fluid": "^5.3.0",
100
- "@fluidframework/test-runtime-utils": "2.0.0-dev-rc.5.0.0.271262",
101
- "@fluidframework/test-utils": "2.0.0-dev-rc.5.0.0.271262",
100
+ "@fluidframework/test-runtime-utils": "2.0.0-dev-rc.5.0.0.272251",
101
+ "@fluidframework/test-utils": "2.0.0-dev-rc.5.0.0.272251",
102
102
  "@microsoft/api-extractor": "^7.45.1",
103
103
  "@types/diff": "^3.5.1",
104
104
  "@types/easy-table": "^0.0.32",
@@ -109,6 +109,7 @@
109
109
  "ajv": "^8.12.0",
110
110
  "ajv-formats": "^3.0.1",
111
111
  "c8": "^8.0.1",
112
+ "concurrently": "^8.2.1",
112
113
  "copyfiles": "^2.4.1",
113
114
  "cross-env": "^7.0.3",
114
115
  "dependency-cruiser": "^14.1.0",
@@ -134,9 +135,6 @@
134
135
  "...",
135
136
  "@fluidframework/id-compressor#build:test:esm"
136
137
  ],
137
- "check:release-tags": [
138
- "build:esnext"
139
- ],
140
138
  "ci:build:docs": [
141
139
  "build:esnext"
142
140
  ]
@@ -163,9 +161,14 @@
163
161
  "build:test:esm": "tsc --project ./src/test/tsconfig.json",
164
162
  "check:are-the-types-wrong": "attw --pack .",
165
163
  "check:biome": "biome check . --formatter-enabled=true",
164
+ "check:exports": "concurrently \"npm:check:exports:*\"",
165
+ "check:exports:bundle-release-tags": "api-extractor run --config api-extractor/api-extractor-lint-bundle.json",
166
+ "check:exports:cjs:beta": "api-extractor run --config api-extractor/api-extractor-lint-beta.cjs.json",
167
+ "check:exports:cjs:public": "api-extractor run --config api-extractor/api-extractor-lint-public.cjs.json",
168
+ "check:exports:esm:beta": "api-extractor run --config api-extractor/api-extractor-lint-beta.esm.json",
169
+ "check:exports:esm:public": "api-extractor run --config api-extractor/api-extractor-lint-public.esm.json",
166
170
  "check:format": "npm run check:prettier",
167
171
  "check:prettier": "prettier --check . --cache --ignore-path ../../../.prettierignore",
168
- "check:release-tags": "api-extractor run --local --config ./api-extractor-lint.json",
169
172
  "ci:build:docs": "api-extractor run",
170
173
  "clean": "rimraf --glob dist lib \"*.d.ts\" \"**/*.tsbuildinfo\" \"**/*.build.log\" _api-extractor-temp nyc",
171
174
  "depcruise": "depcruise src/ --ignore-known",
@@ -38,15 +38,25 @@ import {
38
38
  type EncodedValueShape,
39
39
  SpecialField,
40
40
  } from "./format.js";
41
- import type { IIdCompressor, SessionSpaceCompressedId } from "@fluidframework/id-compressor";
41
+ import type { IIdCompressor, OpSpaceCompressedId, SessionId } from "@fluidframework/id-compressor";
42
42
 
43
+ export interface IdDecodingContext {
44
+ idCompressor: IIdCompressor;
45
+ /**
46
+ * The creator of any local Ids to be decoded.
47
+ */
48
+ originatorId: SessionId;
49
+ }
43
50
  /**
44
51
  * Decode `chunk` into a TreeChunk.
45
52
  */
46
- export function decode(chunk: EncodedFieldBatch, idCompressor: IIdCompressor): TreeChunk[] {
53
+ export function decode(
54
+ chunk: EncodedFieldBatch,
55
+ idDecodingContext: { idCompressor: IIdCompressor; originatorId: SessionId },
56
+ ): TreeChunk[] {
47
57
  return genericDecode(
48
58
  decoderLibrary,
49
- new DecoderContext(chunk.identifiers, chunk.shapes, idCompressor),
59
+ new DecoderContext(chunk.identifiers, chunk.shapes, idDecodingContext),
50
60
  chunk,
51
61
  anyDecoder,
52
62
  );
@@ -77,7 +87,7 @@ const decoderLibrary = new DiscriminatedUnionDispatcher<
77
87
  export function readValue(
78
88
  stream: StreamCursor,
79
89
  shape: EncodedValueShape,
80
- idCompressor: IIdCompressor,
90
+ idDecodingContext: IdDecodingContext,
81
91
  ): Value {
82
92
  if (shape === undefined) {
83
93
  return readStreamBoolean(stream) ? readStreamValue(stream) : undefined;
@@ -96,8 +106,14 @@ export function readValue(
96
106
  typeof streamValue === "number" || typeof streamValue === "string",
97
107
  "identifier must be string or number.",
98
108
  );
109
+ const idCompressor = idDecodingContext.idCompressor;
99
110
  return typeof streamValue === "number"
100
- ? idCompressor.decompress(streamValue as SessionSpaceCompressedId)
111
+ ? idCompressor.decompress(
112
+ idCompressor.normalizeToSessionSpace(
113
+ streamValue as OpSpaceCompressedId,
114
+ idDecodingContext.originatorId,
115
+ ),
116
+ )
101
117
  : streamValue;
102
118
  } else {
103
119
  // EncodedCounter case:
@@ -259,7 +275,7 @@ export class TreeDecoder implements ChunkDecoder {
259
275
  this.type ?? readStreamIdentifier(stream, this.cache);
260
276
  // TODO: Consider typechecking against stored schema in here somewhere.
261
277
 
262
- const value = readValue(stream, this.shape.value, this.cache.idCompressor);
278
+ const value = readValue(stream, this.shape.value, this.cache.idDecodingContext);
263
279
  const fields: Map<FieldKey, TreeChunk[]> = new Map();
264
280
 
265
281
  // Helper to add fields, but with unneeded array chunks removed.
@@ -16,7 +16,7 @@ import {
16
16
  readStream,
17
17
  } from "./chunkCodecUtilities.js";
18
18
  import type { EncodedFieldBatchGeneric, IdentifierOrIndex } from "./formatGeneric.js";
19
- import type { IIdCompressor } from "@fluidframework/id-compressor";
19
+ import type { IdDecodingContext } from "./chunkDecoding.js";
20
20
 
21
21
  /**
22
22
  * General purpose shape based tree decoder which gets its support for specific shapes from the caller.
@@ -52,7 +52,7 @@ export class DecoderContext<TEncodedShape = unknown> {
52
52
  public constructor(
53
53
  public readonly identifiers: readonly string[],
54
54
  public readonly shapes: readonly TEncodedShape[],
55
- public readonly idCompressor: IIdCompressor,
55
+ public readonly idDecodingContext: IdDecodingContext,
56
56
  ) {}
57
57
 
58
58
  public identifier<T extends string & BrandedType<string, string>>(
@@ -19,11 +19,12 @@ import type { FieldBatch } from "./fieldBatch.js";
19
19
  import { EncodedFieldBatch, validVersions } from "./format.js";
20
20
  import { schemaCompressedEncode } from "./schemaBasedEncoding.js";
21
21
  import { uncompressedEncode } from "./uncompressedEncode.js";
22
- import type { IIdCompressor } from "@fluidframework/id-compressor";
22
+ import type { IIdCompressor, SessionId } from "@fluidframework/id-compressor";
23
23
 
24
24
  export interface FieldBatchEncodingContext {
25
25
  readonly encodeType: TreeCompressionStrategy;
26
26
  readonly idCompressor: IIdCompressor;
27
+ readonly originatorId: SessionId;
27
28
  readonly schema?: SchemaAndPolicy;
28
29
  }
29
30
  /**
@@ -81,7 +82,10 @@ export function makeFieldBatchCodec(options: ICodecOptions, writeVersion: number
81
82
  },
82
83
  decode: (data: EncodedFieldBatch, context: FieldBatchEncodingContext): FieldBatch => {
83
84
  // TODO: consider checking data is in schema.
84
- return decode(data, context.idCompressor).map((chunk) => chunk.cursor());
85
+ return decode(data, {
86
+ idCompressor: context.idCompressor,
87
+ originatorId: context.originatorId,
88
+ }).map((chunk) => chunk.cursor());
85
89
  },
86
90
  });
87
91
  }
@@ -51,9 +51,14 @@ export class NodeShape extends Shape<EncodedChunkShape> implements NodeEncoder {
51
51
  }
52
52
 
53
53
  if (this.value === 0) {
54
- const compressedId =
55
- cache.idCompressor.tryRecompress(cursor.value as StableId) ?? cursor.value;
56
- encodeValue(compressedId, this.value, outputBuffer);
54
+ const sessionSpaceCompressedId = cache.idCompressor.tryRecompress(
55
+ cursor.value as StableId,
56
+ );
57
+ const opSpaceCompressedId =
58
+ sessionSpaceCompressedId !== undefined
59
+ ? cache.idCompressor.normalizeToOpSpace(sessionSpaceCompressedId)
60
+ : cursor.value;
61
+ encodeValue(opSpaceCompressedId, this.value, outputBuffer);
57
62
  } else {
58
63
  encodeValue(cursor.value, this.value, outputBuffer);
59
64
  }
@@ -117,7 +117,6 @@ export {
117
117
  genericFieldKind,
118
118
  type HasFieldChanges,
119
119
  type NodeExistsConstraint,
120
- NodeExistenceState,
121
120
  FieldKindWithEditor,
122
121
  ModularChangeFamily,
123
122
  type RelevantRemovedRootsFromChild,
@@ -124,7 +124,6 @@ export interface FieldChangeRebaser<TChangeset> {
124
124
  genId: IdAllocator,
125
125
  crossFieldManager: CrossFieldManager,
126
126
  revisionMetadata: RebaseRevisionMetadata,
127
- existenceState?: NodeExistenceState,
128
127
  ): TChangeset;
129
128
 
130
129
  /**
@@ -189,9 +188,9 @@ export type NodeChangeInverter = (change: NodeId) => NodeId;
189
188
  /**
190
189
  * @internal
191
190
  */
192
- export enum NodeExistenceState {
193
- Alive,
194
- Dead,
191
+ export enum NodeAttachState {
192
+ Attached,
193
+ Detached,
195
194
  }
196
195
 
197
196
  /**
@@ -201,10 +200,10 @@ export type NodeChangeRebaser = (
201
200
  change: NodeId | undefined,
202
201
  baseChange: NodeId | undefined,
203
202
  /**
204
- * Whether or not the node is alive or dead in the input context of change.
205
- * Defaults to Alive if undefined.
203
+ * Whether the node is attached to this field in the output context of the base change.
204
+ * Defaults to attached if undefined.
206
205
  */
207
- state?: NodeExistenceState,
206
+ state?: NodeAttachState,
208
207
  ) => NodeId | undefined;
209
208
 
210
209
  /**
@@ -39,7 +39,7 @@ export {
39
39
  type RebaseRevisionMetadata,
40
40
  type RelevantRemovedRootsFromChild,
41
41
  type ToDelta,
42
- NodeExistenceState,
42
+ NodeAttachState,
43
43
  type FieldChangeEncodingContext,
44
44
  } from "./fieldChangeHandler.js";
45
45
  export type {
@@ -326,6 +326,7 @@ function makeModularChangeCodec(
326
326
  trees: fieldsCodec.encode(treesToEncode, {
327
327
  encodeType: chunkCompressionStrategy,
328
328
  schema: context.schema,
329
+ originatorId: context.originatorId,
329
330
  idCompressor: context.idCompressor,
330
331
  }),
331
332
  };
@@ -341,6 +342,7 @@ function makeModularChangeCodec(
341
342
 
342
343
  const chunks = fieldsCodec.decode(encoded.trees, {
343
344
  encodeType: chunkCompressionStrategy,
345
+ originatorId: context.originatorId,
344
346
  idCompressor: context.idCompressor,
345
347
  });
346
348
  const getChunk = (index: number): TreeChunk => {
@@ -77,7 +77,7 @@ import {
77
77
  } from "./crossFieldQueries.js";
78
78
  import {
79
79
  type FieldChangeHandler,
80
- NodeExistenceState,
80
+ NodeAttachState,
81
81
  type RebaseRevisionMetadata,
82
82
  } from "./fieldChangeHandler.js";
83
83
  import { type FieldKindWithEditor, withEditor } from "./fieldKindWithEditor.js";
@@ -639,7 +639,7 @@ export class ModularChangeFamily
639
639
  );
640
640
 
641
641
  const rebasedNodes: ChangeAtomIdMap<NodeChangeset> = new Map();
642
- for (const [newId, baseId, existenceState] of crossFieldTable.nodeIdPairs) {
642
+ for (const [newId, baseId] of crossFieldTable.nodeIdPairs) {
643
643
  const newNodeChange =
644
644
  newId !== undefined
645
645
  ? tryGetFromNestedMap(change.nodeChanges, newId.revision, newId.localId)
@@ -660,8 +660,6 @@ export class ModularChangeFamily
660
660
  genId,
661
661
  crossFieldTable,
662
662
  rebaseMetadata,
663
- constraintState,
664
- existenceState,
665
663
  );
666
664
 
667
665
  if (rebasedNode !== undefined) {
@@ -700,6 +698,13 @@ export class ModularChangeFamily
700
698
  }
701
699
  }
702
700
 
701
+ this.updateConstraintsForFields(
702
+ rebasedFields,
703
+ NodeAttachState.Attached,
704
+ constraintState,
705
+ rebasedNodes,
706
+ );
707
+
703
708
  return makeModularChangeset(
704
709
  this.pruneFieldMap(rebasedFields, rebasedNodes),
705
710
  rebasedNodes,
@@ -718,7 +723,6 @@ export class ModularChangeFamily
718
723
  genId: IdAllocator,
719
724
  crossFieldTable: RebaseTable,
720
725
  revisionMetadata: RebaseRevisionMetadata,
721
- existenceState: NodeExistenceState = NodeExistenceState.Alive,
722
726
  ): FieldChangeMap {
723
727
  const rebasedFields: FieldChangeMap = new Map();
724
728
 
@@ -739,9 +743,9 @@ export class ModularChangeFamily
739
743
  const rebaseChild = (
740
744
  child: NodeId | undefined,
741
745
  baseChild: NodeId | undefined,
742
- stateChange: NodeExistenceState | undefined,
746
+ _attachState: NodeAttachState | undefined,
743
747
  ): ChangeAtomId => {
744
- crossFieldTable.nodeIdPairs.push([child, baseChild, stateChange]);
748
+ crossFieldTable.nodeIdPairs.push([child, baseChild]);
745
749
  return (
746
750
  child ??
747
751
  // The fact `child` is undefined means that the changeset to rebase does not include changes for
@@ -801,13 +805,13 @@ export class ModularChangeFamily
801
805
  0x5b6 /* This field should not have any base changes */,
802
806
  );
803
807
 
804
- crossFieldTable.nodeIdPairs.push([child, undefined, existenceState]);
808
+ crossFieldTable.nodeIdPairs.push([child, undefined]);
809
+
805
810
  return child;
806
811
  },
807
812
  genId,
808
813
  manager,
809
814
  revisionMetadata,
810
- existenceState,
811
815
  );
812
816
  const rebasedFieldChange: FieldChange = {
813
817
  fieldKind: fieldKind.identifier,
@@ -826,8 +830,6 @@ export class ModularChangeFamily
826
830
  genId: IdAllocator,
827
831
  crossFieldTable: RebaseTable,
828
832
  revisionMetadata: RebaseRevisionMetadata,
829
- constraintState: ConstraintState,
830
- existenceState: NodeExistenceState = NodeExistenceState.Alive,
831
833
  ): NodeChangeset | undefined {
832
834
  const key = change ?? over;
833
835
  if (key === undefined) {
@@ -842,7 +844,6 @@ export class ModularChangeFamily
842
844
  genId,
843
845
  crossFieldTable,
844
846
  revisionMetadata,
845
- existenceState,
846
847
  );
847
848
 
848
849
  const rebasedChange: NodeChangeset = {};
@@ -855,21 +856,52 @@ export class ModularChangeFamily
855
856
  rebasedChange.nodeExistsConstraint = change.nodeExistsConstraint;
856
857
  }
857
858
 
858
- // If there's a node exists constraint and we removed or revived the node, update constraint state
859
- if (rebasedChange.nodeExistsConstraint !== undefined) {
860
- const violatedAfter = existenceState === NodeExistenceState.Dead;
859
+ crossFieldTable.rebasedNodeCache.set(key, rebasedChange);
860
+ return rebasedChange;
861
+ }
862
+
863
+ private updateConstraintsForFields(
864
+ fields: FieldChangeMap,
865
+ parentAttachState: NodeAttachState,
866
+ constraintState: ConstraintState,
867
+ nodes: ChangeAtomIdMap<NodeChangeset>,
868
+ ): void {
869
+ for (const field of fields.values()) {
870
+ const handler = getChangeHandler(this.fieldKinds, field.fieldKind);
871
+ for (const [nodeId, index] of handler.getNestedChanges(field.change)) {
872
+ const isDetached = index === undefined;
873
+ const attachState =
874
+ parentAttachState === NodeAttachState.Detached || isDetached
875
+ ? NodeAttachState.Detached
876
+ : NodeAttachState.Attached;
877
+ this.updateConstraintsForNode(nodeId, attachState, constraintState, nodes);
878
+ }
879
+ }
880
+ }
861
881
 
862
- if (rebasedChange.nodeExistsConstraint.violated !== violatedAfter) {
863
- rebasedChange.nodeExistsConstraint = {
864
- ...rebasedChange.nodeExistsConstraint,
865
- violated: violatedAfter,
882
+ private updateConstraintsForNode(
883
+ nodeId: NodeId,
884
+ attachState: NodeAttachState,
885
+ constraintState: ConstraintState,
886
+ nodes: ChangeAtomIdMap<NodeChangeset>,
887
+ ): void {
888
+ const node =
889
+ tryGetFromNestedMap(nodes, nodeId.revision, nodeId.localId) ?? fail("Unknown node ID");
890
+
891
+ if (node.nodeExistsConstraint !== undefined) {
892
+ const isNowViolated = attachState === NodeAttachState.Detached;
893
+ if (node.nodeExistsConstraint.violated !== isNowViolated) {
894
+ node.nodeExistsConstraint = {
895
+ ...node.nodeExistsConstraint,
896
+ violated: isNowViolated,
866
897
  };
867
- constraintState.violationCount += violatedAfter ? 1 : -1;
898
+ constraintState.violationCount += isNowViolated ? 1 : -1;
868
899
  }
869
900
  }
870
901
 
871
- crossFieldTable.rebasedNodeCache.set(key, rebasedChange);
872
- return rebasedChange;
902
+ if (node.fieldChanges !== undefined) {
903
+ this.updateConstraintsForFields(node.fieldChanges, attachState, constraintState, nodes);
904
+ }
873
905
  }
874
906
 
875
907
  private pruneFieldMap(
@@ -1475,7 +1507,7 @@ interface RebaseTable extends CrossFieldTable<FieldChange> {
1475
1507
  /**
1476
1508
  * List of (newId, baseId) pairs encountered so far.
1477
1509
  */
1478
- nodeIdPairs: [NodeId | undefined, NodeId | undefined, NodeExistenceState | undefined][];
1510
+ nodeIdPairs: [NodeId | undefined, NodeId | undefined][];
1479
1511
  }
1480
1512
 
1481
1513
  interface RebaseFieldContext {
@@ -35,7 +35,7 @@ import {
35
35
  type NodeChangeComposer,
36
36
  type NodeChangePruner,
37
37
  type NodeChangeRebaser,
38
- NodeExistenceState,
38
+ NodeAttachState,
39
39
  type NodeId,
40
40
  type RelevantRemovedRootsFromChild,
41
41
  type ToDelta,
@@ -373,7 +373,7 @@ export const optionalChangeRebaser: FieldChangeRebaser<OptionalChangeset> = {
373
373
  const rebasedChildChange = rebaseChild(
374
374
  childChange,
375
375
  overChildChange,
376
- rebasedId === "self" ? NodeExistenceState.Alive : NodeExistenceState.Dead,
376
+ rebasedId === "self" ? NodeAttachState.Attached : NodeAttachState.Detached,
377
377
  );
378
378
  if (rebasedChildChange !== undefined) {
379
379
  rebasedChildChanges.push([rebasedId, rebasedChildChange]);
@@ -385,7 +385,7 @@ export const optionalChangeRebaser: FieldChangeRebaser<OptionalChangeset> = {
385
385
  const rebasedChildChange = rebaseChild(
386
386
  undefined,
387
387
  overChildChange,
388
- rebasedId === "self" ? NodeExistenceState.Alive : NodeExistenceState.Dead,
388
+ rebasedId === "self" ? NodeAttachState.Attached : NodeAttachState.Detached,
389
389
  );
390
390
  if (rebasedChildChange !== undefined) {
391
391
  rebasedChildChanges.push([rebasedId, rebasedChildChange]);
@@ -11,7 +11,7 @@ import {
11
11
  type CrossFieldManager,
12
12
  CrossFieldTarget,
13
13
  type NodeChangeRebaser,
14
- NodeExistenceState,
14
+ NodeAttachState,
15
15
  type NodeId,
16
16
  type RebaseRevisionMetadata,
17
17
  } from "../modular-schema/index.js";
@@ -74,7 +74,6 @@ export function rebase(
74
74
  genId: IdAllocator,
75
75
  manager: CrossFieldManager,
76
76
  revisionMetadata: RebaseRevisionMetadata,
77
- nodeExistenceState: NodeExistenceState = NodeExistenceState.Alive,
78
77
  ): Changeset {
79
78
  return rebaseMarkList(
80
79
  change,
@@ -83,7 +82,6 @@ export function rebase(
83
82
  rebaseChild,
84
83
  genId,
85
84
  manager as MoveEffectTable,
86
- nodeExistenceState,
87
85
  );
88
86
  }
89
87
 
@@ -94,20 +92,13 @@ function rebaseMarkList(
94
92
  rebaseChild: NodeChangeRebaser,
95
93
  genId: IdAllocator,
96
94
  moveEffects: CrossFieldManager<MoveEffect>,
97
- nodeExistenceState: NodeExistenceState,
98
95
  ): MarkList {
99
96
  const factory = new MarkListFactory();
100
97
  const queue = new RebaseQueue(baseMarkList, currMarkList, metadata, moveEffects);
101
98
 
102
99
  while (!queue.isEmpty()) {
103
100
  const { baseMark, newMark: currMark } = queue.pop();
104
- const rebasedMark = rebaseMark(
105
- currMark,
106
- baseMark,
107
- rebaseChild,
108
- moveEffects,
109
- nodeExistenceState,
110
- );
101
+ const rebasedMark = rebaseMark(currMark, baseMark, rebaseChild, moveEffects);
111
102
  factory.push(rebasedMark);
112
103
  }
113
104
 
@@ -272,7 +263,6 @@ function rebaseMark(
272
263
  baseMark: Mark,
273
264
  rebaseChild: NodeChangeRebaser,
274
265
  moveEffects: MoveEffectTable,
275
- nodeExistenceState: NodeExistenceState,
276
266
  ): Mark {
277
267
  const rebasedMark = rebaseNodeChange(cloneMark(currMark), baseMark, rebaseChild);
278
268
  const movedNodeChanges = getMovedChangesFromBaseMark(moveEffects, baseMark);
@@ -284,15 +274,10 @@ function rebaseMark(
284
274
  rebasedMark.changes = movedNodeChanges;
285
275
  }
286
276
 
287
- return rebaseMarkIgnoreChild(rebasedMark, baseMark, moveEffects, nodeExistenceState);
277
+ return rebaseMarkIgnoreChild(rebasedMark, baseMark, moveEffects);
288
278
  }
289
279
 
290
- function rebaseMarkIgnoreChild(
291
- currMark: Mark,
292
- baseMark: Mark,
293
- moveEffects: MoveEffectTable,
294
- nodeExistenceState: NodeExistenceState,
295
- ): Mark {
280
+ function rebaseMarkIgnoreChild(currMark: Mark, baseMark: Mark, moveEffects: MoveEffectTable): Mark {
296
281
  let rebasedMark: Mark;
297
282
  if (isDetach(baseMark)) {
298
283
  if (baseMark.cellId !== undefined) {
@@ -341,13 +326,11 @@ function rebaseMarkIgnoreChild(
341
326
  currMark,
342
327
  { ...baseMark.attach, cellId: cloneCellId(baseMark.cellId), count: baseMark.count },
343
328
  moveEffects,
344
- nodeExistenceState,
345
329
  );
346
330
  rebasedMark = rebaseMarkIgnoreChild(
347
331
  halfRebasedMark,
348
332
  { ...baseMark.detach, count: baseMark.count },
349
333
  moveEffects,
350
- nodeExistenceState,
351
334
  );
352
335
  } else {
353
336
  rebasedMark = currMark;
@@ -465,19 +448,18 @@ function rebaseNodeChange(currMark: Mark, baseMark: Mark, nodeRebaser: NodeChang
465
448
  return currMark;
466
449
  }
467
450
 
468
- if (markEmptiesCells(baseMark) && !isMoveMark(baseMark)) {
469
- return withNodeChange(
470
- currMark,
471
- nodeRebaser(currChange, baseChange, NodeExistenceState.Dead),
472
- );
473
- } else if (markFillsCells(baseMark) && !isMoveMark(baseMark)) {
474
- return withNodeChange(
475
- currMark,
476
- nodeRebaser(currChange, baseChange, NodeExistenceState.Alive),
477
- );
478
- }
451
+ const nodeState = nodeStateAfterMark(baseMark);
452
+ return withNodeChange(currMark, nodeRebaser(currChange, baseChange, nodeState));
453
+ }
479
454
 
480
- return withNodeChange(currMark, nodeRebaser(currChange, baseChange));
455
+ function nodeStateAfterMark(mark: Mark): NodeAttachState {
456
+ if (markEmptiesCells(mark)) {
457
+ return NodeAttachState.Detached;
458
+ } else if (markFillsCells(mark)) {
459
+ return NodeAttachState.Attached;
460
+ } else {
461
+ return mark.cellId === undefined ? NodeAttachState.Attached : NodeAttachState.Detached;
462
+ }
481
463
  }
482
464
 
483
465
  function makeDetachedMark(mark: Mark, cellId: ChangeAtomId): Mark {
package/src/index.ts CHANGED
@@ -272,7 +272,6 @@ export {
272
272
  type TreeArrayNodeBase,
273
273
  type ITree,
274
274
  type TreeNodeSchema,
275
- TreeConfiguration,
276
275
  TreeViewConfiguration,
277
276
  type ITreeViewConfiguration,
278
277
  type ITreeConfigurationOptions,
@@ -6,4 +6,4 @@
6
6
  */
7
7
 
8
8
  export const pkgName = "@fluidframework/tree";
9
- export const pkgVersion = "2.0.0-dev-rc.5.0.0.271262";
9
+ export const pkgVersion = "2.0.0-dev-rc.5.0.0.272251";
@@ -233,8 +233,6 @@ export class SchematizingSimpleTreeView<in out TRootSchema extends ImplicitField
233
233
  lastRoot = this.root;
234
234
  this.events.emit("rootChanged");
235
235
  }
236
-
237
- this.events.emit("afterBatch");
238
236
  });
239
237
 
240
238
  const onViewDispose = (): void => {
@@ -142,6 +142,7 @@ interface ExplicitCodecVersions extends ExplicitCoreCodecVersions {
142
142
  const formatVersionToTopLevelCodecVersions = new Map<number, ExplicitCodecVersions>([
143
143
  [1, { forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 1, message: 1, fieldBatch: 1 }],
144
144
  [2, { forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 2, message: 2, fieldBatch: 1 }],
145
+ [3, { forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 3, message: 3, fieldBatch: 1 }],
145
146
  ]);
146
147
 
147
148
  function getCodecVersions(formatVersion: number): ExplicitCodecVersions {
@@ -203,6 +204,7 @@ export class SharedTree
203
204
  policy: defaultSchemaPolicy,
204
205
  },
205
206
  encodeType: options.treeEncodeType,
207
+ originatorId: runtime.idCompressor.localSessionId,
206
208
  idCompressor: runtime.idCompressor,
207
209
  };
208
210
  const forestSummarizer = new ForestSummarizer(
@@ -361,6 +363,11 @@ export const SharedTreeFormatVersion = {
361
363
  * Requires \@fluidframework/tree \>= 2.0.0.
362
364
  */
363
365
  v2: 2,
366
+
367
+ /**
368
+ * Requires \@fluidframework/tree \>= 2.0.0.
369
+ */
370
+ v3: 3,
364
371
  } as const;
365
372
 
366
373
  /**
@@ -427,7 +434,7 @@ export const defaultSharedTreeOptions: Required<SharedTreeOptions> = {
427
434
  jsonValidator: noopValidator,
428
435
  forest: ForestType.Reference,
429
436
  treeEncodeType: TreeCompressionStrategy.Compressed,
430
- formatVersion: SharedTreeFormatVersion.v2,
437
+ formatVersion: SharedTreeFormatVersion.v3,
431
438
  };
432
439
 
433
440
  /**