@fluidframework/tree 2.22.1 → 2.23.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 (427) hide show
  1. package/.vscode/extensions.json +1 -0
  2. package/CHANGELOG.md +47 -0
  3. package/api-report/tree.alpha.api.md +31 -0
  4. package/dist/alpha.d.ts +1 -0
  5. package/dist/codec/codec.js +3 -3
  6. package/dist/codec/codec.js.map +1 -1
  7. package/dist/codec/discriminatedUnions.d.ts.map +1 -1
  8. package/dist/codec/discriminatedUnions.js +1 -1
  9. package/dist/codec/discriminatedUnions.js.map +1 -1
  10. package/dist/core/schema-stored/schema.d.ts.map +1 -1
  11. package/dist/core/schema-stored/schema.js +3 -3
  12. package/dist/core/schema-stored/schema.js.map +1 -1
  13. package/dist/core/tree/anchorSet.d.ts.map +1 -1
  14. package/dist/core/tree/anchorSet.js +18 -13
  15. package/dist/core/tree/anchorSet.js.map +1 -1
  16. package/dist/core/tree/treeTextFormat.js +1 -1
  17. package/dist/core/tree/treeTextFormat.js.map +1 -1
  18. package/dist/feature-libraries/chunked-forest/basicChunk.d.ts.map +1 -1
  19. package/dist/feature-libraries/chunked-forest/basicChunk.js +11 -8
  20. package/dist/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
  21. package/dist/feature-libraries/chunked-forest/chunkTree.js +2 -2
  22. package/dist/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  23. package/dist/feature-libraries/chunked-forest/chunkedForest.js +3 -3
  24. package/dist/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  25. package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js +2 -2
  26. package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
  27. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  28. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js +4 -3
  29. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  30. package/dist/feature-libraries/chunked-forest/codec/nodeShape.js +2 -2
  31. package/dist/feature-libraries/chunked-forest/codec/nodeShape.js.map +1 -1
  32. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncoding.d.ts.map +1 -1
  33. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncoding.js +3 -3
  34. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncoding.js.map +1 -1
  35. package/dist/feature-libraries/chunked-forest/emptyChunk.js +14 -14
  36. package/dist/feature-libraries/chunked-forest/emptyChunk.js.map +1 -1
  37. package/dist/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
  38. package/dist/feature-libraries/chunked-forest/uniformChunk.js +6 -4
  39. package/dist/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
  40. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +1 -1
  41. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  42. package/dist/feature-libraries/default-schema/schemaChecker.js +1 -1
  43. package/dist/feature-libraries/default-schema/schemaChecker.js.map +1 -1
  44. package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  45. package/dist/feature-libraries/flex-tree/lazyField.js +4 -3
  46. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  47. package/dist/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
  48. package/dist/feature-libraries/flex-tree/lazyNode.js +5 -4
  49. package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  50. package/dist/feature-libraries/indexing/anchorTreeIndex.d.ts.map +1 -1
  51. package/dist/feature-libraries/indexing/anchorTreeIndex.js +1 -1
  52. package/dist/feature-libraries/indexing/anchorTreeIndex.js.map +1 -1
  53. package/dist/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
  54. package/dist/feature-libraries/modular-schema/comparison.js +6 -4
  55. package/dist/feature-libraries/modular-schema/comparison.js.map +1 -1
  56. package/dist/feature-libraries/modular-schema/isNeverTree.d.ts.map +1 -1
  57. package/dist/feature-libraries/modular-schema/isNeverTree.js +4 -4
  58. package/dist/feature-libraries/modular-schema/isNeverTree.js.map +1 -1
  59. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +4 -4
  60. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  61. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  62. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +10 -11
  63. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  64. package/dist/feature-libraries/node-key/mockNodeKeyManager.js +1 -1
  65. package/dist/feature-libraries/node-key/mockNodeKeyManager.js.map +1 -1
  66. package/dist/feature-libraries/object-forest/objectForest.js +1 -1
  67. package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
  68. package/dist/feature-libraries/schema-index/codec.js +1 -1
  69. package/dist/feature-libraries/schema-index/codec.js.map +1 -1
  70. package/dist/feature-libraries/sequence-field/compose.js +1 -1
  71. package/dist/feature-libraries/sequence-field/compose.js.map +1 -1
  72. package/dist/feature-libraries/sequence-field/invert.js +1 -1
  73. package/dist/feature-libraries/sequence-field/invert.js.map +1 -1
  74. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.js +1 -1
  75. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.js.map +1 -1
  76. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js +1 -1
  77. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  78. package/dist/feature-libraries/sequence-field/utils.js +1 -1
  79. package/dist/feature-libraries/sequence-field/utils.js.map +1 -1
  80. package/dist/feature-libraries/treeCursorUtils.d.ts.map +1 -1
  81. package/dist/feature-libraries/treeCursorUtils.js +6 -4
  82. package/dist/feature-libraries/treeCursorUtils.js.map +1 -1
  83. package/dist/index.d.ts +3 -1
  84. package/dist/index.d.ts.map +1 -1
  85. package/dist/index.js +5 -1
  86. package/dist/index.js.map +1 -1
  87. package/dist/jsonDomainSchema.d.ts +113 -0
  88. package/dist/jsonDomainSchema.d.ts.map +1 -0
  89. package/dist/jsonDomainSchema.js +101 -0
  90. package/dist/jsonDomainSchema.js.map +1 -0
  91. package/dist/packageVersion.d.ts +1 -1
  92. package/dist/packageVersion.js +1 -1
  93. package/dist/packageVersion.js.map +1 -1
  94. package/dist/serializableDomainSchema.d.ts +108 -0
  95. package/dist/serializableDomainSchema.d.ts.map +1 -0
  96. package/dist/serializableDomainSchema.js +90 -0
  97. package/dist/serializableDomainSchema.js.map +1 -0
  98. package/dist/shared-tree/index.d.ts +1 -1
  99. package/dist/shared-tree/index.d.ts.map +1 -1
  100. package/dist/shared-tree/index.js.map +1 -1
  101. package/dist/shared-tree/schematizeTree.js +1 -1
  102. package/dist/shared-tree/schematizeTree.js.map +1 -1
  103. package/dist/shared-tree/sharedTree.d.ts +37 -20
  104. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  105. package/dist/shared-tree/sharedTree.js +17 -17
  106. package/dist/shared-tree/sharedTree.js.map +1 -1
  107. package/dist/shared-tree/sharedTreeChangeFamily.js +1 -1
  108. package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  109. package/dist/shared-tree/treeApiAlpha.d.ts.map +1 -1
  110. package/dist/shared-tree/treeApiAlpha.js +4 -4
  111. package/dist/shared-tree/treeApiAlpha.js.map +1 -1
  112. package/dist/shared-tree/treeCheckout.js +1 -1
  113. package/dist/shared-tree/treeCheckout.js.map +1 -1
  114. package/dist/shared-tree-core/editManager.d.ts +11 -2
  115. package/dist/shared-tree-core/editManager.d.ts.map +1 -1
  116. package/dist/shared-tree-core/editManager.js +70 -34
  117. package/dist/shared-tree-core/editManager.js.map +1 -1
  118. package/dist/shared-tree-core/resubmitMachine.d.ts +2 -0
  119. package/dist/shared-tree-core/resubmitMachine.d.ts.map +1 -1
  120. package/dist/shared-tree-core/resubmitMachine.js.map +1 -1
  121. package/dist/shared-tree-core/sharedTreeCore.d.ts +10 -3
  122. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  123. package/dist/shared-tree-core/sharedTreeCore.js +42 -7
  124. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  125. package/dist/simple-tree/api/customTree.js +3 -3
  126. package/dist/simple-tree/api/customTree.js.map +1 -1
  127. package/dist/simple-tree/api/schemaCreationUtilities.js +1 -1
  128. package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  129. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +1 -1
  130. package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  131. package/dist/simple-tree/api/simpleTreeIndex.js +3 -3
  132. package/dist/simple-tree/api/simpleTreeIndex.js.map +1 -1
  133. package/dist/simple-tree/api/tree.js +1 -1
  134. package/dist/simple-tree/api/tree.js.map +1 -1
  135. package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  136. package/dist/simple-tree/api/treeNodeApi.js +9 -5
  137. package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
  138. package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
  139. package/dist/simple-tree/api/verboseTree.js +5 -4
  140. package/dist/simple-tree/api/verboseTree.js.map +1 -1
  141. package/dist/simple-tree/api/view.js +1 -1
  142. package/dist/simple-tree/api/view.js.map +1 -1
  143. package/dist/simple-tree/arrayNode.js +2 -2
  144. package/dist/simple-tree/arrayNode.js.map +1 -1
  145. package/dist/simple-tree/core/getOrCreateNode.d.ts.map +1 -1
  146. package/dist/simple-tree/core/getOrCreateNode.js +1 -1
  147. package/dist/simple-tree/core/getOrCreateNode.js.map +1 -1
  148. package/dist/simple-tree/core/schemaCaching.js +1 -1
  149. package/dist/simple-tree/core/schemaCaching.js.map +1 -1
  150. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  151. package/dist/simple-tree/core/treeNodeKernel.js +6 -6
  152. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  153. package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  154. package/dist/simple-tree/core/unhydratedFlexTree.js +5 -5
  155. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  156. package/dist/simple-tree/objectNode.js +2 -2
  157. package/dist/simple-tree/objectNode.js.map +1 -1
  158. package/dist/simple-tree/proxies.js +1 -1
  159. package/dist/simple-tree/proxies.js.map +1 -1
  160. package/dist/simple-tree/toMapTree.js +3 -3
  161. package/dist/simple-tree/toMapTree.js.map +1 -1
  162. package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
  163. package/dist/simple-tree/toStoredSchema.js +2 -1
  164. package/dist/simple-tree/toStoredSchema.js.map +1 -1
  165. package/dist/simple-tree/treeNodeValid.d.ts.map +1 -1
  166. package/dist/simple-tree/treeNodeValid.js +5 -2
  167. package/dist/simple-tree/treeNodeValid.js.map +1 -1
  168. package/dist/util/idAllocator.js +1 -1
  169. package/dist/util/idAllocator.js.map +1 -1
  170. package/dist/util/index.d.ts +2 -2
  171. package/dist/util/index.d.ts.map +1 -1
  172. package/dist/util/index.js +5 -4
  173. package/dist/util/index.js.map +1 -1
  174. package/dist/util/nestedMap.d.ts +2 -10
  175. package/dist/util/nestedMap.d.ts.map +1 -1
  176. package/dist/util/nestedMap.js +9 -28
  177. package/dist/util/nestedMap.js.map +1 -1
  178. package/dist/util/utils.d.ts +23 -6
  179. package/dist/util/utils.d.ts.map +1 -1
  180. package/dist/util/utils.js +46 -13
  181. package/dist/util/utils.js.map +1 -1
  182. package/lib/alpha.d.ts +1 -0
  183. package/lib/codec/codec.js +3 -3
  184. package/lib/codec/codec.js.map +1 -1
  185. package/lib/codec/discriminatedUnions.d.ts.map +1 -1
  186. package/lib/codec/discriminatedUnions.js +1 -1
  187. package/lib/codec/discriminatedUnions.js.map +1 -1
  188. package/lib/core/schema-stored/schema.d.ts.map +1 -1
  189. package/lib/core/schema-stored/schema.js +3 -3
  190. package/lib/core/schema-stored/schema.js.map +1 -1
  191. package/lib/core/tree/anchorSet.d.ts.map +1 -1
  192. package/lib/core/tree/anchorSet.js +19 -14
  193. package/lib/core/tree/anchorSet.js.map +1 -1
  194. package/lib/core/tree/treeTextFormat.js +1 -1
  195. package/lib/core/tree/treeTextFormat.js.map +1 -1
  196. package/lib/feature-libraries/chunked-forest/basicChunk.d.ts.map +1 -1
  197. package/lib/feature-libraries/chunked-forest/basicChunk.js +11 -8
  198. package/lib/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
  199. package/lib/feature-libraries/chunked-forest/chunkTree.js +2 -2
  200. package/lib/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  201. package/lib/feature-libraries/chunked-forest/chunkedForest.js +3 -3
  202. package/lib/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  203. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js +2 -2
  204. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
  205. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  206. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js +4 -3
  207. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  208. package/lib/feature-libraries/chunked-forest/codec/nodeShape.js +2 -2
  209. package/lib/feature-libraries/chunked-forest/codec/nodeShape.js.map +1 -1
  210. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncoding.d.ts.map +1 -1
  211. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncoding.js +3 -3
  212. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncoding.js.map +1 -1
  213. package/lib/feature-libraries/chunked-forest/emptyChunk.js +14 -14
  214. package/lib/feature-libraries/chunked-forest/emptyChunk.js.map +1 -1
  215. package/lib/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
  216. package/lib/feature-libraries/chunked-forest/uniformChunk.js +6 -4
  217. package/lib/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
  218. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +1 -1
  219. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  220. package/lib/feature-libraries/default-schema/schemaChecker.js +1 -1
  221. package/lib/feature-libraries/default-schema/schemaChecker.js.map +1 -1
  222. package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  223. package/lib/feature-libraries/flex-tree/lazyField.js +4 -3
  224. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  225. package/lib/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
  226. package/lib/feature-libraries/flex-tree/lazyNode.js +5 -4
  227. package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  228. package/lib/feature-libraries/indexing/anchorTreeIndex.d.ts.map +1 -1
  229. package/lib/feature-libraries/indexing/anchorTreeIndex.js +1 -1
  230. package/lib/feature-libraries/indexing/anchorTreeIndex.js.map +1 -1
  231. package/lib/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
  232. package/lib/feature-libraries/modular-schema/comparison.js +6 -4
  233. package/lib/feature-libraries/modular-schema/comparison.js.map +1 -1
  234. package/lib/feature-libraries/modular-schema/isNeverTree.d.ts.map +1 -1
  235. package/lib/feature-libraries/modular-schema/isNeverTree.js +4 -4
  236. package/lib/feature-libraries/modular-schema/isNeverTree.js.map +1 -1
  237. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +4 -4
  238. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  239. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  240. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +11 -12
  241. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  242. package/lib/feature-libraries/node-key/mockNodeKeyManager.js +1 -1
  243. package/lib/feature-libraries/node-key/mockNodeKeyManager.js.map +1 -1
  244. package/lib/feature-libraries/object-forest/objectForest.js +1 -1
  245. package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
  246. package/lib/feature-libraries/schema-index/codec.js +1 -1
  247. package/lib/feature-libraries/schema-index/codec.js.map +1 -1
  248. package/lib/feature-libraries/sequence-field/compose.js +1 -1
  249. package/lib/feature-libraries/sequence-field/compose.js.map +1 -1
  250. package/lib/feature-libraries/sequence-field/invert.js +1 -1
  251. package/lib/feature-libraries/sequence-field/invert.js.map +1 -1
  252. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.js +1 -1
  253. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.js.map +1 -1
  254. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js +1 -1
  255. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  256. package/lib/feature-libraries/sequence-field/utils.js +1 -1
  257. package/lib/feature-libraries/sequence-field/utils.js.map +1 -1
  258. package/lib/feature-libraries/treeCursorUtils.d.ts.map +1 -1
  259. package/lib/feature-libraries/treeCursorUtils.js +6 -4
  260. package/lib/feature-libraries/treeCursorUtils.js.map +1 -1
  261. package/lib/index.d.ts +3 -1
  262. package/lib/index.d.ts.map +1 -1
  263. package/lib/index.js +2 -0
  264. package/lib/index.js.map +1 -1
  265. package/lib/jsonDomainSchema.d.ts +113 -0
  266. package/lib/jsonDomainSchema.d.ts.map +1 -0
  267. package/lib/jsonDomainSchema.js +98 -0
  268. package/lib/jsonDomainSchema.js.map +1 -0
  269. package/lib/packageVersion.d.ts +1 -1
  270. package/lib/packageVersion.js +1 -1
  271. package/lib/packageVersion.js.map +1 -1
  272. package/lib/serializableDomainSchema.d.ts +108 -0
  273. package/lib/serializableDomainSchema.d.ts.map +1 -0
  274. package/lib/serializableDomainSchema.js +87 -0
  275. package/lib/serializableDomainSchema.js.map +1 -0
  276. package/lib/shared-tree/index.d.ts +1 -1
  277. package/lib/shared-tree/index.d.ts.map +1 -1
  278. package/lib/shared-tree/index.js.map +1 -1
  279. package/lib/shared-tree/schematizeTree.js +1 -1
  280. package/lib/shared-tree/schematizeTree.js.map +1 -1
  281. package/lib/shared-tree/sharedTree.d.ts +37 -20
  282. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  283. package/lib/shared-tree/sharedTree.js +18 -18
  284. package/lib/shared-tree/sharedTree.js.map +1 -1
  285. package/lib/shared-tree/sharedTreeChangeFamily.js +1 -1
  286. package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  287. package/lib/shared-tree/treeApiAlpha.d.ts.map +1 -1
  288. package/lib/shared-tree/treeApiAlpha.js +4 -4
  289. package/lib/shared-tree/treeApiAlpha.js.map +1 -1
  290. package/lib/shared-tree/treeCheckout.js +1 -1
  291. package/lib/shared-tree/treeCheckout.js.map +1 -1
  292. package/lib/shared-tree-core/editManager.d.ts +11 -2
  293. package/lib/shared-tree-core/editManager.d.ts.map +1 -1
  294. package/lib/shared-tree-core/editManager.js +70 -34
  295. package/lib/shared-tree-core/editManager.js.map +1 -1
  296. package/lib/shared-tree-core/resubmitMachine.d.ts +2 -0
  297. package/lib/shared-tree-core/resubmitMachine.d.ts.map +1 -1
  298. package/lib/shared-tree-core/resubmitMachine.js.map +1 -1
  299. package/lib/shared-tree-core/sharedTreeCore.d.ts +10 -3
  300. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  301. package/lib/shared-tree-core/sharedTreeCore.js +42 -7
  302. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  303. package/lib/simple-tree/api/customTree.js +3 -3
  304. package/lib/simple-tree/api/customTree.js.map +1 -1
  305. package/lib/simple-tree/api/schemaCreationUtilities.js +1 -1
  306. package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  307. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +1 -1
  308. package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  309. package/lib/simple-tree/api/simpleTreeIndex.js +3 -3
  310. package/lib/simple-tree/api/simpleTreeIndex.js.map +1 -1
  311. package/lib/simple-tree/api/tree.js +1 -1
  312. package/lib/simple-tree/api/tree.js.map +1 -1
  313. package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  314. package/lib/simple-tree/api/treeNodeApi.js +9 -5
  315. package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
  316. package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
  317. package/lib/simple-tree/api/verboseTree.js +5 -4
  318. package/lib/simple-tree/api/verboseTree.js.map +1 -1
  319. package/lib/simple-tree/api/view.js +1 -1
  320. package/lib/simple-tree/api/view.js.map +1 -1
  321. package/lib/simple-tree/arrayNode.js +2 -2
  322. package/lib/simple-tree/arrayNode.js.map +1 -1
  323. package/lib/simple-tree/core/getOrCreateNode.d.ts.map +1 -1
  324. package/lib/simple-tree/core/getOrCreateNode.js +1 -1
  325. package/lib/simple-tree/core/getOrCreateNode.js.map +1 -1
  326. package/lib/simple-tree/core/schemaCaching.js +1 -1
  327. package/lib/simple-tree/core/schemaCaching.js.map +1 -1
  328. package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  329. package/lib/simple-tree/core/treeNodeKernel.js +6 -6
  330. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  331. package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  332. package/lib/simple-tree/core/unhydratedFlexTree.js +5 -5
  333. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  334. package/lib/simple-tree/objectNode.js +2 -2
  335. package/lib/simple-tree/objectNode.js.map +1 -1
  336. package/lib/simple-tree/proxies.js +1 -1
  337. package/lib/simple-tree/proxies.js.map +1 -1
  338. package/lib/simple-tree/toMapTree.js +3 -3
  339. package/lib/simple-tree/toMapTree.js.map +1 -1
  340. package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
  341. package/lib/simple-tree/toStoredSchema.js +2 -1
  342. package/lib/simple-tree/toStoredSchema.js.map +1 -1
  343. package/lib/simple-tree/treeNodeValid.d.ts.map +1 -1
  344. package/lib/simple-tree/treeNodeValid.js +5 -2
  345. package/lib/simple-tree/treeNodeValid.js.map +1 -1
  346. package/lib/util/idAllocator.js +1 -1
  347. package/lib/util/idAllocator.js.map +1 -1
  348. package/lib/util/index.d.ts +2 -2
  349. package/lib/util/index.d.ts.map +1 -1
  350. package/lib/util/index.js +2 -2
  351. package/lib/util/index.js.map +1 -1
  352. package/lib/util/nestedMap.d.ts +2 -10
  353. package/lib/util/nestedMap.d.ts.map +1 -1
  354. package/lib/util/nestedMap.js +5 -23
  355. package/lib/util/nestedMap.js.map +1 -1
  356. package/lib/util/utils.d.ts +23 -6
  357. package/lib/util/utils.d.ts.map +1 -1
  358. package/lib/util/utils.js +42 -11
  359. package/lib/util/utils.js.map +1 -1
  360. package/package.json +22 -22
  361. package/src/codec/codec.ts +3 -3
  362. package/src/codec/discriminatedUnions.ts +2 -1
  363. package/src/core/schema-stored/schema.ts +5 -3
  364. package/src/core/tree/anchorSet.ts +37 -26
  365. package/src/core/tree/treeTextFormat.ts +1 -1
  366. package/src/feature-libraries/chunked-forest/basicChunk.ts +11 -8
  367. package/src/feature-libraries/chunked-forest/chunkTree.ts +2 -2
  368. package/src/feature-libraries/chunked-forest/chunkedForest.ts +3 -3
  369. package/src/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.ts +2 -2
  370. package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +4 -3
  371. package/src/feature-libraries/chunked-forest/codec/nodeShape.ts +2 -2
  372. package/src/feature-libraries/chunked-forest/codec/schemaBasedEncoding.ts +4 -3
  373. package/src/feature-libraries/chunked-forest/emptyChunk.ts +14 -14
  374. package/src/feature-libraries/chunked-forest/uniformChunk.ts +6 -4
  375. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +1 -1
  376. package/src/feature-libraries/default-schema/schemaChecker.ts +1 -1
  377. package/src/feature-libraries/flex-tree/lazyField.ts +6 -8
  378. package/src/feature-libraries/flex-tree/lazyNode.ts +6 -4
  379. package/src/feature-libraries/indexing/anchorTreeIndex.ts +2 -1
  380. package/src/feature-libraries/modular-schema/comparison.ts +7 -5
  381. package/src/feature-libraries/modular-schema/isNeverTree.ts +6 -4
  382. package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +4 -4
  383. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +16 -12
  384. package/src/feature-libraries/node-key/mockNodeKeyManager.ts +1 -1
  385. package/src/feature-libraries/object-forest/objectForest.ts +1 -1
  386. package/src/feature-libraries/schema-index/codec.ts +1 -1
  387. package/src/feature-libraries/sequence-field/compose.ts +1 -1
  388. package/src/feature-libraries/sequence-field/invert.ts +1 -1
  389. package/src/feature-libraries/sequence-field/sequenceFieldCodecV1.ts +1 -1
  390. package/src/feature-libraries/sequence-field/sequenceFieldCodecV2.ts +1 -1
  391. package/src/feature-libraries/sequence-field/utils.ts +1 -1
  392. package/src/feature-libraries/treeCursorUtils.ts +6 -4
  393. package/src/index.ts +3 -1
  394. package/src/jsonDomainSchema.ts +129 -0
  395. package/src/packageVersion.ts +1 -1
  396. package/src/serializableDomainSchema.ts +121 -0
  397. package/src/shared-tree/index.ts +0 -1
  398. package/src/shared-tree/schematizeTree.ts +1 -1
  399. package/src/shared-tree/sharedTree.ts +31 -41
  400. package/src/shared-tree/sharedTreeChangeFamily.ts +1 -1
  401. package/src/shared-tree/treeApiAlpha.ts +12 -4
  402. package/src/shared-tree/treeCheckout.ts +1 -1
  403. package/src/shared-tree-core/editManager.ts +85 -47
  404. package/src/shared-tree-core/resubmitMachine.ts +2 -0
  405. package/src/shared-tree-core/sharedTreeCore.ts +62 -14
  406. package/src/simple-tree/api/customTree.ts +3 -3
  407. package/src/simple-tree/api/schemaCreationUtilities.ts +1 -1
  408. package/src/simple-tree/api/schemaFactoryRecursive.ts +1 -1
  409. package/src/simple-tree/api/simpleTreeIndex.ts +3 -3
  410. package/src/simple-tree/api/tree.ts +1 -1
  411. package/src/simple-tree/api/treeNodeApi.ts +11 -6
  412. package/src/simple-tree/api/verboseTree.ts +8 -4
  413. package/src/simple-tree/api/view.ts +1 -1
  414. package/src/simple-tree/arrayNode.ts +2 -2
  415. package/src/simple-tree/core/getOrCreateNode.ts +2 -1
  416. package/src/simple-tree/core/schemaCaching.ts +1 -1
  417. package/src/simple-tree/core/treeNodeKernel.ts +9 -6
  418. package/src/simple-tree/core/unhydratedFlexTree.ts +7 -5
  419. package/src/simple-tree/objectNode.ts +2 -2
  420. package/src/simple-tree/proxies.ts +1 -1
  421. package/src/simple-tree/toMapTree.ts +3 -3
  422. package/src/simple-tree/toStoredSchema.ts +2 -1
  423. package/src/simple-tree/treeNodeValid.ts +5 -2
  424. package/src/util/idAllocator.ts +1 -1
  425. package/src/util/index.ts +3 -2
  426. package/src/util/nestedMap.ts +9 -33
  427. package/src/util/utils.ts +52 -12
@@ -18,6 +18,8 @@ import {
18
18
  brand,
19
19
  brandedSlot,
20
20
  fail,
21
+ getOrAddEmptyToMap,
22
+ getOrCreate,
21
23
  } from "../../util/index.js";
22
24
  import type { FieldKey } from "../schema-stored/index.js";
23
25
 
@@ -474,7 +476,7 @@ export class AnchorSet implements AnchorLocator {
474
476
  }
475
477
  }
476
478
 
477
- return path ?? fail("internalize path must be a path");
479
+ return path ?? fail(0xaea /* internalize path must be a path */);
478
480
  }
479
481
 
480
482
  /**
@@ -711,15 +713,7 @@ export class AnchorSet implements AnchorLocator {
711
713
  /**
712
714
  * Events collected during the visit which get sent as a batch during "free".
713
715
  */
714
- bufferedEvents: [] as {
715
- node: PathNode;
716
- event: keyof AnchorEvents;
717
- /**
718
- * The key for the impacted field, if the event is associated with a key.
719
- * Some events, such as afterDestroy, do not involve a key, and thus leave this undefined.
720
- */
721
- changedField?: FieldKey;
722
- }[],
716
+ bufferedEvents: [] as BufferedEvent[],
723
717
 
724
718
  // 'currentDepth' and 'depthThresholdForSubtreeChanged' serve to keep track of when do we need to emit
725
719
  // subtreeChangedAfterBatch events.
@@ -751,25 +745,31 @@ export class AnchorSet implements AnchorLocator {
751
745
  node.removeRef();
752
746
  }
753
747
  this.anchorSet.activeVisitor = undefined;
754
- const alreadyEmitted = new Map<PathNode, string[]>();
755
- for (const { node, event } of this.bufferedEvents) {
756
- if (!alreadyEmitted.has(node)) {
757
- alreadyEmitted.set(node, []);
748
+
749
+ // Aggregate changedFields by node.
750
+ const eventsByNode: Map<PathNode, Set<FieldKey>> = new Map();
751
+ for (const { node, event, changedField } of this.bufferedEvents) {
752
+ if (event === "childrenChangedAfterBatch") {
753
+ const keys = getOrCreate(eventsByNode, node, () => new Set());
754
+ keys.add(
755
+ changedField ??
756
+ fail(0xb57 /* childrenChangedAfterBatch events should have a changedField */),
757
+ );
758
758
  }
759
- const emittedEvents = alreadyEmitted.get(node);
760
- if (emittedEvents?.includes(event) ?? false) {
759
+ }
760
+
761
+ const alreadyEmitted = new Map<PathNode, (keyof AnchorEvents)[]>();
762
+ for (const { node, event } of this.bufferedEvents) {
763
+ const emittedEvents = getOrAddEmptyToMap(alreadyEmitted, node);
764
+ if (emittedEvents.includes(event)) {
761
765
  continue;
762
766
  }
763
- emittedEvents?.push(event);
767
+ emittedEvents.push(event);
764
768
  if (event === "childrenChangedAfterBatch") {
765
- const fieldKeys: FieldKey[] = this.bufferedEvents
766
- .filter((e) => e.node === node && e.event === event)
767
- .map(
768
- (e) =>
769
- e.changedField ??
770
- fail("childrenChangedAfterBatch events should have a changedField"),
771
- );
772
- node.events.emit(event, { changedFields: new Set(fieldKeys) });
769
+ const changedFields =
770
+ eventsByNode.get(node) ??
771
+ fail(0xaeb /* childrenChangedAfterBatch events should have changedFields */);
772
+ node.events.emit(event, { changedFields });
773
773
  } else {
774
774
  node.events.emit(event);
775
775
  }
@@ -1031,7 +1031,8 @@ class PathNode extends ReferenceCountedBase implements UpPath<PathNode>, AnchorN
1031
1031
  public getOrCreateChildRef(key: FieldKey, index: number): [Anchor, AnchorNode] {
1032
1032
  const anchor = this.anchorSet.track(this.child(key, index));
1033
1033
  const node =
1034
- this.anchorSet.locate(anchor) ?? fail("cannot reference child that does not exist");
1034
+ this.anchorSet.locate(anchor) ??
1035
+ fail(0xaec /* cannot reference child that does not exist */);
1035
1036
  return [anchor, node];
1036
1037
  }
1037
1038
 
@@ -1194,3 +1195,13 @@ function binaryFind(sorted: readonly PathNode[], index: number): PathNode | unde
1194
1195
  }
1195
1196
  return undefined; // If we reach here, target is not in array (or array was not sorted)
1196
1197
  }
1198
+
1199
+ interface BufferedEvent {
1200
+ node: PathNode;
1201
+ event: keyof AnchorEvents;
1202
+ /**
1203
+ * The key for the impacted field, if the event is associated with a key.
1204
+ * Some events, such as afterDestroy, do not involve a key, and thus leave this undefined.
1205
+ */
1206
+ changedField?: FieldKey;
1207
+ }
@@ -90,7 +90,7 @@ export function getGenericTreeField<T>(
90
90
 
91
91
  // Do not just read field and check for undefined: see warning on FieldMapObject.
92
92
  if (Object.prototype.hasOwnProperty.call(children, key)) {
93
- return children[key] ?? fail("This wont be undefined due to the check above");
93
+ return children[key] ?? fail(0xaed /* This wont be undefined due to the check above */);
94
94
  }
95
95
  // Handle missing field:
96
96
  if (createIfMissing === false) {
@@ -234,7 +234,7 @@ export class BasicChunkCursor extends SynchronousCursor implements ChunkedCursor
234
234
  if (this.nestedCursor !== undefined) {
235
235
  return (
236
236
  this.nestedCursor.getPath(this.nestedPathPrefix(prefix)) ??
237
- fail("nested cursors should not be root")
237
+ fail(0xaee /* nested cursors should not be root */)
238
238
  );
239
239
  }
240
240
  assert(this.mode === CursorLocationType.Nodes, 0x524 /* must be in nodes mode */);
@@ -247,7 +247,7 @@ export class BasicChunkCursor extends SynchronousCursor implements ChunkedCursor
247
247
  // This uses index offset for actual node, when it should use offset for start of chunk.
248
248
  // To compensate, subtract this.indexWithinChunk below.
249
249
  const rootPath: UpPath =
250
- this.getOffsetPath(0, prefix) ?? fail("nested cursors should not be root");
250
+ this.getOffsetPath(0, prefix) ?? fail(0xaef /* nested cursors should not be root */);
251
251
  return {
252
252
  indexOffset: rootPath.parentIndex - this.indexWithinChunk,
253
253
  rootFieldOverride: rootPath.parentField,
@@ -483,8 +483,9 @@ export class BasicChunkCursor extends SynchronousCursor implements ChunkedCursor
483
483
  this.mode === CursorLocationType.Fields,
484
484
  0x52d /* can only navigate up from field when in field */,
485
485
  );
486
- this.siblings = this.siblingStack.pop() ?? fail("Unexpected siblingStack.length");
487
- this.index = this.indexStack.pop() ?? fail("Unexpected indexStack.length");
486
+ this.siblings =
487
+ this.siblingStack.pop() ?? fail(0xaf0 /* Unexpected siblingStack.length */);
488
+ this.index = this.indexStack.pop() ?? fail(0xaf1 /* Unexpected indexStack.length */);
488
489
  }
489
490
 
490
491
  public exitNode(): void {
@@ -498,12 +499,14 @@ export class BasicChunkCursor extends SynchronousCursor implements ChunkedCursor
498
499
  this.mode === CursorLocationType.Nodes,
499
500
  0x52e /* can only navigate up from node when in node */,
500
501
  );
501
- this.siblings = this.siblingStack.pop() ?? fail("Unexpected siblingStack.length");
502
- this.index = this.indexStack.pop() ?? fail("Unexpected indexStack.length");
502
+ this.siblings =
503
+ this.siblingStack.pop() ?? fail(0xaf2 /* Unexpected siblingStack.length */);
504
+ this.index = this.indexStack.pop() ?? fail(0xaf3 /* Unexpected indexStack.length */);
503
505
  this.indexOfChunk =
504
- this.indexOfChunkStack.pop() ?? fail("Unexpected indexOfChunkStack.length");
506
+ this.indexOfChunkStack.pop() ?? fail(0xaf4 /* Unexpected indexOfChunkStack.length */);
505
507
  this.indexWithinChunk =
506
- this.indexWithinChunkStack.pop() ?? fail("Unexpected indexWithinChunkStack.length");
508
+ this.indexWithinChunkStack.pop() ??
509
+ fail(0xaf5 /* Unexpected indexWithinChunkStack.length */);
507
510
  }
508
511
 
509
512
  private getNode(): BasicChunk {
@@ -247,7 +247,7 @@ export function tryShapeFromSchema(
247
247
  shapes: Map<TreeNodeSchemaIdentifier, ShapeInfo>,
248
248
  ): ShapeInfo {
249
249
  return getOrCreate(shapes, type, () => {
250
- const treeSchema = schema.nodeSchema.get(type) ?? fail("missing schema");
250
+ const treeSchema = schema.nodeSchema.get(type) ?? fail(0xaf9 /* missing schema */);
251
251
  if (treeSchema instanceof LeafNodeStoredSchema) {
252
252
  // Allow all string values (but only string values) to be compressed by the id compressor.
253
253
  // This allows compressing all compressible identifiers without requiring additional context to know which values could be identifiers.
@@ -284,7 +284,7 @@ export function tryShapeFromFieldSchema(
284
284
  key: FieldKey,
285
285
  shapes: Map<TreeNodeSchemaIdentifier, ShapeInfo>,
286
286
  ): FieldShape | undefined {
287
- const kind = policy.fieldKinds.get(type.kind) ?? fail("missing FieldKind");
287
+ const kind = policy.fieldKinds.get(type.kind) ?? fail(0xafa /* missing FieldKind */);
288
288
  if (kind.multiplicity !== Multiplicity.Single) {
289
289
  return undefined;
290
290
  }
@@ -227,7 +227,7 @@ export class ChunkedForest implements IEditableForest {
227
227
  assert(this.mutableChunk === undefined, 0x535 /* should be in field */);
228
228
  const parent = this.getParent();
229
229
  const chunks =
230
- parent.mutableChunk.fields.get(parent.key) ?? fail("missing edited field");
230
+ parent.mutableChunk.fields.get(parent.key) ?? fail(0xaf6 /* missing edited field */);
231
231
  let indexWithinChunk = index;
232
232
  let indexOfChunk = 0;
233
233
  let chunk = chunks[indexOfChunk] ?? oob();
@@ -236,7 +236,7 @@ export class ChunkedForest implements IEditableForest {
236
236
  indexWithinChunk -= chunk.topLevelLength;
237
237
  indexOfChunk++;
238
238
  if (indexOfChunk === chunks.length) {
239
- fail("missing edited node");
239
+ fail(0xaf7 /* missing edited node */);
240
240
  }
241
241
  }
242
242
  let found = chunks[indexOfChunk] ?? oob();
@@ -277,7 +277,7 @@ export class ChunkedForest implements IEditableForest {
277
277
  this.mutableChunk = undefined;
278
278
  },
279
279
  exitField(key: FieldKey): void {
280
- const top = this.mutableChunkStack.pop() ?? fail("should not be at root");
280
+ const top = this.mutableChunkStack.pop() ?? fail(0xaf8 /* should not be at root */);
281
281
  assert(this.mutableChunk === undefined, 0x539 /* should be in field */);
282
282
  this.mutableChunk = top.mutableChunk;
283
283
  },
@@ -85,7 +85,7 @@ export function handleShapesAndIdentifiers<TEncodedShape>(
85
85
  ) {
86
86
  // because "serializable" is allowed in buffer and it has type `any`, its very easy to mess up including of shapes in the buffer.
87
87
  // This catches the easiest way to get it wrong.
88
- fail("encoder interface instead of shape written to stream");
88
+ fail(0xb4b /* encoder interface instead of shape written to stream */);
89
89
  }
90
90
  }
91
91
  }
@@ -108,7 +108,7 @@ export function handleShapesAndIdentifiers<TEncodedShape>(
108
108
  if (item instanceof IdentifierToken) {
109
109
  array[index] = identifierTable.valueToIndex.get(item.identifier) ?? item.identifier;
110
110
  } else if (item instanceof Shape) {
111
- array[index] = shapeTable.valueToIndex.get(item) ?? fail("missing shape");
111
+ array[index] = shapeTable.valueToIndex.get(item) ?? fail(0xb4c /* missing shape */);
112
112
  }
113
113
  }
114
114
  }
@@ -273,7 +273,7 @@ export class InlineArrayShape
273
273
  shapes: EncoderCache,
274
274
  outputBuffer: BufferFormat,
275
275
  ): void {
276
- fail("Empty array should not encode any nodes");
276
+ fail(0xb4d /* Empty array should not encode any nodes */);
277
277
  },
278
278
  });
279
279
 
@@ -324,7 +324,7 @@ export class InlineArrayShape
324
324
  return {
325
325
  b: {
326
326
  length: this.length,
327
- shape: shapes.valueToIndex.get(this.inner.shape) ?? fail("missing shape"),
327
+ shape: shapes.valueToIndex.get(this.inner.shape) ?? fail(0xb4e /* missing shape */),
328
328
  },
329
329
  };
330
330
  }
@@ -380,7 +380,8 @@ export class NestedArrayShape extends ShapeGeneric<EncodedChunkShape> implements
380
380
  shapes: DeduplicationTable<Shape>,
381
381
  ): EncodedChunkShape {
382
382
  const shape: EncodedNestedArray =
383
- shapes.valueToIndex.get(this.inner.shape) ?? fail("index for shape not found in table");
383
+ shapes.valueToIndex.get(this.inner.shape) ??
384
+ fail(0xb4f /* index for shape not found in table */);
384
385
  return {
385
386
  a: shape,
386
387
  };
@@ -138,7 +138,7 @@ export function encodeFieldShapes(
138
138
  // key
139
139
  encodeIdentifier(field.key, identifiers),
140
140
  // shape
141
- shapes.valueToIndex.get(field.shape.shape) ?? fail("missing shape"),
141
+ shapes.valueToIndex.get(field.shape.shape) ?? fail(0xb50 /* missing shape */),
142
142
  ]);
143
143
  }
144
144
 
@@ -167,5 +167,5 @@ function dedupShape(
167
167
  shape: Shape<EncodedChunkShape>,
168
168
  shapes: DeduplicationTable<Shape<EncodedChunkShape>>,
169
169
  ): number {
170
- return shapes.valueToIndex.get(shape) ?? fail("missing shape");
170
+ return shapes.valueToIndex.get(shape) ?? fail(0xb51 /* missing shape */);
171
171
  }
@@ -74,7 +74,7 @@ export function fieldShaper(
74
74
  cache: EncoderCache,
75
75
  storedSchema: StoredSchemaCollection,
76
76
  ): FieldEncoder {
77
- const kind = cache.fieldShapes.get(field.kind) ?? fail("missing FieldKind");
77
+ const kind = cache.fieldShapes.get(field.kind) ?? fail(0xb52 /* missing FieldKind */);
78
78
  const type = oneFromSet(field.types);
79
79
  const nodeEncoder = type !== undefined ? treeHandler.shapeFromTree(type) : anyNodeEncoder;
80
80
  if (kind.multiplicity === Multiplicity.Single) {
@@ -113,7 +113,8 @@ export function treeShaper(
113
113
  fieldHandler: FieldShaper,
114
114
  schemaName: TreeNodeSchemaIdentifier,
115
115
  ): NodeShape {
116
- const schema = fullSchema.nodeSchema.get(schemaName) ?? fail("missing node schema");
116
+ const schema =
117
+ fullSchema.nodeSchema.get(schemaName) ?? fail(0xb53 /* missing node schema */);
117
118
 
118
119
  if (schema instanceof ObjectNodeStoredSchema) {
119
120
  // TODO:Performance:
@@ -146,7 +147,7 @@ export function treeShaper(
146
147
  );
147
148
  return shape;
148
149
  }
149
- fail("unsupported node kind");
150
+ fail(0xb54 /* unsupported node kind */);
150
151
  }
151
152
 
152
153
  export function oneFromSet<T>(set: ReadonlySet<T> | undefined): T | undefined {
@@ -52,10 +52,10 @@ export const emptyCursor: ChunkedCursor = {
52
52
  mode: CursorLocationType.Fields,
53
53
  [cursorChunk]: emptyChunk,
54
54
  nextField(): boolean {
55
- fail("cannot navigate above root");
55
+ fail(0xafb /* cannot navigate above root */);
56
56
  },
57
57
  exitField(): void {
58
- fail("cannot navigate above root");
58
+ fail(0xafc /* cannot navigate above root */);
59
59
  },
60
60
  skipPendingFields(): boolean {
61
61
  return true;
@@ -70,43 +70,43 @@ export const emptyCursor: ChunkedCursor = {
70
70
  return false;
71
71
  },
72
72
  enterNode(childIndex: number): void {
73
- fail("empty cursor has no nodes");
73
+ fail(0xafd /* empty cursor has no nodes */);
74
74
  },
75
75
  getFieldPath(prefix?: PathRootPrefix): FieldUpPath {
76
76
  return prefixFieldPath(prefix, emptyPath);
77
77
  },
78
78
  getPath(): UpPath | undefined {
79
- fail("empty cursor has no nodes");
79
+ fail(0xafe /* empty cursor has no nodes */);
80
80
  },
81
81
  get fieldIndex(): never {
82
- return fail("empty cursor has no nodes");
82
+ return fail(0xaff /* empty cursor has no nodes */);
83
83
  },
84
84
  get chunkStart(): never {
85
- return fail("empty cursor has no nodes");
85
+ return fail(0xb00 /* empty cursor has no nodes */);
86
86
  },
87
87
  get chunkLength(): never {
88
- return fail("empty cursor has no nodes");
88
+ return fail(0xb01 /* empty cursor has no nodes */);
89
89
  },
90
90
  seekNodes(offset: number): boolean {
91
- fail("empty cursor has no nodes");
91
+ fail(0xb02 /* empty cursor has no nodes */);
92
92
  },
93
93
  nextNode(): boolean {
94
- fail("empty cursor has no nodes");
94
+ fail(0xb03 /* empty cursor has no nodes */);
95
95
  },
96
96
  exitNode(): void {
97
- fail("empty cursor has no nodes");
97
+ fail(0xb04 /* empty cursor has no nodes */);
98
98
  },
99
99
  firstField(): boolean {
100
- fail("empty cursor has no nodes");
100
+ fail(0xb05 /* empty cursor has no nodes */);
101
101
  },
102
102
  enterField(key: FieldKey): void {
103
- fail("empty cursor has no nodes");
103
+ fail(0xb06 /* empty cursor has no nodes */);
104
104
  },
105
105
  get type(): never {
106
- return fail("empty cursor has no nodes");
106
+ return fail(0xb07 /* empty cursor has no nodes */);
107
107
  },
108
108
  get value(): never {
109
- return fail("empty cursor has no nodes");
109
+ return fail(0xb08 /* empty cursor has no nodes */);
110
110
  },
111
111
  atChunkRoot(): boolean {
112
112
  return true;
@@ -382,7 +382,7 @@ class Cursor extends SynchronousCursor implements ChunkedCursor {
382
382
  }
383
383
 
384
384
  public getFieldKey(): FieldKey {
385
- return this.fieldKey ?? fail("not in a field");
385
+ return this.fieldKey ?? fail(0xb09 /* not in a field */);
386
386
  }
387
387
 
388
388
  public getFieldLength(): number {
@@ -510,11 +510,13 @@ class Cursor extends SynchronousCursor implements ChunkedCursor {
510
510
  public exitNode(): void {
511
511
  const info = this.nodeInfo(CursorLocationType.Nodes);
512
512
  this.indexOfField =
513
- info.indexOfParentField ?? fail("navigation up to root field not yet supported"); // TODO;
513
+ info.indexOfParentField ??
514
+ fail(0xb0a /* navigation up to root field not yet supported */); // TODO;
514
515
  this.fieldKey = info.parentField;
515
516
  this.mode = CursorLocationType.Fields;
516
517
  this.moveToPosition(
517
- info.indexOfParentPosition ?? fail("navigation up to root field not yet supported"),
518
+ info.indexOfParentPosition ??
519
+ fail(0xb0b /* navigation up to root field not yet supported */),
518
520
  ); // TODO
519
521
  }
520
522
 
@@ -536,7 +538,7 @@ class Cursor extends SynchronousCursor implements ChunkedCursor {
536
538
  this.indexOfField =
537
539
  fieldInfo === undefined
538
540
  ? fieldMap.size
539
- : (fieldInfo.indexOfParentField ?? fail("children should have parents"));
541
+ : (fieldInfo.indexOfParentField ?? fail(0xb0c /* children should have parents */));
540
542
  this.fieldKey = key;
541
543
  this.mode = CursorLocationType.Fields;
542
544
  }
@@ -42,7 +42,7 @@ export const noChangeHandler: FieldChangeHandler<0> = {
42
42
  rebase: (change: 0, over: 0) => 0,
43
43
  }),
44
44
  codecsFactory: () => noChangeCodecFamily,
45
- editor: { buildChildChanges: () => fail("Child changes not supported") },
45
+ editor: { buildChildChanges: () => fail(0xb0d /* Child changes not supported */) },
46
46
  intoDelta: (change, deltaFromChild: ToDelta): FieldChangeDelta => ({}),
47
47
  relevantRemovedRoots: (change): Iterable<DeltaDetachedNodeId> => [],
48
48
  isEmpty: (change: 0) => true,
@@ -90,7 +90,7 @@ export function isNodeInSchema(
90
90
  }
91
91
  }
92
92
  } else {
93
- fail("Unknown TreeNodeStoredSchema type");
93
+ fail(0xb0e /* Unknown TreeNodeStoredSchema type */);
94
94
  }
95
95
 
96
96
  return SchemaValidationErrors.NoError;
@@ -82,12 +82,9 @@ export function makeField(
82
82
 
83
83
  const makeFlexTreeField = (): FlexTreeField => {
84
84
  usedAnchor = true;
85
- const field = new (kindToClass.get(schema) ?? fail("missing field implementation"))(
86
- context,
87
- schema,
88
- cursor,
89
- fieldAnchor,
90
- );
85
+ const field = new (
86
+ kindToClass.get(schema) ?? fail(0xb0f /* missing field implementation */)
87
+ )(context, schema, cursor, fieldAnchor);
91
88
  return field;
92
89
  };
93
90
 
@@ -97,7 +94,8 @@ export function makeField(
97
94
 
98
95
  // For the common case (all but roots), cache field associated with its node's anchor and field key.
99
96
  const anchorNode =
100
- context.checkout.forest.anchors.locate(fieldAnchor.parent) ?? fail("missing anchor");
97
+ context.checkout.forest.anchors.locate(fieldAnchor.parent) ??
98
+ fail(0xb10 /* missing anchor */);
101
99
 
102
100
  // Since anchor-set could be reused across a flex tree context getting disposed, key off the flex tree node not the anchor.
103
101
  const cacheKey = anchorNode.slots.get(flexTreeSlot);
@@ -150,7 +148,7 @@ export abstract class LazyField extends LazyEntity<FieldAnchor> implements FlexT
150
148
  if (fieldAnchor.parent !== undefined) {
151
149
  const anchorNode =
152
150
  context.checkout.forest.anchors.locate(fieldAnchor.parent) ??
153
- fail("parent anchor node should always exist since field is under a node");
151
+ fail(0xb11 /* parent anchor node should always exist since field is under a node */);
154
152
  this.offAfterDestroy = anchorNode.events.on("afterDestroy", () => {
155
153
  this[disposeSymbol]();
156
154
  });
@@ -48,7 +48,7 @@ export function makeTree(context: Context, cursor: ITreeSubscriptionCursor): Laz
48
48
  const anchor = cursor.buildAnchor();
49
49
  const anchorNode =
50
50
  context.checkout.forest.anchors.locate(anchor) ??
51
- fail("cursor should point to a node that is not the root of the AnchorSet");
51
+ fail(0xb12 /* cursor should point to a node that is not the root of the AnchorSet */);
52
52
  const cached = anchorNode.slots.get(flexTreeSlot);
53
53
  if (cached !== undefined) {
54
54
  context.checkout.forest.anchors.forget(anchor);
@@ -60,7 +60,8 @@ export function makeTree(context: Context, cursor: ITreeSubscriptionCursor): Laz
60
60
  }
61
61
 
62
62
  function cleanupTree(anchor: AnchorNode): void {
63
- const cached = anchor.slots.get(flexTreeSlot) ?? fail("tree should only be cleaned up once");
63
+ const cached =
64
+ anchor.slots.get(flexTreeSlot) ?? fail(0xb13 /* tree should only be cleaned up once */);
64
65
  assert(cached instanceof LazyTreeNode, 0x92d /* Expected LazyTreeNode */);
65
66
  cached[disposeSymbol]();
66
67
  }
@@ -86,7 +87,8 @@ export class LazyTreeNode extends LazyEntity<Anchor> implements FlexTreeNode {
86
87
  anchor: Anchor,
87
88
  ) {
88
89
  super(context, cursor, anchor);
89
- this.storedSchema = context.schema.nodeSchema.get(this.schema) ?? fail("missing schema");
90
+ this.storedSchema =
91
+ context.schema.nodeSchema.get(this.schema) ?? fail(0xb14 /* missing schema */);
90
92
  assert(cursor.mode === CursorLocationType.Nodes, 0x783 /* must be in nodes mode */);
91
93
  anchorNode.slots.set(flexTreeSlot, this);
92
94
  this.#removeDeleteCallback = anchorNode.events.on("afterDestroy", cleanupTree);
@@ -180,7 +182,7 @@ export class LazyTreeNode extends LazyEntity<Anchor> implements FlexTreeNode {
180
182
  cursor.enterField(key);
181
183
  const nodeSchema =
182
184
  this.context.schema.nodeSchema.get(parentType) ??
183
- fail("requested schema that does not exist");
185
+ fail(0xb15 /* requested schema that does not exist */);
184
186
  fieldSchema = nodeSchema.getFieldSchema(key).kind;
185
187
  }
186
188
 
@@ -359,7 +359,8 @@ export class AnchorTreeIndex<TKey extends TreeIndexKey, TValue>
359
359
  throw new Error("key finder should be pure and functional");
360
360
  }
361
361
  const anchor = nodeCursor.buildAnchor();
362
- const anchorNode = this.forest.anchors.locate(anchor) ?? fail("expected anchor node");
362
+ const anchorNode =
363
+ this.forest.anchors.locate(anchor) ?? fail(0xb16 /* expected anchor node */);
363
364
 
364
365
  // check if this anchor node already exists in the index
365
366
  const existingKey = this.nodeToKey.get(anchorNode);
@@ -104,7 +104,8 @@ export function allowsTreeSuperset(
104
104
  allowsFieldSuperset(
105
105
  policy,
106
106
  originalData,
107
- original.objectNodeFields.get(originalField) ?? fail("missing expected field"),
107
+ original.objectNodeFields.get(originalField) ??
108
+ fail(0xb17 /* missing expected field */),
108
109
  normalizeField(undefined),
109
110
  ),
110
111
  bExtra: (supersetField) =>
@@ -112,14 +113,15 @@ export function allowsTreeSuperset(
112
113
  policy,
113
114
  originalData,
114
115
  normalizeField(undefined),
115
- superset.objectNodeFields.get(supersetField) ?? fail("missing expected field"),
116
+ superset.objectNodeFields.get(supersetField) ??
117
+ fail(0xb18 /* missing expected field */),
116
118
  ),
117
119
  same: (sameField) =>
118
120
  allowsFieldSuperset(
119
121
  policy,
120
122
  originalData,
121
- original.objectNodeFields.get(sameField) ?? fail("missing expected field"),
122
- superset.objectNodeFields.get(sameField) ?? fail("missing expected field"),
123
+ original.objectNodeFields.get(sameField) ?? fail(0xb19 /* missing expected field */),
124
+ superset.objectNodeFields.get(sameField) ?? fail(0xb1a /* missing expected field */),
123
125
  ),
124
126
  });
125
127
  }
@@ -148,7 +150,7 @@ export function allowsFieldSuperset(
148
150
  superset: TreeFieldStoredSchema,
149
151
  ): boolean {
150
152
  return withEditor(
151
- policy.fieldKinds.get(original.kind) ?? fail("missing kind"),
153
+ policy.fieldKinds.get(original.kind) ?? fail(0xb1b /* missing kind */),
152
154
  ).allowsFieldSuperset(policy, originalData, original.types, superset);
153
155
  }
154
156
 
@@ -35,8 +35,8 @@ export function isNeverFieldRecursive(
35
35
  parentTypeStack: Set<TreeNodeStoredSchema>,
36
36
  ): boolean {
37
37
  if (
38
- (policy.fieldKinds.get(field.kind) ?? fail("missing field kind")).multiplicity ===
39
- Multiplicity.Single &&
38
+ (policy.fieldKinds.get(field.kind) ?? fail(0xb1c /* missing field kind */))
39
+ .multiplicity === Multiplicity.Single &&
40
40
  field.types !== undefined
41
41
  ) {
42
42
  for (const type of field.types) {
@@ -94,8 +94,10 @@ export function isNeverTreeRecursive(
94
94
  parentTypeStack.add(treeNode);
95
95
  if (treeNode instanceof MapNodeStoredSchema) {
96
96
  return (
97
- (policy.fieldKinds.get(treeNode.mapFields.kind) ?? fail("missing field kind"))
98
- .multiplicity === Multiplicity.Single
97
+ (
98
+ policy.fieldKinds.get(treeNode.mapFields.kind) ??
99
+ fail(0xb1d /* missing field kind */)
100
+ ).multiplicity === Multiplicity.Single
99
101
  );
100
102
  } else if (treeNode instanceof ObjectNodeStoredSchema) {
101
103
  for (const field of treeNode.objectNodeFields.values()) {
@@ -177,7 +177,7 @@ function makeModularChangeCodec(
177
177
  return encodeNodeChangesForJson(node, fieldContext);
178
178
  },
179
179
 
180
- decodeNode: () => fail("Should not decode nodes during field encoding"),
180
+ decodeNode: () => fail(0xb1e /* Should not decode nodes during field encoding */),
181
181
  };
182
182
 
183
183
  return encodeFieldChangesForJsonI(change, fieldContext);
@@ -193,7 +193,7 @@ function makeModularChangeCodec(
193
193
  const { codec, compiledSchema } = getFieldChangesetCodec(fieldChange.fieldKind);
194
194
  const encodedChange = codec.json.encode(fieldChange.change, context);
195
195
  if (compiledSchema !== undefined && !compiledSchema.check(encodedChange)) {
196
- fail("Encoded change didn't pass schema validation.");
196
+ fail(0xb1f /* Encoded change didn't pass schema validation. */);
197
197
  }
198
198
 
199
199
  const fieldKey: FieldKey = field;
@@ -238,7 +238,7 @@ function makeModularChangeCodec(
238
238
  for (const field of encodedChange) {
239
239
  const { codec, compiledSchema } = getFieldChangesetCodec(field.fieldKind);
240
240
  if (compiledSchema !== undefined && !compiledSchema.check(field.change)) {
241
- fail("Encoded change didn't pass schema validation.");
241
+ fail(0xb20 /* Encoded change didn't pass schema validation. */);
242
242
  }
243
243
 
244
244
  const fieldId: FieldId = {
@@ -249,7 +249,7 @@ function makeModularChangeCodec(
249
249
  const fieldContext: FieldChangeEncodingContext = {
250
250
  baseContext: context,
251
251
 
252
- encodeNode: () => fail("Should not encode nodes during field decoding"),
252
+ encodeNode: () => fail(0xb21 /* Should not encode nodes during field decoding */),
253
253
 
254
254
  decodeNode: (encodedNode: EncodedNodeChangeset): NodeId => {
255
255
  const nodeId: NodeId = {