@fluidframework/tree 2.4.0-297385 → 2.4.0-299707

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 (349) hide show
  1. package/.dependency-cruiser-known-violations.json +0 -14
  2. package/api-report/tree.alpha.api.md +100 -0
  3. package/dist/alpha.d.ts +20 -1
  4. package/dist/codec/codec.d.ts +4 -4
  5. package/dist/codec/codec.js.map +1 -1
  6. package/dist/codec/noopValidator.d.ts +1 -1
  7. package/dist/codec/noopValidator.js +1 -1
  8. package/dist/codec/noopValidator.js.map +1 -1
  9. package/dist/core/tree/anchorSet.d.ts +159 -2
  10. package/dist/core/tree/anchorSet.d.ts.map +1 -1
  11. package/dist/core/tree/anchorSet.js +54 -12
  12. package/dist/core/tree/anchorSet.js.map +1 -1
  13. package/dist/external-utilities/typeboxValidator.d.ts +1 -1
  14. package/dist/external-utilities/typeboxValidator.js +1 -1
  15. package/dist/external-utilities/typeboxValidator.js.map +1 -1
  16. package/dist/feature-libraries/flex-tree/lazyField.d.ts +4 -0
  17. package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  18. package/dist/feature-libraries/flex-tree/lazyField.js +38 -6
  19. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  20. package/dist/feature-libraries/index.d.ts +0 -1
  21. package/dist/feature-libraries/index.d.ts.map +1 -1
  22. package/dist/feature-libraries/index.js +46 -49
  23. package/dist/feature-libraries/index.js.map +1 -1
  24. package/dist/feature-libraries/treeCompressionUtils.d.ts +1 -1
  25. package/dist/feature-libraries/treeCompressionUtils.js +1 -1
  26. package/dist/feature-libraries/treeCompressionUtils.js.map +1 -1
  27. package/dist/index.d.ts +6 -5
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +4 -2
  30. package/dist/index.js.map +1 -1
  31. package/dist/internalTypes.d.ts +1 -1
  32. package/dist/internalTypes.d.ts.map +1 -1
  33. package/dist/internalTypes.js.map +1 -1
  34. package/dist/packageVersion.d.ts +1 -1
  35. package/dist/packageVersion.js +1 -1
  36. package/dist/packageVersion.js.map +1 -1
  37. package/dist/shared-tree/index.d.ts +2 -1
  38. package/dist/shared-tree/index.d.ts.map +1 -1
  39. package/dist/shared-tree/index.js +5 -1
  40. package/dist/shared-tree/index.js.map +1 -1
  41. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  42. package/dist/shared-tree/schematizingTreeView.js +1 -14
  43. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  44. package/dist/shared-tree/sharedTree.d.ts +24 -9
  45. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  46. package/dist/shared-tree/sharedTree.js +20 -8
  47. package/dist/shared-tree/sharedTree.js.map +1 -1
  48. package/dist/simple-tree/api/conciseTree.d.ts +29 -0
  49. package/dist/simple-tree/api/conciseTree.d.ts.map +1 -0
  50. package/dist/simple-tree/api/conciseTree.js +25 -0
  51. package/dist/simple-tree/api/conciseTree.js.map +1 -0
  52. package/dist/simple-tree/api/customTree.d.ts +44 -0
  53. package/dist/simple-tree/api/customTree.d.ts.map +1 -0
  54. package/dist/simple-tree/api/customTree.js +63 -0
  55. package/dist/simple-tree/api/customTree.js.map +1 -0
  56. package/dist/simple-tree/api/index.d.ts +6 -1
  57. package/dist/simple-tree/api/index.d.ts.map +1 -1
  58. package/dist/simple-tree/api/index.js +5 -1
  59. package/dist/simple-tree/api/index.js.map +1 -1
  60. package/dist/simple-tree/api/schemaCreationUtilities.d.ts +41 -26
  61. package/dist/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
  62. package/dist/simple-tree/api/schemaCreationUtilities.js +43 -15
  63. package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  64. package/dist/simple-tree/api/schemaFactory.d.ts +1 -2
  65. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  66. package/dist/simple-tree/api/schemaFactory.js +8 -8
  67. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  68. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +1 -2
  69. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  70. package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  71. package/dist/simple-tree/api/storedSchema.d.ts +78 -0
  72. package/dist/simple-tree/api/storedSchema.d.ts.map +1 -0
  73. package/dist/simple-tree/api/storedSchema.js +107 -0
  74. package/dist/simple-tree/api/storedSchema.js.map +1 -0
  75. package/dist/simple-tree/api/testRecursiveDomain.d.ts +10 -10
  76. package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  77. package/dist/simple-tree/api/treeNodeApi.js +5 -5
  78. package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
  79. package/dist/simple-tree/{typesUnsafe.d.ts → api/typesUnsafe.d.ts} +14 -5
  80. package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -0
  81. package/dist/simple-tree/api/typesUnsafe.js.map +1 -0
  82. package/dist/simple-tree/api/verboseTree.d.ts +6 -20
  83. package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
  84. package/dist/simple-tree/api/verboseTree.js +10 -48
  85. package/dist/simple-tree/api/verboseTree.js.map +1 -1
  86. package/dist/simple-tree/arrayNode.d.ts.map +1 -1
  87. package/dist/simple-tree/arrayNode.js +1 -2
  88. package/dist/simple-tree/arrayNode.js.map +1 -1
  89. package/dist/simple-tree/core/index.d.ts +1 -1
  90. package/dist/simple-tree/core/index.d.ts.map +1 -1
  91. package/dist/simple-tree/core/index.js +2 -1
  92. package/dist/simple-tree/core/index.js.map +1 -1
  93. package/dist/simple-tree/core/treeNodeKernel.d.ts +9 -0
  94. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  95. package/dist/simple-tree/core/treeNodeKernel.js +14 -1
  96. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  97. package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  98. package/dist/simple-tree/core/unhydratedFlexTree.js +3 -1
  99. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  100. package/dist/simple-tree/flexList.d.ts.map +1 -0
  101. package/dist/simple-tree/flexList.js.map +1 -0
  102. package/dist/simple-tree/index.d.ts +3 -4
  103. package/dist/simple-tree/index.d.ts.map +1 -1
  104. package/dist/simple-tree/index.js +5 -3
  105. package/dist/simple-tree/index.js.map +1 -1
  106. package/dist/simple-tree/mapNode.d.ts.map +1 -1
  107. package/dist/simple-tree/mapNode.js +2 -3
  108. package/dist/simple-tree/mapNode.js.map +1 -1
  109. package/dist/simple-tree/objectNode.d.ts.map +1 -1
  110. package/dist/simple-tree/objectNode.js +3 -4
  111. package/dist/simple-tree/objectNode.js.map +1 -1
  112. package/dist/simple-tree/schemaTypes.d.ts +2 -1
  113. package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
  114. package/dist/simple-tree/schemaTypes.js +5 -5
  115. package/dist/simple-tree/schemaTypes.js.map +1 -1
  116. package/dist/simple-tree/toFlexSchema.d.ts.map +1 -1
  117. package/dist/simple-tree/toFlexSchema.js +13 -15
  118. package/dist/simple-tree/toFlexSchema.js.map +1 -1
  119. package/dist/simple-tree/toMapTree.js +3 -3
  120. package/dist/simple-tree/toMapTree.js.map +1 -1
  121. package/dist/simple-tree/treeNodeValid.d.ts.map +1 -1
  122. package/dist/simple-tree/treeNodeValid.js +2 -1
  123. package/dist/simple-tree/treeNodeValid.js.map +1 -1
  124. package/dist/treeFactory.d.ts +1 -0
  125. package/dist/treeFactory.d.ts.map +1 -1
  126. package/dist/treeFactory.js +1 -0
  127. package/dist/treeFactory.js.map +1 -1
  128. package/dist/util/utils.d.ts +10 -8
  129. package/dist/util/utils.d.ts.map +1 -1
  130. package/dist/util/utils.js.map +1 -1
  131. package/docs/main/detached-trees.md +8 -8
  132. package/lib/alpha.d.ts +20 -1
  133. package/lib/codec/codec.d.ts +4 -4
  134. package/lib/codec/codec.js.map +1 -1
  135. package/lib/codec/noopValidator.d.ts +1 -1
  136. package/lib/codec/noopValidator.js +1 -1
  137. package/lib/codec/noopValidator.js.map +1 -1
  138. package/lib/core/tree/anchorSet.d.ts +159 -2
  139. package/lib/core/tree/anchorSet.d.ts.map +1 -1
  140. package/lib/core/tree/anchorSet.js +54 -12
  141. package/lib/core/tree/anchorSet.js.map +1 -1
  142. package/lib/external-utilities/typeboxValidator.d.ts +1 -1
  143. package/lib/external-utilities/typeboxValidator.js +1 -1
  144. package/lib/external-utilities/typeboxValidator.js.map +1 -1
  145. package/lib/feature-libraries/flex-tree/lazyField.d.ts +4 -0
  146. package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  147. package/lib/feature-libraries/flex-tree/lazyField.js +36 -5
  148. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  149. package/lib/feature-libraries/index.d.ts +0 -1
  150. package/lib/feature-libraries/index.d.ts.map +1 -1
  151. package/lib/feature-libraries/index.js +0 -1
  152. package/lib/feature-libraries/index.js.map +1 -1
  153. package/lib/feature-libraries/treeCompressionUtils.d.ts +1 -1
  154. package/lib/feature-libraries/treeCompressionUtils.js +1 -1
  155. package/lib/feature-libraries/treeCompressionUtils.js.map +1 -1
  156. package/lib/index.d.ts +6 -5
  157. package/lib/index.d.ts.map +1 -1
  158. package/lib/index.js +3 -3
  159. package/lib/index.js.map +1 -1
  160. package/lib/internalTypes.d.ts +1 -1
  161. package/lib/internalTypes.d.ts.map +1 -1
  162. package/lib/internalTypes.js.map +1 -1
  163. package/lib/packageVersion.d.ts +1 -1
  164. package/lib/packageVersion.js +1 -1
  165. package/lib/packageVersion.js.map +1 -1
  166. package/lib/shared-tree/index.d.ts +2 -1
  167. package/lib/shared-tree/index.d.ts.map +1 -1
  168. package/lib/shared-tree/index.js +2 -1
  169. package/lib/shared-tree/index.js.map +1 -1
  170. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  171. package/lib/shared-tree/schematizingTreeView.js +2 -15
  172. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  173. package/lib/shared-tree/sharedTree.d.ts +24 -9
  174. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  175. package/lib/shared-tree/sharedTree.js +19 -8
  176. package/lib/shared-tree/sharedTree.js.map +1 -1
  177. package/lib/simple-tree/api/conciseTree.d.ts +29 -0
  178. package/lib/simple-tree/api/conciseTree.d.ts.map +1 -0
  179. package/lib/simple-tree/api/conciseTree.js +21 -0
  180. package/lib/simple-tree/api/conciseTree.js.map +1 -0
  181. package/lib/simple-tree/api/customTree.d.ts +44 -0
  182. package/lib/simple-tree/api/customTree.d.ts.map +1 -0
  183. package/lib/simple-tree/api/customTree.js +59 -0
  184. package/lib/simple-tree/api/customTree.js.map +1 -0
  185. package/lib/simple-tree/api/index.d.ts +6 -1
  186. package/lib/simple-tree/api/index.d.ts.map +1 -1
  187. package/lib/simple-tree/api/index.js +1 -0
  188. package/lib/simple-tree/api/index.js.map +1 -1
  189. package/lib/simple-tree/api/schemaCreationUtilities.d.ts +41 -26
  190. package/lib/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
  191. package/lib/simple-tree/api/schemaCreationUtilities.js +43 -15
  192. package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  193. package/lib/simple-tree/api/schemaFactory.d.ts +1 -2
  194. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  195. package/lib/simple-tree/api/schemaFactory.js +1 -1
  196. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  197. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +1 -2
  198. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  199. package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  200. package/lib/simple-tree/api/storedSchema.d.ts +78 -0
  201. package/lib/simple-tree/api/storedSchema.d.ts.map +1 -0
  202. package/lib/simple-tree/api/storedSchema.js +101 -0
  203. package/lib/simple-tree/api/storedSchema.js.map +1 -0
  204. package/lib/simple-tree/api/testRecursiveDomain.d.ts +10 -10
  205. package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  206. package/lib/simple-tree/api/treeNodeApi.js +3 -3
  207. package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
  208. package/lib/simple-tree/{typesUnsafe.d.ts → api/typesUnsafe.d.ts} +14 -5
  209. package/lib/simple-tree/api/typesUnsafe.d.ts.map +1 -0
  210. package/lib/simple-tree/api/typesUnsafe.js.map +1 -0
  211. package/lib/simple-tree/api/verboseTree.d.ts +6 -20
  212. package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
  213. package/lib/simple-tree/api/verboseTree.js +11 -49
  214. package/lib/simple-tree/api/verboseTree.js.map +1 -1
  215. package/lib/simple-tree/arrayNode.d.ts.map +1 -1
  216. package/lib/simple-tree/arrayNode.js +1 -2
  217. package/lib/simple-tree/arrayNode.js.map +1 -1
  218. package/lib/simple-tree/core/index.d.ts +1 -1
  219. package/lib/simple-tree/core/index.d.ts.map +1 -1
  220. package/lib/simple-tree/core/index.js +1 -1
  221. package/lib/simple-tree/core/index.js.map +1 -1
  222. package/lib/simple-tree/core/treeNodeKernel.d.ts +9 -0
  223. package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  224. package/lib/simple-tree/core/treeNodeKernel.js +12 -0
  225. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  226. package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  227. package/lib/simple-tree/core/unhydratedFlexTree.js +3 -1
  228. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  229. package/lib/simple-tree/flexList.d.ts.map +1 -0
  230. package/lib/simple-tree/flexList.js.map +1 -0
  231. package/lib/simple-tree/index.d.ts +3 -4
  232. package/lib/simple-tree/index.d.ts.map +1 -1
  233. package/lib/simple-tree/index.js +2 -3
  234. package/lib/simple-tree/index.js.map +1 -1
  235. package/lib/simple-tree/mapNode.d.ts.map +1 -1
  236. package/lib/simple-tree/mapNode.js +1 -2
  237. package/lib/simple-tree/mapNode.js.map +1 -1
  238. package/lib/simple-tree/objectNode.d.ts.map +1 -1
  239. package/lib/simple-tree/objectNode.js +1 -2
  240. package/lib/simple-tree/objectNode.js.map +1 -1
  241. package/lib/simple-tree/schemaTypes.d.ts +2 -1
  242. package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
  243. package/lib/simple-tree/schemaTypes.js +1 -1
  244. package/lib/simple-tree/schemaTypes.js.map +1 -1
  245. package/lib/simple-tree/toFlexSchema.d.ts.map +1 -1
  246. package/lib/simple-tree/toFlexSchema.js +1 -3
  247. package/lib/simple-tree/toFlexSchema.js.map +1 -1
  248. package/lib/simple-tree/toMapTree.js +3 -3
  249. package/lib/simple-tree/toMapTree.js.map +1 -1
  250. package/lib/simple-tree/treeNodeValid.d.ts.map +1 -1
  251. package/lib/simple-tree/treeNodeValid.js +2 -1
  252. package/lib/simple-tree/treeNodeValid.js.map +1 -1
  253. package/lib/treeFactory.d.ts +1 -0
  254. package/lib/treeFactory.d.ts.map +1 -1
  255. package/lib/treeFactory.js +1 -0
  256. package/lib/treeFactory.js.map +1 -1
  257. package/lib/util/utils.d.ts +10 -8
  258. package/lib/util/utils.d.ts.map +1 -1
  259. package/lib/util/utils.js.map +1 -1
  260. package/package.json +26 -25
  261. package/src/codec/codec.ts +4 -4
  262. package/src/codec/noopValidator.ts +1 -1
  263. package/src/core/tree/anchorSet.ts +63 -13
  264. package/src/external-utilities/typeboxValidator.ts +1 -1
  265. package/src/feature-libraries/flex-tree/lazyField.ts +44 -7
  266. package/src/feature-libraries/index.ts +0 -10
  267. package/src/feature-libraries/treeCompressionUtils.ts +1 -1
  268. package/src/index.ts +17 -6
  269. package/src/internalTypes.ts +1 -1
  270. package/src/packageVersion.ts +1 -1
  271. package/src/shared-tree/index.ts +5 -0
  272. package/src/shared-tree/schematizingTreeView.ts +7 -16
  273. package/src/shared-tree/sharedTree.ts +52 -22
  274. package/src/simple-tree/api/conciseTree.ts +58 -0
  275. package/src/simple-tree/api/customTree.ts +119 -0
  276. package/src/simple-tree/api/index.ts +34 -1
  277. package/src/simple-tree/api/schemaCreationUtilities.ts +55 -36
  278. package/src/simple-tree/api/schemaFactory.ts +4 -6
  279. package/src/simple-tree/api/schemaFactoryRecursive.ts +1 -2
  280. package/src/simple-tree/api/storedSchema.ts +126 -0
  281. package/src/simple-tree/api/treeNodeApi.ts +3 -8
  282. package/src/simple-tree/{typesUnsafe.ts → api/typesUnsafe.ts} +15 -5
  283. package/src/simple-tree/api/verboseTree.ts +21 -76
  284. package/src/simple-tree/arrayNode.ts +1 -1
  285. package/src/simple-tree/core/index.ts +1 -0
  286. package/src/simple-tree/core/treeNodeKernel.ts +13 -0
  287. package/src/simple-tree/core/unhydratedFlexTree.ts +6 -1
  288. package/src/simple-tree/index.ts +26 -20
  289. package/src/simple-tree/mapNode.ts +1 -1
  290. package/src/simple-tree/objectNode.ts +1 -1
  291. package/src/simple-tree/schemaTypes.ts +2 -6
  292. package/src/simple-tree/toFlexSchema.ts +1 -3
  293. package/src/simple-tree/toMapTree.ts +3 -3
  294. package/src/simple-tree/treeNodeValid.ts +2 -1
  295. package/src/treeFactory.ts +1 -0
  296. package/src/util/utils.ts +10 -8
  297. package/dist/feature-libraries/flex-tree/unboxed.d.ts +0 -12
  298. package/dist/feature-libraries/flex-tree/unboxed.d.ts.map +0 -1
  299. package/dist/feature-libraries/flex-tree/unboxed.js +0 -20
  300. package/dist/feature-libraries/flex-tree/unboxed.js.map +0 -1
  301. package/dist/feature-libraries/typed-schema/flexList.d.ts.map +0 -1
  302. package/dist/feature-libraries/typed-schema/flexList.js.map +0 -1
  303. package/dist/feature-libraries/typed-schema/index.d.ts +0 -7
  304. package/dist/feature-libraries/typed-schema/index.d.ts.map +0 -1
  305. package/dist/feature-libraries/typed-schema/index.js +0 -12
  306. package/dist/feature-libraries/typed-schema/index.js.map +0 -1
  307. package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts +0 -14
  308. package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +0 -1
  309. package/dist/feature-libraries/typed-schema/typedTreeSchema.js +0 -7
  310. package/dist/feature-libraries/typed-schema/typedTreeSchema.js.map +0 -1
  311. package/dist/simple-tree/proxyBinding.d.ts +0 -15
  312. package/dist/simple-tree/proxyBinding.d.ts.map +0 -1
  313. package/dist/simple-tree/proxyBinding.js +0 -22
  314. package/dist/simple-tree/proxyBinding.js.map +0 -1
  315. package/dist/simple-tree/typesUnsafe.d.ts.map +0 -1
  316. package/dist/simple-tree/typesUnsafe.js.map +0 -1
  317. package/lib/feature-libraries/flex-tree/unboxed.d.ts +0 -12
  318. package/lib/feature-libraries/flex-tree/unboxed.d.ts.map +0 -1
  319. package/lib/feature-libraries/flex-tree/unboxed.js +0 -16
  320. package/lib/feature-libraries/flex-tree/unboxed.js.map +0 -1
  321. package/lib/feature-libraries/typed-schema/flexList.d.ts.map +0 -1
  322. package/lib/feature-libraries/typed-schema/flexList.js.map +0 -1
  323. package/lib/feature-libraries/typed-schema/index.d.ts +0 -7
  324. package/lib/feature-libraries/typed-schema/index.d.ts.map +0 -1
  325. package/lib/feature-libraries/typed-schema/index.js +0 -6
  326. package/lib/feature-libraries/typed-schema/index.js.map +0 -1
  327. package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts +0 -14
  328. package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +0 -1
  329. package/lib/feature-libraries/typed-schema/typedTreeSchema.js +0 -6
  330. package/lib/feature-libraries/typed-schema/typedTreeSchema.js.map +0 -1
  331. package/lib/simple-tree/proxyBinding.d.ts +0 -15
  332. package/lib/simple-tree/proxyBinding.d.ts.map +0 -1
  333. package/lib/simple-tree/proxyBinding.js +0 -18
  334. package/lib/simple-tree/proxyBinding.js.map +0 -1
  335. package/lib/simple-tree/typesUnsafe.d.ts.map +0 -1
  336. package/lib/simple-tree/typesUnsafe.js.map +0 -1
  337. package/src/feature-libraries/flex-tree/unboxed.ts +0 -24
  338. package/src/feature-libraries/typed-schema/README.md +0 -6
  339. package/src/feature-libraries/typed-schema/index.ts +0 -16
  340. package/src/feature-libraries/typed-schema/typedTreeSchema.ts +0 -14
  341. package/src/simple-tree/proxyBinding.ts +0 -20
  342. /package/dist/simple-tree/{typesUnsafe.js → api/typesUnsafe.js} +0 -0
  343. /package/dist/{feature-libraries/typed-schema → simple-tree}/flexList.d.ts +0 -0
  344. /package/dist/{feature-libraries/typed-schema → simple-tree}/flexList.js +0 -0
  345. /package/lib/simple-tree/{typesUnsafe.js → api/typesUnsafe.js} +0 -0
  346. /package/lib/{feature-libraries/typed-schema → simple-tree}/flexList.d.ts +0 -0
  347. /package/lib/{feature-libraries/typed-schema → simple-tree}/flexList.js +0 -0
  348. /package/src/simple-tree/{ProxyBinding.md → core/TreeNodeBinding.md} +0 -0
  349. /package/src/{feature-libraries/typed-schema → simple-tree}/flexList.ts +0 -0
@@ -40,7 +40,7 @@ var __setFunctionName = (this && this.__setFunctionName) || function (f, name, p
40
40
  if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
41
41
  return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
42
42
  };
43
- import { assert } from "@fluidframework/core-utils/internal";
43
+ import { assert, unreachableCase } from "@fluidframework/core-utils/internal";
44
44
  import { UsageError } from "@fluidframework/telemetry-utils/internal";
45
45
  import { noopValidator } from "../codec/index.js";
46
46
  import { RevisionTagCodec, TreeStoredSchemaRepository, makeDetachedFieldIndex, moveToDetachedField, } from "../core/index.js";
@@ -75,6 +75,21 @@ function getCodecVersions(formatVersion) {
75
75
  assert(versions !== undefined, 0x90e /* Unknown format version */);
76
76
  return versions;
77
77
  }
78
+ /**
79
+ * Build and return a forest of the requested type.
80
+ */
81
+ export function buildConfiguredForest(type, schema, idCompressor) {
82
+ switch (type) {
83
+ case ForestType.Optimized:
84
+ return buildChunkedForest(makeTreeChunker(schema, defaultSchemaPolicy), undefined, idCompressor);
85
+ case ForestType.Reference:
86
+ return buildForest();
87
+ case ForestType.Expensive:
88
+ return buildForest(undefined, true);
89
+ default:
90
+ unreachableCase(type);
91
+ }
92
+ }
78
93
  /**
79
94
  * Shared tree, configured with a good set of indexes and field kinds which will maintain compatibility over time.
80
95
  *
@@ -99,11 +114,7 @@ let SharedTree = (() => {
99
114
  const options = { ...defaultSharedTreeOptions, ...optionsParam };
100
115
  const codecVersions = getCodecVersions(options.formatVersion);
101
116
  const schema = new TreeStoredSchemaRepository();
102
- const forest = options.forest === ForestType.Optimized
103
- ? buildChunkedForest(makeTreeChunker(schema, defaultSchemaPolicy), undefined, runtime.idCompressor)
104
- : options.forest === ForestType.Reference
105
- ? buildForest()
106
- : buildForest(undefined, true);
117
+ const forest = buildConfiguredForest(options.forest, schema, runtime.idCompressor);
107
118
  const revisionTagCodec = new RevisionTagCodec(runtime.idCompressor);
108
119
  const removedRoots = makeDetachedFieldIndex("repair", revisionTagCodec, runtime.idCompressor, options);
109
120
  const schemaSummarizer = new SchemaSummarizer(runtime, schema, options, {
@@ -204,7 +215,7 @@ export function getBranch(treeOrView) {
204
215
  * Format versions supported by SharedTree.
205
216
  *
206
217
  * Each version documents a required minimum version of the \@fluidframework/tree package.
207
- * @internal
218
+ * @alpha
208
219
  */
209
220
  export const SharedTreeFormatVersion = {
210
221
  /**
@@ -225,7 +236,7 @@ export const SharedTreeFormatVersion = {
225
236
  };
226
237
  /**
227
238
  * Used to distinguish between different forest types.
228
- * @internal
239
+ * @alpha
229
240
  */
230
241
  export var ForestType;
231
242
  (function (ForestType) {
@@ -1 +1 @@
1
- {"version":3,"file":"sharedTree.js","sourceRoot":"","sources":["../../src/shared-tree/sharedTree.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport type {\n\tIChannelAttributes,\n\tIChannelFactory,\n\tIFluidDataStoreRuntime,\n\tIChannelServices,\n\tIChannelStorageService,\n} from \"@fluidframework/datastore-definitions/internal\";\nimport type { ISharedObject } from \"@fluidframework/shared-object-base/internal\";\nimport { UsageError } from \"@fluidframework/telemetry-utils/internal\";\n\nimport { type ICodecOptions, noopValidator } from \"../codec/index.js\";\nimport {\n\ttype JsonableTree,\n\tRevisionTagCodec,\n\ttype TaggedChange,\n\ttype TreeStoredSchema,\n\tTreeStoredSchemaRepository,\n\tmakeDetachedFieldIndex,\n\tmoveToDetachedField,\n} from \"../core/index.js\";\nimport {\n\ttype HasListeners,\n\ttype IEmitter,\n\ttype Listenable,\n\tcreateEmitter,\n} from \"../events/index.js\";\nimport {\n\tDetachedFieldIndexSummarizer,\n\tForestSummarizer,\n\tSchemaSummarizer,\n\tTreeCompressionStrategy,\n\tbuildChunkedForest,\n\tbuildForest,\n\tdefaultSchemaPolicy,\n\tjsonableTreeFromFieldCursor,\n\tmakeFieldBatchCodec,\n\tmakeMitigatedChangeFamily,\n\tmakeTreeChunker,\n} from \"../feature-libraries/index.js\";\nimport {\n\tDefaultResubmitMachine,\n\ttype ExplicitCoreCodecVersions,\n\tSharedTreeCore,\n} from \"../shared-tree-core/index.js\";\nimport type {\n\tITree,\n\tImplicitFieldSchema,\n\tTreeView,\n\tTreeViewConfiguration,\n} from \"../simple-tree/index.js\";\n\nimport { SchematizingSimpleTreeView } from \"./schematizingTreeView.js\";\nimport { SharedTreeReadonlyChangeEnricher } from \"./sharedTreeChangeEnricher.js\";\nimport { SharedTreeChangeFamily } from \"./sharedTreeChangeFamily.js\";\nimport type { SharedTreeChange } from \"./sharedTreeChangeTypes.js\";\nimport type { SharedTreeEditBuilder } from \"./sharedTreeEditBuilder.js\";\nimport {\n\ttype CheckoutEvents,\n\ttype TreeCheckout,\n\ttype TreeBranch,\n\tcreateTreeCheckout,\n} from \"./treeCheckout.js\";\nimport { breakingClass, throwIfBroken } from \"../util/index.js\";\n\n/**\n * Copy of data from an {@link ISharedTree} at some point in time.\n * @remarks\n * This is unrelated to Fluids concept of \"snapshots\".\n * @internal\n */\nexport interface SharedTreeContentSnapshot {\n\t/**\n\t * The schema stored in the document.\n\t *\n\t * @remarks\n\t * Edits to the schema can mutate the schema stored of the tree which took this snapshot (but this snapshot will remain the same)\n\t * This is mainly useful for debugging cases where schematize reports an incompatible view schema.\n\t */\n\treadonly schema: TreeStoredSchema;\n\t/**\n\t * All {@link TreeStatus.InDocument} content.\n\t */\n\treadonly tree: JsonableTree[];\n\t/**\n\t * All {@link TreeStatus.Removed} content.\n\t */\n\treadonly removed: [string | number | undefined, number, JsonableTree][];\n}\n\n/**\n * {@link ITree} extended with some non-public APIs.\n * @internal\n */\nexport interface ISharedTree extends ISharedObject, ITree {\n\t/**\n\t * Provides a copy of the current content of the tree.\n\t * This can be useful for inspecting the tree when no suitable view schema is available.\n\t * This is only intended for use in testing and exceptional code paths: it is not performant.\n\t *\n\t * This does not include everything that is included in a tree summary, since information about how to merge future edits is omitted.\n\t */\n\tcontentSnapshot(): SharedTreeContentSnapshot;\n}\n\n/**\n * Has an entry for each codec which writes an explicit version into its data.\n *\n * This is used to map the single API entrypoint controlling the format {@link SharedTreeOptions.formatVersion}\n * to a list of write versions that for each codec that should be used for that format.\n *\n * Note that all explicitly versioned codecs should be using the format version from the data to read encoded data.\n *\n * TODO: Plumb these write versions into forest, schema, detached field index codec creation.\n */\ninterface ExplicitCodecVersions extends ExplicitCoreCodecVersions {\n\tforest: number;\n\tschema: number;\n\tdetachedFieldIndex: number;\n\tfieldBatch: number;\n}\n\nconst formatVersionToTopLevelCodecVersions = new Map<number, ExplicitCodecVersions>([\n\t[\n\t\t1,\n\t\t{ forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 1, message: 1, fieldBatch: 1 },\n\t],\n\t[\n\t\t2,\n\t\t{ forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 2, message: 2, fieldBatch: 1 },\n\t],\n\t[\n\t\t3,\n\t\t{ forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 3, message: 3, fieldBatch: 1 },\n\t],\n\t[\n\t\t4,\n\t\t{ forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 4, message: 4, fieldBatch: 1 },\n\t],\n]);\n\nfunction getCodecVersions(formatVersion: number): ExplicitCodecVersions {\n\tconst versions = formatVersionToTopLevelCodecVersions.get(formatVersion);\n\tassert(versions !== undefined, 0x90e /* Unknown format version */);\n\treturn versions;\n}\n\n/**\n * Shared tree, configured with a good set of indexes and field kinds which will maintain compatibility over time.\n *\n * TODO: detail compatibility requirements.\n */\n@breakingClass\nexport class SharedTree\n\textends SharedTreeCore<SharedTreeEditBuilder, SharedTreeChange>\n\timplements ISharedTree\n{\n\tprivate readonly _events: Listenable<CheckoutEvents> &\n\t\tIEmitter<CheckoutEvents> &\n\t\tHasListeners<CheckoutEvents>;\n\tpublic readonly checkout: TreeCheckout;\n\tpublic get storedSchema(): TreeStoredSchemaRepository {\n\t\treturn this.checkout.storedSchema;\n\t}\n\n\tpublic constructor(\n\t\tid: string,\n\t\truntime: IFluidDataStoreRuntime,\n\t\tattributes: IChannelAttributes,\n\t\toptionsParam: SharedTreeOptions,\n\t\ttelemetryContextPrefix: string = \"fluid_sharedTree_\",\n\t) {\n\t\tif (runtime.idCompressor === undefined) {\n\t\t\tthrow new UsageError(\"IdCompressor must be enabled to use SharedTree\");\n\t\t}\n\n\t\tconst options = { ...defaultSharedTreeOptions, ...optionsParam };\n\t\tconst codecVersions = getCodecVersions(options.formatVersion);\n\t\tconst schema = new TreeStoredSchemaRepository();\n\t\tconst forest =\n\t\t\toptions.forest === ForestType.Optimized\n\t\t\t\t? buildChunkedForest(\n\t\t\t\t\t\tmakeTreeChunker(schema, defaultSchemaPolicy),\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\truntime.idCompressor,\n\t\t\t\t\t)\n\t\t\t\t: options.forest === ForestType.Reference\n\t\t\t\t\t? buildForest()\n\t\t\t\t\t: buildForest(undefined, true);\n\t\tconst revisionTagCodec = new RevisionTagCodec(runtime.idCompressor);\n\t\tconst removedRoots = makeDetachedFieldIndex(\n\t\t\t\"repair\",\n\t\t\trevisionTagCodec,\n\t\t\truntime.idCompressor,\n\t\t\toptions,\n\t\t);\n\t\tconst schemaSummarizer = new SchemaSummarizer(runtime, schema, options, {\n\t\t\tgetCurrentSeq: () => this.deltaManager.lastSequenceNumber,\n\t\t});\n\t\tconst fieldBatchCodec = makeFieldBatchCodec(options, codecVersions.fieldBatch);\n\n\t\tconst encoderContext = {\n\t\t\tschema: {\n\t\t\t\tschema,\n\t\t\t\tpolicy: defaultSchemaPolicy,\n\t\t\t},\n\t\t\tencodeType: options.treeEncodeType,\n\t\t\toriginatorId: runtime.idCompressor.localSessionId,\n\t\t\tidCompressor: runtime.idCompressor,\n\t\t};\n\t\tconst forestSummarizer = new ForestSummarizer(\n\t\t\tforest,\n\t\t\trevisionTagCodec,\n\t\t\tfieldBatchCodec,\n\t\t\tencoderContext,\n\t\t\toptions,\n\t\t\truntime.idCompressor,\n\t\t);\n\t\tconst removedRootsSummarizer = new DetachedFieldIndexSummarizer(removedRoots);\n\t\tconst innerChangeFamily = new SharedTreeChangeFamily(\n\t\t\trevisionTagCodec,\n\t\t\tfieldBatchCodec,\n\t\t\toptions,\n\t\t\toptions.treeEncodeType,\n\t\t\truntime.idCompressor,\n\t\t);\n\t\tconst changeFamily = makeMitigatedChangeFamily(\n\t\t\tinnerChangeFamily,\n\t\t\tSharedTreeChangeFamily.emptyChange,\n\t\t\t(error: unknown) => {\n\t\t\t\t// TODO:6344 Add telemetry for these errors.\n\t\t\t\t// Rethrowing the error has a different effect depending on the context in which the\n\t\t\t\t// ChangeFamily was invoked:\n\t\t\t\t// - If the ChangeFamily was invoked as part of incoming op processing, rethrowing the error\n\t\t\t\t// will cause the runtime to disconnect the client, log a severe error, and not reconnect.\n\t\t\t\t// This will not cause the host application to crash because it is not on the stack at that time.\n\t\t\t\t// TODO: let the host application know that the client is now disconnected.\n\t\t\t\t// - If the ChangeFamily was invoked as part of dealing with a local change, rethrowing the\n\t\t\t\t// error will cause the host application to crash. This is not ideal, but is better than\n\t\t\t\t// letting the application either send an invalid change to the server or allowing the\n\t\t\t\t// application to continue working when its local branches contain edits that cannot be\n\t\t\t\t// reflected in its views.\n\t\t\t\t// The best course of action for a host application in such a state is to restart.\n\t\t\t\t// TODO: let the host application know about this situation and provide a way to\n\t\t\t\t// programmatically reload the SharedTree container.\n\t\t\t\tthrow error;\n\t\t\t},\n\t\t);\n\t\tconst changeEnricher = new SharedTreeReadonlyChangeEnricher(forest, schema, removedRoots);\n\t\tsuper(\n\t\t\t[schemaSummarizer, forestSummarizer, removedRootsSummarizer],\n\t\t\tchangeFamily,\n\t\t\toptions,\n\t\t\tcodecVersions,\n\t\t\tid,\n\t\t\truntime,\n\t\t\tattributes,\n\t\t\ttelemetryContextPrefix,\n\t\t\tschema,\n\t\t\tdefaultSchemaPolicy,\n\t\t\tnew DefaultResubmitMachine(\n\t\t\t\t(change: TaggedChange<SharedTreeChange>) =>\n\t\t\t\t\tchangeFamily.rebaser.invert(change, true, this.mintRevisionTag()),\n\t\t\t\tchangeEnricher,\n\t\t\t),\n\t\t\tchangeEnricher,\n\t\t);\n\t\tthis._events = createEmitter<CheckoutEvents>();\n\t\tconst localBranch = this.getLocalBranch();\n\t\tthis.checkout = createTreeCheckout(\n\t\t\truntime.idCompressor,\n\t\t\tthis.mintRevisionTag,\n\t\t\trevisionTagCodec,\n\t\t\t{\n\t\t\t\tbranch: localBranch,\n\t\t\t\tchangeFamily,\n\t\t\t\tschema,\n\t\t\t\tforest,\n\t\t\t\tfieldBatchCodec,\n\t\t\t\tevents: this._events,\n\t\t\t\tremovedRoots,\n\t\t\t\tchunkCompressionStrategy: options.treeEncodeType,\n\t\t\t\tlogger: this.logger,\n\t\t\t\tbreaker: this.breaker,\n\t\t\t},\n\t\t);\n\t}\n\n\t@throwIfBroken\n\tpublic contentSnapshot(): SharedTreeContentSnapshot {\n\t\tconst cursor = this.checkout.forest.allocateCursor(\"contentSnapshot\");\n\t\ttry {\n\t\t\tmoveToDetachedField(this.checkout.forest, cursor);\n\t\t\treturn {\n\t\t\t\tschema: this.storedSchema.clone(),\n\t\t\t\ttree: jsonableTreeFromFieldCursor(cursor),\n\t\t\t\tremoved: this.checkout.getRemovedRoots(),\n\t\t\t};\n\t\t} finally {\n\t\t\tcursor.free();\n\t\t}\n\t}\n\n\tpublic viewWith<TRoot extends ImplicitFieldSchema>(\n\t\tconfig: TreeViewConfiguration<TRoot>,\n\t): SchematizingSimpleTreeView<TRoot> {\n\t\treturn this.checkout.viewWith(config);\n\t}\n\n\tprotected override async loadCore(services: IChannelStorageService): Promise<void> {\n\t\tawait super.loadCore(services);\n\t\tthis.checkout.setTipRevisionForLoadedData(this.trunkHeadRevision);\n\t\tthis._events.emit(\"afterBatch\");\n\t}\n}\n\n/**\n * Get a {@link TreeBranch} from a {@link ITree}.\n * @remarks The branch can be used for \"version control\"-style coordination of edits on the tree.\n * @privateRemarks This function will be removed if/when the branching API becomes public,\n * but it (or something like it) is necessary in the meantime to prevent the alpha types from being exposed as public.\n * @alpha\n */\nexport function getBranch(tree: ITree): TreeBranch;\n/**\n * Get a {@link TreeBranch} from a {@link TreeView}.\n * @remarks The branch can be used for \"version control\"-style coordination of edits on the tree.\n * Branches are currently an unstable \"alpha\" API and are subject to change in the future.\n * @privateRemarks This function will be removed if/when the branching API becomes public,\n * but it (or something like it) is necessary in the meantime to prevent the alpha types from being exposed as public.\n * @alpha\n */\nexport function getBranch(view: TreeView<ImplicitFieldSchema>): TreeBranch;\nexport function getBranch(treeOrView: ITree | TreeView<ImplicitFieldSchema>): TreeBranch {\n\tassert(\n\t\ttreeOrView instanceof SharedTree || treeOrView instanceof SchematizingSimpleTreeView,\n\t\t\"Unsupported implementation\",\n\t);\n\tconst checkout: TreeCheckout = treeOrView.checkout;\n\t// This cast is safe so long as TreeCheckout supports all the operations on the branch interface.\n\treturn checkout as unknown as TreeBranch;\n}\n\n/**\n * Format versions supported by SharedTree.\n *\n * Each version documents a required minimum version of the \\@fluidframework/tree package.\n * @internal\n */\nexport const SharedTreeFormatVersion = {\n\t/**\n\t * Requires \\@fluidframework/tree \\>= 2.0.0.\n\t *\n\t * @deprecated - FF does not currently plan on supporting this format long-term.\n\t * Do not write production documents using this format, as they may not be loadable in the future.\n\t */\n\tv1: 1,\n\n\t/**\n\t * Requires \\@fluidframework/tree \\>= 2.0.0.\n\t */\n\tv2: 2,\n\n\t/**\n\t * Requires \\@fluidframework/tree \\>= 2.0.0.\n\t */\n\tv3: 3,\n} as const;\n\n/**\n * Format versions supported by SharedTree.\n *\n * Each version documents a required minimum version of the \\@fluidframework/tree package.\n * @internal\n * @privateRemarks\n * See packages/dds/tree/docs/main/compatibility.md for information on how to add support for a new format.\n */\nexport type SharedTreeFormatVersion = typeof SharedTreeFormatVersion;\n\n/**\n * @internal\n */\nexport type SharedTreeOptions = Partial<ICodecOptions> &\n\tPartial<SharedTreeFormatOptions> & {\n\t\t/**\n\t\t * The {@link ForestType} indicating which forest type should be created for the SharedTree.\n\t\t */\n\t\tforest?: ForestType;\n\t};\n\n/**\n * Options for configuring the persisted format SharedTree uses.\n * @internal\n */\nexport interface SharedTreeFormatOptions {\n\t/**\n\t * See {@link TreeCompressionStrategy}.\n\t * default: TreeCompressionStrategy.Compressed\n\t */\n\ttreeEncodeType: TreeCompressionStrategy;\n\t/**\n\t * The format version SharedTree should use to persist documents.\n\t *\n\t * This option has compatibility implications for applications using SharedTree.\n\t * Each version documents a required minimum version of \\@fluidframework/tree.\n\t * If this minimum version fails to be met, the SharedTree may fail to load.\n\t * To be safe, application authors should verify that they have saturated this version\n\t * of \\@fluidframework/tree in their ecosystem before changing the format version.\n\t *\n\t * This option defaults to SharedTreeFormatVersion.v2.\n\t */\n\tformatVersion: SharedTreeFormatVersion[keyof SharedTreeFormatVersion];\n}\n\n/**\n * Used to distinguish between different forest types.\n * @internal\n */\nexport enum ForestType {\n\t/**\n\t * The \"ObjectForest\" forest type.\n\t */\n\tReference = 0,\n\t/**\n\t * The \"ChunkedForest\" forest type.\n\t */\n\tOptimized = 1,\n\t/**\n\t * The \"ObjectForest\" forest type with expensive asserts for debugging.\n\t */\n\tExpensive = 2,\n}\n\nexport const defaultSharedTreeOptions: Required<SharedTreeOptions> = {\n\tjsonValidator: noopValidator,\n\tforest: ForestType.Reference,\n\ttreeEncodeType: TreeCompressionStrategy.Compressed,\n\tformatVersion: SharedTreeFormatVersion.v3,\n};\n\n/**\n * A channel factory that creates {@link ISharedTree}s.\n */\nexport class SharedTreeFactory implements IChannelFactory<ISharedTree> {\n\tpublic readonly type: string = \"https://graph.microsoft.com/types/tree\";\n\n\tpublic readonly attributes: IChannelAttributes = {\n\t\ttype: this.type,\n\t\tsnapshotFormatVersion: \"0.0.0\",\n\t\tpackageVersion: \"0.0.0\",\n\t};\n\n\tpublic constructor(private readonly options: SharedTreeOptions = {}) {}\n\n\tpublic async load(\n\t\truntime: IFluidDataStoreRuntime,\n\t\tid: string,\n\t\tservices: IChannelServices,\n\t\tchannelAttributes: Readonly<IChannelAttributes>,\n\t): Promise<SharedTree> {\n\t\tconst tree = new SharedTree(id, runtime, channelAttributes, this.options);\n\t\tawait tree.load(services);\n\t\treturn tree;\n\t}\n\n\tpublic create(runtime: IFluidDataStoreRuntime, id: string): SharedTree {\n\t\tconst tree = new SharedTree(id, runtime, this.attributes, this.options);\n\t\ttree.initializeLocal();\n\t\treturn tree;\n\t}\n}\n"]}
1
+ {"version":3,"file":"sharedTree.js","sourceRoot":"","sources":["../../src/shared-tree/sharedTree.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert, unreachableCase } from \"@fluidframework/core-utils/internal\";\nimport type {\n\tIChannelAttributes,\n\tIChannelFactory,\n\tIFluidDataStoreRuntime,\n\tIChannelServices,\n\tIChannelStorageService,\n} from \"@fluidframework/datastore-definitions/internal\";\nimport type { ISharedObject } from \"@fluidframework/shared-object-base/internal\";\nimport { UsageError } from \"@fluidframework/telemetry-utils/internal\";\n\nimport { type ICodecOptions, noopValidator } from \"../codec/index.js\";\nimport {\n\ttype IEditableForest,\n\ttype JsonableTree,\n\tRevisionTagCodec,\n\ttype TaggedChange,\n\ttype TreeStoredSchema,\n\tTreeStoredSchemaRepository,\n\ttype TreeStoredSchemaSubscription,\n\tmakeDetachedFieldIndex,\n\tmoveToDetachedField,\n} from \"../core/index.js\";\nimport {\n\ttype HasListeners,\n\ttype IEmitter,\n\ttype Listenable,\n\tcreateEmitter,\n} from \"../events/index.js\";\nimport {\n\tDetachedFieldIndexSummarizer,\n\tForestSummarizer,\n\tSchemaSummarizer,\n\tTreeCompressionStrategy,\n\tbuildChunkedForest,\n\tbuildForest,\n\tdefaultSchemaPolicy,\n\tjsonableTreeFromFieldCursor,\n\tmakeFieldBatchCodec,\n\tmakeMitigatedChangeFamily,\n\tmakeTreeChunker,\n} from \"../feature-libraries/index.js\";\nimport {\n\tDefaultResubmitMachine,\n\ttype ExplicitCoreCodecVersions,\n\tSharedTreeCore,\n} from \"../shared-tree-core/index.js\";\nimport type {\n\tITree,\n\tImplicitFieldSchema,\n\tTreeView,\n\tTreeViewConfiguration,\n} from \"../simple-tree/index.js\";\n\nimport { SchematizingSimpleTreeView } from \"./schematizingTreeView.js\";\nimport { SharedTreeReadonlyChangeEnricher } from \"./sharedTreeChangeEnricher.js\";\nimport { SharedTreeChangeFamily } from \"./sharedTreeChangeFamily.js\";\nimport type { SharedTreeChange } from \"./sharedTreeChangeTypes.js\";\nimport type { SharedTreeEditBuilder } from \"./sharedTreeEditBuilder.js\";\nimport {\n\ttype CheckoutEvents,\n\ttype TreeCheckout,\n\ttype TreeBranch,\n\tcreateTreeCheckout,\n} from \"./treeCheckout.js\";\nimport { breakingClass, throwIfBroken } from \"../util/index.js\";\nimport type { IIdCompressor } from \"@fluidframework/id-compressor\";\n\n/**\n * Copy of data from an {@link ISharedTree} at some point in time.\n * @remarks\n * This is unrelated to Fluids concept of \"snapshots\".\n * @internal\n */\nexport interface SharedTreeContentSnapshot {\n\t/**\n\t * The schema stored in the document.\n\t *\n\t * @remarks\n\t * Edits to the schema can mutate the schema stored of the tree which took this snapshot (but this snapshot will remain the same)\n\t * This is mainly useful for debugging cases where schematize reports an incompatible view schema.\n\t */\n\treadonly schema: TreeStoredSchema;\n\t/**\n\t * All {@link TreeStatus.InDocument} content.\n\t */\n\treadonly tree: JsonableTree[];\n\t/**\n\t * All {@link TreeStatus.Removed} content.\n\t */\n\treadonly removed: [string | number | undefined, number, JsonableTree][];\n}\n\n/**\n * {@link ITree} extended with some non-public APIs.\n * @internal\n */\nexport interface ISharedTree extends ISharedObject, ITree {\n\t/**\n\t * Provides a copy of the current content of the tree.\n\t * This can be useful for inspecting the tree when no suitable view schema is available.\n\t * This is only intended for use in testing and exceptional code paths: it is not performant.\n\t *\n\t * This does not include everything that is included in a tree summary, since information about how to merge future edits is omitted.\n\t */\n\tcontentSnapshot(): SharedTreeContentSnapshot;\n}\n\n/**\n * Has an entry for each codec which writes an explicit version into its data.\n *\n * This is used to map the single API entrypoint controlling the format {@link SharedTreeOptions.formatVersion}\n * to a list of write versions that for each codec that should be used for that format.\n *\n * Note that all explicitly versioned codecs should be using the format version from the data to read encoded data.\n *\n * TODO: Plumb these write versions into forest, schema, detached field index codec creation.\n */\ninterface ExplicitCodecVersions extends ExplicitCoreCodecVersions {\n\tforest: number;\n\tschema: number;\n\tdetachedFieldIndex: number;\n\tfieldBatch: number;\n}\n\nconst formatVersionToTopLevelCodecVersions = new Map<number, ExplicitCodecVersions>([\n\t[\n\t\t1,\n\t\t{ forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 1, message: 1, fieldBatch: 1 },\n\t],\n\t[\n\t\t2,\n\t\t{ forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 2, message: 2, fieldBatch: 1 },\n\t],\n\t[\n\t\t3,\n\t\t{ forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 3, message: 3, fieldBatch: 1 },\n\t],\n\t[\n\t\t4,\n\t\t{ forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 4, message: 4, fieldBatch: 1 },\n\t],\n]);\n\nfunction getCodecVersions(formatVersion: number): ExplicitCodecVersions {\n\tconst versions = formatVersionToTopLevelCodecVersions.get(formatVersion);\n\tassert(versions !== undefined, 0x90e /* Unknown format version */);\n\treturn versions;\n}\n\n/**\n * Build and return a forest of the requested type.\n */\nexport function buildConfiguredForest(\n\ttype: ForestType,\n\tschema: TreeStoredSchemaSubscription,\n\tidCompressor: IIdCompressor,\n): IEditableForest {\n\tswitch (type) {\n\t\tcase ForestType.Optimized:\n\t\t\treturn buildChunkedForest(\n\t\t\t\tmakeTreeChunker(schema, defaultSchemaPolicy),\n\t\t\t\tundefined,\n\t\t\t\tidCompressor,\n\t\t\t);\n\t\tcase ForestType.Reference:\n\t\t\treturn buildForest();\n\t\tcase ForestType.Expensive:\n\t\t\treturn buildForest(undefined, true);\n\t\tdefault:\n\t\t\tunreachableCase(type);\n\t}\n}\n\n/**\n * Shared tree, configured with a good set of indexes and field kinds which will maintain compatibility over time.\n *\n * TODO: detail compatibility requirements.\n */\n@breakingClass\nexport class SharedTree\n\textends SharedTreeCore<SharedTreeEditBuilder, SharedTreeChange>\n\timplements ISharedTree\n{\n\tprivate readonly _events: Listenable<CheckoutEvents> &\n\t\tIEmitter<CheckoutEvents> &\n\t\tHasListeners<CheckoutEvents>;\n\tpublic readonly checkout: TreeCheckout;\n\tpublic get storedSchema(): TreeStoredSchemaRepository {\n\t\treturn this.checkout.storedSchema;\n\t}\n\n\tpublic constructor(\n\t\tid: string,\n\t\truntime: IFluidDataStoreRuntime,\n\t\tattributes: IChannelAttributes,\n\t\toptionsParam: SharedTreeOptions,\n\t\ttelemetryContextPrefix: string = \"fluid_sharedTree_\",\n\t) {\n\t\tif (runtime.idCompressor === undefined) {\n\t\t\tthrow new UsageError(\"IdCompressor must be enabled to use SharedTree\");\n\t\t}\n\n\t\tconst options = { ...defaultSharedTreeOptions, ...optionsParam };\n\t\tconst codecVersions = getCodecVersions(options.formatVersion);\n\t\tconst schema = new TreeStoredSchemaRepository();\n\t\tconst forest = buildConfiguredForest(options.forest, schema, runtime.idCompressor);\n\t\tconst revisionTagCodec = new RevisionTagCodec(runtime.idCompressor);\n\t\tconst removedRoots = makeDetachedFieldIndex(\n\t\t\t\"repair\",\n\t\t\trevisionTagCodec,\n\t\t\truntime.idCompressor,\n\t\t\toptions,\n\t\t);\n\t\tconst schemaSummarizer = new SchemaSummarizer(runtime, schema, options, {\n\t\t\tgetCurrentSeq: () => this.deltaManager.lastSequenceNumber,\n\t\t});\n\t\tconst fieldBatchCodec = makeFieldBatchCodec(options, codecVersions.fieldBatch);\n\n\t\tconst encoderContext = {\n\t\t\tschema: {\n\t\t\t\tschema,\n\t\t\t\tpolicy: defaultSchemaPolicy,\n\t\t\t},\n\t\t\tencodeType: options.treeEncodeType,\n\t\t\toriginatorId: runtime.idCompressor.localSessionId,\n\t\t\tidCompressor: runtime.idCompressor,\n\t\t};\n\t\tconst forestSummarizer = new ForestSummarizer(\n\t\t\tforest,\n\t\t\trevisionTagCodec,\n\t\t\tfieldBatchCodec,\n\t\t\tencoderContext,\n\t\t\toptions,\n\t\t\truntime.idCompressor,\n\t\t);\n\t\tconst removedRootsSummarizer = new DetachedFieldIndexSummarizer(removedRoots);\n\t\tconst innerChangeFamily = new SharedTreeChangeFamily(\n\t\t\trevisionTagCodec,\n\t\t\tfieldBatchCodec,\n\t\t\toptions,\n\t\t\toptions.treeEncodeType,\n\t\t\truntime.idCompressor,\n\t\t);\n\t\tconst changeFamily = makeMitigatedChangeFamily(\n\t\t\tinnerChangeFamily,\n\t\t\tSharedTreeChangeFamily.emptyChange,\n\t\t\t(error: unknown) => {\n\t\t\t\t// TODO:6344 Add telemetry for these errors.\n\t\t\t\t// Rethrowing the error has a different effect depending on the context in which the\n\t\t\t\t// ChangeFamily was invoked:\n\t\t\t\t// - If the ChangeFamily was invoked as part of incoming op processing, rethrowing the error\n\t\t\t\t// will cause the runtime to disconnect the client, log a severe error, and not reconnect.\n\t\t\t\t// This will not cause the host application to crash because it is not on the stack at that time.\n\t\t\t\t// TODO: let the host application know that the client is now disconnected.\n\t\t\t\t// - If the ChangeFamily was invoked as part of dealing with a local change, rethrowing the\n\t\t\t\t// error will cause the host application to crash. This is not ideal, but is better than\n\t\t\t\t// letting the application either send an invalid change to the server or allowing the\n\t\t\t\t// application to continue working when its local branches contain edits that cannot be\n\t\t\t\t// reflected in its views.\n\t\t\t\t// The best course of action for a host application in such a state is to restart.\n\t\t\t\t// TODO: let the host application know about this situation and provide a way to\n\t\t\t\t// programmatically reload the SharedTree container.\n\t\t\t\tthrow error;\n\t\t\t},\n\t\t);\n\t\tconst changeEnricher = new SharedTreeReadonlyChangeEnricher(forest, schema, removedRoots);\n\t\tsuper(\n\t\t\t[schemaSummarizer, forestSummarizer, removedRootsSummarizer],\n\t\t\tchangeFamily,\n\t\t\toptions,\n\t\t\tcodecVersions,\n\t\t\tid,\n\t\t\truntime,\n\t\t\tattributes,\n\t\t\ttelemetryContextPrefix,\n\t\t\tschema,\n\t\t\tdefaultSchemaPolicy,\n\t\t\tnew DefaultResubmitMachine(\n\t\t\t\t(change: TaggedChange<SharedTreeChange>) =>\n\t\t\t\t\tchangeFamily.rebaser.invert(change, true, this.mintRevisionTag()),\n\t\t\t\tchangeEnricher,\n\t\t\t),\n\t\t\tchangeEnricher,\n\t\t);\n\t\tthis._events = createEmitter<CheckoutEvents>();\n\t\tconst localBranch = this.getLocalBranch();\n\t\tthis.checkout = createTreeCheckout(\n\t\t\truntime.idCompressor,\n\t\t\tthis.mintRevisionTag,\n\t\t\trevisionTagCodec,\n\t\t\t{\n\t\t\t\tbranch: localBranch,\n\t\t\t\tchangeFamily,\n\t\t\t\tschema,\n\t\t\t\tforest,\n\t\t\t\tfieldBatchCodec,\n\t\t\t\tevents: this._events,\n\t\t\t\tremovedRoots,\n\t\t\t\tchunkCompressionStrategy: options.treeEncodeType,\n\t\t\t\tlogger: this.logger,\n\t\t\t\tbreaker: this.breaker,\n\t\t\t},\n\t\t);\n\t}\n\n\t@throwIfBroken\n\tpublic contentSnapshot(): SharedTreeContentSnapshot {\n\t\tconst cursor = this.checkout.forest.allocateCursor(\"contentSnapshot\");\n\t\ttry {\n\t\t\tmoveToDetachedField(this.checkout.forest, cursor);\n\t\t\treturn {\n\t\t\t\tschema: this.storedSchema.clone(),\n\t\t\t\ttree: jsonableTreeFromFieldCursor(cursor),\n\t\t\t\tremoved: this.checkout.getRemovedRoots(),\n\t\t\t};\n\t\t} finally {\n\t\t\tcursor.free();\n\t\t}\n\t}\n\n\tpublic viewWith<TRoot extends ImplicitFieldSchema>(\n\t\tconfig: TreeViewConfiguration<TRoot>,\n\t): SchematizingSimpleTreeView<TRoot> {\n\t\treturn this.checkout.viewWith(config);\n\t}\n\n\tprotected override async loadCore(services: IChannelStorageService): Promise<void> {\n\t\tawait super.loadCore(services);\n\t\tthis.checkout.setTipRevisionForLoadedData(this.trunkHeadRevision);\n\t\tthis._events.emit(\"afterBatch\");\n\t}\n}\n\n/**\n * Get a {@link TreeBranch} from a {@link ITree}.\n * @remarks The branch can be used for \"version control\"-style coordination of edits on the tree.\n * @privateRemarks This function will be removed if/when the branching API becomes public,\n * but it (or something like it) is necessary in the meantime to prevent the alpha types from being exposed as public.\n * @alpha\n */\nexport function getBranch(tree: ITree): TreeBranch;\n/**\n * Get a {@link TreeBranch} from a {@link TreeView}.\n * @remarks The branch can be used for \"version control\"-style coordination of edits on the tree.\n * Branches are currently an unstable \"alpha\" API and are subject to change in the future.\n * @privateRemarks This function will be removed if/when the branching API becomes public,\n * but it (or something like it) is necessary in the meantime to prevent the alpha types from being exposed as public.\n * @alpha\n */\nexport function getBranch(view: TreeView<ImplicitFieldSchema>): TreeBranch;\nexport function getBranch(treeOrView: ITree | TreeView<ImplicitFieldSchema>): TreeBranch {\n\tassert(\n\t\ttreeOrView instanceof SharedTree || treeOrView instanceof SchematizingSimpleTreeView,\n\t\t\"Unsupported implementation\",\n\t);\n\tconst checkout: TreeCheckout = treeOrView.checkout;\n\t// This cast is safe so long as TreeCheckout supports all the operations on the branch interface.\n\treturn checkout as unknown as TreeBranch;\n}\n\n/**\n * Format versions supported by SharedTree.\n *\n * Each version documents a required minimum version of the \\@fluidframework/tree package.\n * @alpha\n */\nexport const SharedTreeFormatVersion = {\n\t/**\n\t * Requires \\@fluidframework/tree \\>= 2.0.0.\n\t *\n\t * @deprecated - FF does not currently plan on supporting this format long-term.\n\t * Do not write production documents using this format, as they may not be loadable in the future.\n\t */\n\tv1: 1,\n\n\t/**\n\t * Requires \\@fluidframework/tree \\>= 2.0.0.\n\t */\n\tv2: 2,\n\n\t/**\n\t * Requires \\@fluidframework/tree \\>= 2.0.0.\n\t */\n\tv3: 3,\n} as const;\n\n/**\n * Format versions supported by SharedTree.\n *\n * Each version documents a required minimum version of the \\@fluidframework/tree package.\n * @alpha\n * @privateRemarks\n * See packages/dds/tree/docs/main/compatibility.md for information on how to add support for a new format.\n *\n * TODO: Before this gets promoted past Alpha,\n * a separate abstraction more suited for use in the public API should be adopted rather than reusing the same types used internally.\n * Such an abstraction should probably be in the form of a Fluid-Framework wide compatibility enum.\n */\nexport type SharedTreeFormatVersion = typeof SharedTreeFormatVersion;\n\n/**\n * Configuration options for SharedTree.\n * @alpha\n */\nexport type SharedTreeOptions = Partial<ICodecOptions> &\n\tPartial<SharedTreeFormatOptions> &\n\tForestOptions;\n\n/**\n * Configuration options for SharedTree's internal tree storage.\n * @alpha\n */\nexport interface ForestOptions {\n\t/**\n\t * The {@link ForestType} indicating which forest type should be created for the SharedTree.\n\t */\n\treadonly forest?: ForestType;\n}\n\n/**\n * Options for configuring the persisted format SharedTree uses.\n * @alpha\n */\nexport interface SharedTreeFormatOptions {\n\t/**\n\t * See {@link TreeCompressionStrategy}.\n\t * default: TreeCompressionStrategy.Compressed\n\t */\n\ttreeEncodeType: TreeCompressionStrategy;\n\t/**\n\t * The format version SharedTree should use to persist documents.\n\t *\n\t * This option has compatibility implications for applications using SharedTree.\n\t * Each version documents a required minimum version of \\@fluidframework/tree.\n\t * If this minimum version fails to be met, the SharedTree may fail to load.\n\t * To be safe, application authors should verify that they have saturated this version\n\t * of \\@fluidframework/tree in their ecosystem before changing the format version.\n\t *\n\t * This option defaults to SharedTreeFormatVersion.v2.\n\t */\n\tformatVersion: SharedTreeFormatVersion[keyof SharedTreeFormatVersion];\n}\n\n/**\n * Used to distinguish between different forest types.\n * @alpha\n */\nexport enum ForestType {\n\t/**\n\t * The \"ObjectForest\" forest type.\n\t */\n\tReference = 0,\n\t/**\n\t * The \"ChunkedForest\" forest type.\n\t */\n\tOptimized = 1,\n\t/**\n\t * The \"ObjectForest\" forest type with expensive asserts for debugging.\n\t */\n\tExpensive = 2,\n}\n\nexport const defaultSharedTreeOptions: Required<SharedTreeOptions> = {\n\tjsonValidator: noopValidator,\n\tforest: ForestType.Reference,\n\ttreeEncodeType: TreeCompressionStrategy.Compressed,\n\tformatVersion: SharedTreeFormatVersion.v3,\n};\n\n/**\n * A channel factory that creates {@link ISharedTree}s.\n */\nexport class SharedTreeFactory implements IChannelFactory<ISharedTree> {\n\tpublic readonly type: string = \"https://graph.microsoft.com/types/tree\";\n\n\tpublic readonly attributes: IChannelAttributes = {\n\t\ttype: this.type,\n\t\tsnapshotFormatVersion: \"0.0.0\",\n\t\tpackageVersion: \"0.0.0\",\n\t};\n\n\tpublic constructor(private readonly options: SharedTreeOptions = {}) {}\n\n\tpublic async load(\n\t\truntime: IFluidDataStoreRuntime,\n\t\tid: string,\n\t\tservices: IChannelServices,\n\t\tchannelAttributes: Readonly<IChannelAttributes>,\n\t): Promise<SharedTree> {\n\t\tconst tree = new SharedTree(id, runtime, channelAttributes, this.options);\n\t\tawait tree.load(services);\n\t\treturn tree;\n\t}\n\n\tpublic create(runtime: IFluidDataStoreRuntime, id: string): SharedTree {\n\t\tconst tree = new SharedTree(id, runtime, this.attributes, this.options);\n\t\ttree.initializeLocal();\n\t\treturn tree;\n\t}\n}\n"]}
@@ -0,0 +1,29 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import type { IFluidHandle } from "@fluidframework/core-interfaces";
6
+ import type { ITreeCursor } from "../../core/index.js";
7
+ import type { TreeLeafValue, ImplicitAllowedTypes } from "../schemaTypes.js";
8
+ import { type EncodeOptions } from "./customTree.js";
9
+ /**
10
+ * Concise encoding of a {@link TreeNode} or {@link TreeLeafValue}.
11
+ * @remarks
12
+ * This is "concise" meaning that explicit type information is omitted.
13
+ * If the schema is compatible with {@link ITreeConfigurationOptions.preventAmbiguity},
14
+ * types will be lossless and compatible with {@link TreeBeta.create} (unless the options are used to customize it).
15
+ *
16
+ * Every {@link TreeNode} is an array or object.
17
+ * Any IFluidHandle values have been replaced by `THandle`.
18
+ * @privateRemarks
19
+ * This can store all possible simple trees,
20
+ * but it can not store all possible trees representable by our internal representations like FlexTree and JsonableTree.
21
+ */
22
+ export type ConciseTree<THandle = IFluidHandle> = Exclude<TreeLeafValue, IFluidHandle> | THandle | ConciseTree<THandle>[] | {
23
+ [key: string]: ConciseTree<THandle>;
24
+ };
25
+ /**
26
+ * Used to read a node cursor as a ConciseTree.
27
+ */
28
+ export declare function conciseFromCursor<TCustom>(reader: ITreeCursor, rootSchema: ImplicitAllowedTypes, options: EncodeOptions<TCustom>): ConciseTree<TCustom>;
29
+ //# sourceMappingURL=conciseTree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conciseTree.d.ts","sourceRoot":"","sources":["../../../src/simple-tree/api/conciseTree.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAEpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE7E,OAAO,EAAyB,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAG5E;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,WAAW,CAAC,OAAO,GAAG,YAAY,IAC3C,OAAO,CAAC,aAAa,EAAE,YAAY,CAAC,GACpC,OAAO,GACP,WAAW,CAAC,OAAO,CAAC,EAAE,GACtB;IACA,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;CACnC,CAAC;AAEL;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EACxC,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE,oBAAoB,EAChC,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,GAC7B,WAAW,CAAC,OAAO,CAAC,CAQtB"}
@@ -0,0 +1,21 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import { customFromCursorInner } from "./customTree.js";
6
+ import { getUnhydratedContext } from "../createContext.js";
7
+ /**
8
+ * Used to read a node cursor as a ConciseTree.
9
+ */
10
+ export function conciseFromCursor(reader, rootSchema, options) {
11
+ const config = {
12
+ useStoredKeys: false,
13
+ ...options,
14
+ };
15
+ const schemaMap = getUnhydratedContext(rootSchema).schema;
16
+ return conciseFromCursorInner(reader, config, schemaMap);
17
+ }
18
+ function conciseFromCursorInner(reader, options, schema) {
19
+ return customFromCursorInner(reader, options, schema, conciseFromCursorInner);
20
+ }
21
+ //# sourceMappingURL=conciseTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conciseTree.js","sourceRoot":"","sources":["../../../src/simple-tree/api/conciseTree.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,EAAE,qBAAqB,EAAsB,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAuB3D;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAChC,MAAmB,EACnB,UAAgC,EAChC,OAA+B;IAE/B,MAAM,MAAM,GAAqC;QAChD,aAAa,EAAE,KAAK;QACpB,GAAG,OAAO;KACV,CAAC;IAEF,MAAM,SAAS,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;IAC1D,OAAO,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,sBAAsB,CAC9B,MAAmB,EACnB,OAAyC,EACzC,MAA2C;IAE3C,OAAO,qBAAqB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,sBAAsB,CAAC,CAAC;AAC/E,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type { IFluidHandle } from \"@fluidframework/core-interfaces\";\n\nimport type { ITreeCursor } from \"../../core/index.js\";\nimport type { TreeLeafValue, ImplicitAllowedTypes } from \"../schemaTypes.js\";\nimport type { TreeNodeSchema } from \"../core/index.js\";\nimport { customFromCursorInner, type EncodeOptions } from \"./customTree.js\";\nimport { getUnhydratedContext } from \"../createContext.js\";\n\n/**\n * Concise encoding of a {@link TreeNode} or {@link TreeLeafValue}.\n * @remarks\n * This is \"concise\" meaning that explicit type information is omitted.\n * If the schema is compatible with {@link ITreeConfigurationOptions.preventAmbiguity},\n * types will be lossless and compatible with {@link TreeBeta.create} (unless the options are used to customize it).\n *\n * Every {@link TreeNode} is an array or object.\n * Any IFluidHandle values have been replaced by `THandle`.\n * @privateRemarks\n * This can store all possible simple trees,\n * but it can not store all possible trees representable by our internal representations like FlexTree and JsonableTree.\n */\nexport type ConciseTree<THandle = IFluidHandle> =\n\t| Exclude<TreeLeafValue, IFluidHandle>\n\t| THandle\n\t| ConciseTree<THandle>[]\n\t| {\n\t\t\t[key: string]: ConciseTree<THandle>;\n\t };\n\n/**\n * Used to read a node cursor as a ConciseTree.\n */\nexport function conciseFromCursor<TCustom>(\n\treader: ITreeCursor,\n\trootSchema: ImplicitAllowedTypes,\n\toptions: EncodeOptions<TCustom>,\n): ConciseTree<TCustom> {\n\tconst config: Required<EncodeOptions<TCustom>> = {\n\t\tuseStoredKeys: false,\n\t\t...options,\n\t};\n\n\tconst schemaMap = getUnhydratedContext(rootSchema).schema;\n\treturn conciseFromCursorInner(reader, config, schemaMap);\n}\n\nfunction conciseFromCursorInner<TCustom>(\n\treader: ITreeCursor,\n\toptions: Required<EncodeOptions<TCustom>>,\n\tschema: ReadonlyMap<string, TreeNodeSchema>,\n): ConciseTree<TCustom> {\n\treturn customFromCursorInner(reader, options, schema, conciseFromCursorInner);\n}\n"]}
@@ -0,0 +1,44 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import type { IFluidHandle } from "@fluidframework/core-interfaces";
6
+ import { type ITreeCursor } from "../../core/index.js";
7
+ import type { TreeLeafValue } from "../schemaTypes.js";
8
+ import { type TreeNodeSchema } from "../core/index.js";
9
+ /**
10
+ * Options for how to encode a tree.
11
+ */
12
+ export interface EncodeOptions<TCustom> {
13
+ /**
14
+ * How to encode any {@link @fluidframework/core-interfaces#IFluidHandle|IFluidHandles} in the tree.
15
+ * @remarks
16
+ * See note on {@link ParseOptions.valueConverter}.
17
+ */
18
+ valueConverter(data: IFluidHandle): TCustom;
19
+ /**
20
+ * If true, interpret the input keys of object nodes as stored keys.
21
+ * If false, interpret them as property keys.
22
+ * @defaultValue false.
23
+ */
24
+ readonly useStoredKeys?: boolean;
25
+ }
26
+ /**
27
+ * Tree representation with fields as properties and customized handle and child representations.
28
+ */
29
+ export type CustomTree<TChild, THandle> = CustomTreeNode<TChild> | CustomTreeValue<THandle>;
30
+ /**
31
+ * TreeLeafValue except the handle type is customized.
32
+ */
33
+ export type CustomTreeValue<THandle> = Exclude<TreeLeafValue, IFluidHandle> | THandle;
34
+ /**
35
+ * Tree node representation with fields as properties and customized child representation.
36
+ */
37
+ export type CustomTreeNode<TChild> = TChild[] | {
38
+ [key: string]: TChild;
39
+ };
40
+ /**
41
+ * Builds an {@link CustomTree} from a cursor in Nodes mode.
42
+ */
43
+ export declare function customFromCursorInner<TChild, THandle>(reader: ITreeCursor, options: Required<EncodeOptions<THandle>>, schema: ReadonlyMap<string, TreeNodeSchema>, childHandler: (reader: ITreeCursor, options: Required<EncodeOptions<THandle>>, schema: ReadonlyMap<string, TreeNodeSchema>) => TChild): CustomTree<TChild, THandle>;
44
+ //# sourceMappingURL=customTree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"customTree.d.ts","sourceRoot":"","sources":["../../../src/simple-tree/api/customTree.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAIpE,OAAO,EAKN,KAAK,WAAW,EAChB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAUjE;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,OAAO;IACrC;;;;OAIG;IACH,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC;IAC5C;;;;OAIG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,CAAC,MAAM,EAAE,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;AAE5F;;GAEG;AACH,MAAM,MAAM,eAAe,CAAC,OAAO,IAAI,OAAO,CAAC,aAAa,EAAE,YAAY,CAAC,GAAG,OAAO,CAAC;AAEtF;;GAEG;AACH,MAAM,MAAM,cAAc,CAAC,MAAM,IAAI,MAAM,EAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC;AAE1E;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,EACpD,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,EACzC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,EAC3C,YAAY,EAAE,CACb,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,EACzC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,KACvC,MAAM,GACT,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CA6C7B"}
@@ -0,0 +1,59 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import { isFluidHandle } from "@fluidframework/runtime-utils/internal";
6
+ import { assert } from "@fluidframework/core-utils/internal";
7
+ import { EmptyKey, forEachField, inCursorField, mapCursorField, } from "../../core/index.js";
8
+ import { fail } from "../../util/index.js";
9
+ import { NodeKind } from "../core/index.js";
10
+ import { booleanSchema, handleSchema, nullSchema, numberSchema, stringSchema, } from "../leafNodeSchema.js";
11
+ import { isObjectNodeSchema } from "../objectNodeTypes.js";
12
+ /**
13
+ * Builds an {@link CustomTree} from a cursor in Nodes mode.
14
+ */
15
+ export function customFromCursorInner(reader, options, schema, childHandler) {
16
+ const type = reader.type;
17
+ const nodeSchema = schema.get(type) ?? fail("missing schema for type in cursor");
18
+ switch (type) {
19
+ case numberSchema.identifier:
20
+ case booleanSchema.identifier:
21
+ case nullSchema.identifier:
22
+ case stringSchema.identifier:
23
+ assert(reader.value !== undefined, "out of schema: missing value");
24
+ assert(!isFluidHandle(reader.value), "out of schema: unexpected FluidHandle");
25
+ return reader.value;
26
+ case handleSchema.identifier:
27
+ assert(reader.value !== undefined, "out of schema: missing value");
28
+ assert(isFluidHandle(reader.value), "out of schema: expected FluidHandle");
29
+ return options.valueConverter(reader.value);
30
+ default: {
31
+ assert(reader.value === undefined, "out of schema: unexpected value");
32
+ if (nodeSchema.kind === NodeKind.Array) {
33
+ const fields = inCursorField(reader, EmptyKey, () => mapCursorField(reader, () => childHandler(reader, options, schema)));
34
+ return fields;
35
+ }
36
+ else {
37
+ const fields = {};
38
+ forEachField(reader, () => {
39
+ const children = mapCursorField(reader, () => childHandler(reader, options, schema));
40
+ if (children.length === 1) {
41
+ const storedKey = reader.getFieldKey();
42
+ const key = isObjectNodeSchema(nodeSchema) && !options.useStoredKeys
43
+ ? nodeSchema.storedKeyToPropertyKey.get(storedKey) ??
44
+ fail("missing property key")
45
+ : storedKey;
46
+ // Length is checked above.
47
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
48
+ fields[key] = children[0];
49
+ }
50
+ else {
51
+ assert(children.length === 0, 0xa19 /* invalid children number */);
52
+ }
53
+ });
54
+ return fields;
55
+ }
56
+ }
57
+ }
58
+ }
59
+ //# sourceMappingURL=customTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"customTree.js","sourceRoot":"","sources":["../../../src/simple-tree/api/customTree.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type { IFluidHandle } from \"@fluidframework/core-interfaces\";\nimport { isFluidHandle } from \"@fluidframework/runtime-utils/internal\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\n\nimport {\n\tEmptyKey,\n\tforEachField,\n\tinCursorField,\n\tmapCursorField,\n\ttype ITreeCursor,\n} from \"../../core/index.js\";\nimport { fail } from \"../../util/index.js\";\nimport type { TreeLeafValue } from \"../schemaTypes.js\";\nimport { NodeKind, type TreeNodeSchema } from \"../core/index.js\";\nimport {\n\tbooleanSchema,\n\thandleSchema,\n\tnullSchema,\n\tnumberSchema,\n\tstringSchema,\n} from \"../leafNodeSchema.js\";\nimport { isObjectNodeSchema } from \"../objectNodeTypes.js\";\n\n/**\n * Options for how to encode a tree.\n */\nexport interface EncodeOptions<TCustom> {\n\t/**\n\t * How to encode any {@link @fluidframework/core-interfaces#IFluidHandle|IFluidHandles} in the tree.\n\t * @remarks\n\t * See note on {@link ParseOptions.valueConverter}.\n\t */\n\tvalueConverter(data: IFluidHandle): TCustom;\n\t/**\n\t * If true, interpret the input keys of object nodes as stored keys.\n\t * If false, interpret them as property keys.\n\t * @defaultValue false.\n\t */\n\treadonly useStoredKeys?: boolean;\n}\n\n/**\n * Tree representation with fields as properties and customized handle and child representations.\n */\nexport type CustomTree<TChild, THandle> = CustomTreeNode<TChild> | CustomTreeValue<THandle>;\n\n/**\n * TreeLeafValue except the handle type is customized.\n */\nexport type CustomTreeValue<THandle> = Exclude<TreeLeafValue, IFluidHandle> | THandle;\n\n/**\n * Tree node representation with fields as properties and customized child representation.\n */\nexport type CustomTreeNode<TChild> = TChild[] | { [key: string]: TChild };\n\n/**\n * Builds an {@link CustomTree} from a cursor in Nodes mode.\n */\nexport function customFromCursorInner<TChild, THandle>(\n\treader: ITreeCursor,\n\toptions: Required<EncodeOptions<THandle>>,\n\tschema: ReadonlyMap<string, TreeNodeSchema>,\n\tchildHandler: (\n\t\treader: ITreeCursor,\n\t\toptions: Required<EncodeOptions<THandle>>,\n\t\tschema: ReadonlyMap<string, TreeNodeSchema>,\n\t) => TChild,\n): CustomTree<TChild, THandle> {\n\tconst type = reader.type;\n\tconst nodeSchema = schema.get(type) ?? fail(\"missing schema for type in cursor\");\n\n\tswitch (type) {\n\t\tcase numberSchema.identifier:\n\t\tcase booleanSchema.identifier:\n\t\tcase nullSchema.identifier:\n\t\tcase stringSchema.identifier:\n\t\t\tassert(reader.value !== undefined, \"out of schema: missing value\");\n\t\t\tassert(!isFluidHandle(reader.value), \"out of schema: unexpected FluidHandle\");\n\t\t\treturn reader.value;\n\t\tcase handleSchema.identifier:\n\t\t\tassert(reader.value !== undefined, \"out of schema: missing value\");\n\t\t\tassert(isFluidHandle(reader.value), \"out of schema: expected FluidHandle\");\n\t\t\treturn options.valueConverter(reader.value);\n\t\tdefault: {\n\t\t\tassert(reader.value === undefined, \"out of schema: unexpected value\");\n\t\t\tif (nodeSchema.kind === NodeKind.Array) {\n\t\t\t\tconst fields = inCursorField(reader, EmptyKey, () =>\n\t\t\t\t\tmapCursorField(reader, () => childHandler(reader, options, schema)),\n\t\t\t\t);\n\t\t\t\treturn fields;\n\t\t\t} else {\n\t\t\t\tconst fields: Record<string, TChild> = {};\n\t\t\t\tforEachField(reader, () => {\n\t\t\t\t\tconst children = mapCursorField(reader, () => childHandler(reader, options, schema));\n\t\t\t\t\tif (children.length === 1) {\n\t\t\t\t\t\tconst storedKey = reader.getFieldKey();\n\t\t\t\t\t\tconst key =\n\t\t\t\t\t\t\tisObjectNodeSchema(nodeSchema) && !options.useStoredKeys\n\t\t\t\t\t\t\t\t? nodeSchema.storedKeyToPropertyKey.get(storedKey) ??\n\t\t\t\t\t\t\t\t\tfail(\"missing property key\")\n\t\t\t\t\t\t\t\t: storedKey;\n\t\t\t\t\t\t// Length is checked above.\n\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\t\tfields[key] = children[0]!;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tassert(children.length === 0, 0xa19 /* invalid children number */);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn fields;\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
@@ -5,7 +5,7 @@
5
5
  export { type ITree, type TreeView, type ViewableTree, type TreeViewEvents, TreeViewConfiguration, type ITreeViewConfiguration, type SchemaCompatibilityStatus, type ITreeConfigurationOptions, } from "./tree.js";
6
6
  export { SchemaFactory, type ScopedSchemaName } from "./schemaFactory.js";
7
7
  export type { ValidateRecursiveSchema, FixRecursiveArraySchema, } from "./schemaFactoryRecursive.js";
8
- export { adaptEnum, enumFromStrings, singletonSchema, typedObjectValues, type EmptyObject, } from "./schemaCreationUtilities.js";
8
+ export { adaptEnum, enumFromStrings, singletonSchema, typedObjectValues, } from "./schemaCreationUtilities.js";
9
9
  export { treeNodeApi, type TreeNodeApi } from "./treeNodeApi.js";
10
10
  export { createFromInsertable, cursorFromInsertable } from "./create.js";
11
11
  export type { SimpleTreeSchema } from "./simpleSchema.js";
@@ -13,6 +13,11 @@ export { type JsonSchemaId, type JsonSchemaType, type JsonObjectNodeSchema, type
13
13
  export { getJsonSchema } from "./getJsonSchema.js";
14
14
  export { getSimpleSchema } from "./getSimpleSchema.js";
15
15
  export { ViewSchema } from "./view.js";
16
+ export type { Unenforced, FieldHasDefaultUnsafe, ObjectFromSchemaRecordUnsafe, TreeObjectNodeUnsafe, TreeFieldFromImplicitFieldUnsafe, TreeNodeFromImplicitAllowedTypesUnsafe, FieldSchemaUnsafe, InsertableTreeNodeFromImplicitAllowedTypesUnsafe, TreeArrayNodeUnsafe, TreeMapNodeUnsafe, InsertableObjectFromSchemaRecordUnsafe, InsertableTreeFieldFromImplicitFieldUnsafe, InsertableTypedNodeUnsafe, NodeBuilderDataUnsafe, NodeFromSchemaUnsafe, ReadonlyMapInlined, } from "./typesUnsafe.js";
17
+ export type { VerboseTreeNode, ParseOptions, VerboseTree, } from "./verboseTree.js";
18
+ export type { EncodeOptions } from "./customTree.js";
19
+ export type { ConciseTree } from "./conciseTree.js";
16
20
  export { TreeBeta, type NodeChangedData, type TreeChangeEventsBeta } from "./treeApiBeta.js";
21
+ export { extractPersistedSchema, comparePersistedSchemaInternal, comparePersistedSchema, } from "./storedSchema.js";
17
22
  export { RecursiveObject as test_RecursiveObject, base as test_RecursiveObject_base, RecursiveObjectPojoMode as test_RecursiveObjectPojoMode, } from "./testRecursiveDomain.js";
18
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/simple-tree/api/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,KAAK,KAAK,EACV,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,qBAAqB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,GAC9B,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,YAAY,EACX,uBAAuB,EACvB,uBAAuB,GACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACN,SAAS,EACT,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,KAAK,WAAW,GAChB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACzE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EACN,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,kBAAkB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAI7F,OAAO,EACN,eAAe,IAAI,oBAAoB,EACvC,IAAI,IAAI,yBAAyB,EACjC,uBAAuB,IAAI,4BAA4B,GACvD,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/simple-tree/api/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,KAAK,KAAK,EACV,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,qBAAqB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,GAC9B,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,YAAY,EACX,uBAAuB,EACvB,uBAAuB,GACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACN,SAAS,EACT,eAAe,EACf,eAAe,EACf,iBAAiB,GACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACzE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EACN,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,kBAAkB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,YAAY,EACX,UAAU,EACV,qBAAqB,EACrB,4BAA4B,EAC5B,oBAAoB,EACpB,gCAAgC,EAChC,sCAAsC,EACtC,iBAAiB,EACjB,gDAAgD,EAChD,mBAAmB,EACnB,iBAAiB,EACjB,sCAAsC,EACtC,0CAA0C,EAC1C,yBAAyB,EACzB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,GAClB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACX,eAAe,EACf,YAAY,EACZ,WAAW,GACX,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7F,OAAO,EACN,sBAAsB,EACtB,8BAA8B,EAC9B,sBAAsB,GACtB,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EACN,eAAe,IAAI,oBAAoB,EACvC,IAAI,IAAI,yBAAyB,EACjC,uBAAuB,IAAI,4BAA4B,GACvD,MAAM,0BAA0B,CAAC"}
@@ -11,6 +11,7 @@ export { getJsonSchema } from "./getJsonSchema.js";
11
11
  export { getSimpleSchema } from "./getSimpleSchema.js";
12
12
  export { ViewSchema } from "./view.js";
13
13
  export { TreeBeta } from "./treeApiBeta.js";
14
+ export { extractPersistedSchema, comparePersistedSchemaInternal, comparePersistedSchema, } from "./storedSchema.js";
14
15
  // Exporting the schema (RecursiveObject) to test that recursive types are working correctly.
15
16
  // These are `@internal` so they can't be included in the `InternalClassTreeTypes` due to https://github.com/microsoft/rushstack/issues/3639
16
17
  export { RecursiveObject as test_RecursiveObject, base as test_RecursiveObject_base, RecursiveObjectPojoMode as test_RecursiveObjectPojoMode, } from "./testRecursiveDomain.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/simple-tree/api/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAKN,qBAAqB,GAIrB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAAyB,MAAM,oBAAoB,CAAC;AAK1E,OAAO,EACN,SAAS,EACT,eAAe,EACf,eAAe,EACf,iBAAiB,GAEjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,WAAW,EAAoB,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAiBzE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,OAAO,EAAE,QAAQ,EAAmD,MAAM,kBAAkB,CAAC;AAE7F,6FAA6F;AAC7F,4IAA4I;AAC5I,OAAO,EACN,eAAe,IAAI,oBAAoB,EACvC,IAAI,IAAI,yBAAyB,EACjC,uBAAuB,IAAI,4BAA4B,GACvD,MAAM,0BAA0B,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport {\n\ttype ITree,\n\ttype TreeView,\n\ttype ViewableTree,\n\ttype TreeViewEvents,\n\tTreeViewConfiguration,\n\ttype ITreeViewConfiguration,\n\ttype SchemaCompatibilityStatus,\n\ttype ITreeConfigurationOptions,\n} from \"./tree.js\";\nexport { SchemaFactory, type ScopedSchemaName } from \"./schemaFactory.js\";\nexport type {\n\tValidateRecursiveSchema,\n\tFixRecursiveArraySchema,\n} from \"./schemaFactoryRecursive.js\";\nexport {\n\tadaptEnum,\n\tenumFromStrings,\n\tsingletonSchema,\n\ttypedObjectValues,\n\ttype EmptyObject,\n} from \"./schemaCreationUtilities.js\";\nexport { treeNodeApi, type TreeNodeApi } from \"./treeNodeApi.js\";\nexport { createFromInsertable, cursorFromInsertable } from \"./create.js\";\nexport type { SimpleTreeSchema } from \"./simpleSchema.js\";\nexport {\n\ttype JsonSchemaId,\n\ttype JsonSchemaType,\n\ttype JsonObjectNodeSchema,\n\ttype JsonArrayNodeSchema,\n\ttype JsonMapNodeSchema,\n\ttype JsonLeafNodeSchema,\n\ttype JsonSchemaRef,\n\ttype JsonRefPath,\n\ttype JsonNodeSchema,\n\ttype JsonNodeSchemaBase,\n\ttype JsonTreeSchema,\n\ttype JsonFieldSchema,\n\ttype JsonLeafSchemaType,\n} from \"./jsonSchema.js\";\nexport { getJsonSchema } from \"./getJsonSchema.js\";\nexport { getSimpleSchema } from \"./getSimpleSchema.js\";\nexport { ViewSchema } from \"./view.js\";\n\nexport { TreeBeta, type NodeChangedData, type TreeChangeEventsBeta } from \"./treeApiBeta.js\";\n\n// Exporting the schema (RecursiveObject) to test that recursive types are working correctly.\n// These are `@internal` so they can't be included in the `InternalClassTreeTypes` due to https://github.com/microsoft/rushstack/issues/3639\nexport {\n\tRecursiveObject as test_RecursiveObject,\n\tbase as test_RecursiveObject_base,\n\tRecursiveObjectPojoMode as test_RecursiveObjectPojoMode,\n} from \"./testRecursiveDomain.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/simple-tree/api/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAKN,qBAAqB,GAIrB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAAyB,MAAM,oBAAoB,CAAC;AAK1E,OAAO,EACN,SAAS,EACT,eAAe,EACf,eAAe,EACf,iBAAiB,GACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,WAAW,EAAoB,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAiBzE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AA8BvC,OAAO,EAAE,QAAQ,EAAmD,MAAM,kBAAkB,CAAC;AAE7F,OAAO,EACN,sBAAsB,EACtB,8BAA8B,EAC9B,sBAAsB,GACtB,MAAM,mBAAmB,CAAC;AAE3B,6FAA6F;AAC7F,4IAA4I;AAC5I,OAAO,EACN,eAAe,IAAI,oBAAoB,EACvC,IAAI,IAAI,yBAAyB,EACjC,uBAAuB,IAAI,4BAA4B,GACvD,MAAM,0BAA0B,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport {\n\ttype ITree,\n\ttype TreeView,\n\ttype ViewableTree,\n\ttype TreeViewEvents,\n\tTreeViewConfiguration,\n\ttype ITreeViewConfiguration,\n\ttype SchemaCompatibilityStatus,\n\ttype ITreeConfigurationOptions,\n} from \"./tree.js\";\nexport { SchemaFactory, type ScopedSchemaName } from \"./schemaFactory.js\";\nexport type {\n\tValidateRecursiveSchema,\n\tFixRecursiveArraySchema,\n} from \"./schemaFactoryRecursive.js\";\nexport {\n\tadaptEnum,\n\tenumFromStrings,\n\tsingletonSchema,\n\ttypedObjectValues,\n} from \"./schemaCreationUtilities.js\";\nexport { treeNodeApi, type TreeNodeApi } from \"./treeNodeApi.js\";\nexport { createFromInsertable, cursorFromInsertable } from \"./create.js\";\nexport type { SimpleTreeSchema } from \"./simpleSchema.js\";\nexport {\n\ttype JsonSchemaId,\n\ttype JsonSchemaType,\n\ttype JsonObjectNodeSchema,\n\ttype JsonArrayNodeSchema,\n\ttype JsonMapNodeSchema,\n\ttype JsonLeafNodeSchema,\n\ttype JsonSchemaRef,\n\ttype JsonRefPath,\n\ttype JsonNodeSchema,\n\ttype JsonNodeSchemaBase,\n\ttype JsonTreeSchema,\n\ttype JsonFieldSchema,\n\ttype JsonLeafSchemaType,\n} from \"./jsonSchema.js\";\nexport { getJsonSchema } from \"./getJsonSchema.js\";\nexport { getSimpleSchema } from \"./getSimpleSchema.js\";\nexport { ViewSchema } from \"./view.js\";\nexport type {\n\tUnenforced,\n\tFieldHasDefaultUnsafe,\n\tObjectFromSchemaRecordUnsafe,\n\tTreeObjectNodeUnsafe,\n\tTreeFieldFromImplicitFieldUnsafe,\n\tTreeNodeFromImplicitAllowedTypesUnsafe,\n\tFieldSchemaUnsafe,\n\tInsertableTreeNodeFromImplicitAllowedTypesUnsafe,\n\tTreeArrayNodeUnsafe,\n\tTreeMapNodeUnsafe,\n\tInsertableObjectFromSchemaRecordUnsafe,\n\tInsertableTreeFieldFromImplicitFieldUnsafe,\n\tInsertableTypedNodeUnsafe,\n\tNodeBuilderDataUnsafe,\n\tNodeFromSchemaUnsafe,\n\tReadonlyMapInlined,\n} from \"./typesUnsafe.js\";\n\nexport type {\n\tVerboseTreeNode,\n\tParseOptions,\n\tVerboseTree,\n} from \"./verboseTree.js\";\n\nexport type { EncodeOptions } from \"./customTree.js\";\n\nexport type { ConciseTree } from \"./conciseTree.js\";\n\nexport { TreeBeta, type NodeChangedData, type TreeChangeEventsBeta } from \"./treeApiBeta.js\";\n\nexport {\n\textractPersistedSchema,\n\tcomparePersistedSchemaInternal,\n\tcomparePersistedSchema,\n} from \"./storedSchema.js\";\n\n// Exporting the schema (RecursiveObject) to test that recursive types are working correctly.\n// These are `@internal` so they can't be included in the `InternalClassTreeTypes` due to https://github.com/microsoft/rushstack/issues/3639\nexport {\n\tRecursiveObject as test_RecursiveObject,\n\tbase as test_RecursiveObject_base,\n\tRecursiveObjectPojoMode as test_RecursiveObjectPojoMode,\n} from \"./testRecursiveDomain.js\";\n"]}
@@ -3,61 +3,75 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import type { SchemaFactory, ScopedSchemaName } from "./schemaFactory.js";
6
- import type { NodeKind, TreeNodeSchemaClass, TreeNode } from "../core/index.js";
7
- import type { ObjectFromSchemaRecord } from "../objectNode.js";
8
- /**
9
- * Empty Object for use in type computations that should contribute no fields when `&`ed with another type.
10
- * @internal
11
- */
12
- export type EmptyObject = {};
6
+ import type { NodeKind, TreeNode, TreeNodeSchemaClass } from "../core/index.js";
13
7
  /**
14
8
  * Create a schema for a node with no state.
15
9
  * @remarks
16
10
  * This is commonly used in unions when the only information needed is which kind of node the value is.
17
11
  * Enums are a common example of this pattern.
18
- * @internal
12
+ * @see {@link adaptEnum}
13
+ * @alpha
19
14
  */
20
- export declare function singletonSchema<TScope extends string, TName extends string | number>(factory: SchemaFactory<TScope, TName>, name: TName): TreeNodeSchemaClass<ScopedSchemaName<TScope, TName>, NodeKind.Object, object & TreeNode & ObjectFromSchemaRecord<EmptyObject> & {
15
+ export declare function singletonSchema<TScope extends string, TName extends string | number>(factory: SchemaFactory<TScope, TName>, name: TName): TreeNodeSchemaClass<ScopedSchemaName<TScope, TName>, NodeKind.Object, TreeNode & {
21
16
  readonly value: TName;
22
- }, object & {}, true, unknown> & (new () => object & TreeNode & ObjectFromSchemaRecord<EmptyObject> & {
17
+ }, never, true, unknown> & (new () => TreeNode & {
23
18
  readonly value: TName;
24
19
  });
25
20
  /**
26
21
  * Converts an enum into a collection of schema which can be used in a union.
27
22
  * @remarks
28
23
  * Currently only supports `string` enums.
24
+ * The string value of the enum is used as the name of the schema: callers must ensure that it is stable and unique.
25
+ * Consider making a dedicated schema factory with a nested scope to avoid the enum members colliding with other schema.
29
26
  * @example
30
27
  * ```typescript
28
+ * const schemaFactory = new SchemaFactory("com.myApp");
29
+ * // An enum for use in the tree. Must have string keys.
31
30
  * enum Mode {
32
31
  * a = "A",
33
32
  * b = "B",
34
33
  * }
35
- * const ModeNodes = adaptEnum(schema, Mode);
34
+ * // Define the schema for each member of the enum using a nested scope to group them together.
35
+ * const ModeNodes = adaptEnum(new SchemaFactory(`${schemaFactory.scope}.Mode`), Mode);
36
+ * // Defined the types of the nodes which correspond to this the schema.
36
37
  * type ModeNodes = NodeFromSchema<(typeof ModeNodes)[keyof typeof ModeNodes]>;
37
- * const nodeFromString: ModeNodes = ModeNodes(Mode.a);
38
- * const nodeFromSchema: ModeNodes = new ModeNodes.a();
39
- * const nameFromNode: Mode = nodeFromSchema.value;
38
+ * // An example schema which has an enum as a child.
40
39
  * class Parent extends schemaFactory.object("Parent", {
40
+ * // typedObjectValues extracts a list of all the fields of ModeNodes, which are the schema for each enum member.
41
+ * // This means any member of the enum is allowed in this field.
41
42
  * mode: typedObjectValues(ModeNodes),
42
43
  * }) {}
44
+ *
45
+ * // Example usage of enum-based nodes, showing what type to use and that `.value` can be used to read out the enum value.
46
+ * function getValue(node: ModeNodes): Mode {
47
+ * return node.value;
48
+ * }
49
+ *
50
+ * // Example constructing a tree containing an enum node from an enum value.
51
+ * // The syntax `new ModeNodes.a()` is also supported.
52
+ * function setValue(node: Parent): void {
53
+ * node.mode = ModeNodes(Mode.a);
54
+ * }
43
55
  * ```
44
56
  * @privateRemarks
45
57
  * TODO:
46
- * Extends this to support numeric enums.
47
- * Maybe require an explicit nested scope to group them under, or at least a warning about collisions.
48
- * Maybe just provide `SchemaFactory.nested` to east creating nested scopes?
49
- * @internal
58
+ * Extend this to support numeric enums.
59
+ * Maybe provide `SchemaFactory.nested` to ease creating nested scopes?
60
+ * @see {@link enumFromStrings} for a similar function that works on arrays of strings instead of an enum.
61
+ * @alpha
50
62
  */
51
- export declare function adaptEnum<TScope extends string, const TEnum extends Record<string, string>>(factory: SchemaFactory<TScope>, members: TEnum): (<TValue extends TEnum[keyof TEnum]>(value: TValue) => object & TreeNode & ObjectFromSchemaRecord<EmptyObject> & {
63
+ export declare function adaptEnum<TScope extends string, const TEnum extends Record<string, string | number>>(factory: SchemaFactory<TScope>, members: TEnum): (<TValue extends TEnum[keyof TEnum]>(value: TValue) => TreeNode & {
52
64
  readonly value: TValue;
53
- }) & { readonly [Property in keyof TEnum]: TreeNodeSchemaClass<ScopedSchemaName<TScope, TEnum[Property]>, NodeKind.Object, object & TreeNode & ObjectFromSchemaRecord<EmptyObject> & {
65
+ }) & { readonly [Property in keyof TEnum]: TreeNodeSchemaClass<ScopedSchemaName<TScope, TEnum[Property]>, NodeKind.Object, TreeNode & {
54
66
  readonly value: TEnum[Property];
55
- }, object & {}, true, unknown> & (new () => object & TreeNode & ObjectFromSchemaRecord<EmptyObject> & {
67
+ }, never, true, unknown> & (new () => TreeNode & {
56
68
  readonly value: TEnum[Property];
57
69
  }); };
58
70
  /**
59
71
  * `Object.values`, but with more specific types.
60
- * @internal
72
+ * @remarks
73
+ * Useful with collections of schema, like those returned by {@link adaptEnum} or {@link enumFromStrings}.
74
+ * @alpha
61
75
  */
62
76
  export declare function typedObjectValues<TKey extends string, TValues>(object: Record<TKey, TValues>): TValues[];
63
77
  /**
@@ -77,13 +91,14 @@ export declare function typedObjectValues<TKey extends string, TValues>(object:
77
91
  *
78
92
  * class Parent extends schemaFactory.object("Parent", { mode: typedObjectValues(Mode) }) {}
79
93
  * ```
80
- * @internal
94
+ * @see {@link adaptEnum} for a similar function that works on enums instead of arrays of strings.
95
+ * @alpha
81
96
  */
82
- export declare function enumFromStrings<TScope extends string, const Members extends string>(factory: SchemaFactory<TScope>, members: readonly Members[]): (<TValue extends Members>(value: TValue) => object & TreeNode & ObjectFromSchemaRecord<EmptyObject> & {
97
+ export declare function enumFromStrings<TScope extends string, const Members extends string>(factory: SchemaFactory<TScope>, members: readonly Members[]): (<TValue extends Members>(value: TValue) => TreeNode & {
83
98
  readonly value: TValue;
84
- }) & Record<Members, TreeNodeSchemaClass<ScopedSchemaName<TScope, Members>, NodeKind.Object, object & TreeNode & ObjectFromSchemaRecord<EmptyObject> & {
99
+ }) & Record<Members, TreeNodeSchemaClass<ScopedSchemaName<TScope, Members>, NodeKind.Object, TreeNode & {
85
100
  readonly value: Members;
86
- }, object & {}, true, unknown> & (new () => object & TreeNode & ObjectFromSchemaRecord<EmptyObject> & {
101
+ }, never, true, unknown> & (new () => TreeNode & {
87
102
  readonly value: Members;
88
103
  })>;
89
104
  //# sourceMappingURL=schemaCreationUtilities.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schemaCreationUtilities.d.ts","sourceRoot":"","sources":["../../../src/simple-tree/api/schemaCreationUtilities.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,KAAK,EAAE,QAAQ,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,KAAK,EAEX,sBAAsB,EACtB,MAAM,kBAAkB,CAAC;AAE1B;;;GAGG;AAIH,MAAM,MAAM,WAAW,GAAG,EAAE,CAAC;AAE7B;;;;;;GAMG;AAGH,wBAAgB,eAAe,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,SAAS,MAAM,GAAG,MAAM,EACnF,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,EACrC,IAAI,EAAE,KAAK;oBAa8C,KAAK;;oBAAL,KAAK;GAiB9D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,wBAAgB,SAAS,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1F,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,EAC9B,OAAO,EAAE,KAAK,+CAmBoC,MAAM;;;;;;MAgBxD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,SAAS,MAAM,EAAE,OAAO,EAC7D,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAC3B,OAAO,EAAE,CAEX;AAED;;;;;;;;;;;;;;;;;;GAkBG;AAEH,wBAAgB,eAAe,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,CAAC,OAAO,SAAS,MAAM,EAClF,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,EAC9B,OAAO,EAAE,SAAS,OAAO,EAAE,oCASwB,MAAM;;;;;;IAgBzD"}
1
+ {"version":3,"file":"schemaCreationUtilities.d.ts","sourceRoot":"","sources":["../../../src/simple-tree/api/schemaCreationUtilities.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,KAAK,EAEX,QAAQ,EACR,QAAQ,EACR,mBAAmB,EACnB,MAAM,kBAAkB,CAAC;AAW1B;;;;;;;GAOG;AAGH,wBAAgB,eAAe,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,SAAS,MAAM,GAAG,MAAM,EACnF,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,EACrC,IAAI,EAAE,KAAK;oBAWkC,KAAK;;oBAAL,KAAK;GAiBlD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,wBAAgB,SAAS,CACxB,MAAM,SAAS,MAAM,EACrB,KAAK,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EAClD,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,+CAkBG,MAAM;;;;;;MAgBxD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,SAAS,MAAM,EAAE,OAAO,EAC7D,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAC3B,OAAO,EAAE,CAEX;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,wBAAgB,eAAe,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,CAAC,OAAO,SAAS,MAAM,EAClF,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,EAC9B,OAAO,EAAE,SAAS,OAAO,EAAE,oCASwB,MAAM;;;;;;IAgBzD"}