@fluidframework/tree 2.1.0-281041 → 2.2.0

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 (1510) hide show
  1. package/.mocharc.customBenchmarks.cjs +33 -0
  2. package/.vscode/Tree.code-workspace +2 -1
  3. package/CHANGELOG.md +335 -0
  4. package/README.md +40 -10
  5. package/api-extractor.json +17 -0
  6. package/api-report/tree.alpha.api.md +120 -26
  7. package/api-report/tree.beta.api.md +52 -26
  8. package/api-report/tree.public.api.md +52 -26
  9. package/dist/beta.d.ts +3 -1
  10. package/dist/codec/discriminatedUnions.d.ts +11 -5
  11. package/dist/codec/discriminatedUnions.d.ts.map +1 -1
  12. package/dist/codec/discriminatedUnions.js.map +1 -1
  13. package/dist/codec/index.d.ts +1 -1
  14. package/dist/codec/index.d.ts.map +1 -1
  15. package/dist/codec/index.js.map +1 -1
  16. package/dist/core/forest/editableForest.d.ts +1 -5
  17. package/dist/core/forest/editableForest.d.ts.map +1 -1
  18. package/dist/core/forest/editableForest.js +4 -2
  19. package/dist/core/forest/editableForest.js.map +1 -1
  20. package/dist/core/forest/forest.d.ts +0 -6
  21. package/dist/core/forest/forest.d.ts.map +1 -1
  22. package/dist/core/forest/forest.js +0 -2
  23. package/dist/core/forest/forest.js.map +1 -1
  24. package/dist/core/index.d.ts +2 -2
  25. package/dist/core/index.d.ts.map +1 -1
  26. package/dist/core/index.js +3 -4
  27. package/dist/core/index.js.map +1 -1
  28. package/dist/core/rebase/changeRebaser.d.ts +0 -4
  29. package/dist/core/rebase/changeRebaser.d.ts.map +1 -1
  30. package/dist/core/rebase/changeRebaser.js.map +1 -1
  31. package/dist/core/rebase/index.d.ts +1 -1
  32. package/dist/core/rebase/index.d.ts.map +1 -1
  33. package/dist/core/rebase/index.js +1 -3
  34. package/dist/core/rebase/index.js.map +1 -1
  35. package/dist/core/rebase/types.d.ts +1 -8
  36. package/dist/core/rebase/types.d.ts.map +1 -1
  37. package/dist/core/rebase/types.js +1 -9
  38. package/dist/core/rebase/types.js.map +1 -1
  39. package/dist/core/rebase/utils.d.ts +0 -1
  40. package/dist/core/rebase/utils.d.ts.map +1 -1
  41. package/dist/core/rebase/utils.js +12 -7
  42. package/dist/core/rebase/utils.js.map +1 -1
  43. package/dist/core/schema-stored/multiplicity.d.ts +0 -1
  44. package/dist/core/schema-stored/multiplicity.d.ts.map +1 -1
  45. package/dist/core/schema-stored/multiplicity.js +0 -1
  46. package/dist/core/schema-stored/multiplicity.js.map +1 -1
  47. package/dist/core/schema-stored/schema.d.ts +0 -7
  48. package/dist/core/schema-stored/schema.d.ts.map +1 -1
  49. package/dist/core/schema-stored/schema.js +0 -4
  50. package/dist/core/schema-stored/schema.js.map +1 -1
  51. package/dist/core/schema-stored/storedSchemaRepository.d.ts +0 -3
  52. package/dist/core/schema-stored/storedSchemaRepository.d.ts.map +1 -1
  53. package/dist/core/schema-stored/storedSchemaRepository.js.map +1 -1
  54. package/dist/core/schema-view/view.d.ts +0 -3
  55. package/dist/core/schema-view/view.d.ts.map +1 -1
  56. package/dist/core/schema-view/view.js +0 -1
  57. package/dist/core/schema-view/view.js.map +1 -1
  58. package/dist/core/tree/anchorSet.d.ts +1 -10
  59. package/dist/core/tree/anchorSet.d.ts.map +1 -1
  60. package/dist/core/tree/anchorSet.js +14 -4
  61. package/dist/core/tree/anchorSet.js.map +1 -1
  62. package/dist/core/tree/cursor.d.ts +1 -6
  63. package/dist/core/tree/cursor.d.ts.map +1 -1
  64. package/dist/core/tree/cursor.js +0 -2
  65. package/dist/core/tree/cursor.js.map +1 -1
  66. package/dist/core/tree/delta.d.ts +0 -11
  67. package/dist/core/tree/delta.d.ts.map +1 -1
  68. package/dist/core/tree/delta.js.map +1 -1
  69. package/dist/core/tree/detachedFieldIndex.d.ts +48 -11
  70. package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
  71. package/dist/core/tree/detachedFieldIndex.js +144 -20
  72. package/dist/core/tree/detachedFieldIndex.js.map +1 -1
  73. package/dist/core/tree/detachedFieldIndexCodec.d.ts.map +1 -1
  74. package/dist/core/tree/detachedFieldIndexCodec.js +16 -6
  75. package/dist/core/tree/detachedFieldIndexCodec.js.map +1 -1
  76. package/dist/core/tree/detachedFieldIndexFormat.d.ts +1 -1
  77. package/dist/core/tree/detachedFieldIndexFormat.d.ts.map +1 -1
  78. package/dist/core/tree/detachedFieldIndexFormat.js.map +1 -1
  79. package/dist/core/tree/detachedFieldIndexTypes.d.ts +38 -4
  80. package/dist/core/tree/detachedFieldIndexTypes.d.ts.map +1 -1
  81. package/dist/core/tree/detachedFieldIndexTypes.js.map +1 -1
  82. package/dist/core/tree/index.d.ts +3 -2
  83. package/dist/core/tree/index.d.ts.map +1 -1
  84. package/dist/core/tree/index.js +3 -1
  85. package/dist/core/tree/index.js.map +1 -1
  86. package/dist/core/tree/mapTree.d.ts +20 -4
  87. package/dist/core/tree/mapTree.d.ts.map +1 -1
  88. package/dist/core/tree/mapTree.js +29 -0
  89. package/dist/core/tree/mapTree.js.map +1 -1
  90. package/dist/core/tree/pathTree.d.ts +0 -11
  91. package/dist/core/tree/pathTree.d.ts.map +1 -1
  92. package/dist/core/tree/pathTree.js.map +1 -1
  93. package/dist/core/tree/treeTextFormat.d.ts.map +1 -1
  94. package/dist/core/tree/treeTextFormat.js +3 -2
  95. package/dist/core/tree/treeTextFormat.js.map +1 -1
  96. package/dist/core/tree/types.d.ts +0 -11
  97. package/dist/core/tree/types.d.ts.map +1 -1
  98. package/dist/core/tree/types.js +0 -4
  99. package/dist/core/tree/types.js.map +1 -1
  100. package/dist/core/tree/visitDelta.d.ts +3 -2
  101. package/dist/core/tree/visitDelta.d.ts.map +1 -1
  102. package/dist/core/tree/visitDelta.js +33 -17
  103. package/dist/core/tree/visitDelta.js.map +1 -1
  104. package/dist/core/tree/visitPath.d.ts +0 -2
  105. package/dist/core/tree/visitPath.d.ts.map +1 -1
  106. package/dist/core/tree/visitPath.js.map +1 -1
  107. package/dist/core/tree/visitorUtils.d.ts +3 -4
  108. package/dist/core/tree/visitorUtils.d.ts.map +1 -1
  109. package/dist/core/tree/visitorUtils.js +4 -4
  110. package/dist/core/tree/visitorUtils.js.map +1 -1
  111. package/dist/domains/index.d.ts +1 -1
  112. package/dist/domains/index.d.ts.map +1 -1
  113. package/dist/domains/index.js +2 -1
  114. package/dist/domains/index.js.map +1 -1
  115. package/dist/domains/json/index.d.ts +1 -1
  116. package/dist/domains/json/index.d.ts.map +1 -1
  117. package/dist/domains/json/index.js +2 -1
  118. package/dist/domains/json/index.js.map +1 -1
  119. package/dist/domains/json/jsonCursor.d.ts +36 -2
  120. package/dist/domains/json/jsonCursor.d.ts.map +1 -1
  121. package/dist/domains/json/jsonCursor.js +76 -5
  122. package/dist/domains/json/jsonCursor.js.map +1 -1
  123. package/dist/domains/json/jsonDomainSchema.d.ts +13 -3
  124. package/dist/domains/json/jsonDomainSchema.d.ts.map +1 -1
  125. package/dist/domains/json/jsonDomainSchema.js +12 -4
  126. package/dist/domains/json/jsonDomainSchema.js.map +1 -1
  127. package/dist/domains/leafDomain.d.ts +0 -1
  128. package/dist/domains/leafDomain.d.ts.map +1 -1
  129. package/dist/domains/leafDomain.js +0 -1
  130. package/dist/domains/leafDomain.js.map +1 -1
  131. package/dist/domains/schemaBuilder.d.ts +1 -7
  132. package/dist/domains/schemaBuilder.d.ts.map +1 -1
  133. package/dist/domains/schemaBuilder.js +0 -10
  134. package/dist/domains/schemaBuilder.js.map +1 -1
  135. package/dist/events/events.d.ts +0 -4
  136. package/dist/events/events.d.ts.map +1 -1
  137. package/dist/events/events.js +0 -1
  138. package/dist/events/events.js.map +1 -1
  139. package/dist/feature-libraries/chunked-forest/basicChunk.d.ts.map +1 -1
  140. package/dist/feature-libraries/chunked-forest/basicChunk.js +8 -3
  141. package/dist/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
  142. package/dist/feature-libraries/chunked-forest/chunk.d.ts +1 -1
  143. package/dist/feature-libraries/chunked-forest/chunk.d.ts.map +1 -1
  144. package/dist/feature-libraries/chunked-forest/chunk.js.map +1 -1
  145. package/dist/feature-libraries/chunked-forest/chunkTree.js +3 -3
  146. package/dist/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  147. package/dist/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
  148. package/dist/feature-libraries/chunked-forest/chunkedForest.js +7 -5
  149. package/dist/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  150. package/dist/feature-libraries/chunked-forest/codec/chunkCodecUtilities.js +1 -1
  151. package/dist/feature-libraries/chunked-forest/codec/chunkCodecUtilities.js.map +1 -1
  152. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  153. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js +8 -5
  154. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  155. package/dist/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
  156. package/dist/feature-libraries/chunked-forest/uniformChunk.js +5 -3
  157. package/dist/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
  158. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +12 -24
  159. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  160. package/dist/feature-libraries/default-schema/defaultEditBuilder.js +9 -19
  161. package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  162. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +0 -6
  163. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  164. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +11 -1
  165. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  166. package/dist/feature-libraries/default-schema/defaultSchema.d.ts +0 -1
  167. package/dist/feature-libraries/default-schema/defaultSchema.d.ts.map +1 -1
  168. package/dist/feature-libraries/default-schema/defaultSchema.js +0 -1
  169. package/dist/feature-libraries/default-schema/defaultSchema.js.map +1 -1
  170. package/dist/feature-libraries/default-schema/index.d.ts +1 -1
  171. package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
  172. package/dist/feature-libraries/default-schema/index.js +2 -1
  173. package/dist/feature-libraries/default-schema/index.js.map +1 -1
  174. package/dist/feature-libraries/default-schema/schemaChecker.d.ts +6 -0
  175. package/dist/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
  176. package/dist/feature-libraries/default-schema/schemaChecker.js +6 -0
  177. package/dist/feature-libraries/default-schema/schemaChecker.js.map +1 -1
  178. package/dist/feature-libraries/editableTreeBinder.d.ts +0 -67
  179. package/dist/feature-libraries/editableTreeBinder.d.ts.map +1 -1
  180. package/dist/feature-libraries/editableTreeBinder.js +6 -25
  181. package/dist/feature-libraries/editableTreeBinder.js.map +1 -1
  182. package/dist/feature-libraries/fieldGenerator.d.ts +0 -3
  183. package/dist/feature-libraries/fieldGenerator.d.ts.map +1 -1
  184. package/dist/feature-libraries/fieldGenerator.js +0 -1
  185. package/dist/feature-libraries/fieldGenerator.js.map +1 -1
  186. package/dist/feature-libraries/flex-map-tree/index.d.ts +1 -1
  187. package/dist/feature-libraries/flex-map-tree/index.d.ts.map +1 -1
  188. package/dist/feature-libraries/flex-map-tree/index.js +2 -2
  189. package/dist/feature-libraries/flex-map-tree/index.js.map +1 -1
  190. package/dist/feature-libraries/flex-map-tree/mapTreeNode.d.ts +57 -56
  191. package/dist/feature-libraries/flex-map-tree/mapTreeNode.d.ts.map +1 -1
  192. package/dist/feature-libraries/flex-map-tree/mapTreeNode.js +168 -217
  193. package/dist/feature-libraries/flex-map-tree/mapTreeNode.js.map +1 -1
  194. package/dist/feature-libraries/flex-tree/context.d.ts +0 -1
  195. package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
  196. package/dist/feature-libraries/flex-tree/context.js.map +1 -1
  197. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +18 -295
  198. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  199. package/dist/feature-libraries/flex-tree/flexTreeTypes.js +0 -6
  200. package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  201. package/dist/feature-libraries/flex-tree/index.d.ts +3 -2
  202. package/dist/feature-libraries/flex-tree/index.d.ts.map +1 -1
  203. package/dist/feature-libraries/flex-tree/index.js +5 -1
  204. package/dist/feature-libraries/flex-tree/index.js.map +1 -1
  205. package/dist/feature-libraries/flex-tree/lazyEntity.d.ts +1 -2
  206. package/dist/feature-libraries/flex-tree/lazyEntity.d.ts.map +1 -1
  207. package/dist/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
  208. package/dist/feature-libraries/flex-tree/lazyField.d.ts +9 -27
  209. package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  210. package/dist/feature-libraries/flex-tree/lazyField.js +36 -117
  211. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  212. package/dist/feature-libraries/flex-tree/lazyNode.d.ts +2 -13
  213. package/dist/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
  214. package/dist/feature-libraries/flex-tree/lazyNode.js +3 -69
  215. package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  216. package/dist/feature-libraries/flex-tree/treeEvents.d.ts +0 -2
  217. package/dist/feature-libraries/flex-tree/treeEvents.d.ts.map +1 -1
  218. package/dist/feature-libraries/flex-tree/treeEvents.js.map +1 -1
  219. package/dist/feature-libraries/flex-tree/utilities.d.ts +2 -1
  220. package/dist/feature-libraries/flex-tree/utilities.d.ts.map +1 -1
  221. package/dist/feature-libraries/flex-tree/utilities.js +4 -0
  222. package/dist/feature-libraries/flex-tree/utilities.js.map +1 -1
  223. package/dist/feature-libraries/forest-summary/codec.js +2 -2
  224. package/dist/feature-libraries/forest-summary/codec.js.map +1 -1
  225. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  226. package/dist/feature-libraries/forest-summary/forestSummarizer.js +1 -1
  227. package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  228. package/dist/feature-libraries/index.d.ts +6 -8
  229. package/dist/feature-libraries/index.d.ts.map +1 -1
  230. package/dist/feature-libraries/index.js +10 -18
  231. package/dist/feature-libraries/index.js.map +1 -1
  232. package/dist/feature-libraries/mapTreeCursor.d.ts +6 -2
  233. package/dist/feature-libraries/mapTreeCursor.d.ts.map +1 -1
  234. package/dist/feature-libraries/mapTreeCursor.js +9 -1
  235. package/dist/feature-libraries/mapTreeCursor.js.map +1 -1
  236. package/dist/feature-libraries/memoizedIdRangeAllocator.d.ts +0 -4
  237. package/dist/feature-libraries/memoizedIdRangeAllocator.d.ts.map +1 -1
  238. package/dist/feature-libraries/memoizedIdRangeAllocator.js +0 -1
  239. package/dist/feature-libraries/memoizedIdRangeAllocator.js.map +1 -1
  240. package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts +0 -2
  241. package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
  242. package/dist/feature-libraries/modular-schema/crossFieldQueries.js +0 -1
  243. package/dist/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
  244. package/dist/feature-libraries/modular-schema/discrepancies.d.ts +18 -0
  245. package/dist/feature-libraries/modular-schema/discrepancies.d.ts.map +1 -1
  246. package/dist/feature-libraries/modular-schema/discrepancies.js +108 -5
  247. package/dist/feature-libraries/modular-schema/discrepancies.js.map +1 -1
  248. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +0 -8
  249. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  250. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js +0 -1
  251. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  252. package/dist/feature-libraries/modular-schema/fieldKind.d.ts +1 -3
  253. package/dist/feature-libraries/modular-schema/fieldKind.d.ts.map +1 -1
  254. package/dist/feature-libraries/modular-schema/fieldKind.js +1 -2
  255. package/dist/feature-libraries/modular-schema/fieldKind.js.map +1 -1
  256. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts +1 -2
  257. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  258. package/dist/feature-libraries/modular-schema/genericFieldKind.js +57 -85
  259. package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  260. package/dist/feature-libraries/modular-schema/genericFieldKindCodecs.d.ts +1 -1
  261. package/dist/feature-libraries/modular-schema/genericFieldKindCodecs.d.ts.map +1 -1
  262. package/dist/feature-libraries/modular-schema/genericFieldKindCodecs.js +5 -8
  263. package/dist/feature-libraries/modular-schema/genericFieldKindCodecs.js.map +1 -1
  264. package/dist/feature-libraries/modular-schema/genericFieldKindTypes.d.ts +3 -14
  265. package/dist/feature-libraries/modular-schema/genericFieldKindTypes.d.ts.map +1 -1
  266. package/dist/feature-libraries/modular-schema/genericFieldKindTypes.js +6 -0
  267. package/dist/feature-libraries/modular-schema/genericFieldKindTypes.js.map +1 -1
  268. package/dist/feature-libraries/modular-schema/index.d.ts +2 -2
  269. package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
  270. package/dist/feature-libraries/modular-schema/index.js +2 -1
  271. package/dist/feature-libraries/modular-schema/index.js.map +1 -1
  272. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  273. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +40 -23
  274. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  275. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +9 -8
  276. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  277. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +205 -244
  278. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  279. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts +8 -14
  280. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  281. package/dist/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  282. package/dist/feature-libraries/node-key/nodeKey.d.ts +0 -4
  283. package/dist/feature-libraries/node-key/nodeKey.d.ts.map +1 -1
  284. package/dist/feature-libraries/node-key/nodeKey.js +0 -2
  285. package/dist/feature-libraries/node-key/nodeKey.js.map +1 -1
  286. package/dist/feature-libraries/node-key/nodeKeyManager.d.ts +0 -1
  287. package/dist/feature-libraries/node-key/nodeKeyManager.d.ts.map +1 -1
  288. package/dist/feature-libraries/node-key/nodeKeyManager.js.map +1 -1
  289. package/dist/feature-libraries/object-forest/objectForest.d.ts +3 -2
  290. package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  291. package/dist/feature-libraries/object-forest/objectForest.js +6 -14
  292. package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
  293. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts +6 -6
  294. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts.map +1 -1
  295. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts +7 -7
  296. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts.map +1 -1
  297. package/dist/feature-libraries/schemaBuilderBase.d.ts +2 -28
  298. package/dist/feature-libraries/schemaBuilderBase.d.ts.map +1 -1
  299. package/dist/feature-libraries/schemaBuilderBase.js +1 -27
  300. package/dist/feature-libraries/schemaBuilderBase.js.map +1 -1
  301. package/dist/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  302. package/dist/feature-libraries/sequence-field/compose.js +24 -21
  303. package/dist/feature-libraries/sequence-field/compose.js.map +1 -1
  304. package/dist/feature-libraries/sequence-field/formatV2.d.ts +3 -3
  305. package/dist/feature-libraries/sequence-field/formatV2.d.ts.map +1 -1
  306. package/dist/feature-libraries/sequence-field/formatV2.js +7 -6
  307. package/dist/feature-libraries/sequence-field/formatV2.js.map +1 -1
  308. package/dist/feature-libraries/sequence-field/formatV3.d.ts +195 -0
  309. package/dist/feature-libraries/sequence-field/formatV3.d.ts.map +1 -0
  310. package/dist/feature-libraries/sequence-field/formatV3.js +23 -0
  311. package/dist/feature-libraries/sequence-field/formatV3.js.map +1 -0
  312. package/dist/feature-libraries/sequence-field/helperTypes.d.ts +11 -0
  313. package/dist/feature-libraries/sequence-field/helperTypes.d.ts.map +1 -1
  314. package/dist/feature-libraries/sequence-field/helperTypes.js.map +1 -1
  315. package/dist/feature-libraries/sequence-field/index.d.ts +1 -1
  316. package/dist/feature-libraries/sequence-field/index.d.ts.map +1 -1
  317. package/dist/feature-libraries/sequence-field/index.js.map +1 -1
  318. package/dist/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  319. package/dist/feature-libraries/sequence-field/invert.js +21 -13
  320. package/dist/feature-libraries/sequence-field/invert.js.map +1 -1
  321. package/dist/feature-libraries/sequence-field/markQueue.js +1 -1
  322. package/dist/feature-libraries/sequence-field/markQueue.js.map +1 -1
  323. package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts +2 -2
  324. package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
  325. package/dist/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
  326. package/dist/feature-libraries/sequence-field/rebase.d.ts.map +1 -1
  327. package/dist/feature-libraries/sequence-field/rebase.js +24 -6
  328. package/dist/feature-libraries/sequence-field/rebase.js.map +1 -1
  329. package/dist/feature-libraries/sequence-field/replaceRevisions.d.ts.map +1 -1
  330. package/dist/feature-libraries/sequence-field/replaceRevisions.js +16 -3
  331. package/dist/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
  332. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.d.ts.map +1 -1
  333. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.js +38 -4
  334. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.js.map +1 -1
  335. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +4 -1
  336. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
  337. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js +54 -9
  338. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  339. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts +11 -0
  340. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -0
  341. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js +85 -0
  342. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -0
  343. package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts.map +1 -1
  344. package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.js +2 -0
  345. package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.js.map +1 -1
  346. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
  347. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js +4 -1
  348. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  349. package/dist/feature-libraries/sequence-field/types.d.ts +23 -4
  350. package/dist/feature-libraries/sequence-field/types.d.ts.map +1 -1
  351. package/dist/feature-libraries/sequence-field/types.js.map +1 -1
  352. package/dist/feature-libraries/sequence-field/utils.d.ts +5 -4
  353. package/dist/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  354. package/dist/feature-libraries/sequence-field/utils.js +70 -42
  355. package/dist/feature-libraries/sequence-field/utils.js.map +1 -1
  356. package/dist/feature-libraries/storedToViewSchema.d.ts +0 -1
  357. package/dist/feature-libraries/storedToViewSchema.d.ts.map +1 -1
  358. package/dist/feature-libraries/storedToViewSchema.js +0 -1
  359. package/dist/feature-libraries/storedToViewSchema.js.map +1 -1
  360. package/dist/feature-libraries/treeCursorUtils.d.ts +0 -6
  361. package/dist/feature-libraries/treeCursorUtils.d.ts.map +1 -1
  362. package/dist/feature-libraries/treeCursorUtils.js +8 -6
  363. package/dist/feature-libraries/treeCursorUtils.js.map +1 -1
  364. package/dist/feature-libraries/treeTextCursor.d.ts +0 -2
  365. package/dist/feature-libraries/treeTextCursor.d.ts.map +1 -1
  366. package/dist/feature-libraries/treeTextCursor.js +0 -2
  367. package/dist/feature-libraries/treeTextCursor.js.map +1 -1
  368. package/dist/feature-libraries/typed-schema/flexList.d.ts +0 -3
  369. package/dist/feature-libraries/typed-schema/flexList.d.ts.map +1 -1
  370. package/dist/feature-libraries/typed-schema/flexList.js.map +1 -1
  371. package/dist/feature-libraries/typed-schema/index.d.ts +1 -1
  372. package/dist/feature-libraries/typed-schema/index.d.ts.map +1 -1
  373. package/dist/feature-libraries/typed-schema/index.js +1 -3
  374. package/dist/feature-libraries/typed-schema/index.js.map +1 -1
  375. package/dist/feature-libraries/typed-schema/schemaCollection.d.ts.map +1 -1
  376. package/dist/feature-libraries/typed-schema/schemaCollection.js +0 -4
  377. package/dist/feature-libraries/typed-schema/schemaCollection.js.map +1 -1
  378. package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts +2 -41
  379. package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +1 -1
  380. package/dist/feature-libraries/typed-schema/typedTreeSchema.js +1 -40
  381. package/dist/feature-libraries/typed-schema/typedTreeSchema.js.map +1 -1
  382. package/dist/feature-libraries/typed-schema/view.d.ts +0 -1
  383. package/dist/feature-libraries/typed-schema/view.d.ts.map +1 -1
  384. package/dist/feature-libraries/typed-schema/view.js.map +1 -1
  385. package/dist/index.d.ts +8 -9
  386. package/dist/index.d.ts.map +1 -1
  387. package/dist/index.js +31 -90
  388. package/dist/index.js.map +1 -1
  389. package/dist/internalTypes.d.ts +1 -1
  390. package/dist/internalTypes.d.ts.map +1 -1
  391. package/dist/internalTypes.js.map +1 -1
  392. package/dist/packageVersion.d.ts +1 -1
  393. package/dist/packageVersion.d.ts.map +1 -1
  394. package/dist/packageVersion.js +1 -1
  395. package/dist/packageVersion.js.map +1 -1
  396. package/dist/public.d.ts +3 -1
  397. package/dist/shared-tree/schematizeTree.d.ts +2 -11
  398. package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
  399. package/dist/shared-tree/schematizeTree.js +13 -2
  400. package/dist/shared-tree/schematizeTree.js.map +1 -1
  401. package/dist/shared-tree/schematizingTreeView.d.ts +4 -4
  402. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  403. package/dist/shared-tree/schematizingTreeView.js +2 -2
  404. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  405. package/dist/shared-tree/sharedTree.d.ts +9 -18
  406. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  407. package/dist/shared-tree/sharedTree.js +12 -9
  408. package/dist/shared-tree/sharedTree.js.map +1 -1
  409. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  410. package/dist/shared-tree/sharedTreeChangeCodecs.js +4 -0
  411. package/dist/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  412. package/dist/shared-tree/sharedTreeChangeEnricher.js +1 -1
  413. package/dist/shared-tree/sharedTreeChangeEnricher.js.map +1 -1
  414. package/dist/shared-tree/sharedTreeChangeFamily.js +2 -2
  415. package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  416. package/dist/shared-tree/sharedTreeEditBuilder.d.ts +0 -2
  417. package/dist/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
  418. package/dist/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  419. package/dist/shared-tree/treeApi.js +3 -3
  420. package/dist/shared-tree/treeApi.js.map +1 -1
  421. package/dist/shared-tree/treeCheckout.d.ts +10 -6
  422. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  423. package/dist/shared-tree/treeCheckout.js +51 -6
  424. package/dist/shared-tree/treeCheckout.js.map +1 -1
  425. package/dist/shared-tree/treeView.d.ts +3 -6
  426. package/dist/shared-tree/treeView.d.ts.map +1 -1
  427. package/dist/shared-tree/treeView.js +7 -3
  428. package/dist/shared-tree/treeView.js.map +1 -1
  429. package/dist/shared-tree-core/branch.d.ts +6 -0
  430. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  431. package/dist/shared-tree-core/branch.js +13 -6
  432. package/dist/shared-tree-core/branch.js.map +1 -1
  433. package/dist/shared-tree-core/defaultResubmitMachine.js +3 -3
  434. package/dist/shared-tree-core/defaultResubmitMachine.js.map +1 -1
  435. package/dist/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  436. package/dist/shared-tree-core/editManagerCodecs.js +1 -0
  437. package/dist/shared-tree-core/editManagerCodecs.js.map +1 -1
  438. package/dist/shared-tree-core/editManagerFormat.d.ts +2 -2
  439. package/dist/shared-tree-core/editManagerFormat.d.ts.map +1 -1
  440. package/dist/shared-tree-core/editManagerFormat.js +6 -1
  441. package/dist/shared-tree-core/editManagerFormat.js.map +1 -1
  442. package/dist/shared-tree-core/messageCodecs.d.ts.map +1 -1
  443. package/dist/shared-tree-core/messageCodecs.js +1 -0
  444. package/dist/shared-tree-core/messageCodecs.js.map +1 -1
  445. package/dist/shared-tree-core/sharedTreeCore.d.ts +4 -0
  446. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  447. package/dist/shared-tree-core/sharedTreeCore.js +9 -1
  448. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  449. package/dist/simple-tree/api/create.d.ts +54 -0
  450. package/dist/simple-tree/api/create.d.ts.map +1 -0
  451. package/dist/simple-tree/api/create.js +99 -0
  452. package/dist/simple-tree/api/create.js.map +1 -0
  453. package/dist/simple-tree/api/index.d.ts +12 -0
  454. package/dist/simple-tree/api/index.d.ts.map +1 -0
  455. package/dist/simple-tree/api/index.js +28 -0
  456. package/dist/simple-tree/api/index.js.map +1 -0
  457. package/{lib/simple-tree → dist/simple-tree/api}/schemaCreationUtilities.d.ts +7 -4
  458. package/dist/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -0
  459. package/dist/simple-tree/{schemaCreationUtilities.js → api/schemaCreationUtilities.js} +1 -1
  460. package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -0
  461. package/dist/simple-tree/{schemaFactory.d.ts → api/schemaFactory.d.ts} +15 -14
  462. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -0
  463. package/dist/simple-tree/{schemaFactory.js → api/schemaFactory.js} +10 -9
  464. package/dist/simple-tree/api/schemaFactory.js.map +1 -0
  465. package/{lib/simple-tree → dist/simple-tree/api}/schemaFactoryRecursive.d.ts +40 -7
  466. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -0
  467. package/dist/simple-tree/{schemaFactoryRecursive.js → api/schemaFactoryRecursive.js} +1 -1
  468. package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -0
  469. package/dist/simple-tree/api/testRecursiveDomain.d.ts +62 -0
  470. package/dist/simple-tree/api/testRecursiveDomain.d.ts.map +1 -0
  471. package/dist/simple-tree/api/testRecursiveDomain.js.map +1 -0
  472. package/{lib/simple-tree → dist/simple-tree/api}/tree.d.ts +111 -20
  473. package/dist/simple-tree/api/tree.d.ts.map +1 -0
  474. package/dist/simple-tree/api/tree.js +173 -0
  475. package/dist/simple-tree/api/tree.js.map +1 -0
  476. package/dist/simple-tree/api/treeNodeApi.d.ts +87 -0
  477. package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -0
  478. package/dist/simple-tree/{treeNodeApi.js → api/treeNodeApi.js} +33 -33
  479. package/dist/simple-tree/api/treeNodeApi.js.map +1 -0
  480. package/dist/simple-tree/api/verboseTree.d.ts +136 -0
  481. package/dist/simple-tree/api/verboseTree.d.ts.map +1 -0
  482. package/dist/simple-tree/api/verboseTree.js +220 -0
  483. package/dist/simple-tree/api/verboseTree.js.map +1 -0
  484. package/dist/simple-tree/arrayNode.d.ts +3 -3
  485. package/dist/simple-tree/arrayNode.d.ts.map +1 -1
  486. package/dist/simple-tree/arrayNode.js +70 -69
  487. package/dist/simple-tree/arrayNode.js.map +1 -1
  488. package/dist/simple-tree/core/index.d.ts +10 -0
  489. package/dist/simple-tree/core/index.d.ts.map +1 -0
  490. package/dist/simple-tree/core/index.js +27 -0
  491. package/dist/simple-tree/core/index.js.map +1 -0
  492. package/{lib/simple-tree → dist/simple-tree/core}/schemaCaching.d.ts +2 -9
  493. package/dist/simple-tree/core/schemaCaching.d.ts.map +1 -0
  494. package/dist/simple-tree/{schemaCaching.js → core/schemaCaching.js} +2 -23
  495. package/dist/simple-tree/core/schemaCaching.js.map +1 -0
  496. package/dist/simple-tree/core/treeNodeKernel.d.ts +57 -0
  497. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -0
  498. package/dist/simple-tree/core/treeNodeKernel.js +128 -0
  499. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -0
  500. package/dist/simple-tree/core/treeNodeSchema.d.ts +149 -0
  501. package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -0
  502. package/dist/simple-tree/core/treeNodeSchema.js +35 -0
  503. package/dist/simple-tree/core/treeNodeSchema.js.map +1 -0
  504. package/dist/simple-tree/core/types.d.ts +178 -0
  505. package/dist/simple-tree/core/types.d.ts.map +1 -0
  506. package/dist/simple-tree/core/types.js +117 -0
  507. package/dist/simple-tree/core/types.js.map +1 -0
  508. package/dist/simple-tree/core/withType.d.ts +82 -0
  509. package/dist/simple-tree/core/withType.d.ts.map +1 -0
  510. package/dist/simple-tree/core/withType.js +39 -0
  511. package/dist/simple-tree/core/withType.js.map +1 -0
  512. package/dist/simple-tree/getJsonSchema.d.ts +55 -0
  513. package/dist/simple-tree/getJsonSchema.d.ts.map +1 -0
  514. package/dist/simple-tree/getJsonSchema.js +69 -0
  515. package/dist/simple-tree/getJsonSchema.js.map +1 -0
  516. package/dist/simple-tree/getSimpleFieldSchema.d.ts +14 -0
  517. package/dist/simple-tree/getSimpleFieldSchema.d.ts.map +1 -0
  518. package/dist/simple-tree/getSimpleFieldSchema.js +29 -0
  519. package/dist/simple-tree/getSimpleFieldSchema.js.map +1 -0
  520. package/dist/simple-tree/getSimpleSchema.d.ts +58 -0
  521. package/dist/simple-tree/getSimpleSchema.d.ts.map +1 -0
  522. package/dist/simple-tree/getSimpleSchema.js +68 -0
  523. package/dist/simple-tree/getSimpleSchema.js.map +1 -0
  524. package/dist/simple-tree/index.d.ts +12 -13
  525. package/dist/simple-tree/index.d.ts.map +1 -1
  526. package/dist/simple-tree/index.js +27 -23
  527. package/dist/simple-tree/index.js.map +1 -1
  528. package/dist/simple-tree/jsonSchema.d.ts +206 -0
  529. package/dist/simple-tree/jsonSchema.d.ts.map +1 -0
  530. package/dist/{feature-libraries/schema-aware/index.js → simple-tree/jsonSchema.js} +1 -1
  531. package/dist/simple-tree/jsonSchema.js.map +1 -0
  532. package/dist/simple-tree/leafNodeSchema.d.ts +1 -1
  533. package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
  534. package/dist/simple-tree/leafNodeSchema.js +3 -4
  535. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  536. package/dist/simple-tree/mapNode.d.ts +9 -3
  537. package/dist/simple-tree/mapNode.d.ts.map +1 -1
  538. package/dist/simple-tree/mapNode.js +33 -35
  539. package/dist/simple-tree/mapNode.js.map +1 -1
  540. package/dist/simple-tree/objectNode.d.ts +18 -16
  541. package/dist/simple-tree/objectNode.d.ts.map +1 -1
  542. package/dist/simple-tree/objectNode.js +43 -44
  543. package/dist/simple-tree/objectNode.js.map +1 -1
  544. package/dist/simple-tree/objectNodeTypes.d.ts +38 -0
  545. package/dist/simple-tree/objectNodeTypes.d.ts.map +1 -0
  546. package/dist/simple-tree/objectNodeTypes.js +19 -0
  547. package/dist/simple-tree/objectNodeTypes.js.map +1 -0
  548. package/dist/simple-tree/proxies.d.ts +6 -25
  549. package/dist/simple-tree/proxies.d.ts.map +1 -1
  550. package/dist/simple-tree/proxies.js +54 -81
  551. package/dist/simple-tree/proxies.js.map +1 -1
  552. package/dist/simple-tree/proxyBinding.d.ts +46 -19
  553. package/dist/simple-tree/proxyBinding.d.ts.map +1 -1
  554. package/dist/simple-tree/proxyBinding.js +101 -44
  555. package/dist/simple-tree/proxyBinding.js.map +1 -1
  556. package/dist/simple-tree/schemaTypes.d.ts +10 -159
  557. package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
  558. package/dist/simple-tree/schemaTypes.js +11 -42
  559. package/dist/simple-tree/schemaTypes.js.map +1 -1
  560. package/dist/simple-tree/simpleSchema.d.ts +124 -0
  561. package/dist/simple-tree/simpleSchema.d.ts.map +1 -0
  562. package/dist/{feature-libraries/schema-aware/schemaAware.js → simple-tree/simpleSchema.js} +1 -1
  563. package/dist/simple-tree/simpleSchema.js.map +1 -0
  564. package/dist/simple-tree/simpleSchemaToJsonSchema.d.ts +12 -0
  565. package/dist/simple-tree/simpleSchemaToJsonSchema.d.ts.map +1 -0
  566. package/dist/simple-tree/simpleSchemaToJsonSchema.js +146 -0
  567. package/dist/simple-tree/simpleSchemaToJsonSchema.js.map +1 -0
  568. package/dist/simple-tree/toFlexSchema.d.ts +4 -12
  569. package/dist/simple-tree/toFlexSchema.d.ts.map +1 -1
  570. package/dist/simple-tree/toFlexSchema.js +42 -52
  571. package/dist/simple-tree/toFlexSchema.js.map +1 -1
  572. package/dist/simple-tree/toMapTree.d.ts +39 -39
  573. package/dist/simple-tree/toMapTree.d.ts.map +1 -1
  574. package/dist/simple-tree/toMapTree.js +227 -171
  575. package/dist/simple-tree/toMapTree.js.map +1 -1
  576. package/dist/simple-tree/{types.d.ts → treeNodeValid.d.ts} +2 -80
  577. package/dist/simple-tree/treeNodeValid.d.ts.map +1 -0
  578. package/dist/simple-tree/{types.js → treeNodeValid.js} +102 -107
  579. package/dist/simple-tree/treeNodeValid.js.map +1 -0
  580. package/dist/simple-tree/typesUnsafe.d.ts +35 -4
  581. package/dist/simple-tree/typesUnsafe.d.ts.map +1 -1
  582. package/dist/simple-tree/typesUnsafe.js.map +1 -1
  583. package/dist/simple-tree/viewSchemaToSimpleSchema.d.ts +11 -0
  584. package/dist/simple-tree/viewSchemaToSimpleSchema.d.ts.map +1 -0
  585. package/dist/simple-tree/viewSchemaToSimpleSchema.js +171 -0
  586. package/dist/simple-tree/viewSchemaToSimpleSchema.js.map +1 -0
  587. package/dist/util/brand.d.ts +0 -3
  588. package/dist/util/brand.d.ts.map +1 -1
  589. package/dist/util/brand.js +1 -2
  590. package/dist/util/brand.js.map +1 -1
  591. package/dist/util/brandedMap.d.ts +0 -5
  592. package/dist/util/brandedMap.d.ts.map +1 -1
  593. package/dist/util/brandedMap.js +0 -1
  594. package/dist/util/brandedMap.js.map +1 -1
  595. package/dist/util/breakable.js +1 -1
  596. package/dist/util/breakable.js.map +1 -1
  597. package/dist/util/idAllocator.d.ts +0 -2
  598. package/dist/util/idAllocator.d.ts.map +1 -1
  599. package/dist/util/idAllocator.js +0 -1
  600. package/dist/util/idAllocator.js.map +1 -1
  601. package/dist/util/index.d.ts +2 -2
  602. package/dist/util/index.d.ts.map +1 -1
  603. package/dist/util/index.js +4 -2
  604. package/dist/util/index.js.map +1 -1
  605. package/dist/util/nestedMap.d.ts +5 -19
  606. package/dist/util/nestedMap.d.ts.map +1 -1
  607. package/dist/util/nestedMap.js +17 -17
  608. package/dist/util/nestedMap.js.map +1 -1
  609. package/dist/util/opaque.d.ts +0 -4
  610. package/dist/util/opaque.d.ts.map +1 -1
  611. package/dist/util/opaque.js +0 -2
  612. package/dist/util/opaque.js.map +1 -1
  613. package/dist/util/rangeMap.d.ts +0 -2
  614. package/dist/util/rangeMap.d.ts.map +1 -1
  615. package/dist/util/rangeMap.js +4 -3
  616. package/dist/util/rangeMap.js.map +1 -1
  617. package/dist/util/transactionResult.d.ts +0 -1
  618. package/dist/util/transactionResult.d.ts.map +1 -1
  619. package/dist/util/transactionResult.js +0 -1
  620. package/dist/util/transactionResult.js.map +1 -1
  621. package/dist/util/typeCheck.d.ts +2 -20
  622. package/dist/util/typeCheck.d.ts.map +1 -1
  623. package/dist/util/typeCheck.js.map +1 -1
  624. package/dist/util/typeCheckTests.d.ts +4 -4
  625. package/dist/util/typeCheckTests.d.ts.map +1 -1
  626. package/dist/util/typeCheckTests.js.map +1 -1
  627. package/dist/util/typeUtils.d.ts +0 -7
  628. package/dist/util/typeUtils.d.ts.map +1 -1
  629. package/dist/util/typeUtils.js.map +1 -1
  630. package/dist/util/utils.d.ts +6 -8
  631. package/dist/util/utils.d.ts.map +1 -1
  632. package/dist/util/utils.js +14 -5
  633. package/dist/util/utils.js.map +1 -1
  634. package/lib/beta.d.ts +3 -1
  635. package/lib/codec/discriminatedUnions.d.ts +11 -5
  636. package/lib/codec/discriminatedUnions.d.ts.map +1 -1
  637. package/lib/codec/discriminatedUnions.js.map +1 -1
  638. package/lib/codec/index.d.ts +1 -1
  639. package/lib/codec/index.d.ts.map +1 -1
  640. package/lib/codec/index.js +1 -1
  641. package/lib/codec/index.js.map +1 -1
  642. package/lib/core/forest/editableForest.d.ts +1 -5
  643. package/lib/core/forest/editableForest.d.ts.map +1 -1
  644. package/lib/core/forest/editableForest.js +4 -2
  645. package/lib/core/forest/editableForest.js.map +1 -1
  646. package/lib/core/forest/forest.d.ts +0 -6
  647. package/lib/core/forest/forest.d.ts.map +1 -1
  648. package/lib/core/forest/forest.js +0 -2
  649. package/lib/core/forest/forest.js.map +1 -1
  650. package/lib/core/index.d.ts +2 -2
  651. package/lib/core/index.d.ts.map +1 -1
  652. package/lib/core/index.js +2 -2
  653. package/lib/core/index.js.map +1 -1
  654. package/lib/core/rebase/changeRebaser.d.ts +0 -4
  655. package/lib/core/rebase/changeRebaser.d.ts.map +1 -1
  656. package/lib/core/rebase/changeRebaser.js.map +1 -1
  657. package/lib/core/rebase/index.d.ts +1 -1
  658. package/lib/core/rebase/index.d.ts.map +1 -1
  659. package/lib/core/rebase/index.js +1 -1
  660. package/lib/core/rebase/index.js.map +1 -1
  661. package/lib/core/rebase/types.d.ts +1 -8
  662. package/lib/core/rebase/types.d.ts.map +1 -1
  663. package/lib/core/rebase/types.js +1 -7
  664. package/lib/core/rebase/types.js.map +1 -1
  665. package/lib/core/rebase/utils.d.ts +0 -1
  666. package/lib/core/rebase/utils.d.ts.map +1 -1
  667. package/lib/core/rebase/utils.js +13 -8
  668. package/lib/core/rebase/utils.js.map +1 -1
  669. package/lib/core/schema-stored/multiplicity.d.ts +0 -1
  670. package/lib/core/schema-stored/multiplicity.d.ts.map +1 -1
  671. package/lib/core/schema-stored/multiplicity.js +0 -1
  672. package/lib/core/schema-stored/multiplicity.js.map +1 -1
  673. package/lib/core/schema-stored/schema.d.ts +0 -7
  674. package/lib/core/schema-stored/schema.d.ts.map +1 -1
  675. package/lib/core/schema-stored/schema.js +0 -4
  676. package/lib/core/schema-stored/schema.js.map +1 -1
  677. package/lib/core/schema-stored/storedSchemaRepository.d.ts +0 -3
  678. package/lib/core/schema-stored/storedSchemaRepository.d.ts.map +1 -1
  679. package/lib/core/schema-stored/storedSchemaRepository.js.map +1 -1
  680. package/lib/core/schema-view/view.d.ts +0 -3
  681. package/lib/core/schema-view/view.d.ts.map +1 -1
  682. package/lib/core/schema-view/view.js +0 -1
  683. package/lib/core/schema-view/view.js.map +1 -1
  684. package/lib/core/tree/anchorSet.d.ts +1 -10
  685. package/lib/core/tree/anchorSet.d.ts.map +1 -1
  686. package/lib/core/tree/anchorSet.js +14 -4
  687. package/lib/core/tree/anchorSet.js.map +1 -1
  688. package/lib/core/tree/cursor.d.ts +1 -6
  689. package/lib/core/tree/cursor.d.ts.map +1 -1
  690. package/lib/core/tree/cursor.js +0 -2
  691. package/lib/core/tree/cursor.js.map +1 -1
  692. package/lib/core/tree/delta.d.ts +0 -11
  693. package/lib/core/tree/delta.d.ts.map +1 -1
  694. package/lib/core/tree/delta.js.map +1 -1
  695. package/lib/core/tree/detachedFieldIndex.d.ts +48 -11
  696. package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
  697. package/lib/core/tree/detachedFieldIndex.js +145 -21
  698. package/lib/core/tree/detachedFieldIndex.js.map +1 -1
  699. package/lib/core/tree/detachedFieldIndexCodec.d.ts.map +1 -1
  700. package/lib/core/tree/detachedFieldIndexCodec.js +17 -7
  701. package/lib/core/tree/detachedFieldIndexCodec.js.map +1 -1
  702. package/lib/core/tree/detachedFieldIndexFormat.d.ts +1 -1
  703. package/lib/core/tree/detachedFieldIndexFormat.d.ts.map +1 -1
  704. package/lib/core/tree/detachedFieldIndexFormat.js.map +1 -1
  705. package/lib/core/tree/detachedFieldIndexTypes.d.ts +38 -4
  706. package/lib/core/tree/detachedFieldIndexTypes.d.ts.map +1 -1
  707. package/lib/core/tree/detachedFieldIndexTypes.js.map +1 -1
  708. package/lib/core/tree/index.d.ts +3 -2
  709. package/lib/core/tree/index.d.ts.map +1 -1
  710. package/lib/core/tree/index.js +1 -0
  711. package/lib/core/tree/index.js.map +1 -1
  712. package/lib/core/tree/mapTree.d.ts +20 -4
  713. package/lib/core/tree/mapTree.d.ts.map +1 -1
  714. package/lib/core/tree/mapTree.js +27 -1
  715. package/lib/core/tree/mapTree.js.map +1 -1
  716. package/lib/core/tree/pathTree.d.ts +0 -11
  717. package/lib/core/tree/pathTree.d.ts.map +1 -1
  718. package/lib/core/tree/pathTree.js.map +1 -1
  719. package/lib/core/tree/treeTextFormat.d.ts.map +1 -1
  720. package/lib/core/tree/treeTextFormat.js +3 -2
  721. package/lib/core/tree/treeTextFormat.js.map +1 -1
  722. package/lib/core/tree/types.d.ts +0 -11
  723. package/lib/core/tree/types.d.ts.map +1 -1
  724. package/lib/core/tree/types.js +0 -4
  725. package/lib/core/tree/types.js.map +1 -1
  726. package/lib/core/tree/visitDelta.d.ts +3 -2
  727. package/lib/core/tree/visitDelta.d.ts.map +1 -1
  728. package/lib/core/tree/visitDelta.js +33 -17
  729. package/lib/core/tree/visitDelta.js.map +1 -1
  730. package/lib/core/tree/visitPath.d.ts +0 -2
  731. package/lib/core/tree/visitPath.d.ts.map +1 -1
  732. package/lib/core/tree/visitPath.js.map +1 -1
  733. package/lib/core/tree/visitorUtils.d.ts +3 -4
  734. package/lib/core/tree/visitorUtils.d.ts.map +1 -1
  735. package/lib/core/tree/visitorUtils.js +4 -4
  736. package/lib/core/tree/visitorUtils.js.map +1 -1
  737. package/lib/domains/index.d.ts +1 -1
  738. package/lib/domains/index.d.ts.map +1 -1
  739. package/lib/domains/index.js +1 -1
  740. package/lib/domains/index.js.map +1 -1
  741. package/lib/domains/json/index.d.ts +1 -1
  742. package/lib/domains/json/index.d.ts.map +1 -1
  743. package/lib/domains/json/index.js +1 -1
  744. package/lib/domains/json/index.js.map +1 -1
  745. package/lib/domains/json/jsonCursor.d.ts +36 -2
  746. package/lib/domains/json/jsonCursor.d.ts.map +1 -1
  747. package/lib/domains/json/jsonCursor.js +76 -5
  748. package/lib/domains/json/jsonCursor.js.map +1 -1
  749. package/lib/domains/json/jsonDomainSchema.d.ts +13 -3
  750. package/lib/domains/json/jsonDomainSchema.d.ts.map +1 -1
  751. package/lib/domains/json/jsonDomainSchema.js +9 -1
  752. package/lib/domains/json/jsonDomainSchema.js.map +1 -1
  753. package/lib/domains/leafDomain.d.ts +0 -1
  754. package/lib/domains/leafDomain.d.ts.map +1 -1
  755. package/lib/domains/leafDomain.js +0 -1
  756. package/lib/domains/leafDomain.js.map +1 -1
  757. package/lib/domains/schemaBuilder.d.ts +1 -7
  758. package/lib/domains/schemaBuilder.d.ts.map +1 -1
  759. package/lib/domains/schemaBuilder.js +1 -11
  760. package/lib/domains/schemaBuilder.js.map +1 -1
  761. package/lib/events/events.d.ts +0 -4
  762. package/lib/events/events.d.ts.map +1 -1
  763. package/lib/events/events.js +0 -1
  764. package/lib/events/events.js.map +1 -1
  765. package/lib/feature-libraries/chunked-forest/basicChunk.d.ts.map +1 -1
  766. package/lib/feature-libraries/chunked-forest/basicChunk.js +9 -4
  767. package/lib/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
  768. package/lib/feature-libraries/chunked-forest/chunk.d.ts +1 -1
  769. package/lib/feature-libraries/chunked-forest/chunk.d.ts.map +1 -1
  770. package/lib/feature-libraries/chunked-forest/chunk.js.map +1 -1
  771. package/lib/feature-libraries/chunked-forest/chunkTree.js +4 -4
  772. package/lib/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  773. package/lib/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
  774. package/lib/feature-libraries/chunked-forest/chunkedForest.js +8 -6
  775. package/lib/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  776. package/lib/feature-libraries/chunked-forest/codec/chunkCodecUtilities.js +2 -2
  777. package/lib/feature-libraries/chunked-forest/codec/chunkCodecUtilities.js.map +1 -1
  778. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  779. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js +9 -6
  780. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  781. package/lib/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
  782. package/lib/feature-libraries/chunked-forest/uniformChunk.js +6 -4
  783. package/lib/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
  784. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +12 -24
  785. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  786. package/lib/feature-libraries/default-schema/defaultEditBuilder.js +6 -16
  787. package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  788. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +0 -6
  789. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  790. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +11 -1
  791. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  792. package/lib/feature-libraries/default-schema/defaultSchema.d.ts +0 -1
  793. package/lib/feature-libraries/default-schema/defaultSchema.d.ts.map +1 -1
  794. package/lib/feature-libraries/default-schema/defaultSchema.js +0 -1
  795. package/lib/feature-libraries/default-schema/defaultSchema.js.map +1 -1
  796. package/lib/feature-libraries/default-schema/index.d.ts +1 -1
  797. package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
  798. package/lib/feature-libraries/default-schema/index.js +1 -1
  799. package/lib/feature-libraries/default-schema/index.js.map +1 -1
  800. package/lib/feature-libraries/default-schema/schemaChecker.d.ts +6 -0
  801. package/lib/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
  802. package/lib/feature-libraries/default-schema/schemaChecker.js +6 -0
  803. package/lib/feature-libraries/default-schema/schemaChecker.js.map +1 -1
  804. package/lib/feature-libraries/editableTreeBinder.d.ts +0 -67
  805. package/lib/feature-libraries/editableTreeBinder.d.ts.map +1 -1
  806. package/lib/feature-libraries/editableTreeBinder.js +7 -26
  807. package/lib/feature-libraries/editableTreeBinder.js.map +1 -1
  808. package/lib/feature-libraries/fieldGenerator.d.ts +0 -3
  809. package/lib/feature-libraries/fieldGenerator.d.ts.map +1 -1
  810. package/lib/feature-libraries/fieldGenerator.js +0 -1
  811. package/lib/feature-libraries/fieldGenerator.js.map +1 -1
  812. package/lib/feature-libraries/flex-map-tree/index.d.ts +1 -1
  813. package/lib/feature-libraries/flex-map-tree/index.d.ts.map +1 -1
  814. package/lib/feature-libraries/flex-map-tree/index.js +1 -1
  815. package/lib/feature-libraries/flex-map-tree/index.js.map +1 -1
  816. package/lib/feature-libraries/flex-map-tree/mapTreeNode.d.ts +57 -56
  817. package/lib/feature-libraries/flex-map-tree/mapTreeNode.d.ts.map +1 -1
  818. package/lib/feature-libraries/flex-map-tree/mapTreeNode.js +169 -217
  819. package/lib/feature-libraries/flex-map-tree/mapTreeNode.js.map +1 -1
  820. package/lib/feature-libraries/flex-tree/context.d.ts +0 -1
  821. package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
  822. package/lib/feature-libraries/flex-tree/context.js.map +1 -1
  823. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +18 -295
  824. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  825. package/lib/feature-libraries/flex-tree/flexTreeTypes.js +0 -6
  826. package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  827. package/lib/feature-libraries/flex-tree/index.d.ts +3 -2
  828. package/lib/feature-libraries/flex-tree/index.d.ts.map +1 -1
  829. package/lib/feature-libraries/flex-tree/index.js +2 -1
  830. package/lib/feature-libraries/flex-tree/index.js.map +1 -1
  831. package/lib/feature-libraries/flex-tree/lazyEntity.d.ts +1 -2
  832. package/lib/feature-libraries/flex-tree/lazyEntity.d.ts.map +1 -1
  833. package/lib/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
  834. package/lib/feature-libraries/flex-tree/lazyField.d.ts +9 -27
  835. package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  836. package/lib/feature-libraries/flex-tree/lazyField.js +39 -120
  837. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  838. package/lib/feature-libraries/flex-tree/lazyNode.d.ts +2 -13
  839. package/lib/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
  840. package/lib/feature-libraries/flex-tree/lazyNode.js +7 -72
  841. package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  842. package/lib/feature-libraries/flex-tree/treeEvents.d.ts +0 -2
  843. package/lib/feature-libraries/flex-tree/treeEvents.d.ts.map +1 -1
  844. package/lib/feature-libraries/flex-tree/treeEvents.js.map +1 -1
  845. package/lib/feature-libraries/flex-tree/utilities.d.ts +2 -1
  846. package/lib/feature-libraries/flex-tree/utilities.d.ts.map +1 -1
  847. package/lib/feature-libraries/flex-tree/utilities.js +4 -0
  848. package/lib/feature-libraries/flex-tree/utilities.js.map +1 -1
  849. package/lib/feature-libraries/forest-summary/codec.js +3 -3
  850. package/lib/feature-libraries/forest-summary/codec.js.map +1 -1
  851. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  852. package/lib/feature-libraries/forest-summary/forestSummarizer.js +1 -1
  853. package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  854. package/lib/feature-libraries/index.d.ts +6 -8
  855. package/lib/feature-libraries/index.d.ts.map +1 -1
  856. package/lib/feature-libraries/index.js +6 -7
  857. package/lib/feature-libraries/index.js.map +1 -1
  858. package/lib/feature-libraries/mapTreeCursor.d.ts +6 -2
  859. package/lib/feature-libraries/mapTreeCursor.d.ts.map +1 -1
  860. package/lib/feature-libraries/mapTreeCursor.js +7 -0
  861. package/lib/feature-libraries/mapTreeCursor.js.map +1 -1
  862. package/lib/feature-libraries/memoizedIdRangeAllocator.d.ts +0 -4
  863. package/lib/feature-libraries/memoizedIdRangeAllocator.d.ts.map +1 -1
  864. package/lib/feature-libraries/memoizedIdRangeAllocator.js +0 -1
  865. package/lib/feature-libraries/memoizedIdRangeAllocator.js.map +1 -1
  866. package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts +0 -2
  867. package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
  868. package/lib/feature-libraries/modular-schema/crossFieldQueries.js +0 -1
  869. package/lib/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
  870. package/lib/feature-libraries/modular-schema/discrepancies.d.ts +18 -0
  871. package/lib/feature-libraries/modular-schema/discrepancies.d.ts.map +1 -1
  872. package/lib/feature-libraries/modular-schema/discrepancies.js +106 -4
  873. package/lib/feature-libraries/modular-schema/discrepancies.js.map +1 -1
  874. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +0 -8
  875. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  876. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js +0 -1
  877. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  878. package/lib/feature-libraries/modular-schema/fieldKind.d.ts +1 -3
  879. package/lib/feature-libraries/modular-schema/fieldKind.d.ts.map +1 -1
  880. package/lib/feature-libraries/modular-schema/fieldKind.js +1 -2
  881. package/lib/feature-libraries/modular-schema/fieldKind.js.map +1 -1
  882. package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts +1 -2
  883. package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  884. package/lib/feature-libraries/modular-schema/genericFieldKind.js +56 -83
  885. package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  886. package/lib/feature-libraries/modular-schema/genericFieldKindCodecs.d.ts +1 -1
  887. package/lib/feature-libraries/modular-schema/genericFieldKindCodecs.d.ts.map +1 -1
  888. package/lib/feature-libraries/modular-schema/genericFieldKindCodecs.js +6 -9
  889. package/lib/feature-libraries/modular-schema/genericFieldKindCodecs.js.map +1 -1
  890. package/lib/feature-libraries/modular-schema/genericFieldKindTypes.d.ts +3 -14
  891. package/lib/feature-libraries/modular-schema/genericFieldKindTypes.d.ts.map +1 -1
  892. package/lib/feature-libraries/modular-schema/genericFieldKindTypes.js +4 -1
  893. package/lib/feature-libraries/modular-schema/genericFieldKindTypes.js.map +1 -1
  894. package/lib/feature-libraries/modular-schema/index.d.ts +2 -2
  895. package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
  896. package/lib/feature-libraries/modular-schema/index.js +1 -1
  897. package/lib/feature-libraries/modular-schema/index.js.map +1 -1
  898. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  899. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +43 -26
  900. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  901. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +9 -8
  902. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  903. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +182 -222
  904. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  905. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts +8 -14
  906. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  907. package/lib/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  908. package/lib/feature-libraries/node-key/nodeKey.d.ts +0 -4
  909. package/lib/feature-libraries/node-key/nodeKey.d.ts.map +1 -1
  910. package/lib/feature-libraries/node-key/nodeKey.js +0 -2
  911. package/lib/feature-libraries/node-key/nodeKey.js.map +1 -1
  912. package/lib/feature-libraries/node-key/nodeKeyManager.d.ts +0 -1
  913. package/lib/feature-libraries/node-key/nodeKeyManager.d.ts.map +1 -1
  914. package/lib/feature-libraries/node-key/nodeKeyManager.js.map +1 -1
  915. package/lib/feature-libraries/object-forest/objectForest.d.ts +3 -2
  916. package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  917. package/lib/feature-libraries/object-forest/objectForest.js +7 -15
  918. package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
  919. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts +6 -6
  920. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts.map +1 -1
  921. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts +7 -7
  922. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts.map +1 -1
  923. package/lib/feature-libraries/schemaBuilderBase.d.ts +2 -28
  924. package/lib/feature-libraries/schemaBuilderBase.d.ts.map +1 -1
  925. package/lib/feature-libraries/schemaBuilderBase.js +2 -28
  926. package/lib/feature-libraries/schemaBuilderBase.js.map +1 -1
  927. package/lib/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  928. package/lib/feature-libraries/sequence-field/compose.js +25 -22
  929. package/lib/feature-libraries/sequence-field/compose.js.map +1 -1
  930. package/lib/feature-libraries/sequence-field/formatV2.d.ts +3 -3
  931. package/lib/feature-libraries/sequence-field/formatV2.d.ts.map +1 -1
  932. package/lib/feature-libraries/sequence-field/formatV2.js +3 -3
  933. package/lib/feature-libraries/sequence-field/formatV2.js.map +1 -1
  934. package/lib/feature-libraries/sequence-field/formatV3.d.ts +195 -0
  935. package/lib/feature-libraries/sequence-field/formatV3.d.ts.map +1 -0
  936. package/lib/feature-libraries/sequence-field/formatV3.js +19 -0
  937. package/lib/feature-libraries/sequence-field/formatV3.js.map +1 -0
  938. package/lib/feature-libraries/sequence-field/helperTypes.d.ts +11 -0
  939. package/lib/feature-libraries/sequence-field/helperTypes.d.ts.map +1 -1
  940. package/lib/feature-libraries/sequence-field/helperTypes.js.map +1 -1
  941. package/lib/feature-libraries/sequence-field/index.d.ts +1 -1
  942. package/lib/feature-libraries/sequence-field/index.d.ts.map +1 -1
  943. package/lib/feature-libraries/sequence-field/index.js.map +1 -1
  944. package/lib/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  945. package/lib/feature-libraries/sequence-field/invert.js +22 -14
  946. package/lib/feature-libraries/sequence-field/invert.js.map +1 -1
  947. package/lib/feature-libraries/sequence-field/markQueue.js +2 -2
  948. package/lib/feature-libraries/sequence-field/markQueue.js.map +1 -1
  949. package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts +2 -2
  950. package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
  951. package/lib/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
  952. package/lib/feature-libraries/sequence-field/rebase.d.ts.map +1 -1
  953. package/lib/feature-libraries/sequence-field/rebase.js +25 -7
  954. package/lib/feature-libraries/sequence-field/rebase.js.map +1 -1
  955. package/lib/feature-libraries/sequence-field/replaceRevisions.d.ts.map +1 -1
  956. package/lib/feature-libraries/sequence-field/replaceRevisions.js +16 -3
  957. package/lib/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
  958. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.d.ts.map +1 -1
  959. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.js +40 -6
  960. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.js.map +1 -1
  961. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +4 -1
  962. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
  963. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js +55 -11
  964. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  965. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts +11 -0
  966. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -0
  967. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js +81 -0
  968. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -0
  969. package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts.map +1 -1
  970. package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.js +2 -0
  971. package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.js.map +1 -1
  972. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
  973. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js +5 -2
  974. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  975. package/lib/feature-libraries/sequence-field/types.d.ts +23 -4
  976. package/lib/feature-libraries/sequence-field/types.d.ts.map +1 -1
  977. package/lib/feature-libraries/sequence-field/types.js.map +1 -1
  978. package/lib/feature-libraries/sequence-field/utils.d.ts +5 -4
  979. package/lib/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  980. package/lib/feature-libraries/sequence-field/utils.js +67 -41
  981. package/lib/feature-libraries/sequence-field/utils.js.map +1 -1
  982. package/lib/feature-libraries/storedToViewSchema.d.ts +0 -1
  983. package/lib/feature-libraries/storedToViewSchema.d.ts.map +1 -1
  984. package/lib/feature-libraries/storedToViewSchema.js +0 -1
  985. package/lib/feature-libraries/storedToViewSchema.js.map +1 -1
  986. package/lib/feature-libraries/treeCursorUtils.d.ts +0 -6
  987. package/lib/feature-libraries/treeCursorUtils.d.ts.map +1 -1
  988. package/lib/feature-libraries/treeCursorUtils.js +9 -7
  989. package/lib/feature-libraries/treeCursorUtils.js.map +1 -1
  990. package/lib/feature-libraries/treeTextCursor.d.ts +0 -2
  991. package/lib/feature-libraries/treeTextCursor.d.ts.map +1 -1
  992. package/lib/feature-libraries/treeTextCursor.js +0 -2
  993. package/lib/feature-libraries/treeTextCursor.js.map +1 -1
  994. package/lib/feature-libraries/typed-schema/flexList.d.ts +0 -3
  995. package/lib/feature-libraries/typed-schema/flexList.d.ts.map +1 -1
  996. package/lib/feature-libraries/typed-schema/flexList.js.map +1 -1
  997. package/lib/feature-libraries/typed-schema/index.d.ts +1 -1
  998. package/lib/feature-libraries/typed-schema/index.d.ts.map +1 -1
  999. package/lib/feature-libraries/typed-schema/index.js +1 -1
  1000. package/lib/feature-libraries/typed-schema/index.js.map +1 -1
  1001. package/lib/feature-libraries/typed-schema/schemaCollection.d.ts.map +1 -1
  1002. package/lib/feature-libraries/typed-schema/schemaCollection.js +1 -5
  1003. package/lib/feature-libraries/typed-schema/schemaCollection.js.map +1 -1
  1004. package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts +2 -41
  1005. package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +1 -1
  1006. package/lib/feature-libraries/typed-schema/typedTreeSchema.js +1 -38
  1007. package/lib/feature-libraries/typed-schema/typedTreeSchema.js.map +1 -1
  1008. package/lib/feature-libraries/typed-schema/view.d.ts +0 -1
  1009. package/lib/feature-libraries/typed-schema/view.d.ts.map +1 -1
  1010. package/lib/feature-libraries/typed-schema/view.js.map +1 -1
  1011. package/lib/index.d.ts +8 -9
  1012. package/lib/index.d.ts.map +1 -1
  1013. package/lib/index.js +4 -9
  1014. package/lib/index.js.map +1 -1
  1015. package/lib/internalTypes.d.ts +1 -1
  1016. package/lib/internalTypes.d.ts.map +1 -1
  1017. package/lib/internalTypes.js.map +1 -1
  1018. package/lib/packageVersion.d.ts +1 -1
  1019. package/lib/packageVersion.d.ts.map +1 -1
  1020. package/lib/packageVersion.js +1 -1
  1021. package/lib/packageVersion.js.map +1 -1
  1022. package/lib/public.d.ts +3 -1
  1023. package/lib/shared-tree/schematizeTree.d.ts +2 -11
  1024. package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
  1025. package/lib/shared-tree/schematizeTree.js +15 -4
  1026. package/lib/shared-tree/schematizeTree.js.map +1 -1
  1027. package/lib/shared-tree/schematizingTreeView.d.ts +4 -4
  1028. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  1029. package/lib/shared-tree/schematizingTreeView.js +3 -3
  1030. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  1031. package/lib/shared-tree/sharedTree.d.ts +9 -18
  1032. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  1033. package/lib/shared-tree/sharedTree.js +14 -11
  1034. package/lib/shared-tree/sharedTree.js.map +1 -1
  1035. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  1036. package/lib/shared-tree/sharedTreeChangeCodecs.js +4 -0
  1037. package/lib/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  1038. package/lib/shared-tree/sharedTreeChangeEnricher.js +1 -1
  1039. package/lib/shared-tree/sharedTreeChangeEnricher.js.map +1 -1
  1040. package/lib/shared-tree/sharedTreeChangeFamily.js +3 -3
  1041. package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  1042. package/lib/shared-tree/sharedTreeEditBuilder.d.ts +0 -2
  1043. package/lib/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
  1044. package/lib/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  1045. package/lib/shared-tree/treeApi.js +4 -4
  1046. package/lib/shared-tree/treeApi.js.map +1 -1
  1047. package/lib/shared-tree/treeCheckout.d.ts +10 -6
  1048. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  1049. package/lib/shared-tree/treeCheckout.js +52 -7
  1050. package/lib/shared-tree/treeCheckout.js.map +1 -1
  1051. package/lib/shared-tree/treeView.d.ts +3 -6
  1052. package/lib/shared-tree/treeView.d.ts.map +1 -1
  1053. package/lib/shared-tree/treeView.js +4 -0
  1054. package/lib/shared-tree/treeView.js.map +1 -1
  1055. package/lib/shared-tree-core/branch.d.ts +6 -0
  1056. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  1057. package/lib/shared-tree-core/branch.js +14 -7
  1058. package/lib/shared-tree-core/branch.js.map +1 -1
  1059. package/lib/shared-tree-core/defaultResubmitMachine.js +4 -4
  1060. package/lib/shared-tree-core/defaultResubmitMachine.js.map +1 -1
  1061. package/lib/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  1062. package/lib/shared-tree-core/editManagerCodecs.js +1 -0
  1063. package/lib/shared-tree-core/editManagerCodecs.js.map +1 -1
  1064. package/lib/shared-tree-core/editManagerFormat.d.ts +2 -2
  1065. package/lib/shared-tree-core/editManagerFormat.d.ts.map +1 -1
  1066. package/lib/shared-tree-core/editManagerFormat.js +6 -1
  1067. package/lib/shared-tree-core/editManagerFormat.js.map +1 -1
  1068. package/lib/shared-tree-core/messageCodecs.d.ts.map +1 -1
  1069. package/lib/shared-tree-core/messageCodecs.js +1 -0
  1070. package/lib/shared-tree-core/messageCodecs.js.map +1 -1
  1071. package/lib/shared-tree-core/sharedTreeCore.d.ts +4 -0
  1072. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  1073. package/lib/shared-tree-core/sharedTreeCore.js +10 -2
  1074. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  1075. package/lib/simple-tree/api/create.d.ts +54 -0
  1076. package/lib/simple-tree/api/create.d.ts.map +1 -0
  1077. package/lib/simple-tree/api/create.js +92 -0
  1078. package/lib/simple-tree/api/create.js.map +1 -0
  1079. package/lib/simple-tree/api/index.d.ts +12 -0
  1080. package/lib/simple-tree/api/index.d.ts.map +1 -0
  1081. package/lib/simple-tree/api/index.js +13 -0
  1082. package/lib/simple-tree/api/index.js.map +1 -0
  1083. package/{dist/simple-tree → lib/simple-tree/api}/schemaCreationUtilities.d.ts +7 -4
  1084. package/lib/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -0
  1085. package/lib/simple-tree/{schemaCreationUtilities.js → api/schemaCreationUtilities.js} +1 -1
  1086. package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -0
  1087. package/lib/simple-tree/{schemaFactory.d.ts → api/schemaFactory.d.ts} +15 -14
  1088. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -0
  1089. package/lib/simple-tree/{schemaFactory.js → api/schemaFactory.js} +9 -8
  1090. package/lib/simple-tree/api/schemaFactory.js.map +1 -0
  1091. package/{dist/simple-tree → lib/simple-tree/api}/schemaFactoryRecursive.d.ts +40 -7
  1092. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -0
  1093. package/lib/simple-tree/{schemaFactoryRecursive.js → api/schemaFactoryRecursive.js} +1 -1
  1094. package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -0
  1095. package/lib/simple-tree/api/testRecursiveDomain.d.ts +62 -0
  1096. package/lib/simple-tree/api/testRecursiveDomain.d.ts.map +1 -0
  1097. package/lib/simple-tree/api/testRecursiveDomain.js.map +1 -0
  1098. package/{dist/simple-tree → lib/simple-tree/api}/tree.d.ts +111 -20
  1099. package/lib/simple-tree/api/tree.d.ts.map +1 -0
  1100. package/lib/simple-tree/api/tree.js +165 -0
  1101. package/lib/simple-tree/api/tree.js.map +1 -0
  1102. package/lib/simple-tree/api/treeNodeApi.d.ts +87 -0
  1103. package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -0
  1104. package/lib/simple-tree/{treeNodeApi.js → api/treeNodeApi.js} +32 -32
  1105. package/lib/simple-tree/api/treeNodeApi.js.map +1 -0
  1106. package/lib/simple-tree/api/verboseTree.d.ts +136 -0
  1107. package/lib/simple-tree/api/verboseTree.d.ts.map +1 -0
  1108. package/lib/simple-tree/api/verboseTree.js +213 -0
  1109. package/lib/simple-tree/api/verboseTree.js.map +1 -0
  1110. package/lib/simple-tree/arrayNode.d.ts +3 -3
  1111. package/lib/simple-tree/arrayNode.d.ts.map +1 -1
  1112. package/lib/simple-tree/arrayNode.js +57 -54
  1113. package/lib/simple-tree/arrayNode.js.map +1 -1
  1114. package/lib/simple-tree/core/index.d.ts +10 -0
  1115. package/lib/simple-tree/core/index.d.ts.map +1 -0
  1116. package/lib/simple-tree/core/index.js +10 -0
  1117. package/lib/simple-tree/core/index.js.map +1 -0
  1118. package/{dist/simple-tree → lib/simple-tree/core}/schemaCaching.d.ts +2 -9
  1119. package/lib/simple-tree/core/schemaCaching.d.ts.map +1 -0
  1120. package/lib/simple-tree/{schemaCaching.js → core/schemaCaching.js} +1 -21
  1121. package/lib/simple-tree/core/schemaCaching.js.map +1 -0
  1122. package/lib/simple-tree/core/treeNodeKernel.d.ts +57 -0
  1123. package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -0
  1124. package/lib/simple-tree/core/treeNodeKernel.js +121 -0
  1125. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -0
  1126. package/lib/simple-tree/core/treeNodeSchema.d.ts +149 -0
  1127. package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -0
  1128. package/lib/simple-tree/core/treeNodeSchema.js +32 -0
  1129. package/lib/simple-tree/core/treeNodeSchema.js.map +1 -0
  1130. package/lib/simple-tree/core/types.d.ts +178 -0
  1131. package/lib/simple-tree/core/types.d.ts.map +1 -0
  1132. package/lib/simple-tree/core/types.js +111 -0
  1133. package/lib/simple-tree/core/types.js.map +1 -0
  1134. package/lib/simple-tree/core/withType.d.ts +82 -0
  1135. package/lib/simple-tree/core/withType.d.ts.map +1 -0
  1136. package/lib/simple-tree/core/withType.js +36 -0
  1137. package/lib/simple-tree/core/withType.js.map +1 -0
  1138. package/lib/simple-tree/getJsonSchema.d.ts +55 -0
  1139. package/lib/simple-tree/getJsonSchema.d.ts.map +1 -0
  1140. package/lib/simple-tree/getJsonSchema.js +65 -0
  1141. package/lib/simple-tree/getJsonSchema.js.map +1 -0
  1142. package/lib/simple-tree/getSimpleFieldSchema.d.ts +14 -0
  1143. package/lib/simple-tree/getSimpleFieldSchema.d.ts.map +1 -0
  1144. package/lib/simple-tree/getSimpleFieldSchema.js +25 -0
  1145. package/lib/simple-tree/getSimpleFieldSchema.js.map +1 -0
  1146. package/lib/simple-tree/getSimpleSchema.d.ts +58 -0
  1147. package/lib/simple-tree/getSimpleSchema.d.ts.map +1 -0
  1148. package/lib/simple-tree/getSimpleSchema.js +64 -0
  1149. package/lib/simple-tree/getSimpleSchema.js.map +1 -0
  1150. package/lib/simple-tree/index.d.ts +12 -13
  1151. package/lib/simple-tree/index.d.ts.map +1 -1
  1152. package/lib/simple-tree/index.js +8 -11
  1153. package/lib/simple-tree/index.js.map +1 -1
  1154. package/lib/simple-tree/jsonSchema.d.ts +206 -0
  1155. package/lib/simple-tree/jsonSchema.d.ts.map +1 -0
  1156. package/lib/simple-tree/{nodeKeys.js → jsonSchema.js} +1 -1
  1157. package/lib/simple-tree/jsonSchema.js.map +1 -0
  1158. package/lib/simple-tree/leafNodeSchema.d.ts +1 -1
  1159. package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
  1160. package/lib/simple-tree/leafNodeSchema.js +1 -2
  1161. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  1162. package/lib/simple-tree/mapNode.d.ts +9 -3
  1163. package/lib/simple-tree/mapNode.d.ts.map +1 -1
  1164. package/lib/simple-tree/mapNode.js +36 -36
  1165. package/lib/simple-tree/mapNode.js.map +1 -1
  1166. package/lib/simple-tree/objectNode.d.ts +18 -16
  1167. package/lib/simple-tree/objectNode.d.ts.map +1 -1
  1168. package/lib/simple-tree/objectNode.js +36 -34
  1169. package/lib/simple-tree/objectNode.js.map +1 -1
  1170. package/lib/simple-tree/objectNodeTypes.d.ts +38 -0
  1171. package/lib/simple-tree/objectNodeTypes.d.ts.map +1 -0
  1172. package/lib/simple-tree/objectNodeTypes.js +15 -0
  1173. package/lib/simple-tree/objectNodeTypes.js.map +1 -0
  1174. package/lib/simple-tree/proxies.d.ts +6 -25
  1175. package/lib/simple-tree/proxies.d.ts.map +1 -1
  1176. package/lib/simple-tree/proxies.js +50 -75
  1177. package/lib/simple-tree/proxies.js.map +1 -1
  1178. package/lib/simple-tree/proxyBinding.d.ts +46 -19
  1179. package/lib/simple-tree/proxyBinding.d.ts.map +1 -1
  1180. package/lib/simple-tree/proxyBinding.js +95 -39
  1181. package/lib/simple-tree/proxyBinding.js.map +1 -1
  1182. package/lib/simple-tree/schemaTypes.d.ts +10 -159
  1183. package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
  1184. package/lib/simple-tree/schemaTypes.js +9 -41
  1185. package/lib/simple-tree/schemaTypes.js.map +1 -1
  1186. package/lib/simple-tree/simpleSchema.d.ts +124 -0
  1187. package/lib/simple-tree/simpleSchema.d.ts.map +1 -0
  1188. package/lib/{feature-libraries/schema-aware/schemaAware.js → simple-tree/simpleSchema.js} +1 -1
  1189. package/lib/simple-tree/simpleSchema.js.map +1 -0
  1190. package/lib/simple-tree/simpleSchemaToJsonSchema.d.ts +12 -0
  1191. package/lib/simple-tree/simpleSchemaToJsonSchema.d.ts.map +1 -0
  1192. package/lib/simple-tree/simpleSchemaToJsonSchema.js +142 -0
  1193. package/lib/simple-tree/simpleSchemaToJsonSchema.js.map +1 -0
  1194. package/lib/simple-tree/toFlexSchema.d.ts +4 -12
  1195. package/lib/simple-tree/toFlexSchema.d.ts.map +1 -1
  1196. package/lib/simple-tree/toFlexSchema.js +9 -18
  1197. package/lib/simple-tree/toFlexSchema.js.map +1 -1
  1198. package/lib/simple-tree/toMapTree.d.ts +39 -39
  1199. package/lib/simple-tree/toMapTree.d.ts.map +1 -1
  1200. package/lib/simple-tree/toMapTree.js +214 -158
  1201. package/lib/simple-tree/toMapTree.js.map +1 -1
  1202. package/lib/simple-tree/{types.d.ts → treeNodeValid.d.ts} +2 -80
  1203. package/lib/simple-tree/treeNodeValid.d.ts.map +1 -0
  1204. package/lib/simple-tree/{types.js → treeNodeValid.js} +94 -96
  1205. package/lib/simple-tree/treeNodeValid.js.map +1 -0
  1206. package/lib/simple-tree/typesUnsafe.d.ts +35 -4
  1207. package/lib/simple-tree/typesUnsafe.d.ts.map +1 -1
  1208. package/lib/simple-tree/typesUnsafe.js.map +1 -1
  1209. package/lib/simple-tree/viewSchemaToSimpleSchema.d.ts +11 -0
  1210. package/lib/simple-tree/viewSchemaToSimpleSchema.d.ts.map +1 -0
  1211. package/lib/simple-tree/viewSchemaToSimpleSchema.js +167 -0
  1212. package/lib/simple-tree/viewSchemaToSimpleSchema.js.map +1 -0
  1213. package/lib/util/brand.d.ts +0 -3
  1214. package/lib/util/brand.d.ts.map +1 -1
  1215. package/lib/util/brand.js +1 -2
  1216. package/lib/util/brand.js.map +1 -1
  1217. package/lib/util/brandedMap.d.ts +0 -5
  1218. package/lib/util/brandedMap.d.ts.map +1 -1
  1219. package/lib/util/brandedMap.js +0 -1
  1220. package/lib/util/brandedMap.js.map +1 -1
  1221. package/lib/util/breakable.js +1 -1
  1222. package/lib/util/breakable.js.map +1 -1
  1223. package/lib/util/idAllocator.d.ts +0 -2
  1224. package/lib/util/idAllocator.d.ts.map +1 -1
  1225. package/lib/util/idAllocator.js +0 -1
  1226. package/lib/util/idAllocator.js.map +1 -1
  1227. package/lib/util/index.d.ts +2 -2
  1228. package/lib/util/index.d.ts.map +1 -1
  1229. package/lib/util/index.js +2 -2
  1230. package/lib/util/index.js.map +1 -1
  1231. package/lib/util/nestedMap.d.ts +5 -19
  1232. package/lib/util/nestedMap.d.ts.map +1 -1
  1233. package/lib/util/nestedMap.js +15 -16
  1234. package/lib/util/nestedMap.js.map +1 -1
  1235. package/lib/util/opaque.d.ts +0 -4
  1236. package/lib/util/opaque.d.ts.map +1 -1
  1237. package/lib/util/opaque.js +0 -2
  1238. package/lib/util/opaque.js.map +1 -1
  1239. package/lib/util/rangeMap.d.ts +0 -2
  1240. package/lib/util/rangeMap.d.ts.map +1 -1
  1241. package/lib/util/rangeMap.js +4 -3
  1242. package/lib/util/rangeMap.js.map +1 -1
  1243. package/lib/util/transactionResult.d.ts +0 -1
  1244. package/lib/util/transactionResult.d.ts.map +1 -1
  1245. package/lib/util/transactionResult.js +0 -1
  1246. package/lib/util/transactionResult.js.map +1 -1
  1247. package/lib/util/typeCheck.d.ts +2 -20
  1248. package/lib/util/typeCheck.d.ts.map +1 -1
  1249. package/lib/util/typeCheck.js.map +1 -1
  1250. package/lib/util/typeCheckTests.d.ts +4 -4
  1251. package/lib/util/typeCheckTests.d.ts.map +1 -1
  1252. package/lib/util/typeCheckTests.js.map +1 -1
  1253. package/lib/util/typeUtils.d.ts +0 -7
  1254. package/lib/util/typeUtils.d.ts.map +1 -1
  1255. package/lib/util/typeUtils.js.map +1 -1
  1256. package/lib/util/utils.d.ts +6 -8
  1257. package/lib/util/utils.d.ts.map +1 -1
  1258. package/lib/util/utils.js +12 -4
  1259. package/lib/util/utils.js.map +1 -1
  1260. package/package.json +36 -25
  1261. package/src/codec/discriminatedUnions.ts +20 -10
  1262. package/src/codec/index.ts +5 -1
  1263. package/src/core/forest/README.md +4 -2
  1264. package/src/core/forest/editableForest.ts +10 -7
  1265. package/src/core/forest/forest.ts +0 -6
  1266. package/src/core/index.ts +2 -2
  1267. package/src/core/rebase/changeRebaser.ts +0 -4
  1268. package/src/core/rebase/index.ts +0 -2
  1269. package/src/core/rebase/types.ts +1 -23
  1270. package/src/core/rebase/utils.ts +13 -11
  1271. package/src/core/schema-stored/multiplicity.ts +0 -1
  1272. package/src/core/schema-stored/schema.ts +0 -7
  1273. package/src/core/schema-stored/storedSchemaRepository.ts +0 -3
  1274. package/src/core/schema-view/view.ts +0 -3
  1275. package/src/core/tree/anchorSet.ts +21 -17
  1276. package/src/core/tree/cursor.ts +1 -6
  1277. package/src/core/tree/delta.ts +0 -11
  1278. package/src/core/tree/detachedFieldIndex.ts +217 -35
  1279. package/src/core/tree/detachedFieldIndexCodec.ts +21 -11
  1280. package/src/core/tree/detachedFieldIndexFormat.ts +1 -1
  1281. package/src/core/tree/detachedFieldIndexTypes.ts +40 -5
  1282. package/src/core/tree/index.ts +3 -2
  1283. package/src/core/tree/mapTree.ts +45 -4
  1284. package/src/core/tree/pathTree.ts +0 -11
  1285. package/src/core/tree/treeTextFormat.ts +3 -2
  1286. package/src/core/tree/types.ts +0 -11
  1287. package/src/core/tree/visitDelta.ts +59 -19
  1288. package/src/core/tree/visitPath.ts +0 -2
  1289. package/src/core/tree/visitorUtils.ts +7 -5
  1290. package/src/domains/index.ts +3 -0
  1291. package/src/domains/json/index.ts +7 -1
  1292. package/src/domains/json/jsonCursor.ts +113 -6
  1293. package/src/domains/json/jsonDomainSchema.ts +4 -5
  1294. package/src/domains/leafDomain.ts +0 -1
  1295. package/src/domains/schemaBuilder.ts +0 -22
  1296. package/src/events/events.ts +0 -4
  1297. package/src/feature-libraries/chunked-forest/README.md +9 -1
  1298. package/src/feature-libraries/chunked-forest/basicChunk.ts +14 -9
  1299. package/src/feature-libraries/chunked-forest/chunk.ts +1 -1
  1300. package/src/feature-libraries/chunked-forest/chunkTree.ts +4 -4
  1301. package/src/feature-libraries/chunked-forest/chunkedForest.ts +8 -6
  1302. package/src/feature-libraries/chunked-forest/codec/chunkCodecUtilities.ts +2 -2
  1303. package/src/feature-libraries/chunked-forest/codec/chunkDecoding.ts +9 -6
  1304. package/src/feature-libraries/chunked-forest/uniformChunk.ts +6 -4
  1305. package/src/feature-libraries/default-schema/defaultEditBuilder.ts +18 -46
  1306. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +11 -6
  1307. package/src/feature-libraries/default-schema/defaultSchema.ts +0 -1
  1308. package/src/feature-libraries/default-schema/index.ts +1 -1
  1309. package/src/feature-libraries/default-schema/schemaChecker.ts +6 -0
  1310. package/src/feature-libraries/editableTreeBinder.ts +7 -79
  1311. package/src/feature-libraries/fieldGenerator.ts +0 -3
  1312. package/src/feature-libraries/flex-map-tree/index.ts +2 -1
  1313. package/src/feature-libraries/flex-map-tree/mapTreeNode.ts +235 -328
  1314. package/src/feature-libraries/flex-tree/context.ts +0 -1
  1315. package/src/feature-libraries/flex-tree/flexTreeTypes.ts +27 -376
  1316. package/src/feature-libraries/flex-tree/index.ts +7 -2
  1317. package/src/feature-libraries/flex-tree/lazyEntity.ts +0 -3
  1318. package/src/feature-libraries/flex-tree/lazyField.ts +52 -234
  1319. package/src/feature-libraries/flex-tree/lazyNode.ts +6 -108
  1320. package/src/feature-libraries/flex-tree/treeEvents.ts +0 -2
  1321. package/src/feature-libraries/flex-tree/utilities.ts +6 -1
  1322. package/src/feature-libraries/forest-summary/codec.ts +3 -3
  1323. package/src/feature-libraries/forest-summary/forestSummarizer.ts +1 -0
  1324. package/src/feature-libraries/index.ts +8 -35
  1325. package/src/feature-libraries/mapTreeCursor.ts +13 -4
  1326. package/src/feature-libraries/memoizedIdRangeAllocator.ts +0 -4
  1327. package/src/feature-libraries/modular-schema/crossFieldQueries.ts +0 -2
  1328. package/src/feature-libraries/modular-schema/discrepancies.ts +120 -4
  1329. package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +0 -8
  1330. package/src/feature-libraries/modular-schema/fieldKind.ts +1 -3
  1331. package/src/feature-libraries/modular-schema/genericFieldKind.ts +69 -92
  1332. package/src/feature-libraries/modular-schema/genericFieldKindCodecs.ts +7 -14
  1333. package/src/feature-libraries/modular-schema/genericFieldKindTypes.ts +6 -15
  1334. package/src/feature-libraries/modular-schema/index.ts +2 -2
  1335. package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +69 -35
  1336. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +350 -354
  1337. package/src/feature-libraries/modular-schema/modularChangeTypes.ts +7 -14
  1338. package/src/feature-libraries/node-key/nodeKey.ts +0 -4
  1339. package/src/feature-libraries/node-key/nodeKeyManager.ts +0 -1
  1340. package/src/feature-libraries/object-forest/objectForest.ts +8 -16
  1341. package/src/feature-libraries/schemaBuilderBase.ts +1 -49
  1342. package/src/feature-libraries/sequence-field/compose.ts +41 -20
  1343. package/src/feature-libraries/sequence-field/formatV2.ts +3 -3
  1344. package/src/feature-libraries/sequence-field/formatV3.ts +65 -0
  1345. package/src/feature-libraries/sequence-field/helperTypes.ts +33 -0
  1346. package/src/feature-libraries/sequence-field/index.ts +1 -0
  1347. package/src/feature-libraries/sequence-field/invert.ts +28 -18
  1348. package/src/feature-libraries/sequence-field/markQueue.ts +2 -2
  1349. package/src/feature-libraries/sequence-field/moveEffectTable.ts +2 -2
  1350. package/src/feature-libraries/sequence-field/rebase.ts +30 -13
  1351. package/src/feature-libraries/sequence-field/replaceRevisions.ts +27 -3
  1352. package/src/feature-libraries/sequence-field/sequenceFieldCodecV1.ts +52 -7
  1353. package/src/feature-libraries/sequence-field/sequenceFieldCodecV2.ts +92 -19
  1354. package/src/feature-libraries/sequence-field/sequenceFieldCodecV3.ts +134 -0
  1355. package/src/feature-libraries/sequence-field/sequenceFieldCodecs.ts +2 -0
  1356. package/src/feature-libraries/sequence-field/sequenceFieldToDelta.ts +8 -2
  1357. package/src/feature-libraries/sequence-field/types.ts +24 -4
  1358. package/src/feature-libraries/sequence-field/utils.ts +78 -50
  1359. package/src/feature-libraries/storedToViewSchema.ts +0 -1
  1360. package/src/feature-libraries/treeCursorUtils.ts +11 -11
  1361. package/src/feature-libraries/treeTextCursor.ts +0 -2
  1362. package/src/feature-libraries/typed-schema/flexList.ts +0 -3
  1363. package/src/feature-libraries/typed-schema/index.ts +0 -2
  1364. package/src/feature-libraries/typed-schema/schemaCollection.ts +0 -5
  1365. package/src/feature-libraries/typed-schema/typedTreeSchema.ts +2 -68
  1366. package/src/feature-libraries/typed-schema/view.ts +0 -1
  1367. package/src/index.ts +27 -245
  1368. package/src/internalTypes.ts +1 -0
  1369. package/src/packageVersion.ts +1 -1
  1370. package/src/shared-tree/schematizeTree.ts +25 -21
  1371. package/src/shared-tree/schematizingTreeView.ts +6 -6
  1372. package/src/shared-tree/sharedTree.ts +16 -40
  1373. package/src/shared-tree/sharedTreeChangeCodecs.ts +8 -0
  1374. package/src/shared-tree/sharedTreeChangeEnricher.ts +1 -1
  1375. package/src/shared-tree/sharedTreeChangeFamily.ts +3 -3
  1376. package/src/shared-tree/sharedTreeEditBuilder.ts +0 -2
  1377. package/src/shared-tree/treeApi.ts +4 -4
  1378. package/src/shared-tree/treeCheckout.ts +61 -12
  1379. package/src/shared-tree/treeView.ts +8 -6
  1380. package/src/shared-tree-core/branch.ts +29 -8
  1381. package/src/shared-tree-core/defaultResubmitMachine.ts +4 -4
  1382. package/src/shared-tree-core/editManagerCodecs.ts +1 -0
  1383. package/src/shared-tree-core/editManagerFormat.ts +7 -2
  1384. package/src/shared-tree-core/messageCodecs.ts +2 -1
  1385. package/src/shared-tree-core/sharedTreeCore.ts +12 -3
  1386. package/src/simple-tree/ProxyBinding.md +2 -0
  1387. package/src/simple-tree/api/README.md +7 -0
  1388. package/src/simple-tree/api/create.ts +179 -0
  1389. package/src/simple-tree/api/index.ts +36 -0
  1390. package/src/simple-tree/{schemaCreationUtilities.ts → api/schemaCreationUtilities.ts} +13 -5
  1391. package/src/simple-tree/{schemaFactory.ts → api/schemaFactory.ts} +36 -34
  1392. package/src/simple-tree/{schemaFactoryRecursive.ts → api/schemaFactoryRecursive.ts} +47 -10
  1393. package/src/simple-tree/{testRecursiveDomain.ts → api/testRecursiveDomain.ts} +3 -1
  1394. package/src/simple-tree/{tree.ts → api/tree.ts} +250 -35
  1395. package/src/simple-tree/{treeNodeApi.ts → api/treeNodeApi.ts} +57 -128
  1396. package/src/simple-tree/api/verboseTree.ts +415 -0
  1397. package/src/simple-tree/arrayNode.ts +101 -99
  1398. package/src/simple-tree/core/README.md +11 -0
  1399. package/src/simple-tree/core/index.ts +33 -0
  1400. package/src/simple-tree/{schemaCaching.ts → core/schemaCaching.ts} +3 -37
  1401. package/src/simple-tree/core/treeNodeKernel.ts +141 -0
  1402. package/src/simple-tree/core/treeNodeSchema.ts +184 -0
  1403. package/src/simple-tree/core/types.ts +255 -0
  1404. package/src/simple-tree/core/withType.ts +89 -0
  1405. package/src/simple-tree/getJsonSchema.ts +70 -0
  1406. package/src/simple-tree/getSimpleFieldSchema.ts +36 -0
  1407. package/src/simple-tree/getSimpleSchema.ts +69 -0
  1408. package/src/simple-tree/index.ts +58 -33
  1409. package/src/simple-tree/jsonSchema.ts +230 -0
  1410. package/src/simple-tree/leafNodeSchema.ts +6 -3
  1411. package/src/simple-tree/mapNode.ts +56 -55
  1412. package/src/simple-tree/objectNode.ts +66 -90
  1413. package/src/simple-tree/objectNodeTypes.ts +68 -0
  1414. package/src/simple-tree/proxies.ts +56 -93
  1415. package/src/simple-tree/proxyBinding.ts +134 -56
  1416. package/src/simple-tree/schemaTypes.ts +29 -194
  1417. package/src/simple-tree/simpleSchema.ts +138 -0
  1418. package/src/simple-tree/simpleSchemaToJsonSchema.ts +178 -0
  1419. package/src/simple-tree/toFlexSchema.ts +9 -42
  1420. package/src/simple-tree/toMapTree.ts +270 -296
  1421. package/src/simple-tree/{types.ts → treeNodeValid.ts} +166 -151
  1422. package/src/simple-tree/typesUnsafe.ts +51 -5
  1423. package/src/simple-tree/viewSchemaToSimpleSchema.ts +209 -0
  1424. package/src/util/brand.ts +1 -4
  1425. package/src/util/brandedMap.ts +0 -5
  1426. package/src/util/breakable.ts +1 -1
  1427. package/src/util/idAllocator.ts +0 -2
  1428. package/src/util/index.ts +3 -0
  1429. package/src/util/nestedMap.ts +23 -20
  1430. package/src/util/opaque.ts +0 -4
  1431. package/src/util/rangeMap.ts +5 -5
  1432. package/src/util/transactionResult.ts +0 -1
  1433. package/src/util/typeCheck.ts +2 -20
  1434. package/src/util/typeCheckTests.ts +4 -4
  1435. package/src/util/typeUtils.ts +0 -7
  1436. package/src/util/utils.ts +13 -8
  1437. package/tsconfig.json +0 -1
  1438. package/dist/feature-libraries/contextuallyTyped.d.ts +0 -209
  1439. package/dist/feature-libraries/contextuallyTyped.d.ts.map +0 -1
  1440. package/dist/feature-libraries/contextuallyTyped.js +0 -328
  1441. package/dist/feature-libraries/contextuallyTyped.js.map +0 -1
  1442. package/dist/feature-libraries/schema-aware/index.d.ts +0 -6
  1443. package/dist/feature-libraries/schema-aware/index.d.ts.map +0 -1
  1444. package/dist/feature-libraries/schema-aware/index.js.map +0 -1
  1445. package/dist/feature-libraries/schema-aware/schemaAware.d.ts +0 -76
  1446. package/dist/feature-libraries/schema-aware/schemaAware.d.ts.map +0 -1
  1447. package/dist/feature-libraries/schema-aware/schemaAware.js.map +0 -1
  1448. package/dist/simple-tree/nodeKeys.d.ts +0 -41
  1449. package/dist/simple-tree/nodeKeys.d.ts.map +0 -1
  1450. package/dist/simple-tree/nodeKeys.js +0 -7
  1451. package/dist/simple-tree/nodeKeys.js.map +0 -1
  1452. package/dist/simple-tree/schemaCaching.d.ts.map +0 -1
  1453. package/dist/simple-tree/schemaCaching.js.map +0 -1
  1454. package/dist/simple-tree/schemaCreationUtilities.d.ts.map +0 -1
  1455. package/dist/simple-tree/schemaCreationUtilities.js.map +0 -1
  1456. package/dist/simple-tree/schemaFactory.d.ts.map +0 -1
  1457. package/dist/simple-tree/schemaFactory.js.map +0 -1
  1458. package/dist/simple-tree/schemaFactoryRecursive.d.ts.map +0 -1
  1459. package/dist/simple-tree/schemaFactoryRecursive.js.map +0 -1
  1460. package/dist/simple-tree/testRecursiveDomain.d.ts +0 -61
  1461. package/dist/simple-tree/testRecursiveDomain.d.ts.map +0 -1
  1462. package/dist/simple-tree/testRecursiveDomain.js.map +0 -1
  1463. package/dist/simple-tree/tree.d.ts.map +0 -1
  1464. package/dist/simple-tree/tree.js +0 -73
  1465. package/dist/simple-tree/tree.js.map +0 -1
  1466. package/dist/simple-tree/treeNodeApi.d.ts +0 -159
  1467. package/dist/simple-tree/treeNodeApi.d.ts.map +0 -1
  1468. package/dist/simple-tree/treeNodeApi.js.map +0 -1
  1469. package/dist/simple-tree/types.d.ts.map +0 -1
  1470. package/dist/simple-tree/types.js.map +0 -1
  1471. package/lib/feature-libraries/contextuallyTyped.d.ts +0 -209
  1472. package/lib/feature-libraries/contextuallyTyped.d.ts.map +0 -1
  1473. package/lib/feature-libraries/contextuallyTyped.js +0 -311
  1474. package/lib/feature-libraries/contextuallyTyped.js.map +0 -1
  1475. package/lib/feature-libraries/schema-aware/index.d.ts +0 -6
  1476. package/lib/feature-libraries/schema-aware/index.d.ts.map +0 -1
  1477. package/lib/feature-libraries/schema-aware/index.js +0 -6
  1478. package/lib/feature-libraries/schema-aware/index.js.map +0 -1
  1479. package/lib/feature-libraries/schema-aware/schemaAware.d.ts +0 -76
  1480. package/lib/feature-libraries/schema-aware/schemaAware.d.ts.map +0 -1
  1481. package/lib/feature-libraries/schema-aware/schemaAware.js.map +0 -1
  1482. package/lib/simple-tree/nodeKeys.d.ts +0 -41
  1483. package/lib/simple-tree/nodeKeys.d.ts.map +0 -1
  1484. package/lib/simple-tree/nodeKeys.js.map +0 -1
  1485. package/lib/simple-tree/schemaCaching.d.ts.map +0 -1
  1486. package/lib/simple-tree/schemaCaching.js.map +0 -1
  1487. package/lib/simple-tree/schemaCreationUtilities.d.ts.map +0 -1
  1488. package/lib/simple-tree/schemaCreationUtilities.js.map +0 -1
  1489. package/lib/simple-tree/schemaFactory.d.ts.map +0 -1
  1490. package/lib/simple-tree/schemaFactory.js.map +0 -1
  1491. package/lib/simple-tree/schemaFactoryRecursive.d.ts.map +0 -1
  1492. package/lib/simple-tree/schemaFactoryRecursive.js.map +0 -1
  1493. package/lib/simple-tree/testRecursiveDomain.d.ts +0 -61
  1494. package/lib/simple-tree/testRecursiveDomain.d.ts.map +0 -1
  1495. package/lib/simple-tree/testRecursiveDomain.js.map +0 -1
  1496. package/lib/simple-tree/tree.d.ts.map +0 -1
  1497. package/lib/simple-tree/tree.js +0 -66
  1498. package/lib/simple-tree/tree.js.map +0 -1
  1499. package/lib/simple-tree/treeNodeApi.d.ts +0 -159
  1500. package/lib/simple-tree/treeNodeApi.d.ts.map +0 -1
  1501. package/lib/simple-tree/treeNodeApi.js.map +0 -1
  1502. package/lib/simple-tree/types.d.ts.map +0 -1
  1503. package/lib/simple-tree/types.js.map +0 -1
  1504. package/src/feature-libraries/contextuallyTyped.ts +0 -582
  1505. package/src/feature-libraries/schema-aware/README.md +0 -19
  1506. package/src/feature-libraries/schema-aware/index.ts +0 -16
  1507. package/src/feature-libraries/schema-aware/schemaAware.ts +0 -135
  1508. package/src/simple-tree/nodeKeys.ts +0 -42
  1509. /package/dist/simple-tree/{testRecursiveDomain.js → api/testRecursiveDomain.js} +0 -0
  1510. /package/lib/simple-tree/{testRecursiveDomain.js → api/testRecursiveDomain.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"proxies.js","sourceRoot":"","sources":["../../src/simple-tree/proxies.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type { IFluidHandle } from \"@fluidframework/core-interfaces\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\n\nimport {\n\tEmptyKey,\n\ttype IForestSubscription,\n\ttype MapTree,\n\ttype TreeNodeSchemaIdentifier,\n\ttype TreeValue,\n\ttype UpPath,\n} from \"../core/index.js\";\n\nimport {\n\tFieldKinds,\n\ttype FlexFieldSchema,\n\ttype FlexTreeField,\n\ttype FlexTreeNode,\n\ttype FlexTreeNodeEvents,\n\ttype FlexTreeTypedField,\n\ttype MapTreeNode,\n\ttryGetMapTreeNode,\n\ttypeNameSymbol,\n\tisFlexTreeNode,\n} from \"../feature-libraries/index.js\";\nimport { type Mutable, fail, isReadonlyArray } from \"../util/index.js\";\n\nimport { anchorProxy, tryGetFlexNode, tryGetProxy } from \"./proxyBinding.js\";\nimport { tryGetSimpleNodeSchema } from \"./schemaCaching.js\";\nimport type { TreeNode, Unhydrated } from \"./types.js\";\nimport type { Off } from \"../events/index.js\";\n\n/**\n * Detects if the given 'candidate' is a TreeNode.\n *\n * @remarks\n * Supports both Hydrated and {@link Unhydrated} TreeNodes, both of which return true.\n *\n * Because the common usage is to check if a value being inserted/set is a TreeNode,\n * this function permits calling with primitives as well as objects.\n *\n * Primitives will always return false (as they are copies of data, not references to nodes).\n *\n * @param candidate - Value which may be a TreeNode\n * @returns true if the given 'candidate' is a hydrated TreeNode.\n */\nexport function isTreeNode(candidate: unknown): candidate is TreeNode | Unhydrated<TreeNode> {\n\treturn tryGetFlexNode(candidate) !== undefined;\n}\n\n/**\n * Retrieve the associated proxy for the given field.\n * */\nexport function getProxyForField(field: FlexTreeField): TreeNode | TreeValue | undefined {\n\tfunction tryToUnboxLeaves(\n\t\tflexField: FlexTreeTypedField<\n\t\t\tFlexFieldSchema<typeof FieldKinds.required | typeof FieldKinds.optional>\n\t\t>,\n\t): TreeNode | TreeValue | undefined {\n\t\tconst maybeContent = flexField.content;\n\t\treturn isFlexTreeNode(maybeContent) ? getOrCreateNodeProxy(maybeContent) : maybeContent;\n\t}\n\tswitch (field.schema.kind) {\n\t\tcase FieldKinds.required: {\n\t\t\tconst typedField = field as FlexTreeTypedField<\n\t\t\t\tFlexFieldSchema<typeof FieldKinds.required>\n\t\t\t>;\n\t\t\treturn tryToUnboxLeaves(typedField);\n\t\t}\n\t\tcase FieldKinds.optional: {\n\t\t\tconst typedField = field as FlexTreeTypedField<\n\t\t\t\tFlexFieldSchema<typeof FieldKinds.optional>\n\t\t\t>;\n\t\t\treturn tryToUnboxLeaves(typedField);\n\t\t}\n\t\t// TODO: Remove if/when 'FieldNode' is removed.\n\t\tcase FieldKinds.sequence: {\n\t\t\t// 'getProxyForNode' handles FieldNodes by unconditionally creating a array node proxy, making\n\t\t\t// this case unreachable as long as users follow the 'array recipe'.\n\t\t\tfail(\"'sequence' field is unexpected.\");\n\t\t}\n\t\tcase FieldKinds.identifier: {\n\t\t\t// Identifier fields are just value fields that hold strings\n\t\t\treturn (field as FlexTreeTypedField<FlexFieldSchema<typeof FieldKinds.required>>)\n\t\t\t\t.content as string;\n\t\t}\n\n\t\tdefault:\n\t\t\tfail(\"invalid field kind\");\n\t}\n}\n\nexport function getOrCreateNodeProxy(flexNode: FlexTreeNode): TreeNode | TreeValue {\n\tconst cachedProxy = tryGetProxy(flexNode);\n\tif (cachedProxy !== undefined) {\n\t\treturn cachedProxy;\n\t}\n\n\tconst schema = flexNode.schema;\n\tconst classSchema = tryGetSimpleNodeSchema(schema);\n\tassert(classSchema !== undefined, 0x91b /* node without schema */);\n\tif (typeof classSchema === \"function\") {\n\t\tconst simpleSchema = classSchema as unknown as new (dummy: FlexTreeNode) => TreeNode;\n\t\treturn new simpleSchema(flexNode);\n\t} else {\n\t\treturn (classSchema as { create(data: FlexTreeNode): TreeNode }).create(flexNode);\n\t}\n}\n\n// #region Content insertion and proxy binding\n\n/** The path of a proxy, relative to the root of the content tree that the proxy belongs to */\ninterface RelativeProxyPath {\n\treadonly path: UpPath;\n\treadonly mapTreeNode: MapTreeNode;\n\treadonly proxy: TreeNode;\n}\n\n/** All {@link RelativeProxyPath}s that are under the given root path */\ninterface RootedProxyPaths {\n\treadonly rootPath: UpPath;\n\treadonly proxyPaths: RelativeProxyPath[];\n}\n\n/**\n * Records any proxies in the given content tree and does the necessary bookkeeping to ensure they are synchronized with subsequent reads of the tree.\n * @remarks If the content tree contains any proxies, this function must be called just prior to inserting the content into the tree.\n * Specifically, no other content may be inserted into the tree between the invocation of this function and the insertion of `content`.\n * The insertion of `content` must occur or else this function will cause memory leaks.\n * @param content - the tree of content to be inserted, of which any of its object/map/array nodes might be a proxy\n * @param anchors - the {@link AnchorSet} for the tree\n * @returns The content after having all proxies replaced inline with plain javascript objects.\n * See {@link extractFactoryContent} for more details.\n */\nexport function prepareContentForHydration(\n\tcontent: MapTree | readonly MapTree[] | undefined,\n\tforest: IForestSubscription,\n): void {\n\tif (isReadonlyArray(content)) {\n\t\treturn prepareArrayContentForHydration(content, forest);\n\t}\n\n\tif (content !== undefined) {\n\t\tconst proxies: RootedProxyPaths = {\n\t\t\trootPath: { parent: undefined, parentField: EmptyKey, parentIndex: 0 },\n\t\t\tproxyPaths: [],\n\t\t};\n\n\t\twalkMapTree(content, proxies.rootPath, (p, mapTreeNode, proxy) => {\n\t\t\tproxies.proxyPaths.push({ path: p, mapTreeNode, proxy });\n\t\t});\n\n\t\tbindProxies([proxies], forest);\n\t}\n}\n\nfunction prepareArrayContentForHydration(\n\tcontent: readonly MapTree[],\n\tforest: IForestSubscription,\n): void {\n\tconst proxies: RootedProxyPaths[] = [];\n\tfor (let i = 0; i < content.length; i++) {\n\t\tproxies.push({\n\t\t\trootPath: {\n\t\t\t\tparent: undefined,\n\t\t\t\tparentField: EmptyKey,\n\t\t\t\tparentIndex: 0,\n\t\t\t},\n\t\t\tproxyPaths: [],\n\t\t});\n\t\twalkMapTree(content[i], proxies[i].rootPath, (p, mapTreeNode, proxy) => {\n\t\t\tproxies[i].proxyPaths.push({ path: p, mapTreeNode, proxy });\n\t\t});\n\t}\n\n\tbindProxies(proxies, forest);\n}\n\nfunction walkMapTree(\n\tmapTree: MapTree,\n\tpath: UpPath,\n\tonVisitTreeNode: (path: UpPath, mapTreeNode: MapTreeNode, treeNode: TreeNode) => void,\n): void {\n\tconst mapTreeNode = tryGetMapTreeNode(mapTree);\n\tif (mapTreeNode !== undefined) {\n\t\tconst treeNode = tryGetProxy(mapTreeNode);\n\t\tif (treeNode !== undefined) {\n\t\t\tonVisitTreeNode(path, mapTreeNode, treeNode);\n\t\t}\n\t}\n\n\tfor (const [key, field] of mapTree.fields) {\n\t\tfor (let i = 0; i < field.length; i++) {\n\t\t\twalkMapTree(\n\t\t\t\tfield[i],\n\t\t\t\t{\n\t\t\t\t\tparent: path,\n\t\t\t\t\tparentField: key,\n\t\t\t\t\tparentIndex: i,\n\t\t\t\t},\n\t\t\t\tonVisitTreeNode,\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction bindProxies(proxies: RootedProxyPaths[], forest: IForestSubscription): void {\n\t// Only subscribe to the event if there is at least one proxy tree to hydrate - this is not the case when inserting an empty array [].\n\tif (proxies.length > 0) {\n\t\t// Creating a new array emits one event per element in the array, so listen to the event once for each element\n\t\tlet i = 0;\n\t\tconst off = forest.on(\"afterRootFieldCreated\", (fieldKey) => {\n\t\t\t(proxies[i].rootPath as Mutable<UpPath>).parentField = fieldKey;\n\t\t\tfor (const { path, mapTreeNode, proxy } of proxies[i].proxyPaths) {\n\t\t\t\tconst anchorNode = anchorProxy(forest.anchors, path, proxy);\n\t\t\t\tmapTreeNode.forwardEvents({\n\t\t\t\t\ton<K extends keyof FlexTreeNodeEvents>(\n\t\t\t\t\t\teventName: K,\n\t\t\t\t\t\tlistener: FlexTreeNodeEvents[K],\n\t\t\t\t\t): Off {\n\t\t\t\t\t\tswitch (eventName) {\n\t\t\t\t\t\t\tcase \"nodeChanged\": {\n\t\t\t\t\t\t\t\treturn anchorNode.on(\"childrenChangedAfterBatch\", listener);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase \"treeChanged\": {\n\t\t\t\t\t\t\t\treturn anchorNode.on(\"subtreeChangedAfterBatch\", listener);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tfail(\"Unexpected event subscription\");\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (++i === proxies.length) {\n\t\t\t\toff();\n\t\t\t}\n\t\t});\n\t}\n}\n\n// #endregion Content insertion and proxy binding\n\n/**\n * Content which can be used to build a node.\n * @remarks\n * Can contain unhydrated nodes, but can not be an unhydrated node at the root.\n */\nexport type FactoryContent =\n\t| IFluidHandle\n\t| string\n\t| number\n\t| boolean\n\t// eslint-disable-next-line @rushstack/no-new-null\n\t| null\n\t| ReadonlyMap<string, InsertableContent>\n\t| readonly InsertableContent[]\n\t| {\n\t\t\treadonly [P in string]?: InsertableContent;\n\t };\n\n/**\n * Content which can be inserted into a tree.\n */\nexport type InsertableContent = Unhydrated<TreeNode> | FactoryContent;\n\n/**\n * Brand `copy` with the type (under {@link typeNameSymbol}) to avoid ambiguity when inferring types from this data.\n */\nexport function markContentType(typeName: TreeNodeSchemaIdentifier, copy: object): void {\n\tObject.defineProperty(copy, typeNameSymbol, { value: typeName });\n}\n"]}
1
+ {"version":3,"file":"proxies.js","sourceRoot":"","sources":["../../src/simple-tree/proxies.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type { IFluidHandle } from \"@fluidframework/core-interfaces\";\nimport { UsageError } from \"@fluidframework/telemetry-utils/internal\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\n\nimport {\n\tEmptyKey,\n\ttype IForestSubscription,\n\ttype MapTree,\n\ttype TreeValue,\n\ttype UpPath,\n} from \"../core/index.js\";\n\nimport {\n\tFieldKinds,\n\ttype FlexFieldSchema,\n\ttype FlexTreeField,\n\ttype FlexTreeNode,\n\ttype FlexTreeTypedField,\n\ttryGetMapTreeNode,\n\tisFlexTreeNode,\n} from \"../feature-libraries/index.js\";\nimport { type Mutable, fail, isReadonlyArray } from \"../util/index.js\";\n\nimport { anchorProxy, tryGetCachedTreeNode } from \"./proxyBinding.js\";\nimport { tryGetSimpleNodeSchema, type TreeNode, type Unhydrated } from \"./core/index.js\";\n\n/**\n * Retrieve the associated {@link TreeNode} for the given field's content.\n */\nexport function getTreeNodeForField(field: FlexTreeField): TreeNode | TreeValue | undefined {\n\tfunction tryToUnboxLeaves(\n\t\tflexField: FlexTreeTypedField<\n\t\t\tFlexFieldSchema<typeof FieldKinds.required | typeof FieldKinds.optional>\n\t\t>,\n\t): TreeNode | TreeValue | undefined {\n\t\tconst maybeContent = flexField.content;\n\t\treturn isFlexTreeNode(maybeContent)\n\t\t\t? getOrCreateNodeFromFlexTreeNode(maybeContent)\n\t\t\t: maybeContent;\n\t}\n\tswitch (field.schema.kind) {\n\t\tcase FieldKinds.required: {\n\t\t\tconst typedField = field as FlexTreeTypedField<\n\t\t\t\tFlexFieldSchema<typeof FieldKinds.required>\n\t\t\t>;\n\t\t\treturn tryToUnboxLeaves(typedField);\n\t\t}\n\t\tcase FieldKinds.optional: {\n\t\t\tconst typedField = field as FlexTreeTypedField<\n\t\t\t\tFlexFieldSchema<typeof FieldKinds.optional>\n\t\t\t>;\n\t\t\treturn tryToUnboxLeaves(typedField);\n\t\t}\n\t\tcase FieldKinds.identifier: {\n\t\t\t// Identifier fields are just value fields that hold strings\n\t\t\treturn (field as FlexTreeTypedField<FlexFieldSchema<typeof FieldKinds.required>>)\n\t\t\t\t.content as string;\n\t\t}\n\n\t\tdefault:\n\t\t\tfail(\"invalid field kind\");\n\t}\n}\n\nexport function getOrCreateNodeFromFlexTreeNode(flexNode: FlexTreeNode): TreeNode | TreeValue {\n\tconst cachedProxy = tryGetCachedTreeNode(flexNode);\n\tif (cachedProxy !== undefined) {\n\t\treturn cachedProxy;\n\t}\n\n\tconst schema = flexNode.schema;\n\tconst classSchema = tryGetSimpleNodeSchema(schema);\n\tassert(classSchema !== undefined, 0x91b /* node without schema */);\n\tif (typeof classSchema === \"function\") {\n\t\tconst simpleSchema = classSchema as unknown as new (dummy: FlexTreeNode) => TreeNode;\n\t\treturn new simpleSchema(flexNode);\n\t} else {\n\t\treturn (classSchema as { create(data: FlexTreeNode): TreeNode }).create(flexNode);\n\t}\n}\n\n// #region Content insertion and proxy binding\n\n/** The path of a proxy, relative to the root of the content tree that the proxy belongs to */\ninterface RelativeProxyPath {\n\treadonly path: UpPath;\n\treadonly proxy: TreeNode;\n}\n\n/** All {@link RelativeProxyPath}s that are under the given root path */\ninterface RootedProxyPaths {\n\treadonly rootPath: UpPath;\n\treadonly proxyPaths: RelativeProxyPath[];\n}\n\n/**\n * Records any proxies in the given content tree and does the necessary bookkeeping to ensure they are synchronized with subsequent reads of the tree.\n * @remarks If the content tree contains any proxies, this function must be called just prior to inserting the content into the tree.\n * Specifically, no other content may be inserted into the tree between the invocation of this function and the insertion of `content`.\n * The insertion of `content` must occur or else this function will cause memory leaks.\n * @param content - the tree of content to be inserted, of which any of its object/map/array nodes might be a proxy\n * @param anchors - the {@link AnchorSet} for the tree\n * @returns The content after having all proxies replaced inline with plain javascript objects.\n * See {@link extractFactoryContent} for more details.\n */\nexport function prepareContentForHydration(\n\tcontent: MapTree | readonly MapTree[] | undefined,\n\tforest: IForestSubscription,\n): void {\n\tif (isReadonlyArray(content)) {\n\t\treturn prepareArrayContentForHydration(content, forest);\n\t}\n\n\tif (content !== undefined) {\n\t\tconst proxies: RootedProxyPaths = {\n\t\t\trootPath: { parent: undefined, parentField: EmptyKey, parentIndex: 0 },\n\t\t\tproxyPaths: [],\n\t\t};\n\n\t\twalkMapTree(content, proxies.rootPath, (p, proxy) => {\n\t\t\tproxies.proxyPaths.push({ path: p, proxy });\n\t\t});\n\n\t\tbindProxies([proxies], forest);\n\t}\n}\n\nfunction prepareArrayContentForHydration(\n\tcontent: readonly MapTree[],\n\tforest: IForestSubscription,\n): void {\n\tconst proxyPaths: RootedProxyPaths[] = [];\n\tfor (const item of content) {\n\t\tconst proxyPath: RootedProxyPaths = {\n\t\t\trootPath: {\n\t\t\t\tparent: undefined,\n\t\t\t\tparentField: EmptyKey,\n\t\t\t\tparentIndex: 0,\n\t\t\t},\n\t\t\tproxyPaths: [],\n\t\t};\n\t\tproxyPaths.push(proxyPath);\n\t\twalkMapTree(item, proxyPath.rootPath, (p, proxy) => {\n\t\t\tproxyPath.proxyPaths.push({ path: p, proxy });\n\t\t});\n\t}\n\n\tbindProxies(proxyPaths, forest);\n}\n\nfunction walkMapTree(\n\tmapTree: MapTree,\n\tpath: UpPath,\n\tonVisitTreeNode: (path: UpPath, treeNode: TreeNode) => void,\n): void {\n\tif (tryGetMapTreeNode(mapTree)?.parentField.parent.parent !== undefined) {\n\t\tthrow new UsageError(\n\t\t\t\"Attempted to insert a node which is already under a parent. If this is desired, remove the node from its parent before inserting it elsewhere.\",\n\t\t);\n\t}\n\n\ttype Next = [path: UpPath, tree: MapTree];\n\tconst nexts: Next[] = [];\n\tfor (let next: Next | undefined = [path, mapTree]; next !== undefined; next = nexts.pop()) {\n\t\tconst [p, m] = next;\n\t\tconst mapTreeNode = tryGetMapTreeNode(m);\n\t\tif (mapTreeNode !== undefined) {\n\t\t\tconst treeNode = tryGetCachedTreeNode(mapTreeNode);\n\t\t\tif (treeNode !== undefined) {\n\t\t\t\tonVisitTreeNode(p, treeNode);\n\t\t\t}\n\t\t}\n\n\t\tfor (const [key, field] of m.fields) {\n\t\t\tfor (const [i, child] of field.entries()) {\n\t\t\t\tnexts.push([\n\t\t\t\t\t{\n\t\t\t\t\t\tparent: p,\n\t\t\t\t\t\tparentField: key,\n\t\t\t\t\t\tparentIndex: i,\n\t\t\t\t\t},\n\t\t\t\t\tchild,\n\t\t\t\t]);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction bindProxies(proxies: RootedProxyPaths[], forest: IForestSubscription): void {\n\t// Only subscribe to the event if there is at least one proxy tree to hydrate - this is not the case when inserting an empty array [].\n\tif (proxies.length > 0) {\n\t\t// Creating a new array emits one event per element in the array, so listen to the event once for each element\n\t\tlet i = 0;\n\t\tconst off = forest.on(\"afterRootFieldCreated\", (fieldKey) => {\n\t\t\t// Non null asserting here because of the length check above\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t(proxies[i]!.rootPath as Mutable<UpPath>).parentField = fieldKey;\n\t\t\t// Non null asserting here because of the length check above\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tfor (const { path, proxy } of proxies[i]!.proxyPaths) {\n\t\t\t\tanchorProxy(forest.anchors, path, proxy);\n\t\t\t}\n\t\t\tif (++i === proxies.length) {\n\t\t\t\toff();\n\t\t\t}\n\t\t});\n\t}\n}\n\n// #endregion Content insertion and proxy binding\n\n/**\n * Content which can be used to build a node.\n * @remarks\n * Can contain unhydrated nodes, but can not be an unhydrated node at the root.\n */\nexport type FactoryContent =\n\t| IFluidHandle\n\t| string\n\t| number\n\t| boolean\n\t// eslint-disable-next-line @rushstack/no-new-null\n\t| null\n\t| Iterable<readonly [string, InsertableContent]>\n\t| readonly InsertableContent[]\n\t| {\n\t\t\treadonly [P in string]?: InsertableContent;\n\t };\n\n/**\n * Content which can be inserted into a tree.\n */\nexport type InsertableContent = Unhydrated<TreeNode> | FactoryContent;\n"]}
@@ -3,46 +3,73 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import { type AnchorNode, type AnchorSet, type UpPath } from "../core/index.js";
6
- import { type FlexTreeNodeSchema, type FlexMapNodeSchema, type FlexObjectNodeSchema, type FlexTreeMapNode, type FlexTreeNode, type FlexTreeObjectNode, type FieldKinds, type FlexFieldSchema } from "../feature-libraries/index.js";
7
- import type { WithType } from "./schemaTypes.js";
6
+ import { type FlexTreeNodeSchema, type FlexMapNodeSchema, type FlexObjectNodeSchema, type FlexTreeMapNode, type FlexTreeNode, type FlexTreeObjectNode, type FieldKinds, type FlexFieldSchema, type MapTreeNode } from "../feature-libraries/index.js";
7
+ import type { WithType, TreeNode } from "./core/index.js";
8
8
  import type { TreeArrayNode } from "./arrayNode.js";
9
- import type { TreeNode } from "./types.js";
10
9
  import type { TreeMapNode } from "./mapNode.js";
11
10
  /**
12
11
  * Creates an anchor node and associates it with the given proxy.
13
- * @privateRemarks Use `forgetters` to cleanup the anchor allocated by this function once the anchor is no longer needed.
12
+ * @privateRemarks
13
+ * Use `forgetters` to cleanup the anchor allocated by this function once the anchor is no longer needed.
14
14
  * In practice, this happens when either the anchor node is destroyed, or another anchor to the same node is created by a new flex node.
15
+ *
16
+ * The FlexTreeNode holds a reference to the same anchor, and has a lifetime at least as long as the simple-tree,
17
+ * so this would be unnecessary except for the case of "marinated" nodes, which have an anchor,
18
+ * but might not have a FlexTreeNode.
19
+ * Handling this case is an optimization assuming that this extra anchor reference is cheaper than eagerly creating FlexTreeNodes.
15
20
  */
16
21
  export declare function anchorProxy(anchors: AnchorSet, path: UpPath, proxy: TreeNode): AnchorNode;
17
22
  /**
18
- * Retrieves the flex node associated with the given target via {@link setFlexNode}.
19
- * @remarks Fails if the flex node has not been set.
23
+ * Retrieves the flex node associated with the given target via {@link setInnerNode}.
24
+ * @remarks
25
+ * For {@link Unhydrated} nodes, this returns the MapTreeNode.
26
+ *
27
+ * For hydrated nodes it returns a FlexTreeNode backed by the forest.
28
+ * Note that for "marinated" nodes, this FlexTreeNode exists and returns it: it does not return the MapTreeNode which is the current InnerNode.
20
29
  */
21
- export declare function getFlexNode(proxy: TypedNode<FlexObjectNodeSchema>, allowFreed?: true): FlexTreeObjectNode;
22
- export declare function getFlexNode(proxy: TreeArrayNode, allowFreed?: true): FlexTreeNode;
23
- export declare function getFlexNode(proxy: TreeMapNode, allowFreed?: true): FlexTreeMapNode<FlexMapNodeSchema<string, FlexFieldSchema<typeof FieldKinds.optional>>>;
24
- export declare function getFlexNode(proxy: TreeNode, allowFreed?: true): FlexTreeNode;
30
+ export declare function getOrCreateInnerNode(treeNode: TypedNode<FlexObjectNodeSchema>, allowFreed?: true): InnerNode & FlexTreeObjectNode;
31
+ export declare function getOrCreateInnerNode(treeNode: TreeArrayNode, allowFreed?: true): InnerNode;
32
+ export declare function getOrCreateInnerNode(treeNode: TreeMapNode, allowFreed?: true): InnerNode & FlexTreeMapNode<FlexMapNodeSchema<string, FlexFieldSchema<typeof FieldKinds.optional>>>;
33
+ export declare function getOrCreateInnerNode(treeNode: TreeNode, allowFreed?: true): InnerNode;
25
34
  /**
26
- * Retrieves the flex node associated with the given target via {@link setFlexNode}, if any.
35
+ * For "cooked" nodes this is a FlexTreeNode thats a projection of forest content.
36
+ * For {@link Unhydrated} nodes this is a MapTreeNode.
37
+ * For "marinated" nodes, some code (ex: getOrCreateInnerNode) returns the FlexTreeNode thats a projection of forest content, and some code (ex: tryGetInnerNode) returns undefined.
38
+ *
39
+ * @remarks
40
+ * Currently MapTreeNode extends FlexTreeNode, and most code which can work with either just uses FlexTreeNode.
41
+ * TODO: Code should be migrating toward using this type to distinguish to two use-cases.
42
+ *
43
+ * TODO: The inconsistent handling of "marinated" cases should be cleaned up.
44
+ * Maybe getOrCreateInnerNode should cook marinated nodes so they have a proper InnerNode?
45
+ */
46
+ export type InnerNode = FlexTreeNode | MapTreeNode;
47
+ /**
48
+ * Retrieves the InnerNode associated with the given target via {@link setInnerNode}, if any.
49
+ * @remarks
50
+ * If `target` is a unhydrated node, returns its MapTreeNode.
51
+ * If `target` is a cooked node (or marinated but a FlexTreeNode exists) returns the FlexTreeNode.
52
+ * If the target is not a node, or a marinated node with no FlexTreeNode for its anchor, returns undefined.
27
53
  */
28
- export declare function tryGetFlexNode(target: unknown): FlexTreeNode | undefined;
54
+ export declare function tryGetInnerNode(target: unknown): InnerNode | undefined;
29
55
  /**
30
- * Retrieves the proxy associated with the given flex node via {@link setFlexNode}, if any.
56
+ * Retrieves the proxy associated with the given flex node via {@link setInnerNode}, if any.
31
57
  */
32
- export declare function tryGetProxy(flexNode: FlexTreeNode): TreeNode | undefined;
58
+ export declare function tryGetCachedTreeNode(flexNode: InnerNode): TreeNode | undefined;
33
59
  /**
34
- * Associate the given proxy and the given flex node.
35
- * @returns The proxy
60
+ * Associate the given TreeNode and the given flex node.
61
+ * @returns The node.
36
62
  * @remarks
37
- * This creates a 1:1 mapping between the proxy and tree node.
38
- * Either can be retrieved from the other via {@link getFlexNode}/{@link tryGetFlexNode} or {@link tryGetProxy}.
63
+ * This creates a 1:1 mapping between the tree node and InnerNode.
64
+ * Either can be retrieved from the other via {@link getOrCreateInnerNode}/{@link tryGetInnerNode} or {@link tryGetCachedTreeNode}.
39
65
  * If the given proxy is already mapped to an flex node, the existing mapping will be overwritten.
40
66
  * If the given flex node is already mapped to a different proxy, this function will fail.
41
67
  */
42
- export declare function setFlexNode<TProxy extends TreeNode>(proxy: TProxy, flexNode: FlexTreeNode): TProxy;
68
+ export declare function setInnerNode<TNode extends TreeNode>(node: TNode, innerNode: InnerNode): TNode;
43
69
  /**
44
70
  * Given a node's schema, return the corresponding object in the proxy-based API.
45
71
  */
46
72
  type TypedNode<TSchema extends FlexTreeNodeSchema> = TreeNode & WithType<TSchema["name"]>;
73
+ export declare function tryDisposeTreeNode(anchorNode: AnchorNode): void;
47
74
  export {};
48
75
  //# sourceMappingURL=proxyBinding.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"proxyBinding.d.ts","sourceRoot":"","sources":["../../src/simple-tree/proxyBinding.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,KAAK,MAAM,EAAc,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAEN,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EAGvB,KAAK,UAAU,EACf,KAAK,eAAe,EAGpB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAyBhD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,UAAU,CAezF;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAC1B,KAAK,EAAE,SAAS,CAAC,oBAAoB,CAAC,EACtC,UAAU,CAAC,EAAE,IAAI,GACf,kBAAkB,CAAC;AACtB,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,UAAU,CAAC,EAAE,IAAI,GAAG,YAAY,CAAC;AACnF,wBAAgB,WAAW,CAC1B,KAAK,EAAE,WAAW,EAClB,UAAU,CAAC,EAAE,IAAI,GACf,eAAe,CAAC,iBAAiB,CAAC,MAAM,EAAE,eAAe,CAAC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC3F,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,IAAI,GAAG,YAAY,CAAC;AAyB9E;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CAOxE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG,QAAQ,GAAG,SAAS,CAKxE;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,MAAM,SAAS,QAAQ,EAClD,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,YAAY,GACpB,MAAM,CAiBR;AAuBD;;GAEG;AACH,KAAK,SAAS,CAAC,OAAO,SAAS,kBAAkB,IAAI,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"proxyBinding.d.ts","sourceRoot":"","sources":["../../src/simple-tree/proxyBinding.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,KAAK,MAAM,EAAc,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAEN,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EAGvB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,WAAW,EAEhB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAIpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAgDhD;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,UAAU,CAezF;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CACnC,QAAQ,EAAE,SAAS,CAAC,oBAAoB,CAAC,EACzC,UAAU,CAAC,EAAE,IAAI,GACf,SAAS,GAAG,kBAAkB,CAAC;AAClC,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;AAC5F,wBAAgB,oBAAoB,CACnC,QAAQ,EAAE,WAAW,EACrB,UAAU,CAAC,EAAE,IAAI,GACf,SAAS,GACX,eAAe,CAAC,iBAAiB,CAAC,MAAM,EAAE,eAAe,CAAC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACzF,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;AA0BvF;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,WAAW,CAAC;AAEnD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAoBtE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAO9E;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,KAAK,SAAS,QAAQ,EAClD,IAAI,EAAE,KAAK,EACX,SAAS,EAAE,SAAS,GAClB,KAAK,CAmBP;AAwBD;;GAEG;AACH,KAAK,SAAS,CAAC,OAAO,SAAS,kBAAkB,IAAI,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAE1F,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAM/D"}
@@ -9,34 +9,61 @@ import { fail } from "../util/index.js";
9
9
  // TODO: decide how to deal with dependencies on flex-tree implementation.
10
10
  // eslint-disable-next-line import/no-internal-modules
11
11
  import { makeTree } from "../feature-libraries/flex-tree/lazyNode.js";
12
- // This file contains various maps and helpers for supporting proxy binding (a.k.a. proxy hydration).
12
+ import { getKernel } from "./core/index.js";
13
+ // This file contains various maps and helpers for supporting associating simple TreeNodes with their InnerNodes, and swapping those InnerNodes as part of hydration.
13
14
  // See ./ProxyBinding.md for a high-level overview of the process.
14
15
  /**
15
- * An anchor slot which associates an anchor with its corresponding node proxy, if there is one.
16
+ * An anchor slot which associates an anchor with its corresponding TreeNode, if there is one.
17
+ * @remarks
18
+ * For this to work, we have to require that there is at most a single view using a given AnchorSet.
19
+ * FlexTree already has this assumption, and we also assume there is a single simple-tree per FlexTree, so this is valid.
16
20
  */
17
21
  const proxySlot = anchorSlot();
18
- // The following records are maintained as WeakMaps, rather than a private symbol (e.g. like `targetSymbol`) on the node proxy itself.
22
+ // The following records are maintained as WeakMaps, rather than a private symbol (e.g. like `targetSymbol`) on the TreeNode.
19
23
  // The map behaves essentially the same, except that performing a lookup in the map will not perform a property read/get on the key object (as is the case with a symbol).
20
24
  // Since `SharedTreeNodes` are proxies with non-trivial `get` traps, this choice is meant to prevent the confusion of the lookup passing through multiple objects
21
25
  // via the trap, or the trap not properly handling the special symbol, etc.
22
- /** A reverse mapping of {@link proxySlot} that is updated at the same time. */
26
+ /**
27
+ * A reverse mapping of {@link proxySlot} that is updated at the same time.
28
+ *
29
+ * @remarks
30
+ * Nodes in this map are hydrated (and thus "marinated" or "cooked").
31
+ * Nodes not in this map are known to be {@link Unhydrated}.
32
+ * Thus this map can be used to check if a node is hydrated.
33
+ *
34
+ * Any node not in this map must be in {@link proxyToMapTreeNode} since it contains all unhydrated nodes.
35
+ * It also contains "marinated" nodes which are in both.
36
+ */
23
37
  const proxyToAnchorNode = new WeakMap();
24
- // Map unhydrated nodes to and from their underlying flex tree implementation.
25
- // These maps are populated after a user calls `const proxy = new Foo({})` but before `proxy` is inserted into the tree and queried.
38
+ /**
39
+ * Map {@link Unhydrated} nodes and "marinated" nodes to and from their underlying MapTreeNode.
40
+ * These maps are populated by the TreeNode's constructor when called by a user before the node is inserted into the tree and queried.
41
+ */
26
42
  const proxyToMapTreeNode = new WeakMap();
43
+ /**
44
+ * {@inheritdoc proxyToMapTreeNode}
45
+ */
27
46
  const mapTreeNodeToProxy = new WeakMap();
28
- /** Used by `anchorProxy` as an optimization to ensure that only one anchor is remembered at a time for a given anchor node */
47
+ /**
48
+ * Used by {@link anchorProxy} as an optimization to ensure that only one anchor is remembered at a time for a given anchor node
49
+ */
29
50
  const anchorForgetters = new WeakMap();
30
51
  /**
31
52
  * Creates an anchor node and associates it with the given proxy.
32
- * @privateRemarks Use `forgetters` to cleanup the anchor allocated by this function once the anchor is no longer needed.
53
+ * @privateRemarks
54
+ * Use `forgetters` to cleanup the anchor allocated by this function once the anchor is no longer needed.
33
55
  * In practice, this happens when either the anchor node is destroyed, or another anchor to the same node is created by a new flex node.
56
+ *
57
+ * The FlexTreeNode holds a reference to the same anchor, and has a lifetime at least as long as the simple-tree,
58
+ * so this would be unnecessary except for the case of "marinated" nodes, which have an anchor,
59
+ * but might not have a FlexTreeNode.
60
+ * Handling this case is an optimization assuming that this extra anchor reference is cheaper than eagerly creating FlexTreeNodes.
34
61
  */
35
62
  export function anchorProxy(anchors, path, proxy) {
36
63
  assert(!anchorForgetters.has(proxy), 0x91c /* Proxy anchor should not be set twice */);
37
64
  const anchor = anchors.track(path);
38
65
  const anchorNode = anchors.locate(anchor) ?? fail("Expected anchor node to be present");
39
- bindProxyToAnchorNode(proxy, anchorNode);
66
+ bindHydratedNodeToAnchor(proxy, anchorNode);
40
67
  const forget = () => {
41
68
  if (anchors.locate(anchor)) {
42
69
  anchors.forget(anchor);
@@ -48,8 +75,8 @@ export function anchorProxy(anchors, path, proxy) {
48
75
  const off = anchorNode.on("afterDestroy", forget);
49
76
  return anchorNode;
50
77
  }
51
- export function getFlexNode(proxy, allowFreed = false) {
52
- const anchorNode = proxyToAnchorNode.get(proxy);
78
+ export function getOrCreateInnerNode(treeNode, allowFreed = false) {
79
+ const anchorNode = proxyToAnchorNode.get(treeNode);
53
80
  if (anchorNode !== undefined) {
54
81
  // The proxy is bound to an anchor node, but it may or may not have an actual flex node yet
55
82
  const flexNode = anchorNode.slots.get(flexTreeSlot);
@@ -62,69 +89,98 @@ export function getFlexNode(proxy, allowFreed = false) {
62
89
  const newFlexNode = makeTree(context, cursor);
63
90
  cursor.free();
64
91
  // Calling this is a performance improvement, however, do this only after demand to avoid momentarily having no anchors to anchorNode
65
- anchorForgetters?.get(proxy)?.();
92
+ anchorForgetters?.get(treeNode)?.();
66
93
  if (!allowFreed) {
67
94
  assertFlexTreeEntityNotFreed(newFlexNode);
68
95
  }
69
96
  return newFlexNode;
70
97
  }
71
- return proxyToMapTreeNode.get(proxy) ?? fail("Expected raw tree node for proxy");
98
+ // Unhydrated case
99
+ return proxyToMapTreeNode.get(treeNode) ?? fail("Expected raw tree node for proxy");
72
100
  }
73
101
  /**
74
- * Retrieves the flex node associated with the given target via {@link setFlexNode}, if any.
102
+ * Retrieves the InnerNode associated with the given target via {@link setInnerNode}, if any.
103
+ * @remarks
104
+ * If `target` is a unhydrated node, returns its MapTreeNode.
105
+ * If `target` is a cooked node (or marinated but a FlexTreeNode exists) returns the FlexTreeNode.
106
+ * If the target is not a node, or a marinated node with no FlexTreeNode for its anchor, returns undefined.
75
107
  */
76
- export function tryGetFlexNode(target) {
108
+ export function tryGetInnerNode(target) {
77
109
  // Calling 'WeakMap.get()' with primitives (numbers, strings, etc.) will return undefined.
78
110
  // This is in contrast to 'WeakMap.set()', which will throw a TypeError if given a non-object key.
79
- return (proxyToAnchorNode.get(target)?.slots.get(flexTreeSlot) ??
80
- proxyToMapTreeNode.get(target));
111
+ const anchorNode = proxyToAnchorNode.get(target);
112
+ // Hydrated node case
113
+ if (anchorNode !== undefined) {
114
+ const flex = anchorNode.slots.get(flexTreeSlot);
115
+ if (flex !== undefined) {
116
+ // Cooked, or possible Marinated but something else cased the flex tree node to exist.
117
+ return flex;
118
+ }
119
+ // Marinated case
120
+ assert(proxyToMapTreeNode.get(target) === undefined, 0xa05 /* marinated nodes should not have MapTreeNodes */);
121
+ return undefined;
122
+ }
123
+ // Unhydrated node or not a node case:
124
+ return proxyToMapTreeNode.get(target);
81
125
  }
82
126
  /**
83
- * Retrieves the proxy associated with the given flex node via {@link setFlexNode}, if any.
127
+ * Retrieves the proxy associated with the given flex node via {@link setInnerNode}, if any.
84
128
  */
85
- export function tryGetProxy(flexNode) {
129
+ export function tryGetCachedTreeNode(flexNode) {
86
130
  if (isMapTreeNode(flexNode)) {
131
+ // Unhydrated case
87
132
  return mapTreeNodeToProxy.get(flexNode);
88
133
  }
134
+ // Hydrated case
89
135
  return flexNode.anchorNode.slots.get(proxySlot);
90
136
  }
91
137
  /**
92
- * Associate the given proxy and the given flex node.
93
- * @returns The proxy
138
+ * Associate the given TreeNode and the given flex node.
139
+ * @returns The node.
94
140
  * @remarks
95
- * This creates a 1:1 mapping between the proxy and tree node.
96
- * Either can be retrieved from the other via {@link getFlexNode}/{@link tryGetFlexNode} or {@link tryGetProxy}.
141
+ * This creates a 1:1 mapping between the tree node and InnerNode.
142
+ * Either can be retrieved from the other via {@link getOrCreateInnerNode}/{@link tryGetInnerNode} or {@link tryGetCachedTreeNode}.
97
143
  * If the given proxy is already mapped to an flex node, the existing mapping will be overwritten.
98
144
  * If the given flex node is already mapped to a different proxy, this function will fail.
99
145
  */
100
- export function setFlexNode(proxy, flexNode) {
101
- const existingFlexNode = proxyToAnchorNode.get(proxy)?.slots.get(flexTreeSlot);
146
+ export function setInnerNode(node, innerNode) {
147
+ const existingFlexNode = proxyToAnchorNode.get(node)?.slots.get(flexTreeSlot);
102
148
  assert(existingFlexNode === undefined, 0x91d /* Cannot associate a flex node with multiple targets */);
103
- if (isMapTreeNode(flexNode)) {
104
- proxyToMapTreeNode.set(proxy, flexNode);
105
- mapTreeNodeToProxy.set(flexNode, proxy);
149
+ if (isMapTreeNode(innerNode)) {
150
+ // Unhydrated case
151
+ proxyToMapTreeNode.set(node, innerNode);
152
+ mapTreeNodeToProxy.set(innerNode, node);
106
153
  }
107
154
  else {
108
- assert(tryGetProxy(flexNode) === undefined, 0x7f5 /* Cannot associate an flex node with multiple targets */);
109
- bindProxyToAnchorNode(proxy, flexNode.anchorNode);
155
+ // Hydrated case
156
+ assert(tryGetCachedTreeNode(innerNode) === undefined, 0x7f5 /* Cannot associate an flex node with multiple targets */);
157
+ bindHydratedNodeToAnchor(node, innerNode.anchorNode);
110
158
  }
111
- return proxy;
159
+ return node;
112
160
  }
113
161
  /**
114
- * Bi-directionally associates the given proxy to the given anchor node.
115
- * @remarks Cleans up mappings to raw flex nodes - it is assumed that they are no longer needed once the proxy has an anchor node.
162
+ * Bi-directionally associates the given hydrated TreeNode to the given anchor node.
163
+ * @remarks Cleans up mappings to {@link MapTreeNode} - it is assumed that they are no longer needed once the proxy has an anchor node.
116
164
  */
117
- function bindProxyToAnchorNode(proxy, anchorNode) {
165
+ function bindHydratedNodeToAnchor(node, anchorNode) {
118
166
  // If the proxy currently has a raw node, forget it
119
- const mapTreeNode = proxyToMapTreeNode.get(proxy);
167
+ const mapTreeNode = proxyToMapTreeNode.get(node);
120
168
  if (mapTreeNode !== undefined) {
121
- proxyToMapTreeNode.delete(proxy);
169
+ proxyToMapTreeNode.delete(node);
122
170
  mapTreeNodeToProxy.delete(mapTreeNode);
123
171
  }
124
172
  // Once a proxy has been associated with an anchor node, it should never change to another anchor node
125
- assert(!proxyToAnchorNode.has(proxy), 0x91e /* Proxy has already been bound to a different anchor node */);
126
- proxyToAnchorNode.set(proxy, anchorNode);
173
+ assert(!proxyToAnchorNode.has(node), 0x91e /* Proxy has already been bound to a different anchor node */);
174
+ proxyToAnchorNode.set(node, anchorNode);
127
175
  // However, it's fine for an anchor node to rotate through different proxies when the content at that place in the tree is replaced.
128
- anchorNode.slots.set(proxySlot, proxy);
176
+ anchorNode.slots.set(proxySlot, node);
177
+ getKernel(node).hydrate(anchorNode);
178
+ }
179
+ export function tryDisposeTreeNode(anchorNode) {
180
+ const treeNode = anchorNode.slots.get(proxySlot);
181
+ if (treeNode !== undefined) {
182
+ const kernel = getKernel(treeNode);
183
+ kernel.dispose();
184
+ }
129
185
  }
130
186
  //# sourceMappingURL=proxyBinding.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"proxyBinding.js","sourceRoot":"","sources":["../../src/simple-tree/proxyBinding.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/core-utils/internal\";\n\nimport { type AnchorNode, type AnchorSet, type UpPath, anchorSlot } from \"../core/index.js\";\nimport {\n\tContextSlot,\n\ttype FlexTreeNodeSchema,\n\ttype FlexMapNodeSchema,\n\ttype FlexObjectNodeSchema,\n\ttype FlexTreeMapNode,\n\ttype FlexTreeNode,\n\ttype FlexTreeObjectNode,\n\tassertFlexTreeEntityNotFreed,\n\tflexTreeSlot,\n\ttype FieldKinds,\n\ttype FlexFieldSchema,\n\ttype MapTreeNode,\n\tisMapTreeNode,\n} from \"../feature-libraries/index.js\";\nimport { fail } from \"../util/index.js\";\nimport type { WithType } from \"./schemaTypes.js\";\nimport type { TreeArrayNode } from \"./arrayNode.js\";\nimport type { TreeNode } from \"./types.js\";\n// TODO: decide how to deal with dependencies on flex-tree implementation.\n// eslint-disable-next-line import/no-internal-modules\nimport { makeTree } from \"../feature-libraries/flex-tree/lazyNode.js\";\nimport type { TreeMapNode } from \"./mapNode.js\";\n\n// This file contains various maps and helpers for supporting proxy binding (a.k.a. proxy hydration).\n// See ./ProxyBinding.md for a high-level overview of the process.\n\n/**\n * An anchor slot which associates an anchor with its corresponding node proxy, if there is one.\n */\nconst proxySlot = anchorSlot<TreeNode>();\n\n// The following records are maintained as WeakMaps, rather than a private symbol (e.g. like `targetSymbol`) on the node proxy itself.\n// The map behaves essentially the same, except that performing a lookup in the map will not perform a property read/get on the key object (as is the case with a symbol).\n// Since `SharedTreeNodes` are proxies with non-trivial `get` traps, this choice is meant to prevent the confusion of the lookup passing through multiple objects\n// via the trap, or the trap not properly handling the special symbol, etc.\n\n/** A reverse mapping of {@link proxySlot} that is updated at the same time. */\nconst proxyToAnchorNode = new WeakMap<TreeNode, AnchorNode>();\n\n// Map unhydrated nodes to and from their underlying flex tree implementation.\n// These maps are populated after a user calls `const proxy = new Foo({})` but before `proxy` is inserted into the tree and queried.\nconst proxyToMapTreeNode = new WeakMap<TreeNode, MapTreeNode>();\nconst mapTreeNodeToProxy = new WeakMap<MapTreeNode, TreeNode>();\n/** Used by `anchorProxy` as an optimization to ensure that only one anchor is remembered at a time for a given anchor node */\nconst anchorForgetters = new WeakMap<TreeNode, () => void>();\n\n/**\n * Creates an anchor node and associates it with the given proxy.\n * @privateRemarks Use `forgetters` to cleanup the anchor allocated by this function once the anchor is no longer needed.\n * In practice, this happens when either the anchor node is destroyed, or another anchor to the same node is created by a new flex node.\n */\nexport function anchorProxy(anchors: AnchorSet, path: UpPath, proxy: TreeNode): AnchorNode {\n\tassert(!anchorForgetters.has(proxy), 0x91c /* Proxy anchor should not be set twice */);\n\tconst anchor = anchors.track(path);\n\tconst anchorNode = anchors.locate(anchor) ?? fail(\"Expected anchor node to be present\");\n\tbindProxyToAnchorNode(proxy, anchorNode);\n\tconst forget = (): void => {\n\t\tif (anchors.locate(anchor)) {\n\t\t\tanchors.forget(anchor);\n\t\t}\n\t\tanchorForgetters.delete(proxy);\n\t\toff();\n\t};\n\tanchorForgetters.set(proxy, forget);\n\tconst off = anchorNode.on(\"afterDestroy\", forget);\n\treturn anchorNode;\n}\n\n/**\n * Retrieves the flex node associated with the given target via {@link setFlexNode}.\n * @remarks Fails if the flex node has not been set.\n */\nexport function getFlexNode(\n\tproxy: TypedNode<FlexObjectNodeSchema>,\n\tallowFreed?: true,\n): FlexTreeObjectNode;\nexport function getFlexNode(proxy: TreeArrayNode, allowFreed?: true): FlexTreeNode;\nexport function getFlexNode(\n\tproxy: TreeMapNode,\n\tallowFreed?: true,\n): FlexTreeMapNode<FlexMapNodeSchema<string, FlexFieldSchema<typeof FieldKinds.optional>>>;\nexport function getFlexNode(proxy: TreeNode, allowFreed?: true): FlexTreeNode;\nexport function getFlexNode(proxy: TreeNode, allowFreed = false): FlexTreeNode {\n\tconst anchorNode = proxyToAnchorNode.get(proxy);\n\tif (anchorNode !== undefined) {\n\t\t// The proxy is bound to an anchor node, but it may or may not have an actual flex node yet\n\t\tconst flexNode = anchorNode.slots.get(flexTreeSlot);\n\t\tif (flexNode !== undefined) {\n\t\t\treturn flexNode; // If it does have a flex node, return it...\n\t\t} // ...otherwise, the flex node must be created\n\t\tconst context = anchorNode.anchorSet.slots.get(ContextSlot) ?? fail(\"missing context\");\n\t\tconst cursor = context.checkout.forest.allocateCursor(\"getFlexNode\");\n\t\tcontext.checkout.forest.moveCursorToPath(anchorNode, cursor);\n\t\tconst newFlexNode = makeTree(context, cursor);\n\t\tcursor.free();\n\t\t// Calling this is a performance improvement, however, do this only after demand to avoid momentarily having no anchors to anchorNode\n\t\tanchorForgetters?.get(proxy)?.();\n\t\tif (!allowFreed) {\n\t\t\tassertFlexTreeEntityNotFreed(newFlexNode);\n\t\t}\n\t\treturn newFlexNode;\n\t}\n\n\treturn proxyToMapTreeNode.get(proxy) ?? fail(\"Expected raw tree node for proxy\");\n}\n\n/**\n * Retrieves the flex node associated with the given target via {@link setFlexNode}, if any.\n */\nexport function tryGetFlexNode(target: unknown): FlexTreeNode | undefined {\n\t// Calling 'WeakMap.get()' with primitives (numbers, strings, etc.) will return undefined.\n\t// This is in contrast to 'WeakMap.set()', which will throw a TypeError if given a non-object key.\n\treturn (\n\t\tproxyToAnchorNode.get(target as TreeNode)?.slots.get(flexTreeSlot) ??\n\t\tproxyToMapTreeNode.get(target as TreeNode)\n\t);\n}\n\n/**\n * Retrieves the proxy associated with the given flex node via {@link setFlexNode}, if any.\n */\nexport function tryGetProxy(flexNode: FlexTreeNode): TreeNode | undefined {\n\tif (isMapTreeNode(flexNode)) {\n\t\treturn mapTreeNodeToProxy.get(flexNode);\n\t}\n\treturn flexNode.anchorNode.slots.get(proxySlot);\n}\n\n/**\n * Associate the given proxy and the given flex node.\n * @returns The proxy\n * @remarks\n * This creates a 1:1 mapping between the proxy and tree node.\n * Either can be retrieved from the other via {@link getFlexNode}/{@link tryGetFlexNode} or {@link tryGetProxy}.\n * If the given proxy is already mapped to an flex node, the existing mapping will be overwritten.\n * If the given flex node is already mapped to a different proxy, this function will fail.\n */\nexport function setFlexNode<TProxy extends TreeNode>(\n\tproxy: TProxy,\n\tflexNode: FlexTreeNode,\n): TProxy {\n\tconst existingFlexNode = proxyToAnchorNode.get(proxy)?.slots.get(flexTreeSlot);\n\tassert(\n\t\texistingFlexNode === undefined,\n\t\t0x91d /* Cannot associate a flex node with multiple targets */,\n\t);\n\tif (isMapTreeNode(flexNode)) {\n\t\tproxyToMapTreeNode.set(proxy, flexNode);\n\t\tmapTreeNodeToProxy.set(flexNode, proxy);\n\t} else {\n\t\tassert(\n\t\t\ttryGetProxy(flexNode) === undefined,\n\t\t\t0x7f5 /* Cannot associate an flex node with multiple targets */,\n\t\t);\n\t\tbindProxyToAnchorNode(proxy, flexNode.anchorNode);\n\t}\n\treturn proxy;\n}\n\n/**\n * Bi-directionally associates the given proxy to the given anchor node.\n * @remarks Cleans up mappings to raw flex nodes - it is assumed that they are no longer needed once the proxy has an anchor node.\n */\nfunction bindProxyToAnchorNode(proxy: TreeNode, anchorNode: AnchorNode): void {\n\t// If the proxy currently has a raw node, forget it\n\tconst mapTreeNode = proxyToMapTreeNode.get(proxy);\n\tif (mapTreeNode !== undefined) {\n\t\tproxyToMapTreeNode.delete(proxy);\n\t\tmapTreeNodeToProxy.delete(mapTreeNode);\n\t}\n\t// Once a proxy has been associated with an anchor node, it should never change to another anchor node\n\tassert(\n\t\t!proxyToAnchorNode.has(proxy),\n\t\t0x91e /* Proxy has already been bound to a different anchor node */,\n\t);\n\tproxyToAnchorNode.set(proxy, anchorNode);\n\t// However, it's fine for an anchor node to rotate through different proxies when the content at that place in the tree is replaced.\n\tanchorNode.slots.set(proxySlot, proxy);\n}\n\n/**\n * Given a node's schema, return the corresponding object in the proxy-based API.\n */\ntype TypedNode<TSchema extends FlexTreeNodeSchema> = TreeNode & WithType<TSchema[\"name\"]>;\n"]}
1
+ {"version":3,"file":"proxyBinding.js","sourceRoot":"","sources":["../../src/simple-tree/proxyBinding.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/core-utils/internal\";\n\nimport { type AnchorNode, type AnchorSet, type UpPath, anchorSlot } from \"../core/index.js\";\nimport {\n\tContextSlot,\n\ttype FlexTreeNodeSchema,\n\ttype FlexMapNodeSchema,\n\ttype FlexObjectNodeSchema,\n\ttype FlexTreeMapNode,\n\ttype FlexTreeNode,\n\ttype FlexTreeObjectNode,\n\tassertFlexTreeEntityNotFreed,\n\tflexTreeSlot,\n\ttype FieldKinds,\n\ttype FlexFieldSchema,\n\ttype MapTreeNode,\n\tisMapTreeNode,\n} from \"../feature-libraries/index.js\";\nimport { fail } from \"../util/index.js\";\nimport type { WithType, TreeNode } from \"./core/index.js\";\nimport type { TreeArrayNode } from \"./arrayNode.js\";\n// TODO: decide how to deal with dependencies on flex-tree implementation.\n// eslint-disable-next-line import/no-internal-modules\nimport { makeTree } from \"../feature-libraries/flex-tree/lazyNode.js\";\nimport type { TreeMapNode } from \"./mapNode.js\";\nimport { getKernel } from \"./core/index.js\";\n\n// This file contains various maps and helpers for supporting associating simple TreeNodes with their InnerNodes, and swapping those InnerNodes as part of hydration.\n// See ./ProxyBinding.md for a high-level overview of the process.\n\n/**\n * An anchor slot which associates an anchor with its corresponding TreeNode, if there is one.\n * @remarks\n * For this to work, we have to require that there is at most a single view using a given AnchorSet.\n * FlexTree already has this assumption, and we also assume there is a single simple-tree per FlexTree, so this is valid.\n */\nconst proxySlot = anchorSlot<TreeNode>();\n\n// The following records are maintained as WeakMaps, rather than a private symbol (e.g. like `targetSymbol`) on the TreeNode.\n// The map behaves essentially the same, except that performing a lookup in the map will not perform a property read/get on the key object (as is the case with a symbol).\n// Since `SharedTreeNodes` are proxies with non-trivial `get` traps, this choice is meant to prevent the confusion of the lookup passing through multiple objects\n// via the trap, or the trap not properly handling the special symbol, etc.\n\n/**\n * A reverse mapping of {@link proxySlot} that is updated at the same time.\n *\n * @remarks\n * Nodes in this map are hydrated (and thus \"marinated\" or \"cooked\").\n * Nodes not in this map are known to be {@link Unhydrated}.\n * Thus this map can be used to check if a node is hydrated.\n *\n * Any node not in this map must be in {@link proxyToMapTreeNode} since it contains all unhydrated nodes.\n * It also contains \"marinated\" nodes which are in both.\n */\nconst proxyToAnchorNode = new WeakMap<TreeNode, AnchorNode>();\n\n/**\n * Map {@link Unhydrated} nodes and \"marinated\" nodes to and from their underlying MapTreeNode.\n * These maps are populated by the TreeNode's constructor when called by a user before the node is inserted into the tree and queried.\n */\nconst proxyToMapTreeNode = new WeakMap<TreeNode, MapTreeNode>();\n\n/**\n * {@inheritdoc proxyToMapTreeNode}\n */\nconst mapTreeNodeToProxy = new WeakMap<MapTreeNode, TreeNode>();\n\n/**\n * Used by {@link anchorProxy} as an optimization to ensure that only one anchor is remembered at a time for a given anchor node\n */\nconst anchorForgetters = new WeakMap<TreeNode, () => void>();\n\n/**\n * Creates an anchor node and associates it with the given proxy.\n * @privateRemarks\n * Use `forgetters` to cleanup the anchor allocated by this function once the anchor is no longer needed.\n * In practice, this happens when either the anchor node is destroyed, or another anchor to the same node is created by a new flex node.\n *\n * The FlexTreeNode holds a reference to the same anchor, and has a lifetime at least as long as the simple-tree,\n * so this would be unnecessary except for the case of \"marinated\" nodes, which have an anchor,\n * but might not have a FlexTreeNode.\n * Handling this case is an optimization assuming that this extra anchor reference is cheaper than eagerly creating FlexTreeNodes.\n */\nexport function anchorProxy(anchors: AnchorSet, path: UpPath, proxy: TreeNode): AnchorNode {\n\tassert(!anchorForgetters.has(proxy), 0x91c /* Proxy anchor should not be set twice */);\n\tconst anchor = anchors.track(path);\n\tconst anchorNode = anchors.locate(anchor) ?? fail(\"Expected anchor node to be present\");\n\tbindHydratedNodeToAnchor(proxy, anchorNode);\n\tconst forget = (): void => {\n\t\tif (anchors.locate(anchor)) {\n\t\t\tanchors.forget(anchor);\n\t\t}\n\t\tanchorForgetters.delete(proxy);\n\t\toff();\n\t};\n\tanchorForgetters.set(proxy, forget);\n\tconst off = anchorNode.on(\"afterDestroy\", forget);\n\treturn anchorNode;\n}\n\n/**\n * Retrieves the flex node associated with the given target via {@link setInnerNode}.\n * @remarks\n * For {@link Unhydrated} nodes, this returns the MapTreeNode.\n *\n * For hydrated nodes it returns a FlexTreeNode backed by the forest.\n * Note that for \"marinated\" nodes, this FlexTreeNode exists and returns it: it does not return the MapTreeNode which is the current InnerNode.\n */\nexport function getOrCreateInnerNode(\n\ttreeNode: TypedNode<FlexObjectNodeSchema>,\n\tallowFreed?: true,\n): InnerNode & FlexTreeObjectNode;\nexport function getOrCreateInnerNode(treeNode: TreeArrayNode, allowFreed?: true): InnerNode;\nexport function getOrCreateInnerNode(\n\ttreeNode: TreeMapNode,\n\tallowFreed?: true,\n): InnerNode &\n\tFlexTreeMapNode<FlexMapNodeSchema<string, FlexFieldSchema<typeof FieldKinds.optional>>>;\nexport function getOrCreateInnerNode(treeNode: TreeNode, allowFreed?: true): InnerNode;\nexport function getOrCreateInnerNode(treeNode: TreeNode, allowFreed = false): InnerNode {\n\tconst anchorNode = proxyToAnchorNode.get(treeNode);\n\tif (anchorNode !== undefined) {\n\t\t// The proxy is bound to an anchor node, but it may or may not have an actual flex node yet\n\t\tconst flexNode = anchorNode.slots.get(flexTreeSlot);\n\t\tif (flexNode !== undefined) {\n\t\t\treturn flexNode; // If it does have a flex node, return it...\n\t\t} // ...otherwise, the flex node must be created\n\t\tconst context = anchorNode.anchorSet.slots.get(ContextSlot) ?? fail(\"missing context\");\n\t\tconst cursor = context.checkout.forest.allocateCursor(\"getFlexNode\");\n\t\tcontext.checkout.forest.moveCursorToPath(anchorNode, cursor);\n\t\tconst newFlexNode = makeTree(context, cursor);\n\t\tcursor.free();\n\t\t// Calling this is a performance improvement, however, do this only after demand to avoid momentarily having no anchors to anchorNode\n\t\tanchorForgetters?.get(treeNode)?.();\n\t\tif (!allowFreed) {\n\t\t\tassertFlexTreeEntityNotFreed(newFlexNode);\n\t\t}\n\t\treturn newFlexNode;\n\t}\n\n\t// Unhydrated case\n\treturn proxyToMapTreeNode.get(treeNode) ?? fail(\"Expected raw tree node for proxy\");\n}\n\n/**\n * For \"cooked\" nodes this is a FlexTreeNode thats a projection of forest content.\n * For {@link Unhydrated} nodes this is a MapTreeNode.\n * For \"marinated\" nodes, some code (ex: getOrCreateInnerNode) returns the FlexTreeNode thats a projection of forest content, and some code (ex: tryGetInnerNode) returns undefined.\n *\n * @remarks\n * Currently MapTreeNode extends FlexTreeNode, and most code which can work with either just uses FlexTreeNode.\n * TODO: Code should be migrating toward using this type to distinguish to two use-cases.\n *\n * TODO: The inconsistent handling of \"marinated\" cases should be cleaned up.\n * Maybe getOrCreateInnerNode should cook marinated nodes so they have a proper InnerNode?\n */\nexport type InnerNode = FlexTreeNode | MapTreeNode;\n\n/**\n * Retrieves the InnerNode associated with the given target via {@link setInnerNode}, if any.\n * @remarks\n * If `target` is a unhydrated node, returns its MapTreeNode.\n * If `target` is a cooked node (or marinated but a FlexTreeNode exists) returns the FlexTreeNode.\n * If the target is not a node, or a marinated node with no FlexTreeNode for its anchor, returns undefined.\n */\nexport function tryGetInnerNode(target: unknown): InnerNode | undefined {\n\t// Calling 'WeakMap.get()' with primitives (numbers, strings, etc.) will return undefined.\n\t// This is in contrast to 'WeakMap.set()', which will throw a TypeError if given a non-object key.\n\tconst anchorNode = proxyToAnchorNode.get(target as TreeNode);\n\t// Hydrated node case\n\tif (anchorNode !== undefined) {\n\t\tconst flex = anchorNode.slots.get(flexTreeSlot);\n\t\tif (flex !== undefined) {\n\t\t\t// Cooked, or possible Marinated but something else cased the flex tree node to exist.\n\t\t\treturn flex;\n\t\t}\n\t\t// Marinated case\n\t\tassert(\n\t\t\tproxyToMapTreeNode.get(target as TreeNode) === undefined,\n\t\t\t0xa05 /* marinated nodes should not have MapTreeNodes */,\n\t\t);\n\t\treturn undefined;\n\t}\n\t// Unhydrated node or not a node case:\n\treturn proxyToMapTreeNode.get(target as TreeNode);\n}\n\n/**\n * Retrieves the proxy associated with the given flex node via {@link setInnerNode}, if any.\n */\nexport function tryGetCachedTreeNode(flexNode: InnerNode): TreeNode | undefined {\n\tif (isMapTreeNode(flexNode)) {\n\t\t// Unhydrated case\n\t\treturn mapTreeNodeToProxy.get(flexNode);\n\t}\n\t// Hydrated case\n\treturn flexNode.anchorNode.slots.get(proxySlot);\n}\n\n/**\n * Associate the given TreeNode and the given flex node.\n * @returns The node.\n * @remarks\n * This creates a 1:1 mapping between the tree node and InnerNode.\n * Either can be retrieved from the other via {@link getOrCreateInnerNode}/{@link tryGetInnerNode} or {@link tryGetCachedTreeNode}.\n * If the given proxy is already mapped to an flex node, the existing mapping will be overwritten.\n * If the given flex node is already mapped to a different proxy, this function will fail.\n */\nexport function setInnerNode<TNode extends TreeNode>(\n\tnode: TNode,\n\tinnerNode: InnerNode,\n): TNode {\n\tconst existingFlexNode = proxyToAnchorNode.get(node)?.slots.get(flexTreeSlot);\n\tassert(\n\t\texistingFlexNode === undefined,\n\t\t0x91d /* Cannot associate a flex node with multiple targets */,\n\t);\n\tif (isMapTreeNode(innerNode)) {\n\t\t// Unhydrated case\n\t\tproxyToMapTreeNode.set(node, innerNode);\n\t\tmapTreeNodeToProxy.set(innerNode, node);\n\t} else {\n\t\t// Hydrated case\n\t\tassert(\n\t\t\ttryGetCachedTreeNode(innerNode) === undefined,\n\t\t\t0x7f5 /* Cannot associate an flex node with multiple targets */,\n\t\t);\n\t\tbindHydratedNodeToAnchor(node, innerNode.anchorNode);\n\t}\n\treturn node;\n}\n\n/**\n * Bi-directionally associates the given hydrated TreeNode to the given anchor node.\n * @remarks Cleans up mappings to {@link MapTreeNode} - it is assumed that they are no longer needed once the proxy has an anchor node.\n */\nfunction bindHydratedNodeToAnchor(node: TreeNode, anchorNode: AnchorNode): void {\n\t// If the proxy currently has a raw node, forget it\n\tconst mapTreeNode = proxyToMapTreeNode.get(node);\n\tif (mapTreeNode !== undefined) {\n\t\tproxyToMapTreeNode.delete(node);\n\t\tmapTreeNodeToProxy.delete(mapTreeNode);\n\t}\n\t// Once a proxy has been associated with an anchor node, it should never change to another anchor node\n\tassert(\n\t\t!proxyToAnchorNode.has(node),\n\t\t0x91e /* Proxy has already been bound to a different anchor node */,\n\t);\n\tproxyToAnchorNode.set(node, anchorNode);\n\t// However, it's fine for an anchor node to rotate through different proxies when the content at that place in the tree is replaced.\n\tanchorNode.slots.set(proxySlot, node);\n\tgetKernel(node).hydrate(anchorNode);\n}\n\n/**\n * Given a node's schema, return the corresponding object in the proxy-based API.\n */\ntype TypedNode<TSchema extends FlexTreeNodeSchema> = TreeNode & WithType<TSchema[\"name\"]>;\n\nexport function tryDisposeTreeNode(anchorNode: AnchorNode): void {\n\tconst treeNode = anchorNode.slots.get(proxySlot);\n\tif (treeNode !== undefined) {\n\t\tconst kernel = getKernel(treeNode);\n\t\tkernel.dispose();\n\t}\n}\n"]}