@fluidframework/tree 2.23.0-323641 → 2.23.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/.vscode/extensions.json +1 -0
- package/CHANGELOG.md +47 -0
- package/api-report/tree.alpha.api.md +31 -0
- package/dist/alpha.d.ts +1 -0
- package/dist/codec/codec.js +3 -3
- package/dist/codec/codec.js.map +1 -1
- package/dist/codec/discriminatedUnions.d.ts.map +1 -1
- package/dist/codec/discriminatedUnions.js +1 -1
- package/dist/codec/discriminatedUnions.js.map +1 -1
- package/dist/core/schema-stored/schema.d.ts.map +1 -1
- package/dist/core/schema-stored/schema.js +3 -3
- 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 +5 -4
- package/dist/core/tree/anchorSet.js.map +1 -1
- package/dist/core/tree/treeTextFormat.js +1 -1
- package/dist/core/tree/treeTextFormat.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/basicChunk.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/basicChunk.js +11 -8
- package/dist/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkTree.js +2 -2
- package/dist/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkedForest.js +3 -3
- package/dist/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js +2 -2
- package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js +4 -3
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/nodeShape.js +2 -2
- package/dist/feature-libraries/chunked-forest/codec/nodeShape.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncoding.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncoding.js +3 -3
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncoding.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/emptyChunk.js +14 -14
- package/dist/feature-libraries/chunked-forest/emptyChunk.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/uniformChunk.js +6 -4
- package/dist/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.js +1 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
- package/dist/feature-libraries/default-schema/schemaChecker.js +1 -1
- package/dist/feature-libraries/default-schema/schemaChecker.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.js +4 -3
- package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyNode.js +5 -4
- package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
- package/dist/feature-libraries/indexing/anchorTreeIndex.d.ts.map +1 -1
- package/dist/feature-libraries/indexing/anchorTreeIndex.js +1 -1
- package/dist/feature-libraries/indexing/anchorTreeIndex.js.map +1 -1
- package/dist/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/comparison.js +6 -4
- package/dist/feature-libraries/modular-schema/comparison.js.map +1 -1
- package/dist/feature-libraries/modular-schema/isNeverTree.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/isNeverTree.js +4 -4
- package/dist/feature-libraries/modular-schema/isNeverTree.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +4 -4
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js +5 -5
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/dist/feature-libraries/node-key/mockNodeKeyManager.js +1 -1
- package/dist/feature-libraries/node-key/mockNodeKeyManager.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/schema-index/codec.js +1 -1
- package/dist/feature-libraries/schema-index/codec.js.map +1 -1
- package/dist/feature-libraries/sequence-field/compose.js +1 -1
- package/dist/feature-libraries/sequence-field/compose.js.map +1 -1
- package/dist/feature-libraries/sequence-field/invert.js +1 -1
- package/dist/feature-libraries/sequence-field/invert.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.js +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
- package/dist/feature-libraries/sequence-field/utils.js +1 -1
- package/dist/feature-libraries/sequence-field/utils.js.map +1 -1
- package/dist/feature-libraries/treeCursorUtils.d.ts.map +1 -1
- package/dist/feature-libraries/treeCursorUtils.js +6 -4
- package/dist/feature-libraries/treeCursorUtils.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/jsonDomainSchema.d.ts +113 -0
- package/dist/jsonDomainSchema.d.ts.map +1 -0
- package/dist/jsonDomainSchema.js +101 -0
- package/dist/jsonDomainSchema.js.map +1 -0
- 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/serializableDomainSchema.d.ts +108 -0
- package/dist/serializableDomainSchema.d.ts.map +1 -0
- package/dist/serializableDomainSchema.js +90 -0
- package/dist/serializableDomainSchema.js.map +1 -0
- package/dist/shared-tree/index.d.ts +1 -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.js +1 -1
- package/dist/shared-tree/schematizeTree.js.map +1 -1
- package/dist/shared-tree/sharedTree.d.ts +35 -19
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +14 -17
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/sharedTreeChangeFamily.js +1 -1
- package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
- package/dist/shared-tree/treeApiAlpha.d.ts.map +1 -1
- package/dist/shared-tree/treeApiAlpha.js +4 -4
- package/dist/shared-tree/treeApiAlpha.js.map +1 -1
- package/dist/shared-tree/treeCheckout.js +1 -1
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree-core/editManager.d.ts.map +1 -1
- package/dist/shared-tree-core/editManager.js +8 -7
- package/dist/shared-tree-core/editManager.js.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.d.ts +1 -2
- package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.js +2 -2
- package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/dist/simple-tree/api/customTree.js +3 -3
- package/dist/simple-tree/api/customTree.js.map +1 -1
- package/dist/simple-tree/api/schemaCreationUtilities.js +1 -1
- package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +1 -1
- package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
- package/dist/simple-tree/api/simpleTreeIndex.js +3 -3
- package/dist/simple-tree/api/simpleTreeIndex.js.map +1 -1
- package/dist/simple-tree/api/tree.js +1 -1
- package/dist/simple-tree/api/tree.js.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.js +9 -5
- package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
- package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
- package/dist/simple-tree/api/verboseTree.js +5 -4
- package/dist/simple-tree/api/verboseTree.js.map +1 -1
- package/dist/simple-tree/api/view.js +1 -1
- package/dist/simple-tree/api/view.js.map +1 -1
- package/dist/simple-tree/arrayNode.js +2 -2
- package/dist/simple-tree/arrayNode.js.map +1 -1
- package/dist/simple-tree/core/getOrCreateNode.d.ts.map +1 -1
- package/dist/simple-tree/core/getOrCreateNode.js +1 -1
- package/dist/simple-tree/core/getOrCreateNode.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.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js +6 -6
- package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
- package/dist/simple-tree/core/unhydratedFlexTree.js +5 -5
- package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
- package/dist/simple-tree/objectNode.js +2 -2
- package/dist/simple-tree/objectNode.js.map +1 -1
- package/dist/simple-tree/proxies.js +1 -1
- package/dist/simple-tree/proxies.js.map +1 -1
- package/dist/simple-tree/toMapTree.js +3 -3
- package/dist/simple-tree/toMapTree.js.map +1 -1
- package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
- package/dist/simple-tree/toStoredSchema.js +2 -1
- package/dist/simple-tree/toStoredSchema.js.map +1 -1
- package/dist/simple-tree/treeNodeValid.d.ts.map +1 -1
- package/dist/simple-tree/treeNodeValid.js +5 -2
- package/dist/simple-tree/treeNodeValid.js.map +1 -1
- package/dist/util/idAllocator.js +1 -1
- package/dist/util/idAllocator.js.map +1 -1
- package/dist/util/index.d.ts +2 -2
- package/dist/util/index.d.ts.map +1 -1
- package/dist/util/index.js +4 -4
- package/dist/util/index.js.map +1 -1
- package/dist/util/nestedMap.d.ts +2 -10
- package/dist/util/nestedMap.d.ts.map +1 -1
- package/dist/util/nestedMap.js +9 -28
- package/dist/util/nestedMap.js.map +1 -1
- package/dist/util/utils.d.ts +7 -6
- package/dist/util/utils.d.ts.map +1 -1
- package/dist/util/utils.js +18 -13
- package/dist/util/utils.js.map +1 -1
- package/lib/alpha.d.ts +1 -0
- package/lib/codec/codec.js +3 -3
- package/lib/codec/codec.js.map +1 -1
- package/lib/codec/discriminatedUnions.d.ts.map +1 -1
- package/lib/codec/discriminatedUnions.js +1 -1
- package/lib/codec/discriminatedUnions.js.map +1 -1
- package/lib/core/schema-stored/schema.d.ts.map +1 -1
- package/lib/core/schema-stored/schema.js +3 -3
- 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 +5 -4
- package/lib/core/tree/anchorSet.js.map +1 -1
- package/lib/core/tree/treeTextFormat.js +1 -1
- package/lib/core/tree/treeTextFormat.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/basicChunk.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/basicChunk.js +11 -8
- package/lib/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkTree.js +2 -2
- package/lib/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkedForest.js +3 -3
- package/lib/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js +2 -2
- package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js +4 -3
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/nodeShape.js +2 -2
- package/lib/feature-libraries/chunked-forest/codec/nodeShape.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncoding.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncoding.js +3 -3
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncoding.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/emptyChunk.js +14 -14
- package/lib/feature-libraries/chunked-forest/emptyChunk.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/uniformChunk.js +6 -4
- package/lib/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.js +1 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
- package/lib/feature-libraries/default-schema/schemaChecker.js +1 -1
- package/lib/feature-libraries/default-schema/schemaChecker.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.js +4 -3
- package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyNode.js +5 -4
- package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
- package/lib/feature-libraries/indexing/anchorTreeIndex.d.ts.map +1 -1
- package/lib/feature-libraries/indexing/anchorTreeIndex.js +1 -1
- package/lib/feature-libraries/indexing/anchorTreeIndex.js.map +1 -1
- package/lib/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/comparison.js +6 -4
- package/lib/feature-libraries/modular-schema/comparison.js.map +1 -1
- package/lib/feature-libraries/modular-schema/isNeverTree.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/isNeverTree.js +4 -4
- package/lib/feature-libraries/modular-schema/isNeverTree.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +4 -4
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js +6 -6
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/lib/feature-libraries/node-key/mockNodeKeyManager.js +1 -1
- package/lib/feature-libraries/node-key/mockNodeKeyManager.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/schema-index/codec.js +1 -1
- package/lib/feature-libraries/schema-index/codec.js.map +1 -1
- package/lib/feature-libraries/sequence-field/compose.js +1 -1
- package/lib/feature-libraries/sequence-field/compose.js.map +1 -1
- package/lib/feature-libraries/sequence-field/invert.js +1 -1
- package/lib/feature-libraries/sequence-field/invert.js.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.js +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
- package/lib/feature-libraries/sequence-field/utils.js +1 -1
- package/lib/feature-libraries/sequence-field/utils.js.map +1 -1
- package/lib/feature-libraries/treeCursorUtils.d.ts.map +1 -1
- package/lib/feature-libraries/treeCursorUtils.js +6 -4
- package/lib/feature-libraries/treeCursorUtils.js.map +1 -1
- package/lib/index.d.ts +3 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -1
- package/lib/jsonDomainSchema.d.ts +113 -0
- package/lib/jsonDomainSchema.d.ts.map +1 -0
- package/lib/jsonDomainSchema.js +98 -0
- package/lib/jsonDomainSchema.js.map +1 -0
- 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/serializableDomainSchema.d.ts +108 -0
- package/lib/serializableDomainSchema.d.ts.map +1 -0
- package/lib/serializableDomainSchema.js +87 -0
- package/lib/serializableDomainSchema.js.map +1 -0
- package/lib/shared-tree/index.d.ts +1 -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.js +1 -1
- package/lib/shared-tree/schematizeTree.js.map +1 -1
- package/lib/shared-tree/sharedTree.d.ts +35 -19
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +15 -18
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/sharedTreeChangeFamily.js +1 -1
- package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
- package/lib/shared-tree/treeApiAlpha.d.ts.map +1 -1
- package/lib/shared-tree/treeApiAlpha.js +4 -4
- package/lib/shared-tree/treeApiAlpha.js.map +1 -1
- package/lib/shared-tree/treeCheckout.js +1 -1
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree-core/editManager.d.ts.map +1 -1
- package/lib/shared-tree-core/editManager.js +8 -7
- package/lib/shared-tree-core/editManager.js.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.d.ts +1 -2
- package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.js +2 -2
- package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/lib/simple-tree/api/customTree.js +3 -3
- package/lib/simple-tree/api/customTree.js.map +1 -1
- package/lib/simple-tree/api/schemaCreationUtilities.js +1 -1
- package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +1 -1
- package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
- package/lib/simple-tree/api/simpleTreeIndex.js +3 -3
- package/lib/simple-tree/api/simpleTreeIndex.js.map +1 -1
- package/lib/simple-tree/api/tree.js +1 -1
- package/lib/simple-tree/api/tree.js.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.js +9 -5
- package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
- package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
- package/lib/simple-tree/api/verboseTree.js +5 -4
- package/lib/simple-tree/api/verboseTree.js.map +1 -1
- package/lib/simple-tree/api/view.js +1 -1
- package/lib/simple-tree/api/view.js.map +1 -1
- package/lib/simple-tree/arrayNode.js +2 -2
- package/lib/simple-tree/arrayNode.js.map +1 -1
- package/lib/simple-tree/core/getOrCreateNode.d.ts.map +1 -1
- package/lib/simple-tree/core/getOrCreateNode.js +1 -1
- package/lib/simple-tree/core/getOrCreateNode.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.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js +6 -6
- package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.js +5 -5
- package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
- package/lib/simple-tree/objectNode.js +2 -2
- package/lib/simple-tree/objectNode.js.map +1 -1
- package/lib/simple-tree/proxies.js +1 -1
- package/lib/simple-tree/proxies.js.map +1 -1
- package/lib/simple-tree/toMapTree.js +3 -3
- package/lib/simple-tree/toMapTree.js.map +1 -1
- package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
- package/lib/simple-tree/toStoredSchema.js +2 -1
- package/lib/simple-tree/toStoredSchema.js.map +1 -1
- package/lib/simple-tree/treeNodeValid.d.ts.map +1 -1
- package/lib/simple-tree/treeNodeValid.js +5 -2
- package/lib/simple-tree/treeNodeValid.js.map +1 -1
- package/lib/util/idAllocator.js +1 -1
- package/lib/util/idAllocator.js.map +1 -1
- package/lib/util/index.d.ts +2 -2
- package/lib/util/index.d.ts.map +1 -1
- package/lib/util/index.js +2 -2
- package/lib/util/index.js.map +1 -1
- package/lib/util/nestedMap.d.ts +2 -10
- package/lib/util/nestedMap.d.ts.map +1 -1
- package/lib/util/nestedMap.js +5 -23
- package/lib/util/nestedMap.js.map +1 -1
- package/lib/util/utils.d.ts +7 -6
- package/lib/util/utils.d.ts.map +1 -1
- package/lib/util/utils.js +15 -11
- package/lib/util/utils.js.map +1 -1
- package/package.json +22 -22
- package/src/codec/codec.ts +3 -3
- package/src/codec/discriminatedUnions.ts +2 -1
- package/src/core/schema-stored/schema.ts +5 -3
- package/src/core/tree/anchorSet.ts +5 -4
- package/src/core/tree/treeTextFormat.ts +1 -1
- package/src/feature-libraries/chunked-forest/basicChunk.ts +11 -8
- package/src/feature-libraries/chunked-forest/chunkTree.ts +2 -2
- package/src/feature-libraries/chunked-forest/chunkedForest.ts +3 -3
- package/src/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.ts +2 -2
- package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +4 -3
- package/src/feature-libraries/chunked-forest/codec/nodeShape.ts +2 -2
- package/src/feature-libraries/chunked-forest/codec/schemaBasedEncoding.ts +4 -3
- package/src/feature-libraries/chunked-forest/emptyChunk.ts +14 -14
- package/src/feature-libraries/chunked-forest/uniformChunk.ts +6 -4
- package/src/feature-libraries/default-schema/defaultFieldKinds.ts +1 -1
- package/src/feature-libraries/default-schema/schemaChecker.ts +1 -1
- package/src/feature-libraries/flex-tree/lazyField.ts +6 -8
- package/src/feature-libraries/flex-tree/lazyNode.ts +6 -4
- package/src/feature-libraries/indexing/anchorTreeIndex.ts +2 -1
- package/src/feature-libraries/modular-schema/comparison.ts +7 -5
- package/src/feature-libraries/modular-schema/isNeverTree.ts +6 -4
- package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +4 -4
- package/src/feature-libraries/modular-schema/modularChangeFamily.ts +7 -6
- package/src/feature-libraries/node-key/mockNodeKeyManager.ts +1 -1
- package/src/feature-libraries/object-forest/objectForest.ts +1 -1
- package/src/feature-libraries/schema-index/codec.ts +1 -1
- package/src/feature-libraries/sequence-field/compose.ts +1 -1
- package/src/feature-libraries/sequence-field/invert.ts +1 -1
- package/src/feature-libraries/sequence-field/sequenceFieldCodecV1.ts +1 -1
- package/src/feature-libraries/sequence-field/sequenceFieldCodecV2.ts +1 -1
- package/src/feature-libraries/sequence-field/utils.ts +1 -1
- package/src/feature-libraries/treeCursorUtils.ts +6 -4
- package/src/index.ts +3 -1
- package/src/jsonDomainSchema.ts +129 -0
- package/src/packageVersion.ts +1 -1
- package/src/serializableDomainSchema.ts +121 -0
- package/src/shared-tree/index.ts +0 -1
- package/src/shared-tree/schematizeTree.ts +1 -1
- package/src/shared-tree/sharedTree.ts +26 -41
- package/src/shared-tree/sharedTreeChangeFamily.ts +1 -1
- package/src/shared-tree/treeApiAlpha.ts +12 -4
- package/src/shared-tree/treeCheckout.ts +1 -1
- package/src/shared-tree-core/editManager.ts +8 -7
- package/src/shared-tree-core/sharedTreeCore.ts +6 -4
- package/src/simple-tree/api/customTree.ts +3 -3
- package/src/simple-tree/api/schemaCreationUtilities.ts +1 -1
- package/src/simple-tree/api/schemaFactoryRecursive.ts +1 -1
- package/src/simple-tree/api/simpleTreeIndex.ts +3 -3
- package/src/simple-tree/api/tree.ts +1 -1
- package/src/simple-tree/api/treeNodeApi.ts +11 -6
- package/src/simple-tree/api/verboseTree.ts +8 -4
- package/src/simple-tree/api/view.ts +1 -1
- package/src/simple-tree/arrayNode.ts +2 -2
- package/src/simple-tree/core/getOrCreateNode.ts +2 -1
- package/src/simple-tree/core/schemaCaching.ts +1 -1
- package/src/simple-tree/core/treeNodeKernel.ts +9 -6
- package/src/simple-tree/core/unhydratedFlexTree.ts +7 -5
- package/src/simple-tree/objectNode.ts +2 -2
- package/src/simple-tree/proxies.ts +1 -1
- package/src/simple-tree/toMapTree.ts +3 -3
- package/src/simple-tree/toStoredSchema.ts +2 -1
- package/src/simple-tree/treeNodeValid.ts +5 -2
- package/src/util/idAllocator.ts +1 -1
- package/src/util/index.ts +2 -2
- package/src/util/nestedMap.ts +9 -33
- package/src/util/utils.ts +20 -12
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import {
|
|
7
|
+
SchemaFactory,
|
|
8
|
+
type AllowedTypes,
|
|
9
|
+
type FixRecursiveArraySchema,
|
|
10
|
+
type TreeNodeFromImplicitAllowedTypes,
|
|
11
|
+
type ValidateRecursiveSchema,
|
|
12
|
+
} from "./simple-tree/index.js";
|
|
13
|
+
|
|
14
|
+
const sf = new SchemaFactory("com.fluidframework.json");
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Utilities for storing JSON data in {@link TreeNode}s.
|
|
18
|
+
* @remarks
|
|
19
|
+
* Schema which replicate the JSON data model with {@link TreeNode}s.
|
|
20
|
+
*
|
|
21
|
+
* This allows JSON to be losslessly round-tripped through a tree with the following limitations:
|
|
22
|
+
*
|
|
23
|
+
* 1. Only information that would be preserved by JSON.parse is preserved. This means (among other things) that numbers are limited to JavasScript's numeric precision.
|
|
24
|
+
*
|
|
25
|
+
* 2. The order of fields on an object is not preserved. The resulting order is arbitrary.
|
|
26
|
+
*
|
|
27
|
+
* JSON data can be imported from JSON into this format using `JSON.parse` then {@link TreeAlpha.importConcise} with the {@link JsonAsTree.(Tree:variable)} schema.
|
|
28
|
+
*
|
|
29
|
+
* @alpha
|
|
30
|
+
*/
|
|
31
|
+
export namespace JsonAsTree {
|
|
32
|
+
/**
|
|
33
|
+
* {@link AllowedTypes} for primitives types allowed in JSON.
|
|
34
|
+
* @alpha
|
|
35
|
+
*/
|
|
36
|
+
export const Primitive = [
|
|
37
|
+
sf.null,
|
|
38
|
+
sf.boolean,
|
|
39
|
+
sf.number,
|
|
40
|
+
sf.string,
|
|
41
|
+
] as const satisfies AllowedTypes;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* @alpha
|
|
45
|
+
*/
|
|
46
|
+
export type Primitive = TreeNodeFromImplicitAllowedTypes<typeof Primitive>;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* {@link AllowedTypes} for any content allowed in the {@link JsonAsTree} domain.
|
|
50
|
+
* @example
|
|
51
|
+
* ```typescript
|
|
52
|
+
* const tree = TreeAlpha.importConcise(JsonAsTree.Union, { example: { nested: true }, value: 5 });
|
|
53
|
+
* ```
|
|
54
|
+
* @alpha
|
|
55
|
+
*/
|
|
56
|
+
export const Tree = [() => JsonObject, () => Array, ...Primitive] as const;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* @alpha
|
|
60
|
+
*/
|
|
61
|
+
export type Tree = TreeNodeFromImplicitAllowedTypes<typeof Tree>;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Do not use. Exists only as a workaround for {@link https://github.com/microsoft/TypeScript/issues/59550} and {@link https://github.com/microsoft/rushstack/issues/4429}.
|
|
65
|
+
* @system @alpha
|
|
66
|
+
*/
|
|
67
|
+
export const _APIExtractorWorkaroundObjectBase = sf.mapRecursive("object", Tree);
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Arbitrary JSON object as a {@link TreeNode}.
|
|
71
|
+
* @remarks
|
|
72
|
+
* API of the tree node is more aligned with an es6 map than a JS object using its properties like a map.
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* // Due to TypeScript restrictions on recursive types, the constructor and be somewhat limiting.
|
|
76
|
+
* const fromArray = new JsonAsTreeObject([["a", 0]]);
|
|
77
|
+
* // Using `importConcise` can work better for JSON data:
|
|
78
|
+
* const imported = TreeAlpha.importConcise(JsonAsTree.Object, { a: 0 });
|
|
79
|
+
* // Node API is like a Map:
|
|
80
|
+
* const value = imported.get("a");
|
|
81
|
+
* ```
|
|
82
|
+
* @privateRemarks
|
|
83
|
+
* Due to https://github.com/microsoft/TypeScript/issues/61270 this can't be named `Object`.
|
|
84
|
+
* @sealed @alpha
|
|
85
|
+
*/
|
|
86
|
+
export class JsonObject extends _APIExtractorWorkaroundObjectBase {}
|
|
87
|
+
{
|
|
88
|
+
type _check = ValidateRecursiveSchema<typeof JsonObject>;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* D.ts bug workaround, see {@link FixRecursiveArraySchema}.
|
|
93
|
+
* @privateRemarks
|
|
94
|
+
* In the past this this had to reference the base type (_APIExtractorWorkaroundArrayBase).
|
|
95
|
+
* Testing for this in examples/utils/import-testing now shows it has to reference JsonAsTree.Array instead.
|
|
96
|
+
* @system @alpha
|
|
97
|
+
*/
|
|
98
|
+
export declare type _RecursiveArrayWorkaroundJsonArray = FixRecursiveArraySchema<
|
|
99
|
+
typeof Array
|
|
100
|
+
>;
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Do not use. Exists only as a workaround for {@link https://github.com/microsoft/TypeScript/issues/59550} and {@link https://github.com/microsoft/rushstack/issues/4429}.
|
|
104
|
+
* @system @alpha
|
|
105
|
+
*/
|
|
106
|
+
export const _APIExtractorWorkaroundArrayBase = sf.arrayRecursive("array", Tree);
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Arbitrary JSON array as a {@link TreeNode}.
|
|
110
|
+
* @remarks
|
|
111
|
+
* This can be imported using {@link TreeAlpha.importConcise}.
|
|
112
|
+
* @example
|
|
113
|
+
* ```typescript
|
|
114
|
+
* // Due to TypeScript restrictions on recursive types, the constructor can be somewhat limiting.
|
|
115
|
+
* const usingConstructor = new JsonAsTree.Array(["a", 0, new JsonAsTree.Array([1])]);
|
|
116
|
+
* // Using `importConcise` can work better for JSON data:
|
|
117
|
+
* const imported = TreeAlpha.importConcise(JsonAsTree.Array, ["a", 0, [1]]);
|
|
118
|
+
* // Node API is like an Array:
|
|
119
|
+
* const inner: JsonAsTree.Tree = imported[2];
|
|
120
|
+
* assert(Tree.is(inner, JsonAsTree.Array));
|
|
121
|
+
* const leaf = inner[0];
|
|
122
|
+
* ```
|
|
123
|
+
* @sealed @alpha
|
|
124
|
+
*/
|
|
125
|
+
export class Array extends _APIExtractorWorkaroundArrayBase {}
|
|
126
|
+
{
|
|
127
|
+
type _check = ValidateRecursiveSchema<typeof Array>;
|
|
128
|
+
}
|
|
129
|
+
}
|
package/src/packageVersion.ts
CHANGED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { IFluidHandle } from "@fluidframework/core-interfaces";
|
|
7
|
+
import {
|
|
8
|
+
SchemaFactory,
|
|
9
|
+
type FixRecursiveArraySchema,
|
|
10
|
+
type TreeNodeFromImplicitAllowedTypes,
|
|
11
|
+
type ValidateRecursiveSchema,
|
|
12
|
+
} from "./simple-tree/index.js";
|
|
13
|
+
import type { JsonCompatible } from "./util/index.js";
|
|
14
|
+
|
|
15
|
+
const sf = new SchemaFactory("com.fluidframework.serializable");
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Utilities for storing {@link FluidSerializableAsTree.Data|Fluid Serializable data} in {@link TreeNode}s.
|
|
19
|
+
*
|
|
20
|
+
* Same as {@link JsonAsTree} except allows {@link @fluidframework/core-interfaces#(IFluidHandle:interface)}s.
|
|
21
|
+
* @remarks
|
|
22
|
+
* Schema which replicate the Fluid Serializable data model with {@link TreeNode}s.
|
|
23
|
+
*
|
|
24
|
+
* Fluid Serializable data can be imported from the {@link FluidSerializableAsTree.Data|Fluid Serializable format} into this format using {@link TreeAlpha.importConcise} with the {@link FluidSerializableAsTree.(Tree:variable)} schema.
|
|
25
|
+
* @internal
|
|
26
|
+
*/
|
|
27
|
+
export namespace FluidSerializableAsTree {
|
|
28
|
+
/**
|
|
29
|
+
* Data which can be serialized by Fluid.
|
|
30
|
+
* @remarks
|
|
31
|
+
* Can be encoded as a {@link FluidSerializableAsTree.(Tree:type)} using {@link TreeAlpha.importConcise}.
|
|
32
|
+
* @internal
|
|
33
|
+
*/
|
|
34
|
+
export type Data = JsonCompatible<IFluidHandle>;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* {@link AllowedTypes} for any content allowed in the {@link FluidSerializableAsTree} domain.
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* const tree = TreeAlpha.importConcise(FluidSerializableAsTree.Tree, { example: { nested: true }, value: 5 });
|
|
41
|
+
* ```
|
|
42
|
+
* @internal
|
|
43
|
+
*/
|
|
44
|
+
export const Tree = [
|
|
45
|
+
() => FluidSerializableObject,
|
|
46
|
+
() => Array,
|
|
47
|
+
...SchemaFactory.leaves,
|
|
48
|
+
] as const;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* @internal
|
|
52
|
+
*/
|
|
53
|
+
export type Tree = TreeNodeFromImplicitAllowedTypes<typeof Tree>;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Do not use. Exists only as a workaround for {@link https://github.com/microsoft/TypeScript/issues/59550} and {@link https://github.com/microsoft/rushstack/issues/4429}.
|
|
57
|
+
* @system @internal
|
|
58
|
+
*/
|
|
59
|
+
export const _APIExtractorWorkaroundObjectBase = sf.mapRecursive("object", Tree);
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Arbitrary Fluid Serializable object as a {@link TreeNode}.
|
|
63
|
+
* @remarks
|
|
64
|
+
* API of the tree node is more aligned with an es6 map than a JS object using its properties like a map.
|
|
65
|
+
* @example
|
|
66
|
+
* ```typescript
|
|
67
|
+
* // Due to TypeScript restrictions on recursive types, the constructor and be somewhat limiting.
|
|
68
|
+
* const fromArray = new JsonAsTreeObject([["a", 0]]);
|
|
69
|
+
* // Using `importConcise` can work better for Fluid Serializable data:
|
|
70
|
+
* const imported = TreeAlpha.importConcise(FluidSerializableAsTree.Object, { a: 0 });
|
|
71
|
+
* // Node API is like a Map:
|
|
72
|
+
* const value = imported.get("a");
|
|
73
|
+
* ```
|
|
74
|
+
* @privateRemarks
|
|
75
|
+
* Due to https://github.com/microsoft/TypeScript/issues/61270 this can't be named `Object`.
|
|
76
|
+
* @sealed @internal
|
|
77
|
+
*/
|
|
78
|
+
export class FluidSerializableObject extends _APIExtractorWorkaroundObjectBase {}
|
|
79
|
+
{
|
|
80
|
+
type _check = ValidateRecursiveSchema<typeof FluidSerializableObject>;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* D.ts bug workaround, see {@link FixRecursiveArraySchema}.
|
|
85
|
+
* @privateRemarks
|
|
86
|
+
* In the past this this had to reference the base type (_APIExtractorWorkaroundArrayBase).
|
|
87
|
+
* Testing for this in examples/utils/import-testing now shows it has to reference FluidSerializableAsTree.Array instead.
|
|
88
|
+
* @system @internal
|
|
89
|
+
*/
|
|
90
|
+
export declare type _RecursiveArrayWorkaroundJsonArray = FixRecursiveArraySchema<
|
|
91
|
+
typeof Array
|
|
92
|
+
>;
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Do not use. Exists only as a workaround for {@link https://github.com/microsoft/TypeScript/issues/59550} and {@link https://github.com/microsoft/rushstack/issues/4429}.
|
|
96
|
+
* @system @internal
|
|
97
|
+
*/
|
|
98
|
+
export const _APIExtractorWorkaroundArrayBase = sf.arrayRecursive("array", Tree);
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Arbitrary Fluid Serializable array as a {@link TreeNode}.
|
|
102
|
+
* @remarks
|
|
103
|
+
* This can be imported using {@link TreeAlpha.importConcise}.
|
|
104
|
+
* @example
|
|
105
|
+
* ```typescript
|
|
106
|
+
* // Due to TypeScript restrictions on recursive types, the constructor can be somewhat limiting.
|
|
107
|
+
* const usingConstructor = new FluidSerializableAsTree.Array(["a", 0, new FluidSerializableAsTree.Array([1])]);
|
|
108
|
+
* // Using `importConcise` can work better for Fluid Serializable data:
|
|
109
|
+
* const imported = TreeAlpha.importConcise(FluidSerializableAsTree.Array, ["a", 0, [1]]);
|
|
110
|
+
* // Node API is like an Array:
|
|
111
|
+
* const inner: FluidSerializableAsTree.Tree = imported[2];
|
|
112
|
+
* assert(Tree.is(inner, FluidSerializableAsTree.Array));
|
|
113
|
+
* const leaf = inner[0];
|
|
114
|
+
* ```
|
|
115
|
+
* @sealed @internal
|
|
116
|
+
*/
|
|
117
|
+
export class Array extends _APIExtractorWorkaroundArrayBase {}
|
|
118
|
+
{
|
|
119
|
+
type _check = ValidateRecursiveSchema<typeof Array>;
|
|
120
|
+
}
|
|
121
|
+
}
|
package/src/shared-tree/index.ts
CHANGED
|
@@ -198,7 +198,7 @@ export function initialize(checkout: ITreeCheckout, treeContent: TreeStoredConte
|
|
|
198
198
|
break;
|
|
199
199
|
}
|
|
200
200
|
default: {
|
|
201
|
-
fail(
|
|
201
|
+
fail(0xac7 /* unexpected root field kind during initialize */);
|
|
202
202
|
}
|
|
203
203
|
}
|
|
204
204
|
});
|
|
@@ -13,10 +13,10 @@ import type {
|
|
|
13
13
|
IChannelAttributes,
|
|
14
14
|
IFluidDataStoreRuntime,
|
|
15
15
|
IChannelStorageService,
|
|
16
|
-
IChannel,
|
|
17
16
|
} from "@fluidframework/datastore-definitions/internal";
|
|
18
17
|
import {
|
|
19
18
|
SharedObject,
|
|
19
|
+
type IChannelView,
|
|
20
20
|
type IFluidSerializer,
|
|
21
21
|
type ISharedObject,
|
|
22
22
|
} from "@fluidframework/shared-object-base/internal";
|
|
@@ -101,13 +101,7 @@ import { SharedTreeChangeFamily } from "./sharedTreeChangeFamily.js";
|
|
|
101
101
|
import type { SharedTreeChange } from "./sharedTreeChangeTypes.js";
|
|
102
102
|
import type { SharedTreeEditBuilder } from "./sharedTreeEditBuilder.js";
|
|
103
103
|
import { type TreeCheckout, type BranchableTree, createTreeCheckout } from "./treeCheckout.js";
|
|
104
|
-
import {
|
|
105
|
-
Breakable,
|
|
106
|
-
breakingClass,
|
|
107
|
-
fail,
|
|
108
|
-
throwIfBroken,
|
|
109
|
-
type WithBreakable,
|
|
110
|
-
} from "../util/index.js";
|
|
104
|
+
import { Breakable, breakingClass, fail, throwIfBroken } from "../util/index.js";
|
|
111
105
|
|
|
112
106
|
/**
|
|
113
107
|
* Copy of data from an {@link ITreePrivate} at some point in time.
|
|
@@ -133,14 +127,6 @@ export interface SharedTreeContentSnapshot {
|
|
|
133
127
|
readonly removed: [string | number | undefined, number, JsonableTree][];
|
|
134
128
|
}
|
|
135
129
|
|
|
136
|
-
/**
|
|
137
|
-
* Information about a Fluid channel.
|
|
138
|
-
* @privateRemarks
|
|
139
|
-
* This is distinct from {@link IChannel} as it omits the APIs used by the runtime to manage the channel and instead only has things which are useful (and safe) to expose to users of the channel.
|
|
140
|
-
* @internal
|
|
141
|
-
*/
|
|
142
|
-
export type IChannelView = Pick<IChannel, "id" | "attributes" | "isAttached">;
|
|
143
|
-
|
|
144
130
|
/**
|
|
145
131
|
* {@link ITree} extended with some non-public APIs.
|
|
146
132
|
* @internal
|
|
@@ -162,6 +148,11 @@ export interface ITreePrivate extends ITreeInternal {
|
|
|
162
148
|
* This does not include everything that is included in a tree summary, since information about how to merge future edits is omitted.
|
|
163
149
|
*/
|
|
164
150
|
contentSnapshot(): SharedTreeContentSnapshot;
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Access to internals for testing.
|
|
154
|
+
*/
|
|
155
|
+
readonly kernel: SharedTreeKernel;
|
|
165
156
|
}
|
|
166
157
|
|
|
167
158
|
/**
|
|
@@ -216,17 +207,10 @@ function getCodecVersions(formatVersion: number): ExplicitCodecVersions {
|
|
|
216
207
|
/**
|
|
217
208
|
* Shared object wrapping {@link SharedTreeKernel}.
|
|
218
209
|
*/
|
|
219
|
-
export class SharedTree extends SharedObject implements ISharedTree
|
|
220
|
-
|
|
210
|
+
export class SharedTree extends SharedObject implements ISharedTree {
|
|
211
|
+
private readonly breaker: Breakable = new Breakable("Shared Tree");
|
|
221
212
|
|
|
222
|
-
public
|
|
223
|
-
return this.kernel.checkout;
|
|
224
|
-
}
|
|
225
|
-
public get storedSchema(): TreeStoredSchemaRepository {
|
|
226
|
-
return this.checkout.storedSchema;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
private readonly kernel: SharedTreeKernel;
|
|
213
|
+
public readonly kernel: SharedTreeKernel;
|
|
230
214
|
|
|
231
215
|
public constructor(
|
|
232
216
|
id: string,
|
|
@@ -251,10 +235,6 @@ export class SharedTree extends SharedObject implements ISharedTree, WithBreakab
|
|
|
251
235
|
);
|
|
252
236
|
}
|
|
253
237
|
|
|
254
|
-
public get editor(): SharedTreeEditBuilder {
|
|
255
|
-
return this.kernel.getEditor();
|
|
256
|
-
}
|
|
257
|
-
|
|
258
238
|
public summarizeCore(
|
|
259
239
|
serializer: IFluidSerializer,
|
|
260
240
|
telemetryContext?: ITelemetryContext,
|
|
@@ -275,7 +255,9 @@ export class SharedTree extends SharedObject implements ISharedTree, WithBreakab
|
|
|
275
255
|
this.kernel.processMessagesCore(messagesCollection);
|
|
276
256
|
}
|
|
277
257
|
|
|
278
|
-
protected onDisconnect(): void {
|
|
258
|
+
protected onDisconnect(): void {
|
|
259
|
+
this.kernel.onDisconnect();
|
|
260
|
+
}
|
|
279
261
|
|
|
280
262
|
public exportVerbose(): VerboseTree | undefined {
|
|
281
263
|
return this.kernel.exportVerbose();
|
|
@@ -488,7 +470,7 @@ class SharedTreeKernel extends SharedTreeCore<SharedTreeEditBuilder, SharedTreeC
|
|
|
488
470
|
cursor.enterNode(0);
|
|
489
471
|
return verboseFromCursor(cursor, this.storedSchema.nodeSchema);
|
|
490
472
|
} else {
|
|
491
|
-
fail(
|
|
473
|
+
fail(0xac8 /* Invalid document root length */);
|
|
492
474
|
}
|
|
493
475
|
} finally {
|
|
494
476
|
cursor.free();
|
|
@@ -586,6 +568,8 @@ class SharedTreeKernel extends SharedTreeCore<SharedTreeEditBuilder, SharedTreeC
|
|
|
586
568
|
super.submitCommit(commit, schemaAndPolicy, isResubmit),
|
|
587
569
|
);
|
|
588
570
|
}
|
|
571
|
+
|
|
572
|
+
public onDisconnect(): void {}
|
|
589
573
|
}
|
|
590
574
|
|
|
591
575
|
/**
|
|
@@ -612,13 +596,13 @@ export function getBranch<T extends ImplicitFieldSchema | UnsafeUnknownSchema>(
|
|
|
612
596
|
export function getBranch<T extends ImplicitFieldSchema | UnsafeUnknownSchema>(
|
|
613
597
|
treeOrView: ITree | TreeViewAlpha<T>,
|
|
614
598
|
): BranchableTree {
|
|
615
|
-
|
|
616
|
-
treeOrView
|
|
617
|
-
|
|
618
|
-
);
|
|
619
|
-
|
|
599
|
+
if (treeOrView instanceof SchematizingSimpleTreeView) {
|
|
600
|
+
return treeOrView.checkout as unknown as BranchableTree;
|
|
601
|
+
}
|
|
602
|
+
const kernel = (treeOrView as ITree as ITreePrivate).kernel;
|
|
603
|
+
assert(kernel instanceof SharedTreeKernel, 0xb56 /* Invalid ITree */);
|
|
620
604
|
// This cast is safe so long as TreeCheckout supports all the operations on the branch interface.
|
|
621
|
-
return checkout as unknown as BranchableTree;
|
|
605
|
+
return kernel.checkout as unknown as BranchableTree;
|
|
622
606
|
}
|
|
623
607
|
|
|
624
608
|
/**
|
|
@@ -783,7 +767,8 @@ function verboseFromCursor(
|
|
|
783
767
|
schema: ReadonlyMap<TreeNodeSchemaIdentifier, TreeNodeStoredSchema>,
|
|
784
768
|
): VerboseTree {
|
|
785
769
|
const fields = customFromCursorStored(reader, schema, verboseFromCursor);
|
|
786
|
-
const nodeSchema =
|
|
770
|
+
const nodeSchema =
|
|
771
|
+
schema.get(reader.type) ?? fail(0xac9 /* missing schema for type in cursor */);
|
|
787
772
|
if (nodeSchema instanceof LeafNodeStoredSchema) {
|
|
788
773
|
return fields as CustomTreeValue<IFluidHandle>;
|
|
789
774
|
}
|
|
@@ -811,7 +796,7 @@ function exportSimpleFieldSchemaStored(schema: TreeFieldStoredSchema): SimpleFie
|
|
|
811
796
|
assert(schema.types.size === 0, 0xa94 /* invalid forbidden field */);
|
|
812
797
|
break;
|
|
813
798
|
default:
|
|
814
|
-
fail(
|
|
799
|
+
fail(0xaca /* invalid field kind */);
|
|
815
800
|
}
|
|
816
801
|
return { kind, allowedTypes: schema.types };
|
|
817
802
|
}
|
|
@@ -838,5 +823,5 @@ function exportSimpleNodeSchemaStored(schema: TreeNodeStoredSchema): SimpleNodeS
|
|
|
838
823
|
if (schema instanceof LeafNodeStoredSchema) {
|
|
839
824
|
return { kind: NodeKind.Leaf, leafKind: schema.leafValue };
|
|
840
825
|
}
|
|
841
|
-
fail(
|
|
826
|
+
fail(0xacb /* invalid schema kind */);
|
|
842
827
|
}
|
|
@@ -310,7 +310,11 @@ export const TreeAlpha: {
|
|
|
310
310
|
};
|
|
311
311
|
|
|
312
312
|
const cursor = borrowCursorFromTreeNodeOrValue(node);
|
|
313
|
-
return conciseFromCursor(
|
|
313
|
+
return conciseFromCursor(
|
|
314
|
+
cursor,
|
|
315
|
+
tryGetSchema(node) ?? fail(0xacd /* invalid input */),
|
|
316
|
+
config,
|
|
317
|
+
);
|
|
314
318
|
},
|
|
315
319
|
|
|
316
320
|
exportVerbose<T>(
|
|
@@ -325,7 +329,11 @@ export const TreeAlpha: {
|
|
|
325
329
|
};
|
|
326
330
|
|
|
327
331
|
const cursor = borrowCursorFromTreeNodeOrValue(node);
|
|
328
|
-
return verboseFromCursor(
|
|
332
|
+
return verboseFromCursor(
|
|
333
|
+
cursor,
|
|
334
|
+
tryGetSchema(node) ?? fail(0xace /* invalid input */),
|
|
335
|
+
config,
|
|
336
|
+
);
|
|
329
337
|
},
|
|
330
338
|
|
|
331
339
|
exportCompressed(
|
|
@@ -335,7 +343,7 @@ export const TreeAlpha: {
|
|
|
335
343
|
idCompressor?: IIdCompressor;
|
|
336
344
|
},
|
|
337
345
|
): JsonCompatible<IFluidHandle> {
|
|
338
|
-
const schema = tryGetSchema(node) ?? fail(
|
|
346
|
+
const schema = tryGetSchema(node) ?? fail(0xacf /* invalid input */);
|
|
339
347
|
const format = versionToFormat[options.oldestCompatibleClient];
|
|
340
348
|
const codec = makeFieldBatchCodec({ jsonValidator: noopValidator }, format);
|
|
341
349
|
const cursor = borrowFieldCursorFromTreeNodeOrValue(node);
|
|
@@ -375,7 +383,7 @@ function borrowCursorFromTreeNodeOrValue(
|
|
|
375
383
|
): ITreeCursorSynchronous {
|
|
376
384
|
if (isTreeValue(node)) {
|
|
377
385
|
return cursorFromInsertable<UnsafeUnknownSchema>(
|
|
378
|
-
tryGetSchema(node) ?? fail(
|
|
386
|
+
tryGetSchema(node) ?? fail(0xad0 /* missing schema */),
|
|
379
387
|
node,
|
|
380
388
|
);
|
|
381
389
|
}
|
|
@@ -524,7 +524,7 @@ export class TreeCheckout implements ITreeCheckoutFork {
|
|
|
524
524
|
// original (reinstated) schema.
|
|
525
525
|
this.storedSchema.apply(change.innerChange.schema.new);
|
|
526
526
|
} else {
|
|
527
|
-
fail(
|
|
527
|
+
fail(0xad1 /* Unknown Shared Tree change type. */);
|
|
528
528
|
}
|
|
529
529
|
}
|
|
530
530
|
}
|
|
@@ -242,7 +242,7 @@ export class EditManager<
|
|
|
242
242
|
private trackBranch(b: SharedTreeBranch<TEditor, TChangeset>): void {
|
|
243
243
|
const trunkCommit =
|
|
244
244
|
findCommonAncestor(this.trunk.getHead(), b.getHead()) ??
|
|
245
|
-
fail(
|
|
245
|
+
fail(0xad2 /* Expected branch to be related to trunk */);
|
|
246
246
|
const sequenceId = this.getCommitSequenceId(trunkCommit);
|
|
247
247
|
const branches = getOrCreate(this.trunkBranches, sequenceId, () => new Set());
|
|
248
248
|
|
|
@@ -253,10 +253,10 @@ export class EditManager<
|
|
|
253
253
|
private untrackBranch(b: SharedTreeBranch<TEditor, TChangeset>): void {
|
|
254
254
|
const trunkCommit =
|
|
255
255
|
findCommonAncestor(this.trunk.getHead(), b.getHead()) ??
|
|
256
|
-
fail(
|
|
256
|
+
fail(0xad3 /* Expected branch to be related to trunk */);
|
|
257
257
|
const sequenceId = this.getCommitSequenceId(trunkCommit);
|
|
258
258
|
const branches =
|
|
259
|
-
this.trunkBranches.get(sequenceId) ?? fail(
|
|
259
|
+
this.trunkBranches.get(sequenceId) ?? fail(0xad4 /* Expected branch to be tracked */);
|
|
260
260
|
|
|
261
261
|
assert(branches.delete(b), 0x671 /* Expected branch to be tracked */);
|
|
262
262
|
if (branches.size === 0) {
|
|
@@ -500,7 +500,8 @@ export class EditManager<
|
|
|
500
500
|
0xa61 /* Serialized trunk should not include the trunk base */,
|
|
501
501
|
);
|
|
502
502
|
const metadata =
|
|
503
|
-
this.trunkMetadata.get(c.revision) ??
|
|
503
|
+
this.trunkMetadata.get(c.revision) ??
|
|
504
|
+
fail(0xad5 /* Expected metadata for trunk commit */);
|
|
504
505
|
const commit: SequencedCommit<TChangeset> = {
|
|
505
506
|
change: c.change,
|
|
506
507
|
revision: c.revision,
|
|
@@ -519,7 +520,7 @@ export class EditManager<
|
|
|
519
520
|
const branchPath: GraphCommit<TChangeset>[] = [];
|
|
520
521
|
const ancestor =
|
|
521
522
|
findCommonAncestor([branch.getHead(), branchPath], this.trunk.getHead()) ??
|
|
522
|
-
fail(
|
|
523
|
+
fail(0xad6 /* Expected branch to be based on trunk */);
|
|
523
524
|
|
|
524
525
|
const base = ancestor === this.trunkBase ? rootRevision : ancestor.revision;
|
|
525
526
|
return [
|
|
@@ -582,7 +583,7 @@ export class EditManager<
|
|
|
582
583
|
for (const [sessionId, branch] of data.peerLocalBranches) {
|
|
583
584
|
const commit =
|
|
584
585
|
trunkRevisionCache.get(branch.base) ??
|
|
585
|
-
fail(
|
|
586
|
+
fail(0xad7 /* Expected summary branch to be based off of a revision in the trunk */);
|
|
586
587
|
|
|
587
588
|
this.peerLocalBranches.set(
|
|
588
589
|
sessionId,
|
|
@@ -663,7 +664,7 @@ export class EditManager<
|
|
|
663
664
|
sequenceNumber: SeqNumber,
|
|
664
665
|
referenceSequenceNumber: SeqNumber,
|
|
665
666
|
): void {
|
|
666
|
-
assert(newCommits.length > 0,
|
|
667
|
+
assert(newCommits.length > 0, 0xad8 /* Expected at least one sequenced change */);
|
|
667
668
|
assert(
|
|
668
669
|
sequenceNumber > this.minimumSequenceNumber,
|
|
669
670
|
0x713 /* Expected change sequence number to exceed the last known minimum sequence number */,
|
|
@@ -14,7 +14,10 @@ import type {
|
|
|
14
14
|
ITelemetryContext,
|
|
15
15
|
} from "@fluidframework/runtime-definitions/internal";
|
|
16
16
|
import { SummaryTreeBuilder } from "@fluidframework/runtime-utils/internal";
|
|
17
|
-
import type {
|
|
17
|
+
import type {
|
|
18
|
+
IChannelView,
|
|
19
|
+
IFluidSerializer,
|
|
20
|
+
} from "@fluidframework/shared-object-base/internal";
|
|
18
21
|
|
|
19
22
|
import type { ICodecOptions, IJsonCodec } from "../codec/index.js";
|
|
20
23
|
import {
|
|
@@ -51,7 +54,6 @@ import { DefaultResubmitMachine } from "./defaultResubmitMachine.js";
|
|
|
51
54
|
import { BranchCommitEnricher } from "./branchCommitEnricher.js";
|
|
52
55
|
import { createChildLogger } from "@fluidframework/telemetry-utils/internal";
|
|
53
56
|
import type { IFluidLoadable, ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
|
|
54
|
-
import type { IChannelView } from "../shared-tree/index.js";
|
|
55
57
|
|
|
56
58
|
// TODO: Organize this to be adjacent to persisted types.
|
|
57
59
|
const summarizablesTreeKey = "indexes";
|
|
@@ -370,13 +372,13 @@ export class SharedTreeCore<TEditor extends ChangeFamilyEditor, TChange>
|
|
|
370
372
|
if (messagesSessionId !== undefined) {
|
|
371
373
|
assert(
|
|
372
374
|
messagesSessionId === sessionId,
|
|
373
|
-
|
|
375
|
+
0xad9 /* All messages in a bunch must have the same session ID */,
|
|
374
376
|
);
|
|
375
377
|
}
|
|
376
378
|
messagesSessionId = sessionId;
|
|
377
379
|
}
|
|
378
380
|
|
|
379
|
-
assert(messagesSessionId !== undefined,
|
|
381
|
+
assert(messagesSessionId !== undefined, 0xada /* Messages must have a session ID */);
|
|
380
382
|
|
|
381
383
|
this.editManager.addSequencedChanges(
|
|
382
384
|
commits,
|
|
@@ -79,7 +79,7 @@ export function customFromCursor<TChild, THandle>(
|
|
|
79
79
|
) => TChild,
|
|
80
80
|
): CustomTree<TChild, THandle> {
|
|
81
81
|
const type = reader.type;
|
|
82
|
-
const nodeSchema = schema.get(type) ?? fail(
|
|
82
|
+
const nodeSchema = schema.get(type) ?? fail(0xb2e /* missing schema for type in cursor */);
|
|
83
83
|
|
|
84
84
|
switch (type) {
|
|
85
85
|
case numberSchema.identifier:
|
|
@@ -109,7 +109,7 @@ export function customFromCursor<TChild, THandle>(
|
|
|
109
109
|
const key =
|
|
110
110
|
isObjectNodeSchema(nodeSchema) && !options.useStoredKeys
|
|
111
111
|
? (nodeSchema.storedKeyToPropertyKey.get(storedKey) ??
|
|
112
|
-
fail(
|
|
112
|
+
fail(0xb2f /* missing property key */))
|
|
113
113
|
: storedKey;
|
|
114
114
|
// Length is checked above.
|
|
115
115
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
@@ -138,7 +138,7 @@ export function customFromCursorStored<TChild>(
|
|
|
138
138
|
) => TChild,
|
|
139
139
|
): CustomTree<TChild, IFluidHandle> {
|
|
140
140
|
const type = reader.type;
|
|
141
|
-
const nodeSchema = schema.get(type) ?? fail(
|
|
141
|
+
const nodeSchema = schema.get(type) ?? fail(0xb30 /* missing schema for type in cursor */);
|
|
142
142
|
|
|
143
143
|
if (nodeSchema instanceof LeafNodeStoredSchema) {
|
|
144
144
|
assert(valueSchemaAllows(nodeSchema.leafValue, reader.value), 0xa9c /* invalid value */);
|
|
@@ -138,7 +138,7 @@ export function adaptEnum<
|
|
|
138
138
|
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
|
139
139
|
const factoryOut = <TValue extends Values>(value: TValue) => {
|
|
140
140
|
return new out[
|
|
141
|
-
inverse.get(value) ?? fail(
|
|
141
|
+
inverse.get(value) ?? fail(0xb31 /* missing enum value */)
|
|
142
142
|
// "extends unknown" is required here to handle when TValue is an union: each member of the union should be processed independently.
|
|
143
143
|
]() as TValue extends unknown
|
|
144
144
|
? NodeFromSchema<ReturnType<typeof singletonSchema<TScope, TValue>>>
|
|
@@ -174,7 +174,7 @@ export type ValidateRecursiveSchema<
|
|
|
174
174
|
* ```typescript
|
|
175
175
|
* // Workaround to avoid
|
|
176
176
|
* // `error TS2310: Type 'RecursiveArray' recursively references itself as a base type.` in the d.ts file.
|
|
177
|
-
* export declare
|
|
177
|
+
* export declare type _RecursiveArrayWorkaround = FixRecursiveArraySchema<typeof RecursiveArray>;
|
|
178
178
|
* export class RecursiveArray extends schema.arrayRecursive("RA", [() => RecursiveArray]) {}
|
|
179
179
|
* {
|
|
180
180
|
* type _check = ValidateRecursiveSchema<typeof RecursiveArray>;
|
|
@@ -164,7 +164,7 @@ export function createSimpleTreeIndex<
|
|
|
164
164
|
return makeGenericKeyFinder<TKey>(brand(keyLocation), isKeyValid);
|
|
165
165
|
}
|
|
166
166
|
} else {
|
|
167
|
-
fail(
|
|
167
|
+
fail(0xb32 /* node is out of schema */);
|
|
168
168
|
}
|
|
169
169
|
}
|
|
170
170
|
: (schemaIdentifier: TreeNodeSchemaIdentifier) => {
|
|
@@ -221,11 +221,11 @@ function makeGenericKeyFinder<TKey extends TreeIndexKey>(
|
|
|
221
221
|
cursor.exitField();
|
|
222
222
|
|
|
223
223
|
if (value === undefined) {
|
|
224
|
-
fail(
|
|
224
|
+
fail(0xb33 /* a value for the key does not exist */);
|
|
225
225
|
}
|
|
226
226
|
|
|
227
227
|
if (!isKeyValid(value)) {
|
|
228
|
-
fail(
|
|
228
|
+
fail(0xb34 /* the key is an unexpected type */);
|
|
229
229
|
}
|
|
230
230
|
|
|
231
231
|
return value;
|
|
@@ -376,7 +376,7 @@ export function checkUnion(union: Iterable<TreeNodeSchema>, errors: string[]): v
|
|
|
376
376
|
// For each field of schema, remove schema from possiblyAmbiguous that do not have that field
|
|
377
377
|
for (const [key, field] of schema.fields) {
|
|
378
378
|
if (field.kind === FieldKind.Required) {
|
|
379
|
-
const withKey = allObjectKeys.get(key) ?? fail(
|
|
379
|
+
const withKey = allObjectKeys.get(key) ?? fail(0xb35 /* missing schema */);
|
|
380
380
|
for (const candidate of possiblyAmbiguous) {
|
|
381
381
|
if (!withKey.has(candidate)) {
|
|
382
382
|
possiblyAmbiguous.delete(candidate);
|