@fluidframework/tree 2.4.0-294316 → 2.4.0-297027

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 (606) hide show
  1. package/api-report/tree.alpha.api.md +58 -28
  2. package/api-report/tree.beta.api.md +38 -27
  3. package/api-report/tree.legacy.alpha.api.md +38 -27
  4. package/api-report/tree.legacy.public.api.md +38 -27
  5. package/api-report/tree.public.api.md +38 -27
  6. package/dist/alpha.d.ts +6 -0
  7. package/dist/beta.d.ts +3 -0
  8. package/dist/core/schema-stored/schema.d.ts +7 -0
  9. package/dist/core/schema-stored/schema.d.ts.map +1 -1
  10. package/dist/core/schema-stored/schema.js +9 -0
  11. package/dist/core/schema-stored/schema.js.map +1 -1
  12. package/dist/core/tree/anchorSet.d.ts +1 -2
  13. package/dist/core/tree/anchorSet.d.ts.map +1 -1
  14. package/dist/core/tree/anchorSet.js +2 -2
  15. package/dist/core/tree/anchorSet.js.map +1 -1
  16. package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
  17. package/dist/core/tree/detachedFieldIndex.js +13 -2
  18. package/dist/core/tree/detachedFieldIndex.js.map +1 -1
  19. package/dist/core/tree/detachedFieldIndexTypes.d.ts +1 -1
  20. package/dist/core/tree/detachedFieldIndexTypes.js.map +1 -1
  21. package/dist/feature-libraries/editableTreeBinder.d.ts +3 -230
  22. package/dist/feature-libraries/editableTreeBinder.d.ts.map +1 -1
  23. package/dist/feature-libraries/editableTreeBinder.js +1 -539
  24. package/dist/feature-libraries/editableTreeBinder.js.map +1 -1
  25. package/dist/feature-libraries/flex-tree/context.d.ts +7 -14
  26. package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
  27. package/dist/feature-libraries/flex-tree/context.js +3 -3
  28. package/dist/feature-libraries/flex-tree/context.js.map +1 -1
  29. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +2 -16
  30. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  31. package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  32. package/dist/feature-libraries/flex-tree/lazyEntity.d.ts +2 -3
  33. package/dist/feature-libraries/flex-tree/lazyEntity.d.ts.map +1 -1
  34. package/dist/feature-libraries/flex-tree/lazyEntity.js +1 -2
  35. package/dist/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
  36. package/dist/feature-libraries/flex-tree/lazyField.d.ts +10 -15
  37. package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  38. package/dist/feature-libraries/flex-tree/lazyField.js +18 -20
  39. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  40. package/dist/feature-libraries/flex-tree/lazyNode.d.ts +4 -5
  41. package/dist/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
  42. package/dist/feature-libraries/flex-tree/lazyNode.js +13 -23
  43. package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  44. package/dist/feature-libraries/flex-tree/utilities.js +1 -1
  45. package/dist/feature-libraries/flex-tree/utilities.js.map +1 -1
  46. package/dist/feature-libraries/index.d.ts +4 -7
  47. package/dist/feature-libraries/index.d.ts.map +1 -1
  48. package/dist/feature-libraries/index.js +5 -31
  49. package/dist/feature-libraries/index.js.map +1 -1
  50. package/dist/feature-libraries/sequence-field/formatV1.d.ts +18 -18
  51. package/dist/feature-libraries/sequence-field/formatV2.d.ts +18 -18
  52. package/dist/feature-libraries/sequence-field/formatV3.d.ts +27 -27
  53. package/dist/feature-libraries/typed-schema/flexList.d.ts +1 -46
  54. package/dist/feature-libraries/typed-schema/flexList.d.ts.map +1 -1
  55. package/dist/feature-libraries/typed-schema/flexList.js +1 -13
  56. package/dist/feature-libraries/typed-schema/flexList.js.map +1 -1
  57. package/dist/feature-libraries/typed-schema/index.d.ts +2 -4
  58. package/dist/feature-libraries/typed-schema/index.d.ts.map +1 -1
  59. package/dist/feature-libraries/typed-schema/index.js +1 -19
  60. package/dist/feature-libraries/typed-schema/index.js.map +1 -1
  61. package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts +0 -212
  62. package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +1 -1
  63. package/dist/feature-libraries/typed-schema/typedTreeSchema.js +0 -266
  64. package/dist/feature-libraries/typed-schema/typedTreeSchema.js.map +1 -1
  65. package/dist/index.d.ts +3 -3
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +2 -1
  68. package/dist/index.js.map +1 -1
  69. package/dist/internalTypes.d.ts +1 -1
  70. package/dist/internalTypes.d.ts.map +1 -1
  71. package/dist/internalTypes.js.map +1 -1
  72. package/dist/legacy.d.ts +3 -0
  73. package/dist/packageVersion.d.ts +1 -1
  74. package/dist/packageVersion.js +1 -1
  75. package/dist/packageVersion.js.map +1 -1
  76. package/dist/public.d.ts +3 -0
  77. package/dist/shared-tree/checkoutFlexTreeView.d.ts +3 -3
  78. package/dist/shared-tree/checkoutFlexTreeView.d.ts.map +1 -1
  79. package/dist/shared-tree/checkoutFlexTreeView.js +1 -1
  80. package/dist/shared-tree/checkoutFlexTreeView.js.map +1 -1
  81. package/dist/shared-tree/index.d.ts +3 -3
  82. package/dist/shared-tree/index.d.ts.map +1 -1
  83. package/dist/shared-tree/index.js +2 -3
  84. package/dist/shared-tree/index.js.map +1 -1
  85. package/dist/shared-tree/schematizeTree.d.ts +1 -40
  86. package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
  87. package/dist/shared-tree/schematizeTree.js +2 -11
  88. package/dist/shared-tree/schematizeTree.js.map +1 -1
  89. package/dist/shared-tree/schematizingTreeView.d.ts +8 -7
  90. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  91. package/dist/shared-tree/schematizingTreeView.js +16 -8
  92. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  93. package/dist/shared-tree/sharedTree.d.ts +19 -2
  94. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  95. package/dist/shared-tree/sharedTree.js +10 -2
  96. package/dist/shared-tree/sharedTree.js.map +1 -1
  97. package/dist/shared-tree/treeCheckout.d.ts +71 -41
  98. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  99. package/dist/shared-tree/treeCheckout.js +116 -84
  100. package/dist/shared-tree/treeCheckout.js.map +1 -1
  101. package/dist/shared-tree-core/branch.d.ts +8 -11
  102. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  103. package/dist/shared-tree-core/branch.js +12 -15
  104. package/dist/shared-tree-core/branch.js.map +1 -1
  105. package/dist/simple-tree/api/create.d.ts +1 -1
  106. package/dist/simple-tree/api/create.d.ts.map +1 -1
  107. package/dist/simple-tree/api/create.js +11 -13
  108. package/dist/simple-tree/api/create.js.map +1 -1
  109. package/dist/simple-tree/api/getJsonSchema.d.ts +3 -3
  110. package/dist/simple-tree/api/getJsonSchema.d.ts.map +1 -1
  111. package/dist/simple-tree/api/getJsonSchema.js +1 -1
  112. package/dist/simple-tree/api/getJsonSchema.js.map +1 -1
  113. package/dist/simple-tree/api/getSimpleSchema.d.ts +2 -2
  114. package/dist/simple-tree/api/getSimpleSchema.d.ts.map +1 -1
  115. package/dist/simple-tree/api/getSimpleSchema.js.map +1 -1
  116. package/dist/simple-tree/api/index.d.ts +2 -1
  117. package/dist/simple-tree/api/index.d.ts.map +1 -1
  118. package/dist/simple-tree/api/index.js +3 -1
  119. package/dist/simple-tree/api/index.js.map +1 -1
  120. package/dist/simple-tree/api/schemaFactory.d.ts +6 -6
  121. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  122. package/dist/simple-tree/api/schemaFactory.js +15 -2
  123. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  124. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +3 -3
  125. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  126. package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  127. package/dist/simple-tree/api/simpleSchema.d.ts +14 -10
  128. package/dist/simple-tree/api/simpleSchema.d.ts.map +1 -1
  129. package/dist/simple-tree/api/simpleSchema.js.map +1 -1
  130. package/dist/simple-tree/api/tree.d.ts +12 -6
  131. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  132. package/dist/simple-tree/api/tree.js +4 -4
  133. package/dist/simple-tree/api/tree.js.map +1 -1
  134. package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  135. package/dist/simple-tree/api/treeNodeApi.js +8 -6
  136. package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
  137. package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
  138. package/dist/simple-tree/api/verboseTree.js +6 -10
  139. package/dist/simple-tree/api/verboseTree.js.map +1 -1
  140. package/{lib/feature-libraries/typed-schema → dist/simple-tree/api}/view.d.ts +4 -11
  141. package/dist/simple-tree/api/view.d.ts.map +1 -0
  142. package/dist/{feature-libraries/typed-schema → simple-tree/api}/view.js +9 -9
  143. package/dist/simple-tree/api/view.js.map +1 -0
  144. package/dist/simple-tree/api/viewSchemaToSimpleSchema.d.ts +2 -2
  145. package/dist/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
  146. package/dist/simple-tree/api/viewSchemaToSimpleSchema.js +7 -1
  147. package/dist/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
  148. package/dist/simple-tree/arrayNode.d.ts +147 -14
  149. package/dist/simple-tree/arrayNode.d.ts.map +1 -1
  150. package/dist/simple-tree/arrayNode.js +32 -20
  151. package/dist/simple-tree/arrayNode.js.map +1 -1
  152. package/dist/simple-tree/core/context.d.ts +55 -0
  153. package/dist/simple-tree/core/context.d.ts.map +1 -0
  154. package/dist/simple-tree/core/context.js +60 -0
  155. package/dist/simple-tree/core/context.js.map +1 -0
  156. package/dist/simple-tree/core/getOrCreateNode.d.ts +15 -0
  157. package/dist/simple-tree/core/getOrCreateNode.d.ts.map +1 -0
  158. package/dist/simple-tree/core/getOrCreateNode.js +36 -0
  159. package/dist/simple-tree/core/getOrCreateNode.js.map +1 -0
  160. package/dist/simple-tree/core/index.d.ts +7 -3
  161. package/dist/simple-tree/core/index.d.ts.map +1 -1
  162. package/dist/simple-tree/core/index.js +16 -7
  163. package/dist/simple-tree/core/index.js.map +1 -1
  164. package/dist/simple-tree/core/schemaCaching.d.ts +5 -13
  165. package/dist/simple-tree/core/schemaCaching.d.ts.map +1 -1
  166. package/dist/simple-tree/core/schemaCaching.js +16 -45
  167. package/dist/simple-tree/core/schemaCaching.js.map +1 -1
  168. package/dist/simple-tree/core/treeNodeKernel.d.ts +29 -7
  169. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  170. package/dist/simple-tree/core/treeNodeKernel.js +94 -58
  171. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  172. package/dist/simple-tree/core/treeNodeSchema.d.ts +24 -0
  173. package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  174. package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
  175. package/dist/simple-tree/core/types.d.ts +0 -5
  176. package/dist/simple-tree/core/types.d.ts.map +1 -1
  177. package/dist/simple-tree/core/types.js.map +1 -1
  178. package/dist/simple-tree/core/unhydratedFlexTree.d.ts +139 -0
  179. package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -0
  180. package/dist/{feature-libraries/flex-map-tree/mapTreeNode.js → simple-tree/core/unhydratedFlexTree.js} +112 -132
  181. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -0
  182. package/dist/simple-tree/{walkSchema.d.ts → core/walkSchema.d.ts} +8 -4
  183. package/dist/simple-tree/core/walkSchema.d.ts.map +1 -0
  184. package/dist/simple-tree/core/walkSchema.js +34 -0
  185. package/dist/simple-tree/core/walkSchema.js.map +1 -0
  186. package/dist/simple-tree/createContext.d.ts +11 -0
  187. package/dist/simple-tree/createContext.d.ts.map +1 -0
  188. package/dist/simple-tree/createContext.js +25 -0
  189. package/dist/simple-tree/createContext.js.map +1 -0
  190. package/dist/simple-tree/index.d.ts +3 -4
  191. package/dist/simple-tree/index.d.ts.map +1 -1
  192. package/dist/simple-tree/index.js +7 -7
  193. package/dist/simple-tree/index.js.map +1 -1
  194. package/dist/simple-tree/leafNodeSchema.d.ts +1 -0
  195. package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
  196. package/dist/simple-tree/leafNodeSchema.js +1 -2
  197. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  198. package/dist/simple-tree/mapNode.d.ts +4 -4
  199. package/dist/simple-tree/mapNode.d.ts.map +1 -1
  200. package/dist/simple-tree/mapNode.js +9 -5
  201. package/dist/simple-tree/mapNode.js.map +1 -1
  202. package/dist/simple-tree/objectNode.d.ts +8 -8
  203. package/dist/simple-tree/objectNode.d.ts.map +1 -1
  204. package/dist/simple-tree/objectNode.js +33 -14
  205. package/dist/simple-tree/objectNode.js.map +1 -1
  206. package/dist/simple-tree/objectNodeTypes.d.ts +7 -3
  207. package/dist/simple-tree/objectNodeTypes.d.ts.map +1 -1
  208. package/dist/simple-tree/objectNodeTypes.js.map +1 -1
  209. package/dist/simple-tree/proxies.d.ts +1 -2
  210. package/dist/simple-tree/proxies.d.ts.map +1 -1
  211. package/dist/simple-tree/proxies.js +6 -22
  212. package/dist/simple-tree/proxies.js.map +1 -1
  213. package/dist/simple-tree/schemaTypes.d.ts +2 -2
  214. package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
  215. package/dist/simple-tree/schemaTypes.js.map +1 -1
  216. package/dist/simple-tree/toFlexSchema.d.ts +6 -36
  217. package/dist/simple-tree/toFlexSchema.d.ts.map +1 -1
  218. package/dist/simple-tree/toFlexSchema.js +58 -142
  219. package/dist/simple-tree/toFlexSchema.js.map +1 -1
  220. package/dist/simple-tree/toMapTree.d.ts.map +1 -1
  221. package/dist/simple-tree/toMapTree.js +2 -2
  222. package/dist/simple-tree/toMapTree.js.map +1 -1
  223. package/dist/simple-tree/treeNodeValid.d.ts +13 -5
  224. package/dist/simple-tree/treeNodeValid.d.ts.map +1 -1
  225. package/dist/simple-tree/treeNodeValid.js +19 -10
  226. package/dist/simple-tree/treeNodeValid.js.map +1 -1
  227. package/dist/simple-tree/typesUnsafe.d.ts +4 -4
  228. package/dist/simple-tree/typesUnsafe.d.ts.map +1 -1
  229. package/dist/simple-tree/typesUnsafe.js.map +1 -1
  230. package/dist/simple-tree/walkFieldSchema.d.ts +11 -0
  231. package/dist/simple-tree/walkFieldSchema.d.ts.map +1 -0
  232. package/dist/simple-tree/walkFieldSchema.js +17 -0
  233. package/dist/simple-tree/walkFieldSchema.js.map +1 -0
  234. package/dist/util/index.d.ts +1 -1
  235. package/dist/util/index.d.ts.map +1 -1
  236. package/dist/util/index.js.map +1 -1
  237. package/dist/util/typeUtils.d.ts +14 -45
  238. package/dist/util/typeUtils.d.ts.map +1 -1
  239. package/dist/util/typeUtils.js.map +1 -1
  240. package/lib/alpha.d.ts +6 -0
  241. package/lib/beta.d.ts +3 -0
  242. package/lib/core/schema-stored/schema.d.ts +7 -0
  243. package/lib/core/schema-stored/schema.d.ts.map +1 -1
  244. package/lib/core/schema-stored/schema.js +9 -0
  245. package/lib/core/schema-stored/schema.js.map +1 -1
  246. package/lib/core/tree/anchorSet.d.ts +1 -2
  247. package/lib/core/tree/anchorSet.d.ts.map +1 -1
  248. package/lib/core/tree/anchorSet.js +2 -2
  249. package/lib/core/tree/anchorSet.js.map +1 -1
  250. package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
  251. package/lib/core/tree/detachedFieldIndex.js +13 -2
  252. package/lib/core/tree/detachedFieldIndex.js.map +1 -1
  253. package/lib/core/tree/detachedFieldIndexTypes.d.ts +1 -1
  254. package/lib/core/tree/detachedFieldIndexTypes.js.map +1 -1
  255. package/lib/feature-libraries/editableTreeBinder.d.ts +3 -230
  256. package/lib/feature-libraries/editableTreeBinder.d.ts.map +1 -1
  257. package/lib/feature-libraries/editableTreeBinder.js +1 -532
  258. package/lib/feature-libraries/editableTreeBinder.js.map +1 -1
  259. package/lib/feature-libraries/flex-tree/context.d.ts +7 -14
  260. package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
  261. package/lib/feature-libraries/flex-tree/context.js +3 -3
  262. package/lib/feature-libraries/flex-tree/context.js.map +1 -1
  263. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +2 -16
  264. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  265. package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  266. package/lib/feature-libraries/flex-tree/lazyEntity.d.ts +2 -3
  267. package/lib/feature-libraries/flex-tree/lazyEntity.d.ts.map +1 -1
  268. package/lib/feature-libraries/flex-tree/lazyEntity.js +1 -2
  269. package/lib/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
  270. package/lib/feature-libraries/flex-tree/lazyField.d.ts +10 -15
  271. package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  272. package/lib/feature-libraries/flex-tree/lazyField.js +18 -20
  273. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  274. package/lib/feature-libraries/flex-tree/lazyNode.d.ts +4 -5
  275. package/lib/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
  276. package/lib/feature-libraries/flex-tree/lazyNode.js +13 -23
  277. package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  278. package/lib/feature-libraries/flex-tree/utilities.js +1 -1
  279. package/lib/feature-libraries/flex-tree/utilities.js.map +1 -1
  280. package/lib/feature-libraries/index.d.ts +4 -7
  281. package/lib/feature-libraries/index.d.ts.map +1 -1
  282. package/lib/feature-libraries/index.js +4 -6
  283. package/lib/feature-libraries/index.js.map +1 -1
  284. package/lib/feature-libraries/sequence-field/formatV1.d.ts +18 -18
  285. package/lib/feature-libraries/sequence-field/formatV2.d.ts +18 -18
  286. package/lib/feature-libraries/sequence-field/formatV3.d.ts +27 -27
  287. package/lib/feature-libraries/typed-schema/flexList.d.ts +1 -46
  288. package/lib/feature-libraries/typed-schema/flexList.d.ts.map +1 -1
  289. package/lib/feature-libraries/typed-schema/flexList.js +0 -11
  290. package/lib/feature-libraries/typed-schema/flexList.js.map +1 -1
  291. package/lib/feature-libraries/typed-schema/index.d.ts +2 -4
  292. package/lib/feature-libraries/typed-schema/index.d.ts.map +1 -1
  293. package/lib/feature-libraries/typed-schema/index.js +0 -3
  294. package/lib/feature-libraries/typed-schema/index.js.map +1 -1
  295. package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts +0 -212
  296. package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +1 -1
  297. package/lib/feature-libraries/typed-schema/typedTreeSchema.js +1 -253
  298. package/lib/feature-libraries/typed-schema/typedTreeSchema.js.map +1 -1
  299. package/lib/index.d.ts +3 -3
  300. package/lib/index.d.ts.map +1 -1
  301. package/lib/index.js +1 -1
  302. package/lib/index.js.map +1 -1
  303. package/lib/internalTypes.d.ts +1 -1
  304. package/lib/internalTypes.d.ts.map +1 -1
  305. package/lib/internalTypes.js.map +1 -1
  306. package/lib/legacy.d.ts +3 -0
  307. package/lib/packageVersion.d.ts +1 -1
  308. package/lib/packageVersion.js +1 -1
  309. package/lib/packageVersion.js.map +1 -1
  310. package/lib/public.d.ts +3 -0
  311. package/lib/shared-tree/checkoutFlexTreeView.d.ts +3 -3
  312. package/lib/shared-tree/checkoutFlexTreeView.d.ts.map +1 -1
  313. package/lib/shared-tree/checkoutFlexTreeView.js +1 -1
  314. package/lib/shared-tree/checkoutFlexTreeView.js.map +1 -1
  315. package/lib/shared-tree/index.d.ts +3 -3
  316. package/lib/shared-tree/index.d.ts.map +1 -1
  317. package/lib/shared-tree/index.js +1 -2
  318. package/lib/shared-tree/index.js.map +1 -1
  319. package/lib/shared-tree/schematizeTree.d.ts +1 -40
  320. package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
  321. package/lib/shared-tree/schematizeTree.js +1 -9
  322. package/lib/shared-tree/schematizeTree.js.map +1 -1
  323. package/lib/shared-tree/schematizingTreeView.d.ts +8 -7
  324. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  325. package/lib/shared-tree/schematizingTreeView.js +19 -11
  326. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  327. package/lib/shared-tree/sharedTree.d.ts +19 -2
  328. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  329. package/lib/shared-tree/sharedTree.js +10 -3
  330. package/lib/shared-tree/sharedTree.js.map +1 -1
  331. package/lib/shared-tree/treeCheckout.d.ts +71 -41
  332. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  333. package/lib/shared-tree/treeCheckout.js +118 -86
  334. package/lib/shared-tree/treeCheckout.js.map +1 -1
  335. package/lib/shared-tree-core/branch.d.ts +8 -11
  336. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  337. package/lib/shared-tree-core/branch.js +12 -15
  338. package/lib/shared-tree-core/branch.js.map +1 -1
  339. package/lib/simple-tree/api/create.d.ts +1 -1
  340. package/lib/simple-tree/api/create.d.ts.map +1 -1
  341. package/lib/simple-tree/api/create.js +14 -16
  342. package/lib/simple-tree/api/create.js.map +1 -1
  343. package/lib/simple-tree/api/getJsonSchema.d.ts +3 -3
  344. package/lib/simple-tree/api/getJsonSchema.d.ts.map +1 -1
  345. package/lib/simple-tree/api/getJsonSchema.js +1 -1
  346. package/lib/simple-tree/api/getJsonSchema.js.map +1 -1
  347. package/lib/simple-tree/api/getSimpleSchema.d.ts +2 -2
  348. package/lib/simple-tree/api/getSimpleSchema.d.ts.map +1 -1
  349. package/lib/simple-tree/api/getSimpleSchema.js.map +1 -1
  350. package/lib/simple-tree/api/index.d.ts +2 -1
  351. package/lib/simple-tree/api/index.d.ts.map +1 -1
  352. package/lib/simple-tree/api/index.js +1 -0
  353. package/lib/simple-tree/api/index.js.map +1 -1
  354. package/lib/simple-tree/api/schemaFactory.d.ts +6 -6
  355. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  356. package/lib/simple-tree/api/schemaFactory.js +15 -2
  357. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  358. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +3 -3
  359. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  360. package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  361. package/lib/simple-tree/api/simpleSchema.d.ts +14 -10
  362. package/lib/simple-tree/api/simpleSchema.d.ts.map +1 -1
  363. package/lib/simple-tree/api/simpleSchema.js.map +1 -1
  364. package/lib/simple-tree/api/tree.d.ts +12 -6
  365. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  366. package/lib/simple-tree/api/tree.js +4 -4
  367. package/lib/simple-tree/api/tree.js.map +1 -1
  368. package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  369. package/lib/simple-tree/api/treeNodeApi.js +10 -8
  370. package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
  371. package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
  372. package/lib/simple-tree/api/verboseTree.js +6 -10
  373. package/lib/simple-tree/api/verboseTree.js.map +1 -1
  374. package/{dist/feature-libraries/typed-schema → lib/simple-tree/api}/view.d.ts +4 -11
  375. package/lib/simple-tree/api/view.d.ts.map +1 -0
  376. package/lib/{feature-libraries/typed-schema → simple-tree/api}/view.js +9 -9
  377. package/lib/simple-tree/api/view.js.map +1 -0
  378. package/lib/simple-tree/api/viewSchemaToSimpleSchema.d.ts +2 -2
  379. package/lib/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
  380. package/lib/simple-tree/api/viewSchemaToSimpleSchema.js +7 -1
  381. package/lib/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
  382. package/lib/simple-tree/arrayNode.d.ts +147 -14
  383. package/lib/simple-tree/arrayNode.d.ts.map +1 -1
  384. package/lib/simple-tree/arrayNode.js +37 -25
  385. package/lib/simple-tree/arrayNode.js.map +1 -1
  386. package/lib/simple-tree/core/context.d.ts +55 -0
  387. package/lib/simple-tree/core/context.d.ts.map +1 -0
  388. package/lib/simple-tree/core/context.js +55 -0
  389. package/lib/simple-tree/core/context.js.map +1 -0
  390. package/lib/simple-tree/core/getOrCreateNode.d.ts +15 -0
  391. package/lib/simple-tree/core/getOrCreateNode.d.ts.map +1 -0
  392. package/lib/simple-tree/core/getOrCreateNode.js +32 -0
  393. package/lib/simple-tree/core/getOrCreateNode.js.map +1 -0
  394. package/lib/simple-tree/core/index.d.ts +7 -3
  395. package/lib/simple-tree/core/index.d.ts.map +1 -1
  396. package/lib/simple-tree/core/index.js +6 -2
  397. package/lib/simple-tree/core/index.js.map +1 -1
  398. package/lib/simple-tree/core/schemaCaching.d.ts +5 -13
  399. package/lib/simple-tree/core/schemaCaching.d.ts.map +1 -1
  400. package/lib/simple-tree/core/schemaCaching.js +13 -39
  401. package/lib/simple-tree/core/schemaCaching.js.map +1 -1
  402. package/lib/simple-tree/core/treeNodeKernel.d.ts +29 -7
  403. package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  404. package/lib/simple-tree/core/treeNodeKernel.js +89 -54
  405. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  406. package/lib/simple-tree/core/treeNodeSchema.d.ts +24 -0
  407. package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  408. package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
  409. package/lib/simple-tree/core/types.d.ts +0 -5
  410. package/lib/simple-tree/core/types.d.ts.map +1 -1
  411. package/lib/simple-tree/core/types.js.map +1 -1
  412. package/lib/simple-tree/core/unhydratedFlexTree.d.ts +139 -0
  413. package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -0
  414. package/lib/{feature-libraries/flex-map-tree/mapTreeNode.js → simple-tree/core/unhydratedFlexTree.js} +110 -128
  415. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -0
  416. package/lib/simple-tree/{walkSchema.d.ts → core/walkSchema.d.ts} +8 -4
  417. package/lib/simple-tree/core/walkSchema.d.ts.map +1 -0
  418. package/lib/simple-tree/core/walkSchema.js +29 -0
  419. package/lib/simple-tree/core/walkSchema.js.map +1 -0
  420. package/lib/simple-tree/createContext.d.ts +11 -0
  421. package/lib/simple-tree/createContext.d.ts.map +1 -0
  422. package/lib/simple-tree/createContext.js +21 -0
  423. package/lib/simple-tree/createContext.js.map +1 -0
  424. package/lib/simple-tree/index.d.ts +3 -4
  425. package/lib/simple-tree/index.d.ts.map +1 -1
  426. package/lib/simple-tree/index.js +3 -4
  427. package/lib/simple-tree/index.js.map +1 -1
  428. package/lib/simple-tree/leafNodeSchema.d.ts +1 -0
  429. package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
  430. package/lib/simple-tree/leafNodeSchema.js +3 -4
  431. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  432. package/lib/simple-tree/mapNode.d.ts +4 -4
  433. package/lib/simple-tree/mapNode.d.ts.map +1 -1
  434. package/lib/simple-tree/mapNode.js +12 -8
  435. package/lib/simple-tree/mapNode.js.map +1 -1
  436. package/lib/simple-tree/objectNode.d.ts +8 -8
  437. package/lib/simple-tree/objectNode.d.ts.map +1 -1
  438. package/lib/simple-tree/objectNode.js +36 -17
  439. package/lib/simple-tree/objectNode.js.map +1 -1
  440. package/lib/simple-tree/objectNodeTypes.d.ts +7 -3
  441. package/lib/simple-tree/objectNodeTypes.d.ts.map +1 -1
  442. package/lib/simple-tree/objectNodeTypes.js.map +1 -1
  443. package/lib/simple-tree/proxies.d.ts +1 -2
  444. package/lib/simple-tree/proxies.d.ts.map +1 -1
  445. package/lib/simple-tree/proxies.js +7 -22
  446. package/lib/simple-tree/proxies.js.map +1 -1
  447. package/lib/simple-tree/schemaTypes.d.ts +2 -2
  448. package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
  449. package/lib/simple-tree/schemaTypes.js.map +1 -1
  450. package/lib/simple-tree/toFlexSchema.d.ts +6 -36
  451. package/lib/simple-tree/toFlexSchema.d.ts.map +1 -1
  452. package/lib/simple-tree/toFlexSchema.js +61 -142
  453. package/lib/simple-tree/toFlexSchema.js.map +1 -1
  454. package/lib/simple-tree/toMapTree.d.ts.map +1 -1
  455. package/lib/simple-tree/toMapTree.js +4 -4
  456. package/lib/simple-tree/toMapTree.js.map +1 -1
  457. package/lib/simple-tree/treeNodeValid.d.ts +13 -5
  458. package/lib/simple-tree/treeNodeValid.d.ts.map +1 -1
  459. package/lib/simple-tree/treeNodeValid.js +21 -12
  460. package/lib/simple-tree/treeNodeValid.js.map +1 -1
  461. package/lib/simple-tree/typesUnsafe.d.ts +4 -4
  462. package/lib/simple-tree/typesUnsafe.d.ts.map +1 -1
  463. package/lib/simple-tree/typesUnsafe.js.map +1 -1
  464. package/lib/simple-tree/walkFieldSchema.d.ts +11 -0
  465. package/lib/simple-tree/walkFieldSchema.d.ts.map +1 -0
  466. package/lib/simple-tree/walkFieldSchema.js +13 -0
  467. package/lib/simple-tree/walkFieldSchema.js.map +1 -0
  468. package/lib/util/index.d.ts +1 -1
  469. package/lib/util/index.d.ts.map +1 -1
  470. package/lib/util/index.js.map +1 -1
  471. package/lib/util/typeUtils.d.ts +14 -45
  472. package/lib/util/typeUtils.d.ts.map +1 -1
  473. package/lib/util/typeUtils.js.map +1 -1
  474. package/package.json +29 -20
  475. package/src/core/schema-stored/schema.ts +17 -0
  476. package/src/core/tree/anchorSet.ts +3 -4
  477. package/src/core/tree/detachedFieldIndex.ts +14 -3
  478. package/src/core/tree/detachedFieldIndexTypes.ts +1 -1
  479. package/src/feature-libraries/editableTreeBinder.ts +2 -915
  480. package/src/feature-libraries/flex-tree/context.ts +7 -20
  481. package/src/feature-libraries/flex-tree/flexTreeTypes.ts +2 -18
  482. package/src/feature-libraries/flex-tree/lazyEntity.ts +1 -4
  483. package/src/feature-libraries/flex-tree/lazyField.ts +22 -78
  484. package/src/feature-libraries/flex-tree/lazyNode.ts +24 -39
  485. package/src/feature-libraries/flex-tree/utilities.ts +1 -1
  486. package/src/feature-libraries/index.ts +3 -71
  487. package/src/feature-libraries/typed-schema/flexList.ts +3 -84
  488. package/src/feature-libraries/typed-schema/index.ts +1 -33
  489. package/src/feature-libraries/typed-schema/typedTreeSchema.ts +0 -458
  490. package/src/index.ts +6 -0
  491. package/src/internalTypes.ts +0 -1
  492. package/src/packageVersion.ts +1 -1
  493. package/src/shared-tree/checkoutFlexTreeView.ts +3 -3
  494. package/src/shared-tree/index.ts +4 -8
  495. package/src/shared-tree/schematizeTree.ts +2 -56
  496. package/src/shared-tree/schematizingTreeView.ts +34 -15
  497. package/src/shared-tree/sharedTree.ts +36 -8
  498. package/src/shared-tree/treeCheckout.ts +225 -128
  499. package/src/shared-tree-core/branch.ts +15 -26
  500. package/src/simple-tree/api/create.ts +18 -20
  501. package/src/simple-tree/api/getJsonSchema.ts +3 -3
  502. package/src/simple-tree/api/getSimpleSchema.ts +2 -2
  503. package/src/simple-tree/api/index.ts +2 -0
  504. package/src/simple-tree/api/schemaFactory.ts +41 -12
  505. package/src/simple-tree/api/schemaFactoryRecursive.ts +3 -6
  506. package/src/simple-tree/api/simpleSchema.ts +15 -10
  507. package/src/simple-tree/api/tree.ts +15 -9
  508. package/src/simple-tree/api/treeNodeApi.ts +12 -10
  509. package/src/simple-tree/api/verboseTree.ts +6 -12
  510. package/src/{feature-libraries/typed-schema → simple-tree/api}/view.ts +9 -22
  511. package/src/simple-tree/api/viewSchemaToSimpleSchema.ts +11 -2
  512. package/src/simple-tree/arrayNode.ts +202 -53
  513. package/src/simple-tree/core/context.ts +78 -0
  514. package/src/simple-tree/core/getOrCreateNode.ts +38 -0
  515. package/src/simple-tree/core/index.ts +11 -7
  516. package/src/simple-tree/core/schemaCaching.ts +13 -50
  517. package/src/simple-tree/core/treeNodeKernel.ts +117 -78
  518. package/src/simple-tree/core/treeNodeSchema.ts +35 -1
  519. package/src/simple-tree/core/types.ts +0 -5
  520. package/src/{feature-libraries/flex-map-tree/mapTreeNode.ts → simple-tree/core/unhydratedFlexTree.ts} +167 -210
  521. package/src/simple-tree/{walkSchema.ts → core/walkSchema.ts} +12 -34
  522. package/src/simple-tree/createContext.ts +24 -0
  523. package/src/simple-tree/index.ts +5 -2
  524. package/src/simple-tree/leafNodeSchema.ts +3 -9
  525. package/src/simple-tree/mapNode.ts +20 -17
  526. package/src/simple-tree/objectNode.ts +63 -38
  527. package/src/simple-tree/objectNodeTypes.ts +8 -5
  528. package/src/simple-tree/proxies.ts +8 -26
  529. package/src/simple-tree/schemaTypes.ts +2 -2
  530. package/src/simple-tree/toFlexSchema.ts +71 -204
  531. package/src/simple-tree/toMapTree.ts +5 -5
  532. package/src/simple-tree/treeNodeValid.ts +28 -22
  533. package/src/simple-tree/typesUnsafe.ts +4 -4
  534. package/src/simple-tree/walkFieldSchema.ts +19 -0
  535. package/src/util/index.ts +1 -5
  536. package/src/util/typeUtils.ts +14 -56
  537. package/dist/feature-libraries/fieldGenerator.d.ts +0 -43
  538. package/dist/feature-libraries/fieldGenerator.d.ts.map +0 -1
  539. package/dist/feature-libraries/fieldGenerator.js +0 -13
  540. package/dist/feature-libraries/fieldGenerator.js.map +0 -1
  541. package/dist/feature-libraries/flex-map-tree/index.d.ts +0 -6
  542. package/dist/feature-libraries/flex-map-tree/index.d.ts.map +0 -1
  543. package/dist/feature-libraries/flex-map-tree/index.js +0 -14
  544. package/dist/feature-libraries/flex-map-tree/index.js.map +0 -1
  545. package/dist/feature-libraries/flex-map-tree/mapTreeNode.d.ts +0 -157
  546. package/dist/feature-libraries/flex-map-tree/mapTreeNode.d.ts.map +0 -1
  547. package/dist/feature-libraries/flex-map-tree/mapTreeNode.js.map +0 -1
  548. package/dist/feature-libraries/storedToViewSchema.d.ts +0 -17
  549. package/dist/feature-libraries/storedToViewSchema.d.ts.map +0 -1
  550. package/dist/feature-libraries/storedToViewSchema.js +0 -67
  551. package/dist/feature-libraries/storedToViewSchema.js.map +0 -1
  552. package/dist/feature-libraries/typed-schema/schemaCollection.d.ts +0 -58
  553. package/dist/feature-libraries/typed-schema/schemaCollection.d.ts.map +0 -1
  554. package/dist/feature-libraries/typed-schema/schemaCollection.js +0 -160
  555. package/dist/feature-libraries/typed-schema/schemaCollection.js.map +0 -1
  556. package/dist/feature-libraries/typed-schema/typeUtils.d.ts +0 -15
  557. package/dist/feature-libraries/typed-schema/typeUtils.d.ts.map +0 -1
  558. package/dist/feature-libraries/typed-schema/typeUtils.js +0 -14
  559. package/dist/feature-libraries/typed-schema/typeUtils.js.map +0 -1
  560. package/dist/feature-libraries/typed-schema/view.d.ts.map +0 -1
  561. package/dist/feature-libraries/typed-schema/view.js.map +0 -1
  562. package/dist/simple-tree/getSimpleFieldSchema.d.ts +0 -14
  563. package/dist/simple-tree/getSimpleFieldSchema.d.ts.map +0 -1
  564. package/dist/simple-tree/getSimpleFieldSchema.js +0 -29
  565. package/dist/simple-tree/getSimpleFieldSchema.js.map +0 -1
  566. package/dist/simple-tree/walkSchema.d.ts.map +0 -1
  567. package/dist/simple-tree/walkSchema.js +0 -49
  568. package/dist/simple-tree/walkSchema.js.map +0 -1
  569. package/lib/feature-libraries/fieldGenerator.d.ts +0 -43
  570. package/lib/feature-libraries/fieldGenerator.d.ts.map +0 -1
  571. package/lib/feature-libraries/fieldGenerator.js +0 -12
  572. package/lib/feature-libraries/fieldGenerator.js.map +0 -1
  573. package/lib/feature-libraries/flex-map-tree/index.d.ts +0 -6
  574. package/lib/feature-libraries/flex-map-tree/index.d.ts.map +0 -1
  575. package/lib/feature-libraries/flex-map-tree/index.js +0 -6
  576. package/lib/feature-libraries/flex-map-tree/index.js.map +0 -1
  577. package/lib/feature-libraries/flex-map-tree/mapTreeNode.d.ts +0 -157
  578. package/lib/feature-libraries/flex-map-tree/mapTreeNode.d.ts.map +0 -1
  579. package/lib/feature-libraries/flex-map-tree/mapTreeNode.js.map +0 -1
  580. package/lib/feature-libraries/storedToViewSchema.d.ts +0 -17
  581. package/lib/feature-libraries/storedToViewSchema.d.ts.map +0 -1
  582. package/lib/feature-libraries/storedToViewSchema.js +0 -62
  583. package/lib/feature-libraries/storedToViewSchema.js.map +0 -1
  584. package/lib/feature-libraries/typed-schema/schemaCollection.d.ts +0 -58
  585. package/lib/feature-libraries/typed-schema/schemaCollection.d.ts.map +0 -1
  586. package/lib/feature-libraries/typed-schema/schemaCollection.js +0 -153
  587. package/lib/feature-libraries/typed-schema/schemaCollection.js.map +0 -1
  588. package/lib/feature-libraries/typed-schema/typeUtils.d.ts +0 -15
  589. package/lib/feature-libraries/typed-schema/typeUtils.d.ts.map +0 -1
  590. package/lib/feature-libraries/typed-schema/typeUtils.js +0 -10
  591. package/lib/feature-libraries/typed-schema/typeUtils.js.map +0 -1
  592. package/lib/feature-libraries/typed-schema/view.d.ts.map +0 -1
  593. package/lib/feature-libraries/typed-schema/view.js.map +0 -1
  594. package/lib/simple-tree/getSimpleFieldSchema.d.ts +0 -14
  595. package/lib/simple-tree/getSimpleFieldSchema.d.ts.map +0 -1
  596. package/lib/simple-tree/getSimpleFieldSchema.js +0 -25
  597. package/lib/simple-tree/getSimpleFieldSchema.js.map +0 -1
  598. package/lib/simple-tree/walkSchema.d.ts.map +0 -1
  599. package/lib/simple-tree/walkSchema.js +0 -43
  600. package/lib/simple-tree/walkSchema.js.map +0 -1
  601. package/src/feature-libraries/fieldGenerator.ts +0 -47
  602. package/src/feature-libraries/flex-map-tree/index.ts +0 -14
  603. package/src/feature-libraries/storedToViewSchema.ts +0 -100
  604. package/src/feature-libraries/typed-schema/schemaCollection.ts +0 -254
  605. package/src/feature-libraries/typed-schema/typeUtils.ts +0 -29
  606. package/src/simple-tree/getSimpleFieldSchema.ts +0 -36
@@ -221,7 +221,7 @@ export interface FieldSchemaMetadata<TCustomMetadata = unknown> {
221
221
  /**
222
222
  * User-defined metadata.
223
223
  */
224
- custom?: TCustomMetadata;
224
+ readonly custom?: TCustomMetadata;
225
225
 
226
226
  /**
227
227
  * The description of the field.
@@ -232,7 +232,7 @@ export interface FieldSchemaMetadata<TCustomMetadata = unknown> {
232
232
  * E.g., when converting a field schema to {@link https://json-schema.org/ | JSON Schema}, this description will be
233
233
  * used as the `description` field.
234
234
  */
235
- description?: string | undefined;
235
+ readonly description?: string | undefined;
236
236
  }
237
237
 
238
238
  /**
@@ -8,131 +8,73 @@ import { UsageError } from "@fluidframework/telemetry-utils/internal";
8
8
 
9
9
  import {
10
10
  EmptyKey,
11
+ LeafNodeStoredSchema,
12
+ MapNodeStoredSchema,
13
+ ObjectNodeStoredSchema,
14
+ type FieldKey,
15
+ type FieldKindIdentifier,
16
+ type TreeFieldStoredSchema,
11
17
  type TreeNodeSchemaIdentifier,
12
18
  type TreeNodeStoredSchema,
13
19
  type TreeStoredSchema,
20
+ type TreeTypeSet,
14
21
  } from "../core/index.js";
15
- import {
16
- FieldKinds,
17
- type FlexAllowedTypes,
18
- type FlexFieldKind,
19
- FlexFieldSchema,
20
- FlexMapNodeSchema,
21
- FlexObjectNodeSchema,
22
- type FlexTreeNodeSchema,
23
- type FlexTreeSchema,
24
- TreeNodeSchemaBase,
25
- defaultSchemaPolicy,
26
- intoStoredSchemaCollection,
27
- schemaIsLeaf,
28
- } from "../feature-libraries/index.js";
22
+ import { FieldKinds, type FlexFieldKind } from "../feature-libraries/index.js";
29
23
  // TODO: once flex schema is gone, this code can move into simple-tree
30
24
  // eslint-disable-next-line import/no-internal-modules
31
25
  import { normalizeFlexListEager } from "../feature-libraries/typed-schema/index.js";
32
- import { brand, fail, isReadonlyArray, mapIterable } from "../util/index.js";
33
- import {
34
- cachedFlexSchemaFromClassSchema,
35
- setFlexSchemaFromClassSchema,
36
- tryGetSimpleNodeSchema,
37
- NodeKind,
38
- type TreeNodeSchema,
39
- } from "./core/index.js";
26
+ import { brand, fail, isReadonlyArray } from "../util/index.js";
27
+ import { NodeKind, type TreeNodeSchema } from "./core/index.js";
40
28
  import {
41
29
  FieldKind,
42
30
  FieldSchema,
43
31
  type ImplicitAllowedTypes,
44
32
  type ImplicitFieldSchema,
45
- getStoredKey,
46
33
  } from "./schemaTypes.js";
47
-
48
- interface SchemaInfo {
49
- readonly toFlex: () => FlexTreeNodeSchema;
50
- readonly original: TreeNodeSchema;
51
- }
52
-
53
- type SchemaMap = Map<TreeNodeSchemaIdentifier, SchemaInfo>;
34
+ import { walkFieldSchema } from "./walkFieldSchema.js";
35
+ import { LeafNodeSchema } from "./leafNodeSchema.js";
36
+ import { isObjectNodeSchema } from "./objectNodeTypes.js";
54
37
 
55
38
  /**
56
- * Generate a {@link FlexTreeSchema} with `root` as the root field.
57
- *
58
- * This also has the side effect of populating the cached view schema on the class-based schema.
39
+ * Converts a {@link ImplicitFieldSchema} into a {@link TreeStoredSchema}.
59
40
  */
60
- export function toFlexSchema(root: ImplicitFieldSchema): FlexTreeSchema {
61
- const schemaMap: SchemaMap = new Map();
62
- const field = convertField(schemaMap, root);
63
- const nodeSchema = new Map(
64
- mapIterable(schemaMap, ([key, value]) => {
65
- const schema = value.toFlex();
66
- const classSchema = tryGetSimpleNodeSchema(schema);
67
- if (classSchema === undefined) {
68
- assert(schemaIsLeaf(schema), 0x83e /* invalid leaf */);
69
- } else {
70
- assert(
71
- cachedFlexSchemaFromClassSchema(classSchema) === schema,
72
- 0x83f /* mismatched schema */,
41
+ export function toStoredSchema(root: ImplicitFieldSchema): TreeStoredSchema {
42
+ const nodeSchema: Map<TreeNodeSchemaIdentifier, TreeNodeStoredSchema> = new Map();
43
+ walkFieldSchema(root, {
44
+ node(schema) {
45
+ if (nodeSchema.has(brand(schema.identifier))) {
46
+ // Use JSON.stringify to quote and escape identifier string.
47
+ throw new UsageError(
48
+ `Multiple schema encountered with the identifier ${JSON.stringify(
49
+ schema.identifier,
50
+ )}. Remove or rename them to avoid the collision.`,
73
51
  );
74
52
  }
75
- return [key, schema];
76
- }),
77
- );
53
+ nodeSchema.set(brand(schema.identifier), getStoredSchema(schema));
54
+ },
55
+ });
78
56
 
79
- const typed: FlexTreeSchema = {
80
- nodeSchema,
81
- adapters: {},
82
- rootFieldSchema: field,
83
- policy: defaultSchemaPolicy,
84
- };
85
- return typed;
86
- }
87
-
88
- /**
89
- * Converts a {@link ImplicitFieldSchema} into a {@link TreeStoredSchema}.
90
- */
91
- export function toStoredSchema(root: ImplicitFieldSchema): TreeStoredSchema {
92
- const flex = toFlexSchema(root);
93
57
  return {
94
- rootFieldSchema: flex.rootFieldSchema.stored,
95
- ...intoStoredSchemaCollection(flex),
58
+ nodeSchema,
59
+ rootFieldSchema: convertField(root),
96
60
  };
97
61
  }
98
62
 
99
- /**
100
- * Return a flex schema for the provided class schema.
101
- *
102
- * This also has the side effect of populating the cached view schema on the class based schema.
103
- */
104
- export function getFlexSchema(root: TreeNodeSchema): FlexTreeNodeSchema {
105
- const treeSchema = toFlexSchema(root);
106
- return treeSchema.rootFieldSchema.monomorphicChildType ?? fail("root should be monomorphic");
107
- }
108
-
109
- /**
110
- * Return a stored schema for the provided class schema.
111
- *
112
- * This also has the side effect of populating the cached view schema on the class based schema.
113
- */
114
- export function getStoredSchema(root: TreeNodeSchema): TreeNodeStoredSchema {
115
- return getFlexSchema(root).stored;
116
- }
117
-
118
63
  /**
119
64
  * Normalizes an {@link ImplicitFieldSchema} into a {@link TreeFieldSchema}.
120
65
  */
121
- export function convertField(
122
- schemaMap: SchemaMap,
123
- schema: ImplicitFieldSchema,
124
- ): FlexFieldSchema {
125
- let kind: FlexFieldKind;
126
- let types: ImplicitAllowedTypes;
66
+ export function convertField(schema: ImplicitFieldSchema): TreeFieldStoredSchema {
67
+ let kind: FieldKindIdentifier;
68
+ let allowedTypes: ImplicitAllowedTypes;
127
69
  if (schema instanceof FieldSchema) {
128
- kind = convertFieldKind.get(schema.kind) ?? fail("Invalid field kind");
129
- types = schema.allowedTypes;
70
+ kind = convertFieldKind.get(schema.kind)?.identifier ?? fail("Invalid field kind");
71
+ allowedTypes = schema.allowedTypes;
130
72
  } else {
131
- kind = FieldKinds.required;
132
- types = schema;
73
+ kind = FieldKinds.required.identifier;
74
+ allowedTypes = schema;
133
75
  }
134
- const allowedTypes = convertAllowedTypes(schemaMap, types);
135
- return FlexFieldSchema.create(kind, allowedTypes);
76
+ const types = convertAllowedTypes(allowedTypes);
77
+ return { kind, types };
136
78
  }
137
79
 
138
80
  const convertFieldKind = new Map<FieldKind, FlexFieldKind>([
@@ -142,123 +84,48 @@ const convertFieldKind = new Map<FieldKind, FlexFieldKind>([
142
84
  ]);
143
85
 
144
86
  /**
145
- * Normalizes an {@link ImplicitAllowedTypes} into an {@link AllowedTypes}.
87
+ * Normalizes an {@link ImplicitAllowedTypes} into an {@link TreeTypeSet}.
146
88
  */
147
- export function convertAllowedTypes(
148
- schemaMap: SchemaMap,
149
- schema: ImplicitAllowedTypes,
150
- ): FlexAllowedTypes {
89
+ export function convertAllowedTypes(schema: ImplicitAllowedTypes): TreeTypeSet {
151
90
  if (isReadonlyArray(schema)) {
152
- return normalizeFlexListEager(schema).map((item) => convertNodeSchema(schemaMap, item));
91
+ return new Set(normalizeFlexListEager(schema).map((item) => brand(item.identifier)));
153
92
  }
154
- return [convertNodeSchema(schemaMap, schema)];
93
+ return new Set([brand(schema.identifier)]);
155
94
  }
156
95
 
157
- const builder = { name: "simple schema" };
158
-
159
96
  /**
160
- * Converts a {@link TreeNodeSchema} into a {@link FlexTreeNodeSchema}.
161
- * Ensures all types reachable from `schema` are included in `schemaMap`.
162
- *
163
- * Return value (and entries in map) are lazy to allow recursive types to work.
164
- * This laziness does NOT extend to adding entries to `schemaMap`:
165
- * all referenced types are added to it before this function returns.
97
+ * Converts a {@link TreeNodeSchema} into a {@link TreeNodeStoredSchema}.
166
98
  */
167
- export function convertNodeSchema(
168
- schemaMap: SchemaMap,
169
- schema: TreeNodeSchema,
170
- ): () => FlexTreeNodeSchema {
171
- const fromMap = schemaMap.get(brand(schema.identifier));
172
- if (fromMap !== undefined) {
173
- if (fromMap.original !== schema) {
174
- // Use JSON.stringify to quote and escape identifier string.
175
- throw new UsageError(
176
- `Multiple schema encountered with the identifier ${JSON.stringify(
177
- schema.identifier,
178
- )}. Remove or rename them to avoid the collision.`,
179
- );
99
+ export function getStoredSchema(schema: TreeNodeSchema): TreeNodeStoredSchema {
100
+ const kind = schema.kind;
101
+ switch (kind) {
102
+ case NodeKind.Leaf: {
103
+ assert(schema instanceof LeafNodeSchema, "invalid kind");
104
+ return new LeafNodeStoredSchema(schema.info);
180
105
  }
181
- return fromMap.toFlex;
182
- }
183
-
184
- const toFlex = (): FlexTreeNodeSchema => {
185
- let out: FlexTreeNodeSchema;
186
- const kind = schema.kind;
187
- switch (kind) {
188
- case NodeKind.Leaf: {
189
- const cached =
190
- cachedFlexSchemaFromClassSchema(schema) ?? fail("leaf schema should be pre-cached");
191
- assert(schemaIsLeaf(cached), 0x840 /* expected leaf */);
192
- return cached;
193
- }
194
- case NodeKind.Map: {
195
- const fieldInfo = schema.info as ImplicitAllowedTypes;
196
- const field = FlexFieldSchema.create(
197
- FieldKinds.optional,
198
- convertAllowedTypes(schemaMap, fieldInfo),
199
- );
200
- // Lookup of cached schema is done here instead of before since walking the schema recursively to populate schemaMap is still required.
201
- const cached = cachedFlexSchemaFromClassSchema(schema);
202
- out =
203
- cached ??
204
- FlexMapNodeSchema.create(
205
- builder,
206
- brand<TreeNodeSchemaIdentifier>(schema.identifier),
207
- field,
208
- );
209
- break;
210
- }
211
- case NodeKind.Array: {
212
- const fieldInfo = schema.info as ImplicitAllowedTypes;
213
- const field = FlexFieldSchema.create(
214
- FieldKinds.sequence,
215
- convertAllowedTypes(schemaMap, fieldInfo),
216
- );
217
- const cached = cachedFlexSchemaFromClassSchema(schema);
218
- out =
219
- cached ??
220
- FlexObjectNodeSchema.create(builder, brand(schema.identifier), {
221
- [EmptyKey]: field,
222
- });
223
- break;
224
- }
225
- case NodeKind.Object: {
226
- const info = schema.info as Record<string, ImplicitFieldSchema>;
227
- const fields: Record<string, FlexFieldSchema> = Object.create(null);
228
- for (const [propertyKey, implicitFieldSchema] of Object.entries(info)) {
229
- // If a `stored key` was provided, use it as the key in the flex schema.
230
- // Otherwise, use the property key.
231
- const flexKey = getStoredKey(propertyKey, implicitFieldSchema);
232
-
233
- // This code has to be careful to avoid assigning to __proto__ or similar built-in fields.
234
- Object.defineProperty(fields, flexKey, {
235
- enumerable: true,
236
- configurable: false,
237
- writable: false,
238
- value: convertField(schemaMap, implicitFieldSchema),
239
- });
240
- }
241
- const cached = cachedFlexSchemaFromClassSchema(schema);
242
- out = cached ?? FlexObjectNodeSchema.create(builder, brand(schema.identifier), fields);
243
- break;
244
- }
245
- default:
246
- unreachableCase(kind);
106
+ case NodeKind.Map: {
107
+ const fieldInfo = schema.info as ImplicitAllowedTypes;
108
+ const types = convertAllowedTypes(fieldInfo);
109
+ return new MapNodeStoredSchema({ kind: FieldKinds.optional.identifier, types });
247
110
  }
248
- assert(out instanceof TreeNodeSchemaBase, 0x841 /* invalid schema produced */);
249
- {
250
- const cached = cachedFlexSchemaFromClassSchema(schema);
251
- if (cached !== undefined) {
252
- assert(
253
- cachedFlexSchemaFromClassSchema(schema) === out,
254
- 0x842 /* incorrect flexSchemaSymbol */,
255
- );
256
- } else {
257
- setFlexSchemaFromClassSchema(schema, out);
111
+ case NodeKind.Array: {
112
+ const fieldInfo = schema.info as ImplicitAllowedTypes;
113
+ const field = {
114
+ kind: FieldKinds.sequence.identifier,
115
+ types: convertAllowedTypes(fieldInfo),
116
+ };
117
+ const fields = new Map([[EmptyKey, field]]);
118
+ return new ObjectNodeStoredSchema(fields);
119
+ }
120
+ case NodeKind.Object: {
121
+ assert(isObjectNodeSchema(schema), "invalid kind");
122
+ const fields: Map<FieldKey, TreeFieldStoredSchema> = new Map();
123
+ for (const field of schema.flexKeyMap.values()) {
124
+ fields.set(field.storedKey, convertField(field.schema));
258
125
  }
126
+ return new ObjectNodeStoredSchema(fields);
259
127
  }
260
- return out;
261
- };
262
- schemaMap.set(brand(schema.identifier), { original: schema, toFlex });
263
- return toFlex;
128
+ default:
129
+ unreachableCase(kind);
130
+ }
264
131
  }
@@ -20,7 +20,6 @@ import {
20
20
  isTreeValue,
21
21
  valueSchemaAllows,
22
22
  type NodeKeyManager,
23
- isMapTreeNode,
24
23
  } from "../feature-libraries/index.js";
25
24
  import { brand, fail, isReadonlyArray, find } from "../util/index.js";
26
25
 
@@ -39,13 +38,14 @@ import {
39
38
  } from "./schemaTypes.js";
40
39
  import {
41
40
  getKernel,
42
- getSimpleNodeSchemaFromNode,
41
+ getSimpleNodeSchemaFromInnerNode,
43
42
  isTreeNode,
44
43
  NodeKind,
45
44
  type InnerNode,
46
45
  type TreeNode,
47
46
  type TreeNodeSchema,
48
47
  type Unhydrated,
48
+ UnhydratedFlexTreeNode,
49
49
  } from "./core/index.js";
50
50
  import { SchemaValidationErrors, isNodeInSchema } from "../feature-libraries/index.js";
51
51
  import { isObjectNodeSchema } from "./objectNodeTypes.js";
@@ -161,8 +161,8 @@ function nodeDataToMapTree(
161
161
  // They already have the mapTree, so there is no need to recompute it.
162
162
  const innerNode = tryGetInnerNode(data);
163
163
  if (innerNode !== undefined) {
164
- if (isMapTreeNode(innerNode)) {
165
- if (!allowedTypes.has(getSimpleNodeSchemaFromNode(innerNode))) {
164
+ if (innerNode instanceof UnhydratedFlexTreeNode) {
165
+ if (!allowedTypes.has(getSimpleNodeSchemaFromInnerNode(innerNode))) {
166
166
  throw new UsageError("Invalid schema for this context.");
167
167
  }
168
168
  // TODO: mapTreeFromNodeData modifies the trees it gets to add defaults.
@@ -170,7 +170,7 @@ function nodeDataToMapTree(
170
170
  // This is unnecessary and inefficient, but should be a no-op if all calls provide the same context (which they might not).
171
171
  // A cleaner design (avoiding this cast) might be to apply defaults eagerly if they don't need a context, and lazily (when hydrating) if they do.
172
172
  // This could avoid having to mutate the map tree to apply defaults, removing the need for this cast.
173
- return innerNode.mapTree as ExclusiveMapTree;
173
+ return innerNode.mapTree;
174
174
  } else {
175
175
  // The node is already hydrated, meaning that it already got inserted into the tree previously
176
176
  throw new UsageError("A node may not be inserted into the tree more than once");
@@ -8,7 +8,6 @@ import { assert } from "@fluidframework/core-utils/internal";
8
8
  import {
9
9
  type TreeNodeSchema,
10
10
  NodeKind,
11
- tryGetSimpleNodeSchema,
12
11
  isTreeNode,
13
12
  TreeNodeKernel,
14
13
  privateToken,
@@ -16,17 +15,14 @@ import {
16
15
  type InternalTreeNode,
17
16
  typeSchemaSymbol,
18
17
  type InnerNode,
18
+ type Context,
19
+ type UnhydratedFlexTreeNode,
19
20
  } from "./core/index.js";
20
- import {
21
- type FlexTreeNode,
22
- type MapTreeNode,
23
- isFlexTreeNode,
24
- markEager,
25
- } from "../feature-libraries/index.js";
21
+ import { type FlexTreeNode, isFlexTreeNode, markEager } from "../feature-libraries/index.js";
26
22
  import { UsageError } from "@fluidframework/telemetry-utils/internal";
27
23
  import { fail } from "../util/index.js";
28
24
 
29
- import { getFlexSchema } from "./toFlexSchema.js";
25
+ import { getSimpleNodeSchemaFromInnerNode } from "./core/index.js";
30
26
 
31
27
  /**
32
28
  * Class which all {@link TreeNode}s must extend.
@@ -60,7 +56,7 @@ export abstract class TreeNodeValid<TInput> extends TreeNode {
60
56
  this: typeof TreeNodeValid<T>,
61
57
  instance: TreeNodeValid<T>,
62
58
  input: T,
63
- ): MapTreeNode {
59
+ ): UnhydratedFlexTreeNode {
64
60
  return fail("Schema must override buildRawNode");
65
61
  }
66
62
 
@@ -68,7 +64,9 @@ export abstract class TreeNodeValid<TInput> extends TreeNode {
68
64
  * Schema classes can override to provide a callback that is called once when the first node is constructed.
69
65
  * This is a good place to perform extra validation and cache schema derived data needed for the implementation of the node.
70
66
  */
71
- protected static oneTimeSetup<T>(this: typeof TreeNodeValid<T>): void {}
67
+ protected static oneTimeSetup<T>(this: typeof TreeNodeValid<T>): Context {
68
+ fail("Missing oneTimeSetup");
69
+ }
72
70
 
73
71
  /**
74
72
  * The most derived constructor (the one invoked with the `new` operator, not a parent class constructor invoked with as `super`) used to construct an instance of this type.
@@ -110,7 +108,7 @@ export abstract class TreeNodeValid<TInput> extends TreeNode {
110
108
  schemaBase = Reflect.getPrototypeOf(schemaBase) as typeof TreeNodeValid;
111
109
  }
112
110
  assert(schemaBase.constructorCached === undefined, 0x962 /* overwriting wrong cache */);
113
- schemaBase.constructorCached = { constructor: this, oneTimeInitialized: false };
111
+ schemaBase.constructorCached = { constructor: this, oneTimeInitialized: undefined };
114
112
  assert(
115
113
  this.constructorCached === schemaBase.constructorCached,
116
114
  0x9b5 /* Inheritance should work */,
@@ -129,18 +127,26 @@ export abstract class TreeNodeValid<TInput> extends TreeNode {
129
127
  );
130
128
  }
131
129
 
130
+ /**
131
+ * Node creation function for implementing the TreeNodeSchemaNonClass half of TreeNodeSchemaBoth.
132
+ * @remarks
133
+ * When used as TreeNodeSchemaNonClass and subclassed,
134
+ * does not actually have the correct compile time type for the return value due to TypeScript limitations.
135
+ * This is why this is not exposed as part of TreeNodeSchemaCLass where subclassing is allowed.
136
+ */
137
+ public static create<TInput, TOut, TThis extends new (args: TInput) => TOut>(
138
+ this: TThis,
139
+ input: TInput,
140
+ ): TOut {
141
+ return new this(input);
142
+ }
143
+
132
144
  public constructor(input: TInput | InternalTreeNode) {
133
145
  super(privateToken);
134
146
  const schema = this.constructor as typeof TreeNodeValid & TreeNodeSchema;
135
147
  const cache = schema.markMostDerived();
136
- if (!cache.oneTimeInitialized) {
137
- const flexSchema = getFlexSchema(schema);
138
- assert(
139
- tryGetSimpleNodeSchema(flexSchema) === schema,
140
- 0x961 /* Schema class not properly configured */,
141
- );
142
- schema.oneTimeSetup();
143
- cache.oneTimeInitialized = true;
148
+ if (cache.oneTimeInitialized === undefined) {
149
+ cache.oneTimeInitialized = schema.oneTimeSetup();
144
150
  }
145
151
 
146
152
  if (isTreeNode(input)) {
@@ -152,7 +158,7 @@ export abstract class TreeNodeValid<TInput> extends TreeNode {
152
158
 
153
159
  const node: InnerNode = isFlexTreeNode(input) ? input : schema.buildRawNode(this, input);
154
160
  assert(
155
- tryGetSimpleNodeSchema(node.flexSchema) === schema,
161
+ getSimpleNodeSchemaFromInnerNode(node) === schema,
156
162
  0x83b /* building node with wrong schema */,
157
163
  );
158
164
 
@@ -160,7 +166,7 @@ export abstract class TreeNodeValid<TInput> extends TreeNode {
160
166
  // The TreeNodeKernel associates itself the TreeNode (result here, not node) so it can be looked up later via getKernel.
161
167
  // If desired this could be put in a non-enumerable symbol property for lookup instead, but that gets messy going through proxies,
162
168
  // so just relying on the WeakMap seems like the cleanest approach.
163
- new TreeNodeKernel(result, schema, node);
169
+ new TreeNodeKernel(result, schema, node, cache.oneTimeInitialized);
164
170
 
165
171
  return result;
166
172
  }
@@ -181,7 +187,7 @@ markEager(TreeNodeValid);
181
187
  */
182
188
  export interface MostDerivedData {
183
189
  readonly constructor: typeof TreeNodeValid & TreeNodeSchema;
184
- oneTimeInitialized: boolean;
190
+ oneTimeInitialized?: Context;
185
191
  }
186
192
 
187
193
  // #region NodeJS custom inspect for TreeNodes.
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  import type { FlexListToUnion, Unenforced } from "../feature-libraries/index.js";
7
- import type { RestrictiveReadonlyRecord, _InlineTrick } from "../util/index.js";
7
+ import type { RestrictiveStringRecord, _InlineTrick } from "../util/index.js";
8
8
 
9
9
  import type {
10
10
  AllowedTypes,
@@ -44,7 +44,7 @@ import type { TreeArrayNodeBase, TreeArrayNode } from "./arrayNode.js";
44
44
  * @system @public
45
45
  */
46
46
  export type ObjectFromSchemaRecordUnsafe<
47
- T extends Unenforced<RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>,
47
+ T extends Unenforced<RestrictiveStringRecord<ImplicitFieldSchema>>,
48
48
  > = {
49
49
  -readonly [Property in keyof T]: TreeFieldFromImplicitFieldUnsafe<T[Property]>;
50
50
  };
@@ -56,7 +56,7 @@ export type ObjectFromSchemaRecordUnsafe<
56
56
  * @system @public
57
57
  */
58
58
  export type TreeObjectNodeUnsafe<
59
- T extends Unenforced<RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>,
59
+ T extends Unenforced<RestrictiveStringRecord<ImplicitFieldSchema>>,
60
60
  TypeName extends string = string,
61
61
  > = TreeNode & ObjectFromSchemaRecordUnsafe<T> & WithType<TypeName, NodeKind.Object>;
62
62
 
@@ -230,7 +230,7 @@ export type FieldHasDefaultUnsafe<T extends Unenforced<ImplicitFieldSchema>> =
230
230
  * @system @public
231
231
  */
232
232
  export type InsertableObjectFromSchemaRecordUnsafe<
233
- T extends Unenforced<RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>,
233
+ T extends Unenforced<RestrictiveStringRecord<ImplicitFieldSchema>>,
234
234
  > = {
235
235
  // Field might not have a default, so make it required:
236
236
  readonly [Property in keyof T as FieldHasDefaultUnsafe<T[Property]> extends false
@@ -0,0 +1,19 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { type TreeNodeSchema, walkAllowedTypes, type SchemaVisitor } from "./core/index.js";
7
+
8
+ import { type ImplicitFieldSchema, normalizeFieldSchema } from "./schemaTypes.js";
9
+
10
+ /**
11
+ * Traverses all {@link TreeNodeSchema} schema reachable from `schema`, applying the visitor pattern.
12
+ */
13
+ export function walkFieldSchema(
14
+ schema: ImplicitFieldSchema,
15
+ visitor: SchemaVisitor,
16
+ visitedSet: Set<TreeNodeSchema> = new Set(),
17
+ ): void {
18
+ walkAllowedTypes(normalizeFieldSchema(schema).allowedTypeSet, visitor, visitedSet);
19
+ }
package/src/util/index.ts CHANGED
@@ -94,13 +94,9 @@ export {
94
94
  export { ReferenceCountedBase, type ReferenceCounted } from "./referenceCounting.js";
95
95
 
96
96
  export type {
97
- AllowOptional,
98
- RequiredFields,
99
- OptionalFields,
100
97
  _RecursiveTrick,
101
- AllowOptionalNotFlattened,
102
98
  RestrictiveReadonlyRecord,
103
- Assume,
99
+ RestrictiveStringRecord,
104
100
  _InlineTrick,
105
101
  FlattenKeys,
106
102
  } from "./typeUtils.js";
@@ -14,52 +14,6 @@
14
14
  */
15
15
  export type FlattenKeys<T> = [{ [Property in keyof T]: T[Property] }][_InlineTrick];
16
16
 
17
- /**
18
- * Remove all fields which permit undefined from `T`.
19
- */
20
- export type RequiredFields<T> = [
21
- {
22
- [P in keyof T as undefined extends T[P] ? never : P]: T[P];
23
- },
24
- ][_InlineTrick];
25
-
26
- /**
27
- * Extract fields which permit undefined but can also hold other types.
28
- */
29
- export type OptionalFields<T> = [
30
- {
31
- [P in keyof T as undefined extends T[P]
32
- ? T[P] extends undefined
33
- ? never
34
- : P
35
- : never]?: T[P];
36
- },
37
- ][_InlineTrick];
38
-
39
- /**
40
- * Converts properties of an object which permit undefined into optional properties.
41
- * Removes fields which only allow undefined.
42
- *
43
- * @remarks
44
- * This version does not flatten the resulting type.
45
- * This version exists because some cases recursive types need to avoid this
46
- * flattening since it causes complication issues.
47
- *
48
- * See also `AllowOptional`.
49
- */
50
- // export type AllowOptionalNotFlattened<T> = [RequiredFields<T> & OptionalFields<T>][_InlineTrick];
51
- export type AllowOptionalNotFlattened<T> = [
52
- RequiredFields<T> & OptionalFields<T>,
53
- ][_InlineTrick];
54
-
55
- /**
56
- * Converts properties of an object which permit undefined into optional properties.
57
- * Removes fields which only allow undefined.
58
- */
59
- export type AllowOptional<T> = [
60
- FlattenKeys<RequiredFields<T> & OptionalFields<T>>,
61
- ][_InlineTrick];
62
-
63
17
  /**
64
18
  * Use for trick to "inline" generic types.
65
19
  *
@@ -157,9 +111,15 @@ export type _RecursiveTrick = never;
157
111
  * Alternative to the built in Record type which does not permit unexpected members,
158
112
  * and is readonly.
159
113
  *
114
+ * @remarks
115
+ * This does not work correctly when `K` is more specific than `string` or `symbol`.
116
+ * For example `{a: 5}` is not assignable to `RestrictiveReadonlyRecord<"a",: number>`
117
+ *
160
118
  * @privateRemarks
161
119
  * `number` is not allowed as a key here since doing so causes the compiler to reject recursive schema.
162
120
  * The cause for this is unclear, but empirically it was the case when this comment was written.
121
+ *
122
+ * @deprecated Use a more robust / specific type instead. This type never worked as intended.
163
123
  * @public
164
124
  */
165
125
  export type RestrictiveReadonlyRecord<K extends symbol | string, T> = {
@@ -167,15 +127,13 @@ export type RestrictiveReadonlyRecord<K extends symbol | string, T> = {
167
127
  };
168
128
 
169
129
  /**
170
- * Assume that `TInput` is a `TAssumeToBe`.
171
- *
130
+ * Alternative to the built-in `Record<string, T>` type which is readonly and does not permit symbols.
172
131
  * @remarks
173
- * This is useful in generic code when it is impractical (or messy)
174
- * to to convince the compiler that a generic type `TInput` will extend `TAssumeToBe`.
175
- * In these cases `TInput` can be replaced with `Assume<TInput, TAssumeToBe>` to allow compilation of the generic code.
176
- * When the generic code is parameterized with a concrete type, if that type actually does extend `TAssumeToBe`,
177
- * it will behave like `TInput` was used directly.
132
+ * It would be nice if `keyof RestrictiveStringRecord<T>` returned string, but it does not: use `keyof RestrictiveStringRecord<T> & string` instead.
133
+ * @system @public
178
134
  */
179
- export type Assume<TInput, TAssumeToBe> = [TInput] extends [TAssumeToBe]
180
- ? TInput
181
- : TAssumeToBe;
135
+ export type RestrictiveStringRecord<T> = {
136
+ readonly [P in string]: T;
137
+ } & {
138
+ readonly [P in symbol]?: never;
139
+ };