@fluidframework/tree 2.10.0-307399 → 2.11.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 +103 -0
- package/api-report/tree.alpha.api.md +47 -16
- package/api-report/tree.beta.api.md +5 -14
- package/api-report/tree.legacy.alpha.api.md +5 -14
- package/api-report/tree.legacy.public.api.md +5 -14
- package/api-report/tree.public.api.md +5 -14
- 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 +2 -2
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +3 -2
- 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 +11 -8
- 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/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/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/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 +1 -1
- package/dist/core/tree/index.d.ts.map +1 -1
- package/dist/core/tree/index.js +2 -1
- package/dist/core/tree/index.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/chunkedForest.d.ts +5 -2
- 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/uniformChunk.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/uniformChunk.js +2 -2
- package/dist/feature-libraries/chunked-forest/uniformChunk.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 +1 -0
- package/dist/feature-libraries/index.d.ts.map +1 -1
- package/dist/feature-libraries/index.js +4 -1
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/indexing/anchorTreeIndex.d.ts +132 -0
- package/dist/feature-libraries/indexing/anchorTreeIndex.d.ts.map +1 -0
- package/dist/feature-libraries/indexing/anchorTreeIndex.js +361 -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.js +1 -1
- package/dist/feature-libraries/modular-schema/discrepancies.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/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/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.d.ts.map +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 +1 -2
- package/dist/shared-tree/index.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 +31 -30
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree/sharedTree.d.ts +3 -0
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +56 -20
- 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 +32 -64
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +161 -125
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree-core/branch.d.ts +25 -81
- package/dist/shared-tree-core/branch.d.ts.map +1 -1
- package/dist/shared-tree-core/branch.js +72 -151
- package/dist/shared-tree-core/branch.js.map +1 -1
- package/dist/shared-tree-core/branchCommitEnricher.d.ts +19 -33
- package/dist/shared-tree-core/branchCommitEnricher.d.ts.map +1 -1
- package/dist/shared-tree-core/branchCommitEnricher.js +73 -54
- 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 +2 -2
- package/dist/shared-tree-core/editManager.js.map +1 -1
- package/dist/shared-tree-core/index.d.ts +1 -1
- package/dist/shared-tree-core/index.d.ts.map +1 -1
- package/dist/shared-tree-core/index.js +4 -3
- package/dist/shared-tree-core/index.js.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.d.ts +2 -2
- package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.js +11 -52
- package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/dist/shared-tree-core/transaction.d.ts +108 -0
- package/dist/shared-tree-core/transaction.d.ts.map +1 -0
- package/dist/shared-tree-core/transaction.js +99 -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/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 +2 -0
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js +5 -1
- package/dist/simple-tree/api/index.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 +91 -0
- package/dist/simple-tree/api/simpleTreeIndex.js.map +1 -0
- package/dist/simple-tree/api/tree.d.ts +4 -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/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 +1 -1
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +4 -2
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/objectNode.d.ts +7 -2
- package/dist/simple-tree/objectNode.d.ts.map +1 -1
- package/dist/simple-tree/objectNode.js.map +1 -1
- package/dist/simple-tree/toMapTree.js +3 -3
- package/dist/simple-tree/toMapTree.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 +5 -4
- package/dist/util/index.js.map +1 -1
- package/dist/util/typeCheck.d.ts +6 -1
- 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 +29 -0
- package/dist/util/utils.d.ts.map +1 -1
- package/dist/util/utils.js +13 -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 +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 +1 -1
- package/lib/core/rebase/utils.d.ts.map +1 -1
- package/lib/core/rebase/utils.js +11 -8
- 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/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/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/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 +1 -1
- package/lib/core/tree/index.d.ts.map +1 -1
- package/lib/core/tree/index.js +1 -1
- package/lib/core/tree/index.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/chunkedForest.d.ts +5 -2
- 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/uniformChunk.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/uniformChunk.js +3 -3
- package/lib/feature-libraries/chunked-forest/uniformChunk.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 +1 -0
- package/lib/feature-libraries/index.d.ts.map +1 -1
- package/lib/feature-libraries/index.js +1 -0
- package/lib/feature-libraries/index.js.map +1 -1
- package/lib/feature-libraries/indexing/anchorTreeIndex.d.ts +132 -0
- package/lib/feature-libraries/indexing/anchorTreeIndex.d.ts.map +1 -0
- package/lib/feature-libraries/indexing/anchorTreeIndex.js +356 -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.js +1 -1
- package/lib/feature-libraries/modular-schema/discrepancies.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/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/index.d.ts +4 -4
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.d.ts.map +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 +1 -1
- package/lib/shared-tree/index.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 +2 -2
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/shared-tree/sharedTree.d.ts +3 -0
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +37 -1
- 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 +32 -64
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +149 -112
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree-core/branch.d.ts +25 -81
- package/lib/shared-tree-core/branch.d.ts.map +1 -1
- package/lib/shared-tree-core/branch.js +72 -151
- package/lib/shared-tree-core/branch.js.map +1 -1
- package/lib/shared-tree-core/branchCommitEnricher.d.ts +19 -33
- package/lib/shared-tree-core/branchCommitEnricher.d.ts.map +1 -1
- package/lib/shared-tree-core/branchCommitEnricher.js +74 -55
- 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 +1 -1
- package/lib/shared-tree-core/editManager.js.map +1 -1
- package/lib/shared-tree-core/index.d.ts +1 -1
- package/lib/shared-tree-core/index.d.ts.map +1 -1
- package/lib/shared-tree-core/index.js +1 -1
- package/lib/shared-tree-core/index.js.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.d.ts +2 -2
- package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.js +12 -53
- package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/lib/shared-tree-core/transaction.d.ts +108 -0
- package/lib/shared-tree-core/transaction.d.ts.map +1 -0
- package/lib/shared-tree-core/transaction.js +95 -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/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 +2 -0
- package/lib/simple-tree/api/index.d.ts.map +1 -1
- package/lib/simple-tree/api/index.js +2 -0
- package/lib/simple-tree/api/index.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 +87 -0
- package/lib/simple-tree/api/simpleTreeIndex.js.map +1 -0
- package/lib/simple-tree/api/tree.d.ts +4 -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/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 +1 -1
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +1 -1
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/objectNode.d.ts +7 -2
- package/lib/simple-tree/objectNode.d.ts.map +1 -1
- package/lib/simple-tree/objectNode.js.map +1 -1
- package/lib/simple-tree/toMapTree.js +5 -5
- package/lib/simple-tree/toMapTree.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 -1
- 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 +29 -0
- package/lib/util/utils.d.ts.map +1 -1
- package/lib/util/utils.js +9 -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 +8 -1
- package/src/core/rebase/utils.ts +12 -10
- package/src/core/revertible.ts +35 -1
- package/src/core/schema-stored/storedSchemaRepository.ts +2 -1
- package/src/core/tree/anchorSet.ts +2 -1
- package/src/core/tree/detachedFieldIndexCodec.ts +4 -3
- package/src/core/tree/index.ts +1 -0
- package/src/core/tree/visitorUtils.ts +56 -1
- package/src/feature-libraries/chunked-forest/chunkedForest.ts +33 -7
- package/src/feature-libraries/chunked-forest/uniformChunk.ts +3 -3
- package/src/feature-libraries/flex-tree/context.ts +1 -1
- package/src/feature-libraries/index.ts +9 -0
- package/src/feature-libraries/indexing/anchorTreeIndex.ts +453 -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 +1 -1
- 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/index.ts +16 -6
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/index.ts +0 -2
- package/src/shared-tree/schematizingTreeView.ts +7 -7
- package/src/shared-tree/sharedTree.ts +60 -6
- package/src/shared-tree/sharedTreeChangeFamily.ts +5 -4
- package/src/shared-tree/treeCheckout.ts +201 -189
- package/src/shared-tree-core/branch.ts +93 -220
- package/src/shared-tree-core/branchCommitEnricher.ts +69 -64
- package/src/shared-tree-core/defaultResubmitMachine.ts +3 -2
- package/src/shared-tree-core/editManager.ts +1 -1
- package/src/shared-tree-core/index.ts +9 -2
- package/src/shared-tree-core/sharedTreeCore.ts +17 -62
- package/src/shared-tree-core/transaction.ts +165 -0
- package/src/shared-tree-core/transactionEnricher.ts +30 -24
- package/src/simple-tree/api/identifierIndex.ts +64 -0
- package/src/simple-tree/api/index.ts +5 -0
- package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +17 -18
- package/src/simple-tree/api/simpleTreeIndex.ts +231 -0
- package/src/simple-tree/api/tree.ts +8 -5
- package/src/simple-tree/api/treeNodeApi.ts +1 -1
- 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 +4 -0
- package/src/simple-tree/objectNode.ts +19 -12
- package/src/simple-tree/toMapTree.ts +5 -5
- package/src/util/index.ts +3 -1
- package/src/util/typeCheck.ts +6 -1
- package/src/util/typeCheckTests.ts +11 -1
- package/src/util/utils.ts +38 -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/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/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,22 @@
|
|
|
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 _TreeCheckout_transaction;
|
|
11
|
+
import { assert, unreachableCase } from "@fluidframework/core-utils/internal";
|
|
12
|
+
import { createEmitter } from "@fluid-internal/client-utils";
|
|
6
13
|
import { UsageError, } from "@fluidframework/telemetry-utils/internal";
|
|
7
14
|
import { noopValidator } from "../codec/index.js";
|
|
8
15
|
import { AnchorSet, CommitKind, RevertibleStatus, TreeStoredSchemaRepository, combineVisitors, makeDetachedFieldIndex, rebaseChange, rootFieldKey, tagChange, visitDelta, } from "../core/index.js";
|
|
9
|
-
import { createEmitter, } from "../events/index.js";
|
|
10
16
|
import { buildForest, createNodeKeyManager, intoDelta, jsonableTreeFromCursor, makeFieldBatchCodec, } from "../feature-libraries/index.js";
|
|
11
|
-
import { SharedTreeBranch, getChangeReplaceType } from "../shared-tree-core/index.js";
|
|
12
|
-
import { Breakable,
|
|
17
|
+
import { SharedTreeBranch, TransactionResult, TransactionStack, getChangeReplaceType, onForkTransitive, } from "../shared-tree-core/index.js";
|
|
18
|
+
import { Breakable, disposeSymbol, fail, getLast, hasSome } from "../util/index.js";
|
|
13
19
|
import { SharedTreeChangeFamily, hasSchemaChange } from "./sharedTreeChangeFamily.js";
|
|
14
|
-
import { SchematizingSimpleTreeView } from "./schematizingTreeView.js";
|
|
20
|
+
import { getCheckout, SchematizingSimpleTreeView } from "./schematizingTreeView.js";
|
|
15
21
|
/**
|
|
16
22
|
* Creates a {@link TreeCheckout}.
|
|
17
23
|
* @param args - an object containing optional components that will be used to build the view.
|
|
@@ -33,41 +39,17 @@ export function createTreeCheckout(idCompressor, mintRevisionTag, revisionTagCod
|
|
|
33
39
|
revision: "root",
|
|
34
40
|
}, changeFamily, () => idCompressor.generateCompressedId());
|
|
35
41
|
const events = args?.events ?? createEmitter();
|
|
36
|
-
|
|
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
|
-
}
|
|
42
|
+
return new TreeCheckout(branch, false, changeFamily, schema, forest, events, mintRevisionTag, revisionTagCodec, idCompressor, args?.removedRoots, args?.logger, args?.breaker);
|
|
60
43
|
}
|
|
61
44
|
/**
|
|
62
45
|
* An implementation of {@link ITreeCheckoutFork}.
|
|
63
46
|
*/
|
|
64
47
|
export class TreeCheckout {
|
|
65
|
-
constructor(
|
|
48
|
+
constructor(_branch,
|
|
66
49
|
/** True if and only if this checkout is for a forked branch and not the "main branch" of the tree. */
|
|
67
50
|
isBranch, changeFamily, storedSchema, forest, events, mintRevisionTag, revisionTagCodec, idCompressor, removedRoots = makeDetachedFieldIndex("repair", revisionTagCodec, idCompressor),
|
|
68
51
|
/** Optional logger for telemetry. */
|
|
69
52
|
logger, breaker = new Breakable("TreeCheckout")) {
|
|
70
|
-
this.transaction = transaction;
|
|
71
53
|
this._branch = _branch;
|
|
72
54
|
this.isBranch = isBranch;
|
|
73
55
|
this.changeFamily = changeFamily;
|
|
@@ -93,34 +75,68 @@ export class TreeCheckout {
|
|
|
93
75
|
*/
|
|
94
76
|
this.revertibleCommitBranches = new Map();
|
|
95
77
|
/**
|
|
96
|
-
*
|
|
78
|
+
* The {@link Transactor} for this checkout.
|
|
79
|
+
* @remarks In the context of a checkout, transactions allow edits to be batched into atomic units.
|
|
80
|
+
* 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.
|
|
81
|
+
* If the transaction is aborted, the local state will be reset to what it was before the transaction began.
|
|
82
|
+
* Transactions may nest, meaning that a transaction may be started while a transaction is already ongoing.
|
|
83
|
+
*
|
|
84
|
+
* To avoid updating observers of the view state with intermediate results during a transaction,
|
|
85
|
+
* use {@link ITreeCheckout#branch} and {@link ISharedTreeFork#merge}.
|
|
97
86
|
*/
|
|
98
|
-
this
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
this.
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
87
|
+
_TreeCheckout_transaction.set(this, new TransactionStack(() => {
|
|
88
|
+
// Keep track of the commit that each transaction was on when it started
|
|
89
|
+
// TODO:#8603: This may need to be computed differently if we allow rebasing during a transaction.
|
|
90
|
+
const startCommit = this._branch.getHead();
|
|
91
|
+
// Keep track of all the forks created during the transaction so that we can dispose them when the transaction ends.
|
|
92
|
+
// This is a policy decision that we think is useful for the user, but it is not necessary for correctness.
|
|
93
|
+
const forks = new Set();
|
|
94
|
+
const onDisposeUnSubscribes = [];
|
|
95
|
+
const onForkUnSubscribe = onForkTransitive(this, (fork) => {
|
|
96
|
+
forks.add(fork);
|
|
97
|
+
onDisposeUnSubscribes.push(fork.events.on("dispose", () => forks.delete(fork)));
|
|
98
|
+
});
|
|
99
|
+
// When each transaction is started, take a snapshot of the current state of removed roots
|
|
100
|
+
const removedRoots = this.removedRoots.clone();
|
|
101
|
+
this._branch.editor.enterTransaction();
|
|
102
|
+
return (result) => {
|
|
103
|
+
this._branch.editor.exitTransaction();
|
|
104
|
+
switch (result) {
|
|
105
|
+
case TransactionResult.Abort:
|
|
106
|
+
this._branch.removeAfter(startCommit);
|
|
107
|
+
// If a transaction is rolled back, revert removed roots back to the latest snapshot
|
|
108
|
+
this.removedRoots = removedRoots;
|
|
109
|
+
break;
|
|
110
|
+
case TransactionResult.Commit: {
|
|
111
|
+
const removedCommits = this._branch.squashAfter(startCommit);
|
|
112
|
+
const transactionRevision = this._branch.getHead().revision;
|
|
113
|
+
for (const transactionStep of removedCommits) {
|
|
114
|
+
this.removedRoots.updateMajor(transactionStep.revision, transactionRevision);
|
|
115
|
+
}
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
default:
|
|
119
|
+
unreachableCase(result);
|
|
120
|
+
}
|
|
121
|
+
forks.forEach((fork) => fork.dispose());
|
|
122
|
+
onDisposeUnSubscribes.forEach((unsubscribe) => unsubscribe());
|
|
123
|
+
onForkUnSubscribe();
|
|
124
|
+
};
|
|
125
|
+
}));
|
|
113
126
|
// We subscribe to `beforeChange` rather than `afterChange` here because it's possible that the change is invalid WRT our forest.
|
|
114
127
|
// 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
128
|
// In such a case we will crash here, preventing the change from being added to the commit graph, and preventing `afterChange` from firing.
|
|
116
129
|
// 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
130
|
_branch.events.on("beforeChange", (event) => {
|
|
118
131
|
if (event.change !== undefined) {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
132
|
+
let revision;
|
|
133
|
+
if (event.type === "replace") {
|
|
134
|
+
assert(hasSome(event.newCommits), 0xa81 /* Expected new commit for non no-op change event */);
|
|
135
|
+
revision = getLast(event.newCommits).revision;
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
revision = event.change.revision;
|
|
139
|
+
}
|
|
124
140
|
// Conflicts due to schema will be empty and thus are not applied.
|
|
125
141
|
for (const change of event.change.change.changes) {
|
|
126
142
|
if (change.type === "data") {
|
|
@@ -153,18 +169,11 @@ export class TreeCheckout {
|
|
|
153
169
|
}
|
|
154
170
|
this.events.emit("afterBatch");
|
|
155
171
|
}
|
|
156
|
-
if (event.type === "replace" && getChangeReplaceType(event) === "transactionCommit") {
|
|
157
|
-
const firstCommit = event.newCommits[0] ?? oob();
|
|
158
|
-
const transactionRevision = firstCommit.revision;
|
|
159
|
-
for (const transactionStep of event.removedCommits) {
|
|
160
|
-
this.removedRoots.updateMajor(transactionStep.revision, transactionRevision);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
172
|
});
|
|
164
173
|
_branch.events.on("afterChange", (event) => {
|
|
165
174
|
// The following logic allows revertibles to be generated for the change.
|
|
166
175
|
// Currently only appends (including merges) and transaction commits are supported.
|
|
167
|
-
if (!
|
|
176
|
+
if (!this.transaction.isInProgress()) {
|
|
168
177
|
if (event.type === "append" ||
|
|
169
178
|
(event.type === "replace" && getChangeReplaceType(event) === "transactionCommit")) {
|
|
170
179
|
// TODO:#20949: When the SharedTree is detached, these commits will already have been garbage collected.
|
|
@@ -181,35 +190,7 @@ export class TreeCheckout {
|
|
|
181
190
|
if (this.revertibleCommitBranches.get(revision) !== undefined) {
|
|
182
191
|
throw new UsageError("Cannot generate the same revertible more than once. Note that this can happen when multiple changed event listeners are registered.");
|
|
183
192
|
}
|
|
184
|
-
const
|
|
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
|
-
};
|
|
193
|
+
const revertible = this.createRevertible(revision, kind, this, onRevertibleDisposed);
|
|
213
194
|
this.revertibleCommitBranches.set(revision, _branch.fork(commit));
|
|
214
195
|
this.revertibles.add(revertible);
|
|
215
196
|
return revertible;
|
|
@@ -219,7 +200,7 @@ export class TreeCheckout {
|
|
|
219
200
|
withinEventContext = false;
|
|
220
201
|
}
|
|
221
202
|
}
|
|
222
|
-
else if (event
|
|
203
|
+
else if (this.isRemoteChangeEvent(event)) {
|
|
223
204
|
// TODO: figure out how to plumb through commit kind info for remote changes
|
|
224
205
|
this.events.emit("changed", { isLocal: false, kind: CommitKind.Default });
|
|
225
206
|
}
|
|
@@ -255,6 +236,59 @@ export class TreeCheckout {
|
|
|
255
236
|
assert(false, 0x911 /* Invalid operation on a disposed TreeCheckout */);
|
|
256
237
|
}
|
|
257
238
|
}
|
|
239
|
+
/**
|
|
240
|
+
* Creates a {@link RevertibleAlpha} object that can undo a specific change in the tree's history.
|
|
241
|
+
* Revision must exist in the given {@link TreeCheckout}'s branch.
|
|
242
|
+
*
|
|
243
|
+
* @param revision - The revision tag identifying the change to be made revertible.
|
|
244
|
+
* @param kind - The {@link CommitKind} that produced this revertible (e.g., Default, Undo, Redo).
|
|
245
|
+
* @param checkout - The {@link TreeCheckout} instance this revertible belongs to.
|
|
246
|
+
* @param onRevertibleDisposed - Callback function that will be called when the revertible is disposed.
|
|
247
|
+
* @returns - {@link RevertibleAlpha}
|
|
248
|
+
*/
|
|
249
|
+
createRevertible(revision, kind, checkout, onRevertibleDisposed) {
|
|
250
|
+
const commitBranches = checkout.revertibleCommitBranches;
|
|
251
|
+
const revertible = {
|
|
252
|
+
get status() {
|
|
253
|
+
const revertibleCommit = commitBranches.get(revision);
|
|
254
|
+
return revertibleCommit === undefined
|
|
255
|
+
? RevertibleStatus.Disposed
|
|
256
|
+
: RevertibleStatus.Valid;
|
|
257
|
+
},
|
|
258
|
+
revert: (release = true) => {
|
|
259
|
+
if (revertible.status === RevertibleStatus.Disposed) {
|
|
260
|
+
throw new UsageError("Unable to revert a revertible that has been disposed.");
|
|
261
|
+
}
|
|
262
|
+
const revertMetrics = checkout.revertRevertible(revision, kind);
|
|
263
|
+
checkout.logger?.sendTelemetryEvent({
|
|
264
|
+
eventName: TreeCheckout.revertTelemetryEventName,
|
|
265
|
+
...revertMetrics,
|
|
266
|
+
});
|
|
267
|
+
if (release) {
|
|
268
|
+
revertible.dispose();
|
|
269
|
+
}
|
|
270
|
+
},
|
|
271
|
+
clone: (forkedBranch) => {
|
|
272
|
+
if (forkedBranch === undefined) {
|
|
273
|
+
return this.createRevertible(revision, kind, checkout, onRevertibleDisposed);
|
|
274
|
+
}
|
|
275
|
+
// 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.
|
|
276
|
+
const forkedCheckout = getCheckout(forkedBranch);
|
|
277
|
+
const revertibleBranch = this.revertibleCommitBranches.get(revision);
|
|
278
|
+
assert(revertibleBranch !== undefined, 0xa82 /* change to revert does not exist on the given forked branch */);
|
|
279
|
+
forkedCheckout.revertibleCommitBranches.set(revision, revertibleBranch.fork());
|
|
280
|
+
return this.createRevertible(revision, kind, forkedCheckout, onRevertibleDisposed);
|
|
281
|
+
},
|
|
282
|
+
dispose: () => {
|
|
283
|
+
if (revertible.status === RevertibleStatus.Disposed) {
|
|
284
|
+
throw new UsageError("Unable to dispose a revertible that has already been disposed.");
|
|
285
|
+
}
|
|
286
|
+
checkout.disposeRevertible(revertible, revision);
|
|
287
|
+
onRevertibleDisposed?.(revertible);
|
|
288
|
+
},
|
|
289
|
+
};
|
|
290
|
+
return revertible;
|
|
291
|
+
}
|
|
258
292
|
viewWith(config) {
|
|
259
293
|
const view = new SchematizingSimpleTreeView(this, config, createNodeKeyManager(this.idCompressor), this.breaker, () => {
|
|
260
294
|
this.views.delete(view);
|
|
@@ -273,19 +307,23 @@ export class TreeCheckout {
|
|
|
273
307
|
this.checkNotDisposed();
|
|
274
308
|
return this.forest.anchors.locate(anchor);
|
|
275
309
|
}
|
|
310
|
+
get transaction() {
|
|
311
|
+
return __classPrivateFieldGet(this, _TreeCheckout_transaction, "f");
|
|
312
|
+
}
|
|
276
313
|
branch() {
|
|
277
314
|
this.checkNotDisposed("The parent branch has already been disposed and can no longer create new branches.");
|
|
278
315
|
const anchors = new AnchorSet();
|
|
279
316
|
const branch = this._branch.fork();
|
|
280
317
|
const storedSchema = this.storedSchema.clone();
|
|
281
318
|
const forest = this.forest.clone(storedSchema, anchors);
|
|
282
|
-
const
|
|
283
|
-
|
|
319
|
+
const checkout = new TreeCheckout(branch, true, this.changeFamily, storedSchema, forest, createEmitter(), this.mintRevisionTag, this.revisionTagCodec, this.idCompressor, this.removedRoots.clone(), this.logger, this.breaker);
|
|
320
|
+
this.events.emit("fork", checkout);
|
|
321
|
+
return checkout;
|
|
284
322
|
}
|
|
285
323
|
rebase(checkout) {
|
|
286
324
|
this.checkNotDisposed("The target of the branch rebase has been disposed and cannot be rebased.");
|
|
287
325
|
checkout.checkNotDisposed("The source of the branch rebase has been disposed and cannot be rebased.");
|
|
288
|
-
assert(!checkout.transaction.
|
|
326
|
+
assert(!checkout.transaction.isInProgress(), 0x9af /* A view cannot be rebased while it has a pending transaction */);
|
|
289
327
|
assert(checkout.isBranch, 0xa5d /* The main branch cannot be rebased onto another branch. */);
|
|
290
328
|
checkout._branch.rebaseOnto(this._branch);
|
|
291
329
|
}
|
|
@@ -296,8 +334,8 @@ export class TreeCheckout {
|
|
|
296
334
|
merge(checkout, disposeMerged = true) {
|
|
297
335
|
this.checkNotDisposed("The target of the branch merge has been disposed and cannot be merged.");
|
|
298
336
|
checkout.checkNotDisposed("The source of the branch merge has been disposed and cannot be merged.");
|
|
299
|
-
assert(!this.transaction.
|
|
300
|
-
while (checkout.transaction.
|
|
337
|
+
assert(!this.transaction.isInProgress(), 0x9b0 /* Views cannot be merged into a view while it has a pending transaction */);
|
|
338
|
+
while (checkout.transaction.isInProgress()) {
|
|
301
339
|
checkout.transaction.commit();
|
|
302
340
|
}
|
|
303
341
|
this._branch.merge(checkout._branch);
|
|
@@ -313,14 +351,16 @@ export class TreeCheckout {
|
|
|
313
351
|
dispose() {
|
|
314
352
|
this[disposeSymbol]();
|
|
315
353
|
}
|
|
316
|
-
[disposeSymbol]() {
|
|
354
|
+
[(_TreeCheckout_transaction = new WeakMap(), disposeSymbol)]() {
|
|
317
355
|
this.checkNotDisposed("The branch has already been disposed and cannot be disposed again.");
|
|
318
356
|
this.disposed = true;
|
|
357
|
+
__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").dispose();
|
|
319
358
|
this.purgeRevertibles();
|
|
320
359
|
this._branch.dispose();
|
|
321
360
|
for (const view of this.views) {
|
|
322
361
|
view.dispose();
|
|
323
362
|
}
|
|
363
|
+
this.events.emit("dispose");
|
|
324
364
|
}
|
|
325
365
|
getRemovedRoots() {
|
|
326
366
|
this.assertNoUntrackedRoots();
|
|
@@ -356,7 +396,7 @@ export class TreeCheckout {
|
|
|
356
396
|
this.revertibles.delete(revertible);
|
|
357
397
|
}
|
|
358
398
|
revertRevertible(revision, kind) {
|
|
359
|
-
if (this.
|
|
399
|
+
if (this.transaction.isInProgress()) {
|
|
360
400
|
throw new UsageError("Undo is not yet supported during transactions.");
|
|
361
401
|
}
|
|
362
402
|
const revertibleBranch = this.revertibleCommitBranches.get(revision);
|
|
@@ -398,25 +438,22 @@ export class TreeCheckout {
|
|
|
398
438
|
rootFields.delete(field);
|
|
399
439
|
} while (cursor.nextField());
|
|
400
440
|
}
|
|
441
|
+
/**
|
|
442
|
+
* `true` iff the given branch change event is due to a remote change
|
|
443
|
+
*/
|
|
444
|
+
isRemoteChangeEvent(event) {
|
|
445
|
+
return (
|
|
446
|
+
// Remote changes are only ever applied to the main branch
|
|
447
|
+
!this.isBranch &&
|
|
448
|
+
// Remote changes are applied to the main branch by rebasing it onto the trunk.
|
|
449
|
+
// No other rebases are allowed on the main branch, so we can use this to detect remote changes.
|
|
450
|
+
event.type === "replace" &&
|
|
451
|
+
getChangeReplaceType(event) === "rebase");
|
|
452
|
+
}
|
|
401
453
|
}
|
|
402
454
|
/**
|
|
403
455
|
* The name of the telemetry event logged for calls to {@link TreeCheckout.revertRevertible}.
|
|
404
456
|
* @privateRemarks Exposed for testing purposes.
|
|
405
457
|
*/
|
|
406
458
|
TreeCheckout.revertTelemetryEventName = "RevertRevertible";
|
|
407
|
-
/**
|
|
408
|
-
* Run a synchronous transaction on the given shared tree view.
|
|
409
|
-
* This is a convenience helper around the {@link SharedTreeFork#transaction} APIs.
|
|
410
|
-
* @param view - the view on which to run the transaction
|
|
411
|
-
* @param transaction - the transaction function. This will be executed immediately. It is passed `view` as an argument for convenience.
|
|
412
|
-
* If this function returns an `Abort` result then the transaction will be aborted. Otherwise, it will be committed.
|
|
413
|
-
* @returns whether or not the transaction was committed or aborted
|
|
414
|
-
*/
|
|
415
|
-
export function runSynchronous(view, transaction) {
|
|
416
|
-
view.transaction.start();
|
|
417
|
-
const result = transaction(view);
|
|
418
|
-
return result === TransactionResult.Abort
|
|
419
|
-
? view.transaction.abort()
|
|
420
|
-
: view.transaction.commit();
|
|
421
|
-
}
|
|
422
459
|
//# sourceMappingURL=treeCheckout.js.map
|