@fluidframework/tree 2.41.0-337492 → 2.41.0-338401
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/api-report/tree.alpha.api.md +165 -5
- package/dist/alpha.d.ts +2 -0
- package/dist/codec/codec.d.ts +42 -7
- package/dist/codec/codec.d.ts.map +1 -1
- package/dist/codec/codec.js +50 -8
- package/dist/codec/codec.js.map +1 -1
- package/dist/core/change-family/editBuilder.d.ts.map +1 -1
- package/dist/core/change-family/editBuilder.js.map +1 -1
- package/dist/core/forest/forest.d.ts.map +1 -1
- package/dist/core/forest/forest.js.map +1 -1
- package/dist/core/schema-stored/schema.d.ts.map +1 -1
- package/dist/core/schema-stored/schema.js.map +1 -1
- package/dist/core/schema-stored/storedSchemaRepository.d.ts +1 -1
- package/dist/core/schema-stored/storedSchemaRepository.d.ts.map +1 -1
- package/dist/core/schema-stored/storedSchemaRepository.js +1 -1
- package/dist/core/schema-stored/storedSchemaRepository.js.map +1 -1
- package/dist/core/tree/anchorSet.d.ts.map +1 -1
- package/dist/core/tree/anchorSet.js +2 -2
- package/dist/core/tree/anchorSet.js.map +1 -1
- package/dist/core/tree/chunk.d.ts.map +1 -1
- package/dist/core/tree/chunk.js.map +1 -1
- package/dist/core/tree/delta.d.ts.map +1 -1
- package/dist/core/tree/delta.js.map +1 -1
- package/dist/core/tree/deltaUtil.d.ts.map +1 -1
- package/dist/core/tree/deltaUtil.js.map +1 -1
- package/dist/core/tree/detachedFieldIndex.d.ts +1 -1
- package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndex.js.map +1 -1
- package/dist/core/tree/detachedFieldIndexCodec.d.ts +1 -1
- package/dist/core/tree/detachedFieldIndexCodec.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndexCodec.js +1 -1
- package/dist/core/tree/detachedFieldIndexCodec.js.map +1 -1
- package/dist/core/tree/pathTree.d.ts.map +1 -1
- package/dist/core/tree/pathTree.js.map +1 -1
- package/dist/core/tree/treeTextFormat.d.ts.map +1 -1
- package/dist/core/tree/treeTextFormat.js.map +1 -1
- package/dist/core/tree/visitDelta.d.ts +1 -1
- package/dist/core/tree/visitDelta.d.ts.map +1 -1
- package/dist/core/tree/visitDelta.js.map +1 -1
- package/dist/core/tree/visitorUtils.d.ts +2 -2
- package/dist/core/tree/visitorUtils.d.ts.map +1 -1
- package/dist/core/tree/visitorUtils.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkTree.d.ts +1 -1
- package/dist/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkTree.js +1 -1
- package/dist/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkedForest.d.ts +1 -1
- package/dist/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkedForest.js +1 -1
- package/dist/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +2 -2
- package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts +8 -2
- package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/codecs.js +12 -1
- package/dist/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +1 -1
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/index.d.ts +1 -1
- package/dist/feature-libraries/chunked-forest/codec/index.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/index.js +2 -1
- package/dist/feature-libraries/chunked-forest/codec/index.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/nodeShape.js +1 -1
- package/dist/feature-libraries/chunked-forest/codec/nodeShape.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +1 -1
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/emptyChunk.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/emptyChunk.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/index.d.ts +1 -1
- package/dist/feature-libraries/chunked-forest/index.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/index.js +2 -1
- package/dist/feature-libraries/chunked-forest/index.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/sequenceChunk.d.ts +1 -1
- package/dist/feature-libraries/chunked-forest/sequenceChunk.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/sequenceChunk.js +4 -4
- package/dist/feature-libraries/chunked-forest/sequenceChunk.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/uniformChunk.d.ts +1 -1
- package/dist/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/uniformChunk.js +1 -1
- package/dist/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
- package/dist/feature-libraries/default-schema/index.d.ts +1 -1
- package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/index.js +2 -1
- package/dist/feature-libraries/default-schema/index.js.map +1 -1
- package/dist/feature-libraries/default-schema/mappedEditBuilder.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/mappedEditBuilder.js.map +1 -1
- package/dist/feature-libraries/default-schema/schemaChecker.d.ts +4 -0
- package/dist/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/schemaChecker.js +35 -26
- package/dist/feature-libraries/default-schema/schemaChecker.js.map +1 -1
- package/dist/feature-libraries/flex-tree/context.d.ts +16 -14
- package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/context.js +12 -18
- package/dist/feature-libraries/flex-tree/context.js.map +1 -1
- package/dist/feature-libraries/flex-tree/index.d.ts +1 -1
- package/dist/feature-libraries/flex-tree/index.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/index.js +1 -2
- package/dist/feature-libraries/flex-tree/index.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.d.ts +1 -5
- package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.js +2 -16
- package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/dist/feature-libraries/flex-tree/utilities.d.ts +6 -6
- package/dist/feature-libraries/flex-tree/utilities.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/utilities.js +6 -7
- package/dist/feature-libraries/flex-tree/utilities.js.map +1 -1
- package/dist/feature-libraries/index.d.ts +3 -3
- package/dist/feature-libraries/index.d.ts.map +1 -1
- package/dist/feature-libraries/index.js +3 -2
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/initializeForest.d.ts.map +1 -1
- package/dist/feature-libraries/initializeForest.js.map +1 -1
- package/dist/feature-libraries/treeCursorUtils.d.ts.map +1 -1
- package/dist/feature-libraries/treeCursorUtils.js +1 -1
- package/dist/feature-libraries/treeCursorUtils.js.map +1 -1
- package/dist/feature-libraries/valueUtilities.d.ts.map +1 -1
- package/dist/feature-libraries/valueUtilities.js +6 -6
- package/dist/feature-libraries/valueUtilities.js.map +1 -1
- package/dist/jsonDomainSchema.d.ts.map +1 -1
- package/dist/jsonDomainSchema.js.map +1 -1
- 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.map +1 -1
- package/dist/serializableDomainSchema.js.map +1 -1
- package/dist/shared-tree/checkoutFlexTreeView.d.ts +7 -3
- package/dist/shared-tree/checkoutFlexTreeView.d.ts.map +1 -1
- package/dist/shared-tree/checkoutFlexTreeView.js +11 -2
- package/dist/shared-tree/checkoutFlexTreeView.js.map +1 -1
- package/dist/shared-tree/schematizingTreeView.d.ts +3 -0
- package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +10 -5
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree/treeAlpha.d.ts +9 -4
- package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
- package/dist/shared-tree/treeAlpha.js +20 -8
- package/dist/shared-tree/treeAlpha.js.map +1 -1
- package/dist/sharedTreeAttributes.d.ts.map +1 -1
- package/dist/sharedTreeAttributes.js.map +1 -1
- package/dist/simple-tree/api/create.d.ts +5 -1
- package/dist/simple-tree/api/create.d.ts.map +1 -1
- package/dist/simple-tree/api/create.js +11 -12
- package/dist/simple-tree/api/create.js.map +1 -1
- package/dist/simple-tree/api/index.d.ts +3 -3
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js +4 -2
- package/dist/simple-tree/api/index.js.map +1 -1
- package/dist/simple-tree/api/storedSchema.d.ts +1 -8
- package/dist/simple-tree/api/storedSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/storedSchema.js +3 -14
- package/dist/simple-tree/api/storedSchema.js.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.d.ts +8 -0
- package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.js +3 -1
- package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
- package/dist/simple-tree/arrayNode.d.ts.map +1 -1
- package/dist/simple-tree/arrayNode.js +3 -9
- package/dist/simple-tree/arrayNode.js.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/treeNodeKernel.d.ts +5 -17
- package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js +17 -48
- package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/dist/simple-tree/core/unhydratedFlexTree.d.ts +4 -4
- package/dist/simple-tree/core/unhydratedFlexTree.js +4 -4
- package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
- package/dist/simple-tree/getTreeNodeForField.d.ts +12 -0
- package/dist/simple-tree/getTreeNodeForField.d.ts.map +1 -0
- package/dist/simple-tree/getTreeNodeForField.js +39 -0
- package/dist/simple-tree/getTreeNodeForField.js.map +1 -0
- package/dist/simple-tree/index.d.ts +3 -2
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +10 -6
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/mapNode.d.ts.map +1 -1
- package/dist/simple-tree/mapNode.js +21 -24
- package/dist/simple-tree/mapNode.js.map +1 -1
- package/dist/simple-tree/objectNode.d.ts.map +1 -1
- package/dist/simple-tree/objectNode.js +5 -7
- package/dist/simple-tree/objectNode.js.map +1 -1
- package/dist/simple-tree/prepareForInsertion.d.ts +42 -0
- package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -0
- package/dist/simple-tree/prepareForInsertion.js +166 -0
- package/dist/simple-tree/prepareForInsertion.js.map +1 -0
- package/dist/simple-tree/toMapTree.d.ts +4 -9
- package/dist/simple-tree/toMapTree.d.ts.map +1 -1
- package/dist/simple-tree/toMapTree.js +4 -23
- package/dist/simple-tree/toMapTree.js.map +1 -1
- package/dist/tableSchema.d.ts +201 -104
- package/dist/tableSchema.d.ts.map +1 -1
- package/dist/tableSchema.js +155 -58
- package/dist/tableSchema.js.map +1 -1
- package/dist/treeFactory.d.ts.map +1 -1
- package/dist/treeFactory.js +2 -2
- package/dist/treeFactory.js.map +1 -1
- package/lib/alpha.d.ts +2 -0
- package/lib/codec/codec.d.ts +42 -7
- package/lib/codec/codec.d.ts.map +1 -1
- package/lib/codec/codec.js +50 -8
- package/lib/codec/codec.js.map +1 -1
- package/lib/core/change-family/editBuilder.d.ts.map +1 -1
- package/lib/core/change-family/editBuilder.js.map +1 -1
- package/lib/core/forest/forest.d.ts.map +1 -1
- package/lib/core/forest/forest.js.map +1 -1
- package/lib/core/schema-stored/schema.d.ts.map +1 -1
- package/lib/core/schema-stored/schema.js.map +1 -1
- package/lib/core/schema-stored/storedSchemaRepository.d.ts +1 -1
- package/lib/core/schema-stored/storedSchemaRepository.d.ts.map +1 -1
- package/lib/core/schema-stored/storedSchemaRepository.js +1 -1
- package/lib/core/schema-stored/storedSchemaRepository.js.map +1 -1
- package/lib/core/tree/anchorSet.d.ts.map +1 -1
- package/lib/core/tree/anchorSet.js +2 -2
- package/lib/core/tree/anchorSet.js.map +1 -1
- package/lib/core/tree/chunk.d.ts.map +1 -1
- package/lib/core/tree/chunk.js.map +1 -1
- package/lib/core/tree/delta.d.ts.map +1 -1
- package/lib/core/tree/delta.js.map +1 -1
- package/lib/core/tree/deltaUtil.d.ts.map +1 -1
- package/lib/core/tree/deltaUtil.js.map +1 -1
- package/lib/core/tree/detachedFieldIndex.d.ts +1 -1
- package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndex.js.map +1 -1
- package/lib/core/tree/detachedFieldIndexCodec.d.ts +1 -1
- package/lib/core/tree/detachedFieldIndexCodec.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndexCodec.js +1 -1
- package/lib/core/tree/detachedFieldIndexCodec.js.map +1 -1
- package/lib/core/tree/pathTree.d.ts.map +1 -1
- package/lib/core/tree/pathTree.js.map +1 -1
- package/lib/core/tree/treeTextFormat.d.ts.map +1 -1
- package/lib/core/tree/treeTextFormat.js.map +1 -1
- package/lib/core/tree/visitDelta.d.ts +1 -1
- package/lib/core/tree/visitDelta.d.ts.map +1 -1
- package/lib/core/tree/visitDelta.js.map +1 -1
- package/lib/core/tree/visitorUtils.d.ts +2 -2
- package/lib/core/tree/visitorUtils.d.ts.map +1 -1
- package/lib/core/tree/visitorUtils.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkTree.d.ts +1 -1
- package/lib/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkTree.js +1 -1
- package/lib/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkedForest.d.ts +1 -1
- package/lib/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkedForest.js +1 -1
- package/lib/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +2 -2
- package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts +8 -2
- package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/codecs.js +10 -0
- package/lib/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +1 -1
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/index.d.ts +1 -1
- package/lib/feature-libraries/chunked-forest/codec/index.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/index.js +1 -1
- package/lib/feature-libraries/chunked-forest/codec/index.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/nodeShape.js +1 -1
- package/lib/feature-libraries/chunked-forest/codec/nodeShape.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +1 -1
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/emptyChunk.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/emptyChunk.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/index.d.ts +1 -1
- package/lib/feature-libraries/chunked-forest/index.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/index.js +1 -1
- package/lib/feature-libraries/chunked-forest/index.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/sequenceChunk.d.ts +1 -1
- package/lib/feature-libraries/chunked-forest/sequenceChunk.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/sequenceChunk.js +1 -1
- package/lib/feature-libraries/chunked-forest/sequenceChunk.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/uniformChunk.d.ts +1 -1
- package/lib/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/uniformChunk.js +1 -1
- package/lib/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
- package/lib/feature-libraries/default-schema/index.d.ts +1 -1
- package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/index.js +1 -1
- package/lib/feature-libraries/default-schema/index.js.map +1 -1
- package/lib/feature-libraries/default-schema/mappedEditBuilder.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/mappedEditBuilder.js.map +1 -1
- package/lib/feature-libraries/default-schema/schemaChecker.d.ts +4 -0
- package/lib/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/schemaChecker.js +33 -25
- package/lib/feature-libraries/default-schema/schemaChecker.js.map +1 -1
- package/lib/feature-libraries/flex-tree/context.d.ts +16 -14
- package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/context.js +11 -16
- package/lib/feature-libraries/flex-tree/context.js.map +1 -1
- package/lib/feature-libraries/flex-tree/index.d.ts +1 -1
- package/lib/feature-libraries/flex-tree/index.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/index.js +1 -1
- package/lib/feature-libraries/flex-tree/index.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.d.ts +1 -5
- package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.js +1 -14
- package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/lib/feature-libraries/flex-tree/utilities.d.ts +6 -6
- package/lib/feature-libraries/flex-tree/utilities.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/utilities.js +6 -7
- package/lib/feature-libraries/flex-tree/utilities.js.map +1 -1
- package/lib/feature-libraries/index.d.ts +3 -3
- package/lib/feature-libraries/index.d.ts.map +1 -1
- package/lib/feature-libraries/index.js +3 -3
- package/lib/feature-libraries/index.js.map +1 -1
- package/lib/feature-libraries/initializeForest.d.ts.map +1 -1
- package/lib/feature-libraries/initializeForest.js.map +1 -1
- package/lib/feature-libraries/treeCursorUtils.d.ts.map +1 -1
- package/lib/feature-libraries/treeCursorUtils.js +1 -1
- package/lib/feature-libraries/treeCursorUtils.js.map +1 -1
- package/lib/feature-libraries/valueUtilities.d.ts.map +1 -1
- package/lib/feature-libraries/valueUtilities.js +1 -1
- package/lib/feature-libraries/valueUtilities.js.map +1 -1
- package/lib/jsonDomainSchema.d.ts.map +1 -1
- package/lib/jsonDomainSchema.js.map +1 -1
- 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.map +1 -1
- package/lib/serializableDomainSchema.js.map +1 -1
- package/lib/shared-tree/checkoutFlexTreeView.d.ts +7 -3
- package/lib/shared-tree/checkoutFlexTreeView.d.ts.map +1 -1
- package/lib/shared-tree/checkoutFlexTreeView.js +12 -3
- package/lib/shared-tree/checkoutFlexTreeView.js.map +1 -1
- package/lib/shared-tree/schematizingTreeView.d.ts +3 -0
- package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +11 -6
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/shared-tree/treeAlpha.d.ts +9 -4
- package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
- package/lib/shared-tree/treeAlpha.js +22 -10
- package/lib/shared-tree/treeAlpha.js.map +1 -1
- package/lib/sharedTreeAttributes.d.ts.map +1 -1
- package/lib/sharedTreeAttributes.js.map +1 -1
- package/lib/simple-tree/api/create.d.ts +5 -1
- package/lib/simple-tree/api/create.d.ts.map +1 -1
- package/lib/simple-tree/api/create.js +9 -11
- package/lib/simple-tree/api/create.js.map +1 -1
- package/lib/simple-tree/api/index.d.ts +3 -3
- package/lib/simple-tree/api/index.d.ts.map +1 -1
- package/lib/simple-tree/api/index.js +3 -3
- package/lib/simple-tree/api/index.js.map +1 -1
- package/lib/simple-tree/api/storedSchema.d.ts +1 -8
- package/lib/simple-tree/api/storedSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/storedSchema.js +2 -12
- package/lib/simple-tree/api/storedSchema.js.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.d.ts +8 -0
- package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.js +2 -2
- package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
- package/lib/simple-tree/arrayNode.d.ts.map +1 -1
- package/lib/simple-tree/arrayNode.js +4 -10
- package/lib/simple-tree/arrayNode.js.map +1 -1
- package/lib/simple-tree/core/getOrCreateNode.js +2 -2
- package/lib/simple-tree/core/getOrCreateNode.js.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.d.ts +5 -17
- package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js +16 -47
- package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.d.ts +4 -4
- package/lib/simple-tree/core/unhydratedFlexTree.js +4 -4
- package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
- package/lib/simple-tree/getTreeNodeForField.d.ts +12 -0
- package/lib/simple-tree/getTreeNodeForField.d.ts.map +1 -0
- package/lib/simple-tree/getTreeNodeForField.js +35 -0
- package/lib/simple-tree/getTreeNodeForField.js.map +1 -0
- package/lib/simple-tree/index.d.ts +3 -2
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +3 -2
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/mapNode.d.ts.map +1 -1
- package/lib/simple-tree/mapNode.js +3 -6
- package/lib/simple-tree/mapNode.js.map +1 -1
- package/lib/simple-tree/objectNode.d.ts.map +1 -1
- package/lib/simple-tree/objectNode.js +4 -6
- package/lib/simple-tree/objectNode.js.map +1 -1
- package/lib/simple-tree/prepareForInsertion.d.ts +42 -0
- package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -0
- package/lib/simple-tree/prepareForInsertion.js +160 -0
- package/lib/simple-tree/prepareForInsertion.js.map +1 -0
- package/lib/simple-tree/toMapTree.d.ts +4 -9
- package/lib/simple-tree/toMapTree.d.ts.map +1 -1
- package/lib/simple-tree/toMapTree.js +4 -22
- package/lib/simple-tree/toMapTree.js.map +1 -1
- package/lib/tableSchema.d.ts +201 -104
- package/lib/tableSchema.d.ts.map +1 -1
- package/lib/tableSchema.js +156 -59
- package/lib/tableSchema.js.map +1 -1
- package/lib/treeFactory.d.ts.map +1 -1
- package/lib/treeFactory.js +2 -2
- package/lib/treeFactory.js.map +1 -1
- package/lib/tsdoc-metadata.json +1 -1
- package/package.json +25 -25
- package/src/codec/codec.ts +54 -8
- package/src/core/change-family/editBuilder.ts +1 -0
- package/src/core/forest/forest.ts +1 -1
- package/src/core/schema-stored/schema.ts +2 -0
- package/src/core/schema-stored/storedSchemaRepository.ts +2 -2
- package/src/core/tree/anchorSet.ts +4 -4
- package/src/core/tree/chunk.ts +2 -1
- package/src/core/tree/delta.ts +1 -0
- package/src/core/tree/deltaUtil.ts +1 -1
- package/src/core/tree/detachedFieldIndex.ts +1 -1
- package/src/core/tree/detachedFieldIndexCodec.ts +2 -2
- package/src/core/tree/pathTree.ts +1 -1
- package/src/core/tree/treeTextFormat.ts +1 -0
- package/src/core/tree/visitDelta.ts +1 -1
- package/src/core/tree/visitorUtils.ts +3 -2
- 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/chunkDecoding.ts +5 -5
- package/src/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.ts +2 -2
- package/src/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.ts +1 -0
- package/src/feature-libraries/chunked-forest/codec/codecs.ts +15 -1
- package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +1 -1
- package/src/feature-libraries/chunked-forest/codec/index.ts +1 -0
- package/src/feature-libraries/chunked-forest/codec/nodeShape.ts +1 -1
- package/src/feature-libraries/chunked-forest/codec/schemaBasedEncode.ts +1 -1
- package/src/feature-libraries/chunked-forest/emptyChunk.ts +1 -0
- package/src/feature-libraries/chunked-forest/index.ts +1 -0
- package/src/feature-libraries/chunked-forest/sequenceChunk.ts +1 -1
- package/src/feature-libraries/chunked-forest/uniformChunk.ts +2 -3
- package/src/feature-libraries/default-schema/defaultEditBuilder.ts +1 -1
- package/src/feature-libraries/default-schema/defaultFieldKinds.ts +1 -0
- package/src/feature-libraries/default-schema/index.ts +6 -1
- package/src/feature-libraries/default-schema/mappedEditBuilder.ts +1 -0
- package/src/feature-libraries/default-schema/schemaChecker.ts +37 -26
- package/src/feature-libraries/flex-tree/context.ts +18 -20
- package/src/feature-libraries/flex-tree/index.ts +0 -1
- package/src/feature-libraries/flex-tree/lazyField.ts +2 -14
- package/src/feature-libraries/flex-tree/utilities.ts +8 -8
- package/src/feature-libraries/index.ts +2 -1
- package/src/feature-libraries/initializeForest.ts +1 -1
- package/src/feature-libraries/treeCursorUtils.ts +1 -1
- package/src/feature-libraries/valueUtilities.ts +1 -1
- package/src/jsonDomainSchema.ts +0 -1
- package/src/packageVersion.ts +1 -1
- package/src/serializableDomainSchema.ts +1 -0
- package/src/shared-tree/checkoutFlexTreeView.ts +10 -6
- package/src/shared-tree/schematizingTreeView.ts +11 -12
- package/src/shared-tree/treeAlpha.ts +50 -13
- package/src/sharedTreeAttributes.ts +1 -0
- package/src/simple-tree/api/create.ts +17 -16
- package/src/simple-tree/api/index.ts +13 -3
- package/src/simple-tree/api/storedSchema.ts +2 -19
- package/src/simple-tree/api/treeNodeApi.ts +2 -2
- package/src/simple-tree/arrayNode.ts +9 -20
- package/src/simple-tree/core/getOrCreateNode.ts +2 -2
- package/src/simple-tree/core/treeNodeKernel.ts +22 -53
- package/src/simple-tree/core/unhydratedFlexTree.ts +4 -4
- package/src/simple-tree/getTreeNodeForField.ts +46 -0
- package/src/simple-tree/index.ts +8 -5
- package/src/simple-tree/mapNode.ts +8 -12
- package/src/simple-tree/objectNode.ts +3 -12
- package/src/simple-tree/prepareForInsertion.ts +276 -0
- package/src/simple-tree/toMapTree.ts +3 -27
- package/src/tableSchema.ts +351 -138
- package/src/treeFactory.ts +2 -4
- package/dist/simple-tree/proxies.d.ts +0 -23
- package/dist/simple-tree/proxies.d.ts.map +0 -1
- package/dist/simple-tree/proxies.js +0 -135
- package/dist/simple-tree/proxies.js.map +0 -1
- package/lib/simple-tree/proxies.d.ts +0 -23
- package/lib/simple-tree/proxies.d.ts.map +0 -1
- package/lib/simple-tree/proxies.js +0 -130
- package/lib/simple-tree/proxies.js.map +0 -1
- package/src/simple-tree/proxies.ts +0 -191
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type {
|
|
7
|
+
ExclusiveMapTree,
|
|
8
|
+
SchemaAndPolicy,
|
|
9
|
+
IForestSubscription,
|
|
10
|
+
MapTree,
|
|
11
|
+
UpPath,
|
|
12
|
+
NodeIndex,
|
|
13
|
+
FieldKey,
|
|
14
|
+
DetachedField,
|
|
15
|
+
TreeFieldStoredSchema,
|
|
16
|
+
} from "../core/index.js";
|
|
17
|
+
import {
|
|
18
|
+
type FlexTreeContext,
|
|
19
|
+
getSchemaAndPolicy,
|
|
20
|
+
type FlexTreeHydratedContext,
|
|
21
|
+
FieldKinds,
|
|
22
|
+
} from "../feature-libraries/index.js";
|
|
23
|
+
import {
|
|
24
|
+
normalizeFieldSchema,
|
|
25
|
+
type ImplicitAllowedTypes,
|
|
26
|
+
type ImplicitFieldSchema,
|
|
27
|
+
} from "./schemaTypes.js";
|
|
28
|
+
import { type InsertableContent, mapTreeFromNodeData } from "./toMapTree.js";
|
|
29
|
+
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
30
|
+
import { brand } from "../util/index.js";
|
|
31
|
+
import {
|
|
32
|
+
getKernel,
|
|
33
|
+
type TreeNode,
|
|
34
|
+
tryUnhydratedFlexTreeNode,
|
|
35
|
+
unhydratedFlexTreeNodeToTreeNode,
|
|
36
|
+
} from "./core/index.js";
|
|
37
|
+
import { debugAssert, oob } from "@fluidframework/core-utils/internal";
|
|
38
|
+
import { inSchemaOrThrow, isFieldInSchema } from "../feature-libraries/index.js";
|
|
39
|
+
import { convertField } from "./toStoredSchema.js";
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Prepare content from a user for insertion into a tree.
|
|
43
|
+
* @remarks
|
|
44
|
+
* This validates and converts the input, and if necessary invokes {@link prepareContentForHydration}.
|
|
45
|
+
*
|
|
46
|
+
* The next edit made to `destinationContext`'s forest must be the creation of a detached field containing this content,
|
|
47
|
+
* (Triggering {@link ForestEvents.afterRootFieldCreated}) otherwise hydration will break.
|
|
48
|
+
*/
|
|
49
|
+
export function prepareForInsertion<TIn extends InsertableContent | undefined>(
|
|
50
|
+
data: TIn,
|
|
51
|
+
schema: ImplicitFieldSchema,
|
|
52
|
+
destinationContext: FlexTreeContext,
|
|
53
|
+
): TIn extends undefined ? undefined : ExclusiveMapTree {
|
|
54
|
+
return prepareForInsertionContextless(
|
|
55
|
+
data,
|
|
56
|
+
schema,
|
|
57
|
+
getSchemaAndPolicy(destinationContext),
|
|
58
|
+
destinationContext.isHydrated() ? destinationContext : undefined,
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* {@link prepareForInsertion} but batched for array content.
|
|
64
|
+
* @remarks
|
|
65
|
+
* This is for inserting items into an array, not a inserting a {@link TreeArrayNode} (that would use {@link prepareForInsertion}).
|
|
66
|
+
*
|
|
67
|
+
* The next edits made to `destinationContext`'s forest must be the creation of a detached field.
|
|
68
|
+
* One edit for each item in `data`, in order.
|
|
69
|
+
*
|
|
70
|
+
* @privateRemarks
|
|
71
|
+
* This has to be done as a single operation for all items in data
|
|
72
|
+
* (as opposed to mapping {@link prepareForInsertion} over the array)
|
|
73
|
+
* due to how the eventing in prepareContentForHydration works.
|
|
74
|
+
*/
|
|
75
|
+
export function prepareArrayContentForInsertion(
|
|
76
|
+
data: readonly InsertableContent[],
|
|
77
|
+
schema: ImplicitAllowedTypes,
|
|
78
|
+
destinationContext: FlexTreeContext,
|
|
79
|
+
): ExclusiveMapTree[] {
|
|
80
|
+
const mapTrees: ExclusiveMapTree[] = data.map((item) =>
|
|
81
|
+
mapTreeFromNodeData(
|
|
82
|
+
item,
|
|
83
|
+
schema,
|
|
84
|
+
destinationContext.isHydrated() ? destinationContext.nodeKeyManager : undefined,
|
|
85
|
+
),
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
const fieldSchema = convertField(normalizeFieldSchema(schema));
|
|
89
|
+
|
|
90
|
+
validateAndPrepare(
|
|
91
|
+
getSchemaAndPolicy(destinationContext),
|
|
92
|
+
destinationContext.isHydrated() ? destinationContext : undefined,
|
|
93
|
+
{ kind: FieldKinds.sequence.identifier, types: fieldSchema.types },
|
|
94
|
+
mapTrees,
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
return mapTrees;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Split out from {@link prepareForInsertion} as to allow use without a context.
|
|
102
|
+
*
|
|
103
|
+
* @param hydratedData - If specified, the `mapTrees` will be prepared for hydration into this context.
|
|
104
|
+
* `undefined` when `mapTrees` are being inserted into an {@link Unhydrated} tree.
|
|
105
|
+
*
|
|
106
|
+
* @remarks
|
|
107
|
+
* Adding this entry point is a workaround for initialize not currently having a context.
|
|
108
|
+
*/
|
|
109
|
+
export function prepareForInsertionContextless<TIn extends InsertableContent | undefined>(
|
|
110
|
+
data: TIn,
|
|
111
|
+
schema: ImplicitFieldSchema,
|
|
112
|
+
schemaAndPolicy: SchemaAndPolicy,
|
|
113
|
+
hydratedData: Pick<FlexTreeHydratedContext, "checkout" | "nodeKeyManager"> | undefined,
|
|
114
|
+
): TIn extends undefined ? undefined : ExclusiveMapTree {
|
|
115
|
+
const mapTree = mapTreeFromNodeData(data, schema, hydratedData?.nodeKeyManager);
|
|
116
|
+
|
|
117
|
+
const contentArray = mapTree === undefined ? [] : [mapTree];
|
|
118
|
+
const fieldSchema = convertField(normalizeFieldSchema(schema));
|
|
119
|
+
validateAndPrepare(schemaAndPolicy, hydratedData, fieldSchema, contentArray);
|
|
120
|
+
|
|
121
|
+
return mapTree as TIn extends undefined ? undefined : ExclusiveMapTree;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* If hydrating, do a final validation against the schema and prepare the content for hydration.
|
|
126
|
+
*
|
|
127
|
+
* @param hydratedData - If specified, the `mapTrees` will be prepared for hydration into this context.
|
|
128
|
+
* `undefined` when `mapTrees` are being inserted into an {@link Unhydrated} tree.
|
|
129
|
+
*/
|
|
130
|
+
function validateAndPrepare(
|
|
131
|
+
schemaAndPolicy: SchemaAndPolicy,
|
|
132
|
+
hydratedData: Pick<FlexTreeHydratedContext, "checkout" | "nodeKeyManager"> | undefined,
|
|
133
|
+
fieldSchema: TreeFieldStoredSchema,
|
|
134
|
+
mapTrees: ExclusiveMapTree[],
|
|
135
|
+
): void {
|
|
136
|
+
if (hydratedData !== undefined) {
|
|
137
|
+
if (schemaAndPolicy.policy.validateSchema === true) {
|
|
138
|
+
const maybeError = isFieldInSchema(mapTrees, fieldSchema, schemaAndPolicy);
|
|
139
|
+
inSchemaOrThrow(maybeError);
|
|
140
|
+
}
|
|
141
|
+
prepareContentForHydration(mapTrees, hydratedData.checkout.forest);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* An {@link UpPath} that is just index zero in a {@link DetachedField} which can be modified at a later time.
|
|
147
|
+
*/
|
|
148
|
+
interface Root extends UpPath {
|
|
149
|
+
readonly parent: undefined;
|
|
150
|
+
parentField: DetachedField & FieldKey;
|
|
151
|
+
readonly parentIndex: NodeIndex & 0;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* The path from the included node to the root of the content tree it was inserted as part of.
|
|
156
|
+
*/
|
|
157
|
+
interface RelativeNodePath {
|
|
158
|
+
readonly path: UpPath;
|
|
159
|
+
readonly node: TreeNode;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* {@link RelativeNodePath}s for every {@link TreeNode} in the content tree inserted as an atomic operation.
|
|
164
|
+
*/
|
|
165
|
+
interface LocatedNodesBatch {
|
|
166
|
+
/**
|
|
167
|
+
* UpPath shared by all {@link RelativeNodePath}s in this batch corresponding to the root of the inserted content.
|
|
168
|
+
*/
|
|
169
|
+
readonly rootPath: Root;
|
|
170
|
+
readonly paths: RelativeNodePath[];
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* A dummy key value used in {@link LocatedNodesBatch.rootPath} which will be replaced with the actual detached field once it is known.
|
|
175
|
+
*/
|
|
176
|
+
const placeholderKey: DetachedField & FieldKey = brand("placeholder" as const);
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Records any proxies in the given content tree and does the necessary bookkeeping to ensure they are synchronized with subsequent reads of the tree.
|
|
180
|
+
* @remarks If the content tree contains any proxies, this function must be called just prior to inserting the content into the tree.
|
|
181
|
+
* Specifically, no other content may be inserted into the tree between the invocation of this function and the insertion of `content`.
|
|
182
|
+
* The insertion of `content` must occur or else this function will cause memory leaks.
|
|
183
|
+
* @param content - the content subsequence to be inserted, of which might deeply contain {@link TreeNode}s which need to be hydrated.
|
|
184
|
+
* @param forest - the forest the content is being inserted into.
|
|
185
|
+
* See {@link extractFactoryContent} for more details.
|
|
186
|
+
*/
|
|
187
|
+
function prepareContentForHydration(
|
|
188
|
+
content: readonly MapTree[],
|
|
189
|
+
forest: IForestSubscription,
|
|
190
|
+
): void {
|
|
191
|
+
const batches: LocatedNodesBatch[] = [];
|
|
192
|
+
for (const item of content) {
|
|
193
|
+
const batch: LocatedNodesBatch = {
|
|
194
|
+
rootPath: {
|
|
195
|
+
parent: undefined,
|
|
196
|
+
parentField: placeholderKey,
|
|
197
|
+
parentIndex: 0,
|
|
198
|
+
},
|
|
199
|
+
paths: [],
|
|
200
|
+
};
|
|
201
|
+
batches.push(batch);
|
|
202
|
+
walkMapTree(item, batch.rootPath, (p, node) => {
|
|
203
|
+
batch.paths.push({ path: p, node });
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
scheduleHydration(batches, forest);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
function walkMapTree(
|
|
211
|
+
mapTree: MapTree,
|
|
212
|
+
path: UpPath,
|
|
213
|
+
onVisitTreeNode: (path: UpPath, treeNode: TreeNode) => void,
|
|
214
|
+
): void {
|
|
215
|
+
if (tryUnhydratedFlexTreeNode(mapTree)?.parentField.parent.parent !== undefined) {
|
|
216
|
+
throw new UsageError(
|
|
217
|
+
"Attempted to insert a node which is already under a parent. If this is desired, remove the node from its parent before inserting it elsewhere.",
|
|
218
|
+
);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
type Next = [path: UpPath, tree: MapTree];
|
|
222
|
+
const nexts: Next[] = [];
|
|
223
|
+
for (let next: Next | undefined = [path, mapTree]; next !== undefined; next = nexts.pop()) {
|
|
224
|
+
const [p, m] = next;
|
|
225
|
+
const mapTreeNode = tryUnhydratedFlexTreeNode(m);
|
|
226
|
+
if (mapTreeNode !== undefined) {
|
|
227
|
+
const treeNode = unhydratedFlexTreeNodeToTreeNode.get(mapTreeNode);
|
|
228
|
+
if (treeNode !== undefined) {
|
|
229
|
+
onVisitTreeNode(p, treeNode);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
for (const [key, field] of m.fields) {
|
|
234
|
+
for (const [i, child] of field.entries()) {
|
|
235
|
+
nexts.push([
|
|
236
|
+
{
|
|
237
|
+
parent: p,
|
|
238
|
+
parentField: key,
|
|
239
|
+
parentIndex: i,
|
|
240
|
+
},
|
|
241
|
+
child,
|
|
242
|
+
]);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Register events which will hydrate batches of nodes when they are inserted.
|
|
250
|
+
* The next edits to forest must be their insertions, in order, or data corruption can occur.
|
|
251
|
+
* @param locatedNodes - the nodes to register with the forest.
|
|
252
|
+
* Each index in this array expects its content to be added and produce its own `afterRootFieldCreated` event.
|
|
253
|
+
* If array subsequence insertion is optimized to produce a single event, this will not work correctly as is, and will need to be modified to take in a single {@link LocatedNodesBatch}.
|
|
254
|
+
*/
|
|
255
|
+
function scheduleHydration(
|
|
256
|
+
locatedNodes: readonly LocatedNodesBatch[],
|
|
257
|
+
forest: IForestSubscription,
|
|
258
|
+
): void {
|
|
259
|
+
// Only subscribe to the event if there is at least one TreeNode tree to hydrate - this is not the case when inserting an empty array [].
|
|
260
|
+
if (locatedNodes.length > 0) {
|
|
261
|
+
// Creating a new array emits one event per element in the array, so listen to the event once for each element
|
|
262
|
+
let i = 0;
|
|
263
|
+
const off = forest.events.on("afterRootFieldCreated", (fieldKey) => {
|
|
264
|
+
// Indexing is safe here because of the length check above. This assumes the array has not been modified which should be the case.
|
|
265
|
+
const batch = locatedNodes[i] ?? oob();
|
|
266
|
+
debugAssert(() => batch.rootPath.parentField === placeholderKey);
|
|
267
|
+
batch.rootPath.parentField = brand(fieldKey);
|
|
268
|
+
for (const { path, node } of batch.paths) {
|
|
269
|
+
getKernel(node).hydrate(forest.anchors, path);
|
|
270
|
+
}
|
|
271
|
+
if (++i === locatedNodes.length) {
|
|
272
|
+
off();
|
|
273
|
+
}
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { assert, fail } from "@fluidframework/core-utils/internal";
|
|
6
|
+
import { assert, fail, unreachableCase } from "@fluidframework/core-utils/internal";
|
|
7
7
|
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
8
8
|
import { isFluidHandle } from "@fluidframework/runtime-utils/internal";
|
|
9
9
|
|
|
@@ -13,7 +13,6 @@ import {
|
|
|
13
13
|
type MapTree,
|
|
14
14
|
type TreeValue,
|
|
15
15
|
type ValueSchema,
|
|
16
|
-
type SchemaAndPolicy,
|
|
17
16
|
type ExclusiveMapTree,
|
|
18
17
|
} from "../core/index.js";
|
|
19
18
|
import {
|
|
@@ -47,7 +46,6 @@ import {
|
|
|
47
46
|
type Unhydrated,
|
|
48
47
|
UnhydratedFlexTreeNode,
|
|
49
48
|
} from "./core/index.js";
|
|
50
|
-
import { SchemaValidationErrors, isNodeInSchema } from "../feature-libraries/index.js";
|
|
51
49
|
import { isObjectNodeSchema } from "./objectNodeTypes.js";
|
|
52
50
|
import type { IFluidHandle } from "@fluidframework/core-interfaces";
|
|
53
51
|
|
|
@@ -105,19 +103,16 @@ export function mapTreeFromNodeData(
|
|
|
105
103
|
data: InsertableContent,
|
|
106
104
|
allowedTypes: ImplicitAllowedTypes,
|
|
107
105
|
context?: NodeIdentifierManager,
|
|
108
|
-
schemaValidationPolicy?: SchemaAndPolicy,
|
|
109
106
|
): ExclusiveMapTree;
|
|
110
107
|
export function mapTreeFromNodeData(
|
|
111
108
|
data: InsertableContent | undefined,
|
|
112
109
|
allowedTypes: ImplicitFieldSchema,
|
|
113
110
|
context?: NodeIdentifierManager,
|
|
114
|
-
schemaValidationPolicy?: SchemaAndPolicy,
|
|
115
111
|
): ExclusiveMapTree | undefined;
|
|
116
112
|
export function mapTreeFromNodeData(
|
|
117
113
|
data: InsertableContent | undefined,
|
|
118
114
|
allowedTypes: ImplicitFieldSchema,
|
|
119
115
|
context?: NodeIdentifierManager,
|
|
120
|
-
schemaValidationPolicy?: SchemaAndPolicy,
|
|
121
116
|
): ExclusiveMapTree | undefined {
|
|
122
117
|
const normalizedFieldSchema = normalizeFieldSchema(allowedTypes);
|
|
123
118
|
|
|
@@ -133,16 +128,6 @@ export function mapTreeFromNodeData(
|
|
|
133
128
|
// Add what defaults can be provided. If no `context` is providing, some defaults may still be missing.
|
|
134
129
|
addDefaultsToMapTree(mapTree, normalizedFieldSchema.allowedTypes, context);
|
|
135
130
|
|
|
136
|
-
if (schemaValidationPolicy?.policy.validateSchema === true) {
|
|
137
|
-
// TODO: BUG: AB#9131
|
|
138
|
-
// Since some defaults may still be missing, this can give false positives when context is undefined but schemaValidationPolicy is provided.
|
|
139
|
-
// For now disable this check when context is undefined:
|
|
140
|
-
if (context !== undefined) {
|
|
141
|
-
const maybeError = isNodeInSchema(mapTree, schemaValidationPolicy);
|
|
142
|
-
inSchemaOrThrow(maybeError);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
|
|
146
131
|
return mapTree;
|
|
147
132
|
}
|
|
148
133
|
|
|
@@ -196,21 +181,12 @@ function nodeDataToMapTree(
|
|
|
196
181
|
result = objectToMapTree(data, schema);
|
|
197
182
|
break;
|
|
198
183
|
default:
|
|
199
|
-
|
|
184
|
+
unreachableCase(schema.kind);
|
|
200
185
|
}
|
|
201
186
|
|
|
202
187
|
return result;
|
|
203
188
|
}
|
|
204
189
|
|
|
205
|
-
/**
|
|
206
|
-
* Throws a UsageError if maybeError indicates a tree is out of schema.
|
|
207
|
-
*/
|
|
208
|
-
export function inSchemaOrThrow(maybeError: SchemaValidationErrors): void {
|
|
209
|
-
if (maybeError !== SchemaValidationErrors.NoError) {
|
|
210
|
-
throw new UsageError("Tree does not conform to schema.");
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
|
|
214
190
|
/**
|
|
215
191
|
* Transforms data under a Leaf schema.
|
|
216
192
|
* @param data - The tree data to be transformed. Must be a {@link TreeValue}.
|
|
@@ -482,7 +458,7 @@ For class-based schema, this can be done by replacing an expression like "{foo:
|
|
|
482
458
|
}
|
|
483
459
|
|
|
484
460
|
/**
|
|
485
|
-
*
|
|
461
|
+
* Returns all types for which the data is schema-compatible.
|
|
486
462
|
*/
|
|
487
463
|
export function getPossibleTypes(
|
|
488
464
|
allowedTypes: ReadonlySet<TreeNodeSchema>,
|