@fluidframework/tree 2.53.1 → 2.61.0-355054

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 (452) hide show
  1. package/.eslintrc.cjs +0 -19
  2. package/.mocharc.cjs +2 -3
  3. package/.mocharc.customBenchmarks.cjs +1 -9
  4. package/CHANGELOG.md +56 -0
  5. package/alpha.d.ts +1 -1
  6. package/api-report/tree.alpha.api.md +51 -37
  7. package/api-report/tree.beta.api.md +16 -2
  8. package/api-report/{tree.legacy.alpha.api.md → tree.legacy.beta.api.md} +72 -6
  9. package/api-report/tree.legacy.public.api.md +2 -2
  10. package/api-report/tree.public.api.md +2 -2
  11. package/beta.d.ts +1 -1
  12. package/dist/alpha.d.ts +17 -7
  13. package/dist/beta.d.ts +10 -4
  14. package/dist/codec/codec.d.ts +43 -6
  15. package/dist/codec/codec.d.ts.map +1 -1
  16. package/dist/codec/codec.js +22 -2
  17. package/dist/codec/codec.js.map +1 -1
  18. package/dist/codec/index.d.ts +1 -1
  19. package/dist/codec/index.d.ts.map +1 -1
  20. package/dist/codec/index.js +4 -1
  21. package/dist/codec/index.js.map +1 -1
  22. package/dist/external-utilities/index.d.ts +1 -1
  23. package/dist/external-utilities/index.d.ts.map +1 -1
  24. package/dist/external-utilities/index.js +2 -1
  25. package/dist/external-utilities/index.js.map +1 -1
  26. package/dist/external-utilities/typeboxValidator.d.ts +6 -1
  27. package/dist/external-utilities/typeboxValidator.d.ts.map +1 -1
  28. package/dist/external-utilities/typeboxValidator.js +7 -1
  29. package/dist/external-utilities/typeboxValidator.js.map +1 -1
  30. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +10 -1
  31. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  32. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js +28 -5
  33. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  34. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +19 -2
  35. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
  36. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js +10 -2
  37. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
  38. package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts +59 -4
  39. package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  40. package/dist/feature-libraries/chunked-forest/codec/codecs.js +9 -2
  41. package/dist/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  42. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +46 -8
  43. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  44. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js +91 -16
  45. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  46. package/dist/feature-libraries/chunked-forest/codec/format.d.ts +14 -0
  47. package/dist/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
  48. package/dist/feature-libraries/chunked-forest/codec/format.js +10 -1
  49. package/dist/feature-libraries/chunked-forest/codec/format.js.map +1 -1
  50. package/dist/feature-libraries/chunked-forest/codec/index.d.ts +1 -1
  51. package/dist/feature-libraries/chunked-forest/codec/index.d.ts.map +1 -1
  52. package/dist/feature-libraries/chunked-forest/codec/index.js.map +1 -1
  53. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +8 -3
  54. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
  55. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +17 -6
  56. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  57. package/dist/feature-libraries/chunked-forest/index.d.ts +1 -1
  58. package/dist/feature-libraries/chunked-forest/index.d.ts.map +1 -1
  59. package/dist/feature-libraries/chunked-forest/index.js.map +1 -1
  60. package/dist/feature-libraries/forest-summary/codec.d.ts.map +1 -1
  61. package/dist/feature-libraries/forest-summary/codec.js +3 -0
  62. package/dist/feature-libraries/forest-summary/codec.js.map +1 -1
  63. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts +13 -8
  64. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  65. package/dist/feature-libraries/forest-summary/forestSummarizer.js +76 -38
  66. package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  67. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts +178 -0
  68. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts.map +1 -0
  69. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.js +322 -0
  70. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.js.map +1 -0
  71. package/dist/feature-libraries/forest-summary/index.d.ts +1 -1
  72. package/dist/feature-libraries/forest-summary/index.d.ts.map +1 -1
  73. package/dist/feature-libraries/forest-summary/index.js +2 -1
  74. package/dist/feature-libraries/forest-summary/index.js.map +1 -1
  75. package/dist/feature-libraries/index.d.ts +1 -1
  76. package/dist/feature-libraries/index.d.ts.map +1 -1
  77. package/dist/feature-libraries/index.js +2 -1
  78. package/dist/feature-libraries/index.js.map +1 -1
  79. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts +2 -2
  80. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  81. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +1 -1
  82. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  83. package/dist/feature-libraries/modular-schema/modularChangeFormat.d.ts +6 -9
  84. package/dist/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +1 -1
  85. package/dist/feature-libraries/treeCompressionUtils.d.ts +15 -0
  86. package/dist/feature-libraries/treeCompressionUtils.d.ts.map +1 -1
  87. package/dist/feature-libraries/treeCompressionUtils.js +16 -1
  88. package/dist/feature-libraries/treeCompressionUtils.js.map +1 -1
  89. package/dist/index.d.ts +3 -3
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +6 -2
  92. package/dist/index.js.map +1 -1
  93. package/dist/jsonDomainSchema.d.ts +1 -1
  94. package/dist/jsonDomainSchema.d.ts.map +1 -1
  95. package/dist/legacy.d.ts +21 -4
  96. package/dist/packageVersion.d.ts +1 -1
  97. package/dist/packageVersion.d.ts.map +1 -1
  98. package/dist/packageVersion.js +1 -1
  99. package/dist/packageVersion.js.map +1 -1
  100. package/dist/public.d.ts +5 -3
  101. package/dist/shared-tree/schematizingTreeView.d.ts +1 -1
  102. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  103. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  104. package/dist/shared-tree/sharedTree.d.ts +23 -6
  105. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  106. package/dist/shared-tree/sharedTree.js +4 -1
  107. package/dist/shared-tree/sharedTree.js.map +1 -1
  108. package/dist/shared-tree/sharedTreeChangeFamily.d.ts +2 -2
  109. package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  110. package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  111. package/dist/shared-tree/tree.d.ts.map +1 -1
  112. package/dist/shared-tree/tree.js +3 -0
  113. package/dist/shared-tree/tree.js.map +1 -1
  114. package/dist/shared-tree/treeAlpha.d.ts +9 -11
  115. package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
  116. package/dist/shared-tree/treeAlpha.js.map +1 -1
  117. package/dist/shared-tree/treeCheckout.d.ts +2 -2
  118. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  119. package/dist/shared-tree/treeCheckout.js +1 -0
  120. package/dist/shared-tree/treeCheckout.js.map +1 -1
  121. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  122. package/dist/shared-tree-core/sharedTreeCore.js +13 -0
  123. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  124. package/dist/sharedTreeAttributes.d.ts +2 -2
  125. package/dist/sharedTreeAttributes.js +2 -2
  126. package/dist/sharedTreeAttributes.js.map +1 -1
  127. package/dist/simple-tree/api/conciseTree.d.ts.map +1 -1
  128. package/dist/simple-tree/api/conciseTree.js +1 -1
  129. package/dist/simple-tree/api/conciseTree.js.map +1 -1
  130. package/dist/simple-tree/api/customTree.d.ts +39 -11
  131. package/dist/simple-tree/api/customTree.d.ts.map +1 -1
  132. package/dist/simple-tree/api/customTree.js +79 -19
  133. package/dist/simple-tree/api/customTree.js.map +1 -1
  134. package/dist/simple-tree/api/getJsonSchema.d.ts +7 -2
  135. package/dist/simple-tree/api/getJsonSchema.d.ts.map +1 -1
  136. package/dist/simple-tree/api/getJsonSchema.js +1 -0
  137. package/dist/simple-tree/api/getJsonSchema.js.map +1 -1
  138. package/dist/simple-tree/api/index.d.ts +2 -1
  139. package/dist/simple-tree/api/index.d.ts.map +1 -1
  140. package/dist/simple-tree/api/index.js +4 -1
  141. package/dist/simple-tree/api/index.js.map +1 -1
  142. package/dist/simple-tree/api/schemaCreationUtilities.d.ts +1 -1
  143. package/dist/simple-tree/api/schemaCreationUtilities.js +1 -1
  144. package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  145. package/dist/simple-tree/api/schemaFactory.d.ts +9 -6
  146. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  147. package/dist/simple-tree/api/schemaFactory.js +8 -7
  148. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  149. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +13 -17
  150. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  151. package/dist/simple-tree/api/schemaFactoryAlpha.js +21 -25
  152. package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  153. package/dist/simple-tree/api/schemaFactoryBeta.d.ts +20 -0
  154. package/dist/simple-tree/api/schemaFactoryBeta.d.ts.map +1 -0
  155. package/dist/simple-tree/api/schemaFactoryBeta.js +26 -0
  156. package/dist/simple-tree/api/schemaFactoryBeta.js.map +1 -0
  157. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +5 -3
  158. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  159. package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  160. package/dist/simple-tree/api/simpleSchemaToJsonSchema.d.ts +0 -2
  161. package/dist/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
  162. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js +6 -3
  163. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  164. package/dist/simple-tree/api/transactionTypes.d.ts +1 -0
  165. package/dist/simple-tree/api/transactionTypes.d.ts.map +1 -1
  166. package/dist/simple-tree/api/transactionTypes.js.map +1 -1
  167. package/dist/simple-tree/api/tree.d.ts +68 -74
  168. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  169. package/dist/simple-tree/api/tree.js.map +1 -1
  170. package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
  171. package/dist/simple-tree/api/verboseTree.js +3 -3
  172. package/dist/simple-tree/api/verboseTree.js.map +1 -1
  173. package/dist/simple-tree/core/simpleNodeSchemaBase.d.ts +6 -0
  174. package/dist/simple-tree/core/simpleNodeSchemaBase.d.ts.map +1 -1
  175. package/dist/simple-tree/core/simpleNodeSchemaBase.js.map +1 -1
  176. package/dist/simple-tree/fieldSchema.d.ts +3 -4
  177. package/dist/simple-tree/fieldSchema.d.ts.map +1 -1
  178. package/dist/simple-tree/fieldSchema.js +0 -3
  179. package/dist/simple-tree/fieldSchema.js.map +1 -1
  180. package/dist/simple-tree/index.d.ts +1 -1
  181. package/dist/simple-tree/index.d.ts.map +1 -1
  182. package/dist/simple-tree/index.js +4 -2
  183. package/dist/simple-tree/index.js.map +1 -1
  184. package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  185. package/dist/simple-tree/node-kinds/record/recordNode.js +2 -3
  186. package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  187. package/dist/simple-tree/simpleSchema.d.ts +12 -0
  188. package/dist/simple-tree/simpleSchema.d.ts.map +1 -1
  189. package/dist/simple-tree/simpleSchema.js.map +1 -1
  190. package/dist/simple-tree/toStoredSchema.d.ts +0 -3
  191. package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
  192. package/dist/simple-tree/toStoredSchema.js +0 -3
  193. package/dist/simple-tree/toStoredSchema.js.map +1 -1
  194. package/dist/tableSchema.d.ts +11 -80
  195. package/dist/tableSchema.d.ts.map +1 -1
  196. package/dist/tableSchema.js +200 -117
  197. package/dist/tableSchema.js.map +1 -1
  198. package/dist/treeFactory.d.ts +1 -2
  199. package/dist/treeFactory.d.ts.map +1 -1
  200. package/dist/treeFactory.js +1 -2
  201. package/dist/treeFactory.js.map +1 -1
  202. package/dist/util/breakable.d.ts.map +1 -1
  203. package/dist/util/breakable.js +7 -1
  204. package/dist/util/breakable.js.map +1 -1
  205. package/internal.d.ts +1 -1
  206. package/legacy.d.ts +1 -1
  207. package/lib/alpha.d.ts +17 -7
  208. package/lib/beta.d.ts +10 -4
  209. package/lib/codec/codec.d.ts +43 -6
  210. package/lib/codec/codec.d.ts.map +1 -1
  211. package/lib/codec/codec.js +19 -1
  212. package/lib/codec/codec.js.map +1 -1
  213. package/lib/codec/index.d.ts +1 -1
  214. package/lib/codec/index.d.ts.map +1 -1
  215. package/lib/codec/index.js +1 -1
  216. package/lib/codec/index.js.map +1 -1
  217. package/lib/external-utilities/index.d.ts +1 -1
  218. package/lib/external-utilities/index.d.ts.map +1 -1
  219. package/lib/external-utilities/index.js +1 -1
  220. package/lib/external-utilities/index.js.map +1 -1
  221. package/lib/external-utilities/typeboxValidator.d.ts +6 -1
  222. package/lib/external-utilities/typeboxValidator.d.ts.map +1 -1
  223. package/lib/external-utilities/typeboxValidator.js +6 -0
  224. package/lib/external-utilities/typeboxValidator.js.map +1 -1
  225. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +10 -1
  226. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  227. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js +27 -5
  228. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  229. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +19 -2
  230. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
  231. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js +10 -2
  232. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
  233. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts +59 -4
  234. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  235. package/lib/feature-libraries/chunked-forest/codec/codecs.js +10 -3
  236. package/lib/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  237. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +46 -8
  238. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  239. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js +87 -14
  240. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  241. package/lib/feature-libraries/chunked-forest/codec/format.d.ts +14 -0
  242. package/lib/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
  243. package/lib/feature-libraries/chunked-forest/codec/format.js +9 -0
  244. package/lib/feature-libraries/chunked-forest/codec/format.js.map +1 -1
  245. package/lib/feature-libraries/chunked-forest/codec/index.d.ts +1 -1
  246. package/lib/feature-libraries/chunked-forest/codec/index.d.ts.map +1 -1
  247. package/lib/feature-libraries/chunked-forest/codec/index.js.map +1 -1
  248. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +8 -3
  249. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
  250. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +18 -7
  251. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  252. package/lib/feature-libraries/chunked-forest/index.d.ts +1 -1
  253. package/lib/feature-libraries/chunked-forest/index.d.ts.map +1 -1
  254. package/lib/feature-libraries/chunked-forest/index.js.map +1 -1
  255. package/lib/feature-libraries/forest-summary/codec.d.ts.map +1 -1
  256. package/lib/feature-libraries/forest-summary/codec.js +3 -0
  257. package/lib/feature-libraries/forest-summary/codec.js.map +1 -1
  258. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts +13 -8
  259. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  260. package/lib/feature-libraries/forest-summary/forestSummarizer.js +75 -37
  261. package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  262. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts +178 -0
  263. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts.map +1 -0
  264. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.js +318 -0
  265. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.js.map +1 -0
  266. package/lib/feature-libraries/forest-summary/index.d.ts +1 -1
  267. package/lib/feature-libraries/forest-summary/index.d.ts.map +1 -1
  268. package/lib/feature-libraries/forest-summary/index.js +1 -1
  269. package/lib/feature-libraries/forest-summary/index.js.map +1 -1
  270. package/lib/feature-libraries/index.d.ts +1 -1
  271. package/lib/feature-libraries/index.d.ts.map +1 -1
  272. package/lib/feature-libraries/index.js +1 -1
  273. package/lib/feature-libraries/index.js.map +1 -1
  274. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts +2 -2
  275. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  276. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +3 -3
  277. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  278. package/lib/feature-libraries/modular-schema/modularChangeFormat.d.ts +6 -9
  279. package/lib/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +1 -1
  280. package/lib/feature-libraries/treeCompressionUtils.d.ts +15 -0
  281. package/lib/feature-libraries/treeCompressionUtils.d.ts.map +1 -1
  282. package/lib/feature-libraries/treeCompressionUtils.js +15 -0
  283. package/lib/feature-libraries/treeCompressionUtils.js.map +1 -1
  284. package/lib/index.d.ts +3 -3
  285. package/lib/index.d.ts.map +1 -1
  286. package/lib/index.js +4 -4
  287. package/lib/index.js.map +1 -1
  288. package/lib/jsonDomainSchema.d.ts +1 -1
  289. package/lib/jsonDomainSchema.d.ts.map +1 -1
  290. package/lib/legacy.d.ts +21 -4
  291. package/lib/packageVersion.d.ts +1 -1
  292. package/lib/packageVersion.d.ts.map +1 -1
  293. package/lib/packageVersion.js +1 -1
  294. package/lib/packageVersion.js.map +1 -1
  295. package/lib/public.d.ts +5 -3
  296. package/lib/shared-tree/schematizingTreeView.d.ts +1 -1
  297. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  298. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  299. package/lib/shared-tree/sharedTree.d.ts +23 -6
  300. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  301. package/lib/shared-tree/sharedTree.js +4 -1
  302. package/lib/shared-tree/sharedTree.js.map +1 -1
  303. package/lib/shared-tree/sharedTreeChangeFamily.d.ts +2 -2
  304. package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  305. package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  306. package/lib/shared-tree/tree.d.ts.map +1 -1
  307. package/lib/shared-tree/tree.js +3 -0
  308. package/lib/shared-tree/tree.js.map +1 -1
  309. package/lib/shared-tree/treeAlpha.d.ts +9 -11
  310. package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
  311. package/lib/shared-tree/treeAlpha.js.map +1 -1
  312. package/lib/shared-tree/treeCheckout.d.ts +2 -2
  313. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  314. package/lib/shared-tree/treeCheckout.js +1 -0
  315. package/lib/shared-tree/treeCheckout.js.map +1 -1
  316. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  317. package/lib/shared-tree-core/sharedTreeCore.js +13 -0
  318. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  319. package/lib/sharedTreeAttributes.d.ts +2 -2
  320. package/lib/sharedTreeAttributes.js +2 -2
  321. package/lib/sharedTreeAttributes.js.map +1 -1
  322. package/lib/simple-tree/api/conciseTree.d.ts.map +1 -1
  323. package/lib/simple-tree/api/conciseTree.js +2 -2
  324. package/lib/simple-tree/api/conciseTree.js.map +1 -1
  325. package/lib/simple-tree/api/customTree.d.ts +39 -11
  326. package/lib/simple-tree/api/customTree.d.ts.map +1 -1
  327. package/lib/simple-tree/api/customTree.js +79 -19
  328. package/lib/simple-tree/api/customTree.js.map +1 -1
  329. package/lib/simple-tree/api/getJsonSchema.d.ts +7 -2
  330. package/lib/simple-tree/api/getJsonSchema.d.ts.map +1 -1
  331. package/lib/simple-tree/api/getJsonSchema.js +1 -0
  332. package/lib/simple-tree/api/getJsonSchema.js.map +1 -1
  333. package/lib/simple-tree/api/index.d.ts +2 -1
  334. package/lib/simple-tree/api/index.d.ts.map +1 -1
  335. package/lib/simple-tree/api/index.js +2 -1
  336. package/lib/simple-tree/api/index.js.map +1 -1
  337. package/lib/simple-tree/api/schemaCreationUtilities.d.ts +1 -1
  338. package/lib/simple-tree/api/schemaCreationUtilities.js +1 -1
  339. package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  340. package/lib/simple-tree/api/schemaFactory.d.ts +9 -6
  341. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  342. package/lib/simple-tree/api/schemaFactory.js +6 -6
  343. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  344. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +13 -17
  345. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  346. package/lib/simple-tree/api/schemaFactoryAlpha.js +22 -26
  347. package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  348. package/lib/simple-tree/api/schemaFactoryBeta.d.ts +20 -0
  349. package/lib/simple-tree/api/schemaFactoryBeta.d.ts.map +1 -0
  350. package/lib/simple-tree/api/schemaFactoryBeta.js +22 -0
  351. package/lib/simple-tree/api/schemaFactoryBeta.js.map +1 -0
  352. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +5 -3
  353. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  354. package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  355. package/lib/simple-tree/api/simpleSchemaToJsonSchema.d.ts +0 -2
  356. package/lib/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
  357. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js +6 -3
  358. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  359. package/lib/simple-tree/api/transactionTypes.d.ts +1 -0
  360. package/lib/simple-tree/api/transactionTypes.d.ts.map +1 -1
  361. package/lib/simple-tree/api/transactionTypes.js.map +1 -1
  362. package/lib/simple-tree/api/tree.d.ts +68 -74
  363. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  364. package/lib/simple-tree/api/tree.js.map +1 -1
  365. package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
  366. package/lib/simple-tree/api/verboseTree.js +4 -4
  367. package/lib/simple-tree/api/verboseTree.js.map +1 -1
  368. package/lib/simple-tree/core/simpleNodeSchemaBase.d.ts +6 -0
  369. package/lib/simple-tree/core/simpleNodeSchemaBase.d.ts.map +1 -1
  370. package/lib/simple-tree/core/simpleNodeSchemaBase.js.map +1 -1
  371. package/lib/simple-tree/fieldSchema.d.ts +3 -4
  372. package/lib/simple-tree/fieldSchema.d.ts.map +1 -1
  373. package/lib/simple-tree/fieldSchema.js +0 -3
  374. package/lib/simple-tree/fieldSchema.js.map +1 -1
  375. package/lib/simple-tree/index.d.ts +1 -1
  376. package/lib/simple-tree/index.d.ts.map +1 -1
  377. package/lib/simple-tree/index.js +1 -1
  378. package/lib/simple-tree/index.js.map +1 -1
  379. package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  380. package/lib/simple-tree/node-kinds/record/recordNode.js +2 -3
  381. package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  382. package/lib/simple-tree/simpleSchema.d.ts +12 -0
  383. package/lib/simple-tree/simpleSchema.d.ts.map +1 -1
  384. package/lib/simple-tree/simpleSchema.js.map +1 -1
  385. package/lib/simple-tree/toStoredSchema.d.ts +0 -3
  386. package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
  387. package/lib/simple-tree/toStoredSchema.js +0 -3
  388. package/lib/simple-tree/toStoredSchema.js.map +1 -1
  389. package/lib/tableSchema.d.ts +11 -80
  390. package/lib/tableSchema.d.ts.map +1 -1
  391. package/lib/tableSchema.js +201 -118
  392. package/lib/tableSchema.js.map +1 -1
  393. package/lib/treeFactory.d.ts +1 -2
  394. package/lib/treeFactory.d.ts.map +1 -1
  395. package/lib/treeFactory.js +1 -2
  396. package/lib/treeFactory.js.map +1 -1
  397. package/lib/tsdoc-metadata.json +1 -1
  398. package/lib/util/breakable.d.ts.map +1 -1
  399. package/lib/util/breakable.js +7 -1
  400. package/lib/util/breakable.js.map +1 -1
  401. package/package.json +28 -28
  402. package/src/codec/codec.ts +52 -7
  403. package/src/codec/index.ts +4 -0
  404. package/src/external-utilities/index.ts +1 -1
  405. package/src/external-utilities/typeboxValidator.ts +7 -1
  406. package/src/feature-libraries/chunked-forest/codec/chunkDecoding.ts +38 -4
  407. package/src/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.ts +10 -3
  408. package/src/feature-libraries/chunked-forest/codec/codecs.ts +96 -8
  409. package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +123 -19
  410. package/src/feature-libraries/chunked-forest/codec/format.ts +11 -0
  411. package/src/feature-libraries/chunked-forest/codec/index.ts +4 -0
  412. package/src/feature-libraries/chunked-forest/codec/schemaBasedEncode.ts +28 -3
  413. package/src/feature-libraries/chunked-forest/index.ts +2 -0
  414. package/src/feature-libraries/forest-summary/codec.ts +3 -0
  415. package/src/feature-libraries/forest-summary/forestSummarizer.ts +118 -50
  416. package/src/feature-libraries/forest-summary/incrementalSummaryBuilder.ts +511 -0
  417. package/src/feature-libraries/forest-summary/index.ts +1 -1
  418. package/src/feature-libraries/index.ts +5 -1
  419. package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +8 -4
  420. package/src/feature-libraries/treeCompressionUtils.ts +19 -0
  421. package/src/index.ts +6 -1
  422. package/src/packageVersion.ts +1 -1
  423. package/src/shared-tree/schematizingTreeView.ts +1 -1
  424. package/src/shared-tree/sharedTree.ts +37 -4
  425. package/src/shared-tree/sharedTreeChangeFamily.ts +2 -2
  426. package/src/shared-tree/tree.ts +3 -0
  427. package/src/shared-tree/treeAlpha.ts +10 -11
  428. package/src/shared-tree/treeCheckout.ts +3 -2
  429. package/src/shared-tree-core/sharedTreeCore.ts +17 -0
  430. package/src/sharedTreeAttributes.ts +2 -2
  431. package/src/simple-tree/api/conciseTree.ts +2 -1
  432. package/src/simple-tree/api/customTree.ts +102 -32
  433. package/src/simple-tree/api/getJsonSchema.ts +7 -2
  434. package/src/simple-tree/api/index.ts +3 -0
  435. package/src/simple-tree/api/schemaCreationUtilities.ts +1 -1
  436. package/src/simple-tree/api/schemaFactory.ts +21 -14
  437. package/src/simple-tree/api/schemaFactoryAlpha.ts +29 -30
  438. package/src/simple-tree/api/schemaFactoryBeta.ts +28 -0
  439. package/src/simple-tree/api/schemaFactoryRecursive.ts +41 -40
  440. package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +7 -3
  441. package/src/simple-tree/api/transactionTypes.ts +1 -0
  442. package/src/simple-tree/api/tree.ts +75 -81
  443. package/src/simple-tree/api/verboseTree.ts +42 -39
  444. package/src/simple-tree/core/simpleNodeSchemaBase.ts +6 -0
  445. package/src/simple-tree/fieldSchema.ts +3 -4
  446. package/src/simple-tree/index.ts +3 -0
  447. package/src/simple-tree/node-kinds/record/recordNode.ts +2 -3
  448. package/src/simple-tree/simpleSchema.ts +12 -0
  449. package/src/simple-tree/toStoredSchema.ts +0 -3
  450. package/src/tableSchema.ts +261 -243
  451. package/src/treeFactory.ts +1 -2
  452. package/src/util/breakable.ts +9 -1
@@ -2,7 +2,7 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { assert, oob } from "@fluidframework/core-utils/internal";
5
+ import { fail } from "@fluidframework/core-utils/internal";
6
6
  import { UsageError } from "@fluidframework/telemetry-utils/internal";
7
7
  import { Tree, TreeAlpha } from "./shared-tree/index.js";
8
8
  import { TreeArrayNode, SchemaFactory, isArrayNodeSchema, } from "./simple-tree/index.js";
@@ -60,7 +60,7 @@ export var System_TableSchema;
60
60
  */
61
61
  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type -- Return type is too complex to be reasonable to specify
62
62
  function createColumnSchema(inputSchemaFactory, cellSchema, propsSchema) {
63
- const schemaFactory = inputSchemaFactory.scopedFactory(tableSchemaFactorySubScope);
63
+ const schemaFactory = inputSchemaFactory.scopedFactoryAlpha(tableSchemaFactorySubScope);
64
64
  // Note: `columnFields` is broken into two parts to work around a TypeScript bug
65
65
  // that results in broken `.d.ts` output.
66
66
  // See definition of `ColumnInsertableType` below.
@@ -125,7 +125,7 @@ export var System_TableSchema;
125
125
  */
126
126
  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type -- Return type is too complex to be reasonable to specify
127
127
  function createRowSchema(inputSchemaFactory, cellSchema, propsSchema) {
128
- const schemaFactory = inputSchemaFactory.scopedFactory(tableSchemaFactorySubScope);
128
+ const schemaFactory = inputSchemaFactory.scopedFactoryAlpha(tableSchemaFactorySubScope);
129
129
  // Note: `rowFields` is broken into two parts to work around a TypeScript bug
130
130
  // that results in broken `.d.ts` output.
131
131
  // See definition of `RowInsertableType` below.
@@ -220,7 +220,7 @@ export var System_TableSchema;
220
220
  */
221
221
  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type -- Return type is too complex to be reasonable to specify
222
222
  function createTableSchema(inputSchemaFactory, _cellSchema, columnSchema, rowSchema) {
223
- const schemaFactory = inputSchemaFactory.scopedFactory(tableSchemaFactorySubScope);
223
+ const schemaFactory = inputSchemaFactory.scopedFactoryAlpha(tableSchemaFactorySubScope);
224
224
  /**
225
225
  * {@link Table} fields.
226
226
  * @remarks Extracted for re-use in returned type signature defined later in this function.
@@ -252,23 +252,16 @@ export var System_TableSchema;
252
252
  }
253
253
  getCell(key) {
254
254
  const { column: columnOrId, row: rowOrId } = key;
255
- const row = this._getRow(rowOrId);
255
+ const row = this._tryGetRow(rowOrId);
256
256
  if (row === undefined) {
257
257
  return undefined;
258
258
  }
259
- const column = this._getColumn(columnOrId);
259
+ const column = this._tryGetColumn(columnOrId);
260
260
  if (column === undefined) {
261
261
  return undefined;
262
262
  }
263
263
  return row.getCell(column);
264
264
  }
265
- insertColumn({ column, index, }) {
266
- const inserted = this.insertColumns({
267
- columns: [column],
268
- index,
269
- });
270
- return inserted[0] ?? oob();
271
- }
272
265
  insertColumns({ columns, index, }) {
273
266
  // Ensure index is valid
274
267
  if (index !== undefined) {
@@ -287,13 +280,6 @@ export var System_TableSchema;
287
280
  // Inserting the input nodes into the tree hydrates them, making them usable as nodes.
288
281
  return columns;
289
282
  }
290
- insertRow({ row, index, }) {
291
- const inserted = this.insertRows({
292
- rows: [row],
293
- index,
294
- });
295
- return inserted[0] ?? oob();
296
- }
297
283
  insertRows({ index, rows, }) {
298
284
  // #region Input validation
299
285
  // Ensure index is valid
@@ -310,7 +296,7 @@ export var System_TableSchema;
310
296
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
311
297
  const keys = Object.keys(newRow.cells);
312
298
  for (const key of keys) {
313
- if (!this.containsColumnWithId(key)) {
299
+ if (!this._containsColumnWithId(key)) {
314
300
  throw new UsageError(`Attempted to insert row a cell under column ID "${key}", but the table does not contain a column with that ID.`);
315
301
  }
316
302
  }
@@ -333,113 +319,101 @@ export var System_TableSchema;
333
319
  setCell({ key, cell, }) {
334
320
  const { column: columnOrId, row: rowOrId } = key;
335
321
  const row = this._getRow(rowOrId);
336
- if (row === undefined) {
337
- const rowId = this._getRowId(rowOrId);
338
- throw new UsageError(`No row with ID "${rowId}" exists in the table.`);
339
- }
340
322
  const column = this._getColumn(columnOrId);
341
- if (column === undefined) {
342
- const columnId = this._getColumnId(columnOrId);
343
- throw new UsageError(`No column with ID "${columnId}" exists in the table.`);
344
- }
345
323
  row.setCell(column, cell);
346
324
  }
347
- removeColumns(columns) {
348
- // If there are no columns to remove, do nothing
349
- if (columns.length === 0) {
350
- return [];
351
- }
352
- // If there is only one column to remove, remove it (and don't incur cost of transaction)
353
- if (columns.length === 1) {
354
- const removedColumn = this.removeColumn(columns[0] ?? oob());
355
- return [removedColumn];
325
+ removeColumns(indexOrColumns, count = undefined) {
326
+ if (typeof indexOrColumns === "number" || indexOrColumns === undefined) {
327
+ let removedColumns;
328
+ const startIndex = indexOrColumns ?? 0;
329
+ const _count = count ?? this.columns.length - startIndex;
330
+ // If there are no columns to remove, do nothing
331
+ if (_count === 0) {
332
+ return [];
333
+ }
334
+ Table._assertValidRange({ index: startIndex, count: _count }, this.columns);
335
+ this._applyEditsInBatch(() => {
336
+ const columnsToRemove = this.columns.slice(startIndex, startIndex + _count);
337
+ // First, remove all cells that correspond to each column from each row:
338
+ for (const column of columnsToRemove) {
339
+ this._removeCells(column);
340
+ }
341
+ // Second, remove the column nodes:
342
+ Table._removeRange({
343
+ index: startIndex,
344
+ count: _count,
345
+ }, this.columns);
346
+ removedColumns = columnsToRemove;
347
+ });
348
+ return removedColumns ?? fail(0xc1f /* Transaction did not complete. */);
356
349
  }
357
- // If there are multiple columns to remove, remove them in a transaction.
358
- const removedColumns = [];
359
- Tree.runTransaction(this, () => {
360
- // Note, throwing an error within a transaction will abort the entire transaction.
361
- // So if we throw an error here for any row, no columns will be removed.
362
- for (const columnToRemove of columns) {
363
- const removedRow = this.removeColumn(columnToRemove);
364
- removedColumns.push(removedRow);
350
+ else {
351
+ // If there are no columns to remove, do nothing
352
+ if (indexOrColumns.length === 0) {
353
+ return [];
365
354
  }
366
- });
367
- return removedColumns;
368
- }
369
- removeColumn(columnOrId) {
370
- const column = this._getColumn(columnOrId);
371
- const index = column === undefined ? -1 : this.columns.indexOf(column);
372
- if (index === -1) {
373
- const columnId = this._getColumnId(columnOrId);
374
- throw new UsageError(`Specified column with ID "${columnId}" does not exist in the table.`);
375
- }
376
- assert(column !== undefined, 0xc10 /* column should not be undefined */);
377
- Tree.runTransaction(this, () => {
378
- // Remove the corresponding cell from all rows.
379
- for (const row of this.rows) {
380
- // TypeScript is unable to narrow the row type correctly here, hence the cast.
381
- // See: https://github.com/microsoft/TypeScript/issues/52144
382
- row.removeCell(column);
355
+ // Resolve any IDs to actual nodes.
356
+ // This validates that all of the rows exist before starting transaction.
357
+ // This improves user-facing error experience.
358
+ const columnsToRemove = [];
359
+ for (const columnOrIdToRemove of indexOrColumns) {
360
+ columnsToRemove.push(this._getColumn(columnOrIdToRemove));
383
361
  }
384
- this.columns.removeAt(index);
385
- });
386
- return column;
387
- }
388
- removeAllColumns() {
389
- // TypeScript is unable to narrow the row type correctly here, hence the cast.
390
- // See: https://github.com/microsoft/TypeScript/issues/52144
391
- return this.removeColumns(this.columns);
362
+ this._applyEditsInBatch(() => {
363
+ // Note, throwing an error within a transaction will abort the entire transaction.
364
+ // So if we throw an error here for any column, no columns will be removed.
365
+ for (const columnToRemove of columnsToRemove) {
366
+ // Remove the corresponding cell from all rows.
367
+ for (const row of this.rows) {
368
+ // TypeScript is unable to narrow the row type correctly here, hence the cast.
369
+ // See: https://github.com/microsoft/TypeScript/issues/52144
370
+ row.removeCell(columnToRemove);
371
+ }
372
+ // We have already validated that all of the columns exist above, so this is safe.
373
+ this.columns.removeAt(this.columns.indexOf(columnToRemove));
374
+ }
375
+ });
376
+ return columnsToRemove;
377
+ }
392
378
  }
393
- removeRows(rows) {
379
+ removeRows(indexOrRows, count) {
380
+ if (typeof indexOrRows === "number" || indexOrRows === undefined) {
381
+ const startIndex = indexOrRows ?? 0;
382
+ const _count = count ?? this.columns.length - startIndex;
383
+ // If there are no rows to remove, do nothing
384
+ if (_count === 0) {
385
+ return [];
386
+ }
387
+ return Table._removeRange({
388
+ index: startIndex,
389
+ count: _count,
390
+ }, this.rows);
391
+ }
394
392
  // If there are no rows to remove, do nothing
395
- if (rows.length === 0) {
393
+ if (indexOrRows.length === 0) {
396
394
  return [];
397
395
  }
398
- // If there is only one row to remove, remove it (and don't incur cost of transaction)
399
- if (rows.length === 1) {
400
- const removedRow = this.removeRow(rows[0] ?? oob());
401
- return [removedRow];
396
+ // Resolve any IDs to actual nodes.
397
+ // This validates that all of the rows exist before starting transaction.
398
+ // This improves user-facing error experience.
399
+ const rowsToRemove = [];
400
+ for (const rowToRemove of indexOrRows) {
401
+ rowsToRemove.push(this._getRow(rowToRemove));
402
402
  }
403
- // If there are multiple rows to remove, remove them in a transaction.
404
- const removedRows = [];
405
- Tree.runTransaction(this, () => {
403
+ this._applyEditsInBatch(() => {
406
404
  // Note, throwing an error within a transaction will abort the entire transaction.
407
405
  // So if we throw an error here for any row, no rows will be removed.
408
- for (const rowToRemove of rows) {
409
- const removedRow = this.removeRow(rowToRemove);
410
- removedRows.push(removedRow);
406
+ for (const rowToRemove of rowsToRemove) {
407
+ // We have already validated that all of the rows exist above, so this is safe.
408
+ this.rows.removeAt(this.rows.indexOf(rowToRemove));
411
409
  }
412
410
  });
413
- return removedRows;
414
- }
415
- removeRow(rowOrId) {
416
- const rowToRemove = this._getRow(rowOrId);
417
- const index = rowToRemove === undefined ? -1 : this.rows.indexOf(rowToRemove);
418
- // If the row does not exist in the table, throw an error.
419
- if (index === -1) {
420
- const rowId = this._getRowId(rowOrId);
421
- throw new UsageError(`Specified row with ID "${rowId}" does not exist in the table.`);
422
- }
423
- this.rows.removeAt(index);
424
- return rowToRemove;
425
- }
426
- removeAllRows() {
427
- // TypeScript is unable to narrow the row type correctly here, hence the cast.
428
- // See: https://github.com/microsoft/TypeScript/issues/52144
429
- return this.removeRows(this.rows);
411
+ return rowsToRemove;
430
412
  }
431
413
  removeCell(key) {
432
414
  const { column: columnOrId, row: rowOrId } = key;
433
415
  const row = this._getRow(rowOrId);
434
- if (row === undefined) {
435
- const rowId = this._getRowId(rowOrId);
436
- throw new UsageError(`Specified row with ID "${rowId}" does not exist in the table.`);
437
- }
438
416
  const column = this._getColumn(columnOrId);
439
- if (column === undefined) {
440
- const columnId = this._getColumnId(columnOrId);
441
- throw new UsageError(`Specified column with ID "${columnId}" does not exist in the table.`);
442
- }
443
417
  const cell = row.getCell(column.id);
444
418
  if (cell === undefined) {
445
419
  return undefined;
@@ -447,28 +421,137 @@ export var System_TableSchema;
447
421
  row.removeCell(column.id);
448
422
  return cell;
449
423
  }
424
+ /**
425
+ * Removes the cell corresponding with the specified column from each row in the table.
426
+ */
427
+ _removeCells(column) {
428
+ for (const row of this.rows) {
429
+ // TypeScript is unable to narrow the row type correctly here, hence the cast.
430
+ // See: https://github.com/microsoft/TypeScript/issues/52144
431
+ row.removeCell(column);
432
+ }
433
+ }
434
+ static _assertValidRange(range, array) {
435
+ const { index, count } = range;
436
+ if (index < 0 || index >= array.length) {
437
+ throw new UsageError(`Start index out of bounds. Expected index to be on [0, ${array.length - 1}], but got ${index}.`);
438
+ }
439
+ if (count < 0) {
440
+ throw new UsageError(`Expected non-negative count. Got ${count}.`);
441
+ }
442
+ const end = index + count; // exclusive
443
+ if (end > array.length) {
444
+ throw new UsageError(`End index out of bounds. Expected end to be on [${index}, ${array.length}], but got ${end}.`);
445
+ }
446
+ }
447
+ /**
448
+ * Applies the provided edits in a "batch".
449
+ *
450
+ * @remarks
451
+ * For hydrated trees, this will be done in a transaction to ensure atomicity.
452
+ *
453
+ * Transactions are not supported for unhydrated trees, so we cannot run a transaction in that case.
454
+ * But since there are no collaborators, this is not an issue.
455
+ */
456
+ _applyEditsInBatch(applyEdits) {
457
+ const branch = TreeAlpha.branch(this);
458
+ if (branch === undefined) {
459
+ // If this node does not have a corresponding branch, then it is unhydrated.
460
+ // I.e., it is not part of a collaborative session yet.
461
+ // Therefore, we don't need to run the edits as a transaction.
462
+ applyEdits();
463
+ }
464
+ else {
465
+ branch.runTransaction(() => {
466
+ applyEdits();
467
+ });
468
+ }
469
+ }
470
+ /**
471
+ * Attempts to resolve the provided Column node or ID to a Column node in the table.
472
+ * Returns `undefined` if there is no match.
473
+ * @remarks Searches for a match based strictly on the ID and returns that result.
474
+ */
475
+ _tryGetColumn(columnOrId) {
476
+ const columnId = this._getColumnId(columnOrId);
477
+ return this.getColumn(columnId);
478
+ }
479
+ /**
480
+ * Attempts to resolve the provided Column node or ID to a Column node in the table.
481
+ * @throws Throws a `UsageError` if there is no match.
482
+ * @remarks Searches for a match based strictly on the ID and returns that result.
483
+ */
450
484
  _getColumn(columnOrId) {
451
- return typeof columnOrId === "string" ? this.getColumn(columnOrId) : columnOrId;
485
+ const column = this._tryGetColumn(columnOrId);
486
+ if (column === undefined) {
487
+ this._throwMissingColumnError(this._getColumnId(columnOrId));
488
+ }
489
+ return column;
452
490
  }
491
+ /**
492
+ * Resolves a Column node or ID to its ID.
493
+ * If an ID is provided, it is returned as-is.
494
+ * If a node is provided, its ID is returned.
495
+ */
453
496
  _getColumnId(columnOrId) {
454
497
  return typeof columnOrId === "string" ? columnOrId : columnOrId.id;
455
498
  }
499
+ /**
500
+ * Checks if a Column with the specified ID exists in the table.
501
+ */
502
+ _containsColumnWithId(columnId) {
503
+ return this._tryGetColumn(columnId) !== undefined;
504
+ }
505
+ /**
506
+ * Throw a `UsageError` for a missing Column by its ID.
507
+ */
508
+ _throwMissingColumnError(columnId) {
509
+ throw new UsageError(`No column with ID "${columnId}" exists in the table.`);
510
+ }
511
+ /**
512
+ * Attempts to resolve the provided Row node or ID to a Row node in the table.
513
+ * Returns `undefined` if there is no match.
514
+ * @remarks Searches for a match based strictly on the ID and returns that result.
515
+ */
516
+ _tryGetRow(rowOrId) {
517
+ const rowId = this._getRowId(rowOrId);
518
+ return this.getRow(rowId);
519
+ }
520
+ /**
521
+ * Attempts to resolve the provided Row node or ID to a Row node in the table.
522
+ * @throws Throws a `UsageError` if there is no match.
523
+ * @remarks Searches for a match based strictly on the ID and returns that result.
524
+ */
456
525
  _getRow(rowOrId) {
457
- return typeof rowOrId === "string" ? this.getRow(rowOrId) : rowOrId;
526
+ const row = this._tryGetRow(rowOrId);
527
+ if (row === undefined) {
528
+ this._throwMissingRowError(this._getRowId(rowOrId));
529
+ }
530
+ return row;
458
531
  }
532
+ /**
533
+ * Resolves a Row node or ID to its ID.
534
+ * If an ID is provided, it is returned as-is.
535
+ * If a node is provided, its ID is returned.
536
+ */
459
537
  _getRowId(rowOrId) {
460
538
  return typeof rowOrId === "string" ? rowOrId : rowOrId.id;
461
539
  }
462
- containsColumnWithId(columnId) {
463
- // TypeScript is unable to narrow the types correctly here, hence the cast.
464
- // See: https://github.com/microsoft/TypeScript/issues/52144
465
- return (this.columns.find((column) => column.id === columnId) !== undefined);
540
+ /**
541
+ * Throw a `UsageError` for a missing Row by its ID.
542
+ */
543
+ _throwMissingRowError(rowId) {
544
+ throw new UsageError(`No row with ID "${rowId}" exists in the table.`);
466
545
  }
467
- containsRowWithId(rowId) {
468
- // TypeScript is unable to narrow the types correctly here, hence the cast.
546
+ static _removeRange(range, array) {
547
+ Table._assertValidRange(range, array);
548
+ const { index, count } = range;
549
+ const end = index + count; // exclusive
550
+ // TypeScript is unable to narrow the array element type correctly here, hence the cast.
469
551
  // See: https://github.com/microsoft/TypeScript/issues/52144
470
- return (this.rows.find((row) => row.id === rowId) !==
471
- undefined);
552
+ const removedRows = array.slice(index, end);
553
+ array.removeRange(index, end);
554
+ return removedRows;
472
555
  }
473
556
  /**
474
557
  * Ensure that the specified index is a valid location for item insertion in the destination list.