@fluidframework/tree 2.10.0 → 2.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +29 -0
- package/api-report/tree.alpha.api.md +49 -18
- package/api-report/tree.beta.api.md +6 -15
- package/api-report/tree.legacy.alpha.api.md +6 -15
- package/api-report/tree.legacy.public.api.md +6 -15
- package/api-report/tree.public.api.md +6 -15
- package/dist/alpha.d.ts +9 -0
- package/dist/core/forest/forest.d.ts +10 -2
- package/dist/core/forest/forest.d.ts.map +1 -1
- package/dist/core/forest/forest.js.map +1 -1
- package/dist/core/index.d.ts +3 -3
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +6 -3
- package/dist/core/index.js.map +1 -1
- package/dist/core/rebase/utils.d.ts +1 -1
- package/dist/core/rebase/utils.d.ts.map +1 -1
- package/dist/core/rebase/utils.js +13 -17
- package/dist/core/rebase/utils.js.map +1 -1
- package/dist/core/revertible.d.ts +30 -1
- package/dist/core/revertible.d.ts.map +1 -1
- package/dist/core/revertible.js.map +1 -1
- package/dist/core/schema-stored/format.d.ts +0 -3
- package/dist/core/schema-stored/format.d.ts.map +1 -1
- package/dist/core/schema-stored/format.js.map +1 -1
- package/dist/core/schema-stored/schema.d.ts +12 -10
- package/dist/core/schema-stored/schema.d.ts.map +1 -1
- package/dist/core/schema-stored/schema.js +3 -5
- package/dist/core/schema-stored/schema.js.map +1 -1
- package/dist/core/schema-stored/storedSchemaRepository.d.ts +2 -2
- package/dist/core/schema-stored/storedSchemaRepository.d.ts.map +1 -1
- package/dist/core/schema-stored/storedSchemaRepository.js +5 -5
- package/dist/core/schema-stored/storedSchemaRepository.js.map +1 -1
- package/dist/core/schema-view/index.d.ts +1 -1
- package/dist/core/schema-view/index.d.ts.map +1 -1
- package/dist/core/schema-view/index.js +1 -2
- package/dist/core/schema-view/index.js.map +1 -1
- package/dist/core/schema-view/view.d.ts +0 -7
- package/dist/core/schema-view/view.d.ts.map +1 -1
- package/dist/core/schema-view/view.js +1 -12
- package/dist/core/schema-view/view.js.map +1 -1
- package/dist/core/tree/anchorSet.d.ts +2 -2
- package/dist/core/tree/anchorSet.d.ts.map +1 -1
- package/dist/core/tree/anchorSet.js +21 -21
- package/dist/core/tree/anchorSet.js.map +1 -1
- package/{lib/feature-libraries/chunked-forest → dist/core/tree}/chunk.d.ts +2 -1
- package/dist/core/tree/chunk.d.ts.map +1 -0
- package/dist/{feature-libraries/chunked-forest → core/tree}/chunk.js +2 -2
- package/dist/core/tree/chunk.js.map +1 -0
- package/dist/core/tree/detachedFieldIndexCodec.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndexCodec.js +3 -2
- package/dist/core/tree/detachedFieldIndexCodec.js.map +1 -1
- package/dist/core/tree/index.d.ts +2 -1
- package/dist/core/tree/index.d.ts.map +1 -1
- package/dist/core/tree/index.js +6 -1
- package/dist/core/tree/index.js.map +1 -1
- package/dist/core/tree/treeTextFormat.d.ts +0 -5
- package/dist/core/tree/treeTextFormat.d.ts.map +1 -1
- package/dist/core/tree/treeTextFormat.js.map +1 -1
- package/dist/core/tree/types.d.ts +0 -5
- package/dist/core/tree/types.d.ts.map +1 -1
- package/dist/core/tree/types.js +0 -1
- package/dist/core/tree/types.js.map +1 -1
- package/dist/core/tree/visitorUtils.d.ts +25 -1
- package/dist/core/tree/visitorUtils.d.ts.map +1 -1
- package/dist/core/tree/visitorUtils.js +29 -1
- package/dist/core/tree/visitorUtils.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/basicChunk.d.ts +1 -2
- package/dist/feature-libraries/chunked-forest/basicChunk.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/basicChunk.js +14 -14
- package/dist/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkTree.d.ts +1 -2
- package/dist/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkTree.js +2 -3
- package/dist/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkedForest.d.ts +5 -3
- package/dist/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkedForest.js +24 -14
- package/dist/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkCodecUtilities.d.ts +1 -2
- package/dist/feature-libraries/chunked-forest/codec/chunkCodecUtilities.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkCodecUtilities.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +1 -2
- 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 +1 -1
- 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/emptyChunk.d.ts +1 -1
- package/dist/feature-libraries/chunked-forest/emptyChunk.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/emptyChunk.js +2 -3
- 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 +5 -5
- 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 +2 -2
- package/dist/feature-libraries/chunked-forest/sequenceChunk.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/uniformChunk.d.ts +1 -2
- package/dist/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/uniformChunk.js +14 -14
- package/dist/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultSchema.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultSchema.js +1 -0
- package/dist/feature-libraries/default-schema/defaultSchema.js.map +1 -1
- package/dist/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/schemaChecker.js +2 -1
- package/dist/feature-libraries/default-schema/schemaChecker.js.map +1 -1
- package/dist/feature-libraries/flex-tree/context.d.ts +1 -1
- package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/context.js.map +1 -1
- package/dist/feature-libraries/index.d.ts +2 -1
- package/dist/feature-libraries/index.d.ts.map +1 -1
- package/dist/feature-libraries/index.js +9 -2
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/indexing/anchorTreeIndex.d.ts +139 -0
- package/dist/feature-libraries/indexing/anchorTreeIndex.d.ts.map +1 -0
- package/dist/feature-libraries/indexing/anchorTreeIndex.js +387 -0
- package/dist/feature-libraries/indexing/anchorTreeIndex.js.map +1 -0
- package/dist/feature-libraries/indexing/index.d.ts +7 -0
- package/dist/feature-libraries/indexing/index.d.ts.map +1 -0
- package/dist/feature-libraries/indexing/index.js +11 -0
- package/dist/feature-libraries/indexing/index.js.map +1 -0
- package/dist/feature-libraries/indexing/types.d.ts +32 -0
- package/dist/feature-libraries/indexing/types.d.ts.map +1 -0
- package/dist/{events/interop.js → feature-libraries/indexing/types.js} +1 -1
- package/dist/feature-libraries/indexing/types.js.map +1 -0
- package/dist/feature-libraries/modular-schema/discrepancies.d.ts +84 -24
- package/dist/feature-libraries/modular-schema/discrepancies.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/discrepancies.js +32 -33
- package/dist/feature-libraries/modular-schema/discrepancies.js.map +1 -1
- package/dist/feature-libraries/modular-schema/index.d.ts +1 -1
- package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/index.js +5 -1
- package/dist/feature-libraries/modular-schema/index.js.map +1 -1
- package/dist/feature-libraries/modular-schema/isNeverTree.d.ts +0 -1
- package/dist/feature-libraries/modular-schema/isNeverTree.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/isNeverTree.js +0 -1
- package/dist/feature-libraries/modular-schema/isNeverTree.js.map +1 -1
- package/dist/feature-libraries/object-forest/objectForest.d.ts +5 -2
- package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
- package/dist/feature-libraries/object-forest/objectForest.js +21 -11
- package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts +6 -6
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts.map +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts +7 -7
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts.map +1 -1
- package/dist/feature-libraries/schema-edits/schemaChangeFormat.d.ts +12 -12
- package/dist/feature-libraries/sequence-field/formatV1.d.ts +99 -99
- package/dist/feature-libraries/sequence-field/formatV1.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/formatV2.d.ts +76 -76
- package/dist/feature-libraries/sequence-field/formatV2.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/formatV3.d.ts +54 -54
- package/dist/feature-libraries/sequence-field/invert.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/invert.js +2 -2
- package/dist/feature-libraries/sequence-field/invert.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js +3 -2
- package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
- package/dist/feature-libraries/sequence-field/types.d.ts +0 -1
- package/dist/feature-libraries/sequence-field/types.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/types.js.map +1 -1
- package/dist/index.d.ts +6 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -13
- package/dist/index.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/shared-tree/index.d.ts +2 -2
- package/dist/shared-tree/index.d.ts.map +1 -1
- package/dist/shared-tree/index.js +1 -2
- package/dist/shared-tree/index.js.map +1 -1
- package/dist/shared-tree/schematizeTree.d.ts +1 -1
- package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
- package/dist/shared-tree/schematizeTree.js +6 -6
- package/dist/shared-tree/schematizeTree.js.map +1 -1
- package/dist/shared-tree/schematizingTreeView.d.ts +7 -1
- package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +35 -38
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree/sharedTree.d.ts +27 -6
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +146 -21
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
- package/dist/shared-tree/sharedTreeChangeFamily.js +3 -3
- package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
- package/dist/shared-tree/treeCheckout.d.ts +59 -72
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +243 -188
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree-core/branch.d.ts +29 -107
- package/dist/shared-tree-core/branch.d.ts.map +1 -1
- package/dist/shared-tree-core/branch.js +51 -195
- package/dist/shared-tree-core/branch.js.map +1 -1
- package/dist/shared-tree-core/branchCommitEnricher.d.ts +24 -32
- package/dist/shared-tree-core/branchCommitEnricher.d.ts.map +1 -1
- package/dist/shared-tree-core/branchCommitEnricher.js +70 -53
- package/dist/shared-tree-core/branchCommitEnricher.js.map +1 -1
- package/dist/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
- package/dist/shared-tree-core/defaultResubmitMachine.js +2 -1
- package/dist/shared-tree-core/defaultResubmitMachine.js.map +1 -1
- package/dist/shared-tree-core/editManager.d.ts.map +1 -1
- package/dist/shared-tree-core/editManager.js +4 -4
- package/dist/shared-tree-core/editManager.js.map +1 -1
- package/dist/shared-tree-core/index.d.ts +3 -3
- package/dist/shared-tree-core/index.d.ts.map +1 -1
- package/dist/shared-tree-core/index.js +5 -4
- package/dist/shared-tree-core/index.js.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.d.ts +3 -10
- package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.js +14 -67
- package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/dist/shared-tree-core/transaction.d.ts +146 -0
- package/dist/shared-tree-core/transaction.d.ts.map +1 -0
- package/dist/shared-tree-core/transaction.js +211 -0
- package/dist/shared-tree-core/transaction.js.map +1 -0
- package/dist/shared-tree-core/transactionEnricher.d.ts +8 -13
- package/dist/shared-tree-core/transactionEnricher.d.ts.map +1 -1
- package/dist/shared-tree-core/transactionEnricher.js +41 -21
- package/dist/shared-tree-core/transactionEnricher.js.map +1 -1
- package/dist/simple-tree/api/conciseTree.d.ts.map +1 -1
- package/dist/simple-tree/api/conciseTree.js +1 -1
- package/dist/simple-tree/api/conciseTree.js.map +1 -1
- package/dist/simple-tree/api/create.d.ts.map +1 -1
- package/dist/simple-tree/api/create.js +5 -1
- package/dist/simple-tree/api/create.js.map +1 -1
- package/dist/simple-tree/api/customTree.d.ts +14 -2
- package/dist/simple-tree/api/customTree.d.ts.map +1 -1
- package/dist/simple-tree/api/customTree.js +53 -3
- package/dist/simple-tree/api/customTree.js.map +1 -1
- package/dist/simple-tree/api/identifierIndex.d.ts +21 -0
- package/dist/simple-tree/api/identifierIndex.d.ts.map +1 -0
- package/dist/simple-tree/api/identifierIndex.js +45 -0
- package/dist/simple-tree/api/identifierIndex.js.map +1 -0
- package/dist/simple-tree/api/index.d.ts +4 -2
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js +8 -1
- package/dist/simple-tree/api/index.js.map +1 -1
- package/dist/simple-tree/api/schemaFactory.d.ts +48 -0
- package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactory.js +5 -2
- package/dist/simple-tree/api/schemaFactory.js.map +1 -1
- package/dist/simple-tree/api/simpleSchema.d.ts +3 -1
- package/dist/simple-tree/api/simpleSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/simpleSchema.js.map +1 -1
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.js +9 -7
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
- package/dist/simple-tree/api/simpleTreeIndex.d.ts +65 -0
- package/dist/simple-tree/api/simpleTreeIndex.d.ts.map +1 -0
- package/dist/simple-tree/api/simpleTreeIndex.js +93 -0
- package/dist/simple-tree/api/simpleTreeIndex.js.map +1 -0
- package/dist/simple-tree/api/storedSchema.d.ts +4 -4
- package/dist/simple-tree/api/storedSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/storedSchema.js +8 -21
- package/dist/simple-tree/api/storedSchema.js.map +1 -1
- package/dist/simple-tree/api/tree.d.ts +5 -5
- package/dist/simple-tree/api/tree.d.ts.map +1 -1
- package/dist/simple-tree/api/tree.js.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
- package/dist/simple-tree/api/verboseTree.js +1 -1
- package/dist/simple-tree/api/verboseTree.js.map +1 -1
- package/dist/simple-tree/api/view.d.ts +14 -9
- package/dist/simple-tree/api/view.d.ts.map +1 -1
- package/dist/simple-tree/api/view.js +129 -40
- package/dist/simple-tree/api/view.js.map +1 -1
- package/dist/simple-tree/core/index.d.ts +1 -1
- package/dist/simple-tree/core/index.d.ts.map +1 -1
- package/dist/simple-tree/core/index.js +2 -1
- package/dist/simple-tree/core/index.js.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.d.ts +6 -2
- package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js +53 -22
- package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/dist/simple-tree/core/unhydratedFlexTree.d.ts +1 -1
- package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
- package/dist/simple-tree/core/unhydratedFlexTree.js +2 -2
- package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
- package/dist/simple-tree/index.d.ts +2 -2
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +7 -2
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/leafNodeSchema.d.ts +0 -15
- package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/leafNodeSchema.js +0 -15
- package/dist/simple-tree/leafNodeSchema.js.map +1 -1
- package/dist/simple-tree/objectNode.d.ts +15 -5
- package/dist/simple-tree/objectNode.d.ts.map +1 -1
- package/dist/simple-tree/objectNode.js +18 -2
- package/dist/simple-tree/objectNode.js.map +1 -1
- package/dist/simple-tree/objectNodeTypes.d.ts +4 -0
- package/dist/simple-tree/objectNodeTypes.d.ts.map +1 -1
- package/dist/simple-tree/objectNodeTypes.js.map +1 -1
- package/dist/simple-tree/schemaTypes.d.ts +4 -2
- package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
- package/dist/simple-tree/schemaTypes.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 +18 -13
- package/dist/simple-tree/toStoredSchema.js.map +1 -1
- package/dist/util/brand.d.ts +0 -2
- package/dist/util/brand.d.ts.map +1 -1
- package/dist/util/brand.js +0 -1
- package/dist/util/brand.js.map +1 -1
- package/dist/util/index.d.ts +1 -2
- package/dist/util/index.d.ts.map +1 -1
- package/dist/util/index.js +6 -4
- package/dist/util/index.js.map +1 -1
- package/dist/util/typeCheck.d.ts +6 -3
- package/dist/util/typeCheck.d.ts.map +1 -1
- package/dist/util/typeCheck.js.map +1 -1
- package/dist/util/typeCheckTests.d.ts +14 -2
- package/dist/util/typeCheckTests.d.ts.map +1 -1
- package/dist/util/typeCheckTests.js.map +1 -1
- package/dist/util/utils.d.ts +42 -0
- package/dist/util/utils.d.ts.map +1 -1
- package/dist/util/utils.js +35 -1
- package/dist/util/utils.js.map +1 -1
- package/lib/alpha.d.ts +9 -0
- package/lib/core/forest/forest.d.ts +10 -2
- package/lib/core/forest/forest.d.ts.map +1 -1
- package/lib/core/forest/forest.js.map +1 -1
- package/lib/core/index.d.ts +3 -3
- package/lib/core/index.d.ts.map +1 -1
- package/lib/core/index.js +3 -3
- package/lib/core/index.js.map +1 -1
- package/lib/core/rebase/utils.d.ts +1 -1
- package/lib/core/rebase/utils.d.ts.map +1 -1
- package/lib/core/rebase/utils.js +13 -17
- package/lib/core/rebase/utils.js.map +1 -1
- package/lib/core/revertible.d.ts +30 -1
- package/lib/core/revertible.d.ts.map +1 -1
- package/lib/core/revertible.js.map +1 -1
- package/lib/core/schema-stored/format.d.ts +0 -3
- package/lib/core/schema-stored/format.d.ts.map +1 -1
- package/lib/core/schema-stored/format.js.map +1 -1
- package/lib/core/schema-stored/schema.d.ts +12 -10
- package/lib/core/schema-stored/schema.d.ts.map +1 -1
- package/lib/core/schema-stored/schema.js +3 -5
- package/lib/core/schema-stored/schema.js.map +1 -1
- package/lib/core/schema-stored/storedSchemaRepository.d.ts +2 -2
- 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/schema-view/index.d.ts +1 -1
- package/lib/core/schema-view/index.d.ts.map +1 -1
- package/lib/core/schema-view/index.js +1 -1
- package/lib/core/schema-view/index.js.map +1 -1
- package/lib/core/schema-view/view.d.ts +0 -7
- package/lib/core/schema-view/view.d.ts.map +1 -1
- package/lib/core/schema-view/view.js +0 -11
- package/lib/core/schema-view/view.js.map +1 -1
- package/lib/core/tree/anchorSet.d.ts +2 -2
- package/lib/core/tree/anchorSet.d.ts.map +1 -1
- package/lib/core/tree/anchorSet.js +1 -1
- package/lib/core/tree/anchorSet.js.map +1 -1
- package/{dist/feature-libraries/chunked-forest → lib/core/tree}/chunk.d.ts +2 -1
- package/lib/core/tree/chunk.d.ts.map +1 -0
- package/lib/{feature-libraries/chunked-forest → core/tree}/chunk.js +1 -1
- package/lib/core/tree/chunk.js.map +1 -0
- package/lib/core/tree/detachedFieldIndexCodec.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndexCodec.js +4 -3
- package/lib/core/tree/detachedFieldIndexCodec.js.map +1 -1
- package/lib/core/tree/index.d.ts +2 -1
- package/lib/core/tree/index.d.ts.map +1 -1
- package/lib/core/tree/index.js +2 -1
- package/lib/core/tree/index.js.map +1 -1
- package/lib/core/tree/treeTextFormat.d.ts +0 -5
- package/lib/core/tree/treeTextFormat.d.ts.map +1 -1
- package/lib/core/tree/treeTextFormat.js.map +1 -1
- package/lib/core/tree/types.d.ts +0 -5
- package/lib/core/tree/types.d.ts.map +1 -1
- package/lib/core/tree/types.js +0 -1
- package/lib/core/tree/types.js.map +1 -1
- package/lib/core/tree/visitorUtils.d.ts +25 -1
- package/lib/core/tree/visitorUtils.d.ts.map +1 -1
- package/lib/core/tree/visitorUtils.js +27 -0
- package/lib/core/tree/visitorUtils.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/basicChunk.d.ts +1 -2
- package/lib/feature-libraries/chunked-forest/basicChunk.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/basicChunk.js +1 -1
- package/lib/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkTree.d.ts +1 -2
- package/lib/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkTree.js +1 -2
- package/lib/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkedForest.d.ts +5 -3
- package/lib/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkedForest.js +18 -8
- package/lib/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkCodecUtilities.d.ts +1 -2
- package/lib/feature-libraries/chunked-forest/codec/chunkCodecUtilities.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkCodecUtilities.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +1 -2
- 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 +1 -1
- 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/emptyChunk.d.ts +1 -1
- package/lib/feature-libraries/chunked-forest/emptyChunk.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/emptyChunk.js +1 -2
- 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 -2
- package/lib/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/uniformChunk.js +4 -4
- package/lib/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultSchema.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultSchema.js +1 -0
- package/lib/feature-libraries/default-schema/defaultSchema.js.map +1 -1
- package/lib/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/schemaChecker.js +2 -1
- package/lib/feature-libraries/default-schema/schemaChecker.js.map +1 -1
- package/lib/feature-libraries/flex-tree/context.d.ts +1 -1
- package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/context.js.map +1 -1
- package/lib/feature-libraries/index.d.ts +2 -1
- package/lib/feature-libraries/index.d.ts.map +1 -1
- package/lib/feature-libraries/index.js +2 -1
- package/lib/feature-libraries/index.js.map +1 -1
- package/lib/feature-libraries/indexing/anchorTreeIndex.d.ts +139 -0
- package/lib/feature-libraries/indexing/anchorTreeIndex.d.ts.map +1 -0
- package/lib/feature-libraries/indexing/anchorTreeIndex.js +382 -0
- package/lib/feature-libraries/indexing/anchorTreeIndex.js.map +1 -0
- package/lib/feature-libraries/indexing/index.d.ts +7 -0
- package/lib/feature-libraries/indexing/index.d.ts.map +1 -0
- package/lib/{events → feature-libraries/indexing}/index.js +1 -1
- package/lib/feature-libraries/indexing/index.js.map +1 -0
- package/lib/feature-libraries/indexing/types.d.ts +32 -0
- package/lib/feature-libraries/indexing/types.d.ts.map +1 -0
- package/lib/{events/interop.js → feature-libraries/indexing/types.js} +1 -1
- package/lib/feature-libraries/indexing/types.js.map +1 -0
- package/lib/feature-libraries/modular-schema/discrepancies.d.ts +84 -24
- package/lib/feature-libraries/modular-schema/discrepancies.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/discrepancies.js +25 -28
- package/lib/feature-libraries/modular-schema/discrepancies.js.map +1 -1
- package/lib/feature-libraries/modular-schema/index.d.ts +1 -1
- package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/index.js +1 -1
- package/lib/feature-libraries/modular-schema/index.js.map +1 -1
- package/lib/feature-libraries/modular-schema/isNeverTree.d.ts +0 -1
- package/lib/feature-libraries/modular-schema/isNeverTree.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/isNeverTree.js +0 -1
- package/lib/feature-libraries/modular-schema/isNeverTree.js.map +1 -1
- package/lib/feature-libraries/object-forest/objectForest.d.ts +5 -2
- package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
- package/lib/feature-libraries/object-forest/objectForest.js +15 -5
- package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts +6 -6
- package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts.map +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts +7 -7
- package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts.map +1 -1
- package/lib/feature-libraries/schema-edits/schemaChangeFormat.d.ts +12 -12
- package/lib/feature-libraries/sequence-field/formatV1.d.ts +99 -99
- package/lib/feature-libraries/sequence-field/formatV1.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/formatV2.d.ts +76 -76
- package/lib/feature-libraries/sequence-field/formatV2.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/formatV3.d.ts +54 -54
- package/lib/feature-libraries/sequence-field/invert.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/invert.js +4 -4
- package/lib/feature-libraries/sequence-field/invert.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js +4 -3
- package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
- package/lib/feature-libraries/sequence-field/types.d.ts +0 -1
- package/lib/feature-libraries/sequence-field/types.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/types.js.map +1 -1
- package/lib/index.d.ts +6 -7
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +3 -4
- package/lib/index.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/shared-tree/index.d.ts +2 -2
- package/lib/shared-tree/index.d.ts.map +1 -1
- package/lib/shared-tree/index.js +1 -1
- package/lib/shared-tree/index.js.map +1 -1
- package/lib/shared-tree/schematizeTree.d.ts +1 -1
- package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
- package/lib/shared-tree/schematizeTree.js +7 -7
- package/lib/shared-tree/schematizeTree.js.map +1 -1
- package/lib/shared-tree/schematizingTreeView.d.ts +7 -1
- package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +12 -16
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/shared-tree/sharedTree.d.ts +27 -6
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +135 -10
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
- package/lib/shared-tree/sharedTreeChangeFamily.js +5 -5
- package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
- package/lib/shared-tree/treeCheckout.d.ts +59 -72
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +233 -177
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree-core/branch.d.ts +29 -107
- package/lib/shared-tree-core/branch.d.ts.map +1 -1
- package/lib/shared-tree-core/branch.js +50 -193
- package/lib/shared-tree-core/branch.js.map +1 -1
- package/lib/shared-tree-core/branchCommitEnricher.d.ts +24 -32
- package/lib/shared-tree-core/branchCommitEnricher.d.ts.map +1 -1
- package/lib/shared-tree-core/branchCommitEnricher.js +71 -54
- package/lib/shared-tree-core/branchCommitEnricher.js.map +1 -1
- package/lib/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
- package/lib/shared-tree-core/defaultResubmitMachine.js +3 -2
- package/lib/shared-tree-core/defaultResubmitMachine.js.map +1 -1
- package/lib/shared-tree-core/editManager.d.ts.map +1 -1
- package/lib/shared-tree-core/editManager.js +4 -4
- package/lib/shared-tree-core/editManager.js.map +1 -1
- package/lib/shared-tree-core/index.d.ts +3 -3
- package/lib/shared-tree-core/index.d.ts.map +1 -1
- package/lib/shared-tree-core/index.js +2 -2
- package/lib/shared-tree-core/index.js.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.d.ts +3 -10
- package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.js +15 -68
- package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/lib/shared-tree-core/transaction.d.ts +146 -0
- package/lib/shared-tree-core/transaction.d.ts.map +1 -0
- package/lib/shared-tree-core/transaction.js +206 -0
- package/lib/shared-tree-core/transaction.js.map +1 -0
- package/lib/shared-tree-core/transactionEnricher.d.ts +8 -13
- package/lib/shared-tree-core/transactionEnricher.d.ts.map +1 -1
- package/lib/shared-tree-core/transactionEnricher.js +41 -21
- package/lib/shared-tree-core/transactionEnricher.js.map +1 -1
- package/lib/simple-tree/api/conciseTree.d.ts.map +1 -1
- package/lib/simple-tree/api/conciseTree.js +2 -2
- package/lib/simple-tree/api/conciseTree.js.map +1 -1
- package/lib/simple-tree/api/create.d.ts.map +1 -1
- package/lib/simple-tree/api/create.js +5 -1
- package/lib/simple-tree/api/create.js.map +1 -1
- package/lib/simple-tree/api/customTree.d.ts +14 -2
- package/lib/simple-tree/api/customTree.d.ts.map +1 -1
- package/lib/simple-tree/api/customTree.js +50 -2
- package/lib/simple-tree/api/customTree.js.map +1 -1
- package/lib/simple-tree/api/identifierIndex.d.ts +21 -0
- package/lib/simple-tree/api/identifierIndex.d.ts.map +1 -0
- package/lib/simple-tree/api/identifierIndex.js +41 -0
- package/lib/simple-tree/api/identifierIndex.js.map +1 -0
- package/lib/simple-tree/api/index.d.ts +4 -2
- package/lib/simple-tree/api/index.d.ts.map +1 -1
- package/lib/simple-tree/api/index.js +4 -1
- package/lib/simple-tree/api/index.js.map +1 -1
- package/lib/simple-tree/api/schemaFactory.d.ts +48 -0
- package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactory.js +4 -1
- package/lib/simple-tree/api/schemaFactory.js.map +1 -1
- package/lib/simple-tree/api/simpleSchema.d.ts +3 -1
- package/lib/simple-tree/api/simpleSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/simpleSchema.js.map +1 -1
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.js +11 -9
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
- package/lib/simple-tree/api/simpleTreeIndex.d.ts +65 -0
- package/lib/simple-tree/api/simpleTreeIndex.d.ts.map +1 -0
- package/lib/simple-tree/api/simpleTreeIndex.js +89 -0
- package/lib/simple-tree/api/simpleTreeIndex.js.map +1 -0
- package/lib/simple-tree/api/storedSchema.d.ts +4 -4
- package/lib/simple-tree/api/storedSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/storedSchema.js +5 -18
- package/lib/simple-tree/api/storedSchema.js.map +1 -1
- package/lib/simple-tree/api/tree.d.ts +5 -5
- package/lib/simple-tree/api/tree.d.ts.map +1 -1
- package/lib/simple-tree/api/tree.js.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
- package/lib/simple-tree/api/verboseTree.js +2 -2
- package/lib/simple-tree/api/verboseTree.js.map +1 -1
- package/lib/simple-tree/api/view.d.ts +14 -9
- package/lib/simple-tree/api/view.d.ts.map +1 -1
- package/lib/simple-tree/api/view.js +131 -42
- package/lib/simple-tree/api/view.js.map +1 -1
- package/lib/simple-tree/core/index.d.ts +1 -1
- package/lib/simple-tree/core/index.d.ts.map +1 -1
- package/lib/simple-tree/core/index.js +1 -1
- package/lib/simple-tree/core/index.js.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.d.ts +6 -2
- package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js +31 -1
- package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.d.ts +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.js +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
- package/lib/simple-tree/index.d.ts +2 -2
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +2 -2
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/leafNodeSchema.d.ts +0 -15
- package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/leafNodeSchema.js +0 -15
- package/lib/simple-tree/leafNodeSchema.js.map +1 -1
- package/lib/simple-tree/objectNode.d.ts +15 -5
- package/lib/simple-tree/objectNode.d.ts.map +1 -1
- package/lib/simple-tree/objectNode.js +16 -1
- package/lib/simple-tree/objectNode.js.map +1 -1
- package/lib/simple-tree/objectNodeTypes.d.ts +4 -0
- package/lib/simple-tree/objectNodeTypes.d.ts.map +1 -1
- package/lib/simple-tree/objectNodeTypes.js.map +1 -1
- package/lib/simple-tree/schemaTypes.d.ts +4 -2
- package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
- package/lib/simple-tree/schemaTypes.js.map +1 -1
- package/lib/simple-tree/toMapTree.js +5 -5
- 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 +19 -14
- package/lib/simple-tree/toStoredSchema.js.map +1 -1
- package/lib/util/brand.d.ts +0 -2
- package/lib/util/brand.d.ts.map +1 -1
- package/lib/util/brand.js +0 -1
- package/lib/util/brand.js.map +1 -1
- package/lib/util/index.d.ts +1 -2
- package/lib/util/index.d.ts.map +1 -1
- package/lib/util/index.js +1 -2
- package/lib/util/index.js.map +1 -1
- package/lib/util/typeCheck.d.ts +6 -3
- package/lib/util/typeCheck.d.ts.map +1 -1
- package/lib/util/typeCheck.js.map +1 -1
- package/lib/util/typeCheckTests.d.ts +14 -2
- package/lib/util/typeCheckTests.d.ts.map +1 -1
- package/lib/util/typeCheckTests.js.map +1 -1
- package/lib/util/utils.d.ts +42 -0
- package/lib/util/utils.d.ts.map +1 -1
- package/lib/util/utils.js +30 -0
- package/lib/util/utils.js.map +1 -1
- package/package.json +23 -23
- package/src/core/forest/forest.ts +12 -1
- package/src/core/index.ts +13 -2
- package/src/core/rebase/utils.ts +28 -29
- package/src/core/revertible.ts +35 -1
- package/src/core/schema-stored/format.ts +0 -3
- package/src/core/schema-stored/schema.ts +13 -10
- package/src/core/schema-stored/storedSchemaRepository.ts +2 -1
- package/src/core/schema-view/index.ts +0 -1
- package/src/core/schema-view/view.ts +0 -11
- package/src/core/tree/anchorSet.ts +2 -1
- package/src/{feature-libraries/chunked-forest → core/tree}/chunk.ts +4 -4
- package/src/core/tree/detachedFieldIndexCodec.ts +4 -3
- package/src/core/tree/index.ts +9 -0
- package/src/core/tree/treeTextFormat.ts +0 -5
- package/src/core/tree/types.ts +0 -5
- package/src/core/tree/visitorUtils.ts +56 -1
- package/src/feature-libraries/chunked-forest/basicChunk.ts +4 -2
- package/src/feature-libraries/chunked-forest/chunkTree.ts +2 -1
- package/src/feature-libraries/chunked-forest/chunkedForest.ts +35 -8
- package/src/feature-libraries/chunked-forest/codec/chunkCodecUtilities.ts +1 -2
- package/src/feature-libraries/chunked-forest/codec/chunkDecoding.ts +6 -2
- package/src/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.ts +1 -1
- package/src/feature-libraries/chunked-forest/emptyChunk.ts +4 -2
- package/src/feature-libraries/chunked-forest/index.ts +1 -1
- package/src/feature-libraries/chunked-forest/sequenceChunk.ts +1 -1
- package/src/feature-libraries/chunked-forest/uniformChunk.ts +7 -4
- package/src/feature-libraries/default-schema/defaultSchema.ts +1 -0
- package/src/feature-libraries/default-schema/schemaChecker.ts +4 -1
- package/src/feature-libraries/flex-tree/context.ts +1 -1
- package/src/feature-libraries/index.ts +22 -0
- package/src/feature-libraries/indexing/anchorTreeIndex.ts +482 -0
- package/src/feature-libraries/indexing/index.ts +11 -0
- package/src/feature-libraries/indexing/types.ts +37 -0
- package/src/feature-libraries/modular-schema/discrepancies.ts +76 -38
- package/src/feature-libraries/modular-schema/index.ts +13 -0
- package/src/feature-libraries/modular-schema/isNeverTree.ts +0 -2
- package/src/feature-libraries/object-forest/objectForest.ts +22 -4
- package/src/feature-libraries/sequence-field/invert.ts +4 -4
- package/src/feature-libraries/sequence-field/sequenceFieldToDelta.ts +4 -4
- package/src/feature-libraries/sequence-field/types.ts +0 -1
- package/src/index.ts +17 -35
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/index.ts +1 -2
- package/src/shared-tree/schematizeTree.ts +6 -10
- package/src/shared-tree/schematizingTreeView.ts +18 -28
- package/src/shared-tree/sharedTree.ts +216 -30
- package/src/shared-tree/sharedTreeChangeFamily.ts +5 -4
- package/src/shared-tree/treeCheckout.ts +341 -299
- package/src/shared-tree-core/branch.ts +80 -300
- package/src/shared-tree-core/branchCommitEnricher.ts +66 -62
- package/src/shared-tree-core/defaultResubmitMachine.ts +3 -2
- package/src/shared-tree-core/editManager.ts +4 -9
- package/src/shared-tree-core/index.ts +11 -3
- package/src/shared-tree-core/sharedTreeCore.ts +23 -79
- package/src/shared-tree-core/transaction.ts +310 -0
- package/src/shared-tree-core/transactionEnricher.ts +30 -24
- package/src/simple-tree/api/conciseTree.ts +2 -2
- package/src/simple-tree/api/create.ts +5 -1
- package/src/simple-tree/api/customTree.ts +69 -1
- package/src/simple-tree/api/identifierIndex.ts +64 -0
- package/src/simple-tree/api/index.ts +17 -2
- package/src/simple-tree/api/schemaFactory.ts +62 -1
- package/src/simple-tree/api/simpleSchema.ts +3 -1
- package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +17 -18
- package/src/simple-tree/api/simpleTreeIndex.ts +233 -0
- package/src/simple-tree/api/storedSchema.ts +7 -22
- package/src/simple-tree/api/tree.ts +14 -5
- package/src/simple-tree/api/treeNodeApi.ts +1 -1
- package/src/simple-tree/api/verboseTree.ts +2 -2
- package/src/simple-tree/api/view.ts +197 -51
- package/src/simple-tree/core/index.ts +1 -0
- package/src/simple-tree/core/treeNodeKernel.ts +37 -2
- package/src/simple-tree/core/unhydratedFlexTree.ts +2 -1
- package/src/simple-tree/index.ts +10 -0
- package/src/simple-tree/leafNodeSchema.ts +0 -19
- package/src/simple-tree/objectNode.ts +45 -14
- package/src/simple-tree/objectNodeTypes.ts +5 -0
- package/src/simple-tree/schemaTypes.ts +7 -2
- package/src/simple-tree/toMapTree.ts +5 -5
- package/src/simple-tree/toStoredSchema.ts +25 -19
- package/src/util/brand.ts +0 -2
- package/src/util/index.ts +4 -1
- package/src/util/typeCheck.ts +6 -3
- package/src/util/typeCheckTests.ts +11 -1
- package/src/util/utils.ts +64 -0
- package/dist/events/emitter.d.ts +0 -139
- package/dist/events/emitter.d.ts.map +0 -1
- package/dist/events/emitter.js +0 -165
- package/dist/events/emitter.js.map +0 -1
- package/dist/events/index.d.ts +0 -7
- package/dist/events/index.d.ts.map +0 -1
- package/dist/events/index.js +0 -11
- package/dist/events/index.js.map +0 -1
- package/dist/events/interop.d.ts +0 -30
- package/dist/events/interop.d.ts.map +0 -1
- package/dist/events/interop.js.map +0 -1
- package/dist/events/listeners.d.ts +0 -76
- package/dist/events/listeners.d.ts.map +0 -1
- package/dist/events/listeners.js +0 -7
- package/dist/events/listeners.js.map +0 -1
- package/dist/feature-libraries/chunked-forest/chunk.d.ts.map +0 -1
- package/dist/feature-libraries/chunked-forest/chunk.js.map +0 -1
- package/dist/shared-tree-core/transactionStack.d.ts +0 -29
- package/dist/shared-tree-core/transactionStack.d.ts.map +0 -1
- package/dist/shared-tree-core/transactionStack.js +0 -41
- package/dist/shared-tree-core/transactionStack.js.map +0 -1
- package/dist/util/transactionResult.d.ts +0 -19
- package/dist/util/transactionResult.d.ts.map +0 -1
- package/dist/util/transactionResult.js +0 -23
- package/dist/util/transactionResult.js.map +0 -1
- package/lib/events/emitter.d.ts +0 -139
- package/lib/events/emitter.d.ts.map +0 -1
- package/lib/events/emitter.js +0 -160
- package/lib/events/emitter.js.map +0 -1
- package/lib/events/index.d.ts +0 -7
- package/lib/events/index.d.ts.map +0 -1
- package/lib/events/index.js.map +0 -1
- package/lib/events/interop.d.ts +0 -30
- package/lib/events/interop.d.ts.map +0 -1
- package/lib/events/interop.js.map +0 -1
- package/lib/events/listeners.d.ts +0 -76
- package/lib/events/listeners.d.ts.map +0 -1
- package/lib/events/listeners.js +0 -6
- package/lib/events/listeners.js.map +0 -1
- package/lib/feature-libraries/chunked-forest/chunk.d.ts.map +0 -1
- package/lib/feature-libraries/chunked-forest/chunk.js.map +0 -1
- package/lib/shared-tree-core/transactionStack.d.ts +0 -29
- package/lib/shared-tree-core/transactionStack.d.ts.map +0 -1
- package/lib/shared-tree-core/transactionStack.js +0 -37
- package/lib/shared-tree-core/transactionStack.js.map +0 -1
- package/lib/util/transactionResult.d.ts +0 -19
- package/lib/util/transactionResult.d.ts.map +0 -1
- package/lib/util/transactionResult.js +0 -20
- package/lib/util/transactionResult.js.map +0 -1
- package/src/events/README.md +0 -3
- package/src/events/emitter.ts +0 -256
- package/src/events/index.ts +0 -19
- package/src/events/interop.ts +0 -38
- package/src/events/listeners.ts +0 -80
- package/src/shared-tree-core/transactionStack.ts +0 -45
- package/src/util/transactionResult.ts +0 -19
|
@@ -5,32 +5,56 @@
|
|
|
5
5
|
|
|
6
6
|
import {
|
|
7
7
|
AdaptedViewSchema,
|
|
8
|
+
type TreeNodeStoredSchema,
|
|
8
9
|
type Adapters,
|
|
9
|
-
Compatibility,
|
|
10
10
|
type TreeFieldStoredSchema,
|
|
11
11
|
type TreeNodeSchemaIdentifier,
|
|
12
|
-
type TreeNodeStoredSchema,
|
|
13
12
|
type TreeStoredSchema,
|
|
14
13
|
} from "../../core/index.js";
|
|
15
14
|
import { fail } from "../../util/index.js";
|
|
16
15
|
import {
|
|
16
|
+
FieldKinds,
|
|
17
17
|
type FullSchemaPolicy,
|
|
18
|
-
|
|
18
|
+
type FieldDiscrepancy,
|
|
19
|
+
getAllowedContentDiscrepancies,
|
|
19
20
|
isNeverTree,
|
|
21
|
+
PosetComparisonResult,
|
|
22
|
+
fieldRealizer,
|
|
23
|
+
comparePosetElements,
|
|
20
24
|
} from "../../feature-libraries/index.js";
|
|
25
|
+
import {
|
|
26
|
+
normalizeFieldSchema,
|
|
27
|
+
type FieldSchema,
|
|
28
|
+
type ImplicitFieldSchema,
|
|
29
|
+
} from "../schemaTypes.js";
|
|
30
|
+
import { toStoredSchema } from "../toStoredSchema.js";
|
|
31
|
+
import { unreachableCase } from "@fluidframework/core-utils/internal";
|
|
32
|
+
import type { SchemaCompatibilityStatus } from "./tree.js";
|
|
21
33
|
|
|
22
34
|
/**
|
|
23
35
|
* A collection of View information for schema, including policy.
|
|
24
36
|
*/
|
|
25
37
|
export class ViewSchema {
|
|
26
38
|
/**
|
|
27
|
-
*
|
|
39
|
+
* Cached conversion of the view schema in the stored schema format.
|
|
40
|
+
*/
|
|
41
|
+
private readonly viewSchemaAsStored: TreeStoredSchema;
|
|
42
|
+
/**
|
|
43
|
+
* Normalized view schema (implicitly allowed view schema types are converted to their canonical form).
|
|
44
|
+
*/
|
|
45
|
+
public readonly schema: FieldSchema;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* @param viewSchema - Schema for the root field of this view.
|
|
28
49
|
*/
|
|
29
50
|
public constructor(
|
|
30
51
|
public readonly policy: FullSchemaPolicy,
|
|
31
52
|
public readonly adapters: Adapters,
|
|
32
|
-
|
|
33
|
-
) {
|
|
53
|
+
viewSchema: ImplicitFieldSchema,
|
|
54
|
+
) {
|
|
55
|
+
this.schema = normalizeFieldSchema(viewSchema);
|
|
56
|
+
this.viewSchemaAsStored = toStoredSchema(this.schema);
|
|
57
|
+
}
|
|
34
58
|
|
|
35
59
|
/**
|
|
36
60
|
* Determines the compatibility of a stored document
|
|
@@ -42,53 +66,168 @@ export class ViewSchema {
|
|
|
42
66
|
* TODO: this API violates the parse don't validate design philosophy.
|
|
43
67
|
* It should be wrapped with (or replaced by) a parse style API.
|
|
44
68
|
*/
|
|
45
|
-
public checkCompatibility(
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
writeAllowingStoredSchemaUpdates: Compatibility;
|
|
49
|
-
} {
|
|
69
|
+
public checkCompatibility(
|
|
70
|
+
stored: TreeStoredSchema,
|
|
71
|
+
): Omit<SchemaCompatibilityStatus, "canInitialize"> {
|
|
50
72
|
// TODO: support adapters
|
|
51
73
|
// const adapted = this.adaptRepo(stored);
|
|
52
74
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
//
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
75
|
+
// View schema allows a subset of documents that stored schema does, and the discrepancies are allowed by policy
|
|
76
|
+
// determined by the view schema (i.e. objects with extra optional fields in the stored schema have opted into allowing this.
|
|
77
|
+
// In the future, this would also include things like:
|
|
78
|
+
// - fields with more allowed types in the stored schema than in the view schema have out-of-schema "unknown content" adapters
|
|
79
|
+
let canView = true;
|
|
80
|
+
// View schema allows a superset of documents that stored schema does, hence the document could be upgraded to use a persisted version
|
|
81
|
+
// of this view schema as its stored schema.
|
|
82
|
+
let canUpgrade = true;
|
|
83
|
+
|
|
84
|
+
const updateCompatibilityFromFieldDiscrepancy = (discrepancy: FieldDiscrepancy): void => {
|
|
85
|
+
switch (discrepancy.mismatch) {
|
|
86
|
+
case "allowedTypes": {
|
|
87
|
+
// Since we only track the symmetric difference between the allowed types in the view and
|
|
88
|
+
// stored schemas, it's sufficient to check if any extra allowed types still exist in the
|
|
89
|
+
// stored schema.
|
|
90
|
+
if (
|
|
91
|
+
discrepancy.stored.some(
|
|
92
|
+
(identifier) =>
|
|
93
|
+
!isNeverTree(this.policy, stored, stored.nodeSchema.get(identifier)),
|
|
94
|
+
)
|
|
95
|
+
) {
|
|
96
|
+
// Stored schema has extra allowed types that the view schema does not.
|
|
97
|
+
canUpgrade = false;
|
|
98
|
+
canView = false;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (
|
|
102
|
+
discrepancy.view.some(
|
|
103
|
+
(identifier) =>
|
|
104
|
+
!isNeverTree(
|
|
105
|
+
this.policy,
|
|
106
|
+
this.viewSchemaAsStored,
|
|
107
|
+
this.viewSchemaAsStored.nodeSchema.get(identifier),
|
|
108
|
+
),
|
|
109
|
+
)
|
|
110
|
+
) {
|
|
111
|
+
// View schema has extra allowed types that the stored schema does not.
|
|
112
|
+
canView = false;
|
|
113
|
+
}
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
case "fieldKind": {
|
|
117
|
+
const result = comparePosetElements(
|
|
118
|
+
discrepancy.stored,
|
|
119
|
+
discrepancy.view,
|
|
120
|
+
fieldRealizer,
|
|
121
|
+
);
|
|
122
|
+
|
|
123
|
+
if (result === PosetComparisonResult.Greater) {
|
|
124
|
+
// Stored schema is more relaxed than view schema.
|
|
125
|
+
canUpgrade = false;
|
|
126
|
+
if (
|
|
127
|
+
discrepancy.view === FieldKinds.forbidden.identifier &&
|
|
128
|
+
discrepancy.identifier !== undefined &&
|
|
129
|
+
this.policy.allowUnknownOptionalFields(discrepancy.identifier)
|
|
130
|
+
) {
|
|
131
|
+
// When the application has opted into it, we allow viewing documents which have additional
|
|
132
|
+
// optional fields in the stored schema that are not present in the view schema.
|
|
133
|
+
} else {
|
|
134
|
+
canView = false;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
if (result === PosetComparisonResult.Less) {
|
|
139
|
+
// View schema is more relaxed than stored schema.
|
|
140
|
+
canView = false;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (result === PosetComparisonResult.Incomparable) {
|
|
144
|
+
canUpgrade = false;
|
|
145
|
+
canView = false;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
case "valueSchema": {
|
|
151
|
+
canView = false;
|
|
152
|
+
canUpgrade = false;
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
default:
|
|
156
|
+
unreachableCase(discrepancy);
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
for (const discrepancy of getAllowedContentDiscrepancies(
|
|
161
|
+
this.viewSchemaAsStored,
|
|
162
|
+
stored,
|
|
163
|
+
)) {
|
|
164
|
+
if (!canView && !canUpgrade) {
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
switch (discrepancy.mismatch) {
|
|
169
|
+
case "nodeKind": {
|
|
170
|
+
const viewNodeSchema = this.viewSchemaAsStored.nodeSchema.get(
|
|
171
|
+
discrepancy.identifier,
|
|
172
|
+
);
|
|
173
|
+
const storedNodeSchema = stored.nodeSchema.get(discrepancy.identifier);
|
|
174
|
+
// We conservatively do not allow node types to change.
|
|
175
|
+
// The only time this might be valid in the sense that the data canonically converts is converting an object node
|
|
176
|
+
// to a map node over the union of all the object fields' types.
|
|
177
|
+
if (discrepancy.stored === undefined) {
|
|
178
|
+
const viewIsNever =
|
|
179
|
+
viewNodeSchema !== undefined
|
|
180
|
+
? isNeverTree(this.policy, this.viewSchemaAsStored, viewNodeSchema)
|
|
181
|
+
: true;
|
|
182
|
+
if (!viewIsNever) {
|
|
183
|
+
// View schema has added a node type that the stored schema doesn't know about.
|
|
184
|
+
canView = false;
|
|
185
|
+
}
|
|
186
|
+
} else if (discrepancy.view === undefined) {
|
|
187
|
+
const storedIsNever =
|
|
188
|
+
storedNodeSchema !== undefined
|
|
189
|
+
? isNeverTree(this.policy, stored, storedNodeSchema)
|
|
190
|
+
: true;
|
|
191
|
+
if (!storedIsNever) {
|
|
192
|
+
// Stored schema has a node type that the view schema doesn't know about.
|
|
193
|
+
canUpgrade = false;
|
|
194
|
+
}
|
|
195
|
+
} else {
|
|
196
|
+
// Node type exists in both schemas but has changed. We conservatively never allow this.
|
|
197
|
+
const storedIsNever =
|
|
198
|
+
storedNodeSchema !== undefined
|
|
199
|
+
? isNeverTree(this.policy, stored, storedNodeSchema)
|
|
200
|
+
: true;
|
|
201
|
+
const viewIsNever =
|
|
202
|
+
viewNodeSchema !== undefined
|
|
203
|
+
? isNeverTree(this.policy, this.viewSchemaAsStored, viewNodeSchema)
|
|
204
|
+
: true;
|
|
205
|
+
if (!storedIsNever || !viewIsNever) {
|
|
206
|
+
canView = false;
|
|
207
|
+
canUpgrade = false;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
break;
|
|
211
|
+
}
|
|
212
|
+
case "valueSchema":
|
|
213
|
+
case "allowedTypes":
|
|
214
|
+
case "fieldKind": {
|
|
215
|
+
updateCompatibilityFromFieldDiscrepancy(discrepancy);
|
|
216
|
+
break;
|
|
217
|
+
}
|
|
218
|
+
case "fields": {
|
|
219
|
+
discrepancy.differences.forEach(updateCompatibilityFromFieldDiscrepancy);
|
|
220
|
+
break;
|
|
221
|
+
}
|
|
222
|
+
// No default
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
return {
|
|
227
|
+
canView,
|
|
228
|
+
canUpgrade,
|
|
229
|
+
isEquivalent: canView && canUpgrade,
|
|
230
|
+
};
|
|
92
231
|
}
|
|
93
232
|
|
|
94
233
|
/**
|
|
@@ -102,8 +241,15 @@ export class ViewSchema {
|
|
|
102
241
|
// since there never is a reason to have a never type as an adapter input,
|
|
103
242
|
// and its impossible for an adapter to be correctly implemented if its output type is never
|
|
104
243
|
// (unless its input is also never).
|
|
244
|
+
|
|
105
245
|
for (const adapter of this.adapters?.tree ?? []) {
|
|
106
|
-
if (
|
|
246
|
+
if (
|
|
247
|
+
isNeverTree(
|
|
248
|
+
this.policy,
|
|
249
|
+
this.viewSchemaAsStored,
|
|
250
|
+
this.viewSchemaAsStored.nodeSchema.get(adapter.output),
|
|
251
|
+
)
|
|
252
|
+
) {
|
|
107
253
|
fail("tree adapter for stored adapter.output should not be never");
|
|
108
254
|
}
|
|
109
255
|
}
|
|
@@ -4,13 +4,15 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { assert, Lazy } from "@fluidframework/core-utils/internal";
|
|
7
|
-
import { createEmitter
|
|
8
|
-
import type {
|
|
7
|
+
import { createEmitter } from "@fluid-internal/client-utils";
|
|
8
|
+
import type { Listenable, Off } from "@fluidframework/core-interfaces";
|
|
9
|
+
import type { InternalTreeNode, TreeNode, Unhydrated } from "./types.js";
|
|
9
10
|
import {
|
|
10
11
|
anchorSlot,
|
|
11
12
|
type AnchorEvents,
|
|
12
13
|
type AnchorNode,
|
|
13
14
|
type AnchorSet,
|
|
15
|
+
type TreeValue,
|
|
14
16
|
type UpPath,
|
|
15
17
|
} from "../../core/index.js";
|
|
16
18
|
import {
|
|
@@ -447,3 +449,36 @@ export function getOrCreateInnerNode(treeNode: TreeNode, allowFreed = false): In
|
|
|
447
449
|
const kernel = getKernel(treeNode);
|
|
448
450
|
return kernel.getOrCreateInnerNode(allowFreed);
|
|
449
451
|
}
|
|
452
|
+
|
|
453
|
+
/**
|
|
454
|
+
* Gets a flex node from an anchor node
|
|
455
|
+
*/
|
|
456
|
+
function flexNodeFromAnchor(anchorNode: AnchorNode): FlexTreeNode {
|
|
457
|
+
// the proxy is bound to an anchor node, but it may or may not have an actual flex node yet
|
|
458
|
+
const flexNode = anchorNode.slots.get(flexTreeSlot);
|
|
459
|
+
if (flexNode !== undefined) {
|
|
460
|
+
return flexNode; // If it does have a flex node, return it...
|
|
461
|
+
} // ...otherwise, the flex node must be created
|
|
462
|
+
const context = anchorNode.anchorSet.slots.get(ContextSlot) ?? fail("missing context");
|
|
463
|
+
const cursor = context.checkout.forest.allocateCursor("getFlexNode");
|
|
464
|
+
context.checkout.forest.moveCursorToPath(anchorNode, cursor);
|
|
465
|
+
const newFlexNode = makeTree(context, cursor);
|
|
466
|
+
cursor.free();
|
|
467
|
+
return newFlexNode;
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
/**
|
|
471
|
+
* Gets a tree node from an anchor node
|
|
472
|
+
*/
|
|
473
|
+
export function treeNodeFromAnchor(anchorNode: AnchorNode): TreeNode | TreeValue {
|
|
474
|
+
const cached = anchorNode.slots.get(proxySlot);
|
|
475
|
+
if (cached !== undefined) {
|
|
476
|
+
return cached;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
const flexNode = flexNodeFromAnchor(anchorNode);
|
|
480
|
+
const classSchema = getTreeNodeSchemaFromHydratedFlexNode(flexNode);
|
|
481
|
+
return typeof classSchema === "function"
|
|
482
|
+
? new classSchema(flexNode as unknown as InternalTreeNode)
|
|
483
|
+
: (classSchema as { create(data: FlexTreeNode): TreeValue }).create(flexNode);
|
|
484
|
+
}
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { assert, oob } from "@fluidframework/core-utils/internal";
|
|
7
|
+
import { createEmitter } from "@fluid-internal/client-utils";
|
|
8
|
+
import type { Listenable } from "@fluidframework/core-interfaces";
|
|
7
9
|
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
8
10
|
|
|
9
11
|
import {
|
|
@@ -43,7 +45,6 @@ import {
|
|
|
43
45
|
cursorForMapTreeNode,
|
|
44
46
|
} from "../../feature-libraries/index.js";
|
|
45
47
|
import type { Context } from "./context.js";
|
|
46
|
-
import { createEmitter, type Listenable } from "../../events/index.js";
|
|
47
48
|
|
|
48
49
|
interface UnhydratedTreeSequenceFieldEditBuilder
|
|
49
50
|
extends SequenceFieldEditBuilder<ExclusiveMapTree[]> {
|
package/src/simple-tree/index.ts
CHANGED
|
@@ -35,6 +35,7 @@ export {
|
|
|
35
35
|
type SchemaCompatibilityStatus,
|
|
36
36
|
type ITreeConfigurationOptions,
|
|
37
37
|
SchemaFactory,
|
|
38
|
+
type SchemaFactoryObjectOptions,
|
|
38
39
|
type ScopedSchemaName,
|
|
39
40
|
type ValidateRecursiveSchema,
|
|
40
41
|
type FixRecursiveArraySchema,
|
|
@@ -51,6 +52,10 @@ export {
|
|
|
51
52
|
type NodeChangedData,
|
|
52
53
|
TreeBeta,
|
|
53
54
|
type TreeChangeEventsBeta,
|
|
55
|
+
type SimpleTreeIndex,
|
|
56
|
+
type IdentifierIndex,
|
|
57
|
+
createSimpleTreeIndex,
|
|
58
|
+
createIdentifierIndex,
|
|
54
59
|
type SimpleNodeSchemaBase,
|
|
55
60
|
type SimpleTreeSchema,
|
|
56
61
|
type SimpleNodeSchema,
|
|
@@ -114,6 +119,10 @@ export {
|
|
|
114
119
|
conciseFromCursor,
|
|
115
120
|
createFromCursor,
|
|
116
121
|
asTreeViewAlpha,
|
|
122
|
+
customFromCursorStored,
|
|
123
|
+
type CustomTreeNode,
|
|
124
|
+
type CustomTreeValue,
|
|
125
|
+
tryStoredSchemaAsArray,
|
|
117
126
|
} from "./api/index.js";
|
|
118
127
|
export {
|
|
119
128
|
type NodeFromSchema,
|
|
@@ -162,6 +171,7 @@ export {
|
|
|
162
171
|
type ObjectFromSchemaRecord,
|
|
163
172
|
type TreeObjectNode,
|
|
164
173
|
setField,
|
|
174
|
+
createUnknownOptionalFieldPolicy,
|
|
165
175
|
} from "./objectNode.js";
|
|
166
176
|
export type { TreeMapNode, MapNodeInsertableData } from "./mapNode.js";
|
|
167
177
|
export {
|
|
@@ -68,27 +68,8 @@ function makeLeaf<Name extends string, const T extends ValueSchema>(
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
// Leaf schema shared between all SchemaFactory instances.
|
|
71
|
-
/**
|
|
72
|
-
* @internal
|
|
73
|
-
*/
|
|
74
71
|
export const stringSchema = makeLeaf("string", ValueSchema.String);
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* @internal
|
|
78
|
-
*/
|
|
79
72
|
export const numberSchema = makeLeaf("number", ValueSchema.Number);
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* @internal
|
|
83
|
-
*/
|
|
84
73
|
export const booleanSchema = makeLeaf("boolean", ValueSchema.Boolean);
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* @internal
|
|
88
|
-
*/
|
|
89
74
|
export const nullSchema = makeLeaf("null", ValueSchema.Null);
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* @internal
|
|
93
|
-
*/
|
|
94
75
|
export const handleSchema = makeLeaf("handle", ValueSchema.FluidHandle);
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import { assert, Lazy } from "@fluidframework/core-utils/internal";
|
|
7
7
|
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
8
8
|
|
|
9
|
-
import type { FieldKey } from "../core/index.js";
|
|
9
|
+
import type { FieldKey, SchemaPolicy } from "../core/index.js";
|
|
10
10
|
import {
|
|
11
11
|
FieldKinds,
|
|
12
12
|
type FlexTreeField,
|
|
@@ -42,7 +42,11 @@ import {
|
|
|
42
42
|
} from "./core/index.js";
|
|
43
43
|
import { mapTreeFromNodeData, type InsertableContent } from "./toMapTree.js";
|
|
44
44
|
import { type RestrictiveStringRecord, fail, type FlattenKeys } from "../util/index.js";
|
|
45
|
-
import
|
|
45
|
+
import {
|
|
46
|
+
isObjectNodeSchema,
|
|
47
|
+
type ObjectNodeSchema,
|
|
48
|
+
type ObjectNodeSchemaInternalData,
|
|
49
|
+
} from "./objectNodeTypes.js";
|
|
46
50
|
import { TreeNodeValid, type MostDerivedData } from "./treeNodeValid.js";
|
|
47
51
|
import { getUnhydratedContext } from "./createContext.js";
|
|
48
52
|
|
|
@@ -100,24 +104,31 @@ export type FieldHasDefault<T extends ImplicitFieldSchema> = T extends FieldSche
|
|
|
100
104
|
*
|
|
101
105
|
* @see {@link Input}
|
|
102
106
|
*
|
|
103
|
-
* @privateRemarks
|
|
107
|
+
* @privateRemarks
|
|
108
|
+
* TODO: consider separating these cases into different types.
|
|
109
|
+
*
|
|
110
|
+
* Empty objects don't get "no excess property" checks in literals.
|
|
111
|
+
* To prevent extraneous properties in literals for the fields of an empty object from compiling, the empty case is special cased to produce `Record<string, never>`.
|
|
112
|
+
* More details at {@link https://mercury.com/blog/creating-an-emptyobject-type-in-typescript}.
|
|
104
113
|
*
|
|
105
114
|
* @system @public
|
|
106
115
|
*/
|
|
107
116
|
export type InsertableObjectFromSchemaRecord<
|
|
108
117
|
T extends RestrictiveStringRecord<ImplicitFieldSchema>,
|
|
109
|
-
> =
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
118
|
+
> = Record<string, never> extends T
|
|
119
|
+
? Record<string, never>
|
|
120
|
+
: FlattenKeys<
|
|
121
|
+
{
|
|
122
|
+
readonly [Property in keyof T]?: InsertableTreeFieldFromImplicitField<
|
|
123
|
+
T[Property & string]
|
|
124
|
+
>;
|
|
125
|
+
} & {
|
|
126
|
+
// Field does not have a known default, make it required:
|
|
127
|
+
readonly [Property in keyof T as FieldHasDefault<T[Property & string]> extends false
|
|
128
|
+
? Property
|
|
129
|
+
: never]: InsertableTreeFieldFromImplicitField<T[Property & string]>;
|
|
130
|
+
}
|
|
113
131
|
>;
|
|
114
|
-
} & {
|
|
115
|
-
// Field does not have a known default, make it required:
|
|
116
|
-
readonly [Property in keyof T as FieldHasDefault<T[Property & string]> extends false
|
|
117
|
-
? Property
|
|
118
|
-
: never]: InsertableTreeFieldFromImplicitField<T[Property & string]>;
|
|
119
|
-
}
|
|
120
|
-
>;
|
|
121
132
|
|
|
122
133
|
/**
|
|
123
134
|
* Maps from simple field keys ("property" keys) to information about the field.
|
|
@@ -323,6 +334,7 @@ export function objectSchema<
|
|
|
323
334
|
identifier: TName,
|
|
324
335
|
info: T,
|
|
325
336
|
implicitlyConstructable: ImplicitlyConstructable,
|
|
337
|
+
allowUnknownOptionalFields: boolean,
|
|
326
338
|
): ObjectNodeSchema<TName, T, ImplicitlyConstructable> & ObjectNodeSchemaInternalData {
|
|
327
339
|
// Ensure no collisions between final set of property keys, and final set of stored keys (including those
|
|
328
340
|
// implicitly derived from property keys)
|
|
@@ -361,6 +373,7 @@ export function objectSchema<
|
|
|
361
373
|
]),
|
|
362
374
|
);
|
|
363
375
|
public static readonly identifierFieldKeys: readonly FieldKey[] = identifierFieldKeys;
|
|
376
|
+
public static readonly allowUnknownOptionalFields: boolean = allowUnknownOptionalFields;
|
|
364
377
|
|
|
365
378
|
public static override prepareInstance<T2>(
|
|
366
379
|
this: typeof TreeNodeValid<T2>,
|
|
@@ -502,3 +515,21 @@ function assertUniqueKeys<
|
|
|
502
515
|
derivedStoredKeys.add(storedKey);
|
|
503
516
|
}
|
|
504
517
|
}
|
|
518
|
+
|
|
519
|
+
/**
|
|
520
|
+
* Creates a policy for allowing unknown optional fields on an object node which delegates to the policy defined
|
|
521
|
+
* on the object node's internal schema data.
|
|
522
|
+
*/
|
|
523
|
+
export function createUnknownOptionalFieldPolicy(
|
|
524
|
+
schema: ImplicitFieldSchema,
|
|
525
|
+
): SchemaPolicy["allowUnknownOptionalFields"] {
|
|
526
|
+
const context = getUnhydratedContext(schema);
|
|
527
|
+
return (identifier) => {
|
|
528
|
+
const storedSchema = context.schema.get(identifier);
|
|
529
|
+
return (
|
|
530
|
+
storedSchema !== undefined &&
|
|
531
|
+
isObjectNodeSchema(storedSchema) &&
|
|
532
|
+
storedSchema.allowUnknownOptionalFields
|
|
533
|
+
);
|
|
534
|
+
};
|
|
535
|
+
}
|
|
@@ -55,6 +55,11 @@ export interface ObjectNodeSchemaInternalData {
|
|
|
55
55
|
* Stored keys which hold identifiers.
|
|
56
56
|
*/
|
|
57
57
|
readonly identifierFieldKeys: readonly FieldKey[];
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Whether to tolerate (and preserve) additional unknown optional fields in instances of this object node.
|
|
61
|
+
*/
|
|
62
|
+
readonly allowUnknownOptionalFields: boolean;
|
|
58
63
|
}
|
|
59
64
|
|
|
60
65
|
export const ObjectNodeSchema = {
|
|
@@ -24,6 +24,7 @@ import type {
|
|
|
24
24
|
TreeNodeSchemaClass,
|
|
25
25
|
TreeNode,
|
|
26
26
|
TreeNodeSchemaCore,
|
|
27
|
+
TreeNodeSchemaNonClass,
|
|
27
28
|
} from "./core/index.js";
|
|
28
29
|
import type { FieldKey } from "../core/index.js";
|
|
29
30
|
import type { InsertableContent } from "./toMapTree.js";
|
|
@@ -759,15 +760,19 @@ export type InsertableTreeNodeFromAllowedTypes<TList extends AllowedTypes> =
|
|
|
759
760
|
|
|
760
761
|
/**
|
|
761
762
|
* Takes in `TreeNodeSchema[]` and returns a TypedNode union.
|
|
763
|
+
* @privateRemarks
|
|
764
|
+
* If a schema is both TreeNodeSchemaClass and TreeNodeSchemaNonClass, prefer TreeNodeSchemaClass since that includes subclasses properly.
|
|
762
765
|
* @public
|
|
763
766
|
*/
|
|
764
|
-
export type NodeFromSchema<T extends TreeNodeSchema> = T extends
|
|
767
|
+
export type NodeFromSchema<T extends TreeNodeSchema> = T extends TreeNodeSchemaClass<
|
|
765
768
|
string,
|
|
766
769
|
NodeKind,
|
|
767
770
|
infer TNode
|
|
768
771
|
>
|
|
769
772
|
? TNode
|
|
770
|
-
:
|
|
773
|
+
: T extends TreeNodeSchemaNonClass<string, NodeKind, infer TNode>
|
|
774
|
+
? TNode
|
|
775
|
+
: never;
|
|
771
776
|
|
|
772
777
|
/**
|
|
773
778
|
* Data which can be used as a node to be inserted.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { assert
|
|
6
|
+
import { assert } 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
|
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
valueSchemaAllows,
|
|
22
22
|
type NodeKeyManager,
|
|
23
23
|
} from "../feature-libraries/index.js";
|
|
24
|
-
import { brand, fail, isReadonlyArray, find } from "../util/index.js";
|
|
24
|
+
import { brand, fail, isReadonlyArray, find, hasSome, hasSingle } from "../util/index.js";
|
|
25
25
|
|
|
26
26
|
import { nullSchema } from "./leafNodeSchema.js";
|
|
27
27
|
import {
|
|
@@ -465,10 +465,10 @@ function getType(
|
|
|
465
465
|
);
|
|
466
466
|
}
|
|
467
467
|
assert(
|
|
468
|
-
possibleTypes
|
|
468
|
+
hasSome(possibleTypes),
|
|
469
469
|
0x84e /* data is incompatible with all types allowed by the schema */,
|
|
470
470
|
);
|
|
471
|
-
if (possibleTypes
|
|
471
|
+
if (!hasSingle(possibleTypes)) {
|
|
472
472
|
throw new UsageError(
|
|
473
473
|
`The provided data is compatible with more than one type allowed by the schema.
|
|
474
474
|
The set of possible types is ${JSON.stringify([
|
|
@@ -478,7 +478,7 @@ Explicitly construct an unhydrated node of the desired type to disambiguate.
|
|
|
478
478
|
For class-based schema, this can be done by replacing an expression like "{foo: 1}" with "new MySchema({foo: 1})".`,
|
|
479
479
|
);
|
|
480
480
|
}
|
|
481
|
-
return possibleTypes[0]
|
|
481
|
+
return possibleTypes[0];
|
|
482
482
|
}
|
|
483
483
|
|
|
484
484
|
/**
|