@fluidframework/tree 2.21.0 → 2.23.0-323641

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 (358) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +1 -0
  3. package/api-report/tree.alpha.api.md +29 -4
  4. package/api-report/tree.beta.api.md +29 -4
  5. package/api-report/tree.legacy.alpha.api.md +29 -4
  6. package/api-report/tree.legacy.public.api.md +29 -4
  7. package/api-report/tree.public.api.md +29 -4
  8. package/dist/alpha.d.ts +1 -0
  9. package/dist/beta.d.ts +1 -0
  10. package/dist/core/forest/editableForest.js +1 -1
  11. package/dist/core/forest/editableForest.js.map +1 -1
  12. package/dist/core/index.d.ts +1 -1
  13. package/dist/core/index.d.ts.map +1 -1
  14. package/dist/core/index.js.map +1 -1
  15. package/dist/core/tree/anchorSet.d.ts +2 -5
  16. package/dist/core/tree/anchorSet.d.ts.map +1 -1
  17. package/dist/core/tree/anchorSet.js +16 -162
  18. package/dist/core/tree/anchorSet.js.map +1 -1
  19. package/dist/core/tree/index.d.ts +1 -2
  20. package/dist/core/tree/index.d.ts.map +1 -1
  21. package/dist/core/tree/index.js.map +1 -1
  22. package/dist/core/tree/pathTree.d.ts +0 -11
  23. package/dist/core/tree/pathTree.d.ts.map +1 -1
  24. package/dist/core/tree/pathTree.js.map +1 -1
  25. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js +1 -1
  26. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  27. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +1 -1
  28. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  29. package/dist/feature-libraries/detachedFieldIndexSummarizer.d.ts +1 -2
  30. package/dist/feature-libraries/detachedFieldIndexSummarizer.d.ts.map +1 -1
  31. package/dist/feature-libraries/detachedFieldIndexSummarizer.js +0 -9
  32. package/dist/feature-libraries/detachedFieldIndexSummarizer.js.map +1 -1
  33. package/dist/feature-libraries/flex-tree/treeEvents.d.ts +2 -4
  34. package/dist/feature-libraries/flex-tree/treeEvents.d.ts.map +1 -1
  35. package/dist/feature-libraries/flex-tree/treeEvents.js.map +1 -1
  36. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts +1 -2
  37. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  38. package/dist/feature-libraries/forest-summary/forestSummarizer.js +0 -9
  39. package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  40. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +6 -2
  41. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  42. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  43. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts +2 -4
  44. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  45. package/dist/feature-libraries/modular-schema/genericFieldKind.js +4 -19
  46. package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  47. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  48. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +16 -18
  49. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  50. package/dist/feature-libraries/node-key/mockNodeKeyManager.js +1 -1
  51. package/dist/feature-libraries/node-key/mockNodeKeyManager.js.map +1 -1
  52. package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  53. package/dist/feature-libraries/optional-field/optionalField.js +7 -3
  54. package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
  55. package/dist/feature-libraries/schema-index/schemaSummarizer.d.ts +3 -5
  56. package/dist/feature-libraries/schema-index/schemaSummarizer.d.ts.map +1 -1
  57. package/dist/feature-libraries/schema-index/schemaSummarizer.js +1 -11
  58. package/dist/feature-libraries/schema-index/schemaSummarizer.js.map +1 -1
  59. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.d.ts +1 -1
  60. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.d.ts.map +1 -1
  61. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.js +13 -1
  62. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.js.map +1 -1
  63. package/dist/index.d.ts +3 -3
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +4 -4
  66. package/dist/index.js.map +1 -1
  67. package/dist/legacy.d.ts +1 -0
  68. package/dist/packageVersion.d.ts +1 -1
  69. package/dist/packageVersion.d.ts.map +1 -1
  70. package/dist/packageVersion.js +1 -1
  71. package/dist/packageVersion.js.map +1 -1
  72. package/dist/public.d.ts +1 -0
  73. package/dist/shared-tree/index.d.ts +1 -3
  74. package/dist/shared-tree/index.d.ts.map +1 -1
  75. package/dist/shared-tree/index.js +1 -7
  76. package/dist/shared-tree/index.js.map +1 -1
  77. package/dist/shared-tree/schematizingTreeView.d.ts +4 -5
  78. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  79. package/dist/shared-tree/schematizingTreeView.js +9 -10
  80. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  81. package/dist/shared-tree/sharedTree.d.ts +40 -39
  82. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  83. package/dist/shared-tree/sharedTree.js +84 -52
  84. package/dist/shared-tree/sharedTree.js.map +1 -1
  85. package/dist/shared-tree/treeApi.d.ts +2 -2
  86. package/dist/shared-tree/treeApi.d.ts.map +1 -1
  87. package/dist/shared-tree/treeApi.js +9 -3
  88. package/dist/shared-tree/treeApi.js.map +1 -1
  89. package/dist/shared-tree/treeCheckout.d.ts +3 -3
  90. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  91. package/dist/shared-tree/treeCheckout.js +3 -2
  92. package/dist/shared-tree/treeCheckout.js.map +1 -1
  93. package/dist/shared-tree-core/editManager.d.ts +11 -2
  94. package/dist/shared-tree-core/editManager.d.ts.map +1 -1
  95. package/dist/shared-tree-core/editManager.js +64 -29
  96. package/dist/shared-tree-core/editManager.js.map +1 -1
  97. package/dist/shared-tree-core/editManagerSummarizer.d.ts +1 -2
  98. package/dist/shared-tree-core/editManagerSummarizer.d.ts.map +1 -1
  99. package/dist/shared-tree-core/editManagerSummarizer.js +0 -9
  100. package/dist/shared-tree-core/editManagerSummarizer.js.map +1 -1
  101. package/dist/shared-tree-core/resubmitMachine.d.ts +2 -0
  102. package/dist/shared-tree-core/resubmitMachine.d.ts.map +1 -1
  103. package/dist/shared-tree-core/resubmitMachine.js.map +1 -1
  104. package/dist/shared-tree-core/sequenceIdUtils.d.ts +12 -1
  105. package/dist/shared-tree-core/sequenceIdUtils.d.ts.map +1 -1
  106. package/dist/shared-tree-core/sequenceIdUtils.js +25 -7
  107. package/dist/shared-tree-core/sequenceIdUtils.js.map +1 -1
  108. package/dist/shared-tree-core/sharedTreeCore.d.ts +33 -30
  109. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  110. package/dist/shared-tree-core/sharedTreeCore.js +62 -56
  111. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  112. package/dist/simple-tree/api/index.d.ts +3 -2
  113. package/dist/simple-tree/api/index.d.ts.map +1 -1
  114. package/dist/simple-tree/api/index.js +3 -1
  115. package/dist/simple-tree/api/index.js.map +1 -1
  116. package/dist/simple-tree/api/schemaFactory.d.ts +156 -63
  117. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  118. package/dist/simple-tree/api/schemaFactory.js +179 -86
  119. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  120. package/dist/{shared-tree → simple-tree/api}/transactionTypes.d.ts +1 -1
  121. package/dist/simple-tree/api/transactionTypes.d.ts.map +1 -0
  122. package/dist/{shared-tree → simple-tree/api}/transactionTypes.js.map +1 -1
  123. package/dist/simple-tree/api/tree.d.ts +23 -2
  124. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  125. package/dist/simple-tree/api/tree.js.map +1 -1
  126. package/dist/simple-tree/index.d.ts +1 -1
  127. package/dist/simple-tree/index.d.ts.map +1 -1
  128. package/dist/simple-tree/index.js +3 -2
  129. package/dist/simple-tree/index.js.map +1 -1
  130. package/dist/simple-tree/schemaTypes.d.ts +2 -2
  131. package/dist/simple-tree/schemaTypes.js +1 -1
  132. package/dist/simple-tree/schemaTypes.js.map +1 -1
  133. package/dist/simple-tree/treeNodeValid.js +1 -2
  134. package/dist/simple-tree/treeNodeValid.js.map +1 -1
  135. package/dist/treeFactory.d.ts +16 -5
  136. package/dist/treeFactory.d.ts.map +1 -1
  137. package/dist/treeFactory.js +21 -12
  138. package/dist/treeFactory.js.map +1 -1
  139. package/dist/util/breakable.d.ts +1 -1
  140. package/dist/util/breakable.d.ts.map +1 -1
  141. package/dist/util/breakable.js.map +1 -1
  142. package/dist/util/index.d.ts +1 -1
  143. package/dist/util/index.d.ts.map +1 -1
  144. package/dist/util/index.js +3 -2
  145. package/dist/util/index.js.map +1 -1
  146. package/dist/util/rangeMap.d.ts +1 -1
  147. package/dist/util/rangeMap.js +1 -1
  148. package/dist/util/rangeMap.js.map +1 -1
  149. package/dist/util/utils.d.ts +16 -0
  150. package/dist/util/utils.d.ts.map +1 -1
  151. package/dist/util/utils.js +29 -1
  152. package/dist/util/utils.js.map +1 -1
  153. package/lib/alpha.d.ts +1 -0
  154. package/lib/beta.d.ts +1 -0
  155. package/lib/core/forest/editableForest.js +1 -1
  156. package/lib/core/forest/editableForest.js.map +1 -1
  157. package/lib/core/index.d.ts +1 -1
  158. package/lib/core/index.d.ts.map +1 -1
  159. package/lib/core/index.js.map +1 -1
  160. package/lib/core/tree/anchorSet.d.ts +2 -5
  161. package/lib/core/tree/anchorSet.d.ts.map +1 -1
  162. package/lib/core/tree/anchorSet.js +17 -163
  163. package/lib/core/tree/anchorSet.js.map +1 -1
  164. package/lib/core/tree/index.d.ts +1 -2
  165. package/lib/core/tree/index.d.ts.map +1 -1
  166. package/lib/core/tree/index.js.map +1 -1
  167. package/lib/core/tree/pathTree.d.ts +0 -11
  168. package/lib/core/tree/pathTree.d.ts.map +1 -1
  169. package/lib/core/tree/pathTree.js.map +1 -1
  170. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js +1 -1
  171. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  172. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +1 -1
  173. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  174. package/lib/feature-libraries/detachedFieldIndexSummarizer.d.ts +1 -2
  175. package/lib/feature-libraries/detachedFieldIndexSummarizer.d.ts.map +1 -1
  176. package/lib/feature-libraries/detachedFieldIndexSummarizer.js +0 -9
  177. package/lib/feature-libraries/detachedFieldIndexSummarizer.js.map +1 -1
  178. package/lib/feature-libraries/flex-tree/treeEvents.d.ts +2 -4
  179. package/lib/feature-libraries/flex-tree/treeEvents.d.ts.map +1 -1
  180. package/lib/feature-libraries/flex-tree/treeEvents.js.map +1 -1
  181. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts +1 -2
  182. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  183. package/lib/feature-libraries/forest-summary/forestSummarizer.js +0 -9
  184. package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  185. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +6 -2
  186. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  187. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  188. package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts +2 -4
  189. package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  190. package/lib/feature-libraries/modular-schema/genericFieldKind.js +4 -19
  191. package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  192. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  193. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +17 -19
  194. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  195. package/lib/feature-libraries/node-key/mockNodeKeyManager.js +1 -1
  196. package/lib/feature-libraries/node-key/mockNodeKeyManager.js.map +1 -1
  197. package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  198. package/lib/feature-libraries/optional-field/optionalField.js +7 -3
  199. package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
  200. package/lib/feature-libraries/schema-index/schemaSummarizer.d.ts +3 -5
  201. package/lib/feature-libraries/schema-index/schemaSummarizer.d.ts.map +1 -1
  202. package/lib/feature-libraries/schema-index/schemaSummarizer.js +1 -11
  203. package/lib/feature-libraries/schema-index/schemaSummarizer.js.map +1 -1
  204. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.d.ts +1 -1
  205. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.d.ts.map +1 -1
  206. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.js +13 -1
  207. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.js.map +1 -1
  208. package/lib/index.d.ts +3 -3
  209. package/lib/index.d.ts.map +1 -1
  210. package/lib/index.js +3 -3
  211. package/lib/index.js.map +1 -1
  212. package/lib/legacy.d.ts +1 -0
  213. package/lib/packageVersion.d.ts +1 -1
  214. package/lib/packageVersion.d.ts.map +1 -1
  215. package/lib/packageVersion.js +1 -1
  216. package/lib/packageVersion.js.map +1 -1
  217. package/lib/public.d.ts +1 -0
  218. package/lib/shared-tree/index.d.ts +1 -3
  219. package/lib/shared-tree/index.d.ts.map +1 -1
  220. package/lib/shared-tree/index.js +1 -3
  221. package/lib/shared-tree/index.js.map +1 -1
  222. package/lib/shared-tree/schematizingTreeView.d.ts +4 -5
  223. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  224. package/lib/shared-tree/schematizingTreeView.js +4 -5
  225. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  226. package/lib/shared-tree/sharedTree.d.ts +40 -39
  227. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  228. package/lib/shared-tree/sharedTree.js +82 -50
  229. package/lib/shared-tree/sharedTree.js.map +1 -1
  230. package/lib/shared-tree/treeApi.d.ts +2 -2
  231. package/lib/shared-tree/treeApi.d.ts.map +1 -1
  232. package/lib/shared-tree/treeApi.js +8 -2
  233. package/lib/shared-tree/treeApi.js.map +1 -1
  234. package/lib/shared-tree/treeCheckout.d.ts +3 -3
  235. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  236. package/lib/shared-tree/treeCheckout.js +4 -3
  237. package/lib/shared-tree/treeCheckout.js.map +1 -1
  238. package/lib/shared-tree-core/editManager.d.ts +11 -2
  239. package/lib/shared-tree-core/editManager.d.ts.map +1 -1
  240. package/lib/shared-tree-core/editManager.js +65 -30
  241. package/lib/shared-tree-core/editManager.js.map +1 -1
  242. package/lib/shared-tree-core/editManagerSummarizer.d.ts +1 -2
  243. package/lib/shared-tree-core/editManagerSummarizer.d.ts.map +1 -1
  244. package/lib/shared-tree-core/editManagerSummarizer.js +0 -9
  245. package/lib/shared-tree-core/editManagerSummarizer.js.map +1 -1
  246. package/lib/shared-tree-core/resubmitMachine.d.ts +2 -0
  247. package/lib/shared-tree-core/resubmitMachine.d.ts.map +1 -1
  248. package/lib/shared-tree-core/resubmitMachine.js.map +1 -1
  249. package/lib/shared-tree-core/sequenceIdUtils.d.ts +12 -1
  250. package/lib/shared-tree-core/sequenceIdUtils.d.ts.map +1 -1
  251. package/lib/shared-tree-core/sequenceIdUtils.js +23 -5
  252. package/lib/shared-tree-core/sequenceIdUtils.js.map +1 -1
  253. package/lib/shared-tree-core/sharedTreeCore.d.ts +33 -30
  254. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  255. package/lib/shared-tree-core/sharedTreeCore.js +61 -55
  256. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  257. package/lib/simple-tree/api/index.d.ts +3 -2
  258. package/lib/simple-tree/api/index.d.ts.map +1 -1
  259. package/lib/simple-tree/api/index.js +1 -0
  260. package/lib/simple-tree/api/index.js.map +1 -1
  261. package/lib/simple-tree/api/schemaFactory.d.ts +156 -63
  262. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  263. package/lib/simple-tree/api/schemaFactory.js +178 -85
  264. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  265. package/lib/{shared-tree → simple-tree/api}/transactionTypes.d.ts +1 -1
  266. package/lib/simple-tree/api/transactionTypes.d.ts.map +1 -0
  267. package/lib/{shared-tree → simple-tree/api}/transactionTypes.js.map +1 -1
  268. package/lib/simple-tree/api/tree.d.ts +23 -2
  269. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  270. package/lib/simple-tree/api/tree.js.map +1 -1
  271. package/lib/simple-tree/index.d.ts +1 -1
  272. package/lib/simple-tree/index.d.ts.map +1 -1
  273. package/lib/simple-tree/index.js +1 -1
  274. package/lib/simple-tree/index.js.map +1 -1
  275. package/lib/simple-tree/schemaTypes.d.ts +2 -2
  276. package/lib/simple-tree/schemaTypes.js +1 -1
  277. package/lib/simple-tree/schemaTypes.js.map +1 -1
  278. package/lib/simple-tree/treeNodeValid.js +1 -2
  279. package/lib/simple-tree/treeNodeValid.js.map +1 -1
  280. package/lib/treeFactory.d.ts +16 -5
  281. package/lib/treeFactory.d.ts.map +1 -1
  282. package/lib/treeFactory.js +20 -11
  283. package/lib/treeFactory.js.map +1 -1
  284. package/lib/util/breakable.d.ts +1 -1
  285. package/lib/util/breakable.d.ts.map +1 -1
  286. package/lib/util/breakable.js.map +1 -1
  287. package/lib/util/index.d.ts +1 -1
  288. package/lib/util/index.d.ts.map +1 -1
  289. package/lib/util/index.js +1 -1
  290. package/lib/util/index.js.map +1 -1
  291. package/lib/util/rangeMap.d.ts +1 -1
  292. package/lib/util/rangeMap.js +1 -1
  293. package/lib/util/rangeMap.js.map +1 -1
  294. package/lib/util/utils.d.ts +16 -0
  295. package/lib/util/utils.d.ts.map +1 -1
  296. package/lib/util/utils.js +27 -0
  297. package/lib/util/utils.js.map +1 -1
  298. package/package.json +23 -23
  299. package/src/core/forest/editableForest.ts +1 -1
  300. package/src/core/index.ts +0 -3
  301. package/src/core/tree/anchorSet.ts +38 -221
  302. package/src/core/tree/index.ts +0 -3
  303. package/src/core/tree/pathTree.ts +0 -13
  304. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +1 -1
  305. package/src/feature-libraries/detachedFieldIndexSummarizer.ts +0 -11
  306. package/src/feature-libraries/flex-tree/treeEvents.ts +2 -4
  307. package/src/feature-libraries/forest-summary/forestSummarizer.ts +0 -11
  308. package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +6 -2
  309. package/src/feature-libraries/modular-schema/genericFieldKind.ts +3 -35
  310. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +18 -48
  311. package/src/feature-libraries/optional-field/optionalField.ts +10 -3
  312. package/src/feature-libraries/schema-index/schemaSummarizer.ts +1 -16
  313. package/src/feature-libraries/sequence-field/sequenceFieldEditor.ts +13 -2
  314. package/src/index.ts +15 -12
  315. package/src/packageVersion.ts +1 -1
  316. package/src/shared-tree/index.ts +3 -19
  317. package/src/shared-tree/schematizingTreeView.ts +18 -16
  318. package/src/shared-tree/sharedTree.ts +208 -100
  319. package/src/shared-tree/treeApi.ts +10 -1
  320. package/src/shared-tree/treeCheckout.ts +11 -8
  321. package/src/shared-tree-core/editManager.ts +80 -43
  322. package/src/shared-tree-core/editManagerSummarizer.ts +0 -11
  323. package/src/shared-tree-core/resubmitMachine.ts +2 -0
  324. package/src/shared-tree-core/sequenceIdUtils.ts +26 -5
  325. package/src/shared-tree-core/sharedTreeCore.ts +88 -99
  326. package/src/simple-tree/api/index.ts +15 -0
  327. package/src/simple-tree/api/schemaFactory.ts +203 -89
  328. package/src/{shared-tree → simple-tree/api}/transactionTypes.ts +1 -1
  329. package/src/simple-tree/api/tree.ts +31 -6
  330. package/src/simple-tree/index.ts +12 -0
  331. package/src/simple-tree/schemaTypes.ts +2 -2
  332. package/src/treeFactory.ts +29 -11
  333. package/src/util/breakable.ts +1 -1
  334. package/src/util/index.ts +1 -0
  335. package/src/util/rangeMap.ts +1 -1
  336. package/src/util/utils.ts +32 -0
  337. package/dist/core/tree/visitPath.d.ts +0 -101
  338. package/dist/core/tree/visitPath.d.ts.map +0 -1
  339. package/dist/core/tree/visitPath.js +0 -7
  340. package/dist/core/tree/visitPath.js.map +0 -1
  341. package/dist/shared-tree/publicContracts.d.ts +0 -18
  342. package/dist/shared-tree/publicContracts.d.ts.map +0 -1
  343. package/dist/shared-tree/publicContracts.js +0 -24
  344. package/dist/shared-tree/publicContracts.js.map +0 -1
  345. package/dist/shared-tree/transactionTypes.d.ts.map +0 -1
  346. package/lib/core/tree/visitPath.d.ts +0 -101
  347. package/lib/core/tree/visitPath.d.ts.map +0 -1
  348. package/lib/core/tree/visitPath.js +0 -6
  349. package/lib/core/tree/visitPath.js.map +0 -1
  350. package/lib/shared-tree/publicContracts.d.ts +0 -18
  351. package/lib/shared-tree/publicContracts.d.ts.map +0 -1
  352. package/lib/shared-tree/publicContracts.js +0 -21
  353. package/lib/shared-tree/publicContracts.js.map +0 -1
  354. package/lib/shared-tree/transactionTypes.d.ts.map +0 -1
  355. package/src/core/tree/visitPath.ts +0 -124
  356. package/src/shared-tree/publicContracts.ts +0 -24
  357. /package/dist/{shared-tree → simple-tree/api}/transactionTypes.js +0 -0
  358. /package/lib/{shared-tree → simple-tree/api}/transactionTypes.js +0 -0
@@ -4,16 +4,34 @@
4
4
  */
5
5
 
6
6
  import { assert } from "@fluidframework/core-utils/internal";
7
- import type { ErasedType, IFluidHandle } from "@fluidframework/core-interfaces/internal";
7
+ import type {
8
+ ErasedType,
9
+ IFluidHandle,
10
+ IFluidLoadable,
11
+ } from "@fluidframework/core-interfaces/internal";
8
12
  import type {
9
13
  IChannelAttributes,
10
- IChannelFactory,
11
14
  IFluidDataStoreRuntime,
12
- IChannelServices,
13
15
  IChannelStorageService,
16
+ IChannel,
14
17
  } from "@fluidframework/datastore-definitions/internal";
15
- import type { ISharedObject } from "@fluidframework/shared-object-base/internal";
16
- import { UsageError } from "@fluidframework/telemetry-utils/internal";
18
+ import {
19
+ SharedObject,
20
+ type IFluidSerializer,
21
+ type ISharedObject,
22
+ } from "@fluidframework/shared-object-base/internal";
23
+ import {
24
+ UsageError,
25
+ type ITelemetryLoggerExt,
26
+ } from "@fluidframework/telemetry-utils/internal";
27
+ import type { IIdCompressor } from "@fluidframework/id-compressor";
28
+ import type {
29
+ ITelemetryContext,
30
+ IExperimentalIncrementalSummaryContext,
31
+ ISummaryTreeWithStats,
32
+ IRuntimeMessageCollection,
33
+ } from "@fluidframework/runtime-definitions/internal";
34
+ import type { ISequencedDocumentMessage } from "@fluidframework/driver-definitions/internal";
17
35
 
18
36
  import { type ICodecOptions, noopValidator } from "../codec/index.js";
19
37
  import {
@@ -74,6 +92,7 @@ import {
74
92
  FieldKind,
75
93
  type CustomTreeNode,
76
94
  type CustomTreeValue,
95
+ type ITreeAlpha,
77
96
  } from "../simple-tree/index.js";
78
97
 
79
98
  import { SchematizingSimpleTreeView } from "./schematizingTreeView.js";
@@ -82,12 +101,16 @@ import { SharedTreeChangeFamily } from "./sharedTreeChangeFamily.js";
82
101
  import type { SharedTreeChange } from "./sharedTreeChangeTypes.js";
83
102
  import type { SharedTreeEditBuilder } from "./sharedTreeEditBuilder.js";
84
103
  import { type TreeCheckout, type BranchableTree, createTreeCheckout } from "./treeCheckout.js";
85
- import { breakingClass, fail, throwIfBroken } from "../util/index.js";
86
- import type { IIdCompressor } from "@fluidframework/id-compressor";
87
- import { SharedTreeAttributes, SharedTreeFactoryType } from "./publicContracts.js";
104
+ import {
105
+ Breakable,
106
+ breakingClass,
107
+ fail,
108
+ throwIfBroken,
109
+ type WithBreakable,
110
+ } from "../util/index.js";
88
111
 
89
112
  /**
90
- * Copy of data from an {@link ISharedTree} at some point in time.
113
+ * Copy of data from an {@link ITreePrivate} at some point in time.
91
114
  * @remarks
92
115
  * This is unrelated to Fluids concept of "snapshots".
93
116
  */
@@ -111,30 +134,26 @@ export interface SharedTreeContentSnapshot {
111
134
  }
112
135
 
113
136
  /**
114
- * {@link ITree} extended with some non-public APIs.
137
+ * Information about a Fluid channel.
138
+ * @privateRemarks
139
+ * This is distinct from {@link IChannel} as it omits the APIs used by the runtime to manage the channel and instead only has things which are useful (and safe) to expose to users of the channel.
115
140
  * @internal
116
141
  */
117
- export interface ITreeInternal extends ISharedObject, ITree {
118
- /**
119
- * Exports root in the same format as {@link TreeAlpha.(exportVerbose:1)} using stored keys.
120
- * @privateRemarks
121
- * TODO:
122
- * This should probably get promoted to a public API on ITree eventually.
123
- */
124
- exportVerbose(): VerboseTree | undefined;
142
+ export type IChannelView = Pick<IChannel, "id" | "attributes" | "isAttached">;
125
143
 
126
- /**
127
- * Exports the SimpleTreeSchema that is stored in the tree, using stored keys for object fields.
128
- * @remarks
129
- * To get the schema using property keys, use {@link getSimpleSchema} on the view schema.
130
- */
131
- exportSimpleSchema(): SimpleTreeSchema;
132
- }
144
+ /**
145
+ * {@link ITree} extended with some non-public APIs.
146
+ * @internal
147
+ */
148
+ export interface ITreeInternal extends IChannelView, ITreeAlpha {}
133
149
 
134
150
  /**
135
151
  * {@link ITreeInternal} extended with some non-exported APIs.
152
+ * @remarks
153
+ * This allows access to the tree content using the internal data model used at the storage and "flex" layers,
154
+ * and should only be needed for testing and debugging this package's internals.
136
155
  */
137
- export interface ISharedTree extends ISharedObject, ITreeInternal {
156
+ export interface ITreePrivate extends ITreeInternal {
138
157
  /**
139
158
  * Provides a copy of the current content of the tree.
140
159
  * This can be useful for inspecting the tree when no suitable view schema is available.
@@ -145,6 +164,13 @@ export interface ISharedTree extends ISharedObject, ITreeInternal {
145
164
  contentSnapshot(): SharedTreeContentSnapshot;
146
165
  }
147
166
 
167
+ /**
168
+ * {@link ITreePrivate} extended with ISharedObject.
169
+ * @remarks
170
+ * This is used when integration testing this package with the Fluid runtime as it exposes the APIs the runtime consumes to manipulate the tree.
171
+ */
172
+ export interface ISharedTree extends ISharedObject, ITreePrivate {}
173
+
148
174
  /**
149
175
  * Has an entry for each codec which writes an explicit version into its data.
150
176
  *
@@ -188,20 +214,20 @@ function getCodecVersions(formatVersion: number): ExplicitCodecVersions {
188
214
  }
189
215
 
190
216
  /**
191
- * Shared tree, configured with a good set of indexes and field kinds which will maintain compatibility over time.
192
- *
193
- * TODO: detail compatibility requirements.
217
+ * Shared object wrapping {@link SharedTreeKernel}.
194
218
  */
195
- @breakingClass
196
- export class SharedTree
197
- extends SharedTreeCore<SharedTreeEditBuilder, SharedTreeChange>
198
- implements ISharedTree
199
- {
200
- public readonly checkout: TreeCheckout;
219
+ export class SharedTree extends SharedObject implements ISharedTree, WithBreakable {
220
+ public readonly breaker: Breakable = new Breakable("Shared Tree");
221
+
222
+ public get checkout(): TreeCheckout {
223
+ return this.kernel.checkout;
224
+ }
201
225
  public get storedSchema(): TreeStoredSchemaRepository {
202
226
  return this.checkout.storedSchema;
203
227
  }
204
228
 
229
+ private readonly kernel: SharedTreeKernel;
230
+
205
231
  public constructor(
206
232
  id: string,
207
233
  runtime: IFluidDataStoreRuntime,
@@ -209,23 +235,136 @@ export class SharedTree
209
235
  optionsParam: SharedTreeOptionsInternal,
210
236
  telemetryContextPrefix: string = "fluid_sharedTree_",
211
237
  ) {
238
+ super(id, runtime, attributes, telemetryContextPrefix);
212
239
  if (runtime.idCompressor === undefined) {
213
240
  throw new UsageError("IdCompressor must be enabled to use SharedTree");
214
241
  }
242
+ this.kernel = new SharedTreeKernel(
243
+ this.breaker,
244
+ this,
245
+ this.serializer,
246
+ (content, localOpMetadata) => this.submitLocalMessage(content, localOpMetadata),
247
+ () => this.deltaManager.lastSequenceNumber,
248
+ this.logger,
249
+ runtime.idCompressor,
250
+ optionsParam,
251
+ );
252
+ }
253
+
254
+ public get editor(): SharedTreeEditBuilder {
255
+ return this.kernel.getEditor();
256
+ }
257
+
258
+ public summarizeCore(
259
+ serializer: IFluidSerializer,
260
+ telemetryContext?: ITelemetryContext,
261
+ incrementalSummaryContext?: IExperimentalIncrementalSummaryContext,
262
+ ): ISummaryTreeWithStats {
263
+ return this.kernel.summarizeCore(serializer, telemetryContext, incrementalSummaryContext);
264
+ }
265
+
266
+ protected processCore(
267
+ message: ISequencedDocumentMessage,
268
+ local: boolean,
269
+ localOpMetadata: unknown,
270
+ ): void {
271
+ this.kernel.processCore(message, local, localOpMetadata);
272
+ }
273
+
274
+ protected override processMessagesCore(messagesCollection: IRuntimeMessageCollection): void {
275
+ this.kernel.processMessagesCore(messagesCollection);
276
+ }
277
+
278
+ protected onDisconnect(): void {}
279
+
280
+ public exportVerbose(): VerboseTree | undefined {
281
+ return this.kernel.exportVerbose();
282
+ }
283
+
284
+ public exportSimpleSchema(): SimpleTreeSchema {
285
+ return this.kernel.exportSimpleSchema();
286
+ }
287
+
288
+ public contentSnapshot(): SharedTreeContentSnapshot {
289
+ return this.kernel.contentSnapshot();
290
+ }
291
+
292
+ // For the new TreeViewAlpha API
293
+ public viewWith<TRoot extends ImplicitFieldSchema | UnsafeUnknownSchema>(
294
+ config: TreeViewConfiguration<ReadSchema<TRoot>>,
295
+ ): SchematizingSimpleTreeView<TRoot> & TreeView<ReadSchema<TRoot>>;
296
+
297
+ // For the old TreeView API
298
+ public viewWith<TRoot extends ImplicitFieldSchema>(
299
+ config: TreeViewConfiguration<TRoot>,
300
+ ): SchematizingSimpleTreeView<TRoot> & TreeView<TRoot>;
301
+
302
+ public viewWith<TRoot extends ImplicitFieldSchema | UnsafeUnknownSchema>(
303
+ config: TreeViewConfiguration<ReadSchema<TRoot>>,
304
+ ): SchematizingSimpleTreeView<TRoot> & TreeView<ReadSchema<TRoot>> {
305
+ return this.kernel.viewWith(config);
306
+ }
307
+
308
+ protected override async loadCore(services: IChannelStorageService): Promise<void> {
309
+ await this.kernel.loadCore(services);
310
+ }
311
+
312
+ protected override didAttach(): void {
313
+ this.kernel.didAttach();
314
+ }
315
+
316
+ protected override applyStashedOp(
317
+ ...args: Parameters<
318
+ SharedTreeCore<SharedTreeEditBuilder, SharedTreeChange>["applyStashedOp"]
319
+ >
320
+ ): void {
321
+ this.kernel.applyStashedOp(...args);
322
+ }
323
+
324
+ protected override reSubmitCore(
325
+ ...args: Parameters<
326
+ SharedTreeCore<SharedTreeEditBuilder, SharedTreeChange>["reSubmitCore"]
327
+ >
328
+ ): void {
329
+ this.kernel.reSubmitCore(...args);
330
+ }
331
+ }
332
+
333
+ /**
334
+ * SharedTreeCore, configured with a good set of indexes and field kinds which will maintain compatibility over time.
335
+ *
336
+ * TODO: detail compatibility requirements.
337
+ */
338
+ @breakingClass
339
+ class SharedTreeKernel extends SharedTreeCore<SharedTreeEditBuilder, SharedTreeChange> {
340
+ public readonly checkout: TreeCheckout;
341
+ public get storedSchema(): TreeStoredSchemaRepository {
342
+ return this.checkout.storedSchema;
343
+ }
215
344
 
345
+ public constructor(
346
+ breaker: Breakable,
347
+ sharedObject: IChannelView & IFluidLoadable,
348
+ serializer: IFluidSerializer,
349
+ submitLocalMessage: (content: unknown, localOpMetadata?: unknown) => void,
350
+ lastSequenceNumber: () => number | undefined,
351
+ logger: ITelemetryLoggerExt | undefined,
352
+ idCompressor: IIdCompressor,
353
+ optionsParam: SharedTreeOptionsInternal,
354
+ ) {
216
355
  const options = { ...defaultSharedTreeOptions, ...optionsParam };
217
356
  const codecVersions = getCodecVersions(options.formatVersion);
218
357
  const schema = new TreeStoredSchemaRepository();
219
- const forest = buildConfiguredForest(options.forest, schema, runtime.idCompressor);
220
- const revisionTagCodec = new RevisionTagCodec(runtime.idCompressor);
358
+ const forest = buildConfiguredForest(options.forest, schema, idCompressor);
359
+ const revisionTagCodec = new RevisionTagCodec(idCompressor);
221
360
  const removedRoots = makeDetachedFieldIndex(
222
361
  "repair",
223
362
  revisionTagCodec,
224
- runtime.idCompressor,
363
+ idCompressor,
225
364
  options,
226
365
  );
227
- const schemaSummarizer = new SchemaSummarizer(runtime, schema, options, {
228
- getCurrentSeq: () => this.deltaManager.lastSequenceNumber,
366
+ const schemaSummarizer = new SchemaSummarizer(schema, options, {
367
+ getCurrentSeq: lastSequenceNumber,
229
368
  });
230
369
  const fieldBatchCodec = makeFieldBatchCodec(options, codecVersions.fieldBatch);
231
370
 
@@ -235,8 +374,8 @@ export class SharedTree
235
374
  policy: defaultSchemaPolicy,
236
375
  },
237
376
  encodeType: options.treeEncodeType,
238
- originatorId: runtime.idCompressor.localSessionId,
239
- idCompressor: runtime.idCompressor,
377
+ originatorId: idCompressor.localSessionId,
378
+ idCompressor,
240
379
  };
241
380
  const forestSummarizer = new ForestSummarizer(
242
381
  forest,
@@ -244,7 +383,7 @@ export class SharedTree
244
383
  fieldBatchCodec,
245
384
  encoderContext,
246
385
  options,
247
- runtime.idCompressor,
386
+ idCompressor,
248
387
  );
249
388
  const removedRootsSummarizer = new DetachedFieldIndexSummarizer(removedRoots);
250
389
  const innerChangeFamily = new SharedTreeChangeFamily(
@@ -252,7 +391,7 @@ export class SharedTree
252
391
  fieldBatchCodec,
253
392
  options,
254
393
  options.treeEncodeType,
255
- runtime.idCompressor,
394
+ idCompressor,
256
395
  );
257
396
  const changeFamily = makeMitigatedChangeFamily(
258
397
  innerChangeFamily,
@@ -278,14 +417,16 @@ export class SharedTree
278
417
  );
279
418
  const changeEnricher = new SharedTreeReadonlyChangeEnricher(forest, schema, removedRoots);
280
419
  super(
420
+ breaker,
421
+ sharedObject,
422
+ serializer,
423
+ submitLocalMessage,
424
+ logger,
281
425
  [schemaSummarizer, forestSummarizer, removedRootsSummarizer],
282
426
  changeFamily,
283
427
  options,
284
428
  codecVersions,
285
- id,
286
- runtime,
287
- attributes,
288
- telemetryContextPrefix,
429
+ idCompressor,
289
430
  schema,
290
431
  defaultSchemaPolicy,
291
432
  new DefaultResubmitMachine(
@@ -296,44 +437,39 @@ export class SharedTree
296
437
  changeEnricher,
297
438
  );
298
439
  const localBranch = this.getLocalBranch();
299
- this.checkout = createTreeCheckout(
300
- runtime.idCompressor,
301
- this.mintRevisionTag,
302
- revisionTagCodec,
303
- {
304
- branch: localBranch,
305
- changeFamily,
306
- schema,
307
- forest,
308
- fieldBatchCodec,
309
- removedRoots,
310
- chunkCompressionStrategy: options.treeEncodeType,
311
- logger: this.logger,
312
- breaker: this.breaker,
313
- disposeForksAfterTransaction: options.disposeForksAfterTransaction,
314
- },
315
- );
440
+ this.checkout = createTreeCheckout(idCompressor, this.mintRevisionTag, revisionTagCodec, {
441
+ branch: localBranch,
442
+ changeFamily,
443
+ schema,
444
+ forest,
445
+ fieldBatchCodec,
446
+ removedRoots,
447
+ chunkCompressionStrategy: options.treeEncodeType,
448
+ logger,
449
+ breaker: this.breaker,
450
+ disposeForksAfterTransaction: options.disposeForksAfterTransaction,
451
+ });
316
452
 
317
453
  this.checkout.transaction.events.on("started", () => {
318
- if (this.isAttached()) {
454
+ if (sharedObject.isAttached()) {
319
455
  // It is currently forbidden to attach during a transaction, so transaction state changes can be ignored until after attaching.
320
456
  this.commitEnricher.startTransaction();
321
457
  }
322
458
  });
323
459
  this.checkout.transaction.events.on("aborting", () => {
324
- if (this.isAttached()) {
460
+ if (sharedObject.isAttached()) {
325
461
  // It is currently forbidden to attach during a transaction, so transaction state changes can be ignored until after attaching.
326
462
  this.commitEnricher.abortTransaction();
327
463
  }
328
464
  });
329
465
  this.checkout.transaction.events.on("committing", () => {
330
- if (this.isAttached()) {
466
+ if (sharedObject.isAttached()) {
331
467
  // It is currently forbidden to attach during a transaction, so transaction state changes can be ignored until after attaching.
332
468
  this.commitEnricher.commitTransaction();
333
469
  }
334
470
  });
335
471
  this.checkout.events.on("beforeBatch", (event) => {
336
- if (event.type === "append" && this.isAttached()) {
472
+ if (event.type === "append" && sharedObject.isAttached()) {
337
473
  if (this.checkout.transaction.isInProgress()) {
338
474
  this.commitEnricher.addTransactionCommits(event.newCommits);
339
475
  }
@@ -402,12 +538,12 @@ export class SharedTree
402
538
  TreeView<ReadSchema<TRoot>>;
403
539
  }
404
540
 
405
- protected override async loadCore(services: IChannelStorageService): Promise<void> {
541
+ public override async loadCore(services: IChannelStorageService): Promise<void> {
406
542
  await super.loadCore(services);
407
543
  this.checkout.load();
408
544
  }
409
545
 
410
- protected override didAttach(): void {
546
+ public override didAttach(): void {
411
547
  if (this.checkout.transaction.isInProgress()) {
412
548
  // Attaching during a transaction is not currently supported.
413
549
  // At least part of of the system is known to not handle this case correctly - commit enrichment - and there may be others.
@@ -418,7 +554,7 @@ export class SharedTree
418
554
  super.didAttach();
419
555
  }
420
556
 
421
- protected override applyStashedOp(
557
+ public override applyStashedOp(
422
558
  ...args: Parameters<
423
559
  SharedTreeCore<SharedTreeEditBuilder, SharedTreeChange>["applyStashedOp"]
424
560
  >
@@ -642,34 +778,6 @@ export const defaultSharedTreeOptions: Required<SharedTreeOptionsInternal> = {
642
778
  disposeForksAfterTransaction: true,
643
779
  };
644
780
 
645
- /**
646
- * A channel factory that creates {@link ISharedTree}s.
647
- */
648
- export class SharedTreeFactory implements IChannelFactory<ISharedTree> {
649
- public readonly type: string = SharedTreeFactoryType;
650
-
651
- public readonly attributes: IChannelAttributes = SharedTreeAttributes;
652
-
653
- public constructor(private readonly options: SharedTreeOptionsInternal = {}) {}
654
-
655
- public async load(
656
- runtime: IFluidDataStoreRuntime,
657
- id: string,
658
- services: IChannelServices,
659
- channelAttributes: Readonly<IChannelAttributes>,
660
- ): Promise<SharedTree> {
661
- const tree = new SharedTree(id, runtime, channelAttributes, this.options);
662
- await tree.load(services);
663
- return tree;
664
- }
665
-
666
- public create(runtime: IFluidDataStoreRuntime, id: string): SharedTree {
667
- const tree = new SharedTree(id, runtime, this.attributes, this.options);
668
- tree.initializeLocal();
669
- return tree;
670
- }
671
- }
672
-
673
781
  function verboseFromCursor(
674
782
  reader: ITreeCursor,
675
783
  schema: ReadonlyMap<TreeNodeSchemaIdentifier, TreeNodeStoredSchema>,
@@ -14,12 +14,13 @@ import {
14
14
  type TreeView,
15
15
  getOrCreateInnerNode,
16
16
  treeNodeApi,
17
+ rollback,
18
+ type TransactionConstraint,
17
19
  } from "../simple-tree/index.js";
18
20
 
19
21
  import { SchematizingSimpleTreeView } from "./schematizingTreeView.js";
20
22
  import type { ITreeCheckout } from "./treeCheckout.js";
21
23
  import { getCheckoutFlexTreeView } from "./checkoutFlexTreeView.js";
22
- import { rollback, type TransactionConstraint } from "./transactionTypes.js";
23
24
 
24
25
  /**
25
26
  * A function which runs a transaction in a SharedTree.
@@ -394,6 +395,7 @@ function createRunTransaction(): RunTransaction {
394
395
  * Run the given transaction.
395
396
  * @remarks
396
397
  * This API is not publicly exported but is exported outside of this module so that test code may unit test the `Tree.runTransaction` function directly without being restricted to its public API overloads.
398
+ * @deprecated This API catches exceptions then tries to modify the tree before rethrowing: this is not robust. Use {@link TreeViewAlpha.runTransaction} instead which does not try to edit content in the error case.
397
399
  */
398
400
  export function runTransaction<
399
401
  TNode extends TreeNode,
@@ -427,6 +429,10 @@ export function runTransaction<
427
429
  }
428
430
  }
429
431
 
432
+ /**
433
+ * Run the given transaction.
434
+ * @deprecated This API catches exceptions then tries to modify the tree before rethrowing: this is not robust. Use {@link TreeViewAlpha.runTransaction} instead which does not try to editing content in the error case.
435
+ */
430
436
  function runTransactionInCheckout<TResult>(
431
437
  checkout: ITreeCheckout,
432
438
  transaction: () => TResult | typeof rollback,
@@ -450,11 +456,14 @@ function runTransactionInCheckout<TResult>(
450
456
  unreachableCase(constraint.type);
451
457
  }
452
458
  }
459
+
453
460
  let result: ReturnType<typeof transaction>;
454
461
  try {
455
462
  result = transaction();
456
463
  } catch (error) {
457
464
  // If the transaction has an unhandled error, abort and rollback the transaction but continue to propagate the error.
465
+ // This might try and modify the tree or trigger events while things are in an inconsistent state.
466
+ // It is up to the user of runTransaction to ensure that does not cause problems (and they have no robust way to do that, which is why its deprecated).
458
467
  checkout.transaction.abort();
459
468
  throw error;
460
469
  }
@@ -60,7 +60,13 @@ import {
60
60
  type SharedTreeBranchChange,
61
61
  type Transactor,
62
62
  } from "../shared-tree-core/index.js";
63
- import { Breakable, disposeSymbol, fail, getOrCreate } from "../util/index.js";
63
+ import {
64
+ Breakable,
65
+ disposeSymbol,
66
+ fail,
67
+ getOrCreate,
68
+ type WithBreakable,
69
+ } from "../util/index.js";
64
70
 
65
71
  import { SharedTreeChangeFamily, hasSchemaChange } from "./sharedTreeChangeFamily.js";
66
72
  import type { SharedTreeChange } from "./sharedTreeChangeTypes.js";
@@ -182,7 +188,7 @@ export interface TreeBranchFork extends BranchableTree, IDisposable {
182
188
  * API for interacting with a {@link SharedTreeBranch}.
183
189
  * Implementations of this interface must implement the {@link branchKey} property.
184
190
  */
185
- export interface ITreeCheckout extends AnchorLocator, ViewableTree {
191
+ export interface ITreeCheckout extends AnchorLocator, ViewableTree, WithBreakable {
186
192
  /**
187
193
  * Read and Write access for schema stored in the document.
188
194
  *
@@ -391,7 +397,7 @@ export class TreeCheckout implements ITreeCheckoutFork {
391
397
  ),
392
398
  /** Optional logger for telemetry. */
393
399
  private readonly logger?: ITelemetryLoggerExt,
394
- private readonly breaker: Breakable = new Breakable("TreeCheckout"),
400
+ public readonly breaker: Breakable = new Breakable("TreeCheckout"),
395
401
  private readonly disposeForksAfterTransaction = true,
396
402
  ) {
397
403
  this.#transaction = new SquashingTransactionStack(
@@ -549,15 +555,13 @@ export class TreeCheckout implements ITreeCheckoutFork {
549
555
 
550
556
  private withCombinedVisitor(fn: (visitor: DeltaVisitor) => void): void {
551
557
  const anchorVisitor = this.forest.anchors.acquireVisitor();
552
- const combinedVisitor = combineVisitors(
553
- [this.forest.acquireVisitor(), anchorVisitor],
554
- [anchorVisitor],
555
- );
558
+ const combinedVisitor = combineVisitors([this.forest.acquireVisitor(), anchorVisitor]);
556
559
  fn(combinedVisitor);
557
560
  combinedVisitor.free();
558
561
  }
559
562
 
560
563
  private checkNotDisposed(usageError?: string): void {
564
+ this.breaker.use();
561
565
  if (this.disposed) {
562
566
  if (usageError !== undefined) {
563
567
  throw new UsageError(usageError);
@@ -659,7 +663,6 @@ export class TreeCheckout implements ITreeCheckoutFork {
659
663
  this,
660
664
  config,
661
665
  createNodeKeyManager(this.idCompressor),
662
- this.breaker,
663
666
  () => {
664
667
  this.views.delete(view);
665
668
  },