@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
|
@@ -2,16 +2,28 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
-
|
|
5
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
6
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
7
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
8
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
9
|
+
};
|
|
10
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
11
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
12
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
13
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
14
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
15
|
+
};
|
|
16
|
+
var _TreeCheckout_events, _TreeCheckout_transaction, _TreeCheckout_validatedCommits;
|
|
17
|
+
import { assert, unreachableCase } from "@fluidframework/core-utils/internal";
|
|
18
|
+
import { createEmitter } from "@fluid-internal/client-utils";
|
|
6
19
|
import { UsageError, } from "@fluidframework/telemetry-utils/internal";
|
|
7
20
|
import { noopValidator } from "../codec/index.js";
|
|
8
21
|
import { AnchorSet, CommitKind, RevertibleStatus, TreeStoredSchemaRepository, combineVisitors, makeDetachedFieldIndex, rebaseChange, rootFieldKey, tagChange, visitDelta, } from "../core/index.js";
|
|
9
|
-
import { createEmitter, } from "../events/index.js";
|
|
10
22
|
import { buildForest, createNodeKeyManager, intoDelta, jsonableTreeFromCursor, makeFieldBatchCodec, } from "../feature-libraries/index.js";
|
|
11
|
-
import { SharedTreeBranch,
|
|
12
|
-
import { Breakable,
|
|
23
|
+
import { SquashingTransactionStack, SharedTreeBranch, TransactionResult, onForkTransitive, } from "../shared-tree-core/index.js";
|
|
24
|
+
import { Breakable, disposeSymbol, fail, getOrCreate } from "../util/index.js";
|
|
13
25
|
import { SharedTreeChangeFamily, hasSchemaChange } from "./sharedTreeChangeFamily.js";
|
|
14
|
-
import { SchematizingSimpleTreeView } from "./schematizingTreeView.js";
|
|
26
|
+
import { getCheckout, SchematizingSimpleTreeView } from "./schematizingTreeView.js";
|
|
15
27
|
/**
|
|
16
28
|
* Creates a {@link TreeCheckout}.
|
|
17
29
|
* @param args - an object containing optional components that will be used to build the view.
|
|
@@ -32,48 +44,21 @@ export function createTreeCheckout(idCompressor, mintRevisionTag, revisionTagCod
|
|
|
32
44
|
change: changeFamily.rebaser.compose([]),
|
|
33
45
|
revision: "root",
|
|
34
46
|
}, changeFamily, () => idCompressor.generateCompressedId());
|
|
35
|
-
|
|
36
|
-
const transaction = new Transaction(branch);
|
|
37
|
-
return new TreeCheckout(transaction, branch, false, changeFamily, schema, forest, events, mintRevisionTag, revisionTagCodec, idCompressor, args?.removedRoots, args?.logger, args?.breaker);
|
|
38
|
-
}
|
|
39
|
-
class Transaction {
|
|
40
|
-
constructor(branch) {
|
|
41
|
-
this.branch = branch;
|
|
42
|
-
}
|
|
43
|
-
start() {
|
|
44
|
-
this.branch.startTransaction();
|
|
45
|
-
this.branch.editor.enterTransaction();
|
|
46
|
-
}
|
|
47
|
-
commit() {
|
|
48
|
-
this.branch.commitTransaction();
|
|
49
|
-
this.branch.editor.exitTransaction();
|
|
50
|
-
return TransactionResult.Commit;
|
|
51
|
-
}
|
|
52
|
-
abort() {
|
|
53
|
-
this.branch.abortTransaction();
|
|
54
|
-
this.branch.editor.exitTransaction();
|
|
55
|
-
return TransactionResult.Abort;
|
|
56
|
-
}
|
|
57
|
-
inProgress() {
|
|
58
|
-
return this.branch.isTransacting();
|
|
59
|
-
}
|
|
47
|
+
return new TreeCheckout(branch, false, changeFamily, schema, forest, mintRevisionTag, revisionTagCodec, idCompressor, args?.removedRoots, args?.logger, args?.breaker);
|
|
60
48
|
}
|
|
61
49
|
/**
|
|
62
50
|
* An implementation of {@link ITreeCheckoutFork}.
|
|
63
51
|
*/
|
|
64
52
|
export class TreeCheckout {
|
|
65
|
-
constructor(
|
|
53
|
+
constructor(branch,
|
|
66
54
|
/** True if and only if this checkout is for a forked branch and not the "main branch" of the tree. */
|
|
67
|
-
isBranch, changeFamily, storedSchema, forest,
|
|
55
|
+
isBranch, changeFamily, storedSchema, forest, mintRevisionTag, revisionTagCodec, idCompressor, removedRoots = makeDetachedFieldIndex("repair", revisionTagCodec, idCompressor),
|
|
68
56
|
/** Optional logger for telemetry. */
|
|
69
57
|
logger, breaker = new Breakable("TreeCheckout")) {
|
|
70
|
-
this.transaction = transaction;
|
|
71
|
-
this._branch = _branch;
|
|
72
58
|
this.isBranch = isBranch;
|
|
73
59
|
this.changeFamily = changeFamily;
|
|
74
60
|
this.storedSchema = storedSchema;
|
|
75
61
|
this.forest = forest;
|
|
76
|
-
this.events = events;
|
|
77
62
|
this.mintRevisionTag = mintRevisionTag;
|
|
78
63
|
this.revisionTagCodec = revisionTagCodec;
|
|
79
64
|
this.idCompressor = idCompressor;
|
|
@@ -92,34 +77,13 @@ export class TreeCheckout {
|
|
|
92
77
|
* being reverted.
|
|
93
78
|
*/
|
|
94
79
|
this.revertibleCommitBranches = new Map();
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
// when a transaction is started, take a snapshot of the current state of removed roots
|
|
100
|
-
_branch.events.on("transactionStarted", () => {
|
|
101
|
-
this.removedRootsSnapshots.push(this.removedRoots.clone());
|
|
102
|
-
});
|
|
103
|
-
// when a transaction is committed, the latest snapshot of removed roots can be discarded
|
|
104
|
-
_branch.events.on("transactionCommitted", () => {
|
|
105
|
-
this.removedRootsSnapshots.pop();
|
|
106
|
-
});
|
|
107
|
-
// after a transaction is rolled back, revert removed roots back to the latest snapshot
|
|
108
|
-
_branch.events.on("transactionRolledBack", () => {
|
|
109
|
-
const snapshot = this.removedRootsSnapshots.pop();
|
|
110
|
-
assert(snapshot !== undefined, 0x9ae /* a snapshot for removed roots does not exist */);
|
|
111
|
-
this.removedRoots = snapshot;
|
|
112
|
-
});
|
|
113
|
-
// We subscribe to `beforeChange` rather than `afterChange` here because it's possible that the change is invalid WRT our forest.
|
|
114
|
-
// For example, a bug in the editor might produce a malformed change object and thus applying the change to the forest will throw an error.
|
|
115
|
-
// In such a case we will crash here, preventing the change from being added to the commit graph, and preventing `afterChange` from firing.
|
|
116
|
-
// One important consequence of this is that we will not submit the op containing the invalid change, since op submissions happens in response to `afterChange`.
|
|
117
|
-
_branch.events.on("beforeChange", (event) => {
|
|
80
|
+
_TreeCheckout_events.set(this, createEmitter());
|
|
81
|
+
this.events = __classPrivateFieldGet(this, _TreeCheckout_events, "f");
|
|
82
|
+
this.onAfterChange = (event) => {
|
|
83
|
+
__classPrivateFieldGet(this, _TreeCheckout_events, "f").emit("beforeBatch", event);
|
|
118
84
|
if (event.change !== undefined) {
|
|
119
|
-
const revision = event.type === "
|
|
120
|
-
?
|
|
121
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
122
|
-
event.newCommits[event.newCommits.length - 1].revision
|
|
85
|
+
const revision = event.type === "rebase"
|
|
86
|
+
? __classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranch.getHead().revision
|
|
123
87
|
: event.change.revision;
|
|
124
88
|
// Conflicts due to schema will be empty and thus are not applied.
|
|
125
89
|
for (const change of event.change.change.changes) {
|
|
@@ -145,89 +109,21 @@ export class TreeCheckout {
|
|
|
145
109
|
// They will however be rebased over the rollback of the schema change. This rebasing will
|
|
146
110
|
// ensure that these data changes are muted if they would render some trees invalid under the
|
|
147
111
|
// original (reinstated) schema.
|
|
148
|
-
storedSchema.apply(change.innerChange.schema.new);
|
|
112
|
+
this.storedSchema.apply(change.innerChange.schema.new);
|
|
149
113
|
}
|
|
150
114
|
else {
|
|
151
115
|
fail("Unknown Shared Tree change type.");
|
|
152
116
|
}
|
|
153
117
|
}
|
|
154
|
-
this.events.emit("afterBatch");
|
|
155
118
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
for (const transactionStep of event.removedCommits) {
|
|
160
|
-
this.removedRoots.updateMajor(transactionStep.revision, transactionRevision);
|
|
161
|
-
}
|
|
119
|
+
__classPrivateFieldGet(this, _TreeCheckout_events, "f").emit("afterBatch");
|
|
120
|
+
if (event.type === "append") {
|
|
121
|
+
event.newCommits.forEach((commit) => this.validateCommit(commit));
|
|
162
122
|
}
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
//
|
|
166
|
-
//
|
|
167
|
-
if (!_branch.isTransacting()) {
|
|
168
|
-
if (event.type === "append" ||
|
|
169
|
-
(event.type === "replace" && getChangeReplaceType(event) === "transactionCommit")) {
|
|
170
|
-
// TODO:#20949: When the SharedTree is detached, these commits will already have been garbage collected.
|
|
171
|
-
// Figure out a way to generate revertibles before the commits are garbage collected.
|
|
172
|
-
for (const commit of event.newCommits) {
|
|
173
|
-
const kind = event.type === "append" ? event.kind : CommitKind.Default;
|
|
174
|
-
const { change, revision } = commit;
|
|
175
|
-
const getRevertible = hasSchemaChange(change)
|
|
176
|
-
? undefined
|
|
177
|
-
: (onRevertibleDisposed) => {
|
|
178
|
-
if (!withinEventContext) {
|
|
179
|
-
throw new UsageError("Cannot get a revertible outside of the context of a changed event.");
|
|
180
|
-
}
|
|
181
|
-
if (this.revertibleCommitBranches.get(revision) !== undefined) {
|
|
182
|
-
throw new UsageError("Cannot generate the same revertible more than once. Note that this can happen when multiple changed event listeners are registered.");
|
|
183
|
-
}
|
|
184
|
-
const revertibleCommits = this.revertibleCommitBranches;
|
|
185
|
-
const revertible = {
|
|
186
|
-
get status() {
|
|
187
|
-
const revertibleCommit = revertibleCommits.get(revision);
|
|
188
|
-
return revertibleCommit === undefined
|
|
189
|
-
? RevertibleStatus.Disposed
|
|
190
|
-
: RevertibleStatus.Valid;
|
|
191
|
-
},
|
|
192
|
-
revert: (release = true) => {
|
|
193
|
-
if (revertible.status === RevertibleStatus.Disposed) {
|
|
194
|
-
throw new UsageError("Unable to revert a revertible that has been disposed.");
|
|
195
|
-
}
|
|
196
|
-
const revertMetrics = this.revertRevertible(revision, kind);
|
|
197
|
-
this.logger?.sendTelemetryEvent({
|
|
198
|
-
eventName: TreeCheckout.revertTelemetryEventName,
|
|
199
|
-
...revertMetrics,
|
|
200
|
-
});
|
|
201
|
-
if (release) {
|
|
202
|
-
revertible.dispose();
|
|
203
|
-
}
|
|
204
|
-
},
|
|
205
|
-
dispose: () => {
|
|
206
|
-
if (revertible.status === RevertibleStatus.Disposed) {
|
|
207
|
-
throw new UsageError("Unable to dispose a revertible that has already been disposed.");
|
|
208
|
-
}
|
|
209
|
-
this.disposeRevertible(revertible, revision);
|
|
210
|
-
onRevertibleDisposed?.(revertible);
|
|
211
|
-
},
|
|
212
|
-
};
|
|
213
|
-
this.revertibleCommitBranches.set(revision, _branch.fork(commit));
|
|
214
|
-
this.revertibles.add(revertible);
|
|
215
|
-
return revertible;
|
|
216
|
-
};
|
|
217
|
-
let withinEventContext = true;
|
|
218
|
-
this.events.emit("changed", { isLocal: true, kind }, getRevertible);
|
|
219
|
-
withinEventContext = false;
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
else if (this.isRemoteChangeEvent(event)) {
|
|
223
|
-
// TODO: figure out how to plumb through commit kind info for remote changes
|
|
224
|
-
this.events.emit("changed", { isLocal: false, kind: CommitKind.Default });
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
});
|
|
228
|
-
// When the branch is trimmed, we can garbage collect any repair data whose latest relevant revision is one of the
|
|
229
|
-
// trimmed revisions.
|
|
230
|
-
_branch.events.on("ancestryTrimmed", (revisions) => {
|
|
123
|
+
};
|
|
124
|
+
this.onAncestryTrimmed = (revisions) => {
|
|
125
|
+
// When the branch is trimmed, we can garbage collect any repair data whose latest relevant revision is one of the
|
|
126
|
+
// trimmed revisions.
|
|
231
127
|
this.withCombinedVisitor((visitor) => {
|
|
232
128
|
revisions.forEach((revision) => {
|
|
233
129
|
// get all the roots last created or used by the revision
|
|
@@ -239,7 +135,94 @@ export class TreeCheckout {
|
|
|
239
135
|
this.removedRoots.deleteRootsLastTouchedByRevision(revision);
|
|
240
136
|
});
|
|
241
137
|
});
|
|
138
|
+
};
|
|
139
|
+
/**
|
|
140
|
+
* The {@link Transactor} for this checkout.
|
|
141
|
+
* @remarks In the context of a checkout, transactions allow edits to be batched into atomic units.
|
|
142
|
+
* Edits made during a transaction will update the local state of the tree immediately, but will be squashed into a single edit when the transaction is committed.
|
|
143
|
+
* If the transaction is aborted, the local state will be reset to what it was before the transaction began.
|
|
144
|
+
* Transactions may nest, meaning that a transaction may be started while a transaction is already ongoing.
|
|
145
|
+
*
|
|
146
|
+
* To avoid updating observers of the view state with intermediate results during a transaction,
|
|
147
|
+
* use {@link ITreeCheckout#branch} and {@link ISharedTreeFork#merge}.
|
|
148
|
+
*/
|
|
149
|
+
_TreeCheckout_transaction.set(this, void 0);
|
|
150
|
+
// #region Commit Validation
|
|
151
|
+
/** Used to maintain the contract of {@link onCommitValid}(). */
|
|
152
|
+
_TreeCheckout_validatedCommits.set(this, new WeakMap());
|
|
153
|
+
__classPrivateFieldSet(this, _TreeCheckout_transaction, new SquashingTransactionStack(branch, (commits) => {
|
|
154
|
+
const revision = this.mintRevisionTag();
|
|
155
|
+
for (const transactionStep of commits) {
|
|
156
|
+
this.removedRoots.updateMajor(transactionStep.revision, revision);
|
|
157
|
+
}
|
|
158
|
+
const squashedChange = this.changeFamily.rebaser.compose(commits);
|
|
159
|
+
const change = this.changeFamily.rebaser.changeRevision(squashedChange, revision);
|
|
160
|
+
return tagChange(change, revision);
|
|
161
|
+
}, () => {
|
|
162
|
+
// Keep track of all the forks created during the transaction so that we can dispose them when the transaction ends.
|
|
163
|
+
// This is a policy decision that we think is useful for the user, but it is not necessary for correctness.
|
|
164
|
+
const forks = new Set();
|
|
165
|
+
const onDisposeUnSubscribes = [];
|
|
166
|
+
const onForkUnSubscribe = onForkTransitive(this, (fork) => {
|
|
167
|
+
forks.add(fork);
|
|
168
|
+
onDisposeUnSubscribes.push(fork.events.on("dispose", () => forks.delete(fork)));
|
|
169
|
+
});
|
|
170
|
+
// When each transaction is started, take a snapshot of the current state of removed roots
|
|
171
|
+
const removedRootsSnapshot = this.removedRoots.clone();
|
|
172
|
+
return (result) => {
|
|
173
|
+
switch (result) {
|
|
174
|
+
case TransactionResult.Abort:
|
|
175
|
+
this.removedRoots = removedRootsSnapshot;
|
|
176
|
+
break;
|
|
177
|
+
case TransactionResult.Commit:
|
|
178
|
+
if (!this.transaction.isInProgress()) {
|
|
179
|
+
// The changes in a transaction squash commit have already applied to the checkout and are known to be valid, so we can validate the squash commit automatically.
|
|
180
|
+
this.validateCommit(__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").branch.getHead());
|
|
181
|
+
}
|
|
182
|
+
break;
|
|
183
|
+
default:
|
|
184
|
+
unreachableCase(result);
|
|
185
|
+
}
|
|
186
|
+
forks.forEach((fork) => fork.dispose());
|
|
187
|
+
onDisposeUnSubscribes.forEach((unsubscribe) => unsubscribe());
|
|
188
|
+
onForkUnSubscribe();
|
|
189
|
+
};
|
|
190
|
+
}), "f");
|
|
191
|
+
branch.events.on("afterChange", (event) => {
|
|
192
|
+
// The following logic allows revertibles to be generated for the change.
|
|
193
|
+
// Currently only appends (including merges and transaction commits) are supported.
|
|
194
|
+
if (event.type === "append") {
|
|
195
|
+
// TODO:#20949: When the SharedTree is detached, these commits will already have been garbage collected.
|
|
196
|
+
// Figure out a way to generate revertibles before the commits are garbage collected.
|
|
197
|
+
for (const commit of event.newCommits) {
|
|
198
|
+
const kind = event.type === "append" ? event.kind : CommitKind.Default;
|
|
199
|
+
const { change, revision } = commit;
|
|
200
|
+
const getRevertible = hasSchemaChange(change)
|
|
201
|
+
? undefined
|
|
202
|
+
: (onRevertibleDisposed) => {
|
|
203
|
+
if (!withinEventContext) {
|
|
204
|
+
throw new UsageError("Cannot get a revertible outside of the context of a changed event.");
|
|
205
|
+
}
|
|
206
|
+
if (this.revertibleCommitBranches.get(revision) !== undefined) {
|
|
207
|
+
throw new UsageError("Cannot generate the same revertible more than once. Note that this can happen when multiple changed event listeners are registered.");
|
|
208
|
+
}
|
|
209
|
+
const revertible = this.createRevertible(revision, kind, this, onRevertibleDisposed);
|
|
210
|
+
this.revertibleCommitBranches.set(revision, __classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranch.fork(commit));
|
|
211
|
+
this.revertibles.add(revertible);
|
|
212
|
+
return revertible;
|
|
213
|
+
};
|
|
214
|
+
let withinEventContext = true;
|
|
215
|
+
__classPrivateFieldGet(this, _TreeCheckout_events, "f").emit("changed", { isLocal: true, kind }, getRevertible);
|
|
216
|
+
withinEventContext = false;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
else if (this.isRemoteChangeEvent(event)) {
|
|
220
|
+
// TODO: figure out how to plumb through commit kind info for remote changes
|
|
221
|
+
__classPrivateFieldGet(this, _TreeCheckout_events, "f").emit("changed", { isLocal: false, kind: CommitKind.Default });
|
|
222
|
+
}
|
|
242
223
|
});
|
|
224
|
+
__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranchEvents.on("afterChange", this.onAfterChange);
|
|
225
|
+
__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranchEvents.on("ancestryTrimmed", this.onAncestryTrimmed);
|
|
243
226
|
}
|
|
244
227
|
withCombinedVisitor(fn) {
|
|
245
228
|
const anchorVisitor = this.forest.anchors.acquireVisitor();
|
|
@@ -255,6 +238,59 @@ export class TreeCheckout {
|
|
|
255
238
|
assert(false, 0x911 /* Invalid operation on a disposed TreeCheckout */);
|
|
256
239
|
}
|
|
257
240
|
}
|
|
241
|
+
/**
|
|
242
|
+
* Creates a {@link RevertibleAlpha} object that can undo a specific change in the tree's history.
|
|
243
|
+
* Revision must exist in the given {@link TreeCheckout}'s branch.
|
|
244
|
+
*
|
|
245
|
+
* @param revision - The revision tag identifying the change to be made revertible.
|
|
246
|
+
* @param kind - The {@link CommitKind} that produced this revertible (e.g., Default, Undo, Redo).
|
|
247
|
+
* @param checkout - The {@link TreeCheckout} instance this revertible belongs to.
|
|
248
|
+
* @param onRevertibleDisposed - Callback function that will be called when the revertible is disposed.
|
|
249
|
+
* @returns - {@link RevertibleAlpha}
|
|
250
|
+
*/
|
|
251
|
+
createRevertible(revision, kind, checkout, onRevertibleDisposed) {
|
|
252
|
+
const commitBranches = checkout.revertibleCommitBranches;
|
|
253
|
+
const revertible = {
|
|
254
|
+
get status() {
|
|
255
|
+
const revertibleCommit = commitBranches.get(revision);
|
|
256
|
+
return revertibleCommit === undefined
|
|
257
|
+
? RevertibleStatus.Disposed
|
|
258
|
+
: RevertibleStatus.Valid;
|
|
259
|
+
},
|
|
260
|
+
revert: (release = true) => {
|
|
261
|
+
if (revertible.status === RevertibleStatus.Disposed) {
|
|
262
|
+
throw new UsageError("Unable to revert a revertible that has been disposed.");
|
|
263
|
+
}
|
|
264
|
+
const revertMetrics = checkout.revertRevertible(revision, kind);
|
|
265
|
+
checkout.logger?.sendTelemetryEvent({
|
|
266
|
+
eventName: TreeCheckout.revertTelemetryEventName,
|
|
267
|
+
...revertMetrics,
|
|
268
|
+
});
|
|
269
|
+
if (release) {
|
|
270
|
+
revertible.dispose();
|
|
271
|
+
}
|
|
272
|
+
},
|
|
273
|
+
clone: (forkedBranch) => {
|
|
274
|
+
if (forkedBranch === undefined) {
|
|
275
|
+
return this.createRevertible(revision, kind, checkout, onRevertibleDisposed);
|
|
276
|
+
}
|
|
277
|
+
// TODO:#23442: When a revertible is cloned for a forked branch, optimize to create a fork of a revertible branch once per revision NOT once per revision per checkout.
|
|
278
|
+
const forkedCheckout = getCheckout(forkedBranch);
|
|
279
|
+
const revertibleBranch = this.revertibleCommitBranches.get(revision);
|
|
280
|
+
assert(revertibleBranch !== undefined, 0xa82 /* change to revert does not exist on the given forked branch */);
|
|
281
|
+
forkedCheckout.revertibleCommitBranches.set(revision, revertibleBranch.fork());
|
|
282
|
+
return this.createRevertible(revision, kind, forkedCheckout, onRevertibleDisposed);
|
|
283
|
+
},
|
|
284
|
+
dispose: () => {
|
|
285
|
+
if (revertible.status === RevertibleStatus.Disposed) {
|
|
286
|
+
throw new UsageError("Unable to dispose a revertible that has already been disposed.");
|
|
287
|
+
}
|
|
288
|
+
checkout.disposeRevertible(revertible, revision);
|
|
289
|
+
onRevertibleDisposed?.(revertible);
|
|
290
|
+
},
|
|
291
|
+
};
|
|
292
|
+
return revertible;
|
|
293
|
+
}
|
|
258
294
|
viewWith(config) {
|
|
259
295
|
const view = new SchematizingSimpleTreeView(this, config, createNodeKeyManager(this.idCompressor), this.breaker, () => {
|
|
260
296
|
this.views.delete(view);
|
|
@@ -267,27 +303,31 @@ export class TreeCheckout {
|
|
|
267
303
|
}
|
|
268
304
|
get editor() {
|
|
269
305
|
this.checkNotDisposed();
|
|
270
|
-
return this.
|
|
306
|
+
return __classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranchEditor;
|
|
271
307
|
}
|
|
272
308
|
locate(anchor) {
|
|
273
309
|
this.checkNotDisposed();
|
|
274
310
|
return this.forest.anchors.locate(anchor);
|
|
275
311
|
}
|
|
312
|
+
get transaction() {
|
|
313
|
+
return __classPrivateFieldGet(this, _TreeCheckout_transaction, "f");
|
|
314
|
+
}
|
|
276
315
|
branch() {
|
|
277
316
|
this.checkNotDisposed("The parent branch has already been disposed and can no longer create new branches.");
|
|
278
317
|
const anchors = new AnchorSet();
|
|
279
|
-
const branch = this.
|
|
318
|
+
const branch = __classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranch.fork();
|
|
280
319
|
const storedSchema = this.storedSchema.clone();
|
|
281
320
|
const forest = this.forest.clone(storedSchema, anchors);
|
|
282
|
-
const
|
|
283
|
-
|
|
321
|
+
const checkout = new TreeCheckout(branch, true, this.changeFamily, storedSchema, forest, this.mintRevisionTag, this.revisionTagCodec, this.idCompressor, this.removedRoots.clone(), this.logger, this.breaker);
|
|
322
|
+
__classPrivateFieldGet(this, _TreeCheckout_events, "f").emit("fork", checkout);
|
|
323
|
+
return checkout;
|
|
284
324
|
}
|
|
285
325
|
rebase(checkout) {
|
|
286
326
|
this.checkNotDisposed("The target of the branch rebase has been disposed and cannot be rebased.");
|
|
287
327
|
checkout.checkNotDisposed("The source of the branch rebase has been disposed and cannot be rebased.");
|
|
288
|
-
assert(!checkout.transaction.
|
|
328
|
+
assert(!checkout.transaction.isInProgress(), 0x9af /* A view cannot be rebased while it has a pending transaction */);
|
|
289
329
|
assert(checkout.isBranch, 0xa5d /* The main branch cannot be rebased onto another branch. */);
|
|
290
|
-
checkout.
|
|
330
|
+
__classPrivateFieldGet(checkout, _TreeCheckout_transaction, "f").activeBranch.rebaseOnto(__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranch);
|
|
291
331
|
}
|
|
292
332
|
rebaseOnto(checkout) {
|
|
293
333
|
this.checkNotDisposed("The target of the branch rebase has been disposed and cannot be rebased.");
|
|
@@ -296,11 +336,11 @@ export class TreeCheckout {
|
|
|
296
336
|
merge(checkout, disposeMerged = true) {
|
|
297
337
|
this.checkNotDisposed("The target of the branch merge has been disposed and cannot be merged.");
|
|
298
338
|
checkout.checkNotDisposed("The source of the branch merge has been disposed and cannot be merged.");
|
|
299
|
-
assert(!this.transaction.
|
|
300
|
-
while (checkout.transaction.
|
|
339
|
+
assert(!this.transaction.isInProgress(), 0x9b0 /* Views cannot be merged into a view while it has a pending transaction */);
|
|
340
|
+
while (checkout.transaction.isInProgress()) {
|
|
301
341
|
checkout.transaction.commit();
|
|
302
342
|
}
|
|
303
|
-
this.
|
|
343
|
+
__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranch.merge(__classPrivateFieldGet(checkout, _TreeCheckout_transaction, "f").activeBranch);
|
|
304
344
|
if (disposeMerged && checkout.isBranch) {
|
|
305
345
|
// Dispose the merged checkout unless it is the main branch.
|
|
306
346
|
checkout[disposeSymbol]();
|
|
@@ -313,14 +353,16 @@ export class TreeCheckout {
|
|
|
313
353
|
dispose() {
|
|
314
354
|
this[disposeSymbol]();
|
|
315
355
|
}
|
|
316
|
-
[disposeSymbol]() {
|
|
356
|
+
[(_TreeCheckout_events = new WeakMap(), _TreeCheckout_transaction = new WeakMap(), _TreeCheckout_validatedCommits = new WeakMap(), disposeSymbol)]() {
|
|
317
357
|
this.checkNotDisposed("The branch has already been disposed and cannot be disposed again.");
|
|
318
358
|
this.disposed = true;
|
|
359
|
+
__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").branch.dispose();
|
|
360
|
+
__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").dispose();
|
|
319
361
|
this.purgeRevertibles();
|
|
320
|
-
this._branch.dispose();
|
|
321
362
|
for (const view of this.views) {
|
|
322
363
|
view.dispose();
|
|
323
364
|
}
|
|
365
|
+
__classPrivateFieldGet(this, _TreeCheckout_events, "f").emit("dispose");
|
|
324
366
|
}
|
|
325
367
|
getRemovedRoots() {
|
|
326
368
|
this.assertNoUntrackedRoots();
|
|
@@ -339,11 +381,16 @@ export class TreeCheckout {
|
|
|
339
381
|
return trees;
|
|
340
382
|
}
|
|
341
383
|
/**
|
|
342
|
-
* This
|
|
343
|
-
* This
|
|
384
|
+
* This must be called on the root/main checkout after loading from a summary.
|
|
385
|
+
* @remarks This pattern is necessary because the EditManager skips the normal process of applying commits to branches when loading a summary.
|
|
386
|
+
* Instead, it simply {@link SharedTreeBranch#setHead | mutates} the branches directly which does not propagate the typical events throughout the rest of the system.
|
|
344
387
|
*/
|
|
345
|
-
|
|
346
|
-
this.
|
|
388
|
+
load() {
|
|
389
|
+
// Set the tip revision as the latest relevant revision for any removed roots that are loaded from a summary - this allows them to be garbage collected later.
|
|
390
|
+
// When a load happens, the head of the trunk and the head of the local/main branch must be the same (this is enforced by SharedTree).
|
|
391
|
+
this.removedRoots.setRevisionsForLoadedData(__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").branch.getHead().revision);
|
|
392
|
+
// The content of the checkout (e.g. the forest) has (maybe) changed, so fire an afterBatch event.
|
|
393
|
+
__classPrivateFieldGet(this, _TreeCheckout_events, "f").emit("afterBatch");
|
|
347
394
|
}
|
|
348
395
|
purgeRevertibles() {
|
|
349
396
|
for (const revertible of this.revertibles) {
|
|
@@ -356,7 +403,7 @@ export class TreeCheckout {
|
|
|
356
403
|
this.revertibles.delete(revertible);
|
|
357
404
|
}
|
|
358
405
|
revertRevertible(revision, kind) {
|
|
359
|
-
if (this.
|
|
406
|
+
if (this.transaction.isInProgress()) {
|
|
360
407
|
throw new UsageError("Undo is not yet supported during transactions.");
|
|
361
408
|
}
|
|
362
409
|
const revertibleBranch = this.revertibleCommitBranches.get(revision);
|
|
@@ -364,12 +411,12 @@ export class TreeCheckout {
|
|
|
364
411
|
const commitToRevert = revertibleBranch.getHead();
|
|
365
412
|
const revisionForInvert = this.mintRevisionTag();
|
|
366
413
|
let change = tagChange(this.changeFamily.rebaser.invert(commitToRevert, false, revisionForInvert), revisionForInvert);
|
|
367
|
-
const headCommit = this.
|
|
414
|
+
const headCommit = __classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranch.getHead();
|
|
368
415
|
// Rebase the inverted change onto any commits that occurred after the undoable commits.
|
|
369
416
|
if (commitToRevert !== headCommit) {
|
|
370
417
|
change = tagChange(rebaseChange(this.changeFamily.rebaser, change, commitToRevert, headCommit, this.mintRevisionTag).change, revisionForInvert);
|
|
371
418
|
}
|
|
372
|
-
this.
|
|
419
|
+
__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranch.apply(change, kind === CommitKind.Default || kind === CommitKind.Redo
|
|
373
420
|
? CommitKind.Undo
|
|
374
421
|
: CommitKind.Redo);
|
|
375
422
|
// Derive some stats about the reversion to return to the caller.
|
|
@@ -403,13 +450,37 @@ export class TreeCheckout {
|
|
|
403
450
|
*/
|
|
404
451
|
isRemoteChangeEvent(event) {
|
|
405
452
|
return (
|
|
406
|
-
//
|
|
453
|
+
// Remote changes are only ever applied to the main branch
|
|
407
454
|
!this.isBranch &&
|
|
408
|
-
//
|
|
409
|
-
//
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
455
|
+
// Remote changes are applied to the main branch by rebasing it onto the trunk.
|
|
456
|
+
// No other rebases are allowed on the main branch, so we can use this to detect remote changes.
|
|
457
|
+
event.type === "rebase");
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* Registers a function to be called when the given commit is validated.
|
|
461
|
+
* @remarks A commit is validated by the checkout after it has been applied to the checkout's state (e.g. it has an effect on the forest).
|
|
462
|
+
* If the commit applies successfully (i.e. it does not raise any unexpected errors), the commit is considered valid and the registered function is called.
|
|
463
|
+
* If the commit does not apply successfully (because it causes an unexpected error), the function is not called (and the checkout will left in an error state).
|
|
464
|
+
*
|
|
465
|
+
* If the commit has already been validated when this function is called, the function is called immediately and this function returns `true`.
|
|
466
|
+
* Otherwise, the function is registered to be called later and this function returns `false`.
|
|
467
|
+
*/
|
|
468
|
+
onCommitValid(commit, fn) {
|
|
469
|
+
const validated = getOrCreate(__classPrivateFieldGet(this, _TreeCheckout_validatedCommits, "f"), commit, () => []);
|
|
470
|
+
if (validated === true) {
|
|
471
|
+
fn(commit);
|
|
472
|
+
return true;
|
|
473
|
+
}
|
|
474
|
+
validated.push(fn);
|
|
475
|
+
return false;
|
|
476
|
+
}
|
|
477
|
+
/** Mark the given commit as "validated" according to the contract of {@link onCommitValid}(). */
|
|
478
|
+
validateCommit(commit) {
|
|
479
|
+
const validated = getOrCreate(__classPrivateFieldGet(this, _TreeCheckout_validatedCommits, "f"), commit, () => []);
|
|
480
|
+
if (validated !== true) {
|
|
481
|
+
validated.forEach((fn) => fn(commit));
|
|
482
|
+
__classPrivateFieldGet(this, _TreeCheckout_validatedCommits, "f").set(commit, true);
|
|
483
|
+
}
|
|
413
484
|
}
|
|
414
485
|
}
|
|
415
486
|
/**
|
|
@@ -417,19 +488,4 @@ export class TreeCheckout {
|
|
|
417
488
|
* @privateRemarks Exposed for testing purposes.
|
|
418
489
|
*/
|
|
419
490
|
TreeCheckout.revertTelemetryEventName = "RevertRevertible";
|
|
420
|
-
/**
|
|
421
|
-
* Run a synchronous transaction on the given shared tree view.
|
|
422
|
-
* This is a convenience helper around the {@link SharedTreeFork#transaction} APIs.
|
|
423
|
-
* @param view - the view on which to run the transaction
|
|
424
|
-
* @param transaction - the transaction function. This will be executed immediately. It is passed `view` as an argument for convenience.
|
|
425
|
-
* If this function returns an `Abort` result then the transaction will be aborted. Otherwise, it will be committed.
|
|
426
|
-
* @returns whether or not the transaction was committed or aborted
|
|
427
|
-
*/
|
|
428
|
-
export function runSynchronous(view, transaction) {
|
|
429
|
-
view.transaction.start();
|
|
430
|
-
const result = transaction(view);
|
|
431
|
-
return result === TransactionResult.Abort
|
|
432
|
-
? view.transaction.abort()
|
|
433
|
-
: view.transaction.commit();
|
|
434
|
-
}
|
|
435
491
|
//# sourceMappingURL=treeCheckout.js.map
|