@fluidframework/tree 2.32.0 → 2.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +53 -0
- package/api-report/tree.alpha.api.md +169 -192
- package/api-report/tree.beta.api.md +135 -164
- package/api-report/tree.legacy.alpha.api.md +138 -167
- package/api-report/tree.legacy.public.api.md +135 -164
- package/api-report/tree.public.api.md +135 -164
- package/dist/alpha.d.ts +3 -11
- package/dist/beta.d.ts +2 -11
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -2
- package/dist/core/index.js.map +1 -1
- package/dist/core/schema-stored/index.d.ts +1 -1
- package/dist/core/schema-stored/index.d.ts.map +1 -1
- package/dist/core/schema-stored/index.js +1 -2
- package/dist/core/schema-stored/index.js.map +1 -1
- package/dist/core/schema-stored/schema.d.ts +4 -11
- package/dist/core/schema-stored/schema.d.ts.map +1 -1
- package/dist/core/schema-stored/schema.js +7 -14
- package/dist/core/schema-stored/schema.js.map +1 -1
- package/dist/core/tree/anchorSet.d.ts.map +1 -1
- package/dist/core/tree/anchorSet.js +31 -24
- package/dist/core/tree/anchorSet.js.map +1 -1
- package/dist/core/tree/deltaUtil.d.ts +1 -4
- package/dist/core/tree/deltaUtil.d.ts.map +1 -1
- package/dist/core/tree/deltaUtil.js +1 -13
- package/dist/core/tree/deltaUtil.js.map +1 -1
- package/dist/core/tree/visitDelta.d.ts +6 -29
- package/dist/core/tree/visitDelta.d.ts.map +1 -1
- package/dist/core/tree/visitDelta.js +11 -50
- package/dist/core/tree/visitDelta.js.map +1 -1
- package/dist/core/tree/visitorUtils.d.ts +12 -9
- package/dist/core/tree/visitorUtils.d.ts.map +1 -1
- package/dist/core/tree/visitorUtils.js +19 -32
- package/dist/core/tree/visitorUtils.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkedForest.js +6 -11
- package/dist/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +1 -1
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts +41 -5
- package/dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/nodeShape.js +43 -26
- package/dist/feature-libraries/chunked-forest/codec/nodeShape.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +1 -1
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
- package/dist/feature-libraries/flex-tree/context.d.ts +5 -0
- package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/context.js +4 -0
- package/dist/feature-libraries/flex-tree/context.js.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +8 -0
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.js +8 -0
- package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/dist/feature-libraries/indexing/anchorTreeIndex.d.ts.map +1 -1
- package/dist/feature-libraries/indexing/anchorTreeIndex.js +15 -22
- package/dist/feature-libraries/indexing/anchorTreeIndex.js.map +1 -1
- package/dist/feature-libraries/node-identifier/nodeIdentifierManager.d.ts.map +1 -1
- package/dist/feature-libraries/node-identifier/nodeIdentifierManager.js +29 -25
- package/dist/feature-libraries/node-identifier/nodeIdentifierManager.js.map +1 -1
- package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
- package/dist/feature-libraries/object-forest/objectForest.js +1 -7
- package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
- package/dist/feature-libraries/schema-index/codec.d.ts.map +1 -1
- package/dist/feature-libraries/schema-index/codec.js +1 -1
- package/dist/feature-libraries/schema-index/codec.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -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/jsonDomainSchema.d.ts +6 -6
- package/dist/jsonDomainSchema.d.ts.map +1 -1
- package/dist/jsonDomainSchema.js.map +1 -1
- package/dist/legacy.d.ts +2 -11
- 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 +2 -11
- package/dist/serializableDomainSchema.d.ts +5 -5
- package/dist/shared-tree/checkoutFlexTreeView.d.ts +1 -0
- package/dist/shared-tree/checkoutFlexTreeView.d.ts.map +1 -1
- package/dist/shared-tree/checkoutFlexTreeView.js +4 -0
- package/dist/shared-tree/checkoutFlexTreeView.js.map +1 -1
- package/dist/shared-tree/index.d.ts +3 -2
- package/dist/shared-tree/index.d.ts.map +1 -1
- package/dist/shared-tree/index.js +2 -2
- package/dist/shared-tree/index.js.map +1 -1
- package/dist/shared-tree/sharedTree.d.ts +4 -35
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +4 -54
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/simple-tree/api/index.d.ts +2 -1
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js +3 -1
- package/dist/simple-tree/api/index.js.map +1 -1
- package/dist/simple-tree/api/schemaFactory.d.ts +28 -28
- package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactory.js +11 -11
- package/dist/simple-tree/api/schemaFactory.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +6 -7
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +24 -5
- package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactoryRecursive.js +14 -1
- package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
- package/dist/simple-tree/api/testRecursiveDomain.d.ts +10 -10
- package/dist/simple-tree/api/tree.d.ts +1 -14
- 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/typesUnsafe.d.ts +237 -220
- 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 +2 -2
- package/dist/simple-tree/arrayNode.d.ts.map +1 -1
- package/dist/simple-tree/arrayNode.js.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.d.ts +9 -2
- package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js +39 -24
- package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/dist/simple-tree/core/types.d.ts +14 -4
- package/dist/simple-tree/core/types.d.ts.map +1 -1
- package/dist/simple-tree/core/types.js +14 -4
- package/dist/simple-tree/core/types.js.map +1 -1
- package/dist/simple-tree/core/unhydratedFlexTree.d.ts +2 -1
- package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
- package/dist/simple-tree/core/unhydratedFlexTree.js +3 -0
- package/dist/simple-tree/core/unhydratedFlexTree.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/objectNode.d.ts +9 -2
- package/dist/simple-tree/objectNode.d.ts.map +1 -1
- package/dist/simple-tree/objectNode.js +3 -0
- package/dist/simple-tree/objectNode.js.map +1 -1
- package/dist/simple-tree/schemaTypes.d.ts +10 -5
- package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
- package/dist/simple-tree/schemaTypes.js +5 -2
- package/dist/simple-tree/schemaTypes.js.map +1 -1
- package/dist/tableSchema.d.ts +78 -26
- package/dist/tableSchema.d.ts.map +1 -1
- package/dist/tableSchema.js +53 -24
- package/dist/tableSchema.js.map +1 -1
- package/dist/treeFactory.d.ts +6 -12
- package/dist/treeFactory.d.ts.map +1 -1
- package/dist/treeFactory.js +56 -5
- package/dist/treeFactory.js.map +1 -1
- package/lib/alpha.d.ts +3 -11
- package/lib/beta.d.ts +2 -11
- package/lib/core/index.d.ts +1 -1
- package/lib/core/index.d.ts.map +1 -1
- package/lib/core/index.js +1 -1
- package/lib/core/index.js.map +1 -1
- package/lib/core/schema-stored/index.d.ts +1 -1
- package/lib/core/schema-stored/index.d.ts.map +1 -1
- package/lib/core/schema-stored/index.js +1 -1
- package/lib/core/schema-stored/index.js.map +1 -1
- package/lib/core/schema-stored/schema.d.ts +4 -11
- package/lib/core/schema-stored/schema.d.ts.map +1 -1
- package/lib/core/schema-stored/schema.js +6 -12
- package/lib/core/schema-stored/schema.js.map +1 -1
- package/lib/core/tree/anchorSet.d.ts.map +1 -1
- package/lib/core/tree/anchorSet.js +31 -24
- package/lib/core/tree/anchorSet.js.map +1 -1
- package/lib/core/tree/deltaUtil.d.ts +1 -4
- package/lib/core/tree/deltaUtil.d.ts.map +1 -1
- package/lib/core/tree/deltaUtil.js +0 -9
- package/lib/core/tree/deltaUtil.js.map +1 -1
- package/lib/core/tree/visitDelta.d.ts +6 -29
- package/lib/core/tree/visitDelta.d.ts.map +1 -1
- package/lib/core/tree/visitDelta.js +12 -51
- package/lib/core/tree/visitDelta.js.map +1 -1
- package/lib/core/tree/visitorUtils.d.ts +12 -9
- package/lib/core/tree/visitorUtils.d.ts.map +1 -1
- package/lib/core/tree/visitorUtils.js +19 -32
- package/lib/core/tree/visitorUtils.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkedForest.js +6 -11
- package/lib/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +1 -1
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts +41 -5
- package/lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/nodeShape.js +43 -26
- package/lib/feature-libraries/chunked-forest/codec/nodeShape.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +1 -1
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
- package/lib/feature-libraries/flex-tree/context.d.ts +5 -0
- package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/context.js +5 -1
- package/lib/feature-libraries/flex-tree/context.js.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +8 -0
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.js +8 -0
- package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/lib/feature-libraries/indexing/anchorTreeIndex.d.ts.map +1 -1
- package/lib/feature-libraries/indexing/anchorTreeIndex.js +15 -22
- package/lib/feature-libraries/indexing/anchorTreeIndex.js.map +1 -1
- package/lib/feature-libraries/node-identifier/nodeIdentifierManager.d.ts.map +1 -1
- package/lib/feature-libraries/node-identifier/nodeIdentifierManager.js +28 -24
- package/lib/feature-libraries/node-identifier/nodeIdentifierManager.js.map +1 -1
- package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
- package/lib/feature-libraries/object-forest/objectForest.js +1 -7
- package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
- package/lib/feature-libraries/schema-index/codec.d.ts.map +1 -1
- package/lib/feature-libraries/schema-index/codec.js +2 -2
- package/lib/feature-libraries/schema-index/codec.js.map +1 -1
- package/lib/index.d.ts +1 -1
- 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/jsonDomainSchema.d.ts +6 -6
- package/lib/jsonDomainSchema.d.ts.map +1 -1
- package/lib/jsonDomainSchema.js.map +1 -1
- package/lib/legacy.d.ts +2 -11
- 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 +2 -11
- package/lib/serializableDomainSchema.d.ts +5 -5
- package/lib/shared-tree/checkoutFlexTreeView.d.ts +1 -0
- package/lib/shared-tree/checkoutFlexTreeView.d.ts.map +1 -1
- package/lib/shared-tree/checkoutFlexTreeView.js +4 -0
- package/lib/shared-tree/checkoutFlexTreeView.js.map +1 -1
- package/lib/shared-tree/index.d.ts +3 -2
- package/lib/shared-tree/index.d.ts.map +1 -1
- package/lib/shared-tree/index.js +1 -1
- package/lib/shared-tree/index.js.map +1 -1
- package/lib/shared-tree/sharedTree.d.ts +4 -35
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +2 -51
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/simple-tree/api/index.d.ts +2 -1
- package/lib/simple-tree/api/index.d.ts.map +1 -1
- package/lib/simple-tree/api/index.js +1 -0
- package/lib/simple-tree/api/index.js.map +1 -1
- package/lib/simple-tree/api/schemaFactory.d.ts +28 -28
- package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactory.js +11 -11
- package/lib/simple-tree/api/schemaFactory.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +6 -7
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +24 -5
- package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactoryRecursive.js +12 -0
- package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
- package/lib/simple-tree/api/testRecursiveDomain.d.ts +10 -10
- package/lib/simple-tree/api/tree.d.ts +1 -14
- 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/typesUnsafe.d.ts +237 -220
- 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 +2 -2
- package/lib/simple-tree/arrayNode.d.ts.map +1 -1
- package/lib/simple-tree/arrayNode.js.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.d.ts +9 -2
- package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js +40 -25
- package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/lib/simple-tree/core/types.d.ts +14 -4
- package/lib/simple-tree/core/types.d.ts.map +1 -1
- package/lib/simple-tree/core/types.js +14 -4
- package/lib/simple-tree/core/types.js.map +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.d.ts +2 -1
- package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.js +3 -0
- package/lib/simple-tree/core/unhydratedFlexTree.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/objectNode.d.ts +9 -2
- package/lib/simple-tree/objectNode.d.ts.map +1 -1
- package/lib/simple-tree/objectNode.js +4 -1
- package/lib/simple-tree/objectNode.js.map +1 -1
- package/lib/simple-tree/schemaTypes.d.ts +10 -5
- package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
- package/lib/simple-tree/schemaTypes.js +5 -2
- package/lib/simple-tree/schemaTypes.js.map +1 -1
- package/lib/tableSchema.d.ts +78 -26
- package/lib/tableSchema.d.ts.map +1 -1
- package/lib/tableSchema.js +53 -24
- package/lib/tableSchema.js.map +1 -1
- package/lib/treeFactory.d.ts +6 -12
- package/lib/treeFactory.d.ts.map +1 -1
- package/lib/treeFactory.js +55 -3
- package/lib/treeFactory.js.map +1 -1
- package/lib/tsdoc-metadata.json +1 -1
- package/package.json +22 -23
- package/src/core/index.ts +0 -2
- package/src/core/schema-stored/index.ts +0 -2
- package/src/core/schema-stored/schema.ts +10 -29
- package/src/core/tree/anchorSet.ts +32 -24
- package/src/core/tree/deltaUtil.ts +1 -13
- package/src/core/tree/visitDelta.ts +24 -81
- package/src/core/tree/visitorUtils.ts +43 -53
- package/src/feature-libraries/chunked-forest/chunkedForest.ts +7 -22
- package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +1 -1
- package/src/feature-libraries/chunked-forest/codec/nodeShape.ts +45 -27
- package/src/feature-libraries/chunked-forest/codec/schemaBasedEncode.ts +1 -1
- package/src/feature-libraries/flex-tree/context.ts +11 -1
- package/src/feature-libraries/flex-tree/flexTreeTypes.ts +8 -0
- package/src/feature-libraries/indexing/anchorTreeIndex.ts +17 -28
- package/src/feature-libraries/node-identifier/nodeIdentifierManager.ts +39 -38
- package/src/feature-libraries/object-forest/objectForest.ts +1 -18
- package/src/feature-libraries/schema-index/codec.ts +1 -2
- package/src/index.ts +3 -11
- package/src/internalTypes.ts +0 -19
- package/src/jsonDomainSchema.ts +1 -3
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/checkoutFlexTreeView.ts +6 -0
- package/src/shared-tree/index.ts +8 -3
- package/src/shared-tree/sharedTree.ts +5 -133
- package/src/simple-tree/api/index.ts +2 -22
- package/src/simple-tree/api/schemaFactory.ts +40 -54
- package/src/simple-tree/api/schemaFactoryAlpha.ts +9 -14
- package/src/simple-tree/api/schemaFactoryRecursive.ts +25 -5
- package/src/simple-tree/api/tree.ts +1 -14
- package/src/simple-tree/api/typesUnsafe.ts +359 -341
- package/src/simple-tree/arrayNode.ts +2 -2
- package/src/simple-tree/core/treeNodeKernel.ts +46 -28
- package/src/simple-tree/core/types.ts +14 -4
- package/src/simple-tree/core/unhydratedFlexTree.ts +5 -1
- package/src/simple-tree/index.ts +2 -22
- package/src/simple-tree/objectNode.ts +13 -4
- package/src/simple-tree/schemaTypes.ts +11 -7
- package/src/tableSchema.ts +190 -63
- package/src/treeFactory.ts +151 -8
|
@@ -45,7 +45,7 @@ import {
|
|
|
45
45
|
} from "./core/index.js";
|
|
46
46
|
import { TreeNodeValid, type MostDerivedData } from "./treeNodeValid.js";
|
|
47
47
|
import { getUnhydratedContext } from "./createContext.js";
|
|
48
|
-
import type {
|
|
48
|
+
import type { System_Unsafe } from "./api/index.js";
|
|
49
49
|
import type {
|
|
50
50
|
ArrayNodeCustomizableSchema,
|
|
51
51
|
ArrayNodePojoEmulationSchema,
|
|
@@ -75,7 +75,7 @@ export interface ReadonlyArrayNode<out T = TreeNode | TreeLeafValue>
|
|
|
75
75
|
* @sealed @public
|
|
76
76
|
*/
|
|
77
77
|
export interface TreeArrayNode<
|
|
78
|
-
TAllowedTypes extends ImplicitAllowedTypesUnsafe = ImplicitAllowedTypes,
|
|
78
|
+
TAllowedTypes extends System_Unsafe.ImplicitAllowedTypesUnsafe = ImplicitAllowedTypes,
|
|
79
79
|
out T = [TAllowedTypes] extends [ImplicitAllowedTypes]
|
|
80
80
|
? TreeNodeFromImplicitAllowedTypes<TAllowedTypes>
|
|
81
81
|
: TreeNodeFromImplicitAllowedTypes<ImplicitAllowedTypes>,
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { assert, Lazy, fail } from "@fluidframework/core-utils/internal";
|
|
6
|
+
import { assert, Lazy, fail, debugAssert } from "@fluidframework/core-utils/internal";
|
|
7
|
+
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
7
8
|
import { createEmitter } from "@fluid-internal/client-utils";
|
|
8
9
|
import type { Listenable, Off } from "@fluidframework/core-interfaces";
|
|
9
10
|
import type { InternalTreeNode, TreeNode, Unhydrated } from "./types.js";
|
|
@@ -72,7 +73,7 @@ export function tryGetTreeNodeSchema(value: unknown): undefined | TreeNodeSchema
|
|
|
72
73
|
/** The {@link HydrationState} of a {@link TreeNodeKernel} before the kernel is hydrated */
|
|
73
74
|
interface UnhydratedState {
|
|
74
75
|
off: Off;
|
|
75
|
-
innerNode: UnhydratedFlexTreeNode;
|
|
76
|
+
readonly innerNode: UnhydratedFlexTreeNode;
|
|
76
77
|
}
|
|
77
78
|
|
|
78
79
|
/** The {@link HydrationState} of a {@link TreeNodeKernel} after the kernel is hydrated */
|
|
@@ -80,9 +81,9 @@ interface HydratedState {
|
|
|
80
81
|
/** The flex node for this kernel (lazy - undefined if it has not yet been demanded) */
|
|
81
82
|
innerNode?: FlexTreeNode;
|
|
82
83
|
/** The {@link AnchorNode} that this node is associated with. */
|
|
83
|
-
anchorNode: AnchorNode;
|
|
84
|
+
readonly anchorNode: AnchorNode;
|
|
84
85
|
/** All {@link Off | event deregistration functions} that should be run when the kernel is disposed. */
|
|
85
|
-
offAnchorNode: Set<Off>;
|
|
86
|
+
readonly offAnchorNode: Set<Off>;
|
|
86
87
|
}
|
|
87
88
|
|
|
88
89
|
/** State within a {@link TreeNodeKernel} that is related to the hydration process */
|
|
@@ -287,35 +288,46 @@ export class TreeNodeKernel {
|
|
|
287
288
|
*
|
|
288
289
|
* For hydrated nodes it returns a FlexTreeNode backed by the forest.
|
|
289
290
|
* Note that for "marinated" nodes, this FlexTreeNode exists and returns it: it does not return the MapTreeNode which is the current InnerNode.
|
|
291
|
+
*
|
|
292
|
+
* If `allowDeleted` is false, this will throw a UsageError if the node is deleted.
|
|
290
293
|
*/
|
|
291
|
-
public getOrCreateInnerNode(
|
|
294
|
+
public getOrCreateInnerNode(allowDeleted = false): InnerNode {
|
|
292
295
|
if (!isHydrated(this.#hydrationState)) {
|
|
296
|
+
debugAssert(
|
|
297
|
+
() =>
|
|
298
|
+
this.#hydrationState.innerNode?.context.isDisposed() === false ||
|
|
299
|
+
"Unhydrated node should never be disposed",
|
|
300
|
+
);
|
|
293
301
|
return this.#hydrationState.innerNode; // Unhydrated case
|
|
294
302
|
}
|
|
295
303
|
|
|
296
|
-
if (this.#hydrationState.innerNode
|
|
297
|
-
|
|
304
|
+
if (this.#hydrationState.innerNode === undefined) {
|
|
305
|
+
// Marinated case -> cooked
|
|
306
|
+
const anchorNode = this.#hydrationState.anchorNode;
|
|
307
|
+
// The proxy is bound to an anchor node, but it may or may not have an actual flex node yet
|
|
308
|
+
const flexNode = anchorNode.slots.get(flexTreeSlot);
|
|
309
|
+
if (flexNode !== undefined) {
|
|
310
|
+
// If the flex node already exists, use it...
|
|
311
|
+
this.#hydrationState.innerNode = flexNode;
|
|
312
|
+
} else {
|
|
313
|
+
// ...otherwise, the flex node must be created
|
|
314
|
+
const context =
|
|
315
|
+
anchorNode.anchorSet.slots.get(ContextSlot) ?? fail(0xb41 /* missing context */);
|
|
316
|
+
const cursor = context.checkout.forest.allocateCursor("getFlexNode");
|
|
317
|
+
context.checkout.forest.moveCursorToPath(anchorNode, cursor);
|
|
318
|
+
this.#hydrationState.innerNode = makeTree(context, cursor);
|
|
319
|
+
cursor.free();
|
|
320
|
+
// Calling this is a performance improvement, however, do this only after demand to avoid momentarily having no anchors to anchorNode
|
|
321
|
+
anchorForgetters?.get(this.node)?.();
|
|
322
|
+
if (!allowDeleted) {
|
|
323
|
+
assertFlexTreeEntityNotFreed(this.#hydrationState.innerNode);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
298
326
|
}
|
|
299
327
|
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
const flexNode = anchorNode.slots.get(flexTreeSlot);
|
|
304
|
-
if (flexNode !== undefined) {
|
|
305
|
-
// If the flex node already exists, use it...
|
|
306
|
-
this.#hydrationState.innerNode = flexNode;
|
|
307
|
-
} else {
|
|
308
|
-
// ...otherwise, the flex node must be created
|
|
309
|
-
const context =
|
|
310
|
-
anchorNode.anchorSet.slots.get(ContextSlot) ?? fail(0xb41 /* missing context */);
|
|
311
|
-
const cursor = context.checkout.forest.allocateCursor("getFlexNode");
|
|
312
|
-
context.checkout.forest.moveCursorToPath(anchorNode, cursor);
|
|
313
|
-
this.#hydrationState.innerNode = makeTree(context, cursor);
|
|
314
|
-
cursor.free();
|
|
315
|
-
// Calling this is a performance improvement, however, do this only after demand to avoid momentarily having no anchors to anchorNode
|
|
316
|
-
anchorForgetters?.get(this.node)?.();
|
|
317
|
-
if (!allowFreed) {
|
|
318
|
-
assertFlexTreeEntityNotFreed(this.#hydrationState.innerNode);
|
|
328
|
+
if (!allowDeleted) {
|
|
329
|
+
if (this.#hydrationState.innerNode.context.isDisposed()) {
|
|
330
|
+
throw new UsageError("Cannot access a Deleted node.");
|
|
319
331
|
}
|
|
320
332
|
}
|
|
321
333
|
|
|
@@ -417,11 +429,15 @@ export const unhydratedFlexTreeNodeToTreeNode =
|
|
|
417
429
|
*/
|
|
418
430
|
export const proxySlot = anchorSlot<TreeNode>();
|
|
419
431
|
|
|
432
|
+
/**
|
|
433
|
+
* Dispose a TreeNode (if any) for an existing anchor without disposing the anchor.
|
|
434
|
+
*/
|
|
420
435
|
export function tryDisposeTreeNode(anchorNode: AnchorNode): void {
|
|
421
436
|
const treeNode = anchorNode.slots.get(proxySlot);
|
|
422
437
|
if (treeNode !== undefined) {
|
|
423
438
|
const kernel = getKernel(treeNode);
|
|
424
439
|
kernel.dispose();
|
|
440
|
+
anchorNode.slots.delete(proxySlot);
|
|
425
441
|
}
|
|
426
442
|
}
|
|
427
443
|
|
|
@@ -454,10 +470,12 @@ export function getSimpleContextFromInnerNode(innerNode: InnerNode): Context {
|
|
|
454
470
|
*
|
|
455
471
|
* For hydrated nodes it returns a FlexTreeNode backed by the forest.
|
|
456
472
|
* Note that for "marinated" nodes, this FlexTreeNode exists and returns it: it does not return the MapTreeNode which is the current InnerNode.
|
|
473
|
+
*
|
|
474
|
+
* If `allowDeleted` is false, this will throw a UsageError if the node is deleted.
|
|
457
475
|
*/
|
|
458
|
-
export function getOrCreateInnerNode(treeNode: TreeNode,
|
|
476
|
+
export function getOrCreateInnerNode(treeNode: TreeNode, allowDeleted = false): InnerNode {
|
|
459
477
|
const kernel = getKernel(treeNode);
|
|
460
|
-
return kernel.getOrCreateInnerNode(
|
|
478
|
+
return kernel.getOrCreateInnerNode(allowDeleted);
|
|
461
479
|
}
|
|
462
480
|
|
|
463
481
|
/**
|
|
@@ -113,13 +113,23 @@ export interface TreeChangeEvents {
|
|
|
113
113
|
* A non-{@link NodeKind.Leaf|leaf} SharedTree node. Includes objects, arrays, and maps.
|
|
114
114
|
*
|
|
115
115
|
* @remarks
|
|
116
|
-
* Base type which all nodes
|
|
116
|
+
* Base type which all nodes extend.
|
|
117
117
|
*
|
|
118
|
-
* This can be used as a type to indicate/document values which should be tree nodes.
|
|
118
|
+
* This type can be used as a type to indicate/document values which should be tree nodes.
|
|
119
119
|
* Runtime use of this class object (for example when used with `instanceof` or extending it), is not currently supported.
|
|
120
120
|
*
|
|
121
|
-
*
|
|
122
|
-
*
|
|
121
|
+
* There are three ways to get instances of TreeNode:
|
|
122
|
+
*
|
|
123
|
+
* 1. From a {@link TreeView} loading nodes from an existing document, or creating local copies of nodes inserted by a remote collaborator.
|
|
124
|
+
* This case provides an {@link InternalTreeNode} to the constructor: subclasses must not modify how the constructor handles this case.
|
|
125
|
+
* 2. Explicit construction of {@link Unhydrated} nodes using either {@link TreeNodeSchemaClass} as a constructor or {@link TreeNodeSchemaNonClass|TreeNodeSchemaNonClass.create}.
|
|
126
|
+
* Either way the {@link TreeNodeSchema} produced must be produced using a {@link SchemaFactory}.
|
|
127
|
+
* 3. Implicit construction: Several APIs which logically require an unhydrated TreeNode also allow passing in a value which could be used to explicitly construct the node instead.
|
|
128
|
+
* These APIs internally call the constructor with the provided value, so it's really just a special case of the above option.
|
|
129
|
+
* Note that when constructing nodes, sometimes implicit construction is not allowed
|
|
130
|
+
* (either at runtime due to ambiguous types or at compile time due to TypeScript limitations):
|
|
131
|
+
* in such cases, explicit construction must be used.
|
|
132
|
+
*
|
|
123
133
|
* @privateRemarks
|
|
124
134
|
* This is a class not an interface to enable stricter type checking (see {@link TreeNode.#brand})
|
|
125
135
|
* and some runtime enforcement of schema class policy (see the the validation in the constructor).
|
|
@@ -73,7 +73,7 @@ interface LocationInField {
|
|
|
73
73
|
*
|
|
74
74
|
* Create a `UnhydratedFlexTreeNode` by calling {@link getOrCreate}.
|
|
75
75
|
*/
|
|
76
|
-
export class UnhydratedFlexTreeNode implements
|
|
76
|
+
export class UnhydratedFlexTreeNode implements FlexTreeNode {
|
|
77
77
|
public get schema(): TreeNodeSchemaIdentifier {
|
|
78
78
|
return this.mapTree.type;
|
|
79
79
|
}
|
|
@@ -277,6 +277,10 @@ export class UnhydratedContext implements FlexTreeContext {
|
|
|
277
277
|
public readonly schema: TreeStoredSchema,
|
|
278
278
|
) {}
|
|
279
279
|
|
|
280
|
+
public isDisposed(): boolean {
|
|
281
|
+
return false;
|
|
282
|
+
}
|
|
283
|
+
|
|
280
284
|
public isHydrated(): this is FlexTreeHydratedContext {
|
|
281
285
|
return false;
|
|
282
286
|
}
|
package/src/simple-tree/index.ts
CHANGED
|
@@ -83,28 +83,7 @@ export {
|
|
|
83
83
|
comparePersistedSchemaInternal,
|
|
84
84
|
ViewSchema,
|
|
85
85
|
type Unenforced,
|
|
86
|
-
type
|
|
87
|
-
type ObjectFromSchemaRecordUnsafe,
|
|
88
|
-
type TreeObjectNodeUnsafe,
|
|
89
|
-
type TreeFieldFromImplicitFieldUnsafe,
|
|
90
|
-
type TreeNodeFromImplicitAllowedTypesUnsafe,
|
|
91
|
-
type FieldSchemaUnsafe,
|
|
92
|
-
type InsertableTreeNodeFromImplicitAllowedTypesUnsafe,
|
|
93
|
-
type TreeArrayNodeUnsafe,
|
|
94
|
-
type TreeMapNodeUnsafe,
|
|
95
|
-
type InsertableObjectFromSchemaRecordUnsafe,
|
|
96
|
-
type InsertableTreeFieldFromImplicitFieldUnsafe,
|
|
97
|
-
type InsertableTypedNodeUnsafe,
|
|
98
|
-
type NodeBuilderDataUnsafe,
|
|
99
|
-
type NodeFromSchemaUnsafe,
|
|
100
|
-
type ReadonlyMapInlined,
|
|
101
|
-
type TreeNodeSchemaClassUnsafe,
|
|
102
|
-
type TreeNodeSchemaUnsafe,
|
|
103
|
-
type AllowedTypesUnsafe,
|
|
104
|
-
type ImplicitAllowedTypesUnsafe,
|
|
105
|
-
type ImplicitFieldSchemaUnsafe,
|
|
106
|
-
type TreeNodeSchemaNonClassUnsafe,
|
|
107
|
-
type InsertableTreeNodeFromAllowedTypesUnsafe,
|
|
86
|
+
type System_Unsafe,
|
|
108
87
|
type ArrayNodeCustomizableSchemaUnsafe,
|
|
109
88
|
type MapNodeCustomizableSchemaUnsafe,
|
|
110
89
|
type TreeViewAlpha,
|
|
@@ -138,6 +117,7 @@ export {
|
|
|
138
117
|
replaceHandles,
|
|
139
118
|
replaceVerboseTreeHandles,
|
|
140
119
|
type HandleConverter,
|
|
120
|
+
allowUnused,
|
|
141
121
|
type FieldSchemaAlphaUnsafe,
|
|
142
122
|
type TreeSchema,
|
|
143
123
|
} from "./api/index.js";
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { assert, Lazy, fail } from "@fluidframework/core-utils/internal";
|
|
6
|
+
import { assert, Lazy, fail, debugAssert } from "@fluidframework/core-utils/internal";
|
|
7
7
|
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
8
8
|
|
|
9
9
|
import type { FieldKey, SchemaPolicy } from "../core/index.js";
|
|
@@ -56,6 +56,10 @@ import type { SimpleObjectFieldSchema } from "./simpleSchema.js";
|
|
|
56
56
|
|
|
57
57
|
/**
|
|
58
58
|
* Generates the properties for an ObjectNode from its field schema object.
|
|
59
|
+
* @remarks
|
|
60
|
+
* Due to {@link https://github.com/microsoft/TypeScript/issues/43826}, we can't enable implicit construction of {@link TreeNode|TreeNodes} for setters.
|
|
61
|
+
* Therefore code assigning to these fields must explicitly construct nodes using the schema's constructor or create method,
|
|
62
|
+
* or using some other method like {@link TreeAlpha.create}.
|
|
59
63
|
* @system @public
|
|
60
64
|
*/
|
|
61
65
|
export type ObjectFromSchemaRecord<T extends RestrictiveStringRecord<ImplicitFieldSchema>> =
|
|
@@ -69,14 +73,17 @@ export type ObjectFromSchemaRecord<T extends RestrictiveStringRecord<ImplicitFie
|
|
|
69
73
|
};
|
|
70
74
|
|
|
71
75
|
/**
|
|
72
|
-
* A {@link TreeNode} which
|
|
76
|
+
* A {@link TreeNode} which models a JavaScript object.
|
|
73
77
|
* @remarks
|
|
74
|
-
* Object nodes consist of a type which specifies which {@link TreeNodeSchema} they use (see {@link TreeNodeApi.schema}
|
|
78
|
+
* Object nodes consist of a type which specifies which {@link TreeNodeSchema} they use (see {@link TreeNodeApi.schema} and {@link SchemaFactory.object}),
|
|
79
|
+
* and a collections of fields, each with a distinct `key` and its own {@link FieldSchema} defining what can be placed under that key.
|
|
75
80
|
*
|
|
76
81
|
* All fields on an object node are exposed as own properties with string keys.
|
|
77
82
|
* Non-empty fields are enumerable and empty optional fields are non-enumerable own properties with the value `undefined`.
|
|
78
83
|
* No other own `own` or `enumerable` properties are included on object nodes unless the user of the node manually adds custom session only state.
|
|
79
84
|
* This allows a majority of general purpose JavaScript object processing operations (like `for...in`, `Reflect.ownKeys()` and `Object.entries()`) to enumerate all the children.
|
|
85
|
+
*
|
|
86
|
+
* The API for fields is defined by {@link ObjectFromSchemaRecord}.
|
|
80
87
|
* @public
|
|
81
88
|
*/
|
|
82
89
|
export type TreeObjectNode<
|
|
@@ -174,6 +181,8 @@ function createFlexKeyMapping(fields: Record<string, ImplicitFieldSchema>): Simp
|
|
|
174
181
|
}
|
|
175
182
|
|
|
176
183
|
/**
|
|
184
|
+
* Creates a proxy handler for the given schema.
|
|
185
|
+
*
|
|
177
186
|
* @param allowAdditionalProperties - If true, setting of unexpected properties will be forwarded to the target object.
|
|
178
187
|
* Otherwise setting of unexpected properties will error.
|
|
179
188
|
* TODO: consider implementing this using `Object.preventExtension` instead.
|
|
@@ -196,9 +205,9 @@ function createProxyHandler(
|
|
|
196
205
|
const handler: ProxyHandler<TreeNode> = {
|
|
197
206
|
get(target, propertyKey, proxy): unknown {
|
|
198
207
|
const fieldInfo = schema.flexKeyMap.get(propertyKey);
|
|
199
|
-
|
|
200
208
|
if (fieldInfo !== undefined) {
|
|
201
209
|
const flexNode = getOrCreateInnerNode(proxy);
|
|
210
|
+
debugAssert(() => !flexNode.context.isDisposed() || "FlexTreeNode is disposed");
|
|
202
211
|
const field = flexNode.tryGetField(fieldInfo.storedKey);
|
|
203
212
|
if (field !== undefined) {
|
|
204
213
|
return getTreeNodeForField(field);
|
|
@@ -81,9 +81,10 @@ export function isTreeNodeSchemaClass<
|
|
|
81
81
|
export type AllowedTypes = readonly LazyItem<TreeNodeSchema>[];
|
|
82
82
|
|
|
83
83
|
/**
|
|
84
|
-
* Kind of a field on
|
|
84
|
+
* Kind of a field on an {@link TreeObjectNode}.
|
|
85
85
|
* @remarks
|
|
86
86
|
* More kinds may be added over time, so do not assume this is an exhaustive set.
|
|
87
|
+
* See {@link FieldSchema} for where these are used, and {@link SchemaFactory} for how to create schema which use them.
|
|
87
88
|
* @public
|
|
88
89
|
*/
|
|
89
90
|
export enum FieldKind {
|
|
@@ -100,9 +101,11 @@ export enum FieldKind {
|
|
|
100
101
|
*/
|
|
101
102
|
Required,
|
|
102
103
|
/**
|
|
103
|
-
* A special field used for node
|
|
104
|
+
* A special readonly field used for node identifier strings.
|
|
104
105
|
* @remarks
|
|
105
106
|
* Only allows exactly one child.
|
|
107
|
+
*
|
|
108
|
+
* See {@link SchemaFactory.identifier} for more details.
|
|
106
109
|
*/
|
|
107
110
|
Identifier,
|
|
108
111
|
}
|
|
@@ -883,13 +886,14 @@ export type InsertableTreeNodeFromImplicitAllowedTypes<TSchema extends ImplicitA
|
|
|
883
886
|
* @typeparam TList - AllowedTypes to process
|
|
884
887
|
* @system @public
|
|
885
888
|
*/
|
|
886
|
-
export type InsertableTreeNodeFromAllowedTypes<TList extends AllowedTypes> =
|
|
887
|
-
|
|
889
|
+
export type InsertableTreeNodeFromAllowedTypes<TList extends AllowedTypes> = [TList] extends [
|
|
890
|
+
readonly [
|
|
888
891
|
LazyItem<infer TSchema extends TreeNodeSchema>,
|
|
889
892
|
...infer Rest extends AllowedTypes,
|
|
890
|
-
]
|
|
891
|
-
|
|
892
|
-
|
|
893
|
+
],
|
|
894
|
+
]
|
|
895
|
+
? InsertableTypedNode<TSchema> | InsertableTreeNodeFromAllowedTypes<Rest>
|
|
896
|
+
: never;
|
|
893
897
|
|
|
894
898
|
/**
|
|
895
899
|
* Takes in `TreeNodeSchema[]` and returns a TypedNode union.
|