@fluidframework/tree 2.22.1 → 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 +18 -13
- 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 +10 -11
- 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.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 +37 -20
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +17 -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 +11 -2
- package/dist/shared-tree-core/editManager.d.ts.map +1 -1
- package/dist/shared-tree-core/editManager.js +70 -34
- package/dist/shared-tree-core/editManager.js.map +1 -1
- package/dist/shared-tree-core/resubmitMachine.d.ts +2 -0
- package/dist/shared-tree-core/resubmitMachine.d.ts.map +1 -1
- package/dist/shared-tree-core/resubmitMachine.js.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.d.ts +10 -3
- package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.js +42 -7
- 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 +5 -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 +23 -6
- package/dist/util/utils.d.ts.map +1 -1
- package/dist/util/utils.js +46 -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 +19 -14
- 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 +11 -12
- 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.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 +37 -20
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +18 -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 +11 -2
- package/lib/shared-tree-core/editManager.d.ts.map +1 -1
- package/lib/shared-tree-core/editManager.js +70 -34
- package/lib/shared-tree-core/editManager.js.map +1 -1
- package/lib/shared-tree-core/resubmitMachine.d.ts +2 -0
- package/lib/shared-tree-core/resubmitMachine.d.ts.map +1 -1
- package/lib/shared-tree-core/resubmitMachine.js.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.d.ts +10 -3
- package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.js +42 -7
- 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 +23 -6
- package/lib/util/utils.d.ts.map +1 -1
- package/lib/util/utils.js +42 -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 +37 -26
- 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 +16 -12
- 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 +31 -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 +85 -47
- package/src/shared-tree-core/resubmitMachine.ts +2 -0
- package/src/shared-tree-core/sharedTreeCore.ts +62 -14
- 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 +3 -2
- package/src/util/nestedMap.ts +9 -33
- package/src/util/utils.ts +52 -12
|
@@ -52,11 +52,12 @@ import {
|
|
|
52
52
|
idAllocatorFromMaxId,
|
|
53
53
|
idAllocatorFromState,
|
|
54
54
|
type RangeQueryResult,
|
|
55
|
-
|
|
55
|
+
getOrCreate,
|
|
56
56
|
newTupleBTree,
|
|
57
57
|
mergeTupleBTrees,
|
|
58
58
|
type TupleBTree,
|
|
59
59
|
RangeMap,
|
|
60
|
+
balancedReduce,
|
|
60
61
|
} from "../../util/index.js";
|
|
61
62
|
import {
|
|
62
63
|
type TreeChunk,
|
|
@@ -183,13 +184,15 @@ export class ModularChangeFamily
|
|
|
183
184
|
const { revInfos, maxId } = getRevInfoFromTaggedChanges(changes);
|
|
184
185
|
const idState: IdAllocationState = { maxId };
|
|
185
186
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
187
|
+
const pairwiseDelegate = (
|
|
188
|
+
left: ModularChangeset,
|
|
189
|
+
right: ModularChangeset,
|
|
190
|
+
): ModularChangeset => {
|
|
191
|
+
return this.composePair(left, right, revInfos, idState);
|
|
192
|
+
};
|
|
189
193
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
.reduce((change1, change2) => this.composePair(change1, change2, revInfos, idState));
|
|
194
|
+
const innerChanges = changes.map((change) => change.change);
|
|
195
|
+
return balancedReduce(innerChanges, pairwiseDelegate, makeModularChangeset);
|
|
193
196
|
}
|
|
194
197
|
|
|
195
198
|
private composePair(
|
|
@@ -318,7 +321,7 @@ export class ModularChangeFamily
|
|
|
318
321
|
crossFieldTable.pendingCompositions.nodeIdsToCompose.push([child1, child2]);
|
|
319
322
|
}
|
|
320
323
|
|
|
321
|
-
return child1 ?? child2 ?? fail(
|
|
324
|
+
return child1 ?? child2 ?? fail(0xb22 /* Should not compose two undefined nodes */);
|
|
322
325
|
};
|
|
323
326
|
|
|
324
327
|
const amendedChange = rebaser.compose(
|
|
@@ -563,7 +566,7 @@ export class ModularChangeFamily
|
|
|
563
566
|
setInChangeAtomIdMap(crossFieldTable.newToBaseNodeId, child2, child1);
|
|
564
567
|
crossFieldTable.pendingCompositions.nodeIdsToCompose.push([child1, child2]);
|
|
565
568
|
}
|
|
566
|
-
return child1 ?? child2 ?? fail(
|
|
569
|
+
return child1 ?? child2 ?? fail(0xb23 /* Should not compose two undefined nodes */);
|
|
567
570
|
},
|
|
568
571
|
idAllocator,
|
|
569
572
|
manager,
|
|
@@ -1423,7 +1426,8 @@ export class ModularChangeFamily
|
|
|
1423
1426
|
constraintState: ConstraintState,
|
|
1424
1427
|
revertConstraintState: ConstraintState,
|
|
1425
1428
|
): void {
|
|
1426
|
-
const node =
|
|
1429
|
+
const node =
|
|
1430
|
+
nodes.get([nodeId.revision, nodeId.localId]) ?? fail(0xb24 /* Unknown node ID */);
|
|
1427
1431
|
if (node.nodeExistsConstraint !== undefined) {
|
|
1428
1432
|
const isNowViolated = inputAttachState === NodeAttachState.Detached;
|
|
1429
1433
|
if (node.nodeExistsConstraint.violated !== isNowViolated) {
|
|
@@ -1921,7 +1925,7 @@ export function updateRefreshers(
|
|
|
1921
1925
|
|
|
1922
1926
|
if (change.builds !== undefined) {
|
|
1923
1927
|
for (const [[revision, id], chunk] of change.builds.entries()) {
|
|
1924
|
-
const lengthTree =
|
|
1928
|
+
const lengthTree = getOrCreate(chunkLengths, revision, () => new BTree());
|
|
1925
1929
|
lengthTree.set(id, chunk.topLevelLength);
|
|
1926
1930
|
}
|
|
1927
1931
|
}
|
|
@@ -2999,7 +3003,7 @@ function fieldChangeFromId(
|
|
|
2999
3003
|
id: FieldId,
|
|
3000
3004
|
): FieldChange {
|
|
3001
3005
|
const fieldMap = fieldMapFromNodeId(fields, nodes, id.nodeId);
|
|
3002
|
-
return fieldMap.get(id.field) ?? fail(
|
|
3006
|
+
return fieldMap.get(id.field) ?? fail(0xb25 /* No field exists for the given ID */);
|
|
3003
3007
|
}
|
|
3004
3008
|
|
|
3005
3009
|
function fieldMapFromNodeId(
|
|
@@ -27,7 +27,7 @@ export class MockNodeKeyManager implements NodeKeyManager {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
public localizeNodeKey(key: StableNodeKey): LocalNodeKey {
|
|
30
|
-
return this.tryLocalizeNodeKey(key) ?? fail(
|
|
30
|
+
return this.tryLocalizeNodeKey(key) ?? fail(0xb26 /* Key is not compressible */);
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
public stabilizeNodeKey(key: LocalNodeKey): StableNodeKey {
|
|
@@ -439,7 +439,7 @@ class Cursor extends SynchronousCursor implements ITreeSubscriptionCursor {
|
|
|
439
439
|
}
|
|
440
440
|
public getPath(prefix?: PathRootPrefix): UpPath {
|
|
441
441
|
assert(this.innerCursor !== undefined, 0x436 /* Cursor must be current to be used */);
|
|
442
|
-
return this.innerCursor.getPath(prefix) ?? fail(
|
|
442
|
+
return this.innerCursor.getPath(prefix) ?? fail(0xb27 /* no path when at root */);
|
|
443
443
|
}
|
|
444
444
|
public get fieldIndex(): number {
|
|
445
445
|
assert(this.innerCursor !== undefined, 0x437 /* Cursor must be current to be used */);
|
|
@@ -27,7 +27,7 @@ export function encodeRepo(repo: TreeStoredSchema): Format {
|
|
|
27
27
|
Object.create(null);
|
|
28
28
|
const rootFieldSchema = encodeFieldSchema(repo.rootFieldSchema);
|
|
29
29
|
for (const name of [...repo.nodeSchema.keys()].sort()) {
|
|
30
|
-
const schema = repo.nodeSchema.get(name) ?? fail(
|
|
30
|
+
const schema = repo.nodeSchema.get(name) ?? fail(0xb28 /* missing schema */);
|
|
31
31
|
Object.defineProperty(nodeSchema, name, {
|
|
32
32
|
enumerable: true,
|
|
33
33
|
configurable: true,
|
|
@@ -540,7 +540,7 @@ export class ComposeQueue {
|
|
|
540
540
|
return this.dequeueBase();
|
|
541
541
|
} else if (areOutputCellsEmpty(baseMark) && areInputCellsEmpty(newMark)) {
|
|
542
542
|
const baseCellId: ChangeAtomId =
|
|
543
|
-
getOutputCellId(baseMark) ?? fail(
|
|
543
|
+
getOutputCellId(baseMark) ?? fail(0xb29 /* Expected defined output ID */);
|
|
544
544
|
|
|
545
545
|
if (markEmptiesCells(baseMark) && baseCellId.revision === undefined) {
|
|
546
546
|
// The base revision should always be defined except when squashing changes into a transaction.
|
|
@@ -176,7 +176,7 @@ function invertMark(
|
|
|
176
176
|
}
|
|
177
177
|
|
|
178
178
|
const cellId = getDetachOutputCellId(mark) ?? {
|
|
179
|
-
revision: mark.revision ?? fail(
|
|
179
|
+
revision: mark.revision ?? fail(0xb2a /* Revision must be defined */),
|
|
180
180
|
localId: mark.id,
|
|
181
181
|
};
|
|
182
182
|
|
|
@@ -132,7 +132,7 @@ export function makeV2CodecHelpers(
|
|
|
132
132
|
context,
|
|
133
133
|
);
|
|
134
134
|
case NoopMarkType:
|
|
135
|
-
fail(
|
|
135
|
+
fail(0xb2c /* Mark type: NoopMarkType should not be encoded. */);
|
|
136
136
|
default:
|
|
137
137
|
unreachableCase(type);
|
|
138
138
|
}
|
|
@@ -747,7 +747,7 @@ export function splitMark<TMark extends Mark>(mark: TMark, length: number): [TMa
|
|
|
747
747
|
const markLength = mark.count;
|
|
748
748
|
const remainder = markLength - length;
|
|
749
749
|
if (length < 1 || remainder < 1) {
|
|
750
|
-
fail(
|
|
750
|
+
fail(0xb2d /* Unable to split mark due to lengths */);
|
|
751
751
|
}
|
|
752
752
|
|
|
753
753
|
const [effect1, effect2] = splitMarkEffect(mark, length);
|
|
@@ -345,14 +345,16 @@ class StackCursor<TNode> extends SynchronousCursor implements CursorWithNode<TNo
|
|
|
345
345
|
|
|
346
346
|
public exitField(): void {
|
|
347
347
|
// assert(this.mode === CursorLocationType.Fields, "can only navigate up from field when in field");
|
|
348
|
-
this.siblings =
|
|
349
|
-
|
|
348
|
+
this.siblings =
|
|
349
|
+
this.siblingStack.pop() ?? fail(0xac3 /* Unexpected siblingStack.length */);
|
|
350
|
+
this.index = this.indexStack.pop() ?? fail(0xac4 /* Unexpected indexStack.length */);
|
|
350
351
|
}
|
|
351
352
|
|
|
352
353
|
public exitNode(): void {
|
|
353
354
|
// assert(this.mode === CursorLocationType.Nodes, "can only navigate up from node when in node");
|
|
354
|
-
this.siblings =
|
|
355
|
-
|
|
355
|
+
this.siblings =
|
|
356
|
+
this.siblingStack.pop() ?? fail(0xac5 /* Unexpected siblingStack.length */);
|
|
357
|
+
this.index = this.indexStack.pop() ?? fail(0xac6 /* Unexpected indexStack.length */);
|
|
356
358
|
}
|
|
357
359
|
|
|
358
360
|
public getNode(): TNode {
|
package/src/index.ts
CHANGED
|
@@ -73,7 +73,6 @@ export {
|
|
|
73
73
|
ForestTypeOptimized,
|
|
74
74
|
ForestTypeExpensiveDebug,
|
|
75
75
|
ForestTypeReference,
|
|
76
|
-
type IChannelView,
|
|
77
76
|
} from "./shared-tree/index.js";
|
|
78
77
|
|
|
79
78
|
export {
|
|
@@ -259,3 +258,6 @@ export {
|
|
|
259
258
|
export type { MapNodeInsertableData } from "./simple-tree/index.js";
|
|
260
259
|
|
|
261
260
|
export type { JsonCompatible, JsonCompatibleObject } from "./util/index.js";
|
|
261
|
+
|
|
262
|
+
export { JsonAsTree } from "./jsonDomainSchema.js";
|
|
263
|
+
export { FluidSerializableAsTree } from "./serializableDomainSchema.js";
|
|
@@ -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";
|
|
@@ -29,6 +29,7 @@ import type {
|
|
|
29
29
|
ITelemetryContext,
|
|
30
30
|
IExperimentalIncrementalSummaryContext,
|
|
31
31
|
ISummaryTreeWithStats,
|
|
32
|
+
IRuntimeMessageCollection,
|
|
32
33
|
} from "@fluidframework/runtime-definitions/internal";
|
|
33
34
|
import type { ISequencedDocumentMessage } from "@fluidframework/driver-definitions/internal";
|
|
34
35
|
|
|
@@ -100,13 +101,7 @@ import { SharedTreeChangeFamily } from "./sharedTreeChangeFamily.js";
|
|
|
100
101
|
import type { SharedTreeChange } from "./sharedTreeChangeTypes.js";
|
|
101
102
|
import type { SharedTreeEditBuilder } from "./sharedTreeEditBuilder.js";
|
|
102
103
|
import { type TreeCheckout, type BranchableTree, createTreeCheckout } from "./treeCheckout.js";
|
|
103
|
-
import {
|
|
104
|
-
Breakable,
|
|
105
|
-
breakingClass,
|
|
106
|
-
fail,
|
|
107
|
-
throwIfBroken,
|
|
108
|
-
type WithBreakable,
|
|
109
|
-
} from "../util/index.js";
|
|
104
|
+
import { Breakable, breakingClass, fail, throwIfBroken } from "../util/index.js";
|
|
110
105
|
|
|
111
106
|
/**
|
|
112
107
|
* Copy of data from an {@link ITreePrivate} at some point in time.
|
|
@@ -132,14 +127,6 @@ export interface SharedTreeContentSnapshot {
|
|
|
132
127
|
readonly removed: [string | number | undefined, number, JsonableTree][];
|
|
133
128
|
}
|
|
134
129
|
|
|
135
|
-
/**
|
|
136
|
-
* Information about a Fluid channel.
|
|
137
|
-
* @privateRemarks
|
|
138
|
-
* 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.
|
|
139
|
-
* @internal
|
|
140
|
-
*/
|
|
141
|
-
export type IChannelView = Pick<IChannel, "id" | "attributes" | "isAttached">;
|
|
142
|
-
|
|
143
130
|
/**
|
|
144
131
|
* {@link ITree} extended with some non-public APIs.
|
|
145
132
|
* @internal
|
|
@@ -161,6 +148,11 @@ export interface ITreePrivate extends ITreeInternal {
|
|
|
161
148
|
* This does not include everything that is included in a tree summary, since information about how to merge future edits is omitted.
|
|
162
149
|
*/
|
|
163
150
|
contentSnapshot(): SharedTreeContentSnapshot;
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Access to internals for testing.
|
|
154
|
+
*/
|
|
155
|
+
readonly kernel: SharedTreeKernel;
|
|
164
156
|
}
|
|
165
157
|
|
|
166
158
|
/**
|
|
@@ -215,17 +207,10 @@ function getCodecVersions(formatVersion: number): ExplicitCodecVersions {
|
|
|
215
207
|
/**
|
|
216
208
|
* Shared object wrapping {@link SharedTreeKernel}.
|
|
217
209
|
*/
|
|
218
|
-
export class SharedTree extends SharedObject implements ISharedTree
|
|
219
|
-
|
|
210
|
+
export class SharedTree extends SharedObject implements ISharedTree {
|
|
211
|
+
private readonly breaker: Breakable = new Breakable("Shared Tree");
|
|
220
212
|
|
|
221
|
-
public
|
|
222
|
-
return this.kernel.checkout;
|
|
223
|
-
}
|
|
224
|
-
public get storedSchema(): TreeStoredSchemaRepository {
|
|
225
|
-
return this.checkout.storedSchema;
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
private readonly kernel: SharedTreeKernel;
|
|
213
|
+
public readonly kernel: SharedTreeKernel;
|
|
229
214
|
|
|
230
215
|
public constructor(
|
|
231
216
|
id: string,
|
|
@@ -250,10 +235,6 @@ export class SharedTree extends SharedObject implements ISharedTree, WithBreakab
|
|
|
250
235
|
);
|
|
251
236
|
}
|
|
252
237
|
|
|
253
|
-
public get editor(): SharedTreeEditBuilder {
|
|
254
|
-
return this.kernel.getEditor();
|
|
255
|
-
}
|
|
256
|
-
|
|
257
238
|
public summarizeCore(
|
|
258
239
|
serializer: IFluidSerializer,
|
|
259
240
|
telemetryContext?: ITelemetryContext,
|
|
@@ -270,7 +251,13 @@ export class SharedTree extends SharedObject implements ISharedTree, WithBreakab
|
|
|
270
251
|
this.kernel.processCore(message, local, localOpMetadata);
|
|
271
252
|
}
|
|
272
253
|
|
|
273
|
-
protected
|
|
254
|
+
protected override processMessagesCore(messagesCollection: IRuntimeMessageCollection): void {
|
|
255
|
+
this.kernel.processMessagesCore(messagesCollection);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
protected onDisconnect(): void {
|
|
259
|
+
this.kernel.onDisconnect();
|
|
260
|
+
}
|
|
274
261
|
|
|
275
262
|
public exportVerbose(): VerboseTree | undefined {
|
|
276
263
|
return this.kernel.exportVerbose();
|
|
@@ -483,7 +470,7 @@ class SharedTreeKernel extends SharedTreeCore<SharedTreeEditBuilder, SharedTreeC
|
|
|
483
470
|
cursor.enterNode(0);
|
|
484
471
|
return verboseFromCursor(cursor, this.storedSchema.nodeSchema);
|
|
485
472
|
} else {
|
|
486
|
-
fail(
|
|
473
|
+
fail(0xac8 /* Invalid document root length */);
|
|
487
474
|
}
|
|
488
475
|
} finally {
|
|
489
476
|
cursor.free();
|
|
@@ -581,6 +568,8 @@ class SharedTreeKernel extends SharedTreeCore<SharedTreeEditBuilder, SharedTreeC
|
|
|
581
568
|
super.submitCommit(commit, schemaAndPolicy, isResubmit),
|
|
582
569
|
);
|
|
583
570
|
}
|
|
571
|
+
|
|
572
|
+
public onDisconnect(): void {}
|
|
584
573
|
}
|
|
585
574
|
|
|
586
575
|
/**
|
|
@@ -607,13 +596,13 @@ export function getBranch<T extends ImplicitFieldSchema | UnsafeUnknownSchema>(
|
|
|
607
596
|
export function getBranch<T extends ImplicitFieldSchema | UnsafeUnknownSchema>(
|
|
608
597
|
treeOrView: ITree | TreeViewAlpha<T>,
|
|
609
598
|
): BranchableTree {
|
|
610
|
-
|
|
611
|
-
treeOrView
|
|
612
|
-
|
|
613
|
-
);
|
|
614
|
-
|
|
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 */);
|
|
615
604
|
// This cast is safe so long as TreeCheckout supports all the operations on the branch interface.
|
|
616
|
-
return checkout as unknown as BranchableTree;
|
|
605
|
+
return kernel.checkout as unknown as BranchableTree;
|
|
617
606
|
}
|
|
618
607
|
|
|
619
608
|
/**
|
|
@@ -778,7 +767,8 @@ function verboseFromCursor(
|
|
|
778
767
|
schema: ReadonlyMap<TreeNodeSchemaIdentifier, TreeNodeStoredSchema>,
|
|
779
768
|
): VerboseTree {
|
|
780
769
|
const fields = customFromCursorStored(reader, schema, verboseFromCursor);
|
|
781
|
-
const nodeSchema =
|
|
770
|
+
const nodeSchema =
|
|
771
|
+
schema.get(reader.type) ?? fail(0xac9 /* missing schema for type in cursor */);
|
|
782
772
|
if (nodeSchema instanceof LeafNodeStoredSchema) {
|
|
783
773
|
return fields as CustomTreeValue<IFluidHandle>;
|
|
784
774
|
}
|
|
@@ -806,7 +796,7 @@ function exportSimpleFieldSchemaStored(schema: TreeFieldStoredSchema): SimpleFie
|
|
|
806
796
|
assert(schema.types.size === 0, 0xa94 /* invalid forbidden field */);
|
|
807
797
|
break;
|
|
808
798
|
default:
|
|
809
|
-
fail(
|
|
799
|
+
fail(0xaca /* invalid field kind */);
|
|
810
800
|
}
|
|
811
801
|
return { kind, allowedTypes: schema.types };
|
|
812
802
|
}
|
|
@@ -833,5 +823,5 @@ function exportSimpleNodeSchemaStored(schema: TreeNodeStoredSchema): SimpleNodeS
|
|
|
833
823
|
if (schema instanceof LeafNodeStoredSchema) {
|
|
834
824
|
return { kind: NodeKind.Leaf, leafKind: schema.leafValue };
|
|
835
825
|
}
|
|
836
|
-
fail(
|
|
826
|
+
fail(0xacb /* invalid schema kind */);
|
|
837
827
|
}
|