@fluidframework/tree 2.11.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 +4 -0
- package/api-report/tree.alpha.api.md +2 -2
- package/api-report/tree.beta.api.md +1 -1
- package/api-report/tree.legacy.alpha.api.md +1 -1
- package/api-report/tree.legacy.public.api.md +1 -1
- package/api-report/tree.public.api.md +1 -1
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +5 -3
- package/dist/core/index.js.map +1 -1
- package/dist/core/rebase/utils.d.ts.map +1 -1
- package/dist/core/rebase/utils.js +2 -9
- package/dist/core/rebase/utils.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-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/{feature-libraries/chunked-forest → 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/index.d.ts +1 -0
- package/dist/core/tree/index.d.ts.map +1 -1
- package/dist/core/tree/index.js +5 -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/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 +1 -2
- package/dist/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
- 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 +13 -13
- 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/index.d.ts +1 -1
- package/dist/feature-libraries/index.d.ts.map +1 -1
- package/dist/feature-libraries/index.js +6 -2
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/indexing/anchorTreeIndex.d.ts +8 -1
- package/dist/feature-libraries/indexing/anchorTreeIndex.d.ts.map +1 -1
- package/dist/feature-libraries/indexing/anchorTreeIndex.js +31 -5
- package/dist/feature-libraries/indexing/anchorTreeIndex.js.map +1 -1
- 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/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/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 +4 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -14
- 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 +1 -1
- package/dist/shared-tree/index.d.ts.map +1 -1
- package/dist/shared-tree/index.js.map +1 -1
- package/dist/shared-tree/schematizeTree.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.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +8 -12
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree/sharedTree.d.ts +25 -7
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +104 -15
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/treeCheckout.d.ts +35 -12
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +159 -127
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree-core/branch.d.ts +13 -35
- package/dist/shared-tree-core/branch.d.ts.map +1 -1
- package/dist/shared-tree-core/branch.js +12 -77
- package/dist/shared-tree-core/branch.js.map +1 -1
- package/dist/shared-tree-core/branchCommitEnricher.d.ts +7 -1
- package/dist/shared-tree-core/branchCommitEnricher.d.ts.map +1 -1
- package/dist/shared-tree-core/branchCommitEnricher.js +16 -18
- package/dist/shared-tree-core/branchCommitEnricher.js.map +1 -1
- package/dist/shared-tree-core/editManager.d.ts.map +1 -1
- package/dist/shared-tree-core/editManager.js +2 -2
- 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 +2 -2
- package/dist/shared-tree-core/index.js.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.d.ts +2 -9
- package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.js +4 -16
- package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/dist/shared-tree-core/transaction.d.ts +38 -0
- package/dist/shared-tree-core/transaction.d.ts.map +1 -1
- package/dist/shared-tree-core/transaction.js +118 -6
- package/dist/shared-tree-core/transaction.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/index.d.ts +2 -2
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js +4 -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/simpleTreeIndex.js +3 -1
- package/dist/simple-tree/api/simpleTreeIndex.js.map +1 -1
- 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 +1 -0
- 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/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/index.d.ts +2 -2
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +5 -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 +8 -3
- 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/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 -1
- package/dist/util/index.d.ts.map +1 -1
- package/dist/util/index.js +2 -1
- package/dist/util/index.js.map +1 -1
- package/dist/util/typeCheck.d.ts +0 -2
- package/dist/util/typeCheck.d.ts.map +1 -1
- package/dist/util/typeCheck.js.map +1 -1
- package/dist/util/utils.d.ts +13 -0
- package/dist/util/utils.d.ts.map +1 -1
- package/dist/util/utils.js +23 -1
- package/dist/util/utils.js.map +1 -1
- package/lib/core/index.d.ts +2 -2
- package/lib/core/index.d.ts.map +1 -1
- package/lib/core/index.js +2 -2
- package/lib/core/index.js.map +1 -1
- package/lib/core/rebase/utils.d.ts.map +1 -1
- package/lib/core/rebase/utils.js +3 -10
- package/lib/core/rebase/utils.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-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/{feature-libraries/chunked-forest → 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/index.d.ts +1 -0
- package/lib/core/tree/index.d.ts.map +1 -1
- package/lib/core/tree/index.js +1 -0
- 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/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 +1 -2
- package/lib/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
- 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 +1 -1
- 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/index.d.ts +1 -1
- package/lib/feature-libraries/index.d.ts.map +1 -1
- package/lib/feature-libraries/index.js +1 -1
- package/lib/feature-libraries/index.js.map +1 -1
- package/lib/feature-libraries/indexing/anchorTreeIndex.d.ts +8 -1
- package/lib/feature-libraries/indexing/anchorTreeIndex.d.ts.map +1 -1
- package/lib/feature-libraries/indexing/anchorTreeIndex.js +31 -5
- package/lib/feature-libraries/indexing/anchorTreeIndex.js.map +1 -1
- 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/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/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 +4 -5
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -3
- 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 +1 -1
- package/lib/shared-tree/index.d.ts.map +1 -1
- package/lib/shared-tree/index.js.map +1 -1
- package/lib/shared-tree/schematizeTree.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.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +10 -14
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/shared-tree/sharedTree.d.ts +25 -7
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +105 -16
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/treeCheckout.d.ts +35 -12
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +161 -129
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree-core/branch.d.ts +13 -35
- package/lib/shared-tree-core/branch.d.ts.map +1 -1
- package/lib/shared-tree-core/branch.js +12 -76
- package/lib/shared-tree-core/branch.js.map +1 -1
- package/lib/shared-tree-core/branchCommitEnricher.d.ts +7 -1
- package/lib/shared-tree-core/branchCommitEnricher.d.ts.map +1 -1
- package/lib/shared-tree-core/branchCommitEnricher.js +16 -18
- package/lib/shared-tree-core/branchCommitEnricher.js.map +1 -1
- package/lib/shared-tree-core/editManager.d.ts.map +1 -1
- package/lib/shared-tree-core/editManager.js +3 -3
- 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 +2 -9
- package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.js +4 -16
- package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/lib/shared-tree-core/transaction.d.ts +38 -0
- package/lib/shared-tree-core/transaction.d.ts.map +1 -1
- package/lib/shared-tree-core/transaction.js +112 -1
- package/lib/shared-tree-core/transaction.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/index.d.ts +2 -2
- package/lib/simple-tree/api/index.d.ts.map +1 -1
- package/lib/simple-tree/api/index.js +2 -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/simpleTreeIndex.js +3 -1
- package/lib/simple-tree/api/simpleTreeIndex.js.map +1 -1
- 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 +1 -0
- 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/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/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 +8 -3
- 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/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 -1
- package/lib/util/index.d.ts.map +1 -1
- package/lib/util/index.js +1 -1
- package/lib/util/index.js.map +1 -1
- package/lib/util/typeCheck.d.ts +0 -2
- package/lib/util/typeCheck.d.ts.map +1 -1
- package/lib/util/typeCheck.js.map +1 -1
- package/lib/util/utils.d.ts +13 -0
- package/lib/util/utils.d.ts.map +1 -1
- package/lib/util/utils.js +21 -0
- package/lib/util/utils.js.map +1 -1
- package/package.json +22 -22
- package/src/core/index.ts +5 -1
- package/src/core/rebase/utils.ts +17 -20
- package/src/core/schema-stored/format.ts +0 -3
- package/src/core/schema-stored/schema.ts +13 -10
- package/src/core/schema-view/index.ts +0 -1
- package/src/core/schema-view/view.ts +0 -11
- package/src/{feature-libraries/chunked-forest → core/tree}/chunk.ts +4 -4
- package/src/core/tree/index.ts +8 -0
- package/src/core/tree/treeTextFormat.ts +0 -5
- package/src/core/tree/types.ts +0 -5
- 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 +2 -1
- 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 +4 -1
- package/src/feature-libraries/default-schema/defaultSchema.ts +1 -0
- package/src/feature-libraries/default-schema/schemaChecker.ts +4 -1
- package/src/feature-libraries/index.ts +13 -0
- package/src/feature-libraries/indexing/anchorTreeIndex.ts +34 -5
- 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/sequence-field/types.ts +0 -1
- package/src/index.ts +1 -29
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/index.ts +1 -0
- package/src/shared-tree/schematizeTree.ts +6 -10
- package/src/shared-tree/schematizingTreeView.ts +11 -21
- package/src/shared-tree/sharedTree.ts +173 -41
- package/src/shared-tree/treeCheckout.ts +224 -175
- package/src/shared-tree-core/branch.ts +29 -122
- package/src/shared-tree-core/branchCommitEnricher.ts +19 -20
- package/src/shared-tree-core/editManager.ts +3 -8
- package/src/shared-tree-core/index.ts +2 -1
- package/src/shared-tree-core/sharedTreeCore.ts +8 -19
- package/src/shared-tree-core/transaction.ts +145 -0
- 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/index.ts +12 -2
- package/src/simple-tree/api/schemaFactory.ts +62 -1
- package/src/simple-tree/api/simpleSchema.ts +3 -1
- package/src/simple-tree/api/simpleTreeIndex.ts +2 -0
- package/src/simple-tree/api/storedSchema.ts +7 -22
- package/src/simple-tree/api/tree.ts +6 -0
- package/src/simple-tree/api/verboseTree.ts +2 -2
- package/src/simple-tree/api/view.ts +197 -51
- package/src/simple-tree/index.ts +6 -0
- package/src/simple-tree/leafNodeSchema.ts +0 -19
- package/src/simple-tree/objectNode.ts +26 -2
- package/src/simple-tree/objectNodeTypes.ts +5 -0
- package/src/simple-tree/schemaTypes.ts +7 -2
- package/src/simple-tree/toStoredSchema.ts +25 -19
- package/src/util/brand.ts +0 -2
- package/src/util/index.ts +1 -0
- package/src/util/typeCheck.ts +0 -2
- package/src/util/utils.ts +26 -0
- package/dist/feature-libraries/chunked-forest/chunk.d.ts.map +0 -1
- package/dist/feature-libraries/chunked-forest/chunk.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
|
@@ -11,8 +11,12 @@ import {
|
|
|
11
11
|
EmptyKey,
|
|
12
12
|
forEachField,
|
|
13
13
|
inCursorField,
|
|
14
|
+
LeafNodeStoredSchema,
|
|
14
15
|
mapCursorField,
|
|
16
|
+
ObjectNodeStoredSchema,
|
|
15
17
|
type ITreeCursor,
|
|
18
|
+
type TreeNodeSchemaIdentifier,
|
|
19
|
+
type TreeNodeStoredSchema,
|
|
16
20
|
} from "../../core/index.js";
|
|
17
21
|
import { fail } from "../../util/index.js";
|
|
18
22
|
import type { TreeLeafValue } from "../schemaTypes.js";
|
|
@@ -25,6 +29,7 @@ import {
|
|
|
25
29
|
stringSchema,
|
|
26
30
|
} from "../leafNodeSchema.js";
|
|
27
31
|
import { isObjectNodeSchema } from "../objectNodeTypes.js";
|
|
32
|
+
import { FieldKinds, valueSchemaAllows } from "../../feature-libraries/index.js";
|
|
28
33
|
|
|
29
34
|
/**
|
|
30
35
|
* Options for how to encode a tree.
|
|
@@ -63,7 +68,7 @@ export type CustomTreeNode<TChild> = TChild[] | { [key: string]: TChild };
|
|
|
63
68
|
/**
|
|
64
69
|
* Builds an {@link CustomTree} from a cursor in Nodes mode.
|
|
65
70
|
*/
|
|
66
|
-
export function
|
|
71
|
+
export function customFromCursor<TChild, THandle>(
|
|
67
72
|
reader: ITreeCursor,
|
|
68
73
|
options: Required<EncodeOptions<THandle>>,
|
|
69
74
|
schema: ReadonlyMap<string, TreeNodeSchema>,
|
|
@@ -118,3 +123,66 @@ export function customFromCursorInner<TChild, THandle>(
|
|
|
118
123
|
}
|
|
119
124
|
}
|
|
120
125
|
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Builds an {@link CustomTree} from a cursor in Nodes mode.
|
|
129
|
+
* @remarks
|
|
130
|
+
* Uses stored keys and stored schema.
|
|
131
|
+
*/
|
|
132
|
+
export function customFromCursorStored<TChild>(
|
|
133
|
+
reader: ITreeCursor,
|
|
134
|
+
schema: ReadonlyMap<TreeNodeSchemaIdentifier, TreeNodeStoredSchema>,
|
|
135
|
+
childHandler: (
|
|
136
|
+
reader: ITreeCursor,
|
|
137
|
+
schema: ReadonlyMap<TreeNodeSchemaIdentifier, TreeNodeStoredSchema>,
|
|
138
|
+
) => TChild,
|
|
139
|
+
): CustomTree<TChild, IFluidHandle> {
|
|
140
|
+
const type = reader.type;
|
|
141
|
+
const nodeSchema = schema.get(type) ?? fail("missing schema for type in cursor");
|
|
142
|
+
|
|
143
|
+
if (nodeSchema instanceof LeafNodeStoredSchema) {
|
|
144
|
+
assert(valueSchemaAllows(nodeSchema.leafValue, reader.value), 0xa9c /* invalid value */);
|
|
145
|
+
return reader.value;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
assert(reader.value === undefined, 0xa9d /* out of schema: unexpected value */);
|
|
149
|
+
|
|
150
|
+
const arrayTypes = tryStoredSchemaAsArray(nodeSchema);
|
|
151
|
+
if (arrayTypes !== undefined) {
|
|
152
|
+
const field = inCursorField(reader, EmptyKey, () =>
|
|
153
|
+
mapCursorField(reader, () => childHandler(reader, schema)),
|
|
154
|
+
);
|
|
155
|
+
return field;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
const fields: Record<string, TChild> = {};
|
|
159
|
+
forEachField(reader, () => {
|
|
160
|
+
const children = mapCursorField(reader, () => childHandler(reader, schema));
|
|
161
|
+
if (children.length === 1) {
|
|
162
|
+
const storedKey = reader.getFieldKey();
|
|
163
|
+
// Length is checked above.
|
|
164
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
165
|
+
fields[storedKey] = children[0]!;
|
|
166
|
+
} else {
|
|
167
|
+
assert(children.length === 0, 0xa9e /* invalid children number */);
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
return fields;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Assumes `schema` corresponds to a simple-tree schema.
|
|
175
|
+
* If it is an array schema, returns the allowed types for the array field.
|
|
176
|
+
* Otherwise returns `undefined`.
|
|
177
|
+
*/
|
|
178
|
+
export function tryStoredSchemaAsArray(
|
|
179
|
+
schema: TreeNodeStoredSchema,
|
|
180
|
+
): ReadonlySet<string> | undefined {
|
|
181
|
+
if (schema instanceof ObjectNodeStoredSchema) {
|
|
182
|
+
const empty = schema.getFieldSchema(EmptyKey);
|
|
183
|
+
if (empty.kind === FieldKinds.sequence.identifier) {
|
|
184
|
+
assert(schema.objectNodeFields.size === 1, 0xa9f /* invalid schema */);
|
|
185
|
+
return empty.types;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
@@ -17,7 +17,11 @@ export {
|
|
|
17
17
|
type TreeBranchEvents,
|
|
18
18
|
asTreeViewAlpha,
|
|
19
19
|
} from "./tree.js";
|
|
20
|
-
export {
|
|
20
|
+
export {
|
|
21
|
+
SchemaFactory,
|
|
22
|
+
type ScopedSchemaName,
|
|
23
|
+
type SchemaFactoryObjectOptions,
|
|
24
|
+
} from "./schemaFactory.js";
|
|
21
25
|
export type {
|
|
22
26
|
ValidateRecursiveSchema,
|
|
23
27
|
FixRecursiveArraySchema,
|
|
@@ -90,7 +94,13 @@ export {
|
|
|
90
94
|
verboseFromCursor,
|
|
91
95
|
} from "./verboseTree.js";
|
|
92
96
|
|
|
93
|
-
export
|
|
97
|
+
export {
|
|
98
|
+
type EncodeOptions,
|
|
99
|
+
customFromCursorStored,
|
|
100
|
+
type CustomTreeNode,
|
|
101
|
+
type CustomTreeValue,
|
|
102
|
+
tryStoredSchemaAsArray,
|
|
103
|
+
} from "./customTree.js";
|
|
94
104
|
|
|
95
105
|
export { type ConciseTree, conciseFromCursor } from "./conciseTree.js";
|
|
96
106
|
|
|
@@ -18,6 +18,9 @@ import {
|
|
|
18
18
|
getOrCreate,
|
|
19
19
|
isReadonlyArray,
|
|
20
20
|
} from "../../util/index.js";
|
|
21
|
+
// This import is required for intellisense in @link doc comments on mouseover in VSCode.
|
|
22
|
+
// eslint-disable-next-line unused-imports/no-unused-imports, @typescript-eslint/no-unused-vars
|
|
23
|
+
import type { TreeAlpha } from "../../shared-tree/index.js";
|
|
21
24
|
|
|
22
25
|
import {
|
|
23
26
|
booleanSchema,
|
|
@@ -74,6 +77,7 @@ import type {
|
|
|
74
77
|
import { createFieldSchemaUnsafe } from "./schemaFactoryRecursive.js";
|
|
75
78
|
import { TreeNodeValid } from "../treeNodeValid.js";
|
|
76
79
|
import { isLazy } from "../flexList.js";
|
|
80
|
+
|
|
77
81
|
/**
|
|
78
82
|
* Gets the leaf domain schema compatible with a given {@link TreeValue}.
|
|
79
83
|
*/
|
|
@@ -97,6 +101,58 @@ export function schemaFromValue(value: TreeValue): TreeNodeSchema {
|
|
|
97
101
|
}
|
|
98
102
|
}
|
|
99
103
|
|
|
104
|
+
/**
|
|
105
|
+
* Options when declaring an {@link SchemaFactory.object|object node}'s schema
|
|
106
|
+
*/
|
|
107
|
+
export interface SchemaFactoryObjectOptions {
|
|
108
|
+
/**
|
|
109
|
+
* Opt in to viewing documents which have unknown optional fields for this object's identifier, i.e. optional fields
|
|
110
|
+
* in the document schema which are not present in this object schema declaration.
|
|
111
|
+
*
|
|
112
|
+
* @defaultValue `false`
|
|
113
|
+
* @remarks
|
|
114
|
+
* The advantage of enabling this option is that it allows an application ecosystem with staged rollout to more quickly
|
|
115
|
+
* upgrade documents to include schema for new optional features.
|
|
116
|
+
*
|
|
117
|
+
* However, it does come with trade-offs that applications should weigh carefully when it comes to interactions between
|
|
118
|
+
* code and documents.
|
|
119
|
+
* When opening such documents, the API presented is still determined by the view schema.
|
|
120
|
+
* This can have implications on the behavior of edits or code which uses portions of the view schema,
|
|
121
|
+
* since this may inadvertently drop data which is present in those optional fields in the document schema.
|
|
122
|
+
*
|
|
123
|
+
* Consider the following example:
|
|
124
|
+
*
|
|
125
|
+
* ```typescript
|
|
126
|
+
* const sf = new SchemaFactory("com.example");
|
|
127
|
+
* class PersonView extends sf.object("Person", { name: sf.string }, { allowUnknownOptionalFields: true }) {}
|
|
128
|
+
* class PersonStored extends sf.object("Person", { name: sf.string, nickname: sf.optional(sf.string) }) {}
|
|
129
|
+
*
|
|
130
|
+
* // Say we have a document which uses `PersonStored` in its schema, and application code constructs
|
|
131
|
+
* // a tree view using `PersonView`. If the application for some reason had implemented a function like this:
|
|
132
|
+
* function clonePerson(a: PersonView): PersonView {
|
|
133
|
+
* return new PersonView({ name: a.name });
|
|
134
|
+
* }
|
|
135
|
+
* // ...or even like this:
|
|
136
|
+
* function clonePerson(a: PersonView): PersonView {
|
|
137
|
+
* return new PersonView({ ...a})
|
|
138
|
+
* }
|
|
139
|
+
* // Then the alleged clone wouldn't actually clone the entire person in either case, it would drop the nickname.
|
|
140
|
+
* ```
|
|
141
|
+
*
|
|
142
|
+
* If an application wants to be particularly careful to preserve all data on a node when editing it, it can use
|
|
143
|
+
* {@link TreeAlpha.(importVerbose:2)|import}/{@link TreeAlpha.(exportVerbose:2)|export} APIs with persistent keys.
|
|
144
|
+
*
|
|
145
|
+
* Note that public API methods which operate on entire nodes (such as `moveTo`, `moveToEnd`, etc. on arrays) do not encounter
|
|
146
|
+
* this problem as SharedTree's implementation stores the entire node in its lower layers. It's only when application code
|
|
147
|
+
* reaches into a node (either by accessing its fields, spreading it, or some other means) that this problem arises.
|
|
148
|
+
*/
|
|
149
|
+
allowUnknownOptionalFields?: boolean;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
export const defaultSchemaFactoryObjectOptions: Required<SchemaFactoryObjectOptions> = {
|
|
153
|
+
allowUnknownOptionalFields: false,
|
|
154
|
+
};
|
|
155
|
+
|
|
100
156
|
/**
|
|
101
157
|
* The name of a schema produced by {@link SchemaFactory}, including its optional scope prefix.
|
|
102
158
|
*
|
|
@@ -333,7 +389,12 @@ export class SchemaFactory<
|
|
|
333
389
|
true,
|
|
334
390
|
T
|
|
335
391
|
> {
|
|
336
|
-
return objectSchema(
|
|
392
|
+
return objectSchema(
|
|
393
|
+
this.scoped(name),
|
|
394
|
+
fields,
|
|
395
|
+
true,
|
|
396
|
+
defaultSchemaFactoryObjectOptions.allowUnknownOptionalFields,
|
|
397
|
+
);
|
|
337
398
|
}
|
|
338
399
|
|
|
339
400
|
/**
|
|
@@ -30,7 +30,9 @@ export interface SimpleNodeSchemaBase<TNodeKind extends NodeKind> {
|
|
|
30
30
|
*/
|
|
31
31
|
export interface SimpleObjectNodeSchema extends SimpleNodeSchemaBase<NodeKind.Object> {
|
|
32
32
|
/**
|
|
33
|
-
* Schemas for each of the object's fields, keyed off of schema's
|
|
33
|
+
* Schemas for each of the object's fields, keyed off of schema's keys.
|
|
34
|
+
* @remarks
|
|
35
|
+
* Depending on how this schema was exported, the string keys may be either the property keys or the stored keys.
|
|
34
36
|
*/
|
|
35
37
|
readonly fields: Record<string, SimpleFieldSchema>;
|
|
36
38
|
}
|
|
@@ -200,6 +200,8 @@ export function createSimpleTreeIndex<
|
|
|
200
200
|
return treeNodeApi.status(simpleTree);
|
|
201
201
|
}
|
|
202
202
|
},
|
|
203
|
+
// simple tree indexes are shallow indexes, indicating so allows for a performance optimization
|
|
204
|
+
true,
|
|
203
205
|
);
|
|
204
206
|
|
|
205
207
|
// all the type checking guarantees that we put nodes of the correct type in the index
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import type { ICodecOptions } from "../../codec/index.js";
|
|
7
|
-
import {
|
|
7
|
+
import type { TreeStoredSchema } from "../../core/index.js";
|
|
8
8
|
import {
|
|
9
9
|
defaultSchemaPolicy,
|
|
10
10
|
encodeTreeSchema,
|
|
@@ -59,7 +59,7 @@ export function extractPersistedSchema(schema: ImplicitFieldSchema): JsonCompati
|
|
|
59
59
|
* opening a document that used the `persisted` schema and provided `view` to {@link ViewableTree.viewWith}.
|
|
60
60
|
*
|
|
61
61
|
* @param persisted - Schema persisted for a document. Typically persisted alongside the data and assumed to describe that data.
|
|
62
|
-
* @param view - Schema which would be used to view persisted content.
|
|
62
|
+
* @param view - Schema which would be used to view persisted content.
|
|
63
63
|
* @param options - {@link ICodecOptions} used when parsing the provided schema.
|
|
64
64
|
* @param canInitialize - Passed through to the return value unchanged and otherwise unused.
|
|
65
65
|
* @returns The {@link SchemaCompatibilityStatus} a {@link TreeView} would report for this combination of schema.
|
|
@@ -75,7 +75,7 @@ export function extractPersistedSchema(schema: ImplicitFieldSchema): JsonCompati
|
|
|
75
75
|
* assert(
|
|
76
76
|
* comparePersistedSchema(
|
|
77
77
|
* require("./schema.json"),
|
|
78
|
-
*
|
|
78
|
+
* MySchema,
|
|
79
79
|
* { jsonValidator: typeboxValidator },
|
|
80
80
|
* false,
|
|
81
81
|
* ).canUpgrade,
|
|
@@ -85,14 +85,13 @@ export function extractPersistedSchema(schema: ImplicitFieldSchema): JsonCompati
|
|
|
85
85
|
*/
|
|
86
86
|
export function comparePersistedSchema(
|
|
87
87
|
persisted: JsonCompatible,
|
|
88
|
-
view:
|
|
88
|
+
view: ImplicitFieldSchema,
|
|
89
89
|
options: ICodecOptions,
|
|
90
90
|
canInitialize: boolean,
|
|
91
91
|
): SchemaCompatibilityStatus {
|
|
92
92
|
const schemaCodec = makeSchemaCodec(options);
|
|
93
93
|
const stored = schemaCodec.decode(persisted as Format);
|
|
94
|
-
const
|
|
95
|
-
const viewSchema = new ViewSchema(defaultSchemaPolicy, {}, viewParsed);
|
|
94
|
+
const viewSchema = new ViewSchema(defaultSchemaPolicy, {}, view);
|
|
96
95
|
return comparePersistedSchemaInternal(stored, viewSchema, canInitialize);
|
|
97
96
|
}
|
|
98
97
|
|
|
@@ -105,22 +104,8 @@ export function comparePersistedSchemaInternal(
|
|
|
105
104
|
viewSchema: ViewSchema,
|
|
106
105
|
canInitialize: boolean,
|
|
107
106
|
): SchemaCompatibilityStatus {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
// TODO: AB#8121: Weaken this check to support viewing under additional circumstances.
|
|
111
|
-
// In the near term, this should support viewing documents with additional optional fields in their schema on object types.
|
|
112
|
-
// Longer-term (as demand arises), we could also add APIs to constructing view schema to allow for more flexibility
|
|
113
|
-
// (e.g. out-of-schema content handlers could allow support for viewing docs which have extra allowed types in a particular field)
|
|
114
|
-
const canView =
|
|
115
|
-
result.write === Compatibility.Compatible && result.read === Compatibility.Compatible;
|
|
116
|
-
const canUpgrade = result.read === Compatibility.Compatible;
|
|
117
|
-
const isEquivalent = canView && canUpgrade;
|
|
118
|
-
const compatibility: SchemaCompatibilityStatus = {
|
|
119
|
-
canView,
|
|
120
|
-
canUpgrade,
|
|
121
|
-
isEquivalent,
|
|
107
|
+
return {
|
|
108
|
+
...viewSchema.checkCompatibility(stored),
|
|
122
109
|
canInitialize,
|
|
123
110
|
};
|
|
124
|
-
|
|
125
|
-
return compatibility;
|
|
126
111
|
}
|
|
@@ -12,6 +12,10 @@ import type {
|
|
|
12
12
|
RevertibleFactory,
|
|
13
13
|
} from "../../core/index.js";
|
|
14
14
|
|
|
15
|
+
// This is referenced by doc comments.
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars, unused-imports/no-unused-imports
|
|
17
|
+
import type { TreeAlpha } from "../../shared-tree/index.js";
|
|
18
|
+
|
|
15
19
|
import {
|
|
16
20
|
type ImplicitFieldSchema,
|
|
17
21
|
type InsertableField,
|
|
@@ -31,6 +35,7 @@ import { markSchemaMostDerived } from "./schemaFactory.js";
|
|
|
31
35
|
import { fail, getOrCreate } from "../../util/index.js";
|
|
32
36
|
import type { MakeNominal } from "../../util/index.js";
|
|
33
37
|
import { walkFieldSchema } from "../walkFieldSchema.js";
|
|
38
|
+
|
|
34
39
|
/**
|
|
35
40
|
* A tree from which a {@link TreeView} can be created.
|
|
36
41
|
*
|
|
@@ -41,6 +46,7 @@ import { walkFieldSchema } from "../walkFieldSchema.js";
|
|
|
41
46
|
* Maybe rename "exportJsonSchema" to align on "concise" terminology.
|
|
42
47
|
* Ensure schema exporting APIs here align and reference APIs for exporting view schema to the same formats (which should include stored vs property key choice).
|
|
43
48
|
* Make sure users of independentView can use these export APIs (maybe provide a reference back to the ViewableTree from the TreeView to accomplish that).
|
|
49
|
+
* Some of these APIs are on ISharedTree and can get moved here.
|
|
44
50
|
* @system @sealed @public
|
|
45
51
|
*/
|
|
46
52
|
export interface ViewableTree {
|
|
@@ -38,7 +38,7 @@ import {
|
|
|
38
38
|
} from "../leafNodeSchema.js";
|
|
39
39
|
import { isObjectNodeSchema } from "../objectNodeTypes.js";
|
|
40
40
|
import {
|
|
41
|
-
|
|
41
|
+
customFromCursor,
|
|
42
42
|
type CustomTreeNode,
|
|
43
43
|
type CustomTreeValue,
|
|
44
44
|
type EncodeOptions,
|
|
@@ -344,7 +344,7 @@ function verboseFromCursorInner<TCustom>(
|
|
|
344
344
|
options: Required<EncodeOptions<TCustom>>,
|
|
345
345
|
schema: ReadonlyMap<string, TreeNodeSchema>,
|
|
346
346
|
): VerboseTree<TCustom> {
|
|
347
|
-
const fields =
|
|
347
|
+
const fields = customFromCursor(reader, options, schema, verboseFromCursorInner);
|
|
348
348
|
const nodeSchema = schema.get(reader.type) ?? fail("missing schema for type in cursor");
|
|
349
349
|
if (nodeSchema.kind === NodeKind.Leaf) {
|
|
350
350
|
return fields as CustomTreeValue<TCustom>;
|
|
@@ -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
|
}
|
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,
|
|
@@ -118,6 +119,10 @@ export {
|
|
|
118
119
|
conciseFromCursor,
|
|
119
120
|
createFromCursor,
|
|
120
121
|
asTreeViewAlpha,
|
|
122
|
+
customFromCursorStored,
|
|
123
|
+
type CustomTreeNode,
|
|
124
|
+
type CustomTreeValue,
|
|
125
|
+
tryStoredSchemaAsArray,
|
|
121
126
|
} from "./api/index.js";
|
|
122
127
|
export {
|
|
123
128
|
type NodeFromSchema,
|
|
@@ -166,6 +171,7 @@ export {
|
|
|
166
171
|
type ObjectFromSchemaRecord,
|
|
167
172
|
type TreeObjectNode,
|
|
168
173
|
setField,
|
|
174
|
+
createUnknownOptionalFieldPolicy,
|
|
169
175
|
} from "./objectNode.js";
|
|
170
176
|
export type { TreeMapNode, MapNodeInsertableData } from "./mapNode.js";
|
|
171
177
|
export {
|