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