@fluidframework/tree 2.4.0-297385 → 2.4.0-299374

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (394) hide show
  1. package/.dependency-cruiser-known-violations.json +0 -14
  2. package/.vscode/settings.json +9 -1
  3. package/api-report/tree.alpha.api.md +178 -21
  4. package/api-report/tree.beta.api.md +46 -21
  5. package/api-report/tree.legacy.alpha.api.md +46 -21
  6. package/api-report/tree.legacy.public.api.md +46 -21
  7. package/api-report/tree.public.api.md +46 -21
  8. package/dist/alpha.d.ts +29 -1
  9. package/dist/beta.d.ts +2 -0
  10. package/dist/codec/codec.d.ts +4 -4
  11. package/dist/codec/codec.js.map +1 -1
  12. package/dist/codec/noopValidator.d.ts +1 -1
  13. package/dist/codec/noopValidator.js +1 -1
  14. package/dist/codec/noopValidator.js.map +1 -1
  15. package/dist/core/tree/anchorSet.d.ts +159 -2
  16. package/dist/core/tree/anchorSet.d.ts.map +1 -1
  17. package/dist/core/tree/anchorSet.js +54 -12
  18. package/dist/core/tree/anchorSet.js.map +1 -1
  19. package/dist/external-utilities/typeboxValidator.d.ts +1 -1
  20. package/dist/external-utilities/typeboxValidator.js +1 -1
  21. package/dist/external-utilities/typeboxValidator.js.map +1 -1
  22. package/dist/feature-libraries/flex-tree/lazyField.d.ts +4 -0
  23. package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  24. package/dist/feature-libraries/flex-tree/lazyField.js +38 -6
  25. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  26. package/dist/feature-libraries/index.d.ts +0 -1
  27. package/dist/feature-libraries/index.d.ts.map +1 -1
  28. package/dist/feature-libraries/index.js +46 -49
  29. package/dist/feature-libraries/index.js.map +1 -1
  30. package/dist/feature-libraries/treeCompressionUtils.d.ts +1 -1
  31. package/dist/feature-libraries/treeCompressionUtils.js +1 -1
  32. package/dist/feature-libraries/treeCompressionUtils.js.map +1 -1
  33. package/dist/index.d.ts +6 -5
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +4 -2
  36. package/dist/index.js.map +1 -1
  37. package/dist/internalTypes.d.ts +2 -2
  38. package/dist/internalTypes.d.ts.map +1 -1
  39. package/dist/internalTypes.js.map +1 -1
  40. package/dist/legacy.d.ts +2 -0
  41. package/dist/packageVersion.d.ts +1 -1
  42. package/dist/packageVersion.js +1 -1
  43. package/dist/packageVersion.js.map +1 -1
  44. package/dist/public.d.ts +2 -0
  45. package/dist/shared-tree/index.d.ts +2 -1
  46. package/dist/shared-tree/index.d.ts.map +1 -1
  47. package/dist/shared-tree/index.js +5 -1
  48. package/dist/shared-tree/index.js.map +1 -1
  49. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  50. package/dist/shared-tree/schematizingTreeView.js +1 -14
  51. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  52. package/dist/shared-tree/sharedTree.d.ts +24 -9
  53. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  54. package/dist/shared-tree/sharedTree.js +20 -8
  55. package/dist/shared-tree/sharedTree.js.map +1 -1
  56. package/dist/shared-tree/treeApi.d.ts +6 -6
  57. package/dist/shared-tree/treeApi.d.ts.map +1 -1
  58. package/dist/shared-tree/treeApi.js.map +1 -1
  59. package/dist/simple-tree/api/conciseTree.d.ts +29 -0
  60. package/dist/simple-tree/api/conciseTree.d.ts.map +1 -0
  61. package/dist/simple-tree/api/conciseTree.js +25 -0
  62. package/dist/simple-tree/api/conciseTree.js.map +1 -0
  63. package/dist/simple-tree/api/customTree.d.ts +44 -0
  64. package/dist/simple-tree/api/customTree.d.ts.map +1 -0
  65. package/dist/simple-tree/api/customTree.js +63 -0
  66. package/dist/simple-tree/api/customTree.js.map +1 -0
  67. package/dist/simple-tree/api/index.d.ts +7 -2
  68. package/dist/simple-tree/api/index.d.ts.map +1 -1
  69. package/dist/simple-tree/api/index.js +5 -1
  70. package/dist/simple-tree/api/index.js.map +1 -1
  71. package/dist/simple-tree/api/schemaCreationUtilities.d.ts +41 -26
  72. package/dist/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
  73. package/dist/simple-tree/api/schemaCreationUtilities.js +43 -15
  74. package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  75. package/dist/simple-tree/api/schemaFactory.d.ts +1 -2
  76. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  77. package/dist/simple-tree/api/schemaFactory.js +8 -8
  78. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  79. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +1 -2
  80. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  81. package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  82. package/dist/simple-tree/api/storedSchema.d.ts +78 -0
  83. package/dist/simple-tree/api/storedSchema.d.ts.map +1 -0
  84. package/dist/simple-tree/api/storedSchema.js +107 -0
  85. package/dist/simple-tree/api/storedSchema.js.map +1 -0
  86. package/dist/simple-tree/api/testRecursiveDomain.d.ts +10 -10
  87. package/dist/simple-tree/api/tree.d.ts +12 -3
  88. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  89. package/dist/simple-tree/api/tree.js.map +1 -1
  90. package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  91. package/dist/simple-tree/api/treeNodeApi.js +5 -5
  92. package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
  93. package/dist/simple-tree/{typesUnsafe.d.ts → api/typesUnsafe.d.ts} +58 -10
  94. package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -0
  95. package/dist/simple-tree/api/typesUnsafe.js.map +1 -0
  96. package/dist/simple-tree/api/verboseTree.d.ts +6 -20
  97. package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
  98. package/dist/simple-tree/api/verboseTree.js +10 -48
  99. package/dist/simple-tree/api/verboseTree.js.map +1 -1
  100. package/dist/simple-tree/arrayNode.d.ts +14 -3
  101. package/dist/simple-tree/arrayNode.d.ts.map +1 -1
  102. package/dist/simple-tree/arrayNode.js +1 -2
  103. package/dist/simple-tree/arrayNode.js.map +1 -1
  104. package/dist/simple-tree/core/index.d.ts +1 -1
  105. package/dist/simple-tree/core/index.d.ts.map +1 -1
  106. package/dist/simple-tree/core/index.js +2 -1
  107. package/dist/simple-tree/core/index.js.map +1 -1
  108. package/dist/simple-tree/core/treeNodeKernel.d.ts +9 -0
  109. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  110. package/dist/simple-tree/core/treeNodeKernel.js +14 -1
  111. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  112. package/dist/simple-tree/core/treeNodeSchema.d.ts +6 -5
  113. package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  114. package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
  115. package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  116. package/dist/simple-tree/core/unhydratedFlexTree.js +3 -1
  117. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  118. package/dist/simple-tree/core/withType.d.ts +3 -1
  119. package/dist/simple-tree/core/withType.d.ts.map +1 -1
  120. package/dist/simple-tree/core/withType.js.map +1 -1
  121. package/dist/simple-tree/flexList.d.ts.map +1 -0
  122. package/dist/simple-tree/flexList.js.map +1 -0
  123. package/dist/simple-tree/index.d.ts +6 -7
  124. package/dist/simple-tree/index.d.ts.map +1 -1
  125. package/dist/simple-tree/index.js +5 -3
  126. package/dist/simple-tree/index.js.map +1 -1
  127. package/dist/simple-tree/mapNode.d.ts.map +1 -1
  128. package/dist/simple-tree/mapNode.js +2 -3
  129. package/dist/simple-tree/mapNode.js.map +1 -1
  130. package/dist/simple-tree/objectNode.d.ts.map +1 -1
  131. package/dist/simple-tree/objectNode.js +3 -4
  132. package/dist/simple-tree/objectNode.js.map +1 -1
  133. package/dist/simple-tree/schemaTypes.d.ts +60 -7
  134. package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
  135. package/dist/simple-tree/schemaTypes.js +11 -6
  136. package/dist/simple-tree/schemaTypes.js.map +1 -1
  137. package/dist/simple-tree/toFlexSchema.d.ts.map +1 -1
  138. package/dist/simple-tree/toFlexSchema.js +13 -15
  139. package/dist/simple-tree/toFlexSchema.js.map +1 -1
  140. package/dist/simple-tree/toMapTree.d.ts +4 -2
  141. package/dist/simple-tree/toMapTree.d.ts.map +1 -1
  142. package/dist/simple-tree/toMapTree.js +3 -3
  143. package/dist/simple-tree/toMapTree.js.map +1 -1
  144. package/dist/simple-tree/treeNodeValid.d.ts.map +1 -1
  145. package/dist/simple-tree/treeNodeValid.js +2 -1
  146. package/dist/simple-tree/treeNodeValid.js.map +1 -1
  147. package/dist/treeFactory.d.ts +1 -0
  148. package/dist/treeFactory.d.ts.map +1 -1
  149. package/dist/treeFactory.js +1 -0
  150. package/dist/treeFactory.js.map +1 -1
  151. package/dist/util/utils.d.ts +10 -8
  152. package/dist/util/utils.d.ts.map +1 -1
  153. package/dist/util/utils.js.map +1 -1
  154. package/docs/main/detached-trees.md +8 -8
  155. package/lib/alpha.d.ts +29 -1
  156. package/lib/beta.d.ts +2 -0
  157. package/lib/codec/codec.d.ts +4 -4
  158. package/lib/codec/codec.js.map +1 -1
  159. package/lib/codec/noopValidator.d.ts +1 -1
  160. package/lib/codec/noopValidator.js +1 -1
  161. package/lib/codec/noopValidator.js.map +1 -1
  162. package/lib/core/tree/anchorSet.d.ts +159 -2
  163. package/lib/core/tree/anchorSet.d.ts.map +1 -1
  164. package/lib/core/tree/anchorSet.js +54 -12
  165. package/lib/core/tree/anchorSet.js.map +1 -1
  166. package/lib/external-utilities/typeboxValidator.d.ts +1 -1
  167. package/lib/external-utilities/typeboxValidator.js +1 -1
  168. package/lib/external-utilities/typeboxValidator.js.map +1 -1
  169. package/lib/feature-libraries/flex-tree/lazyField.d.ts +4 -0
  170. package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  171. package/lib/feature-libraries/flex-tree/lazyField.js +36 -5
  172. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  173. package/lib/feature-libraries/index.d.ts +0 -1
  174. package/lib/feature-libraries/index.d.ts.map +1 -1
  175. package/lib/feature-libraries/index.js +0 -1
  176. package/lib/feature-libraries/index.js.map +1 -1
  177. package/lib/feature-libraries/treeCompressionUtils.d.ts +1 -1
  178. package/lib/feature-libraries/treeCompressionUtils.js +1 -1
  179. package/lib/feature-libraries/treeCompressionUtils.js.map +1 -1
  180. package/lib/index.d.ts +6 -5
  181. package/lib/index.d.ts.map +1 -1
  182. package/lib/index.js +3 -3
  183. package/lib/index.js.map +1 -1
  184. package/lib/internalTypes.d.ts +2 -2
  185. package/lib/internalTypes.d.ts.map +1 -1
  186. package/lib/internalTypes.js.map +1 -1
  187. package/lib/legacy.d.ts +2 -0
  188. package/lib/packageVersion.d.ts +1 -1
  189. package/lib/packageVersion.js +1 -1
  190. package/lib/packageVersion.js.map +1 -1
  191. package/lib/public.d.ts +2 -0
  192. package/lib/shared-tree/index.d.ts +2 -1
  193. package/lib/shared-tree/index.d.ts.map +1 -1
  194. package/lib/shared-tree/index.js +2 -1
  195. package/lib/shared-tree/index.js.map +1 -1
  196. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  197. package/lib/shared-tree/schematizingTreeView.js +2 -15
  198. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  199. package/lib/shared-tree/sharedTree.d.ts +24 -9
  200. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  201. package/lib/shared-tree/sharedTree.js +19 -8
  202. package/lib/shared-tree/sharedTree.js.map +1 -1
  203. package/lib/shared-tree/treeApi.d.ts +6 -6
  204. package/lib/shared-tree/treeApi.d.ts.map +1 -1
  205. package/lib/shared-tree/treeApi.js.map +1 -1
  206. package/lib/simple-tree/api/conciseTree.d.ts +29 -0
  207. package/lib/simple-tree/api/conciseTree.d.ts.map +1 -0
  208. package/lib/simple-tree/api/conciseTree.js +21 -0
  209. package/lib/simple-tree/api/conciseTree.js.map +1 -0
  210. package/lib/simple-tree/api/customTree.d.ts +44 -0
  211. package/lib/simple-tree/api/customTree.d.ts.map +1 -0
  212. package/lib/simple-tree/api/customTree.js +59 -0
  213. package/lib/simple-tree/api/customTree.js.map +1 -0
  214. package/lib/simple-tree/api/index.d.ts +7 -2
  215. package/lib/simple-tree/api/index.d.ts.map +1 -1
  216. package/lib/simple-tree/api/index.js +1 -0
  217. package/lib/simple-tree/api/index.js.map +1 -1
  218. package/lib/simple-tree/api/schemaCreationUtilities.d.ts +41 -26
  219. package/lib/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
  220. package/lib/simple-tree/api/schemaCreationUtilities.js +43 -15
  221. package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  222. package/lib/simple-tree/api/schemaFactory.d.ts +1 -2
  223. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  224. package/lib/simple-tree/api/schemaFactory.js +1 -1
  225. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  226. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +1 -2
  227. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  228. package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  229. package/lib/simple-tree/api/storedSchema.d.ts +78 -0
  230. package/lib/simple-tree/api/storedSchema.d.ts.map +1 -0
  231. package/lib/simple-tree/api/storedSchema.js +101 -0
  232. package/lib/simple-tree/api/storedSchema.js.map +1 -0
  233. package/lib/simple-tree/api/testRecursiveDomain.d.ts +10 -10
  234. package/lib/simple-tree/api/tree.d.ts +12 -3
  235. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  236. package/lib/simple-tree/api/tree.js.map +1 -1
  237. package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  238. package/lib/simple-tree/api/treeNodeApi.js +3 -3
  239. package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
  240. package/lib/simple-tree/{typesUnsafe.d.ts → api/typesUnsafe.d.ts} +58 -10
  241. package/lib/simple-tree/api/typesUnsafe.d.ts.map +1 -0
  242. package/lib/simple-tree/api/typesUnsafe.js.map +1 -0
  243. package/lib/simple-tree/api/verboseTree.d.ts +6 -20
  244. package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
  245. package/lib/simple-tree/api/verboseTree.js +11 -49
  246. package/lib/simple-tree/api/verboseTree.js.map +1 -1
  247. package/lib/simple-tree/arrayNode.d.ts +14 -3
  248. package/lib/simple-tree/arrayNode.d.ts.map +1 -1
  249. package/lib/simple-tree/arrayNode.js +1 -2
  250. package/lib/simple-tree/arrayNode.js.map +1 -1
  251. package/lib/simple-tree/core/index.d.ts +1 -1
  252. package/lib/simple-tree/core/index.d.ts.map +1 -1
  253. package/lib/simple-tree/core/index.js +1 -1
  254. package/lib/simple-tree/core/index.js.map +1 -1
  255. package/lib/simple-tree/core/treeNodeKernel.d.ts +9 -0
  256. package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  257. package/lib/simple-tree/core/treeNodeKernel.js +12 -0
  258. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  259. package/lib/simple-tree/core/treeNodeSchema.d.ts +6 -5
  260. package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  261. package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
  262. package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  263. package/lib/simple-tree/core/unhydratedFlexTree.js +3 -1
  264. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  265. package/lib/simple-tree/core/withType.d.ts +3 -1
  266. package/lib/simple-tree/core/withType.d.ts.map +1 -1
  267. package/lib/simple-tree/core/withType.js.map +1 -1
  268. package/lib/simple-tree/flexList.d.ts.map +1 -0
  269. package/lib/simple-tree/flexList.js.map +1 -0
  270. package/lib/simple-tree/index.d.ts +6 -7
  271. package/lib/simple-tree/index.d.ts.map +1 -1
  272. package/lib/simple-tree/index.js +3 -4
  273. package/lib/simple-tree/index.js.map +1 -1
  274. package/lib/simple-tree/mapNode.d.ts.map +1 -1
  275. package/lib/simple-tree/mapNode.js +1 -2
  276. package/lib/simple-tree/mapNode.js.map +1 -1
  277. package/lib/simple-tree/objectNode.d.ts.map +1 -1
  278. package/lib/simple-tree/objectNode.js +1 -2
  279. package/lib/simple-tree/objectNode.js.map +1 -1
  280. package/lib/simple-tree/schemaTypes.d.ts +60 -7
  281. package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
  282. package/lib/simple-tree/schemaTypes.js +6 -1
  283. package/lib/simple-tree/schemaTypes.js.map +1 -1
  284. package/lib/simple-tree/toFlexSchema.d.ts.map +1 -1
  285. package/lib/simple-tree/toFlexSchema.js +1 -3
  286. package/lib/simple-tree/toFlexSchema.js.map +1 -1
  287. package/lib/simple-tree/toMapTree.d.ts +4 -2
  288. package/lib/simple-tree/toMapTree.d.ts.map +1 -1
  289. package/lib/simple-tree/toMapTree.js +3 -3
  290. package/lib/simple-tree/toMapTree.js.map +1 -1
  291. package/lib/simple-tree/treeNodeValid.d.ts.map +1 -1
  292. package/lib/simple-tree/treeNodeValid.js +2 -1
  293. package/lib/simple-tree/treeNodeValid.js.map +1 -1
  294. package/lib/treeFactory.d.ts +1 -0
  295. package/lib/treeFactory.d.ts.map +1 -1
  296. package/lib/treeFactory.js +1 -0
  297. package/lib/treeFactory.js.map +1 -1
  298. package/lib/util/utils.d.ts +10 -8
  299. package/lib/util/utils.d.ts.map +1 -1
  300. package/lib/util/utils.js.map +1 -1
  301. package/package.json +41 -24
  302. package/src/codec/codec.ts +4 -4
  303. package/src/codec/noopValidator.ts +1 -1
  304. package/src/core/tree/anchorSet.ts +63 -13
  305. package/src/external-utilities/typeboxValidator.ts +1 -1
  306. package/src/feature-libraries/flex-tree/lazyField.ts +44 -7
  307. package/src/feature-libraries/index.ts +0 -10
  308. package/src/feature-libraries/treeCompressionUtils.ts +1 -1
  309. package/src/index.ts +26 -6
  310. package/src/internalTypes.ts +4 -1
  311. package/src/packageVersion.ts +1 -1
  312. package/src/shared-tree/index.ts +5 -0
  313. package/src/shared-tree/schematizingTreeView.ts +7 -16
  314. package/src/shared-tree/sharedTree.ts +52 -22
  315. package/src/shared-tree/treeApi.ts +19 -9
  316. package/src/simple-tree/api/conciseTree.ts +58 -0
  317. package/src/simple-tree/api/customTree.ts +119 -0
  318. package/src/simple-tree/api/index.ts +39 -1
  319. package/src/simple-tree/api/schemaCreationUtilities.ts +55 -36
  320. package/src/simple-tree/api/schemaFactory.ts +4 -6
  321. package/src/simple-tree/api/schemaFactoryRecursive.ts +1 -2
  322. package/src/simple-tree/api/storedSchema.ts +126 -0
  323. package/src/simple-tree/api/tree.ts +24 -2
  324. package/src/simple-tree/api/treeNodeApi.ts +3 -8
  325. package/src/simple-tree/{typesUnsafe.ts → api/typesUnsafe.ts} +95 -21
  326. package/src/simple-tree/api/verboseTree.ts +21 -76
  327. package/src/simple-tree/arrayNode.ts +35 -15
  328. package/src/simple-tree/core/index.ts +1 -0
  329. package/src/simple-tree/core/treeNodeKernel.ts +13 -0
  330. package/src/simple-tree/core/treeNodeSchema.ts +7 -5
  331. package/src/simple-tree/core/unhydratedFlexTree.ts +6 -1
  332. package/src/simple-tree/core/withType.ts +10 -1
  333. package/src/simple-tree/index.ts +41 -21
  334. package/src/simple-tree/mapNode.ts +1 -1
  335. package/src/simple-tree/objectNode.ts +1 -1
  336. package/src/simple-tree/schemaTypes.ts +70 -11
  337. package/src/simple-tree/toFlexSchema.ts +1 -3
  338. package/src/simple-tree/toMapTree.ts +7 -4
  339. package/src/simple-tree/treeNodeValid.ts +2 -1
  340. package/src/treeFactory.ts +1 -0
  341. package/src/util/utils.ts +10 -8
  342. package/dist/feature-libraries/flex-tree/unboxed.d.ts +0 -12
  343. package/dist/feature-libraries/flex-tree/unboxed.d.ts.map +0 -1
  344. package/dist/feature-libraries/flex-tree/unboxed.js +0 -20
  345. package/dist/feature-libraries/flex-tree/unboxed.js.map +0 -1
  346. package/dist/feature-libraries/typed-schema/flexList.d.ts.map +0 -1
  347. package/dist/feature-libraries/typed-schema/flexList.js.map +0 -1
  348. package/dist/feature-libraries/typed-schema/index.d.ts +0 -7
  349. package/dist/feature-libraries/typed-schema/index.d.ts.map +0 -1
  350. package/dist/feature-libraries/typed-schema/index.js +0 -12
  351. package/dist/feature-libraries/typed-schema/index.js.map +0 -1
  352. package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts +0 -14
  353. package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +0 -1
  354. package/dist/feature-libraries/typed-schema/typedTreeSchema.js +0 -7
  355. package/dist/feature-libraries/typed-schema/typedTreeSchema.js.map +0 -1
  356. package/dist/simple-tree/proxyBinding.d.ts +0 -15
  357. package/dist/simple-tree/proxyBinding.d.ts.map +0 -1
  358. package/dist/simple-tree/proxyBinding.js +0 -22
  359. package/dist/simple-tree/proxyBinding.js.map +0 -1
  360. package/dist/simple-tree/typesUnsafe.d.ts.map +0 -1
  361. package/dist/simple-tree/typesUnsafe.js.map +0 -1
  362. package/lib/feature-libraries/flex-tree/unboxed.d.ts +0 -12
  363. package/lib/feature-libraries/flex-tree/unboxed.d.ts.map +0 -1
  364. package/lib/feature-libraries/flex-tree/unboxed.js +0 -16
  365. package/lib/feature-libraries/flex-tree/unboxed.js.map +0 -1
  366. package/lib/feature-libraries/typed-schema/flexList.d.ts.map +0 -1
  367. package/lib/feature-libraries/typed-schema/flexList.js.map +0 -1
  368. package/lib/feature-libraries/typed-schema/index.d.ts +0 -7
  369. package/lib/feature-libraries/typed-schema/index.d.ts.map +0 -1
  370. package/lib/feature-libraries/typed-schema/index.js +0 -6
  371. package/lib/feature-libraries/typed-schema/index.js.map +0 -1
  372. package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts +0 -14
  373. package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +0 -1
  374. package/lib/feature-libraries/typed-schema/typedTreeSchema.js +0 -6
  375. package/lib/feature-libraries/typed-schema/typedTreeSchema.js.map +0 -1
  376. package/lib/simple-tree/proxyBinding.d.ts +0 -15
  377. package/lib/simple-tree/proxyBinding.d.ts.map +0 -1
  378. package/lib/simple-tree/proxyBinding.js +0 -18
  379. package/lib/simple-tree/proxyBinding.js.map +0 -1
  380. package/lib/simple-tree/typesUnsafe.d.ts.map +0 -1
  381. package/lib/simple-tree/typesUnsafe.js.map +0 -1
  382. package/src/feature-libraries/flex-tree/unboxed.ts +0 -24
  383. package/src/feature-libraries/typed-schema/README.md +0 -6
  384. package/src/feature-libraries/typed-schema/index.ts +0 -16
  385. package/src/feature-libraries/typed-schema/typedTreeSchema.ts +0 -14
  386. package/src/simple-tree/proxyBinding.ts +0 -20
  387. /package/dist/simple-tree/{typesUnsafe.js → api/typesUnsafe.js} +0 -0
  388. /package/dist/{feature-libraries/typed-schema → simple-tree}/flexList.d.ts +0 -0
  389. /package/dist/{feature-libraries/typed-schema → simple-tree}/flexList.js +0 -0
  390. /package/lib/simple-tree/{typesUnsafe.js → api/typesUnsafe.js} +0 -0
  391. /package/lib/{feature-libraries/typed-schema → simple-tree}/flexList.d.ts +0 -0
  392. /package/lib/{feature-libraries/typed-schema → simple-tree}/flexList.js +0 -0
  393. /package/src/simple-tree/{ProxyBinding.md → core/TreeNodeBinding.md} +0 -0
  394. /package/src/{feature-libraries/typed-schema → simple-tree}/flexList.ts +0 -0
@@ -14,11 +14,11 @@ import {
14
14
  isFlexTreeNode,
15
15
  } from "../feature-libraries/index.js";
16
16
  import { prepareContentForHydration } from "./proxies.js";
17
- import { getOrCreateInnerNode } from "./proxyBinding.js";
18
17
  import {
19
18
  normalizeAllowedTypes,
20
19
  type ImplicitAllowedTypes,
21
20
  type InsertableTreeNodeFromImplicitAllowedTypes,
21
+ type TreeLeafValue,
22
22
  type TreeNodeFromImplicitAllowedTypes,
23
23
  } from "./schemaTypes.js";
24
24
  import {
@@ -34,6 +34,8 @@ import {
34
34
  getOrCreateNodeFromInnerNode,
35
35
  type TreeNodeSchemaBoth,
36
36
  getSimpleNodeSchemaFromInnerNode,
37
+ getOrCreateInnerNode,
38
+ type TreeNodeSchemaClass,
37
39
  } from "./core/index.js";
38
40
  import { type InsertableContent, mapTreeFromNodeData } from "./toMapTree.js";
39
41
  import { fail } from "../util/index.js";
@@ -45,6 +47,19 @@ import {
45
47
  import { TreeNodeValid, type MostDerivedData } from "./treeNodeValid.js";
46
48
  import { getUnhydratedContext } from "./createContext.js";
47
49
 
50
+ /**
51
+ * A covariant base type for {@link (TreeArrayNode:interface)}.
52
+ *
53
+ * This provides the readonly subset of TreeArrayNode functionality, and is used as the source interface for moves since that needs to be covariant.
54
+ * @privateRemarks
55
+ * Ideally this would just include `TreeNode, WithType<string, NodeKind.Array>` in the extends list but https://github.com/microsoft/TypeScript/issues/16936 prevents that from compiling.
56
+ * As a workaround around for this TypeScript limitation, the conflicting type intersection is wrapped in `Awaited` (which has no effect on the type in this case) which allows it to compile.
57
+ * @system @sealed @public
58
+ */
59
+ export interface ReadonlyArrayNode<out T = TreeNode | TreeLeafValue>
60
+ extends ReadonlyArray<T>,
61
+ Awaited<TreeNode & WithType<string, NodeKind.Array>> {}
62
+
48
63
  /**
49
64
  * A generic array type, used to defined types like {@link (TreeArrayNode:interface)}.
50
65
  *
@@ -53,9 +68,8 @@ import { getUnhydratedContext } from "./createContext.js";
53
68
  *
54
69
  * @system @sealed @public
55
70
  */
56
- export interface TreeArrayNodeBase<out T, in TNew, in TMoveFrom>
57
- extends ReadonlyArray<T>,
58
- TreeNode {
71
+ export interface TreeArrayNodeBase<out T, in TNew, in TMoveFrom = ReadonlyArrayNode>
72
+ extends ReadonlyArrayNode<T> {
59
73
  /**
60
74
  * Inserts new item(s) at a specified location.
61
75
  * @param index - The index at which to insert `value`.
@@ -366,8 +380,7 @@ export interface TreeArrayNode<
366
380
  TAllowedTypes extends ImplicitAllowedTypes = ImplicitAllowedTypes,
367
381
  > extends TreeArrayNodeBase<
368
382
  TreeNodeFromImplicitAllowedTypes<TAllowedTypes>,
369
- InsertableTreeNodeFromImplicitAllowedTypes<TAllowedTypes>,
370
- TreeArrayNode
383
+ InsertableTreeNodeFromImplicitAllowedTypes<TAllowedTypes>
371
384
  > {}
372
385
 
373
386
  /**
@@ -417,9 +430,7 @@ export class IterableTreeArrayContent<T> implements Iterable<T> {
417
430
  /**
418
431
  * Given a array node proxy, returns its underlying LazySequence field.
419
432
  */
420
- function getSequenceField<TSimpleType extends ImplicitAllowedTypes>(
421
- arrayNode: TreeArrayNode<TSimpleType>,
422
- ): FlexTreeSequenceField {
433
+ function getSequenceField(arrayNode: ReadonlyArrayNode): FlexTreeSequenceField {
423
434
  return getOrCreateInnerNode(arrayNode).getBoxed(EmptyKey) as FlexTreeSequenceField;
424
435
  }
425
436
 
@@ -799,6 +810,11 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
799
810
  protected abstract get simpleSchema(): T;
800
811
  protected abstract get allowedTypes(): ReadonlySet<TreeNodeSchema>;
801
812
 
813
+ public abstract override get [typeSchemaSymbol](): TreeNodeSchemaClass<
814
+ string,
815
+ NodeKind.Array
816
+ >;
817
+
802
818
  public constructor(
803
819
  input: Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>> | InternalTreeNode,
804
820
  ) {
@@ -901,13 +917,13 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
901
917
  }
902
918
  field.editor.remove(removeStart, removeEnd - removeStart);
903
919
  }
904
- public moveToStart(sourceIndex: number, source?: TreeArrayNode): void {
920
+ public moveToStart(sourceIndex: number, source?: ReadonlyArrayNode): void {
905
921
  const sourceArray = source ?? this;
906
922
  const sourceField = getSequenceField(sourceArray);
907
923
  validateIndex(sourceIndex, sourceField, "moveToStart");
908
924
  this.moveRangeToIndex(0, sourceIndex, sourceIndex + 1, source);
909
925
  }
910
- public moveToEnd(sourceIndex: number, source?: TreeArrayNode): void {
926
+ public moveToEnd(sourceIndex: number, source?: ReadonlyArrayNode): void {
911
927
  const sourceArray = source ?? this;
912
928
  const sourceField = getSequenceField(sourceArray);
913
929
  validateIndex(sourceIndex, sourceField, "moveToEnd");
@@ -916,7 +932,7 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
916
932
  public moveToIndex(
917
933
  destinationGap: number,
918
934
  sourceIndex: number,
919
- source?: TreeArrayNode,
935
+ source?: ReadonlyArrayNode,
920
936
  ): void {
921
937
  const sourceArray = source ?? this;
922
938
  const sourceField = getSequenceField(sourceArray);
@@ -928,7 +944,7 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
928
944
  public moveRangeToStart(
929
945
  sourceStart: number,
930
946
  sourceEnd: number,
931
- source?: TreeArrayNode,
947
+ source?: ReadonlyArrayNode,
932
948
  ): void {
933
949
  validateIndexRange(
934
950
  sourceStart,
@@ -938,7 +954,11 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
938
954
  );
939
955
  this.moveRangeToIndex(0, sourceStart, sourceEnd, source);
940
956
  }
941
- public moveRangeToEnd(sourceStart: number, sourceEnd: number, source?: TreeArrayNode): void {
957
+ public moveRangeToEnd(
958
+ sourceStart: number,
959
+ sourceEnd: number,
960
+ source?: ReadonlyArrayNode,
961
+ ): void {
942
962
  validateIndexRange(
943
963
  sourceStart,
944
964
  sourceEnd,
@@ -951,7 +971,7 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
951
971
  destinationGap: number,
952
972
  sourceStart: number,
953
973
  sourceEnd: number,
954
- source?: TreeArrayNode,
974
+ source?: ReadonlyArrayNode,
955
975
  ): void {
956
976
  const destinationField = getSequenceField(this);
957
977
  const destinationSchema = this.allowedTypes;
@@ -11,6 +11,7 @@ export {
11
11
  type InnerNode,
12
12
  tryDisposeTreeNode,
13
13
  tryGetTreeNodeFromMapNode,
14
+ getOrCreateInnerNode,
14
15
  } from "./treeNodeKernel.js";
15
16
  export { type WithType, typeNameSymbol, typeSchemaSymbol } from "./withType.js";
16
17
  export {
@@ -430,3 +430,16 @@ export function getTreeNodeSchemaFromHydratedFlexNode(flexNode: FlexTreeNode): T
430
430
 
431
431
  return context.schema.get(flexNode.schema) ?? fail("Missing schema");
432
432
  }
433
+
434
+ /**
435
+ * Retrieves the flex node associated with the given target via {@link setInnerNode}.
436
+ * @remarks
437
+ * For {@link Unhydrated} nodes, this returns the MapTreeNode.
438
+ *
439
+ * For hydrated nodes it returns a FlexTreeNode backed by the forest.
440
+ * Note that for "marinated" nodes, this FlexTreeNode exists and returns it: it does not return the MapTreeNode which is the current InnerNode.
441
+ */
442
+ export function getOrCreateInnerNode(treeNode: TreeNode, allowFreed = false): InnerNode {
443
+ const kernel = getKernel(treeNode);
444
+ return kernel.getOrCreateInnerNode(allowFreed);
445
+ }
@@ -3,7 +3,8 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import type { InternalTreeNode, Unhydrated } from "./types.js";
6
+ import type { TreeLeafValue } from "../schemaTypes.js";
7
+ import type { InternalTreeNode, TreeNode, Unhydrated } from "./types.js";
7
8
 
8
9
  /**
9
10
  * Schema for a tree node.
@@ -19,7 +20,7 @@ import type { InternalTreeNode, Unhydrated } from "./types.js";
19
20
  export type TreeNodeSchema<
20
21
  Name extends string = string,
21
22
  Kind extends NodeKind = NodeKind,
22
- TNode = unknown,
23
+ TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue,
23
24
  TBuild = never,
24
25
  ImplicitlyConstructable extends boolean = boolean,
25
26
  Info = unknown,
@@ -38,7 +39,7 @@ export type TreeNodeSchema<
38
39
  export interface TreeNodeSchemaNonClass<
39
40
  out Name extends string = string,
40
41
  out Kind extends NodeKind = NodeKind,
41
- out TNode = unknown,
42
+ out TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue,
42
43
  in TInsertable = never,
43
44
  out ImplicitlyConstructable extends boolean = boolean,
44
45
  out Info = unknown,
@@ -94,7 +95,8 @@ export interface TreeNodeSchemaNonClass<
94
95
  export interface TreeNodeSchemaClass<
95
96
  out Name extends string = string,
96
97
  out Kind extends NodeKind = NodeKind,
97
- out TNode = unknown,
98
+ // TODO: maybe this can be more specific (exclude leaves)
99
+ out TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue,
98
100
  in TInsertable = never,
99
101
  out ImplicitlyConstructable extends boolean = boolean,
100
102
  out Info = unknown,
@@ -115,7 +117,7 @@ export interface TreeNodeSchemaClass<
115
117
  export type TreeNodeSchemaBoth<
116
118
  Name extends string = string,
117
119
  Kind extends NodeKind = NodeKind,
118
- TNode = unknown,
120
+ TNode extends TreeNode = TreeNode,
119
121
  TInsertable = never,
120
122
  ImplicitlyConstructable extends boolean = boolean,
121
123
  Info = unknown,
@@ -442,7 +442,12 @@ class EagerMapTreeRequiredField
442
442
  implements FlexTreeRequiredField
443
443
  {
444
444
  public override get content(): FlexTreeUnknownUnboxed {
445
- return super.content ?? fail("Expected EagerMapTree required field to have a value");
445
+ // This cannot use ?? since null is a legal value here.
446
+ assert(
447
+ super.content !== undefined,
448
+ "Expected EagerMapTree required field to have a value",
449
+ );
450
+ return super.content;
446
451
  }
447
452
  }
448
453
 
@@ -3,7 +3,9 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
+ import type { TreeLeafValue } from "../schemaTypes.js";
6
7
  import type { NodeKind, TreeNodeSchemaClass } from "./treeNodeSchema.js";
8
+ import type { TreeNode } from "./types.js";
7
9
 
8
10
  /**
9
11
  * The type of a {@link TreeNode}.
@@ -87,5 +89,12 @@ export interface WithType<
87
89
  /**
88
90
  * Type symbol, marking a type in a way to increase type safety via strong type checking.
89
91
  */
90
- get [typeSchemaSymbol](): TreeNodeSchemaClass<TName, TKind, unknown, never, boolean, TInfo>;
92
+ get [typeSchemaSymbol](): TreeNodeSchemaClass<
93
+ TName,
94
+ TKind,
95
+ TreeNode | TreeLeafValue,
96
+ never,
97
+ boolean,
98
+ TInfo
99
+ >;
91
100
  }
@@ -22,6 +22,7 @@ export {
22
22
  tryDisposeTreeNode,
23
23
  HydratedContext,
24
24
  SimpleContextSlot,
25
+ getOrCreateInnerNode,
25
26
  } from "./core/index.js";
26
27
  export {
27
28
  type ITree,
@@ -40,7 +41,6 @@ export {
40
41
  enumFromStrings,
41
42
  singletonSchema,
42
43
  typedObjectValues,
43
- type EmptyObject,
44
44
  test_RecursiveObject,
45
45
  test_RecursiveObject_base,
46
46
  test_RecursiveObjectPojoMode,
@@ -67,7 +67,36 @@ export {
67
67
  type JsonLeafSchemaType,
68
68
  getJsonSchema,
69
69
  getSimpleSchema,
70
+ type VerboseTreeNode,
71
+ type EncodeOptions,
72
+ type ParseOptions,
73
+ type VerboseTree,
74
+ extractPersistedSchema,
75
+ comparePersistedSchema,
76
+ type ConciseTree,
77
+ comparePersistedSchemaInternal,
70
78
  ViewSchema,
79
+ type Unenforced,
80
+ type FieldHasDefaultUnsafe,
81
+ type ObjectFromSchemaRecordUnsafe,
82
+ type TreeObjectNodeUnsafe,
83
+ type TreeFieldFromImplicitFieldUnsafe,
84
+ type TreeNodeFromImplicitAllowedTypesUnsafe,
85
+ type FieldSchemaUnsafe,
86
+ type InsertableTreeNodeFromImplicitAllowedTypesUnsafe,
87
+ type TreeArrayNodeUnsafe,
88
+ type TreeMapNodeUnsafe,
89
+ type InsertableObjectFromSchemaRecordUnsafe,
90
+ type InsertableTreeFieldFromImplicitFieldUnsafe,
91
+ type InsertableTypedNodeUnsafe,
92
+ type NodeBuilderDataUnsafe,
93
+ type NodeFromSchemaUnsafe,
94
+ type ReadonlyMapInlined,
95
+ type TreeNodeSchemaClassUnsafe,
96
+ type TreeNodeSchemaUnsafe,
97
+ type AllowedTypesUnsafe,
98
+ type TreeNodeSchemaNonClassUnsafe,
99
+ type TreeViewAlpha,
71
100
  } from "./api/index.js";
72
101
  export {
73
102
  type NodeFromSchema,
@@ -89,34 +118,19 @@ export {
89
118
  normalizeFieldSchema,
90
119
  type ApplyKind,
91
120
  type FieldSchemaMetadata,
121
+ type InsertableField,
122
+ type Insertable,
123
+ type UnsafeUnknownSchema,
92
124
  } from "./schemaTypes.js";
93
- export { getOrCreateInnerNode } from "./proxyBinding.js";
94
- export type {
95
- FieldHasDefaultUnsafe,
96
- ObjectFromSchemaRecordUnsafe,
97
- TreeObjectNodeUnsafe,
98
- TreeFieldFromImplicitFieldUnsafe,
99
- TreeNodeFromImplicitAllowedTypesUnsafe,
100
- FieldSchemaUnsafe,
101
- InsertableTreeNodeFromImplicitAllowedTypesUnsafe,
102
- TreeArrayNodeUnsafe,
103
- TreeMapNodeUnsafe,
104
- InsertableObjectFromSchemaRecordUnsafe,
105
- InsertableTreeFieldFromImplicitFieldUnsafe,
106
- InsertableTypedNodeUnsafe,
107
- NodeBuilderDataUnsafe,
108
- NodeFromSchemaUnsafe,
109
- ReadonlyMapInlined,
110
- } from "./typesUnsafe.js";
111
125
  export {
112
126
  getTreeNodeForField,
113
127
  prepareContentForHydration,
114
128
  } from "./proxies.js";
115
-
116
129
  export {
117
130
  TreeArrayNode,
118
131
  IterableTreeArrayContent,
119
132
  type TreeArrayNodeBase,
133
+ type ReadonlyArrayNode,
120
134
  } from "./arrayNode.js";
121
135
  export {
122
136
  type FieldHasDefault,
@@ -126,7 +140,12 @@ export {
126
140
  setField,
127
141
  } from "./objectNode.js";
128
142
  export type { TreeMapNode, MapNodeInsertableData } from "./mapNode.js";
129
- export { mapTreeFromNodeData, type InsertableContent } from "./toMapTree.js";
143
+ export {
144
+ mapTreeFromNodeData,
145
+ type InsertableContent,
146
+ type FactoryContent,
147
+ type FactoryContentObject,
148
+ } from "./toMapTree.js";
130
149
  export { toStoredSchema, getStoredSchema } from "./toFlexSchema.js";
131
150
  export {
132
151
  numberSchema,
@@ -135,3 +154,4 @@ export {
135
154
  handleSchema,
136
155
  nullSchema,
137
156
  } from "./leafNodeSchema.js";
157
+ export type { LazyItem, FlexList, FlexListToUnion, ExtractItemType } from "./flexList.js";
@@ -11,7 +11,6 @@ import {
11
11
  getSchemaAndPolicy,
12
12
  } from "../feature-libraries/index.js";
13
13
  import { getTreeNodeForField, prepareContentForHydration } from "./proxies.js";
14
- import { getOrCreateInnerNode } from "./proxyBinding.js";
15
14
  import {
16
15
  createFieldSchema,
17
16
  FieldKind,
@@ -33,6 +32,7 @@ import {
33
32
  typeSchemaSymbol,
34
33
  type Context,
35
34
  UnhydratedFlexTreeNode,
35
+ getOrCreateInnerNode,
36
36
  } from "./core/index.js";
37
37
  import {
38
38
  mapTreeFromNodeData,
@@ -16,7 +16,6 @@ import {
16
16
  getSchemaAndPolicy,
17
17
  } from "../feature-libraries/index.js";
18
18
  import { getTreeNodeForField, prepareContentForHydration } from "./proxies.js";
19
- import { getOrCreateInnerNode } from "./proxyBinding.js";
20
19
  import {
21
20
  type ImplicitFieldSchema,
22
21
  getStoredKey,
@@ -39,6 +38,7 @@ import {
39
38
  type TreeNode,
40
39
  type Context,
41
40
  UnhydratedFlexTreeNode,
41
+ getOrCreateInnerNode,
42
42
  } from "./core/index.js";
43
43
  import { mapTreeFromNodeData, type InsertableContent } from "./toMapTree.js";
44
44
  import { type RestrictiveStringRecord, fail, type FlattenKeys } from "../util/index.js";
@@ -7,21 +7,18 @@ import type { ErasedType, IFluidHandle } from "@fluidframework/core-interfaces";
7
7
  import { Lazy } from "@fluidframework/core-utils/internal";
8
8
  import { UsageError } from "@fluidframework/telemetry-utils/internal";
9
9
 
10
- import {
11
- type LazyItem,
12
- type NodeKeyManager,
13
- isLazy,
14
- type FlexListToUnion,
15
- } from "../feature-libraries/index.js";
10
+ import type { NodeKeyManager } from "../feature-libraries/index.js";
16
11
  import { type MakeNominal, brand, isReadonlyArray } from "../util/index.js";
17
12
  import type {
18
13
  Unhydrated,
19
14
  NodeKind,
20
15
  TreeNodeSchema,
21
16
  TreeNodeSchemaClass,
17
+ TreeNode,
22
18
  } from "./core/index.js";
23
19
  import type { FieldKey } from "../core/index.js";
24
20
  import type { InsertableContent } from "./toMapTree.js";
21
+ import { isLazy, type FlexListToUnion, type LazyItem } from "./flexList.js";
25
22
 
26
23
  /**
27
24
  * Returns true if the given schema is a {@link TreeNodeSchemaClass}, or otherwise false if it is a {@link TreeNodeSchemaNonClass}.
@@ -29,7 +26,7 @@ import type { InsertableContent } from "./toMapTree.js";
29
26
  export function isTreeNodeSchemaClass<
30
27
  Name extends string,
31
28
  Kind extends NodeKind,
32
- TNode,
29
+ TNode extends TreeNode | TreeLeafValue,
33
30
  TBuild,
34
31
  ImplicitlyConstructable extends boolean,
35
32
  Info,
@@ -385,7 +382,17 @@ export type ImplicitAllowedTypes = AllowedTypes | TreeNodeSchema;
385
382
  export type ImplicitFieldSchema = FieldSchema | ImplicitAllowedTypes;
386
383
 
387
384
  /**
388
- * Converts ImplicitFieldSchema to the corresponding tree node's field type.
385
+ * Converts an `ImplicitFieldSchema` to a property type suitable for reading a field with this that schema.
386
+ *
387
+ * @typeparam TSchema - When non-exact schema are provided this errors on the side of returning too general of a type (a conservative union of all possibilities).
388
+ * This is ideal for "output APIs" - i.e. it converts the schema type to the runtime type that a user will _read_ from the tree.
389
+ * Examples of such "non-exact" schema include `ImplicitFieldSchema`, `ImplicitAllowedTypes`, and TypeScript unions of schema types.
390
+ * @privateRemarks
391
+ * TODO:
392
+ * There are two known problematic usages of this type (which produce invalid/unsound results when given non-specific schema):
393
+ * 1. setters for fields (on object nodes the Tree.view.root).
394
+ * 2. Indirectly in InsertableTreeFieldFromImplicitField via InsertableTypedNode including NodeFromSchema.
395
+ * These cases should be mitigated by introducing a way to detect inexact schema and special casing them in these two places.
389
396
  * @public
390
397
  */
391
398
  export type TreeFieldFromImplicitField<TSchema extends ImplicitFieldSchema = FieldSchema> =
@@ -393,7 +400,7 @@ export type TreeFieldFromImplicitField<TSchema extends ImplicitFieldSchema = Fie
393
400
  ? ApplyKind<TreeNodeFromImplicitAllowedTypes<Types>, Kind, false>
394
401
  : TSchema extends ImplicitAllowedTypes
395
402
  ? TreeNodeFromImplicitAllowedTypes<TSchema>
396
- : unknown;
403
+ : TreeNode | TreeLeafValue | undefined;
397
404
 
398
405
  /**
399
406
  * Type of content that can be inserted into the tree for a field of the given schema.
@@ -405,7 +412,55 @@ export type InsertableTreeFieldFromImplicitField<
405
412
  ? ApplyKind<InsertableTreeNodeFromImplicitAllowedTypes<Types>, Kind, true>
406
413
  : TSchema extends ImplicitAllowedTypes
407
414
  ? InsertableTreeNodeFromImplicitAllowedTypes<TSchema>
408
- : unknown;
415
+ : never;
416
+
417
+ /**
418
+ * {@inheritdoc (UnsafeUnknownSchema:type)}
419
+ * @alpha
420
+ */
421
+ export const UnsafeUnknownSchema: unique symbol = Symbol("UnsafeUnknownSchema");
422
+
423
+ /**
424
+ * A special type which can be provided to some APIs as the schema type parameter when schema cannot easily be provided at compile time and an unsafe (instead of disabled) editing API is desired.
425
+ * @remarks
426
+ * When used this means the TypeScript typing should error on the side of completeness (allow all inputs that could be valid).
427
+ * This introduces the risk that out of schema data could be allowed at compile time, and only error at runtime.
428
+ *
429
+ * @privateRemarks
430
+ * This only applies to APIs which input data which is expected to be in schema, since APIs outputting have easy mechanisms to do so in a type safe way even when the schema is unknown.
431
+ * In most cases that amounts to returning `TreeNode | TreeLeafValue`.
432
+ *
433
+ * This can be contrasted with the default behavior of TypeScript, which is to require the intersection of the possible types for input APIs,
434
+ * which for unknown schema defining input trees results in the `never` type.
435
+ *
436
+ * Any APIs which use this must produce UsageErrors when out of schema data is encountered, and never produce unrecoverable errors,
437
+ * or silently accept invalid data.
438
+ * This is currently only type exported from the package: the symbol is just used as a way to get a named type.
439
+ * @alpha
440
+ */
441
+ export type UnsafeUnknownSchema = typeof UnsafeUnknownSchema;
442
+
443
+ /**
444
+ * Content which could be inserted into a tree.
445
+ * @remarks
446
+ * Extended version of {@link InsertableTreeNodeFromImplicitAllowedTypes} that also allows {@link (UnsafeUnknownSchema:type)}.
447
+ * @alpha
448
+ */
449
+ export type Insertable<TSchema extends ImplicitAllowedTypes | UnsafeUnknownSchema> =
450
+ TSchema extends ImplicitAllowedTypes
451
+ ? InsertableTreeNodeFromImplicitAllowedTypes<TSchema>
452
+ : InsertableContent;
453
+
454
+ /**
455
+ * Content which could be inserted into a field within a tree.
456
+ * @remarks
457
+ * Extended version of {@link InsertableTreeFieldFromImplicitField} that also allows {@link (UnsafeUnknownSchema:type)}.
458
+ * @alpha
459
+ */
460
+ export type InsertableField<TSchema extends ImplicitFieldSchema | UnsafeUnknownSchema> =
461
+ TSchema extends ImplicitFieldSchema
462
+ ? InsertableTreeFieldFromImplicitField<TSchema>
463
+ : InsertableContent | undefined;
409
464
 
410
465
  /**
411
466
  * Suitable for output.
@@ -457,6 +512,10 @@ export type NodeFromSchema<T extends TreeNodeSchema> = T extends TreeNodeSchema<
457
512
  /**
458
513
  * Data which can be used as a node to be inserted.
459
514
  * Either an unhydrated node, or content to build a new node.
515
+ * @privateRemarks
516
+ * TODO:
517
+ * This should behave contravariantly, but it uses NodeFromSchema which behaves covariantly.
518
+ * This results in unsoundness where when the schema is less specific, more types are allowed instead of less.
460
519
  * @public
461
520
  */
462
521
  export type InsertableTypedNode<T extends TreeNodeSchema> =
@@ -475,7 +534,7 @@ export type InsertableTypedNode<T extends TreeNodeSchema> =
475
534
  export type NodeBuilderData<T extends TreeNodeSchema> = T extends TreeNodeSchema<
476
535
  string,
477
536
  NodeKind,
478
- unknown,
537
+ TreeNode | TreeLeafValue,
479
538
  infer TBuild
480
539
  >
481
540
  ? TBuild
@@ -20,9 +20,6 @@ import {
20
20
  type TreeTypeSet,
21
21
  } from "../core/index.js";
22
22
  import { FieldKinds, type FlexFieldKind } from "../feature-libraries/index.js";
23
- // TODO: once flex schema is gone, this code can move into simple-tree
24
- // eslint-disable-next-line import/no-internal-modules
25
- import { normalizeFlexListEager } from "../feature-libraries/typed-schema/index.js";
26
23
  import { brand, fail, isReadonlyArray } from "../util/index.js";
27
24
  import { NodeKind, type TreeNodeSchema } from "./core/index.js";
28
25
  import {
@@ -34,6 +31,7 @@ import {
34
31
  import { walkFieldSchema } from "./walkFieldSchema.js";
35
32
  import { LeafNodeSchema } from "./leafNodeSchema.js";
36
33
  import { isObjectNodeSchema } from "./objectNodeTypes.js";
34
+ import { normalizeFlexListEager } from "./flexList.js";
37
35
 
38
36
  /**
39
37
  * Converts a {@link ImplicitFieldSchema} into a {@link TreeStoredSchema}.
@@ -262,14 +262,14 @@ function mapValueWithFallbacks(
262
262
  // Our serialized data format does not support -0.
263
263
  // Map such input to +0.
264
264
  return 0;
265
- } else if (Number.isNaN(value) || !Number.isFinite(value)) {
265
+ } else if (!Number.isFinite(value)) {
266
266
  // Our serialized data format does not support NaN nor +/-∞.
267
267
  // If the schema supports `null`, fall back to that. Otherwise, throw.
268
268
  // This is intended to match JSON's behavior for such values.
269
269
  if (allowedTypes.has(nullSchema)) {
270
270
  return null;
271
271
  } else {
272
- throw new TypeError(`Received unsupported numeric value: ${value}.`);
272
+ throw new UsageError(`Received unsupported numeric value: ${value}.`);
273
273
  }
274
274
  } else {
275
275
  return value;
@@ -287,7 +287,7 @@ function mapValueWithFallbacks(
287
287
  }
288
288
  }
289
289
  default:
290
- throw new TypeError(`Received unsupported leaf value: ${value}.`);
290
+ throw new UsageError(`Received unsupported leaf value: ${value}.`);
291
291
  }
292
292
  }
293
293
 
@@ -726,6 +726,7 @@ function tryGetInnerNode(target: unknown): InnerNode | undefined {
726
726
  * Content which can be used to build a node.
727
727
  * @remarks
728
728
  * Can contain unhydrated nodes, but can not be an unhydrated node at the root.
729
+ * @system @alpha
729
730
  */
730
731
  export type FactoryContent =
731
732
  | IFluidHandle
@@ -744,12 +745,14 @@ export type FactoryContent =
744
745
  * Can contain unhydrated nodes, but can not be an unhydrated node at the root.
745
746
  *
746
747
  * Supports object and map nodes.
748
+ * @system @alpha
747
749
  */
748
- type FactoryContentObject = {
750
+ export type FactoryContentObject = {
749
751
  readonly [P in string]?: InsertableContent;
750
752
  };
751
753
 
752
754
  /**
753
755
  * Content which can be inserted into a tree.
756
+ * @system @alpha
754
757
  */
755
758
  export type InsertableContent = Unhydrated<TreeNode> | FactoryContent;
@@ -18,11 +18,12 @@ import {
18
18
  type Context,
19
19
  type UnhydratedFlexTreeNode,
20
20
  } from "./core/index.js";
21
- import { type FlexTreeNode, isFlexTreeNode, markEager } from "../feature-libraries/index.js";
21
+ import { type FlexTreeNode, isFlexTreeNode } from "../feature-libraries/index.js";
22
22
  import { UsageError } from "@fluidframework/telemetry-utils/internal";
23
23
  import { fail } from "../util/index.js";
24
24
 
25
25
  import { getSimpleNodeSchemaFromInnerNode } from "./core/index.js";
26
+ import { markEager } from "./flexList.js";
26
27
 
27
28
  /**
28
29
  * Class which all {@link TreeNode}s must extend.
@@ -81,6 +81,7 @@ export const SharedTree = configuredSharedTree({});
81
81
  * });
82
82
  * ```
83
83
  * @privateRemarks
84
+ * This should be legacy, but has to be internal due to limitations of API tagging preventing it from being both alpha and alpha+legacy.
84
85
  * TODO:
85
86
  * Expose Ajv validator for better error message quality somehow.
86
87
  * Maybe as part of a test utils or dev-tool package?
package/src/util/utils.ts CHANGED
@@ -219,9 +219,10 @@ export function count(iterable: Iterable<unknown>): number {
219
219
 
220
220
  /**
221
221
  * Use for Json compatible data.
222
- *
223
- * Note that this does not robustly forbid non json comparable data via type checking,
222
+ * @remarks
223
+ * This does not robustly forbid non json comparable data via type checking,
224
224
  * but instead mostly restricts access to it.
225
+ * @alpha
225
226
  */
226
227
  export type JsonCompatible =
227
228
  | string
@@ -234,16 +235,17 @@ export type JsonCompatible =
234
235
 
235
236
  /**
236
237
  * Use for Json object compatible data.
237
- *
238
- * Note that this does not robustly forbid non json comparable data via type checking,
238
+ * @remarks
239
+ * This does not robustly forbid non json comparable data via type checking,
239
240
  * but instead mostly restricts access to it.
241
+ * @alpha
240
242
  */
241
243
  export type JsonCompatibleObject = { [P in string]?: JsonCompatible };
242
244
 
243
245
  /**
244
246
  * Use for readonly view of Json compatible data.
245
- *
246
- * Note that this does not robustly forbid non json comparable data via type checking,
247
+ * @remarks
248
+ * This does not robustly forbid non json comparable data via type checking,
247
249
  * but instead mostly restricts access to it.
248
250
  */
249
251
  export type JsonCompatibleReadOnly =
@@ -257,8 +259,8 @@ export type JsonCompatibleReadOnly =
257
259
 
258
260
  /**
259
261
  * Use for readonly view of Json compatible data.
260
- *
261
- * Note that this does not robustly forbid non json comparable data via type checking,
262
+ * @remarks
263
+ * This does not robustly forbid non json comparable data via type checking,
262
264
  * but instead mostly restricts access to it.
263
265
  */
264
266
  export type JsonCompatibleReadOnlyObject = { readonly [P in string]?: JsonCompatibleReadOnly };