@fluidframework/tree 2.53.0-350190 → 2.53.1

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 (236) hide show
  1. package/.eslintrc.cjs +14 -2
  2. package/CHANGELOG.md +125 -0
  3. package/api-report/tree.alpha.api.md +11 -13
  4. package/dist/core/tree/visitDelta.d.ts +1 -1
  5. package/dist/core/tree/visitDelta.d.ts.map +1 -1
  6. package/dist/core/tree/visitDelta.js.map +1 -1
  7. package/dist/feature-libraries/chunked-forest/index.d.ts +1 -0
  8. package/dist/feature-libraries/chunked-forest/index.d.ts.map +1 -1
  9. package/dist/feature-libraries/chunked-forest/index.js +3 -1
  10. package/dist/feature-libraries/chunked-forest/index.js.map +1 -1
  11. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +2 -4
  12. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  13. package/dist/feature-libraries/default-schema/defaultEditBuilder.js +3 -0
  14. package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  15. package/dist/feature-libraries/default-schema/noChangeCodecs.d.ts +1 -1
  16. package/dist/feature-libraries/default-schema/noChangeCodecs.d.ts.map +1 -1
  17. package/dist/feature-libraries/default-schema/noChangeCodecs.js.map +1 -1
  18. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts +4 -0
  19. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  20. package/dist/feature-libraries/forest-summary/forestSummarizer.js +5 -5
  21. package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  22. package/dist/feature-libraries/index.d.ts +1 -1
  23. package/dist/feature-libraries/index.d.ts.map +1 -1
  24. package/dist/feature-libraries/index.js +4 -2
  25. package/dist/feature-libraries/index.js.map +1 -1
  26. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +1 -0
  27. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  28. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.d.ts +1 -1
  29. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.d.ts.map +1 -1
  30. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.js.map +1 -1
  31. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +1 -1
  32. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
  33. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  34. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts +1 -1
  35. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
  36. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
  37. package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts +1 -1
  38. package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts.map +1 -1
  39. package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.js.map +1 -1
  40. package/dist/feature-libraries/sequence-field/types.d.ts +1 -1
  41. package/dist/feature-libraries/sequence-field/types.d.ts.map +1 -1
  42. package/dist/feature-libraries/sequence-field/types.js.map +1 -1
  43. package/dist/index.js +3 -2
  44. package/dist/index.js.map +1 -1
  45. package/dist/packageVersion.d.ts +1 -1
  46. package/dist/packageVersion.d.ts.map +1 -1
  47. package/dist/packageVersion.js +1 -1
  48. package/dist/packageVersion.js.map +1 -1
  49. package/dist/shared-tree/independentView.d.ts.map +1 -1
  50. package/dist/shared-tree/independentView.js +1 -1
  51. package/dist/shared-tree/independentView.js.map +1 -1
  52. package/dist/shared-tree/index.d.ts +0 -1
  53. package/dist/shared-tree/index.d.ts.map +1 -1
  54. package/dist/shared-tree/index.js.map +1 -1
  55. package/dist/shared-tree/schematizeTree.d.ts +23 -60
  56. package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
  57. package/dist/shared-tree/schematizeTree.js +59 -151
  58. package/dist/shared-tree/schematizeTree.js.map +1 -1
  59. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  60. package/dist/shared-tree/schematizingTreeView.js +8 -8
  61. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  62. package/dist/shared-tree-core/defaultResubmitMachine.d.ts +2 -1
  63. package/dist/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
  64. package/dist/shared-tree-core/defaultResubmitMachine.js.map +1 -1
  65. package/dist/simple-tree/core/allowedTypes.d.ts +14 -14
  66. package/dist/simple-tree/core/allowedTypes.d.ts.map +1 -1
  67. package/dist/simple-tree/core/allowedTypes.js.map +1 -1
  68. package/dist/simple-tree/core/treeNode.d.ts +0 -3
  69. package/dist/simple-tree/core/treeNode.d.ts.map +1 -1
  70. package/dist/simple-tree/core/treeNode.js +3 -3
  71. package/dist/simple-tree/core/treeNode.js.map +1 -1
  72. package/dist/simple-tree/core/treeNodeValid.d.ts.map +1 -1
  73. package/dist/simple-tree/core/treeNodeValid.js +0 -3
  74. package/dist/simple-tree/core/treeNodeValid.js.map +1 -1
  75. package/dist/simple-tree/fieldSchema.d.ts +2 -1
  76. package/dist/simple-tree/fieldSchema.d.ts.map +1 -1
  77. package/dist/simple-tree/fieldSchema.js.map +1 -1
  78. package/dist/simple-tree/index.d.ts +1 -1
  79. package/dist/simple-tree/index.d.ts.map +1 -1
  80. package/dist/simple-tree/index.js +3 -2
  81. package/dist/simple-tree/index.js.map +1 -1
  82. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  83. package/dist/simple-tree/node-kinds/array/arrayNode.js +5 -5
  84. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  85. package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  86. package/dist/simple-tree/node-kinds/map/mapNode.js +1 -1
  87. package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  88. package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  89. package/dist/simple-tree/node-kinds/object/objectNode.js +2 -2
  90. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  91. package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  92. package/dist/simple-tree/node-kinds/record/recordNode.js +1 -1
  93. package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  94. package/dist/tableSchema.d.ts +25 -32
  95. package/dist/tableSchema.d.ts.map +1 -1
  96. package/dist/tableSchema.js +10 -24
  97. package/dist/tableSchema.js.map +1 -1
  98. package/docs/.attachments/cell-ordering/C-knows-of-ABC.png +0 -0
  99. package/docs/.attachments/cell-ordering/C-knows-of-C.png +0 -0
  100. package/docs/.attachments/cell-ordering/XvsA.png +0 -0
  101. package/docs/.attachments/cell-ordering/compose-a-b.png +0 -0
  102. package/docs/.attachments/cell-ordering/compose-a-ref-p1-b-ref-p2.png +0 -0
  103. package/docs/.attachments/cell-ordering/compose-b-no-ref-to-ca.png +0 -0
  104. package/docs/.attachments/cell-ordering/rebase-ab-over-x.png +0 -0
  105. package/docs/.attachments/cell-ordering/rebase-b-over-x.png +0 -0
  106. package/docs/.attachments/cell-ordering/rebase-b2-over-x.png +0 -0
  107. package/docs/.attachments/cell-ordering/rebase-b2.png +0 -0
  108. package/docs/.attachments/cell-ordering/rebase-to-abprime.png +0 -0
  109. package/docs/.attachments/cell-ordering/rebase-to-bprime.png +0 -0
  110. package/docs/main/cell-ordering.md +638 -0
  111. package/lib/core/tree/visitDelta.d.ts +1 -1
  112. package/lib/core/tree/visitDelta.d.ts.map +1 -1
  113. package/lib/core/tree/visitDelta.js.map +1 -1
  114. package/lib/feature-libraries/chunked-forest/index.d.ts +1 -0
  115. package/lib/feature-libraries/chunked-forest/index.d.ts.map +1 -1
  116. package/lib/feature-libraries/chunked-forest/index.js +1 -0
  117. package/lib/feature-libraries/chunked-forest/index.js.map +1 -1
  118. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +2 -4
  119. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  120. package/lib/feature-libraries/default-schema/defaultEditBuilder.js +4 -1
  121. package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  122. package/lib/feature-libraries/default-schema/noChangeCodecs.d.ts +1 -1
  123. package/lib/feature-libraries/default-schema/noChangeCodecs.d.ts.map +1 -1
  124. package/lib/feature-libraries/default-schema/noChangeCodecs.js.map +1 -1
  125. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts +4 -0
  126. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  127. package/lib/feature-libraries/forest-summary/forestSummarizer.js +1 -1
  128. package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  129. package/lib/feature-libraries/index.d.ts +1 -1
  130. package/lib/feature-libraries/index.d.ts.map +1 -1
  131. package/lib/feature-libraries/index.js +1 -1
  132. package/lib/feature-libraries/index.js.map +1 -1
  133. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +1 -0
  134. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  135. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.d.ts +1 -1
  136. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.d.ts.map +1 -1
  137. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.js +1 -1
  138. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.js.map +1 -1
  139. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +1 -1
  140. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
  141. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js +1 -1
  142. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  143. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts +1 -1
  144. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
  145. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js +1 -1
  146. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
  147. package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts +1 -1
  148. package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts.map +1 -1
  149. package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.js.map +1 -1
  150. package/lib/feature-libraries/sequence-field/types.d.ts +1 -1
  151. package/lib/feature-libraries/sequence-field/types.d.ts.map +1 -1
  152. package/lib/feature-libraries/sequence-field/types.js.map +1 -1
  153. package/lib/index.js +1 -1
  154. package/lib/index.js.map +1 -1
  155. package/lib/packageVersion.d.ts +1 -1
  156. package/lib/packageVersion.d.ts.map +1 -1
  157. package/lib/packageVersion.js +1 -1
  158. package/lib/packageVersion.js.map +1 -1
  159. package/lib/shared-tree/independentView.d.ts.map +1 -1
  160. package/lib/shared-tree/independentView.js +2 -2
  161. package/lib/shared-tree/independentView.js.map +1 -1
  162. package/lib/shared-tree/index.d.ts +0 -1
  163. package/lib/shared-tree/index.d.ts.map +1 -1
  164. package/lib/shared-tree/index.js.map +1 -1
  165. package/lib/shared-tree/schematizeTree.d.ts +23 -60
  166. package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
  167. package/lib/shared-tree/schematizeTree.js +60 -150
  168. package/lib/shared-tree/schematizeTree.js.map +1 -1
  169. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  170. package/lib/shared-tree/schematizingTreeView.js +11 -11
  171. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  172. package/lib/shared-tree-core/defaultResubmitMachine.d.ts +2 -1
  173. package/lib/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
  174. package/lib/shared-tree-core/defaultResubmitMachine.js.map +1 -1
  175. package/lib/simple-tree/core/allowedTypes.d.ts +14 -14
  176. package/lib/simple-tree/core/allowedTypes.d.ts.map +1 -1
  177. package/lib/simple-tree/core/allowedTypes.js.map +1 -1
  178. package/lib/simple-tree/core/treeNode.d.ts +0 -3
  179. package/lib/simple-tree/core/treeNode.d.ts.map +1 -1
  180. package/lib/simple-tree/core/treeNode.js +3 -3
  181. package/lib/simple-tree/core/treeNode.js.map +1 -1
  182. package/lib/simple-tree/core/treeNodeValid.d.ts.map +1 -1
  183. package/lib/simple-tree/core/treeNodeValid.js +0 -3
  184. package/lib/simple-tree/core/treeNodeValid.js.map +1 -1
  185. package/lib/simple-tree/fieldSchema.d.ts +2 -1
  186. package/lib/simple-tree/fieldSchema.d.ts.map +1 -1
  187. package/lib/simple-tree/fieldSchema.js.map +1 -1
  188. package/lib/simple-tree/index.d.ts +1 -1
  189. package/lib/simple-tree/index.d.ts.map +1 -1
  190. package/lib/simple-tree/index.js +1 -1
  191. package/lib/simple-tree/index.js.map +1 -1
  192. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  193. package/lib/simple-tree/node-kinds/array/arrayNode.js +5 -5
  194. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  195. package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  196. package/lib/simple-tree/node-kinds/map/mapNode.js +1 -1
  197. package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  198. package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  199. package/lib/simple-tree/node-kinds/object/objectNode.js +2 -2
  200. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  201. package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  202. package/lib/simple-tree/node-kinds/record/recordNode.js +1 -1
  203. package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  204. package/lib/tableSchema.d.ts +25 -32
  205. package/lib/tableSchema.d.ts.map +1 -1
  206. package/lib/tableSchema.js +11 -25
  207. package/lib/tableSchema.js.map +1 -1
  208. package/package.json +21 -21
  209. package/src/core/tree/visitDelta.ts +3 -1
  210. package/src/feature-libraries/chunked-forest/index.ts +1 -0
  211. package/src/feature-libraries/default-schema/defaultEditBuilder.ts +12 -5
  212. package/src/feature-libraries/default-schema/noChangeCodecs.ts +1 -1
  213. package/src/feature-libraries/forest-summary/forestSummarizer.ts +1 -1
  214. package/src/feature-libraries/index.ts +2 -0
  215. package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +1 -0
  216. package/src/feature-libraries/sequence-field/sequenceFieldCodecV1.ts +4 -2
  217. package/src/feature-libraries/sequence-field/sequenceFieldCodecV2.ts +4 -2
  218. package/src/feature-libraries/sequence-field/sequenceFieldCodecV3.ts +4 -2
  219. package/src/feature-libraries/sequence-field/sequenceFieldCodecs.ts +1 -1
  220. package/src/feature-libraries/sequence-field/types.ts +1 -1
  221. package/src/packageVersion.ts +1 -1
  222. package/src/shared-tree/independentView.ts +6 -2
  223. package/src/shared-tree/index.ts +0 -2
  224. package/src/shared-tree/schematizeTree.ts +83 -199
  225. package/src/shared-tree/schematizingTreeView.ts +17 -9
  226. package/src/shared-tree-core/defaultResubmitMachine.ts +2 -1
  227. package/src/simple-tree/core/allowedTypes.ts +25 -16
  228. package/src/simple-tree/core/treeNode.ts +3 -3
  229. package/src/simple-tree/core/treeNodeValid.ts +0 -3
  230. package/src/simple-tree/fieldSchema.ts +2 -1
  231. package/src/simple-tree/index.ts +1 -3
  232. package/src/simple-tree/node-kinds/array/arrayNode.ts +29 -36
  233. package/src/simple-tree/node-kinds/map/mapNode.ts +4 -1
  234. package/src/simple-tree/node-kinds/object/objectNode.ts +5 -2
  235. package/src/simple-tree/node-kinds/record/recordNode.ts +4 -1
  236. package/src/tableSchema.ts +40 -35
@@ -850,19 +850,19 @@ type Insertable<T extends ImplicitAllowedTypes> = readonly (
850
850
  | IterableTreeArrayContent<InsertableTreeNodeFromImplicitAllowedTypes<T>>
851
851
  )[];
852
852
 
853
- abstract class CustomArrayNodeBase<const T extends ImplicitAnnotatedAllowedTypes>
853
+ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
854
854
  extends TreeNodeWithArrayFeatures<
855
- Iterable<InsertableTreeNodeFromImplicitAllowedTypes<UnannotateImplicitAllowedTypes<T>>>,
856
- TreeNodeFromImplicitAllowedTypes<UnannotateImplicitAllowedTypes<T>>
855
+ Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>>,
856
+ TreeNodeFromImplicitAllowedTypes<T>
857
857
  >
858
- implements TreeArrayNode<UnannotateImplicitAllowedTypes<T>>
858
+ implements TreeArrayNode<T>
859
859
  {
860
860
  // Indexing must be provided by subclass.
861
- [k: number]: TreeNodeFromImplicitAllowedTypes<UnannotateImplicitAllowedTypes<T>>;
861
+ [k: number]: TreeNodeFromImplicitAllowedTypes<T>;
862
862
 
863
863
  public static readonly kind = NodeKind.Array;
864
864
 
865
- protected abstract get simpleSchema(): T;
865
+ protected abstract get childSchema(): ImplicitAnnotatedAllowedTypes;
866
866
  protected abstract get allowedTypes(): ReadonlySet<TreeNodeSchema>;
867
867
 
868
868
  public abstract override get [typeSchemaSymbol](): TreeNodeSchemaClass<
@@ -871,16 +871,12 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAnnotatedAllowedTypes
871
871
  >;
872
872
 
873
873
  public constructor(
874
- input?:
875
- | Iterable<InsertableTreeNodeFromImplicitAllowedTypes<UnannotateImplicitAllowedTypes<T>>>
876
- | InternalTreeNode,
874
+ input?: Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>> | InternalTreeNode,
877
875
  ) {
878
876
  super(input ?? []);
879
877
  }
880
878
 
881
- #mapTreesFromFieldData(
882
- value: Insertable<UnannotateImplicitAllowedTypes<T>>,
883
- ): FlexibleFieldContent {
879
+ #mapTreesFromFieldData(value: Insertable<T>): FlexibleFieldContent {
884
880
  const sequenceField = getSequenceField(this);
885
881
  const content = value as readonly (
886
882
  | InsertableContent
@@ -893,16 +889,22 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAnnotatedAllowedTypes
893
889
 
894
890
  const kernel = getKernel(this);
895
891
  const flexContext = kernel.getOrCreateInnerNode().context;
896
- assert(flexContext === kernel.context.flexContext, "Expected flexContext to match");
892
+ assert(
893
+ flexContext === kernel.context.flexContext,
894
+ 0xc14 /* Expected flexContext to match */,
895
+ );
897
896
  const innerSchema = kernel.context.flexContext.schema.nodeSchema.get(
898
897
  brand(kernel.schema.identifier),
899
898
  );
900
- assert(innerSchema instanceof ObjectNodeStoredSchema, "Expected ObjectNodeStoredSchema");
899
+ assert(
900
+ innerSchema instanceof ObjectNodeStoredSchema,
901
+ 0xc15 /* Expected ObjectNodeStoredSchema */,
902
+ );
901
903
  const fieldSchema = innerSchema.getFieldSchema(EmptyKey);
902
904
 
903
905
  const mapTrees = prepareArrayContentForInsertion(
904
906
  contentArray,
905
- this.simpleSchema,
907
+ this.childSchema,
906
908
  sequenceField.context,
907
909
  fieldSchema.types,
908
910
  );
@@ -923,9 +925,7 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAnnotatedAllowedTypes
923
925
  return fail(0xadb /* Proxy should intercept length */);
924
926
  }
925
927
 
926
- public [Symbol.iterator](): IterableIterator<
927
- TreeNodeFromImplicitAllowedTypes<UnannotateImplicitAllowedTypes<T>>
928
- > {
928
+ public [Symbol.iterator](): IterableIterator<TreeNodeFromImplicitAllowedTypes<T>> {
929
929
  return this.values();
930
930
  }
931
931
 
@@ -937,9 +937,9 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAnnotatedAllowedTypes
937
937
  }
938
938
 
939
939
  public at(
940
- this: TreeArrayNode<UnannotateImplicitAllowedTypes<T>>,
940
+ this: TreeArrayNode<T>,
941
941
  index: number,
942
- ): TreeNodeFromImplicitAllowedTypes<UnannotateImplicitAllowedTypes<T>> | undefined {
942
+ ): TreeNodeFromImplicitAllowedTypes<T> | undefined {
943
943
  const field = getSequenceField(this);
944
944
  const val = field.boxedAt(index);
945
945
 
@@ -947,23 +947,18 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAnnotatedAllowedTypes
947
947
  return val;
948
948
  }
949
949
 
950
- return getOrCreateNodeFromInnerNode(val) as TreeNodeFromImplicitAllowedTypes<
951
- UnannotateImplicitAllowedTypes<T>
952
- >;
950
+ return getOrCreateNodeFromInnerNode(val) as TreeNodeFromImplicitAllowedTypes<T>;
953
951
  }
954
- public insertAt(
955
- index: number,
956
- ...value: Insertable<UnannotateImplicitAllowedTypes<T>>
957
- ): void {
952
+ public insertAt(index: number, ...value: Insertable<T>): void {
958
953
  const field = getSequenceField(this);
959
954
  validateIndex(index, field, "insertAt", true);
960
955
  const content = this.#mapTreesFromFieldData(value);
961
956
  field.editor.insert(index, content);
962
957
  }
963
- public insertAtStart(...value: Insertable<UnannotateImplicitAllowedTypes<T>>): void {
958
+ public insertAtStart(...value: Insertable<T>): void {
964
959
  this.insertAt(0, ...value);
965
960
  }
966
- public insertAtEnd(...value: Insertable<UnannotateImplicitAllowedTypes<T>>): void {
961
+ public insertAtEnd(...value: Insertable<T>): void {
967
962
  this.insertAt(this.length, ...value);
968
963
  }
969
964
  public removeAt(index: number): void {
@@ -1045,7 +1040,7 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAnnotatedAllowedTypes
1045
1040
  const kernel = getKernel(this);
1046
1041
  const destinationStored = (
1047
1042
  kernel.context.flexContext.schema.nodeSchema.get(brand(kernel.schema.identifier)) ??
1048
- fail("missing schema for array node")
1043
+ fail(0xc16 /* missing schema for array node */)
1049
1044
  ).getFieldSchema(EmptyKey).types;
1050
1045
  const sourceField = source !== undefined ? getSequenceField(source) : destinationField;
1051
1046
 
@@ -1116,14 +1111,12 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAnnotatedAllowedTypes
1116
1111
  }
1117
1112
  }
1118
1113
 
1119
- public values(): IterableIterator<
1120
- TreeNodeFromImplicitAllowedTypes<UnannotateImplicitAllowedTypes<T>>
1121
- > {
1114
+ public values(): IterableIterator<TreeNodeFromImplicitAllowedTypes<T>> {
1122
1115
  return this.generateValues(getKernel(this).generationNumber);
1123
1116
  }
1124
1117
  private *generateValues(
1125
1118
  initialLastUpdatedStamp: number,
1126
- ): Generator<TreeNodeFromImplicitAllowedTypes<UnannotateImplicitAllowedTypes<T>>> {
1119
+ ): Generator<TreeNodeFromImplicitAllowedTypes<T>> {
1127
1120
  const kernel = getKernel(this);
1128
1121
  if (initialLastUpdatedStamp !== kernel.generationNumber) {
1129
1122
  throw new UsageError(`Concurrent editing and iteration is not allowed.`);
@@ -1177,7 +1170,7 @@ export function arraySchema<
1177
1170
 
1178
1171
  // This class returns a proxy from its constructor to handle numeric indexing.
1179
1172
  // Alternatively it could extend a normal class which gets tons of numeric properties added.
1180
- class Schema extends CustomArrayNodeBase<T> {
1173
+ class Schema extends CustomArrayNodeBase<UnannotateImplicitAllowedTypes<T>> {
1181
1174
  public static override prepareInstance<T2>(
1182
1175
  this: typeof TreeNodeValid<T2>,
1183
1176
  instance: TreeNodeValid<T2>,
@@ -1268,7 +1261,7 @@ export function arraySchema<
1268
1261
  return Schema.constructorCached?.constructor as unknown as Output;
1269
1262
  }
1270
1263
 
1271
- protected get simpleSchema(): T {
1264
+ protected get childSchema(): T {
1272
1265
  return info;
1273
1266
  }
1274
1267
  protected get allowedTypes(): ReadonlySet<TreeNodeSchema> {
@@ -215,7 +215,10 @@ abstract class CustomMapNodeBase<const T extends ImplicitAllowedTypes> extends T
215
215
  const innerSchema = this.innerNode.context.schema.nodeSchema.get(
216
216
  brand(kernel.schema.identifier),
217
217
  );
218
- assert(innerSchema instanceof MapNodeStoredSchema, "Expected MapNodeStoredSchema");
218
+ assert(
219
+ innerSchema instanceof MapNodeStoredSchema,
220
+ 0xc17 /* Expected MapNodeStoredSchema */,
221
+ );
219
222
 
220
223
  const mapTree = prepareForInsertion(
221
224
  value as InsertableContent | undefined,
@@ -295,7 +295,10 @@ function createProxyHandler(
295
295
  const innerNode = getOrCreateInnerNode(proxy);
296
296
 
297
297
  const innerSchema = innerNode.context.schema.nodeSchema.get(brand(schema.identifier));
298
- assert(innerSchema instanceof ObjectNodeStoredSchema, "Expected ObjectNodeStoredSchema");
298
+ assert(
299
+ innerSchema instanceof ObjectNodeStoredSchema,
300
+ 0xc18 /* Expected ObjectNodeStoredSchema */,
301
+ );
299
302
 
300
303
  setField(
301
304
  innerNode.getBoxed(fieldInfo.storedKey),
@@ -606,7 +609,7 @@ export function objectSchema<
606
609
  for (const fieldSchema of flexKeyMap.values()) {
607
610
  assert(
608
611
  fieldSchema.schema instanceof FieldSchemaAlpha,
609
- "Expected FieldSchemaAlpha",
612
+ 0xc19 /* Expected FieldSchemaAlpha */,
610
613
  );
611
614
  fields.set(
612
615
  brand(fieldSchema.storedKey),
@@ -126,7 +126,10 @@ function createRecordNodeProxy(
126
126
  const field = innerNode.getBoxed(brand(key)) as FlexTreeOptionalField;
127
127
  const kernel = getKernel(receiver);
128
128
  const innerSchema = innerNode.context.schema.nodeSchema.get(brand(schema.identifier));
129
- assert(innerSchema instanceof MapNodeStoredSchema, "Expected MapNodeStoredSchema");
129
+ assert(
130
+ innerSchema instanceof MapNodeStoredSchema,
131
+ 0xc1a /* Expected MapNodeStoredSchema */,
132
+ );
130
133
 
131
134
  const mapTree = prepareForInsertion(
132
135
  value,
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { oob } from "@fluidframework/core-utils/internal";
6
+ import { assert, oob } from "@fluidframework/core-utils/internal";
7
7
  import { UsageError } from "@fluidframework/telemetry-utils/internal";
8
8
 
9
9
  import { Tree, TreeAlpha } from "./shared-tree/index.js";
@@ -780,8 +780,20 @@ export namespace System_TableSchema {
780
780
  `Specified column with ID "${columnId}" does not exist in the table.`,
781
781
  );
782
782
  }
783
- this.columns.removeAt(index);
784
- return column as ColumnValueType;
783
+ assert(column !== undefined, 0xc10 /* column should not be undefined */);
784
+
785
+ Tree.runTransaction(this, () => {
786
+ // Remove the corresponding cell from all rows.
787
+ for (const row of this.rows) {
788
+ // TypeScript is unable to narrow the row type correctly here, hence the cast.
789
+ // See: https://github.com/microsoft/TypeScript/issues/52144
790
+ (row as RowValueType).removeCell(column);
791
+ }
792
+
793
+ this.columns.removeAt(index);
794
+ });
795
+
796
+ return column;
785
797
  }
786
798
 
787
799
  public removeAllColumns(): ColumnValueType[] {
@@ -1081,29 +1093,6 @@ export namespace System_TableSchema {
1081
1093
  * });
1082
1094
  * ```
1083
1095
  *
1084
- * @example Removing column and cells in a transaction
1085
- *
1086
- * When removing a column, if you wish to ensure that all of its corresponding cells are also removed (and not
1087
- * orphaned), you can remove the column and all of the relevant cells in a transaction.
1088
- * Note that there are performance implications to this.
1089
- *
1090
- * ```typescript
1091
- * // Remove column1 and all of its cells.
1092
- * // The "transaction" method will ensure that all changes are applied atomically.
1093
- * Tree.runTransaction(table, () => {
1094
- * // Remove column1.
1095
- * table.removeColumn(column1);
1096
- *
1097
- * // Remove the cell at column1 for each row.
1098
- * for (const row of table.rows) {
1099
- * table.removeCell({
1100
- * column: column1,
1101
- * row,
1102
- * });
1103
- * }
1104
- * });
1105
- * ```
1106
- *
1107
1096
  * @privateRemarks
1108
1097
  * The above examples are backed by tests in `tableSchema.spec.ts`.
1109
1098
  * Those tests and these examples should be kept in-sync to ensure that the examples are correct.
@@ -1530,14 +1519,16 @@ export namespace TableSchema {
1530
1519
 
1531
1520
  /**
1532
1521
  * Removes the specified column from the table.
1533
- *
1534
1522
  * @remarks
1535
- * Note: this does not remove any cells from the table's rows.
1536
- * To remove the corresponding cells, use {@link TableSchema.Table.removeCell}.
1523
+ * Also removes any corresponding cells from the table's rows.
1524
+ *
1525
+ * Note: this operation can be slow for tables with many rows.
1526
+ * We are actively working on improving the performance of this operation, but for now it may have a negative
1527
+ * impact on performance.
1537
1528
  *
1538
1529
  * @param column - The {@link TableSchema.Column | column} or {@link TableSchema.Column.id | column ID} to remove.
1539
1530
  * @throws Throws an error if the column is not in the table.
1540
- * @privateRemarks TODO (future): Actually remove corresponding cells from table rows.
1531
+ * In this case, no columns are removed.
1541
1532
  */
1542
1533
  removeColumn(
1543
1534
  column: string | TreeNodeFromImplicitAllowedTypes<TColumn>,
@@ -1545,10 +1536,12 @@ export namespace TableSchema {
1545
1536
 
1546
1537
  /**
1547
1538
  * Removes 0 or more columns from the table.
1548
- *
1549
1539
  * @remarks
1550
- * Note: this does not remove any cells from the table's rows.
1551
- * To remove the corresponding cells, use {@link TableSchema.Table.removeCell}.
1540
+ * Also removes any corresponding cells from the table's rows.
1541
+ *
1542
+ * Note: this operation can be slow for tables with many rows.
1543
+ * We are actively working on improving the performance of this operation, but for now it may have a negative
1544
+ * impact on performance.
1552
1545
  *
1553
1546
  * @param columns - The columns to remove.
1554
1547
  * @throws Throws an error if any of the columns are not in the table.
@@ -1561,8 +1554,11 @@ export namespace TableSchema {
1561
1554
  * Removes 0 or more columns from the table.
1562
1555
  *
1563
1556
  * @remarks
1564
- * Note: this does not remove any cells from the table's rows.
1565
- * To remove the corresponding cells, use {@link TableSchema.Table.removeCell}.
1557
+ * Also removes any corresponding cells from the table's rows.
1558
+ *
1559
+ * Note: this operation can be slow for tables with many rows.
1560
+ * We are actively working on improving the performance of this operation, but for now it may have a negative
1561
+ * impact on performance.
1566
1562
  *
1567
1563
  * @param columns - The columns to remove, specified by their {@link TableSchema.Column.id}.
1568
1564
  * @throws Throws an error if any of the columns are not in the table.
@@ -1572,6 +1568,14 @@ export namespace TableSchema {
1572
1568
 
1573
1569
  /**
1574
1570
  * Removes all columns from the table.
1571
+ *
1572
+ * @remarks
1573
+ * Also removes any corresponding cells from the table's rows.
1574
+ *
1575
+ * Note: this operation can be slow for tables with many rows.
1576
+ * We are actively working on improving the performance of this operation, but for now it may have a negative
1577
+ * impact on performance.
1578
+ *
1575
1579
  * @returns The removed columns.
1576
1580
  */
1577
1581
  removeAllColumns(): TreeNodeFromImplicitAllowedTypes<TColumn>[];
@@ -1580,6 +1584,7 @@ export namespace TableSchema {
1580
1584
  * Removes the specified row from the table.
1581
1585
  * @param row - The {@link TableSchema.Row | row} or {@link TableSchema.Row.id | row ID} to remove.
1582
1586
  * @throws Throws an error if the row is not in the table.
1587
+ * In this case, no rows are removed.
1583
1588
  */
1584
1589
  removeRow(
1585
1590
  row: string | TreeNodeFromImplicitAllowedTypes<TRow>,