@fluidframework/tree 2.4.0-297027 → 2.4.0-299374

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 (559) hide show
  1. package/.dependency-cruiser-known-violations.json +0 -14
  2. package/.vscode/settings.json +9 -1
  3. package/api-report/tree.alpha.api.md +178 -21
  4. package/api-report/tree.beta.api.md +46 -21
  5. package/api-report/tree.legacy.alpha.api.md +46 -21
  6. package/api-report/tree.legacy.public.api.md +46 -21
  7. package/api-report/tree.public.api.md +46 -21
  8. package/dist/alpha.d.ts +29 -1
  9. package/dist/beta.d.ts +2 -0
  10. package/dist/codec/codec.d.ts +4 -4
  11. package/dist/codec/codec.js.map +1 -1
  12. package/dist/codec/noopValidator.d.ts +1 -1
  13. package/dist/codec/noopValidator.js +1 -1
  14. package/dist/codec/noopValidator.js.map +1 -1
  15. package/dist/core/change-family/changeFamily.d.ts +2 -2
  16. package/dist/core/change-family/changeFamily.d.ts.map +1 -1
  17. package/dist/core/change-family/changeFamily.js.map +1 -1
  18. package/dist/core/change-family/editBuilder.d.ts +3 -2
  19. package/dist/core/change-family/editBuilder.d.ts.map +1 -1
  20. package/dist/core/change-family/editBuilder.js.map +1 -1
  21. package/dist/core/rebase/changeRebaser.d.ts +2 -1
  22. package/dist/core/rebase/changeRebaser.d.ts.map +1 -1
  23. package/dist/core/rebase/changeRebaser.js.map +1 -1
  24. package/dist/core/rebase/utils.js +1 -1
  25. package/dist/core/rebase/utils.js.map +1 -1
  26. package/dist/core/tree/anchorSet.d.ts +159 -2
  27. package/dist/core/tree/anchorSet.d.ts.map +1 -1
  28. package/dist/core/tree/anchorSet.js +54 -12
  29. package/dist/core/tree/anchorSet.js.map +1 -1
  30. package/dist/external-utilities/typeboxValidator.d.ts +1 -1
  31. package/dist/external-utilities/typeboxValidator.js +1 -1
  32. package/dist/external-utilities/typeboxValidator.js.map +1 -1
  33. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +4 -3
  34. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  35. package/dist/feature-libraries/default-schema/defaultEditBuilder.js +41 -30
  36. package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  37. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +4 -6
  38. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  39. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  40. package/dist/feature-libraries/flex-tree/lazyField.d.ts +4 -0
  41. package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  42. package/dist/feature-libraries/flex-tree/lazyField.js +38 -6
  43. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  44. package/dist/feature-libraries/index.d.ts +0 -1
  45. package/dist/feature-libraries/index.d.ts.map +1 -1
  46. package/dist/feature-libraries/index.js +46 -49
  47. package/dist/feature-libraries/index.js.map +1 -1
  48. package/dist/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
  49. package/dist/feature-libraries/mitigatedChangeFamily.js +4 -4
  50. package/dist/feature-libraries/mitigatedChangeFamily.js.map +1 -1
  51. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +1 -1
  52. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  53. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  54. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +12 -8
  55. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  56. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +179 -60
  57. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  58. package/dist/feature-libraries/optional-field/optionalField.d.ts +10 -9
  59. package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  60. package/dist/feature-libraries/optional-field/optionalField.js +9 -7
  61. package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
  62. package/dist/feature-libraries/schema-index/schemaSummarizer.d.ts +3 -10
  63. package/dist/feature-libraries/schema-index/schemaSummarizer.d.ts.map +1 -1
  64. package/dist/feature-libraries/schema-index/schemaSummarizer.js +1 -8
  65. package/dist/feature-libraries/schema-index/schemaSummarizer.js.map +1 -1
  66. package/dist/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  67. package/dist/feature-libraries/sequence-field/compose.js +32 -20
  68. package/dist/feature-libraries/sequence-field/compose.js.map +1 -1
  69. package/dist/feature-libraries/sequence-field/invert.d.ts +6 -1
  70. package/dist/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  71. package/dist/feature-libraries/sequence-field/invert.js +25 -9
  72. package/dist/feature-libraries/sequence-field/invert.js.map +1 -1
  73. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.d.ts +17 -16
  74. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.d.ts.map +1 -1
  75. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.js +19 -11
  76. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.js.map +1 -1
  77. package/dist/feature-libraries/treeCompressionUtils.d.ts +1 -1
  78. package/dist/feature-libraries/treeCompressionUtils.js +1 -1
  79. package/dist/feature-libraries/treeCompressionUtils.js.map +1 -1
  80. package/dist/index.d.ts +6 -5
  81. package/dist/index.d.ts.map +1 -1
  82. package/dist/index.js +4 -2
  83. package/dist/index.js.map +1 -1
  84. package/dist/internalTypes.d.ts +2 -2
  85. package/dist/internalTypes.d.ts.map +1 -1
  86. package/dist/internalTypes.js.map +1 -1
  87. package/dist/legacy.d.ts +2 -0
  88. package/dist/packageVersion.d.ts +1 -1
  89. package/dist/packageVersion.js +1 -1
  90. package/dist/packageVersion.js.map +1 -1
  91. package/dist/public.d.ts +2 -0
  92. package/dist/shared-tree/index.d.ts +2 -1
  93. package/dist/shared-tree/index.d.ts.map +1 -1
  94. package/dist/shared-tree/index.js +5 -1
  95. package/dist/shared-tree/index.js.map +1 -1
  96. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  97. package/dist/shared-tree/schematizingTreeView.js +1 -14
  98. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  99. package/dist/shared-tree/sharedTree.d.ts +24 -9
  100. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  101. package/dist/shared-tree/sharedTree.js +21 -9
  102. package/dist/shared-tree/sharedTree.js.map +1 -1
  103. package/dist/shared-tree/sharedTreeChangeFamily.d.ts +2 -2
  104. package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  105. package/dist/shared-tree/sharedTreeChangeFamily.js +4 -4
  106. package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  107. package/dist/shared-tree/sharedTreeEditBuilder.d.ts +2 -2
  108. package/dist/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
  109. package/dist/shared-tree/sharedTreeEditBuilder.js +15 -11
  110. package/dist/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  111. package/dist/shared-tree/treeApi.d.ts +6 -6
  112. package/dist/shared-tree/treeApi.d.ts.map +1 -1
  113. package/dist/shared-tree/treeApi.js.map +1 -1
  114. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  115. package/dist/shared-tree/treeCheckout.js +4 -3
  116. package/dist/shared-tree/treeCheckout.js.map +1 -1
  117. package/dist/shared-tree-core/branch.d.ts +2 -3
  118. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  119. package/dist/shared-tree-core/branch.js +10 -11
  120. package/dist/shared-tree-core/branch.js.map +1 -1
  121. package/dist/shared-tree-core/defaultResubmitMachine.d.ts +5 -5
  122. package/dist/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
  123. package/dist/shared-tree-core/defaultResubmitMachine.js +4 -4
  124. package/dist/shared-tree-core/defaultResubmitMachine.js.map +1 -1
  125. package/dist/shared-tree-core/editManager.d.ts.map +1 -1
  126. package/dist/shared-tree-core/editManager.js +1 -1
  127. package/dist/shared-tree-core/editManager.js.map +1 -1
  128. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  129. package/dist/shared-tree-core/sharedTreeCore.js +2 -2
  130. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  131. package/dist/simple-tree/api/conciseTree.d.ts +29 -0
  132. package/dist/simple-tree/api/conciseTree.d.ts.map +1 -0
  133. package/dist/simple-tree/api/conciseTree.js +25 -0
  134. package/dist/simple-tree/api/conciseTree.js.map +1 -0
  135. package/dist/simple-tree/api/customTree.d.ts +44 -0
  136. package/dist/simple-tree/api/customTree.d.ts.map +1 -0
  137. package/dist/simple-tree/api/customTree.js +63 -0
  138. package/dist/simple-tree/api/customTree.js.map +1 -0
  139. package/dist/simple-tree/api/index.d.ts +7 -2
  140. package/dist/simple-tree/api/index.d.ts.map +1 -1
  141. package/dist/simple-tree/api/index.js +5 -1
  142. package/dist/simple-tree/api/index.js.map +1 -1
  143. package/dist/simple-tree/api/schemaCreationUtilities.d.ts +41 -26
  144. package/dist/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
  145. package/dist/simple-tree/api/schemaCreationUtilities.js +43 -15
  146. package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  147. package/dist/simple-tree/api/schemaFactory.d.ts +1 -2
  148. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  149. package/dist/simple-tree/api/schemaFactory.js +8 -8
  150. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  151. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +1 -2
  152. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  153. package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  154. package/dist/simple-tree/api/storedSchema.d.ts +78 -0
  155. package/dist/simple-tree/api/storedSchema.d.ts.map +1 -0
  156. package/dist/simple-tree/api/storedSchema.js +107 -0
  157. package/dist/simple-tree/api/storedSchema.js.map +1 -0
  158. package/dist/simple-tree/api/testRecursiveDomain.d.ts +10 -10
  159. package/dist/simple-tree/api/tree.d.ts +12 -3
  160. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  161. package/dist/simple-tree/api/tree.js.map +1 -1
  162. package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  163. package/dist/simple-tree/api/treeNodeApi.js +5 -5
  164. package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
  165. package/dist/simple-tree/{typesUnsafe.d.ts → api/typesUnsafe.d.ts} +58 -10
  166. package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -0
  167. package/dist/simple-tree/api/typesUnsafe.js.map +1 -0
  168. package/dist/simple-tree/api/verboseTree.d.ts +6 -20
  169. package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
  170. package/dist/simple-tree/api/verboseTree.js +10 -48
  171. package/dist/simple-tree/api/verboseTree.js.map +1 -1
  172. package/dist/simple-tree/arrayNode.d.ts +14 -3
  173. package/dist/simple-tree/arrayNode.d.ts.map +1 -1
  174. package/dist/simple-tree/arrayNode.js +1 -2
  175. package/dist/simple-tree/arrayNode.js.map +1 -1
  176. package/dist/simple-tree/core/index.d.ts +1 -1
  177. package/dist/simple-tree/core/index.d.ts.map +1 -1
  178. package/dist/simple-tree/core/index.js +2 -1
  179. package/dist/simple-tree/core/index.js.map +1 -1
  180. package/dist/simple-tree/core/treeNodeKernel.d.ts +9 -0
  181. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  182. package/dist/simple-tree/core/treeNodeKernel.js +14 -1
  183. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  184. package/dist/simple-tree/core/treeNodeSchema.d.ts +6 -5
  185. package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  186. package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
  187. package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  188. package/dist/simple-tree/core/unhydratedFlexTree.js +3 -1
  189. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  190. package/dist/simple-tree/core/withType.d.ts +3 -1
  191. package/dist/simple-tree/core/withType.d.ts.map +1 -1
  192. package/dist/simple-tree/core/withType.js.map +1 -1
  193. package/dist/simple-tree/flexList.d.ts.map +1 -0
  194. package/dist/simple-tree/flexList.js.map +1 -0
  195. package/dist/simple-tree/index.d.ts +6 -7
  196. package/dist/simple-tree/index.d.ts.map +1 -1
  197. package/dist/simple-tree/index.js +5 -3
  198. package/dist/simple-tree/index.js.map +1 -1
  199. package/dist/simple-tree/mapNode.d.ts.map +1 -1
  200. package/dist/simple-tree/mapNode.js +2 -3
  201. package/dist/simple-tree/mapNode.js.map +1 -1
  202. package/dist/simple-tree/objectNode.d.ts.map +1 -1
  203. package/dist/simple-tree/objectNode.js +3 -4
  204. package/dist/simple-tree/objectNode.js.map +1 -1
  205. package/dist/simple-tree/schemaTypes.d.ts +60 -7
  206. package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
  207. package/dist/simple-tree/schemaTypes.js +11 -6
  208. package/dist/simple-tree/schemaTypes.js.map +1 -1
  209. package/dist/simple-tree/toFlexSchema.d.ts.map +1 -1
  210. package/dist/simple-tree/toFlexSchema.js +13 -15
  211. package/dist/simple-tree/toFlexSchema.js.map +1 -1
  212. package/dist/simple-tree/toMapTree.d.ts +4 -2
  213. package/dist/simple-tree/toMapTree.d.ts.map +1 -1
  214. package/dist/simple-tree/toMapTree.js +3 -3
  215. package/dist/simple-tree/toMapTree.js.map +1 -1
  216. package/dist/simple-tree/treeNodeValid.d.ts.map +1 -1
  217. package/dist/simple-tree/treeNodeValid.js +2 -1
  218. package/dist/simple-tree/treeNodeValid.js.map +1 -1
  219. package/dist/treeFactory.d.ts +1 -0
  220. package/dist/treeFactory.d.ts.map +1 -1
  221. package/dist/treeFactory.js +1 -0
  222. package/dist/treeFactory.js.map +1 -1
  223. package/dist/util/utils.d.ts +10 -8
  224. package/dist/util/utils.d.ts.map +1 -1
  225. package/dist/util/utils.js.map +1 -1
  226. package/docs/main/detached-trees.md +8 -8
  227. package/lib/alpha.d.ts +29 -1
  228. package/lib/beta.d.ts +2 -0
  229. package/lib/codec/codec.d.ts +4 -4
  230. package/lib/codec/codec.js.map +1 -1
  231. package/lib/codec/noopValidator.d.ts +1 -1
  232. package/lib/codec/noopValidator.js +1 -1
  233. package/lib/codec/noopValidator.js.map +1 -1
  234. package/lib/core/change-family/changeFamily.d.ts +2 -2
  235. package/lib/core/change-family/changeFamily.d.ts.map +1 -1
  236. package/lib/core/change-family/changeFamily.js.map +1 -1
  237. package/lib/core/change-family/editBuilder.d.ts +3 -2
  238. package/lib/core/change-family/editBuilder.d.ts.map +1 -1
  239. package/lib/core/change-family/editBuilder.js.map +1 -1
  240. package/lib/core/rebase/changeRebaser.d.ts +2 -1
  241. package/lib/core/rebase/changeRebaser.d.ts.map +1 -1
  242. package/lib/core/rebase/changeRebaser.js.map +1 -1
  243. package/lib/core/rebase/utils.js +1 -1
  244. package/lib/core/rebase/utils.js.map +1 -1
  245. package/lib/core/tree/anchorSet.d.ts +159 -2
  246. package/lib/core/tree/anchorSet.d.ts.map +1 -1
  247. package/lib/core/tree/anchorSet.js +54 -12
  248. package/lib/core/tree/anchorSet.js.map +1 -1
  249. package/lib/external-utilities/typeboxValidator.d.ts +1 -1
  250. package/lib/external-utilities/typeboxValidator.js +1 -1
  251. package/lib/external-utilities/typeboxValidator.js.map +1 -1
  252. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +4 -3
  253. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  254. package/lib/feature-libraries/default-schema/defaultEditBuilder.js +41 -30
  255. package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  256. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +4 -6
  257. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  258. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  259. package/lib/feature-libraries/flex-tree/lazyField.d.ts +4 -0
  260. package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  261. package/lib/feature-libraries/flex-tree/lazyField.js +36 -5
  262. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  263. package/lib/feature-libraries/index.d.ts +0 -1
  264. package/lib/feature-libraries/index.d.ts.map +1 -1
  265. package/lib/feature-libraries/index.js +0 -1
  266. package/lib/feature-libraries/index.js.map +1 -1
  267. package/lib/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
  268. package/lib/feature-libraries/mitigatedChangeFamily.js +4 -4
  269. package/lib/feature-libraries/mitigatedChangeFamily.js.map +1 -1
  270. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +1 -1
  271. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  272. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  273. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +12 -8
  274. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  275. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +180 -61
  276. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  277. package/lib/feature-libraries/optional-field/optionalField.d.ts +10 -9
  278. package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  279. package/lib/feature-libraries/optional-field/optionalField.js +9 -7
  280. package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
  281. package/lib/feature-libraries/schema-index/schemaSummarizer.d.ts +3 -10
  282. package/lib/feature-libraries/schema-index/schemaSummarizer.d.ts.map +1 -1
  283. package/lib/feature-libraries/schema-index/schemaSummarizer.js +1 -8
  284. package/lib/feature-libraries/schema-index/schemaSummarizer.js.map +1 -1
  285. package/lib/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  286. package/lib/feature-libraries/sequence-field/compose.js +32 -20
  287. package/lib/feature-libraries/sequence-field/compose.js.map +1 -1
  288. package/lib/feature-libraries/sequence-field/invert.d.ts +6 -1
  289. package/lib/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  290. package/lib/feature-libraries/sequence-field/invert.js +25 -9
  291. package/lib/feature-libraries/sequence-field/invert.js.map +1 -1
  292. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.d.ts +17 -16
  293. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.d.ts.map +1 -1
  294. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.js +19 -11
  295. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.js.map +1 -1
  296. package/lib/feature-libraries/treeCompressionUtils.d.ts +1 -1
  297. package/lib/feature-libraries/treeCompressionUtils.js +1 -1
  298. package/lib/feature-libraries/treeCompressionUtils.js.map +1 -1
  299. package/lib/index.d.ts +6 -5
  300. package/lib/index.d.ts.map +1 -1
  301. package/lib/index.js +3 -3
  302. package/lib/index.js.map +1 -1
  303. package/lib/internalTypes.d.ts +2 -2
  304. package/lib/internalTypes.d.ts.map +1 -1
  305. package/lib/internalTypes.js.map +1 -1
  306. package/lib/legacy.d.ts +2 -0
  307. package/lib/packageVersion.d.ts +1 -1
  308. package/lib/packageVersion.js +1 -1
  309. package/lib/packageVersion.js.map +1 -1
  310. package/lib/public.d.ts +2 -0
  311. package/lib/shared-tree/index.d.ts +2 -1
  312. package/lib/shared-tree/index.d.ts.map +1 -1
  313. package/lib/shared-tree/index.js +2 -1
  314. package/lib/shared-tree/index.js.map +1 -1
  315. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  316. package/lib/shared-tree/schematizingTreeView.js +2 -15
  317. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  318. package/lib/shared-tree/sharedTree.d.ts +24 -9
  319. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  320. package/lib/shared-tree/sharedTree.js +20 -9
  321. package/lib/shared-tree/sharedTree.js.map +1 -1
  322. package/lib/shared-tree/sharedTreeChangeFamily.d.ts +2 -2
  323. package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  324. package/lib/shared-tree/sharedTreeChangeFamily.js +4 -4
  325. package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  326. package/lib/shared-tree/sharedTreeEditBuilder.d.ts +2 -2
  327. package/lib/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
  328. package/lib/shared-tree/sharedTreeEditBuilder.js +15 -11
  329. package/lib/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  330. package/lib/shared-tree/treeApi.d.ts +6 -6
  331. package/lib/shared-tree/treeApi.d.ts.map +1 -1
  332. package/lib/shared-tree/treeApi.js.map +1 -1
  333. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  334. package/lib/shared-tree/treeCheckout.js +5 -4
  335. package/lib/shared-tree/treeCheckout.js.map +1 -1
  336. package/lib/shared-tree-core/branch.d.ts +2 -3
  337. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  338. package/lib/shared-tree-core/branch.js +11 -12
  339. package/lib/shared-tree-core/branch.js.map +1 -1
  340. package/lib/shared-tree-core/defaultResubmitMachine.d.ts +5 -5
  341. package/lib/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
  342. package/lib/shared-tree-core/defaultResubmitMachine.js +4 -4
  343. package/lib/shared-tree-core/defaultResubmitMachine.js.map +1 -1
  344. package/lib/shared-tree-core/editManager.d.ts.map +1 -1
  345. package/lib/shared-tree-core/editManager.js +2 -2
  346. package/lib/shared-tree-core/editManager.js.map +1 -1
  347. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  348. package/lib/shared-tree-core/sharedTreeCore.js +2 -2
  349. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  350. package/lib/simple-tree/api/conciseTree.d.ts +29 -0
  351. package/lib/simple-tree/api/conciseTree.d.ts.map +1 -0
  352. package/lib/simple-tree/api/conciseTree.js +21 -0
  353. package/lib/simple-tree/api/conciseTree.js.map +1 -0
  354. package/lib/simple-tree/api/customTree.d.ts +44 -0
  355. package/lib/simple-tree/api/customTree.d.ts.map +1 -0
  356. package/lib/simple-tree/api/customTree.js +59 -0
  357. package/lib/simple-tree/api/customTree.js.map +1 -0
  358. package/lib/simple-tree/api/index.d.ts +7 -2
  359. package/lib/simple-tree/api/index.d.ts.map +1 -1
  360. package/lib/simple-tree/api/index.js +1 -0
  361. package/lib/simple-tree/api/index.js.map +1 -1
  362. package/lib/simple-tree/api/schemaCreationUtilities.d.ts +41 -26
  363. package/lib/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
  364. package/lib/simple-tree/api/schemaCreationUtilities.js +43 -15
  365. package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  366. package/lib/simple-tree/api/schemaFactory.d.ts +1 -2
  367. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  368. package/lib/simple-tree/api/schemaFactory.js +1 -1
  369. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  370. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +1 -2
  371. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  372. package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  373. package/lib/simple-tree/api/storedSchema.d.ts +78 -0
  374. package/lib/simple-tree/api/storedSchema.d.ts.map +1 -0
  375. package/lib/simple-tree/api/storedSchema.js +101 -0
  376. package/lib/simple-tree/api/storedSchema.js.map +1 -0
  377. package/lib/simple-tree/api/testRecursiveDomain.d.ts +10 -10
  378. package/lib/simple-tree/api/tree.d.ts +12 -3
  379. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  380. package/lib/simple-tree/api/tree.js.map +1 -1
  381. package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  382. package/lib/simple-tree/api/treeNodeApi.js +3 -3
  383. package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
  384. package/lib/simple-tree/{typesUnsafe.d.ts → api/typesUnsafe.d.ts} +58 -10
  385. package/lib/simple-tree/api/typesUnsafe.d.ts.map +1 -0
  386. package/lib/simple-tree/api/typesUnsafe.js.map +1 -0
  387. package/lib/simple-tree/api/verboseTree.d.ts +6 -20
  388. package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
  389. package/lib/simple-tree/api/verboseTree.js +11 -49
  390. package/lib/simple-tree/api/verboseTree.js.map +1 -1
  391. package/lib/simple-tree/arrayNode.d.ts +14 -3
  392. package/lib/simple-tree/arrayNode.d.ts.map +1 -1
  393. package/lib/simple-tree/arrayNode.js +1 -2
  394. package/lib/simple-tree/arrayNode.js.map +1 -1
  395. package/lib/simple-tree/core/index.d.ts +1 -1
  396. package/lib/simple-tree/core/index.d.ts.map +1 -1
  397. package/lib/simple-tree/core/index.js +1 -1
  398. package/lib/simple-tree/core/index.js.map +1 -1
  399. package/lib/simple-tree/core/treeNodeKernel.d.ts +9 -0
  400. package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  401. package/lib/simple-tree/core/treeNodeKernel.js +12 -0
  402. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  403. package/lib/simple-tree/core/treeNodeSchema.d.ts +6 -5
  404. package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  405. package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
  406. package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  407. package/lib/simple-tree/core/unhydratedFlexTree.js +3 -1
  408. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  409. package/lib/simple-tree/core/withType.d.ts +3 -1
  410. package/lib/simple-tree/core/withType.d.ts.map +1 -1
  411. package/lib/simple-tree/core/withType.js.map +1 -1
  412. package/lib/simple-tree/flexList.d.ts.map +1 -0
  413. package/lib/simple-tree/flexList.js.map +1 -0
  414. package/lib/simple-tree/index.d.ts +6 -7
  415. package/lib/simple-tree/index.d.ts.map +1 -1
  416. package/lib/simple-tree/index.js +3 -4
  417. package/lib/simple-tree/index.js.map +1 -1
  418. package/lib/simple-tree/mapNode.d.ts.map +1 -1
  419. package/lib/simple-tree/mapNode.js +1 -2
  420. package/lib/simple-tree/mapNode.js.map +1 -1
  421. package/lib/simple-tree/objectNode.d.ts.map +1 -1
  422. package/lib/simple-tree/objectNode.js +1 -2
  423. package/lib/simple-tree/objectNode.js.map +1 -1
  424. package/lib/simple-tree/schemaTypes.d.ts +60 -7
  425. package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
  426. package/lib/simple-tree/schemaTypes.js +6 -1
  427. package/lib/simple-tree/schemaTypes.js.map +1 -1
  428. package/lib/simple-tree/toFlexSchema.d.ts.map +1 -1
  429. package/lib/simple-tree/toFlexSchema.js +1 -3
  430. package/lib/simple-tree/toFlexSchema.js.map +1 -1
  431. package/lib/simple-tree/toMapTree.d.ts +4 -2
  432. package/lib/simple-tree/toMapTree.d.ts.map +1 -1
  433. package/lib/simple-tree/toMapTree.js +3 -3
  434. package/lib/simple-tree/toMapTree.js.map +1 -1
  435. package/lib/simple-tree/treeNodeValid.d.ts.map +1 -1
  436. package/lib/simple-tree/treeNodeValid.js +2 -1
  437. package/lib/simple-tree/treeNodeValid.js.map +1 -1
  438. package/lib/treeFactory.d.ts +1 -0
  439. package/lib/treeFactory.d.ts.map +1 -1
  440. package/lib/treeFactory.js +1 -0
  441. package/lib/treeFactory.js.map +1 -1
  442. package/lib/util/utils.d.ts +10 -8
  443. package/lib/util/utils.d.ts.map +1 -1
  444. package/lib/util/utils.js.map +1 -1
  445. package/package.json +44 -27
  446. package/src/codec/codec.ts +4 -4
  447. package/src/codec/noopValidator.ts +1 -1
  448. package/src/core/change-family/changeFamily.ts +5 -2
  449. package/src/core/change-family/editBuilder.ts +3 -2
  450. package/src/core/rebase/changeRebaser.ts +6 -1
  451. package/src/core/rebase/utils.ts +1 -1
  452. package/src/core/tree/anchorSet.ts +63 -13
  453. package/src/external-utilities/typeboxValidator.ts +1 -1
  454. package/src/feature-libraries/default-schema/defaultEditBuilder.ts +92 -47
  455. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +7 -7
  456. package/src/feature-libraries/flex-tree/lazyField.ts +44 -7
  457. package/src/feature-libraries/index.ts +0 -10
  458. package/src/feature-libraries/mitigatedChangeFamily.ts +11 -4
  459. package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +1 -0
  460. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +218 -175
  461. package/src/feature-libraries/optional-field/optionalField.ts +21 -17
  462. package/src/feature-libraries/schema-index/schemaSummarizer.ts +2 -10
  463. package/src/feature-libraries/sequence-field/compose.ts +67 -58
  464. package/src/feature-libraries/sequence-field/invert.ts +30 -6
  465. package/src/feature-libraries/sequence-field/sequenceFieldEditor.ts +65 -19
  466. package/src/feature-libraries/treeCompressionUtils.ts +1 -1
  467. package/src/index.ts +26 -6
  468. package/src/internalTypes.ts +4 -1
  469. package/src/packageVersion.ts +1 -1
  470. package/src/shared-tree/index.ts +5 -0
  471. package/src/shared-tree/schematizingTreeView.ts +7 -16
  472. package/src/shared-tree/sharedTree.ts +55 -23
  473. package/src/shared-tree/sharedTreeChangeFamily.ts +5 -1
  474. package/src/shared-tree/sharedTreeEditBuilder.ts +23 -12
  475. package/src/shared-tree/treeApi.ts +19 -9
  476. package/src/shared-tree/treeCheckout.ts +7 -6
  477. package/src/shared-tree-core/branch.ts +11 -14
  478. package/src/shared-tree-core/defaultResubmitMachine.ts +4 -4
  479. package/src/shared-tree-core/editManager.ts +2 -1
  480. package/src/shared-tree-core/sharedTreeCore.ts +4 -2
  481. package/src/simple-tree/api/conciseTree.ts +58 -0
  482. package/src/simple-tree/api/customTree.ts +119 -0
  483. package/src/simple-tree/api/index.ts +39 -1
  484. package/src/simple-tree/api/schemaCreationUtilities.ts +55 -36
  485. package/src/simple-tree/api/schemaFactory.ts +4 -6
  486. package/src/simple-tree/api/schemaFactoryRecursive.ts +1 -2
  487. package/src/simple-tree/api/storedSchema.ts +126 -0
  488. package/src/simple-tree/api/tree.ts +24 -2
  489. package/src/simple-tree/api/treeNodeApi.ts +3 -8
  490. package/src/simple-tree/{typesUnsafe.ts → api/typesUnsafe.ts} +95 -21
  491. package/src/simple-tree/api/verboseTree.ts +21 -76
  492. package/src/simple-tree/arrayNode.ts +35 -15
  493. package/src/simple-tree/core/index.ts +1 -0
  494. package/src/simple-tree/core/treeNodeKernel.ts +13 -0
  495. package/src/simple-tree/core/treeNodeSchema.ts +7 -5
  496. package/src/simple-tree/core/unhydratedFlexTree.ts +6 -1
  497. package/src/simple-tree/core/withType.ts +10 -1
  498. package/src/simple-tree/index.ts +41 -21
  499. package/src/simple-tree/mapNode.ts +1 -1
  500. package/src/simple-tree/objectNode.ts +1 -1
  501. package/src/simple-tree/schemaTypes.ts +70 -11
  502. package/src/simple-tree/toFlexSchema.ts +1 -3
  503. package/src/simple-tree/toMapTree.ts +7 -4
  504. package/src/simple-tree/treeNodeValid.ts +2 -1
  505. package/src/treeFactory.ts +1 -0
  506. package/src/util/utils.ts +10 -8
  507. package/dist/feature-libraries/flex-tree/unboxed.d.ts +0 -12
  508. package/dist/feature-libraries/flex-tree/unboxed.d.ts.map +0 -1
  509. package/dist/feature-libraries/flex-tree/unboxed.js +0 -20
  510. package/dist/feature-libraries/flex-tree/unboxed.js.map +0 -1
  511. package/dist/feature-libraries/typed-schema/flexList.d.ts.map +0 -1
  512. package/dist/feature-libraries/typed-schema/flexList.js.map +0 -1
  513. package/dist/feature-libraries/typed-schema/index.d.ts +0 -7
  514. package/dist/feature-libraries/typed-schema/index.d.ts.map +0 -1
  515. package/dist/feature-libraries/typed-schema/index.js +0 -12
  516. package/dist/feature-libraries/typed-schema/index.js.map +0 -1
  517. package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts +0 -14
  518. package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +0 -1
  519. package/dist/feature-libraries/typed-schema/typedTreeSchema.js +0 -7
  520. package/dist/feature-libraries/typed-schema/typedTreeSchema.js.map +0 -1
  521. package/dist/simple-tree/proxyBinding.d.ts +0 -15
  522. package/dist/simple-tree/proxyBinding.d.ts.map +0 -1
  523. package/dist/simple-tree/proxyBinding.js +0 -22
  524. package/dist/simple-tree/proxyBinding.js.map +0 -1
  525. package/dist/simple-tree/typesUnsafe.d.ts.map +0 -1
  526. package/dist/simple-tree/typesUnsafe.js.map +0 -1
  527. package/lib/feature-libraries/flex-tree/unboxed.d.ts +0 -12
  528. package/lib/feature-libraries/flex-tree/unboxed.d.ts.map +0 -1
  529. package/lib/feature-libraries/flex-tree/unboxed.js +0 -16
  530. package/lib/feature-libraries/flex-tree/unboxed.js.map +0 -1
  531. package/lib/feature-libraries/typed-schema/flexList.d.ts.map +0 -1
  532. package/lib/feature-libraries/typed-schema/flexList.js.map +0 -1
  533. package/lib/feature-libraries/typed-schema/index.d.ts +0 -7
  534. package/lib/feature-libraries/typed-schema/index.d.ts.map +0 -1
  535. package/lib/feature-libraries/typed-schema/index.js +0 -6
  536. package/lib/feature-libraries/typed-schema/index.js.map +0 -1
  537. package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts +0 -14
  538. package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +0 -1
  539. package/lib/feature-libraries/typed-schema/typedTreeSchema.js +0 -6
  540. package/lib/feature-libraries/typed-schema/typedTreeSchema.js.map +0 -1
  541. package/lib/simple-tree/proxyBinding.d.ts +0 -15
  542. package/lib/simple-tree/proxyBinding.d.ts.map +0 -1
  543. package/lib/simple-tree/proxyBinding.js +0 -18
  544. package/lib/simple-tree/proxyBinding.js.map +0 -1
  545. package/lib/simple-tree/typesUnsafe.d.ts.map +0 -1
  546. package/lib/simple-tree/typesUnsafe.js.map +0 -1
  547. package/src/feature-libraries/flex-tree/unboxed.ts +0 -24
  548. package/src/feature-libraries/typed-schema/README.md +0 -6
  549. package/src/feature-libraries/typed-schema/index.ts +0 -16
  550. package/src/feature-libraries/typed-schema/typedTreeSchema.ts +0 -14
  551. package/src/simple-tree/proxyBinding.ts +0 -20
  552. /package/dist/simple-tree/{typesUnsafe.js → api/typesUnsafe.js} +0 -0
  553. /package/dist/{feature-libraries/typed-schema → simple-tree}/flexList.d.ts +0 -0
  554. /package/dist/{feature-libraries/typed-schema → simple-tree}/flexList.js +0 -0
  555. /package/lib/simple-tree/{typesUnsafe.js → api/typesUnsafe.js} +0 -0
  556. /package/lib/{feature-libraries/typed-schema → simple-tree}/flexList.d.ts +0 -0
  557. /package/lib/{feature-libraries/typed-schema → simple-tree}/flexList.js +0 -0
  558. /package/src/simple-tree/{ProxyBinding.md → core/TreeNodeBinding.md} +0 -0
  559. /package/src/{feature-libraries/typed-schema → simple-tree}/flexList.ts +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluidframework/tree",
3
- "version": "2.4.0-297027",
3
+ "version": "2.4.0-299374",
4
4
  "description": "Distributed tree",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -87,17 +87,17 @@
87
87
  "temp-directory": "nyc/.nyc_output"
88
88
  },
89
89
  "dependencies": {
90
- "@fluid-internal/client-utils": "2.4.0-297027",
91
- "@fluidframework/container-runtime": "2.4.0-297027",
92
- "@fluidframework/core-interfaces": "2.4.0-297027",
93
- "@fluidframework/core-utils": "2.4.0-297027",
94
- "@fluidframework/datastore-definitions": "2.4.0-297027",
95
- "@fluidframework/driver-definitions": "2.4.0-297027",
96
- "@fluidframework/id-compressor": "2.4.0-297027",
97
- "@fluidframework/runtime-definitions": "2.4.0-297027",
98
- "@fluidframework/runtime-utils": "2.4.0-297027",
99
- "@fluidframework/shared-object-base": "2.4.0-297027",
100
- "@fluidframework/telemetry-utils": "2.4.0-297027",
90
+ "@fluid-internal/client-utils": "2.4.0-299374",
91
+ "@fluidframework/container-runtime": "2.4.0-299374",
92
+ "@fluidframework/core-interfaces": "2.4.0-299374",
93
+ "@fluidframework/core-utils": "2.4.0-299374",
94
+ "@fluidframework/datastore-definitions": "2.4.0-299374",
95
+ "@fluidframework/driver-definitions": "2.4.0-299374",
96
+ "@fluidframework/id-compressor": "2.4.0-299374",
97
+ "@fluidframework/runtime-definitions": "2.4.0-299374",
98
+ "@fluidframework/runtime-utils": "2.4.0-299374",
99
+ "@fluidframework/shared-object-base": "2.4.0-299374",
100
+ "@fluidframework/telemetry-utils": "2.4.0-299374",
101
101
  "@sinclair/typebox": "^0.32.29",
102
102
  "@tylerbu/sorted-btree-es6": "^1.8.0",
103
103
  "@ungap/structured-clone": "^1.2.0",
@@ -106,20 +106,20 @@
106
106
  "devDependencies": {
107
107
  "@arethetypeswrong/cli": "^0.15.2",
108
108
  "@biomejs/biome": "~1.8.3",
109
- "@fluid-internal/mocha-test-setup": "2.4.0-297027",
110
- "@fluid-private/stochastic-test-utils": "2.4.0-297027",
111
- "@fluid-private/test-dds-utils": "2.4.0-297027",
112
- "@fluid-private/test-drivers": "2.4.0-297027",
109
+ "@fluid-internal/mocha-test-setup": "2.4.0-299374",
110
+ "@fluid-private/stochastic-test-utils": "2.4.0-299374",
111
+ "@fluid-private/test-dds-utils": "2.4.0-299374",
112
+ "@fluid-private/test-drivers": "2.4.0-299374",
113
113
  "@fluid-tools/benchmark": "^0.50.0",
114
- "@fluid-tools/build-cli": "^0.46.0",
114
+ "@fluid-tools/build-cli": "^0.48.0",
115
115
  "@fluidframework/build-common": "^2.0.3",
116
- "@fluidframework/build-tools": "^0.46.0",
117
- "@fluidframework/container-definitions": "2.4.0-297027",
118
- "@fluidframework/container-loader": "2.4.0-297027",
116
+ "@fluidframework/build-tools": "^0.48.0",
117
+ "@fluidframework/container-definitions": "2.4.0-299374",
118
+ "@fluidframework/container-loader": "2.4.0-299374",
119
119
  "@fluidframework/eslint-config-fluid": "^5.4.0",
120
- "@fluidframework/test-runtime-utils": "2.4.0-297027",
121
- "@fluidframework/test-utils": "2.4.0-297027",
122
- "@fluidframework/tree-previous": "npm:@fluidframework/tree@2.3.0",
120
+ "@fluidframework/test-runtime-utils": "2.4.0-299374",
121
+ "@fluidframework/test-utils": "2.4.0-299374",
122
+ "@fluidframework/tree-previous": "npm:@fluidframework/tree@~2.3.0",
123
123
  "@microsoft/api-extractor": "7.47.8",
124
124
  "@types/diff": "^3.5.1",
125
125
  "@types/easy-table": "^0.0.32",
@@ -139,7 +139,6 @@
139
139
  "eslint": "~8.55.0",
140
140
  "eslint-config-prettier": "~9.0.0",
141
141
  "mocha": "^10.2.0",
142
- "mocha-json-output-reporter": "^2.0.1",
143
142
  "mocha-multi-reporters": "^1.5.1",
144
143
  "moment": "^2.21.0",
145
144
  "prettier": "~3.0.3",
@@ -180,9 +179,27 @@
180
179
  },
181
180
  "TypeAlias_ImplicitAllowedTypes": {
182
181
  "forwardCompat": false
182
+ },
183
+ "TypeAlias_InsertableTreeFieldFromImplicitField": {
184
+ "backCompat": false
185
+ },
186
+ "Interface_TreeArrayNode": {
187
+ "backCompat": false
188
+ },
189
+ "TypeAlias_InsertableTreeNodeFromImplicitAllowedTypes": {
190
+ "backCompat": false
191
+ },
192
+ "TypeAlias_NodeFromSchema": {
193
+ "backCompat": false
194
+ },
195
+ "TypeAlias_TreeFieldFromImplicitField": {
196
+ "backCompat": false
197
+ },
198
+ "TypeAlias_TreeNodeFromImplicitAllowedTypes": {
199
+ "backCompat": false
183
200
  }
184
201
  },
185
- "entrypoint": "internal"
202
+ "entrypoint": "public"
186
203
  },
187
204
  "scripts": {
188
205
  "api": "fluid-build . --task api",
@@ -242,9 +259,9 @@
242
259
  "test:mocha:esm": "mocha",
243
260
  "test:mocha:verbose": "cross-env FLUID_TEST_VERBOSE=1 npm run test:mocha",
244
261
  "test:snapshots:regen": "pnpm test:mocha:esm --snapshot",
245
- "test:stress": "cross-env FUZZ_TEST_COUNT=20 FUZZ_STRESS_RUN=true mocha --ignore \"lib/test/memory/**/*\" --recursive \"lib/test/**/*.spec.js\"",
262
+ "test:stress": "cross-env FUZZ_TEST_COUNT=20 FUZZ_STRESS_RUN=normal mocha --ignore \"lib/test/memory/**/*\" --recursive \"lib/test/**/*.spec.js\"",
246
263
  "tsc": "fluid-tsc commonjs --project ./tsconfig.cjs.json && copyfiles -f ../../../common/build/build-common/src/cjs/package.json ./dist",
247
- "typetests:gen": "flub generate typetests --dir . -v --level public",
264
+ "typetests:gen": "flub generate typetests --dir . -v",
248
265
  "typetests:prepare": "flub typetests --dir . --reset --previous --normalize"
249
266
  }
250
267
  }
@@ -35,18 +35,18 @@ export interface IDecoder<TDecoded, TEncoded, TContext> {
35
35
  /**
36
36
  * Validates data complies with some particular schema.
37
37
  * Implementations are typically created by a {@link JsonValidator}.
38
- * @internal
38
+ * @alpha
39
39
  */
40
40
  export interface SchemaValidationFunction<Schema extends TSchema> {
41
41
  /**
42
- * @returns Whether the data matches a schema.
42
+ * Returns whether the data matches a schema.
43
43
  */
44
44
  check(data: unknown): data is Static<Schema>;
45
45
  }
46
46
 
47
47
  /**
48
48
  * JSON schema validator compliant with draft 6 schema. See https://json-schema.org.
49
- * @internal
49
+ * @alpha
50
50
  */
51
51
  export interface JsonValidator {
52
52
  /**
@@ -63,7 +63,7 @@ export interface JsonValidator {
63
63
 
64
64
  /**
65
65
  * Options relating to handling of persisted data.
66
- * @internal
66
+ * @alpha
67
67
  */
68
68
  export interface ICodecOptions {
69
69
  /**
@@ -11,7 +11,7 @@ import type { JsonValidator } from "./codec.js";
11
11
  * A {@link JsonValidator} implementation which performs no validation and accepts all data as valid.
12
12
  * @privateRemarks Having this as an option unifies opting out of validation with selection of
13
13
  * validators, simplifying code performing validation.
14
- * @internal
14
+ * @alpha
15
15
  */
16
16
  export const noopValidator: JsonValidator = {
17
17
  compile: <Schema extends TSchema>() => ({ check: (data): data is Static<Schema> => true }),
@@ -8,10 +8,13 @@ import type { IIdCompressor, SessionId } from "@fluidframework/id-compressor";
8
8
  import type { ICodecFamily, IJsonCodec } from "../../codec/index.js";
9
9
  import type { SchemaAndPolicy } from "../../core/index.js";
10
10
  import type { JsonCompatibleReadOnly } from "../../util/index.js";
11
- import type { ChangeRebaser, RevisionTag } from "../rebase/index.js";
11
+ import type { ChangeRebaser, RevisionTag, TaggedChange } from "../rebase/index.js";
12
12
 
13
13
  export interface ChangeFamily<TEditor extends ChangeFamilyEditor, TChange> {
14
- buildEditor(changeReceiver: (change: TChange) => void): TEditor;
14
+ buildEditor(
15
+ mintRevisionTag: () => RevisionTag,
16
+ changeReceiver: (change: TaggedChange<TChange>) => void,
17
+ ): TEditor;
15
18
 
16
19
  readonly rebaser: ChangeRebaser<TChange>;
17
20
  readonly codecs: ICodecFamily<TChange, ChangeEncodingContext>;
@@ -3,12 +3,13 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
+ import type { TaggedChange } from "../rebase/index.js";
6
7
  import type { ChangeFamily, ChangeFamilyEditor } from "./changeFamily.js";
7
8
 
8
9
  export abstract class EditBuilder<TChange> implements ChangeFamilyEditor {
9
10
  public constructor(
10
11
  protected readonly changeFamily: ChangeFamily<ChangeFamilyEditor, TChange>,
11
- private readonly changeReceiver: (change: TChange) => void,
12
+ private readonly changeReceiver: (change: TaggedChange<TChange>) => void,
12
13
  ) {}
13
14
 
14
15
  /**
@@ -16,7 +17,7 @@ export abstract class EditBuilder<TChange> implements ChangeFamilyEditor {
16
17
  *
17
18
  * @sealed
18
19
  */
19
- protected applyChange(change: TChange): void {
20
+ protected applyChange(change: TaggedChange<TChange>): void {
20
21
  this.changeReceiver(change);
21
22
  }
22
23
 
@@ -51,6 +51,7 @@ export interface ChangeRebaser<TChangeset> {
51
51
  * @param changes - The changes to invert.
52
52
  * @param isRollback - Whether the inverted change is meant to rollback a change on a branch as is the case when
53
53
  * performing a sandwich rebase.
54
+ * @param revision - The revision for the invert changeset.
54
55
  * This flag is relevant to merge semantics that are dependent on edit sequencing order:
55
56
  * - In the context of an undo, this function inverts a change that is sequenced and applied before the produced inverse.
56
57
  * - In the context of a rollback, this function inverts a change that is sequenced after but applied before the produced inverse.
@@ -59,7 +60,11 @@ export interface ChangeRebaser<TChangeset> {
59
60
  * `compose([changes, inverse(changes)])` be equal to `compose([])`:
60
61
  * See {@link ChangeRebaser} for details.
61
62
  */
62
- invert(changes: TaggedChange<TChangeset>, isRollback: boolean): TChangeset;
63
+ invert(
64
+ changes: TaggedChange<TChangeset>,
65
+ isRollback: boolean,
66
+ revision: RevisionTag,
67
+ ): TChangeset;
63
68
 
64
69
  /**
65
70
  * Rebase `change` over `over`.
@@ -444,8 +444,8 @@ function rollbackFromCommit<TChange>(
444
444
  if (commit.rollback !== undefined) {
445
445
  return commit.rollback;
446
446
  }
447
- const untagged = changeRebaser.invert(commit, true);
448
447
  const tag = mintRevisionTag();
448
+ const untagged = changeRebaser.invert(commit, true, tag);
449
449
  const deeplyTaggedRollback = changeRebaser.changeRevision(untagged, tag, commit.revision);
450
450
  const fullyTaggedRollback = tagRollbackInverse(deeplyTaggedRollback, tag, commit.revision);
451
451
 
@@ -233,6 +233,13 @@ export interface AnchorNode extends UpPath<AnchorNode>, Listenable<AnchorEvents>
233
233
  */
234
234
  child(key: FieldKey, index: number): UpPath<AnchorNode>;
235
235
 
236
+ /**
237
+ * Gets the child AnchorNode if already exists.
238
+ *
239
+ * Does NOT add a ref, so the returned AnchorNode must be used with care.
240
+ */
241
+ childIfAnchored(key: FieldKey, index: number): AnchorNode | undefined;
242
+
236
243
  /**
237
244
  * Gets a child AnchorNode (creating it if needed), and an Anchor owning a ref to it.
238
245
  * Caller is responsible for freeing the returned Anchor, and must not use the AnchorNode after that.
@@ -413,8 +420,10 @@ export class AnchorSet implements Listenable<AnchorSetRootEvents>, AnchorLocator
413
420
 
414
421
  /**
415
422
  * Finds a path node if it already exists.
423
+ *
424
+ * Does not add a ref!
416
425
  */
417
- private find(path: UpPath): PathNode | undefined {
426
+ public find(path: UpPath): PathNode | undefined {
418
427
  if (path instanceof PathNode) {
419
428
  if (path.anchorSet === this) {
420
429
  return path;
@@ -422,7 +431,7 @@ export class AnchorSet implements Listenable<AnchorSetRootEvents>, AnchorLocator
422
431
  }
423
432
  const parent = path.parent ?? this.root;
424
433
  const parentPath = this.find(parent);
425
- return parentPath?.tryGetChild(path.parentField, path.parentIndex);
434
+ return parentPath?.childIfAnchored(path.parentField, path.parentIndex);
426
435
  }
427
436
 
428
437
  /**
@@ -452,7 +461,7 @@ export class AnchorSet implements Listenable<AnchorSetRootEvents>, AnchorLocator
452
461
  while ((wrapWith = stack.pop()) !== undefined) {
453
462
  if (path === undefined || path instanceof PathNode) {
454
463
  // If path already has an anchor, get an anchor for it's child if there is one:
455
- const child = (path ?? this.root).tryGetChild(
464
+ const child = (path ?? this.root).childIfAnchored(
456
465
  wrapWith.parentField,
457
466
  wrapWith.parentIndex,
458
467
  );
@@ -1210,7 +1219,11 @@ class PathNode extends ReferenceCountedBase implements UpPath<PathNode>, AnchorN
1210
1219
  public child(key: FieldKey, index: number): UpPath<AnchorNode> {
1211
1220
  // Fast path: if child exists, return it.
1212
1221
  return (
1213
- this.tryGetChild(key, index) ?? { parent: this, parentField: key, parentIndex: index }
1222
+ this.childIfAnchored(key, index) ?? {
1223
+ parent: this,
1224
+ parentField: key,
1225
+ parentIndex: index,
1226
+ }
1214
1227
  );
1215
1228
  }
1216
1229
 
@@ -1271,8 +1284,7 @@ class PathNode extends ReferenceCountedBase implements UpPath<PathNode>, AnchorN
1271
1284
  field = [];
1272
1285
  this.children.set(key, field);
1273
1286
  }
1274
- // TODO: should do more optimized search (ex: binary search).
1275
- let child = field.find((c) => c.parentIndex === index);
1287
+ let child = binaryFind(field, index);
1276
1288
  if (child === undefined) {
1277
1289
  child = new PathNode(this.anchorSet, key, index, this);
1278
1290
  field.push(child);
@@ -1284,16 +1296,11 @@ class PathNode extends ReferenceCountedBase implements UpPath<PathNode>, AnchorN
1284
1296
  return child;
1285
1297
  }
1286
1298
 
1287
- /**
1288
- * Gets a child if it exists.
1289
- * Does NOT add a ref.
1290
- */
1291
- public tryGetChild(key: FieldKey, index: number): PathNode | undefined {
1299
+ public childIfAnchored(key: FieldKey, index: number): PathNode | undefined {
1292
1300
  assert(this.status === Status.Alive, 0x40d /* PathNode must be alive */);
1293
1301
  const field = this.children.get(key);
1294
1302
 
1295
- // TODO: should do more optimized search (ex: binary search or better) using index.
1296
- return field?.find((c) => c.parentIndex === index);
1303
+ return field === undefined ? undefined : binaryFind(field, index);
1297
1304
  }
1298
1305
 
1299
1306
  /**
@@ -1343,3 +1350,46 @@ class PathNode extends ReferenceCountedBase implements UpPath<PathNode>, AnchorN
1343
1350
  }
1344
1351
  }
1345
1352
  }
1353
+
1354
+ /**
1355
+ * Find a child PathNode by index using a binary search.
1356
+ * @param sorted - array of PathNode's sorted by parentIndex.
1357
+ * @param index - index being looked for.
1358
+ * @returns child with the requested parentIndex, or undefined.
1359
+ * @privateRemarks
1360
+ * This function is very commonly used with small arrays (length 0 or one for all non sequence fields),
1361
+ * and is currently a hot path due to how flex tree leaves to excessive cursor to anchor and anchor to cursor translations,
1362
+ * both of which walk paths down the AnchorSet.
1363
+ * Additionally current usages tends to fully populate the anchor tree leading the correct array index to be the requested parent index.
1364
+ * This makes the performance of this performance both important in small cases and easy to overly tune to the current usage patterns.
1365
+ * This lead to not implementing a general purpose reusable binary search.
1366
+ * Once this function is not so heavily overused due to inefficient patterns in flex-tree,
1367
+ * replacing it with a standard binary search is likely fine.
1368
+ * Until then, care and benchmarking should be used when messing with this function.
1369
+ */
1370
+ function binaryFind(sorted: readonly PathNode[], index: number): PathNode | undefined {
1371
+ // Try guessing the list is not sparse as a starter:
1372
+ const guess = sorted[index];
1373
+ if (guess !== undefined && guess.parentIndex === index) {
1374
+ return guess;
1375
+ }
1376
+
1377
+ // inclusive
1378
+ let min = 0;
1379
+ // exclusive
1380
+ let max = sorted.length;
1381
+
1382
+ while (min !== max) {
1383
+ const mid = Math.floor((min + max) / 2);
1384
+ const item = sorted[mid]!;
1385
+ const found = item.parentIndex;
1386
+ if (found === index) {
1387
+ return item; // Found the target, return it.
1388
+ } else if (found > index) {
1389
+ max = mid; // Continue search on lower half.
1390
+ } else {
1391
+ min = mid + 1; // Continue search on left half.
1392
+ }
1393
+ }
1394
+ return undefined; // If we reach here, target is not in array (or array was not sorted)
1395
+ }
@@ -19,7 +19,7 @@ import type { JsonValidator } from "../codec/index.js";
19
19
  *
20
20
  * Defining this validator in its own file also helps to ensure it is tree-shakeable.
21
21
  *
22
- * @internal
22
+ * @alpha
23
23
  */
24
24
  export const typeboxValidator: JsonValidator = {
25
25
  compile: <Schema extends TSchema>(schema: Schema) => {
@@ -8,16 +8,17 @@ import { UsageError } from "@fluidframework/telemetry-utils/internal";
8
8
 
9
9
  import type { ICodecFamily } from "../../codec/index.js";
10
10
  import {
11
+ type ChangeAtomId,
11
12
  type ChangeEncodingContext,
12
13
  type ChangeFamily,
13
14
  type ChangeFamilyEditor,
14
15
  type ChangeRebaser,
15
- type ChangesetLocalId,
16
16
  CursorLocationType,
17
17
  type DeltaDetachedNodeId,
18
18
  type DeltaRoot,
19
19
  type FieldUpPath,
20
20
  type ITreeCursorSynchronous,
21
+ type RevisionTag,
21
22
  type TaggedChange,
22
23
  type UpPath,
23
24
  compareFieldUpPaths,
@@ -43,6 +44,7 @@ import {
43
44
  required as valueFieldKind,
44
45
  } from "./defaultFieldKinds.js";
45
46
  import type { IIdCompressor } from "@fluidframework/id-compressor";
47
+ import type { CellId } from "../sequence-field/index.js";
46
48
 
47
49
  export type DefaultChangeset = ModularChangeset;
48
50
 
@@ -68,8 +70,11 @@ export class DefaultChangeFamily
68
70
  return this.modularFamily.codecs;
69
71
  }
70
72
 
71
- public buildEditor(changeReceiver: (change: DefaultChangeset) => void): DefaultEditBuilder {
72
- return new DefaultEditBuilder(this, changeReceiver);
73
+ public buildEditor(
74
+ mintRevisionTag: () => RevisionTag,
75
+ changeReceiver: (change: TaggedChange<DefaultChangeset>) => void,
76
+ ): DefaultEditBuilder {
77
+ return new DefaultEditBuilder(this, mintRevisionTag, changeReceiver);
73
78
  }
74
79
  }
75
80
 
@@ -168,7 +173,8 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
168
173
 
169
174
  public constructor(
170
175
  family: ChangeFamily<ChangeFamilyEditor, DefaultChangeset>,
171
- changeReceiver: (change: DefaultChangeset) => void,
176
+ private readonly mintRevisionTag: () => RevisionTag,
177
+ changeReceiver: (change: TaggedChange<DefaultChangeset>) => void,
172
178
  private readonly idCompressor?: IIdCompressor,
173
179
  ) {
174
180
  this.modularBuilder = new ModularEditBuilder(family, fieldKinds, changeReceiver);
@@ -182,19 +188,25 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
182
188
  }
183
189
 
184
190
  public addNodeExistsConstraint(path: UpPath): void {
185
- this.modularBuilder.addNodeExistsConstraint(path);
191
+ this.modularBuilder.addNodeExistsConstraint(path, this.mintRevisionTag());
186
192
  }
187
193
 
188
194
  public valueField(field: FieldUpPath): ValueFieldEditBuilder<ITreeCursorSynchronous> {
189
195
  return {
190
196
  set: (newContent: ITreeCursorSynchronous): void => {
191
- const fillId = this.modularBuilder.generateId();
192
-
193
- const build = this.modularBuilder.buildTrees(fillId, newContent, this.idCompressor);
197
+ const revision = this.mintRevisionTag();
198
+ const fill: ChangeAtomId = { localId: this.modularBuilder.generateId(), revision };
199
+ const detach: ChangeAtomId = { localId: this.modularBuilder.generateId(), revision };
200
+ const build = this.modularBuilder.buildTrees(
201
+ fill.localId,
202
+ newContent,
203
+ revision,
204
+ this.idCompressor,
205
+ );
194
206
  const change: FieldChangeset = brand(
195
207
  valueFieldKind.changeHandler.editor.set({
196
- fill: fillId,
197
- detach: this.modularBuilder.generateId(),
208
+ fill,
209
+ detach,
198
210
  }),
199
211
  );
200
212
 
@@ -203,8 +215,9 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
203
215
  field,
204
216
  fieldKind: valueFieldKind.identifier,
205
217
  change,
218
+ revision,
206
219
  };
207
- this.modularBuilder.submitChanges([build, edit]);
220
+ this.modularBuilder.submitChanges([build, edit], revision);
208
221
  },
209
222
  };
210
223
  }
@@ -212,21 +225,26 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
212
225
  public optionalField(field: FieldUpPath): OptionalFieldEditBuilder<ITreeCursorSynchronous> {
213
226
  return {
214
227
  set: (newContent: ITreeCursorSynchronous | undefined, wasEmpty: boolean): void => {
215
- const detachId = this.modularBuilder.generateId();
216
- let fillId: ChangesetLocalId | undefined;
217
228
  const edits: EditDescription[] = [];
218
229
  let optionalChange: OptionalChangeset;
230
+ const revision = this.mintRevisionTag();
231
+ const detach: ChangeAtomId = { localId: this.modularBuilder.generateId(), revision };
219
232
  if (newContent !== undefined) {
220
- fillId = this.modularBuilder.generateId();
221
- const build = this.modularBuilder.buildTrees(fillId, newContent, this.idCompressor);
233
+ const fill: ChangeAtomId = { localId: this.modularBuilder.generateId(), revision };
234
+ const build = this.modularBuilder.buildTrees(
235
+ fill.localId,
236
+ newContent,
237
+ revision,
238
+ this.idCompressor,
239
+ );
222
240
  edits.push(build);
223
241
 
224
242
  optionalChange = optional.changeHandler.editor.set(wasEmpty, {
225
- fill: fillId,
226
- detach: detachId,
243
+ fill,
244
+ detach,
227
245
  });
228
246
  } else {
229
- optionalChange = optional.changeHandler.editor.clear(wasEmpty, detachId);
247
+ optionalChange = optional.changeHandler.editor.clear(wasEmpty, detach);
230
248
  }
231
249
 
232
250
  const change: FieldChangeset = brand(optionalChange);
@@ -235,10 +253,11 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
235
253
  field,
236
254
  fieldKind: optional.identifier,
237
255
  change,
256
+ revision,
238
257
  };
239
258
  edits.push(edit);
240
259
 
241
- this.modularBuilder.submitChanges(edits);
260
+ this.modularBuilder.submitChanges(edits, revision);
242
261
  },
243
262
  };
244
263
  }
@@ -255,17 +274,24 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
255
274
  } else if (count < 0 || !Number.isSafeInteger(count)) {
256
275
  throw new UsageError(`Expected non-negative integer count, got ${count}.`);
257
276
  }
258
- const detachId = this.modularBuilder.generateId(count);
259
- const attachId = this.modularBuilder.generateId(count);
277
+ const revision = this.mintRevisionTag();
278
+ const detachCellId = this.modularBuilder.generateId(count);
279
+ const attachCellId: CellId = { localId: this.modularBuilder.generateId(count), revision };
260
280
  if (compareFieldUpPaths(sourceField, destinationField)) {
261
281
  const change = sequence.changeHandler.editor.move(
262
282
  sourceIndex,
263
283
  count,
264
284
  destIndex,
265
- detachId,
266
- attachId,
285
+ detachCellId,
286
+ attachCellId,
287
+ revision,
288
+ );
289
+ this.modularBuilder.submitChange(
290
+ sourceField,
291
+ sequence.identifier,
292
+ brand(change),
293
+ revision,
267
294
  );
268
- this.modularBuilder.submitChange(sourceField, sequence.identifier, brand(change));
269
295
  } else {
270
296
  const detachPath = topDownPath(sourceField.parent);
271
297
  const attachPath = topDownPath(destinationField.parent);
@@ -307,27 +333,38 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
307
333
  }
308
334
  }
309
335
  }
310
- const moveOut = sequence.changeHandler.editor.moveOut(sourceIndex, count, detachId);
336
+ const moveOut = sequence.changeHandler.editor.moveOut(
337
+ sourceIndex,
338
+ count,
339
+ detachCellId,
340
+ revision,
341
+ );
311
342
  const moveIn = sequence.changeHandler.editor.moveIn(
312
343
  destIndex,
313
344
  count,
314
- detachId,
315
- attachId,
345
+ detachCellId,
346
+ attachCellId,
347
+ revision,
348
+ );
349
+ this.modularBuilder.submitChanges(
350
+ [
351
+ {
352
+ type: "field",
353
+ field: sourceField,
354
+ fieldKind: sequence.identifier,
355
+ change: brand(moveOut),
356
+ revision,
357
+ },
358
+ {
359
+ type: "field",
360
+ field: adjustedAttachField,
361
+ fieldKind: sequence.identifier,
362
+ change: brand(moveIn),
363
+ revision,
364
+ },
365
+ ],
366
+ revision,
316
367
  );
317
- this.modularBuilder.submitChanges([
318
- {
319
- type: "field",
320
- field: sourceField,
321
- fieldKind: sequence.identifier,
322
- change: brand(moveOut),
323
- },
324
- {
325
- type: "field",
326
- field: adjustedAttachField,
327
- fieldKind: sequence.identifier,
328
- change: brand(moveIn),
329
- },
330
- ]);
331
368
  }
332
369
  }
333
370
 
@@ -340,30 +377,38 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
340
377
  return;
341
378
  }
342
379
 
343
- const firstId = this.modularBuilder.generateId(length);
344
- const build = this.modularBuilder.buildTrees(firstId, content, this.idCompressor);
380
+ const revision = this.mintRevisionTag();
381
+ const firstId: CellId = { localId: this.modularBuilder.generateId(length), revision };
382
+ const build = this.modularBuilder.buildTrees(
383
+ firstId.localId,
384
+ content,
385
+ revision,
386
+ this.idCompressor,
387
+ );
345
388
  const change: FieldChangeset = brand(
346
- sequence.changeHandler.editor.insert(index, length, firstId),
389
+ sequence.changeHandler.editor.insert(index, length, firstId, revision),
347
390
  );
348
391
  const attach: FieldEditDescription = {
349
392
  type: "field",
350
393
  field,
351
394
  fieldKind: sequence.identifier,
352
395
  change,
396
+ revision,
353
397
  };
354
398
  // The changes have to be submitted together, otherwise they will be assigned different revisions,
355
399
  // which will prevent the build ID and the insert ID from matching.
356
- this.modularBuilder.submitChanges([build, attach]);
400
+ this.modularBuilder.submitChanges([build, attach], revision);
357
401
  },
358
402
  remove: (index: number, count: number): void => {
359
403
  if (count === 0) {
360
404
  return;
361
405
  }
406
+ const revision = this.mintRevisionTag();
362
407
  const id = this.modularBuilder.generateId(count);
363
408
  const change: FieldChangeset = brand(
364
- sequence.changeHandler.editor.remove(index, count, id),
409
+ sequence.changeHandler.editor.remove(index, count, id, revision),
365
410
  );
366
- this.modularBuilder.submitChange(field, sequence.identifier, change);
411
+ this.modularBuilder.submitChange(field, sequence.identifier, change, revision);
367
412
  },
368
413
  };
369
414
  }