@fluidframework/tree 2.102.0 → 2.110.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 (495) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/api-report/tree.alpha.api.md +12 -3
  3. package/api-report/tree.beta.api.md +11 -3
  4. package/api-report/tree.legacy.beta.api.md +11 -3
  5. package/dist/codec/versioned/format.d.ts +5 -4
  6. package/dist/codec/versioned/format.d.ts.map +1 -1
  7. package/dist/codec/versioned/format.js +4 -3
  8. package/dist/codec/versioned/format.js.map +1 -1
  9. package/dist/core/rebase/types.d.ts +4 -3
  10. package/dist/core/rebase/types.d.ts.map +1 -1
  11. package/dist/core/rebase/types.js +5 -4
  12. package/dist/core/rebase/types.js.map +1 -1
  13. package/dist/core/schema-stored/formatV1.d.ts +16 -15
  14. package/dist/core/schema-stored/formatV1.d.ts.map +1 -1
  15. package/dist/core/schema-stored/formatV1.js +9 -8
  16. package/dist/core/schema-stored/formatV1.js.map +1 -1
  17. package/dist/core/schema-stored/formatV2.d.ts +29 -28
  18. package/dist/core/schema-stored/formatV2.d.ts.map +1 -1
  19. package/dist/core/schema-stored/formatV2.js +11 -10
  20. package/dist/core/schema-stored/formatV2.js.map +1 -1
  21. package/dist/core/schema-stored/index.js +3 -25
  22. package/dist/core/schema-stored/index.js.map +1 -1
  23. package/dist/core/tree/anchorSet.js +4 -8
  24. package/dist/core/tree/anchorSet.js.map +1 -1
  25. package/dist/core/tree/detachedFieldIndexFormatCommon.d.ts +11 -10
  26. package/dist/core/tree/detachedFieldIndexFormatCommon.d.ts.map +1 -1
  27. package/dist/core/tree/detachedFieldIndexFormatCommon.js +11 -10
  28. package/dist/core/tree/detachedFieldIndexFormatCommon.js.map +1 -1
  29. package/dist/core/tree/detachedFieldIndexFormatV2.d.ts +7 -6
  30. package/dist/core/tree/detachedFieldIndexFormatV2.d.ts.map +1 -1
  31. package/dist/core/tree/detachedFieldIndexFormatV2.js +3 -2
  32. package/dist/core/tree/detachedFieldIndexFormatV2.js.map +1 -1
  33. package/dist/core/tree/persistedTreeTextFormat.d.ts +19 -18
  34. package/dist/core/tree/persistedTreeTextFormat.d.ts.map +1 -1
  35. package/dist/core/tree/persistedTreeTextFormat.js +11 -10
  36. package/dist/core/tree/persistedTreeTextFormat.js.map +1 -1
  37. package/dist/entrypoints/internal.js +2 -15
  38. package/dist/entrypoints/internal.js.map +1 -1
  39. package/dist/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
  40. package/dist/feature-libraries/chunked-forest/chunkTree.js +1 -1
  41. package/dist/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  42. package/dist/feature-libraries/chunked-forest/chunkedForest.js +7 -11
  43. package/dist/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  44. package/dist/feature-libraries/chunked-forest/codec/format/formatGeneric.d.ts +13 -12
  45. package/dist/feature-libraries/chunked-forest/codec/format/formatGeneric.d.ts.map +1 -1
  46. package/dist/feature-libraries/chunked-forest/codec/format/formatGeneric.js +14 -13
  47. package/dist/feature-libraries/chunked-forest/codec/format/formatGeneric.js.map +1 -1
  48. package/dist/feature-libraries/chunked-forest/codec/format/formatV1.d.ts +36 -35
  49. package/dist/feature-libraries/chunked-forest/codec/format/formatV1.d.ts.map +1 -1
  50. package/dist/feature-libraries/chunked-forest/codec/format/formatV1.js +19 -18
  51. package/dist/feature-libraries/chunked-forest/codec/format/formatV1.js.map +1 -1
  52. package/dist/feature-libraries/chunked-forest/codec/format/formatV2.d.ts +26 -25
  53. package/dist/feature-libraries/chunked-forest/codec/format/formatV2.d.ts.map +1 -1
  54. package/dist/feature-libraries/chunked-forest/codec/format/formatV2.js +5 -4
  55. package/dist/feature-libraries/chunked-forest/codec/format/formatV2.js.map +1 -1
  56. package/dist/feature-libraries/chunked-forest/codec/format/formatVText.d.ts +24 -23
  57. package/dist/feature-libraries/chunked-forest/codec/format/formatVText.d.ts.map +1 -1
  58. package/dist/feature-libraries/chunked-forest/codec/format/formatVText.js +8 -7
  59. package/dist/feature-libraries/chunked-forest/codec/format/formatVText.js.map +1 -1
  60. package/dist/feature-libraries/chunked-forest/uniformChunk.d.ts +66 -14
  61. package/dist/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
  62. package/dist/feature-libraries/chunked-forest/uniformChunk.js +101 -36
  63. package/dist/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
  64. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  65. package/dist/feature-libraries/default-schema/defaultEditBuilder.js +36 -14
  66. package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  67. package/dist/feature-libraries/flex-tree/lazyEntity.js +9 -19
  68. package/dist/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
  69. package/dist/feature-libraries/flex-tree/lazyNode.js +3 -13
  70. package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  71. package/dist/feature-libraries/forest-summary/formatCommon.d.ts +6 -5
  72. package/dist/feature-libraries/forest-summary/formatCommon.d.ts.map +1 -1
  73. package/dist/feature-libraries/forest-summary/formatCommon.js +4 -3
  74. package/dist/feature-libraries/forest-summary/formatCommon.js.map +1 -1
  75. package/dist/feature-libraries/index.js +2 -24
  76. package/dist/feature-libraries/index.js.map +1 -1
  77. package/dist/feature-libraries/modular-schema/genericFieldKindFormat.d.ts +4 -3
  78. package/dist/feature-libraries/modular-schema/genericFieldKindFormat.d.ts.map +1 -1
  79. package/dist/feature-libraries/modular-schema/genericFieldKindFormat.js +4 -3
  80. package/dist/feature-libraries/modular-schema/genericFieldKindFormat.js.map +1 -1
  81. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  82. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +10 -30
  83. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  84. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.d.ts +45 -44
  85. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
  86. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.js +26 -25
  87. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
  88. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.d.ts +23 -22
  89. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.d.ts.map +1 -1
  90. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.js +7 -6
  91. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.js.map +1 -1
  92. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts +0 -5
  93. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  94. package/dist/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  95. package/dist/feature-libraries/object-forest/objectForest.js +11 -55
  96. package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
  97. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts +9 -8
  98. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts.map +1 -1
  99. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV1.js +9 -8
  100. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV1.js.map +1 -1
  101. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts +14 -13
  102. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts.map +1 -1
  103. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV2.js +12 -11
  104. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV2.js.map +1 -1
  105. package/dist/feature-libraries/schema-edits/schemaChangeFormat.d.ts +5 -4
  106. package/dist/feature-libraries/schema-edits/schemaChangeFormat.d.ts.map +1 -1
  107. package/dist/feature-libraries/schema-edits/schemaChangeFormat.js +3 -2
  108. package/dist/feature-libraries/schema-edits/schemaChangeFormat.js.map +1 -1
  109. package/dist/feature-libraries/schema-index/formatV1.d.ts +15 -14
  110. package/dist/feature-libraries/schema-index/formatV1.d.ts.map +1 -1
  111. package/dist/feature-libraries/schema-index/formatV1.js +5 -4
  112. package/dist/feature-libraries/schema-index/formatV1.js.map +1 -1
  113. package/dist/feature-libraries/schema-index/formatV2.d.ts +20 -19
  114. package/dist/feature-libraries/schema-index/formatV2.d.ts.map +1 -1
  115. package/dist/feature-libraries/schema-index/formatV2.js +5 -4
  116. package/dist/feature-libraries/schema-index/formatV2.js.map +1 -1
  117. package/dist/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  118. package/dist/feature-libraries/sequence-field/compose.js +1 -3
  119. package/dist/feature-libraries/sequence-field/compose.js.map +1 -1
  120. package/dist/feature-libraries/sequence-field/formatV1.d.ts +283 -282
  121. package/dist/feature-libraries/sequence-field/formatV1.d.ts.map +1 -1
  122. package/dist/feature-libraries/sequence-field/formatV1.js +41 -40
  123. package/dist/feature-libraries/sequence-field/formatV1.js.map +1 -1
  124. package/dist/feature-libraries/sequence-field/formatV2.d.ts +180 -179
  125. package/dist/feature-libraries/sequence-field/formatV2.d.ts.map +1 -1
  126. package/dist/feature-libraries/sequence-field/formatV2.js +33 -32
  127. package/dist/feature-libraries/sequence-field/formatV2.js.map +1 -1
  128. package/dist/feature-libraries/sequence-field/formatV3.d.ts +126 -125
  129. package/dist/feature-libraries/sequence-field/formatV3.d.ts.map +1 -1
  130. package/dist/feature-libraries/sequence-field/formatV3.js +5 -4
  131. package/dist/feature-libraries/sequence-field/formatV3.js.map +1 -1
  132. package/dist/index.js +2 -24
  133. package/dist/index.js.map +1 -1
  134. package/dist/packageVersion.d.ts +1 -1
  135. package/dist/packageVersion.js +1 -1
  136. package/dist/packageVersion.js.map +1 -1
  137. package/dist/shared-tree/schematizingTreeView.d.ts +1 -0
  138. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  139. package/dist/shared-tree/schematizingTreeView.js +7 -41
  140. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  141. package/dist/shared-tree/sharedTree.d.ts +2 -3
  142. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  143. package/dist/shared-tree/sharedTree.js +6 -45
  144. package/dist/shared-tree/sharedTree.js.map +1 -1
  145. package/dist/shared-tree/sharedTreeChangeFormat.d.ts +8 -7
  146. package/dist/shared-tree/sharedTreeChangeFormat.d.ts.map +1 -1
  147. package/dist/shared-tree/sharedTreeChangeFormat.js +6 -5
  148. package/dist/shared-tree/sharedTreeChangeFormat.js.map +1 -1
  149. package/dist/shared-tree/treeCheckout.d.ts +14 -5
  150. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  151. package/dist/shared-tree/treeCheckout.js +106 -136
  152. package/dist/shared-tree/treeCheckout.js.map +1 -1
  153. package/dist/shared-tree-core/branch.js +13 -17
  154. package/dist/shared-tree-core/branch.js.map +1 -1
  155. package/dist/shared-tree-core/editManager.d.ts +2 -2
  156. package/dist/shared-tree-core/editManager.d.ts.map +1 -1
  157. package/dist/shared-tree-core/editManager.js.map +1 -1
  158. package/dist/shared-tree-core/editManagerFormatCommons.d.ts +35 -34
  159. package/dist/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
  160. package/dist/shared-tree-core/editManagerFormatCommons.js +17 -16
  161. package/dist/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  162. package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts +15 -15
  163. package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
  164. package/dist/shared-tree-core/editManagerFormatV1toV4.js +11 -10
  165. package/dist/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
  166. package/dist/shared-tree-core/editManagerFormatVSharedBranches.d.ts +40 -40
  167. package/dist/shared-tree-core/editManagerFormatVSharedBranches.d.ts.map +1 -1
  168. package/dist/shared-tree-core/editManagerFormatVSharedBranches.js +5 -4
  169. package/dist/shared-tree-core/editManagerFormatVSharedBranches.js.map +1 -1
  170. package/dist/shared-tree-core/messageCodecVSharedBranches.d.ts.map +1 -1
  171. package/dist/shared-tree-core/messageCodecVSharedBranches.js +3 -2
  172. package/dist/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
  173. package/dist/shared-tree-core/messageFormatV1ToV4.d.ts +5 -5
  174. package/dist/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
  175. package/dist/shared-tree-core/messageFormatV1ToV4.js +9 -8
  176. package/dist/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
  177. package/dist/shared-tree-core/messageFormatVSharedBranches.d.ts +7 -7
  178. package/dist/shared-tree-core/messageFormatVSharedBranches.d.ts.map +1 -1
  179. package/dist/shared-tree-core/messageFormatVSharedBranches.js +7 -6
  180. package/dist/shared-tree-core/messageFormatVSharedBranches.js.map +1 -1
  181. package/dist/shared-tree-core/sharedTreeCore.js +6 -43
  182. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  183. package/dist/shared-tree-core/transaction.js +20 -30
  184. package/dist/shared-tree-core/transaction.js.map +1 -1
  185. package/dist/simple-tree/api/simpleSchemaCodec.js +2 -24
  186. package/dist/simple-tree/api/simpleSchemaCodec.js.map +1 -1
  187. package/dist/simple-tree/api/snapshotCompatibilityChecker.js +2 -24
  188. package/dist/simple-tree/api/snapshotCompatibilityChecker.js.map +1 -1
  189. package/dist/simple-tree/api/tree.d.ts +10 -0
  190. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  191. package/dist/simple-tree/api/tree.js.map +1 -1
  192. package/dist/simple-tree/core/treeNodeKernel.d.ts +5 -0
  193. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  194. package/dist/simple-tree/core/treeNodeKernel.js +119 -105
  195. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  196. package/dist/simple-tree/core/unhydratedFlexTree.js +6 -10
  197. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  198. package/dist/simple-tree/leafNodeSchema.js +2 -12
  199. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  200. package/dist/simple-tree/node-kinds/array/arrayNode.js +2 -6
  201. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  202. package/dist/simple-tree/simpleSchemaFormatV1.d.ts +121 -120
  203. package/dist/simple-tree/simpleSchemaFormatV1.d.ts.map +1 -1
  204. package/dist/simple-tree/simpleSchemaFormatV1.js +32 -31
  205. package/dist/simple-tree/simpleSchemaFormatV1.js.map +1 -1
  206. package/dist/tableSchema.d.ts +50 -4
  207. package/dist/tableSchema.d.ts.map +1 -1
  208. package/dist/tableSchema.js +202 -106
  209. package/dist/tableSchema.js.map +1 -1
  210. package/dist/util/arrayUtilities.d.ts +20 -0
  211. package/dist/util/arrayUtilities.d.ts.map +1 -1
  212. package/dist/util/arrayUtilities.js +24 -1
  213. package/dist/util/arrayUtilities.js.map +1 -1
  214. package/dist/util/index.d.ts +1 -1
  215. package/dist/util/index.d.ts.map +1 -1
  216. package/dist/util/index.js +3 -2
  217. package/dist/util/index.js.map +1 -1
  218. package/dist/util/rangeMap.d.ts +13 -0
  219. package/dist/util/rangeMap.d.ts.map +1 -1
  220. package/dist/util/rangeMap.js +69 -8
  221. package/dist/util/rangeMap.js.map +1 -1
  222. package/dist/util/typeboxBrand.d.ts +1 -1
  223. package/dist/util/typeboxBrand.d.ts.map +1 -1
  224. package/dist/util/typeboxBrand.js +4 -3
  225. package/dist/util/typeboxBrand.js.map +1 -1
  226. package/dist/util/utils.d.ts +2 -2
  227. package/dist/util/utils.d.ts.map +1 -1
  228. package/dist/util/utils.js +3 -2
  229. package/dist/util/utils.js.map +1 -1
  230. package/eslint.config.mts +14 -0
  231. package/lib/codec/versioned/format.d.ts +5 -4
  232. package/lib/codec/versioned/format.d.ts.map +1 -1
  233. package/lib/codec/versioned/format.js +1 -1
  234. package/lib/codec/versioned/format.js.map +1 -1
  235. package/lib/core/rebase/types.d.ts +4 -3
  236. package/lib/core/rebase/types.d.ts.map +1 -1
  237. package/lib/core/rebase/types.js +1 -1
  238. package/lib/core/rebase/types.js.map +1 -1
  239. package/lib/core/schema-stored/formatV1.d.ts +16 -15
  240. package/lib/core/schema-stored/formatV1.d.ts.map +1 -1
  241. package/lib/core/schema-stored/formatV1.js +1 -1
  242. package/lib/core/schema-stored/formatV1.js.map +1 -1
  243. package/lib/core/schema-stored/formatV2.d.ts +29 -28
  244. package/lib/core/schema-stored/formatV2.d.ts.map +1 -1
  245. package/lib/core/schema-stored/formatV2.js +1 -1
  246. package/lib/core/schema-stored/formatV2.js.map +1 -1
  247. package/lib/core/tree/anchorSet.js +1 -5
  248. package/lib/core/tree/anchorSet.js.map +1 -1
  249. package/lib/core/tree/detachedFieldIndexFormatCommon.d.ts +11 -10
  250. package/lib/core/tree/detachedFieldIndexFormatCommon.d.ts.map +1 -1
  251. package/lib/core/tree/detachedFieldIndexFormatCommon.js +1 -1
  252. package/lib/core/tree/detachedFieldIndexFormatCommon.js.map +1 -1
  253. package/lib/core/tree/detachedFieldIndexFormatV2.d.ts +7 -6
  254. package/lib/core/tree/detachedFieldIndexFormatV2.d.ts.map +1 -1
  255. package/lib/core/tree/detachedFieldIndexFormatV2.js +1 -1
  256. package/lib/core/tree/detachedFieldIndexFormatV2.js.map +1 -1
  257. package/lib/core/tree/persistedTreeTextFormat.d.ts +19 -18
  258. package/lib/core/tree/persistedTreeTextFormat.d.ts.map +1 -1
  259. package/lib/core/tree/persistedTreeTextFormat.js +1 -1
  260. package/lib/core/tree/persistedTreeTextFormat.js.map +1 -1
  261. package/lib/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
  262. package/lib/feature-libraries/chunked-forest/chunkTree.js +1 -1
  263. package/lib/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  264. package/lib/feature-libraries/chunked-forest/chunkedForest.js +1 -5
  265. package/lib/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  266. package/lib/feature-libraries/chunked-forest/codec/format/formatGeneric.d.ts +13 -12
  267. package/lib/feature-libraries/chunked-forest/codec/format/formatGeneric.d.ts.map +1 -1
  268. package/lib/feature-libraries/chunked-forest/codec/format/formatGeneric.js +1 -1
  269. package/lib/feature-libraries/chunked-forest/codec/format/formatGeneric.js.map +1 -1
  270. package/lib/feature-libraries/chunked-forest/codec/format/formatV1.d.ts +36 -35
  271. package/lib/feature-libraries/chunked-forest/codec/format/formatV1.d.ts.map +1 -1
  272. package/lib/feature-libraries/chunked-forest/codec/format/formatV1.js +1 -1
  273. package/lib/feature-libraries/chunked-forest/codec/format/formatV1.js.map +1 -1
  274. package/lib/feature-libraries/chunked-forest/codec/format/formatV2.d.ts +26 -25
  275. package/lib/feature-libraries/chunked-forest/codec/format/formatV2.d.ts.map +1 -1
  276. package/lib/feature-libraries/chunked-forest/codec/format/formatV2.js +1 -1
  277. package/lib/feature-libraries/chunked-forest/codec/format/formatV2.js.map +1 -1
  278. package/lib/feature-libraries/chunked-forest/codec/format/formatVText.d.ts +24 -23
  279. package/lib/feature-libraries/chunked-forest/codec/format/formatVText.d.ts.map +1 -1
  280. package/lib/feature-libraries/chunked-forest/codec/format/formatVText.js +1 -1
  281. package/lib/feature-libraries/chunked-forest/codec/format/formatVText.js.map +1 -1
  282. package/lib/feature-libraries/chunked-forest/uniformChunk.d.ts +66 -14
  283. package/lib/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
  284. package/lib/feature-libraries/chunked-forest/uniformChunk.js +101 -36
  285. package/lib/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
  286. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  287. package/lib/feature-libraries/default-schema/defaultEditBuilder.js +36 -14
  288. package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  289. package/lib/feature-libraries/flex-tree/lazyEntity.js +1 -11
  290. package/lib/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
  291. package/lib/feature-libraries/flex-tree/lazyNode.js +1 -11
  292. package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  293. package/lib/feature-libraries/forest-summary/formatCommon.d.ts +6 -5
  294. package/lib/feature-libraries/forest-summary/formatCommon.d.ts.map +1 -1
  295. package/lib/feature-libraries/forest-summary/formatCommon.js +1 -1
  296. package/lib/feature-libraries/forest-summary/formatCommon.js.map +1 -1
  297. package/lib/feature-libraries/modular-schema/genericFieldKindFormat.d.ts +4 -3
  298. package/lib/feature-libraries/modular-schema/genericFieldKindFormat.d.ts.map +1 -1
  299. package/lib/feature-libraries/modular-schema/genericFieldKindFormat.js +1 -1
  300. package/lib/feature-libraries/modular-schema/genericFieldKindFormat.js.map +1 -1
  301. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  302. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +10 -30
  303. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  304. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.d.ts +45 -44
  305. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
  306. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.js +1 -1
  307. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
  308. package/lib/feature-libraries/modular-schema/modularChangeFormatV2.d.ts +23 -22
  309. package/lib/feature-libraries/modular-schema/modularChangeFormatV2.d.ts.map +1 -1
  310. package/lib/feature-libraries/modular-schema/modularChangeFormatV2.js +1 -1
  311. package/lib/feature-libraries/modular-schema/modularChangeFormatV2.js.map +1 -1
  312. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts +0 -5
  313. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  314. package/lib/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  315. package/lib/feature-libraries/object-forest/objectForest.js +1 -45
  316. package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
  317. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts +9 -8
  318. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts.map +1 -1
  319. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV1.js +1 -1
  320. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV1.js.map +1 -1
  321. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts +14 -13
  322. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts.map +1 -1
  323. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV2.js +1 -1
  324. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV2.js.map +1 -1
  325. package/lib/feature-libraries/schema-edits/schemaChangeFormat.d.ts +5 -4
  326. package/lib/feature-libraries/schema-edits/schemaChangeFormat.d.ts.map +1 -1
  327. package/lib/feature-libraries/schema-edits/schemaChangeFormat.js +1 -1
  328. package/lib/feature-libraries/schema-edits/schemaChangeFormat.js.map +1 -1
  329. package/lib/feature-libraries/schema-index/formatV1.d.ts +15 -14
  330. package/lib/feature-libraries/schema-index/formatV1.d.ts.map +1 -1
  331. package/lib/feature-libraries/schema-index/formatV1.js +1 -1
  332. package/lib/feature-libraries/schema-index/formatV1.js.map +1 -1
  333. package/lib/feature-libraries/schema-index/formatV2.d.ts +20 -19
  334. package/lib/feature-libraries/schema-index/formatV2.d.ts.map +1 -1
  335. package/lib/feature-libraries/schema-index/formatV2.js +1 -1
  336. package/lib/feature-libraries/schema-index/formatV2.js.map +1 -1
  337. package/lib/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  338. package/lib/feature-libraries/sequence-field/compose.js +1 -3
  339. package/lib/feature-libraries/sequence-field/compose.js.map +1 -1
  340. package/lib/feature-libraries/sequence-field/formatV1.d.ts +283 -282
  341. package/lib/feature-libraries/sequence-field/formatV1.d.ts.map +1 -1
  342. package/lib/feature-libraries/sequence-field/formatV1.js +1 -1
  343. package/lib/feature-libraries/sequence-field/formatV1.js.map +1 -1
  344. package/lib/feature-libraries/sequence-field/formatV2.d.ts +180 -179
  345. package/lib/feature-libraries/sequence-field/formatV2.d.ts.map +1 -1
  346. package/lib/feature-libraries/sequence-field/formatV2.js +1 -1
  347. package/lib/feature-libraries/sequence-field/formatV2.js.map +1 -1
  348. package/lib/feature-libraries/sequence-field/formatV3.d.ts +126 -125
  349. package/lib/feature-libraries/sequence-field/formatV3.d.ts.map +1 -1
  350. package/lib/feature-libraries/sequence-field/formatV3.js +1 -1
  351. package/lib/feature-libraries/sequence-field/formatV3.js.map +1 -1
  352. package/lib/packageVersion.d.ts +1 -1
  353. package/lib/packageVersion.js +1 -1
  354. package/lib/packageVersion.js.map +1 -1
  355. package/lib/shared-tree/schematizingTreeView.d.ts +1 -0
  356. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  357. package/lib/shared-tree/schematizingTreeView.js +4 -38
  358. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  359. package/lib/shared-tree/sharedTree.d.ts +2 -3
  360. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  361. package/lib/shared-tree/sharedTree.js +2 -41
  362. package/lib/shared-tree/sharedTree.js.map +1 -1
  363. package/lib/shared-tree/sharedTreeChangeFormat.d.ts +8 -7
  364. package/lib/shared-tree/sharedTreeChangeFormat.d.ts.map +1 -1
  365. package/lib/shared-tree/sharedTreeChangeFormat.js +1 -1
  366. package/lib/shared-tree/sharedTreeChangeFormat.js.map +1 -1
  367. package/lib/shared-tree/treeCheckout.d.ts +14 -5
  368. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  369. package/lib/shared-tree/treeCheckout.js +63 -93
  370. package/lib/shared-tree/treeCheckout.js.map +1 -1
  371. package/lib/shared-tree-core/branch.js +1 -5
  372. package/lib/shared-tree-core/branch.js.map +1 -1
  373. package/lib/shared-tree-core/editManager.d.ts +2 -2
  374. package/lib/shared-tree-core/editManager.d.ts.map +1 -1
  375. package/lib/shared-tree-core/editManager.js.map +1 -1
  376. package/lib/shared-tree-core/editManagerFormatCommons.d.ts +35 -34
  377. package/lib/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
  378. package/lib/shared-tree-core/editManagerFormatCommons.js +1 -1
  379. package/lib/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  380. package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts +15 -15
  381. package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
  382. package/lib/shared-tree-core/editManagerFormatV1toV4.js +1 -1
  383. package/lib/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
  384. package/lib/shared-tree-core/editManagerFormatVSharedBranches.d.ts +40 -40
  385. package/lib/shared-tree-core/editManagerFormatVSharedBranches.d.ts.map +1 -1
  386. package/lib/shared-tree-core/editManagerFormatVSharedBranches.js +1 -1
  387. package/lib/shared-tree-core/editManagerFormatVSharedBranches.js.map +1 -1
  388. package/lib/shared-tree-core/messageCodecVSharedBranches.d.ts.map +1 -1
  389. package/lib/shared-tree-core/messageCodecVSharedBranches.js +1 -1
  390. package/lib/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
  391. package/lib/shared-tree-core/messageFormatV1ToV4.d.ts +5 -5
  392. package/lib/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
  393. package/lib/shared-tree-core/messageFormatV1ToV4.js +1 -1
  394. package/lib/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
  395. package/lib/shared-tree-core/messageFormatVSharedBranches.d.ts +7 -7
  396. package/lib/shared-tree-core/messageFormatVSharedBranches.d.ts.map +1 -1
  397. package/lib/shared-tree-core/messageFormatVSharedBranches.js +1 -1
  398. package/lib/shared-tree-core/messageFormatVSharedBranches.js.map +1 -1
  399. package/lib/shared-tree-core/sharedTreeCore.js +1 -38
  400. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  401. package/lib/shared-tree-core/transaction.js +1 -11
  402. package/lib/shared-tree-core/transaction.js.map +1 -1
  403. package/lib/simple-tree/api/tree.d.ts +10 -0
  404. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  405. package/lib/simple-tree/api/tree.js.map +1 -1
  406. package/lib/simple-tree/core/treeNodeKernel.d.ts +5 -0
  407. package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  408. package/lib/simple-tree/core/treeNodeKernel.js +36 -23
  409. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  410. package/lib/simple-tree/core/unhydratedFlexTree.js +1 -5
  411. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  412. package/lib/simple-tree/leafNodeSchema.js +1 -11
  413. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  414. package/lib/simple-tree/node-kinds/array/arrayNode.js +1 -5
  415. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  416. package/lib/simple-tree/simpleSchemaFormatV1.d.ts +121 -120
  417. package/lib/simple-tree/simpleSchemaFormatV1.d.ts.map +1 -1
  418. package/lib/simple-tree/simpleSchemaFormatV1.js +1 -1
  419. package/lib/simple-tree/simpleSchemaFormatV1.js.map +1 -1
  420. package/lib/tableSchema.d.ts +50 -4
  421. package/lib/tableSchema.d.ts.map +1 -1
  422. package/lib/tableSchema.js +171 -75
  423. package/lib/tableSchema.js.map +1 -1
  424. package/lib/util/arrayUtilities.d.ts +20 -0
  425. package/lib/util/arrayUtilities.d.ts.map +1 -1
  426. package/lib/util/arrayUtilities.js +22 -0
  427. package/lib/util/arrayUtilities.js.map +1 -1
  428. package/lib/util/index.d.ts +1 -1
  429. package/lib/util/index.d.ts.map +1 -1
  430. package/lib/util/index.js +1 -1
  431. package/lib/util/index.js.map +1 -1
  432. package/lib/util/rangeMap.d.ts +13 -0
  433. package/lib/util/rangeMap.d.ts.map +1 -1
  434. package/lib/util/rangeMap.js +69 -8
  435. package/lib/util/rangeMap.js.map +1 -1
  436. package/lib/util/typeboxBrand.d.ts +1 -1
  437. package/lib/util/typeboxBrand.d.ts.map +1 -1
  438. package/lib/util/typeboxBrand.js +1 -1
  439. package/lib/util/typeboxBrand.js.map +1 -1
  440. package/lib/util/utils.d.ts +2 -2
  441. package/lib/util/utils.d.ts.map +1 -1
  442. package/lib/util/utils.js +1 -1
  443. package/lib/util/utils.js.map +1 -1
  444. package/package.json +24 -23
  445. package/src/codec/versioned/format.ts +2 -1
  446. package/src/core/rebase/types.ts +1 -1
  447. package/src/core/schema-stored/formatV1.ts +2 -1
  448. package/src/core/schema-stored/formatV2.ts +2 -1
  449. package/src/core/tree/detachedFieldIndexFormatCommon.ts +2 -1
  450. package/src/core/tree/detachedFieldIndexFormatV2.ts +2 -1
  451. package/src/core/tree/persistedTreeTextFormat.ts +2 -1
  452. package/src/feature-libraries/chunked-forest/chunkTree.ts +3 -2
  453. package/src/feature-libraries/chunked-forest/codec/format/formatGeneric.ts +2 -1
  454. package/src/feature-libraries/chunked-forest/codec/format/formatV1.ts +2 -1
  455. package/src/feature-libraries/chunked-forest/codec/format/formatV2.ts +2 -1
  456. package/src/feature-libraries/chunked-forest/codec/format/formatVText.ts +2 -1
  457. package/src/feature-libraries/chunked-forest/uniformChunk.ts +131 -44
  458. package/src/feature-libraries/default-schema/defaultEditBuilder.ts +36 -14
  459. package/src/feature-libraries/forest-summary/formatCommon.ts +2 -1
  460. package/src/feature-libraries/modular-schema/genericFieldKindFormat.ts +2 -1
  461. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +14 -47
  462. package/src/feature-libraries/modular-schema/modularChangeFormatV1.ts +2 -1
  463. package/src/feature-libraries/modular-schema/modularChangeFormatV2.ts +2 -1
  464. package/src/feature-libraries/modular-schema/modularChangeTypes.ts +0 -5
  465. package/src/feature-libraries/optional-field/optionalFieldChangeFormatV1.ts +2 -1
  466. package/src/feature-libraries/optional-field/optionalFieldChangeFormatV2.ts +2 -1
  467. package/src/feature-libraries/schema-edits/schemaChangeFormat.ts +2 -1
  468. package/src/feature-libraries/schema-index/formatV1.ts +2 -1
  469. package/src/feature-libraries/schema-index/formatV2.ts +2 -1
  470. package/src/feature-libraries/sequence-field/compose.ts +1 -4
  471. package/src/feature-libraries/sequence-field/formatV1.ts +2 -1
  472. package/src/feature-libraries/sequence-field/formatV2.ts +2 -1
  473. package/src/feature-libraries/sequence-field/formatV3.ts +2 -1
  474. package/src/packageVersion.ts +1 -1
  475. package/src/shared-tree/schematizingTreeView.ts +4 -0
  476. package/src/shared-tree/sharedTree.ts +3 -10
  477. package/src/shared-tree/sharedTreeChangeFormat.ts +2 -1
  478. package/src/shared-tree/treeCheckout.ts +61 -56
  479. package/src/shared-tree-core/editManager.ts +2 -2
  480. package/src/shared-tree-core/editManagerFormatCommons.ts +2 -1
  481. package/src/shared-tree-core/editManagerFormatV1toV4.ts +2 -1
  482. package/src/shared-tree-core/editManagerFormatVSharedBranches.ts +2 -1
  483. package/src/shared-tree-core/messageCodecVSharedBranches.ts +2 -1
  484. package/src/shared-tree-core/messageFormatV1ToV4.ts +2 -1
  485. package/src/shared-tree-core/messageFormatVSharedBranches.ts +2 -1
  486. package/src/simple-tree/api/tree.ts +11 -0
  487. package/src/simple-tree/core/treeNodeKernel.ts +39 -15
  488. package/src/simple-tree/simpleSchemaFormatV1.ts +2 -1
  489. package/src/tableSchema.ts +306 -80
  490. package/src/util/arrayUtilities.ts +35 -0
  491. package/src/util/index.ts +2 -0
  492. package/src/util/rangeMap.ts +108 -9
  493. package/src/util/typeboxBrand.ts +2 -1
  494. package/src/util/utils.ts +2 -1
  495. package/tsconfig.json +5 -0
@@ -2,23 +2,13 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
6
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
7
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
8
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
9
- };
10
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
11
- if (kind === "m") throw new TypeError("Private method is not writable");
12
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
13
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
14
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
15
- };
16
- import { fail } from "@fluidframework/core-utils/internal";
5
+ import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
6
+ import { assert, fail, oob } from "@fluidframework/core-utils/internal";
17
7
  import { UsageError } from "@fluidframework/telemetry-utils/internal";
18
8
  import { EmptyKey } from "./core/index.js";
19
9
  import { Tree, TreeAlpha } from "./shared-tree/index.js";
20
10
  import { TreeArrayNode, SchemaFactory, scoped, withBufferedTreeEvents, objectSchema, eraseSchemaDetailsSubclassable, createCustomizedFluidFrameworkScopedFactory, } from "./simple-tree/index.js";
21
- import { validateIndex, validateIndexRange } from "./util/index.js";
11
+ import { collectContiguousRanges, validateIndex, validateIndexRange } from "./util/index.js";
22
12
  /**
23
13
  * Not intended for use outside of this package.
24
14
  *
@@ -147,7 +137,7 @@ export var System_TableSchema;
147
137
  */
148
138
  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type -- Return type is too complex to be reasonable to specify
149
139
  function createTableSchema(inputSchemaFactory, _cellSchema, columnSchema, rowSchema) {
150
- var _Table_instances, _a, _Table_rowCache, _Table_rowCacheUnsubscribe, _Table_columnCache, _Table_columnCacheUnsubscribe, _Table_applyEditsInBatch, _Table_getColumnCache, _Table_tryGetColumn, _Table_getColumn, _Table_getRowCache, _Table_tryGetRow, _Table_getRow, _Table_validateNewColumns, _Table_validateNewRows;
140
+ var _Table_instances, _a, _Table_rowCache, _Table_rowCacheUnsubscribe, _Table_columnCache, _Table_columnCacheUnsubscribe, _Table_applyEditsInBatch, _Table_buildColumnInDocumentConstraintsForRows, _Table_getColumnCache, _Table_tryGetColumnId, _Table_tryGetColumn, _Table_getColumn, _Table_getRowCache, _Table_tryGetRow, _Table_getRow, _Table_validateNewColumns, _Table_validateNewRows;
151
141
  const schemaFactory = createTableScopedFactory(inputSchemaFactory);
152
142
  /**
153
143
  * {@link Table} inner fields.
@@ -277,13 +267,27 @@ export var System_TableSchema;
277
267
  if (row === undefined) {
278
268
  return undefined;
279
269
  }
280
- const column = __classPrivateFieldGet(this, _Table_instances, "m", _Table_tryGetColumn).call(this, columnOrIdOrIndex);
281
- if (column === undefined) {
270
+ const columnId = __classPrivateFieldGet(this, _Table_instances, "m", _Table_tryGetColumnId).call(this, columnOrIdOrIndex);
271
+ if (columnId === undefined) {
282
272
  return undefined;
283
273
  }
284
- return row.cells[column.id];
274
+ return row.cells[columnId];
285
275
  }
286
- insertColumns({ columns, index, }) {
276
+ insertColumns(columnsOrParams, maybeIndex) {
277
+ // Dispatch on the runtime type of the first argument to disambiguate the two overloads:
278
+ // * Array → positional `(columns, index?)` overload
279
+ // * object → deprecated `(params)` property-bag overload
280
+ let index;
281
+ let columns;
282
+ if (Array.isArray(columnsOrParams)) {
283
+ index = maybeIndex;
284
+ columns = columnsOrParams;
285
+ }
286
+ else {
287
+ const params = columnsOrParams;
288
+ index = params.index;
289
+ columns = params.columns;
290
+ }
287
291
  // #region Input validation
288
292
  // Ensure specified index is valid
289
293
  if (index !== undefined) {
@@ -323,7 +327,21 @@ export var System_TableSchema;
323
327
  // Inserting the input nodes into the tree hydrates them, making them usable as nodes.
324
328
  return columns;
325
329
  }
326
- insertRows({ index, rows, }) {
330
+ insertRows(rowsOrParams, maybeIndex) {
331
+ // Dispatch on the runtime type of the first argument to disambiguate the two overloads:
332
+ // * Array → positional `(rows, index?)` overload
333
+ // * object → deprecated `(params)` property-bag overload
334
+ let index;
335
+ let rows;
336
+ if (Array.isArray(rowsOrParams)) {
337
+ index = maybeIndex;
338
+ rows = rowsOrParams;
339
+ }
340
+ else {
341
+ const params = rowsOrParams;
342
+ index = params.index;
343
+ rows = params.rows;
344
+ }
327
345
  // #region Input validation
328
346
  // Ensure specified index is valid
329
347
  if (index !== undefined) {
@@ -332,16 +350,14 @@ export var System_TableSchema;
332
350
  // Ensure the new rows being inserted are valid
333
351
  __classPrivateFieldGet(this, _Table_instances, "m", _Table_validateNewRows).call(this, rows);
334
352
  // #endregion
335
- // Relevant invariant: each cell corresponds to an existing row and column
353
+ // Relevant invariant: each cell corresponds to an existing row and column.
336
354
  // Prevents cell leaks from concurrently removed columns.
337
355
  // Example scenario: Client A removes a column while concurrently Client B adds a row with cells for those columns (including the one A removed).
338
356
  // If client B is sequenced after A, then B's row could have cells that do not correspond to existing columns.
339
- // This constraint ensures all columns that existed when creating the row still exist when the row insertion is applied.
357
+ // We only need to constrain columns that the new rows actually reference a removed column with no
358
+ // corresponding cell in the inserted rows cannot orphan anything from this insertion.
340
359
  // TODO: Replace with "no detach" constraint on the column array when available.
341
- const columnConstraints = this.table.columns.map((column) => ({
342
- type: "nodeInDocument",
343
- node: column,
344
- }));
360
+ const columnConstraints = __classPrivateFieldGet(this, _Table_instances, "m", _Table_buildColumnInDocumentConstraintsForRows).call(this, rows);
345
361
  __classPrivateFieldGet(this, _Table_instances, "m", _Table_applyEditsInBatch).call(this, {
346
362
  applyEdits: () => {
347
363
  // TypeScript is unable to narrow the row type correctly here, hence the casts below.
@@ -355,13 +371,29 @@ export var System_TableSchema;
355
371
  this.table.rows.insertAt(index, TreeArrayNode.spread(rows));
356
372
  }
357
373
  },
358
- preconditions: columnConstraints.length > 0 ? columnConstraints : undefined,
374
+ preconditions: columnConstraints,
359
375
  });
360
376
  // Inserting the input nodes into the tree hydrates them, making them usable as nodes.
361
377
  return rows;
362
378
  }
363
- setCell({ key, cell, }) {
364
- const { column: columnOrId, row: rowOrId } = key;
379
+ setCell(rowOrParams, maybeColumn, maybeCell) {
380
+ // Dispatch on the presence of the second argument to disambiguate the two overloads:
381
+ // * `maybeColumn === undefined` → deprecated `(params)` property-bag overload; unpack from `params.key`/`params.cell`
382
+ // * otherwise → positional `(row, column, cell)` overload
383
+ let rowOrId;
384
+ let columnOrId;
385
+ let cell;
386
+ if (maybeColumn === undefined) {
387
+ const params = rowOrParams;
388
+ rowOrId = params.key.row;
389
+ columnOrId = params.key.column;
390
+ cell = params.cell;
391
+ }
392
+ else {
393
+ rowOrId = rowOrParams;
394
+ columnOrId = maybeColumn;
395
+ cell = maybeCell;
396
+ }
365
397
  const row = __classPrivateFieldGet(this, _Table_instances, "m", _Table_getRow).call(this, rowOrId);
366
398
  const column = __classPrivateFieldGet(this, _Table_instances, "m", _Table_getColumn).call(this, columnOrId);
367
399
  __classPrivateFieldGet(this, _Table_instances, "m", _Table_applyEditsInBatch).call(this, {
@@ -412,13 +444,15 @@ export var System_TableSchema;
412
444
  __classPrivateFieldGet(this, _Table_instances, "m", _Table_applyEditsInBatch).call(this, {
413
445
  applyEdits: () => {
414
446
  const columnsToRemove = this.table.columns.slice(startIndex, endIndex);
415
- // First, remove all cells that correspond to each column from each row:
416
- for (const column of columnsToRemove) {
417
- for (const row of this.table.rows) {
418
- // TypeScript is unable to narrow the row type correctly here, hence the cast.
419
- // See: https://github.com/microsoft/TypeScript/issues/52144
447
+ // First, remove all cells that correspond to each column from each row.
448
+ // Rows are the outer loop so each row's `cells` record is touched contiguously,
449
+ // and the per-column `id` values are read once up front instead of per (column, row) pair.
450
+ const idsToDelete = columnsToRemove.map((column) => column.id);
451
+ for (const row of this.table.rows) {
452
+ const cells = row.cells;
453
+ for (const id of idsToDelete) {
420
454
  // eslint-disable-next-line @typescript-eslint/no-dynamic-delete -- This is currently how Record node entries are deleted.
421
- delete row.cells[column.id];
455
+ delete cells[id];
422
456
  }
423
457
  }
424
458
  // Second, remove the column nodes:
@@ -435,44 +469,45 @@ export var System_TableSchema;
435
469
  return [];
436
470
  }
437
471
  // Resolve any IDs to actual nodes.
438
- // This validates that all of the rows exist before starting transaction.
472
+ // This validates that all of the columns exist before starting transaction.
439
473
  // This improves user-facing error experience.
440
- const columnsToRemove = [];
474
+ // Set insertion order is preserved on iteration, which matches the caller-supplied order
475
+ // expected by both the cell-deletion loop and the returned array.
476
+ const columnsToRemove = new Set();
441
477
  for (const columnOrIdToRemove of indexOrColumns) {
442
- columnsToRemove.push(__classPrivateFieldGet(this, _Table_instances, "m", _Table_getColumn).call(this, columnOrIdToRemove));
478
+ columnsToRemove.add(__classPrivateFieldGet(this, _Table_instances, "m", _Table_getColumn).call(this, columnOrIdToRemove));
443
479
  }
480
+ // Collect contiguous runs of columns-to-remove as [start, end) ranges so they can be
481
+ // removed via a small number of `removeRange` calls below.
482
+ const ranges = collectContiguousRanges(this.table.columns, (column) => columnsToRemove.has(column));
483
+ // Note, throwing an error within a transaction will abort the entire transaction.
484
+ // So if we throw an error here for any column, no columns will be removed.
444
485
  __classPrivateFieldGet(this, _Table_instances, "m", _Table_applyEditsInBatch).call(this, {
445
486
  applyEdits: () => {
446
- // Note, throwing an error within a transaction will abort the entire transaction.
447
- // So if we throw an error here for any column, no columns will be removed.
448
- for (const columnToRemove of columnsToRemove) {
449
- // Remove the corresponding cell from all rows.
450
- for (const row of this.table.rows) {
451
- // TypeScript is unable to narrow the row type correctly here, hence the cast.
452
- // See: https://github.com/microsoft/TypeScript/issues/52144
487
+ // Remove the corresponding cell from every row.
488
+ // The per-column `id` values are hoisted out of the row loop so each row's `cells`
489
+ // record is indexed by a plain string rather than re-reading a tree-node property.
490
+ const idsToDelete = Array.from(columnsToRemove, (column) => column.id);
491
+ for (const row of this.table.rows) {
492
+ const cells = row.cells;
493
+ for (const id of idsToDelete) {
453
494
  // eslint-disable-next-line @typescript-eslint/no-dynamic-delete -- This is currently how Record node entries are deleted.
454
- delete row.cells[columnToRemove.id];
495
+ delete cells[id];
455
496
  }
456
- // We have already validated that all of the columns exist above, so this is safe.
457
- this.table.columns.removeAt(this.table.columns.indexOf(columnToRemove));
497
+ }
498
+ // Remove column nodes. Ranges are iterated in reverse so each `removeRange`
499
+ // call doesn't shift the indices of yet-to-remove ranges at lower positions.
500
+ for (let r = ranges.length - 1; r >= 0; r--) {
501
+ const { start, end } = ranges[r] ?? oob();
502
+ this.table.columns.removeRange(start, end);
458
503
  }
459
504
  },
460
505
  preconditions,
461
506
  });
462
- return columnsToRemove;
507
+ return [...columnsToRemove];
463
508
  }
464
509
  }
465
510
  removeRows(indexOrRows, count) {
466
- // Relevant invariant: each cell corresponds to an existing row and column
467
- // Adding a constraint on columns here to prevent cells being orphaned. The relevant scenario is:
468
- // Client A removes rows
469
- // Client B (either concurrently or not, so long as B's edit is sequenced after A's edit) removes a column,
470
- // Client A reverts the removal of the rows
471
- // TODO: Replace with "no detach on revert" constraint on the column array when available.
472
- const columnConstraints = this.table.columns.map((column) => ({
473
- type: "nodeInDocument",
474
- node: column,
475
- }));
476
511
  if (typeof indexOrRows === "number" || indexOrRows === undefined) {
477
512
  let removedRows;
478
513
  const startIndex = indexOrRows ?? 0;
@@ -482,11 +517,18 @@ export var System_TableSchema;
482
517
  return [];
483
518
  }
484
519
  validateIndexRange(startIndex, endIndex, this.table.rows, "Table.removeRows");
520
+ // Compute revert constraints from the rows being removed.
521
+ const rowsBeingRemoved = this.table.rows.slice(startIndex, endIndex);
485
522
  __classPrivateFieldGet(this, _Table_instances, "m", _Table_applyEditsInBatch).call(this, {
486
523
  applyEdits: () => {
487
524
  removedRows = removeRangeFromArray(startIndex, endIndex, this.table.rows, "Table.removeRows");
488
525
  },
489
- preconditionsOnRevert: columnConstraints.length > 0 ? columnConstraints : undefined,
526
+ // Relevant invariant: each cell corresponds to an existing row and column.
527
+ // On revert, the removed rows come back with their original cells, so we need
528
+ // each column referenced by those cells to still exist. Columns the removed rows
529
+ // don't reference cannot be orphaned by the revert and need not be constrained.
530
+ // TODO: Replace with "no detach on revert" constraint on the column array when available.
531
+ preconditionsOnRevert: __classPrivateFieldGet(this, _Table_instances, "m", _Table_buildColumnInDocumentConstraintsForRows).call(this, rowsBeingRemoved),
490
532
  });
491
533
  return removedRows ?? fail(0xccd /* Transaction did not complete */);
492
534
  }
@@ -497,26 +539,50 @@ export var System_TableSchema;
497
539
  // Resolve any IDs to actual nodes.
498
540
  // This validates that all of the rows exist before starting transaction.
499
541
  // This improves user-facing error experience.
500
- const rowsToRemove = [];
542
+ // Set insertion order is preserved on iteration, which matches the caller-supplied order
543
+ // expected by the returned array.
544
+ const rowsToRemove = new Set();
501
545
  for (const rowToRemove of indexOrRows) {
502
- rowsToRemove.push(__classPrivateFieldGet(this, _Table_instances, "m", _Table_getRow).call(this, rowToRemove));
546
+ rowsToRemove.add(__classPrivateFieldGet(this, _Table_instances, "m", _Table_getRow).call(this, rowToRemove));
503
547
  }
548
+ // Collect contiguous runs of rows-to-remove as [start, end) ranges so they can be
549
+ // removed via a small number of `removeRange` calls below.
550
+ const ranges = collectContiguousRanges(this.table.rows, (row) => rowsToRemove.has(row));
551
+ // Note, throwing an error within a transaction will abort the entire transaction.
552
+ // So if we throw an error here for any row, no rows will be removed.
504
553
  __classPrivateFieldGet(this, _Table_instances, "m", _Table_applyEditsInBatch).call(this, {
505
554
  applyEdits: () => {
506
- // Note, throwing an error within a transaction will abort the entire transaction.
507
- // So if we throw an error here for any row, no rows will be removed.
508
- for (const rowToRemove of rowsToRemove) {
509
- // We have already validated that all of the rows exist above, so this is safe.
510
- const index = this.table.rows.indexOf(rowToRemove);
511
- this.table.rows.removeAt(index);
555
+ // Ranges are iterated in reverse so each `removeRange` call doesn't shift
556
+ // the indices of yet-to-remove ranges at lower positions.
557
+ for (let r = ranges.length - 1; r >= 0; r--) {
558
+ const { start, end } = ranges[r] ?? oob();
559
+ this.table.rows.removeRange(start, end);
512
560
  }
513
561
  },
514
- preconditionsOnRevert: columnConstraints.length > 0 ? columnConstraints : undefined,
562
+ // Relevant invariant: each cell corresponds to an existing row and column.
563
+ // On revert, the removed rows come back with their original cells, so we need
564
+ // each column referenced by those cells to still exist. Columns the removed rows
565
+ // don't reference cannot be orphaned by the revert and need not be constrained.
566
+ // TODO: Replace with "no detach on revert" constraint on the column array when available.
567
+ preconditionsOnRevert: __classPrivateFieldGet(this, _Table_instances, "m", _Table_buildColumnInDocumentConstraintsForRows).call(this, rowsToRemove),
515
568
  });
516
- return rowsToRemove;
569
+ return [...rowsToRemove];
517
570
  }
518
- removeCell(key) {
519
- const { column: columnOrIdOrIndex, row: rowOrIdOrIndex } = key;
571
+ removeCell(rowOrKey, maybeColumn) {
572
+ // Dispatch on the presence of the second argument to disambiguate the two overloads:
573
+ // * `maybeColumn === undefined` → deprecated `(key)` overload; unpack from `key.row`/`key.column`
574
+ // * otherwise → positional `(row, column)` overload
575
+ let rowOrIdOrIndex;
576
+ let columnOrIdOrIndex;
577
+ if (maybeColumn === undefined) {
578
+ const key = rowOrKey;
579
+ rowOrIdOrIndex = key.row;
580
+ columnOrIdOrIndex = key.column;
581
+ }
582
+ else {
583
+ rowOrIdOrIndex = rowOrKey;
584
+ columnOrIdOrIndex = maybeColumn;
585
+ }
520
586
  const row = __classPrivateFieldGet(this, _Table_instances, "m", _Table_getRow).call(this, rowOrIdOrIndex);
521
587
  const column = __classPrivateFieldGet(this, _Table_instances, "m", _Table_getColumn).call(this, columnOrIdOrIndex);
522
588
  const cell = row.cells[column.id];
@@ -590,10 +656,9 @@ export var System_TableSchema;
590
656
  // #region If the row contains cells, verify that the table contains the columns for those cells
591
657
  // Note: we intentionally hide `cells` on `IRow` to avoid leaking the internal data representation as much as possible, so we have to cast here.
592
658
  // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access
593
- if (newRow.cells !== undefined) {
594
- // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access
595
- const keys = Object.keys(newRow.cells);
596
- for (const key of keys) {
659
+ const cells = newRow.cells;
660
+ if (cells !== undefined) {
661
+ for (const key of Object.keys(cells)) {
597
662
  if (!columnIds.has(key)) {
598
663
  throw new UsageError(`Attempted to insert a row containing a cell under column ID "${key}", but the table does not contain a column with that ID.`);
599
664
  }
@@ -637,6 +702,32 @@ export var System_TableSchema;
637
702
  }, preconditions === undefined ? undefined : { preconditions });
638
703
  }
639
704
  });
705
+ }, _Table_buildColumnInDocumentConstraintsForRows = function _Table_buildColumnInDocumentConstraintsForRows(rows) {
706
+ if (!TreeAlpha.context(this).isBranch()) {
707
+ return undefined;
708
+ }
709
+ const referencedColumnIds = new Set();
710
+ for (const row of rows) {
711
+ // `cells` is intentionally hidden on the public row type, so cast to read it.
712
+ const cells = row.cells;
713
+ if (cells === undefined) {
714
+ continue;
715
+ }
716
+ for (const id of Object.keys(cells)) {
717
+ referencedColumnIds.add(id);
718
+ }
719
+ }
720
+ if (referencedColumnIds.size === 0) {
721
+ return undefined;
722
+ }
723
+ const columnCache = __classPrivateFieldGet(this, _Table_instances, "m", _Table_getColumnCache).call(this);
724
+ const constraints = [];
725
+ for (const id of referencedColumnIds) {
726
+ const column = columnCache.get(id) ?? fail(0xd05 /* Column ID not found in cache */);
727
+ constraints.push({ type: "nodeInDocument", node: column });
728
+ }
729
+ assert(constraints.length > 0, 0xd06 /* No constraints generated for column references. */);
730
+ return constraints;
640
731
  }, _Table_getColumnCache = function _Table_getColumnCache() {
641
732
  let cache = __classPrivateFieldGet(this, _Table_columnCache, "f");
642
733
  if (cache === undefined) {
@@ -657,6 +748,11 @@ export var System_TableSchema;
657
748
  }
658
749
  }
659
750
  return cache;
751
+ }, _Table_tryGetColumnId = function _Table_tryGetColumnId(columnOrIdOrIndex) {
752
+ if (typeof columnOrIdOrIndex === "string") {
753
+ return columnOrIdOrIndex;
754
+ }
755
+ return __classPrivateFieldGet(this, _Table_instances, "m", _Table_tryGetColumn).call(this, columnOrIdOrIndex)?.id;
660
756
  }, _Table_tryGetColumn = function _Table_tryGetColumn(columnOrIdOrIndex) {
661
757
  if (typeof columnOrIdOrIndex === "number") {
662
758
  if (columnOrIdOrIndex < 0 || columnOrIdOrIndex >= this.table.columns.length) {