@fluidframework/tree 2.4.0-299707 → 2.5.0-302463
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/.vscode/settings.json +11 -1
- package/CHANGELOG.md +192 -0
- package/api-report/tree.alpha.api.md +150 -52
- package/api-report/tree.beta.api.md +85 -39
- package/api-report/tree.legacy.alpha.api.md +83 -38
- package/api-report/tree.legacy.public.api.md +83 -38
- package/api-report/tree.public.api.md +83 -38
- package/dist/alpha.d.ts +17 -2
- package/dist/beta.d.ts +6 -0
- package/dist/events/interop.d.ts +1 -7
- package/dist/events/interop.d.ts.map +1 -1
- package/dist/events/interop.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/basicChunk.js +1 -1
- package/dist/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/uniformChunk.js +1 -1
- package/dist/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.js +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js +3 -3
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/dist/feature-libraries/object-forest/objectForest.js +1 -1
- package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
- package/dist/feature-libraries/treeCursorUtils.js +2 -2
- package/dist/feature-libraries/treeCursorUtils.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/dist/internalTypes.d.ts +1 -1
- package/dist/internalTypes.d.ts.map +1 -1
- package/dist/internalTypes.js.map +1 -1
- package/dist/legacy.d.ts +6 -0
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/public.d.ts +6 -0
- package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +1 -1
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree/sharedTree.d.ts +1 -1
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +1 -1
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/treeApi.d.ts +6 -6
- package/dist/shared-tree/treeApi.d.ts.map +1 -1
- package/dist/shared-tree/treeApi.js.map +1 -1
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +2 -0
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree-core/branch.js +1 -1
- package/dist/shared-tree-core/branch.js.map +1 -1
- package/dist/shared-tree-core/editManager.d.ts.map +1 -1
- package/dist/shared-tree-core/editManager.js +12 -7
- package/dist/shared-tree-core/editManager.js.map +1 -1
- package/dist/simple-tree/api/create.d.ts +3 -3
- package/dist/simple-tree/api/create.d.ts.map +1 -1
- package/dist/simple-tree/api/create.js.map +1 -1
- package/dist/simple-tree/api/customTree.js +7 -7
- package/dist/simple-tree/api/customTree.js.map +1 -1
- package/dist/simple-tree/api/index.d.ts +3 -3
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js +1 -2
- package/dist/simple-tree/api/index.js.map +1 -1
- package/dist/simple-tree/api/schemaCreationUtilities.d.ts +33 -25
- package/dist/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaCreationUtilities.js +31 -21
- package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
- package/dist/simple-tree/api/schemaFactory.d.ts +5 -1
- package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactory.js +4 -0
- package/dist/simple-tree/api/schemaFactory.js.map +1 -1
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.js +3 -3
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
- package/dist/simple-tree/api/tree.d.ts +13 -4
- package/dist/simple-tree/api/tree.d.ts.map +1 -1
- package/dist/simple-tree/api/tree.js.map +1 -1
- package/dist/simple-tree/api/treeApiBeta.d.ts +14 -2
- package/dist/simple-tree/api/treeApiBeta.d.ts.map +1 -1
- package/dist/simple-tree/api/treeApiBeta.js +23 -8
- package/dist/simple-tree/api/treeApiBeta.js.map +1 -1
- package/dist/simple-tree/api/typesUnsafe.d.ts +69 -17
- package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -1
- package/dist/simple-tree/api/typesUnsafe.js.map +1 -1
- package/dist/simple-tree/arrayNode.d.ts +14 -3
- package/dist/simple-tree/arrayNode.d.ts.map +1 -1
- package/dist/simple-tree/arrayNode.js.map +1 -1
- package/dist/simple-tree/core/schemaCaching.js +1 -1
- package/dist/simple-tree/core/schemaCaching.js.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.d.ts +6 -1
- package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js +7 -1
- package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.d.ts +10 -6
- package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/dist/simple-tree/core/unhydratedFlexTree.js +1 -1
- package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
- package/dist/simple-tree/core/withType.d.ts +3 -1
- package/dist/simple-tree/core/withType.d.ts.map +1 -1
- package/dist/simple-tree/core/withType.js.map +1 -1
- package/dist/simple-tree/index.d.ts +4 -4
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +1 -2
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/mapNode.d.ts.map +1 -1
- package/dist/simple-tree/mapNode.js +3 -0
- package/dist/simple-tree/mapNode.js.map +1 -1
- package/dist/simple-tree/objectNode.d.ts +4 -2
- package/dist/simple-tree/objectNode.d.ts.map +1 -1
- package/dist/simple-tree/objectNode.js.map +1 -1
- package/dist/simple-tree/schemaTypes.d.ts +168 -14
- package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
- package/dist/simple-tree/schemaTypes.js +6 -1
- package/dist/simple-tree/schemaTypes.js.map +1 -1
- package/dist/simple-tree/toFlexSchema.js +2 -2
- package/dist/simple-tree/toFlexSchema.js.map +1 -1
- package/dist/simple-tree/toMapTree.d.ts +4 -2
- package/dist/simple-tree/toMapTree.d.ts.map +1 -1
- package/dist/simple-tree/toMapTree.js.map +1 -1
- package/dist/util/index.d.ts +2 -1
- package/dist/util/index.d.ts.map +1 -1
- package/dist/util/index.js +3 -1
- package/dist/util/index.js.map +1 -1
- package/dist/util/typeUtils.d.ts +61 -0
- package/dist/util/typeUtils.d.ts.map +1 -1
- package/dist/util/typeUtils.js +27 -0
- package/dist/util/typeUtils.js.map +1 -1
- package/lib/alpha.d.ts +17 -2
- package/lib/beta.d.ts +6 -0
- package/lib/events/interop.d.ts +1 -7
- package/lib/events/interop.d.ts.map +1 -1
- package/lib/events/interop.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/basicChunk.js +1 -1
- package/lib/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/uniformChunk.js +1 -1
- package/lib/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.js +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js +3 -3
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/lib/feature-libraries/object-forest/objectForest.js +1 -1
- package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
- package/lib/feature-libraries/treeCursorUtils.js +2 -2
- package/lib/feature-libraries/treeCursorUtils.js.map +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/internalTypes.d.ts +1 -1
- package/lib/internalTypes.d.ts.map +1 -1
- package/lib/internalTypes.js.map +1 -1
- package/lib/legacy.d.ts +6 -0
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/public.d.ts +6 -0
- package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +1 -1
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/shared-tree/sharedTree.d.ts +1 -1
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +1 -1
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/treeApi.d.ts +6 -6
- package/lib/shared-tree/treeApi.d.ts.map +1 -1
- package/lib/shared-tree/treeApi.js.map +1 -1
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +2 -0
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree-core/branch.js +1 -1
- package/lib/shared-tree-core/branch.js.map +1 -1
- package/lib/shared-tree-core/editManager.d.ts.map +1 -1
- package/lib/shared-tree-core/editManager.js +12 -7
- package/lib/shared-tree-core/editManager.js.map +1 -1
- package/lib/simple-tree/api/create.d.ts +3 -3
- package/lib/simple-tree/api/create.d.ts.map +1 -1
- package/lib/simple-tree/api/create.js.map +1 -1
- package/lib/simple-tree/api/customTree.js +7 -7
- package/lib/simple-tree/api/customTree.js.map +1 -1
- package/lib/simple-tree/api/index.d.ts +3 -3
- package/lib/simple-tree/api/index.d.ts.map +1 -1
- package/lib/simple-tree/api/index.js +1 -1
- package/lib/simple-tree/api/index.js.map +1 -1
- package/lib/simple-tree/api/schemaCreationUtilities.d.ts +33 -25
- package/lib/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaCreationUtilities.js +30 -19
- package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
- package/lib/simple-tree/api/schemaFactory.d.ts +5 -1
- package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactory.js +4 -0
- package/lib/simple-tree/api/schemaFactory.js.map +1 -1
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.js +3 -3
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
- package/lib/simple-tree/api/tree.d.ts +13 -4
- package/lib/simple-tree/api/tree.d.ts.map +1 -1
- package/lib/simple-tree/api/tree.js.map +1 -1
- package/lib/simple-tree/api/treeApiBeta.d.ts +14 -2
- package/lib/simple-tree/api/treeApiBeta.d.ts.map +1 -1
- package/lib/simple-tree/api/treeApiBeta.js +23 -8
- package/lib/simple-tree/api/treeApiBeta.js.map +1 -1
- package/lib/simple-tree/api/typesUnsafe.d.ts +69 -17
- package/lib/simple-tree/api/typesUnsafe.d.ts.map +1 -1
- package/lib/simple-tree/api/typesUnsafe.js.map +1 -1
- package/lib/simple-tree/arrayNode.d.ts +14 -3
- package/lib/simple-tree/arrayNode.d.ts.map +1 -1
- package/lib/simple-tree/arrayNode.js.map +1 -1
- package/lib/simple-tree/core/schemaCaching.js +1 -1
- package/lib/simple-tree/core/schemaCaching.js.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.d.ts +6 -1
- package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js +7 -1
- package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.d.ts +10 -6
- package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.js +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
- package/lib/simple-tree/core/withType.d.ts +3 -1
- package/lib/simple-tree/core/withType.d.ts.map +1 -1
- package/lib/simple-tree/core/withType.js.map +1 -1
- package/lib/simple-tree/index.d.ts +4 -4
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +2 -2
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/mapNode.d.ts.map +1 -1
- package/lib/simple-tree/mapNode.js +3 -0
- package/lib/simple-tree/mapNode.js.map +1 -1
- package/lib/simple-tree/objectNode.d.ts +4 -2
- package/lib/simple-tree/objectNode.d.ts.map +1 -1
- package/lib/simple-tree/objectNode.js.map +1 -1
- package/lib/simple-tree/schemaTypes.d.ts +168 -14
- package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
- package/lib/simple-tree/schemaTypes.js +6 -1
- package/lib/simple-tree/schemaTypes.js.map +1 -1
- package/lib/simple-tree/toFlexSchema.js +2 -2
- package/lib/simple-tree/toFlexSchema.js.map +1 -1
- package/lib/simple-tree/toMapTree.d.ts +4 -2
- package/lib/simple-tree/toMapTree.d.ts.map +1 -1
- package/lib/simple-tree/toMapTree.js.map +1 -1
- package/lib/util/index.d.ts +2 -1
- package/lib/util/index.d.ts.map +1 -1
- package/lib/util/index.js +1 -0
- package/lib/util/index.js.map +1 -1
- package/lib/util/typeUtils.d.ts +61 -0
- package/lib/util/typeUtils.d.ts.map +1 -1
- package/lib/util/typeUtils.js +25 -1
- package/lib/util/typeUtils.js.map +1 -1
- package/package.json +48 -32
- package/src/events/interop.ts +1 -12
- package/src/feature-libraries/chunked-forest/basicChunk.ts +1 -1
- package/src/feature-libraries/chunked-forest/uniformChunk.ts +1 -1
- package/src/feature-libraries/flex-tree/lazyField.ts +1 -1
- package/src/feature-libraries/modular-schema/modularChangeFamily.ts +9 -3
- package/src/feature-libraries/object-forest/objectForest.ts +1 -1
- package/src/feature-libraries/treeCursorUtils.ts +2 -2
- package/src/index.ts +16 -1
- package/src/internalTypes.ts +4 -0
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/schematizingTreeView.ts +7 -3
- package/src/shared-tree/sharedTree.ts +5 -3
- package/src/shared-tree/treeApi.ts +19 -9
- package/src/shared-tree/treeCheckout.ts +2 -0
- package/src/shared-tree-core/branch.ts +1 -1
- package/src/shared-tree-core/editManager.ts +16 -7
- package/src/simple-tree/api/create.ts +12 -7
- package/src/simple-tree/api/customTree.ts +7 -7
- package/src/simple-tree/api/index.ts +6 -1
- package/src/simple-tree/api/schemaCreationUtilities.ts +58 -35
- package/src/simple-tree/api/schemaFactory.ts +4 -0
- package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +3 -3
- package/src/simple-tree/api/tree.ts +27 -4
- package/src/simple-tree/api/treeApiBeta.ts +69 -3
- package/src/simple-tree/api/typesUnsafe.ts +126 -30
- package/src/simple-tree/arrayNode.ts +34 -14
- package/src/simple-tree/core/schemaCaching.ts +1 -1
- package/src/simple-tree/core/treeNodeKernel.ts +10 -2
- package/src/simple-tree/core/treeNodeSchema.ts +11 -6
- package/src/simple-tree/core/unhydratedFlexTree.ts +1 -1
- package/src/simple-tree/core/withType.ts +10 -1
- package/src/simple-tree/index.ts +19 -2
- package/src/simple-tree/mapNode.ts +6 -3
- package/src/simple-tree/objectNode.ts +5 -3
- package/src/simple-tree/schemaTypes.ts +215 -23
- package/src/simple-tree/toFlexSchema.ts +2 -2
- package/src/simple-tree/toMapTree.ts +4 -1
- package/src/util/index.ts +6 -0
- package/src/util/typeUtils.ts +87 -0
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
normalizeAllowedTypes,
|
|
19
19
|
type ImplicitAllowedTypes,
|
|
20
20
|
type InsertableTreeNodeFromImplicitAllowedTypes,
|
|
21
|
+
type TreeLeafValue,
|
|
21
22
|
type TreeNodeFromImplicitAllowedTypes,
|
|
22
23
|
} from "./schemaTypes.js";
|
|
23
24
|
import {
|
|
@@ -34,6 +35,7 @@ import {
|
|
|
34
35
|
type TreeNodeSchemaBoth,
|
|
35
36
|
getSimpleNodeSchemaFromInnerNode,
|
|
36
37
|
getOrCreateInnerNode,
|
|
38
|
+
type TreeNodeSchemaClass,
|
|
37
39
|
} from "./core/index.js";
|
|
38
40
|
import { type InsertableContent, mapTreeFromNodeData } from "./toMapTree.js";
|
|
39
41
|
import { fail } from "../util/index.js";
|
|
@@ -45,6 +47,19 @@ import {
|
|
|
45
47
|
import { TreeNodeValid, type MostDerivedData } from "./treeNodeValid.js";
|
|
46
48
|
import { getUnhydratedContext } from "./createContext.js";
|
|
47
49
|
|
|
50
|
+
/**
|
|
51
|
+
* A covariant base type for {@link (TreeArrayNode:interface)}.
|
|
52
|
+
*
|
|
53
|
+
* This provides the readonly subset of TreeArrayNode functionality, and is used as the source interface for moves since that needs to be covariant.
|
|
54
|
+
* @privateRemarks
|
|
55
|
+
* Ideally this would just include `TreeNode, WithType<string, NodeKind.Array>` in the extends list but https://github.com/microsoft/TypeScript/issues/16936 prevents that from compiling.
|
|
56
|
+
* As a workaround around for this TypeScript limitation, the conflicting type intersection is wrapped in `Awaited` (which has no effect on the type in this case) which allows it to compile.
|
|
57
|
+
* @system @sealed @public
|
|
58
|
+
*/
|
|
59
|
+
export interface ReadonlyArrayNode<out T = TreeNode | TreeLeafValue>
|
|
60
|
+
extends ReadonlyArray<T>,
|
|
61
|
+
Awaited<TreeNode & WithType<string, NodeKind.Array>> {}
|
|
62
|
+
|
|
48
63
|
/**
|
|
49
64
|
* A generic array type, used to defined types like {@link (TreeArrayNode:interface)}.
|
|
50
65
|
*
|
|
@@ -53,9 +68,8 @@ import { getUnhydratedContext } from "./createContext.js";
|
|
|
53
68
|
*
|
|
54
69
|
* @system @sealed @public
|
|
55
70
|
*/
|
|
56
|
-
export interface TreeArrayNodeBase<out T, in TNew, in TMoveFrom>
|
|
57
|
-
extends
|
|
58
|
-
TreeNode {
|
|
71
|
+
export interface TreeArrayNodeBase<out T, in TNew, in TMoveFrom = ReadonlyArrayNode>
|
|
72
|
+
extends ReadonlyArrayNode<T> {
|
|
59
73
|
/**
|
|
60
74
|
* Inserts new item(s) at a specified location.
|
|
61
75
|
* @param index - The index at which to insert `value`.
|
|
@@ -366,8 +380,7 @@ export interface TreeArrayNode<
|
|
|
366
380
|
TAllowedTypes extends ImplicitAllowedTypes = ImplicitAllowedTypes,
|
|
367
381
|
> extends TreeArrayNodeBase<
|
|
368
382
|
TreeNodeFromImplicitAllowedTypes<TAllowedTypes>,
|
|
369
|
-
InsertableTreeNodeFromImplicitAllowedTypes<TAllowedTypes
|
|
370
|
-
TreeArrayNode
|
|
383
|
+
InsertableTreeNodeFromImplicitAllowedTypes<TAllowedTypes>
|
|
371
384
|
> {}
|
|
372
385
|
|
|
373
386
|
/**
|
|
@@ -417,9 +430,7 @@ export class IterableTreeArrayContent<T> implements Iterable<T> {
|
|
|
417
430
|
/**
|
|
418
431
|
* Given a array node proxy, returns its underlying LazySequence field.
|
|
419
432
|
*/
|
|
420
|
-
function getSequenceField
|
|
421
|
-
arrayNode: TreeArrayNode<TSimpleType>,
|
|
422
|
-
): FlexTreeSequenceField {
|
|
433
|
+
function getSequenceField(arrayNode: ReadonlyArrayNode): FlexTreeSequenceField {
|
|
423
434
|
return getOrCreateInnerNode(arrayNode).getBoxed(EmptyKey) as FlexTreeSequenceField;
|
|
424
435
|
}
|
|
425
436
|
|
|
@@ -799,6 +810,11 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
|
|
|
799
810
|
protected abstract get simpleSchema(): T;
|
|
800
811
|
protected abstract get allowedTypes(): ReadonlySet<TreeNodeSchema>;
|
|
801
812
|
|
|
813
|
+
public abstract override get [typeSchemaSymbol](): TreeNodeSchemaClass<
|
|
814
|
+
string,
|
|
815
|
+
NodeKind.Array
|
|
816
|
+
>;
|
|
817
|
+
|
|
802
818
|
public constructor(
|
|
803
819
|
input: Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>> | InternalTreeNode,
|
|
804
820
|
) {
|
|
@@ -901,13 +917,13 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
|
|
|
901
917
|
}
|
|
902
918
|
field.editor.remove(removeStart, removeEnd - removeStart);
|
|
903
919
|
}
|
|
904
|
-
public moveToStart(sourceIndex: number, source?:
|
|
920
|
+
public moveToStart(sourceIndex: number, source?: ReadonlyArrayNode): void {
|
|
905
921
|
const sourceArray = source ?? this;
|
|
906
922
|
const sourceField = getSequenceField(sourceArray);
|
|
907
923
|
validateIndex(sourceIndex, sourceField, "moveToStart");
|
|
908
924
|
this.moveRangeToIndex(0, sourceIndex, sourceIndex + 1, source);
|
|
909
925
|
}
|
|
910
|
-
public moveToEnd(sourceIndex: number, source?:
|
|
926
|
+
public moveToEnd(sourceIndex: number, source?: ReadonlyArrayNode): void {
|
|
911
927
|
const sourceArray = source ?? this;
|
|
912
928
|
const sourceField = getSequenceField(sourceArray);
|
|
913
929
|
validateIndex(sourceIndex, sourceField, "moveToEnd");
|
|
@@ -916,7 +932,7 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
|
|
|
916
932
|
public moveToIndex(
|
|
917
933
|
destinationGap: number,
|
|
918
934
|
sourceIndex: number,
|
|
919
|
-
source?:
|
|
935
|
+
source?: ReadonlyArrayNode,
|
|
920
936
|
): void {
|
|
921
937
|
const sourceArray = source ?? this;
|
|
922
938
|
const sourceField = getSequenceField(sourceArray);
|
|
@@ -928,7 +944,7 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
|
|
|
928
944
|
public moveRangeToStart(
|
|
929
945
|
sourceStart: number,
|
|
930
946
|
sourceEnd: number,
|
|
931
|
-
source?:
|
|
947
|
+
source?: ReadonlyArrayNode,
|
|
932
948
|
): void {
|
|
933
949
|
validateIndexRange(
|
|
934
950
|
sourceStart,
|
|
@@ -938,7 +954,11 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
|
|
|
938
954
|
);
|
|
939
955
|
this.moveRangeToIndex(0, sourceStart, sourceEnd, source);
|
|
940
956
|
}
|
|
941
|
-
public moveRangeToEnd(
|
|
957
|
+
public moveRangeToEnd(
|
|
958
|
+
sourceStart: number,
|
|
959
|
+
sourceEnd: number,
|
|
960
|
+
source?: ReadonlyArrayNode,
|
|
961
|
+
): void {
|
|
942
962
|
validateIndexRange(
|
|
943
963
|
sourceStart,
|
|
944
964
|
sourceEnd,
|
|
@@ -951,7 +971,7 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
|
|
|
951
971
|
destinationGap: number,
|
|
952
972
|
sourceStart: number,
|
|
953
973
|
sourceEnd: number,
|
|
954
|
-
source?:
|
|
974
|
+
source?: ReadonlyArrayNode,
|
|
955
975
|
): void {
|
|
956
976
|
const destinationField = getSequenceField(this);
|
|
957
977
|
const destinationSchema = this.allowedTypes;
|
|
@@ -29,7 +29,7 @@ export function getSimpleContextFromInnerNode(innerNode: InnerNode): Context {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
const context = innerNode.anchorNode.anchorSet.slots.get(SimpleContextSlot);
|
|
32
|
-
assert(context !== undefined,
|
|
32
|
+
assert(context !== undefined, 0xa55 /* missing simple tree context */);
|
|
33
33
|
|
|
34
34
|
return context;
|
|
35
35
|
}
|
|
@@ -29,7 +29,7 @@ import { fail } from "../../util/index.js";
|
|
|
29
29
|
// TODO: decide how to deal with dependencies on flex-tree implementation.
|
|
30
30
|
// eslint-disable-next-line import/no-internal-modules
|
|
31
31
|
import { makeTree } from "../../feature-libraries/flex-tree/lazyNode.js";
|
|
32
|
-
import { SimpleContextSlot, type Context } from "./context.js";
|
|
32
|
+
import { SimpleContextSlot, type Context, type HydratedContext } from "./context.js";
|
|
33
33
|
import { UnhydratedFlexTreeNode } from "./unhydratedFlexTree.js";
|
|
34
34
|
|
|
35
35
|
const treeNodeToKernel = new WeakMap<TreeNode, TreeNodeKernel>();
|
|
@@ -267,6 +267,14 @@ export class TreeNodeKernel implements Listenable<KernelEvents> {
|
|
|
267
267
|
// TODO: go to the context and remove myself from withAnchors
|
|
268
268
|
}
|
|
269
269
|
|
|
270
|
+
public isHydrated(): this is { anchorNode: AnchorNode; context: HydratedContext } {
|
|
271
|
+
return isHydrated(this.#hydrationState);
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
public get anchorNode(): AnchorNode | undefined {
|
|
275
|
+
return isHydrated(this.#hydrationState) ? this.#hydrationState.anchorNode : undefined;
|
|
276
|
+
}
|
|
277
|
+
|
|
270
278
|
/**
|
|
271
279
|
* Retrieves the flex node associated with the given target via {@link setInnerNode}.
|
|
272
280
|
* @remarks
|
|
@@ -421,7 +429,7 @@ export function tryDisposeTreeNode(anchorNode: AnchorNode): void {
|
|
|
421
429
|
export function getTreeNodeSchemaFromHydratedFlexNode(flexNode: FlexTreeNode): TreeNodeSchema {
|
|
422
430
|
assert(
|
|
423
431
|
flexNode.context.isHydrated(),
|
|
424
|
-
|
|
432
|
+
0xa56 /* getTreeNodeSchemaFromHydratedFlexNode only allows hydrated flex tree nodes */,
|
|
425
433
|
);
|
|
426
434
|
|
|
427
435
|
const context =
|
|
@@ -3,10 +3,12 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import type {
|
|
6
|
+
import type { TreeLeafValue } from "../schemaTypes.js";
|
|
7
|
+
import type { InternalTreeNode, TreeNode, Unhydrated } from "./types.js";
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
|
-
* Schema for a
|
|
10
|
+
* Schema for a {@link TreeNode} or {@link TreeLeafValue}.
|
|
11
|
+
*
|
|
10
12
|
* @typeParam Name - The full (including scope) name/identifier for the schema.
|
|
11
13
|
* @typeParam Kind - Which kind of node this schema is for.
|
|
12
14
|
* @typeParam TNode - API for nodes that use this schema.
|
|
@@ -14,12 +16,14 @@ import type { InternalTreeNode, Unhydrated } from "./types.js";
|
|
|
14
16
|
* @typeParam Info - Data used when defining this schema.
|
|
15
17
|
* @remarks
|
|
16
18
|
* Captures the schema both as runtime data and compile time type information.
|
|
19
|
+
* Use {@link SchemaFactory} to define schema.
|
|
20
|
+
* Use `Tree.schema(value)` to lookup the schema for a {@link TreeNode} or {@link TreeLeafValue}.
|
|
17
21
|
* @sealed @public
|
|
18
22
|
*/
|
|
19
23
|
export type TreeNodeSchema<
|
|
20
24
|
Name extends string = string,
|
|
21
25
|
Kind extends NodeKind = NodeKind,
|
|
22
|
-
TNode =
|
|
26
|
+
TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue,
|
|
23
27
|
TBuild = never,
|
|
24
28
|
ImplicitlyConstructable extends boolean = boolean,
|
|
25
29
|
Info = unknown,
|
|
@@ -38,7 +42,7 @@ export type TreeNodeSchema<
|
|
|
38
42
|
export interface TreeNodeSchemaNonClass<
|
|
39
43
|
out Name extends string = string,
|
|
40
44
|
out Kind extends NodeKind = NodeKind,
|
|
41
|
-
out TNode =
|
|
45
|
+
out TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue,
|
|
42
46
|
in TInsertable = never,
|
|
43
47
|
out ImplicitlyConstructable extends boolean = boolean,
|
|
44
48
|
out Info = unknown,
|
|
@@ -94,7 +98,8 @@ export interface TreeNodeSchemaNonClass<
|
|
|
94
98
|
export interface TreeNodeSchemaClass<
|
|
95
99
|
out Name extends string = string,
|
|
96
100
|
out Kind extends NodeKind = NodeKind,
|
|
97
|
-
|
|
101
|
+
// TODO: maybe this can be more specific (exclude leaves)
|
|
102
|
+
out TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue,
|
|
98
103
|
in TInsertable = never,
|
|
99
104
|
out ImplicitlyConstructable extends boolean = boolean,
|
|
100
105
|
out Info = unknown,
|
|
@@ -115,7 +120,7 @@ export interface TreeNodeSchemaClass<
|
|
|
115
120
|
export type TreeNodeSchemaBoth<
|
|
116
121
|
Name extends string = string,
|
|
117
122
|
Kind extends NodeKind = NodeKind,
|
|
118
|
-
TNode =
|
|
123
|
+
TNode extends TreeNode = TreeNode,
|
|
119
124
|
TInsertable = never,
|
|
120
125
|
ImplicitlyConstructable extends boolean = boolean,
|
|
121
126
|
Info = unknown,
|
|
@@ -445,7 +445,7 @@ class EagerMapTreeRequiredField
|
|
|
445
445
|
// This cannot use ?? since null is a legal value here.
|
|
446
446
|
assert(
|
|
447
447
|
super.content !== undefined,
|
|
448
|
-
|
|
448
|
+
0xa57 /* Expected EagerMapTree required field to have a value */,
|
|
449
449
|
);
|
|
450
450
|
return super.content;
|
|
451
451
|
}
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
+
import type { TreeLeafValue } from "../schemaTypes.js";
|
|
6
7
|
import type { NodeKind, TreeNodeSchemaClass } from "./treeNodeSchema.js";
|
|
8
|
+
import type { TreeNode } from "./types.js";
|
|
7
9
|
|
|
8
10
|
/**
|
|
9
11
|
* The type of a {@link TreeNode}.
|
|
@@ -87,5 +89,12 @@ export interface WithType<
|
|
|
87
89
|
/**
|
|
88
90
|
* Type symbol, marking a type in a way to increase type safety via strong type checking.
|
|
89
91
|
*/
|
|
90
|
-
get [typeSchemaSymbol](): TreeNodeSchemaClass<
|
|
92
|
+
get [typeSchemaSymbol](): TreeNodeSchemaClass<
|
|
93
|
+
TName,
|
|
94
|
+
TKind,
|
|
95
|
+
TreeNode | TreeLeafValue,
|
|
96
|
+
never,
|
|
97
|
+
boolean,
|
|
98
|
+
TInfo
|
|
99
|
+
>;
|
|
91
100
|
}
|
package/src/simple-tree/index.ts
CHANGED
|
@@ -40,7 +40,6 @@ export {
|
|
|
40
40
|
adaptEnum,
|
|
41
41
|
enumFromStrings,
|
|
42
42
|
singletonSchema,
|
|
43
|
-
typedObjectValues,
|
|
44
43
|
test_RecursiveObject,
|
|
45
44
|
test_RecursiveObject_base,
|
|
46
45
|
test_RecursiveObjectPojoMode,
|
|
@@ -92,6 +91,12 @@ export {
|
|
|
92
91
|
type NodeBuilderDataUnsafe,
|
|
93
92
|
type NodeFromSchemaUnsafe,
|
|
94
93
|
type ReadonlyMapInlined,
|
|
94
|
+
type TreeNodeSchemaClassUnsafe,
|
|
95
|
+
type TreeNodeSchemaUnsafe,
|
|
96
|
+
type AllowedTypesUnsafe,
|
|
97
|
+
type TreeNodeSchemaNonClassUnsafe,
|
|
98
|
+
type InsertableTreeNodeFromAllowedTypesUnsafe,
|
|
99
|
+
type TreeViewAlpha,
|
|
95
100
|
} from "./api/index.js";
|
|
96
101
|
export {
|
|
97
102
|
type NodeFromSchema,
|
|
@@ -113,6 +118,12 @@ export {
|
|
|
113
118
|
normalizeFieldSchema,
|
|
114
119
|
type ApplyKind,
|
|
115
120
|
type FieldSchemaMetadata,
|
|
121
|
+
type InsertableField,
|
|
122
|
+
type Insertable,
|
|
123
|
+
type UnsafeUnknownSchema,
|
|
124
|
+
type ApplyKindInput,
|
|
125
|
+
type InsertableTreeNodeFromAllowedTypes,
|
|
126
|
+
type Input,
|
|
116
127
|
} from "./schemaTypes.js";
|
|
117
128
|
export {
|
|
118
129
|
getTreeNodeForField,
|
|
@@ -122,6 +133,7 @@ export {
|
|
|
122
133
|
TreeArrayNode,
|
|
123
134
|
IterableTreeArrayContent,
|
|
124
135
|
type TreeArrayNodeBase,
|
|
136
|
+
type ReadonlyArrayNode,
|
|
125
137
|
} from "./arrayNode.js";
|
|
126
138
|
export {
|
|
127
139
|
type FieldHasDefault,
|
|
@@ -131,7 +143,12 @@ export {
|
|
|
131
143
|
setField,
|
|
132
144
|
} from "./objectNode.js";
|
|
133
145
|
export type { TreeMapNode, MapNodeInsertableData } from "./mapNode.js";
|
|
134
|
-
export {
|
|
146
|
+
export {
|
|
147
|
+
mapTreeFromNodeData,
|
|
148
|
+
type InsertableContent,
|
|
149
|
+
type FactoryContent,
|
|
150
|
+
type FactoryContentObject,
|
|
151
|
+
} from "./toMapTree.js";
|
|
135
152
|
export { toStoredSchema, getStoredSchema } from "./toFlexSchema.js";
|
|
136
153
|
export {
|
|
137
154
|
numberSchema,
|
|
@@ -128,7 +128,10 @@ export interface TreeMapNode<T extends ImplicitAllowedTypes = ImplicitAllowedTyp
|
|
|
128
128
|
): void;
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
-
|
|
131
|
+
// TreeMapNode is invariant over schema type, so for this handler to work with all schema, the only possible type for the schema is `any`.
|
|
132
|
+
// This is not ideal, but no alternatives are possible.
|
|
133
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
134
|
+
const handler: ProxyHandler<TreeMapNode<any>> = {
|
|
132
135
|
getPrototypeOf: () => {
|
|
133
136
|
return Map.prototype;
|
|
134
137
|
},
|
|
@@ -177,7 +180,7 @@ abstract class CustomMapNodeBase<const T extends ImplicitAllowedTypes> extends T
|
|
|
177
180
|
const node = this.innerNode;
|
|
178
181
|
return node.keys();
|
|
179
182
|
}
|
|
180
|
-
public set(key: string, value: InsertableTreeNodeFromImplicitAllowedTypes<T>):
|
|
183
|
+
public set(key: string, value: InsertableTreeNodeFromImplicitAllowedTypes<T>): this {
|
|
181
184
|
const kernel = getKernel(this);
|
|
182
185
|
const node = this.innerNode;
|
|
183
186
|
const mapTree = mapTreeFromNodeData(
|
|
@@ -244,7 +247,7 @@ export function mapSchema<
|
|
|
244
247
|
flexNode: FlexTreeNode,
|
|
245
248
|
): TreeNodeValid<T2> {
|
|
246
249
|
if (useMapPrototype) {
|
|
247
|
-
return new Proxy<Schema>(instance as Schema, handler);
|
|
250
|
+
return new Proxy<Schema>(instance as Schema, handler as ProxyHandler<Schema>);
|
|
248
251
|
}
|
|
249
252
|
return instance;
|
|
250
253
|
}
|
|
@@ -98,6 +98,8 @@ export type FieldHasDefault<T extends ImplicitFieldSchema> = T extends FieldSche
|
|
|
98
98
|
*
|
|
99
99
|
* 3. Union of 1 and 2.
|
|
100
100
|
*
|
|
101
|
+
* @see {@link Input}
|
|
102
|
+
*
|
|
101
103
|
* @privateRemarks TODO: consider separating these cases into different types.
|
|
102
104
|
*
|
|
103
105
|
* @system @public
|
|
@@ -107,13 +109,13 @@ export type InsertableObjectFromSchemaRecord<
|
|
|
107
109
|
> = FlattenKeys<
|
|
108
110
|
{
|
|
109
111
|
readonly [Property in keyof T]?: InsertableTreeFieldFromImplicitField<
|
|
110
|
-
T[Property
|
|
112
|
+
T[Property & string]
|
|
111
113
|
>;
|
|
112
114
|
} & {
|
|
113
115
|
// Field does not have a known default, make it required:
|
|
114
|
-
readonly [Property in keyof T as FieldHasDefault<T[Property
|
|
116
|
+
readonly [Property in keyof T as FieldHasDefault<T[Property & string]> extends false
|
|
115
117
|
? Property
|
|
116
|
-
: never]: InsertableTreeFieldFromImplicitField<T[Property
|
|
118
|
+
: never]: InsertableTreeFieldFromImplicitField<T[Property & string]>;
|
|
117
119
|
}
|
|
118
120
|
>;
|
|
119
121
|
|