@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.
- package/.eslintrc.cjs +14 -2
- package/CHANGELOG.md +125 -0
- package/api-report/tree.alpha.api.md +11 -13
- package/dist/core/tree/visitDelta.d.ts +1 -1
- package/dist/core/tree/visitDelta.d.ts.map +1 -1
- package/dist/core/tree/visitDelta.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/index.d.ts +1 -0
- package/dist/feature-libraries/chunked-forest/index.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/index.js +3 -1
- package/dist/feature-libraries/chunked-forest/index.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +2 -4
- package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.js +3 -0
- package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/dist/feature-libraries/default-schema/noChangeCodecs.d.ts +1 -1
- package/dist/feature-libraries/default-schema/noChangeCodecs.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/noChangeCodecs.js.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts +4 -0
- package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.js +5 -5
- package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/dist/feature-libraries/index.d.ts +1 -1
- package/dist/feature-libraries/index.d.ts.map +1 -1
- package/dist/feature-libraries/index.js +4 -2
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +1 -0
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.d.ts +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.js.map +1 -1
- package/dist/feature-libraries/sequence-field/types.d.ts +1 -1
- package/dist/feature-libraries/sequence-field/types.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/types.js.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.d.ts.map +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/shared-tree/independentView.d.ts.map +1 -1
- package/dist/shared-tree/independentView.js +1 -1
- package/dist/shared-tree/independentView.js.map +1 -1
- package/dist/shared-tree/index.d.ts +0 -1
- package/dist/shared-tree/index.d.ts.map +1 -1
- package/dist/shared-tree/index.js.map +1 -1
- package/dist/shared-tree/schematizeTree.d.ts +23 -60
- package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
- package/dist/shared-tree/schematizeTree.js +59 -151
- package/dist/shared-tree/schematizeTree.js.map +1 -1
- package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +8 -8
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree-core/defaultResubmitMachine.d.ts +2 -1
- package/dist/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
- package/dist/shared-tree-core/defaultResubmitMachine.js.map +1 -1
- package/dist/simple-tree/core/allowedTypes.d.ts +14 -14
- package/dist/simple-tree/core/allowedTypes.d.ts.map +1 -1
- package/dist/simple-tree/core/allowedTypes.js.map +1 -1
- package/dist/simple-tree/core/treeNode.d.ts +0 -3
- package/dist/simple-tree/core/treeNode.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNode.js +3 -3
- package/dist/simple-tree/core/treeNode.js.map +1 -1
- package/dist/simple-tree/core/treeNodeValid.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeValid.js +0 -3
- package/dist/simple-tree/core/treeNodeValid.js.map +1 -1
- package/dist/simple-tree/fieldSchema.d.ts +2 -1
- package/dist/simple-tree/fieldSchema.d.ts.map +1 -1
- package/dist/simple-tree/fieldSchema.js.map +1 -1
- package/dist/simple-tree/index.d.ts +1 -1
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +3 -2
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.js +5 -5
- package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.js +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.js +2 -2
- package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/record/recordNode.js +1 -1
- package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
- package/dist/tableSchema.d.ts +25 -32
- package/dist/tableSchema.d.ts.map +1 -1
- package/dist/tableSchema.js +10 -24
- package/dist/tableSchema.js.map +1 -1
- package/docs/.attachments/cell-ordering/C-knows-of-ABC.png +0 -0
- package/docs/.attachments/cell-ordering/C-knows-of-C.png +0 -0
- package/docs/.attachments/cell-ordering/XvsA.png +0 -0
- package/docs/.attachments/cell-ordering/compose-a-b.png +0 -0
- package/docs/.attachments/cell-ordering/compose-a-ref-p1-b-ref-p2.png +0 -0
- package/docs/.attachments/cell-ordering/compose-b-no-ref-to-ca.png +0 -0
- package/docs/.attachments/cell-ordering/rebase-ab-over-x.png +0 -0
- package/docs/.attachments/cell-ordering/rebase-b-over-x.png +0 -0
- package/docs/.attachments/cell-ordering/rebase-b2-over-x.png +0 -0
- package/docs/.attachments/cell-ordering/rebase-b2.png +0 -0
- package/docs/.attachments/cell-ordering/rebase-to-abprime.png +0 -0
- package/docs/.attachments/cell-ordering/rebase-to-bprime.png +0 -0
- package/docs/main/cell-ordering.md +638 -0
- package/lib/core/tree/visitDelta.d.ts +1 -1
- package/lib/core/tree/visitDelta.d.ts.map +1 -1
- package/lib/core/tree/visitDelta.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/index.d.ts +1 -0
- package/lib/feature-libraries/chunked-forest/index.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/index.js +1 -0
- package/lib/feature-libraries/chunked-forest/index.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +2 -4
- package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.js +4 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/lib/feature-libraries/default-schema/noChangeCodecs.d.ts +1 -1
- package/lib/feature-libraries/default-schema/noChangeCodecs.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/noChangeCodecs.js.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts +4 -0
- package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.js +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/lib/feature-libraries/index.d.ts +1 -1
- package/lib/feature-libraries/index.d.ts.map +1 -1
- package/lib/feature-libraries/index.js +1 -1
- package/lib/feature-libraries/index.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +1 -0
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.d.ts +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.js +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.js.map +1 -1
- package/lib/feature-libraries/sequence-field/types.d.ts +1 -1
- package/lib/feature-libraries/sequence-field/types.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/types.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.d.ts.map +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/shared-tree/independentView.d.ts.map +1 -1
- package/lib/shared-tree/independentView.js +2 -2
- package/lib/shared-tree/independentView.js.map +1 -1
- package/lib/shared-tree/index.d.ts +0 -1
- package/lib/shared-tree/index.d.ts.map +1 -1
- package/lib/shared-tree/index.js.map +1 -1
- package/lib/shared-tree/schematizeTree.d.ts +23 -60
- package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
- package/lib/shared-tree/schematizeTree.js +60 -150
- package/lib/shared-tree/schematizeTree.js.map +1 -1
- package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +11 -11
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/shared-tree-core/defaultResubmitMachine.d.ts +2 -1
- package/lib/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
- package/lib/shared-tree-core/defaultResubmitMachine.js.map +1 -1
- package/lib/simple-tree/core/allowedTypes.d.ts +14 -14
- package/lib/simple-tree/core/allowedTypes.d.ts.map +1 -1
- package/lib/simple-tree/core/allowedTypes.js.map +1 -1
- package/lib/simple-tree/core/treeNode.d.ts +0 -3
- package/lib/simple-tree/core/treeNode.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNode.js +3 -3
- package/lib/simple-tree/core/treeNode.js.map +1 -1
- package/lib/simple-tree/core/treeNodeValid.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeValid.js +0 -3
- package/lib/simple-tree/core/treeNodeValid.js.map +1 -1
- package/lib/simple-tree/fieldSchema.d.ts +2 -1
- package/lib/simple-tree/fieldSchema.d.ts.map +1 -1
- package/lib/simple-tree/fieldSchema.js.map +1 -1
- package/lib/simple-tree/index.d.ts +1 -1
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +1 -1
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.js +5 -5
- package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.js +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.js +2 -2
- package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/record/recordNode.js +1 -1
- package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
- package/lib/tableSchema.d.ts +25 -32
- package/lib/tableSchema.d.ts.map +1 -1
- package/lib/tableSchema.js +11 -25
- package/lib/tableSchema.js.map +1 -1
- package/package.json +21 -21
- package/src/core/tree/visitDelta.ts +3 -1
- package/src/feature-libraries/chunked-forest/index.ts +1 -0
- package/src/feature-libraries/default-schema/defaultEditBuilder.ts +12 -5
- package/src/feature-libraries/default-schema/noChangeCodecs.ts +1 -1
- package/src/feature-libraries/forest-summary/forestSummarizer.ts +1 -1
- package/src/feature-libraries/index.ts +2 -0
- package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +1 -0
- package/src/feature-libraries/sequence-field/sequenceFieldCodecV1.ts +4 -2
- package/src/feature-libraries/sequence-field/sequenceFieldCodecV2.ts +4 -2
- package/src/feature-libraries/sequence-field/sequenceFieldCodecV3.ts +4 -2
- package/src/feature-libraries/sequence-field/sequenceFieldCodecs.ts +1 -1
- package/src/feature-libraries/sequence-field/types.ts +1 -1
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/independentView.ts +6 -2
- package/src/shared-tree/index.ts +0 -2
- package/src/shared-tree/schematizeTree.ts +83 -199
- package/src/shared-tree/schematizingTreeView.ts +17 -9
- package/src/shared-tree-core/defaultResubmitMachine.ts +2 -1
- package/src/simple-tree/core/allowedTypes.ts +25 -16
- package/src/simple-tree/core/treeNode.ts +3 -3
- package/src/simple-tree/core/treeNodeValid.ts +0 -3
- package/src/simple-tree/fieldSchema.ts +2 -1
- package/src/simple-tree/index.ts +1 -3
- package/src/simple-tree/node-kinds/array/arrayNode.ts +29 -36
- package/src/simple-tree/node-kinds/map/mapNode.ts +4 -1
- package/src/simple-tree/node-kinds/object/objectNode.ts +5 -2
- package/src/simple-tree/node-kinds/record/recordNode.ts +4 -1
- 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
|
|
853
|
+
abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
|
|
854
854
|
extends TreeNodeWithArrayFeatures<
|
|
855
|
-
Iterable<InsertableTreeNodeFromImplicitAllowedTypes<
|
|
856
|
-
TreeNodeFromImplicitAllowedTypes<
|
|
855
|
+
Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>>,
|
|
856
|
+
TreeNodeFromImplicitAllowedTypes<T>
|
|
857
857
|
>
|
|
858
|
-
implements TreeArrayNode<
|
|
858
|
+
implements TreeArrayNode<T>
|
|
859
859
|
{
|
|
860
860
|
// Indexing must be provided by subclass.
|
|
861
|
-
[k: number]: TreeNodeFromImplicitAllowedTypes<
|
|
861
|
+
[k: number]: TreeNodeFromImplicitAllowedTypes<T>;
|
|
862
862
|
|
|
863
863
|
public static readonly kind = NodeKind.Array;
|
|
864
864
|
|
|
865
|
-
protected abstract get
|
|
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(
|
|
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(
|
|
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.
|
|
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<
|
|
940
|
+
this: TreeArrayNode<T>,
|
|
941
941
|
index: number,
|
|
942
|
-
): TreeNodeFromImplicitAllowedTypes<
|
|
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<
|
|
958
|
+
public insertAtStart(...value: Insertable<T>): void {
|
|
964
959
|
this.insertAt(0, ...value);
|
|
965
960
|
}
|
|
966
|
-
public insertAtEnd(...value: Insertable<
|
|
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(
|
|
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<
|
|
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
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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(
|
|
129
|
+
assert(
|
|
130
|
+
innerSchema instanceof MapNodeStoredSchema,
|
|
131
|
+
0xc1a /* Expected MapNodeStoredSchema */,
|
|
132
|
+
);
|
|
130
133
|
|
|
131
134
|
const mapTree = prepareForInsertion(
|
|
132
135
|
value,
|
package/src/tableSchema.ts
CHANGED
|
@@ -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
|
-
|
|
784
|
-
|
|
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
|
-
*
|
|
1536
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
1551
|
-
*
|
|
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
|
-
*
|
|
1565
|
-
*
|
|
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>,
|