@fluidframework/tree 2.61.0 → 2.62.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 +162 -0
- package/api-report/tree.alpha.api.md +26 -21
- package/api-report/tree.beta.api.md +15 -0
- package/api-report/tree.legacy.beta.api.md +18 -0
- package/dist/alpha.d.ts +8 -8
- package/dist/api.d.ts +17 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +24 -0
- package/dist/api.js.map +1 -0
- package/dist/beta.d.ts +5 -0
- package/dist/codec/codec.d.ts +3 -5
- package/dist/codec/codec.d.ts.map +1 -1
- package/dist/codec/codec.js +9 -2
- package/dist/codec/codec.js.map +1 -1
- package/dist/codec/index.d.ts +0 -1
- package/dist/codec/index.d.ts.map +1 -1
- package/dist/codec/index.js +1 -3
- package/dist/codec/index.js.map +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +2 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/rebase/index.d.ts +1 -1
- package/dist/core/rebase/index.d.ts.map +1 -1
- package/dist/core/rebase/index.js +2 -1
- package/dist/core/rebase/index.js.map +1 -1
- package/dist/core/rebase/utils.d.ts +10 -0
- package/dist/core/rebase/utils.d.ts.map +1 -1
- package/dist/core/rebase/utils.js +20 -1
- package/dist/core/rebase/utils.js.map +1 -1
- package/dist/core/tree/detachedFieldIndex.js +1 -1
- package/dist/core/tree/detachedFieldIndex.js.map +1 -1
- package/dist/external-utilities/index.d.ts +1 -1
- package/dist/external-utilities/index.d.ts.map +1 -1
- package/dist/external-utilities/index.js +1 -2
- package/dist/external-utilities/index.js.map +1 -1
- package/dist/external-utilities/typeboxValidator.d.ts +0 -13
- package/dist/external-utilities/typeboxValidator.d.ts.map +1 -1
- package/dist/external-utilities/typeboxValidator.js +3 -5
- package/dist/external-utilities/typeboxValidator.js.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +2 -0
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/dist/feature-libraries/flex-tree/index.d.ts +1 -0
- package/dist/feature-libraries/flex-tree/index.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/index.js +4 -1
- package/dist/feature-libraries/flex-tree/index.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyNode.js +15 -8
- package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
- package/dist/feature-libraries/flex-tree/observer.d.ts +32 -0
- package/dist/feature-libraries/flex-tree/observer.d.ts.map +1 -0
- package/dist/feature-libraries/flex-tree/observer.js +33 -0
- package/dist/feature-libraries/flex-tree/observer.js.map +1 -0
- package/dist/feature-libraries/index.d.ts +1 -1
- package/dist/feature-libraries/index.d.ts.map +1 -1
- package/dist/feature-libraries/index.js +3 -1
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -8
- package/dist/index.js.map +1 -1
- package/dist/legacy.d.ts +7 -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.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +2 -2
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree/sharedTree.d.ts +21 -6
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +76 -37
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/treeAlpha.d.ts +114 -1
- package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
- package/dist/shared-tree/treeAlpha.js +140 -1
- package/dist/shared-tree/treeAlpha.js.map +1 -1
- package/dist/shared-tree/treeCheckout.d.ts +13 -7
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +115 -85
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree-core/branch.d.ts +3 -0
- package/dist/shared-tree-core/branch.d.ts.map +1 -1
- package/dist/shared-tree-core/branch.js.map +1 -1
- package/dist/shared-tree-core/branchIdCodec.d.ts +11 -0
- package/dist/shared-tree-core/branchIdCodec.d.ts.map +1 -0
- package/dist/shared-tree-core/branchIdCodec.js +18 -0
- package/dist/shared-tree-core/branchIdCodec.js.map +1 -0
- package/dist/shared-tree-core/editManager.d.ts +39 -64
- package/dist/shared-tree-core/editManager.d.ts.map +1 -1
- package/dist/shared-tree-core/editManager.js +455 -295
- package/dist/shared-tree-core/editManager.js.map +1 -1
- package/dist/shared-tree-core/editManagerCodecs.d.ts +1 -1
- package/dist/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerCodecs.js +7 -96
- package/dist/shared-tree-core/editManagerCodecs.js.map +1 -1
- package/dist/shared-tree-core/editManagerCodecsCommons.d.ts +17 -0
- package/dist/shared-tree-core/editManagerCodecsCommons.d.ts.map +1 -0
- package/dist/shared-tree-core/editManagerCodecsCommons.js +139 -0
- package/dist/shared-tree-core/editManagerCodecsCommons.js.map +1 -0
- package/dist/shared-tree-core/editManagerCodecsV1toV4.d.ts +16 -0
- package/dist/shared-tree-core/editManagerCodecsV1toV4.d.ts.map +1 -0
- package/dist/shared-tree-core/editManagerCodecsV1toV4.js +39 -0
- package/dist/shared-tree-core/editManagerCodecsV1toV4.js.map +1 -0
- package/dist/shared-tree-core/editManagerCodecsV5.d.ts +16 -0
- package/dist/shared-tree-core/editManagerCodecsV5.d.ts.map +1 -0
- package/dist/shared-tree-core/editManagerCodecsV5.js +58 -0
- package/dist/shared-tree-core/editManagerCodecsV5.js.map +1 -0
- package/dist/shared-tree-core/{editManagerFormat.d.ts → editManagerFormatCommons.d.ts} +31 -7
- package/dist/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -0
- package/dist/shared-tree-core/{editManagerFormat.js → editManagerFormatCommons.js} +13 -12
- package/dist/shared-tree-core/editManagerFormatCommons.js.map +1 -0
- package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts +31 -0
- package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -0
- package/dist/shared-tree-core/editManagerFormatV1toV4.js +24 -0
- package/dist/shared-tree-core/editManagerFormatV1toV4.js.map +1 -0
- package/dist/shared-tree-core/editManagerFormatV5.d.ts +62 -0
- package/dist/shared-tree-core/editManagerFormatV5.d.ts.map +1 -0
- package/dist/shared-tree-core/editManagerFormatV5.js +20 -0
- package/dist/shared-tree-core/editManagerFormatV5.js.map +1 -0
- 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.map +1 -1
- package/dist/shared-tree-core/messageCodecV1ToV4.d.ts +11 -0
- package/dist/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -0
- package/dist/shared-tree-core/messageCodecV1ToV4.js +59 -0
- package/dist/shared-tree-core/messageCodecV1ToV4.js.map +1 -0
- package/dist/shared-tree-core/messageCodecV5.d.ts +11 -0
- package/dist/shared-tree-core/messageCodecV5.d.ts.map +1 -0
- package/dist/shared-tree-core/messageCodecV5.js +78 -0
- package/dist/shared-tree-core/messageCodecV5.js.map +1 -0
- package/dist/shared-tree-core/messageCodecs.d.ts.map +1 -1
- package/dist/shared-tree-core/messageCodecs.js +16 -47
- package/dist/shared-tree-core/messageCodecs.js.map +1 -1
- package/dist/shared-tree-core/{messageFormat.d.ts → messageFormatV1ToV4.d.ts} +1 -1
- package/dist/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -0
- package/dist/shared-tree-core/{messageFormat.js → messageFormatV1ToV4.js} +1 -1
- package/dist/shared-tree-core/messageFormatV1ToV4.js.map +1 -0
- package/dist/shared-tree-core/messageFormatV5.d.ts +42 -0
- package/dist/shared-tree-core/messageFormatV5.d.ts.map +1 -0
- package/dist/shared-tree-core/messageFormatV5.js +20 -0
- package/dist/shared-tree-core/messageFormatV5.js.map +1 -0
- package/dist/shared-tree-core/messageTypes.d.ts +12 -2
- package/dist/shared-tree-core/messageTypes.d.ts.map +1 -1
- package/dist/shared-tree-core/messageTypes.js.map +1 -1
- package/dist/shared-tree-core/sequenceIdUtils.d.ts +1 -1
- package/dist/shared-tree-core/sequenceIdUtils.d.ts.map +1 -1
- package/dist/shared-tree-core/sequenceIdUtils.js.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.d.ts +19 -5
- package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.js +182 -58
- package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/dist/simple-tree/api/tree.d.ts +17 -0
- package/dist/simple-tree/api/tree.d.ts.map +1 -1
- package/dist/simple-tree/api/tree.js +2 -0
- package/dist/simple-tree/api/tree.js.map +1 -1
- package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
- package/dist/simple-tree/core/unhydratedFlexTree.js +7 -1
- package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
- package/dist/treeFactory.d.ts +38 -9
- package/dist/treeFactory.d.ts.map +1 -1
- package/dist/treeFactory.js +44 -9
- package/dist/treeFactory.js.map +1 -1
- package/lib/alpha.d.ts +8 -8
- package/lib/api.d.ts +17 -0
- package/lib/api.d.ts.map +1 -0
- package/lib/api.js +22 -0
- package/lib/api.js.map +1 -0
- package/lib/beta.d.ts +5 -0
- package/lib/codec/codec.d.ts +3 -5
- package/lib/codec/codec.d.ts.map +1 -1
- package/lib/codec/codec.js +8 -1
- package/lib/codec/codec.js.map +1 -1
- package/lib/codec/index.d.ts +0 -1
- package/lib/codec/index.d.ts.map +1 -1
- package/lib/codec/index.js +0 -1
- package/lib/codec/index.js.map +1 -1
- package/lib/core/index.d.ts +1 -1
- package/lib/core/index.d.ts.map +1 -1
- package/lib/core/index.js +1 -1
- package/lib/core/index.js.map +1 -1
- package/lib/core/rebase/index.d.ts +1 -1
- package/lib/core/rebase/index.d.ts.map +1 -1
- package/lib/core/rebase/index.js +1 -1
- package/lib/core/rebase/index.js.map +1 -1
- package/lib/core/rebase/utils.d.ts +10 -0
- package/lib/core/rebase/utils.d.ts.map +1 -1
- package/lib/core/rebase/utils.js +18 -0
- package/lib/core/rebase/utils.js.map +1 -1
- package/lib/core/tree/detachedFieldIndex.js +2 -2
- package/lib/core/tree/detachedFieldIndex.js.map +1 -1
- package/lib/external-utilities/index.d.ts +1 -1
- package/lib/external-utilities/index.d.ts.map +1 -1
- package/lib/external-utilities/index.js +1 -1
- package/lib/external-utilities/index.js.map +1 -1
- package/lib/external-utilities/typeboxValidator.d.ts +0 -13
- package/lib/external-utilities/typeboxValidator.d.ts.map +1 -1
- package/lib/external-utilities/typeboxValidator.js +1 -3
- package/lib/external-utilities/typeboxValidator.js.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +2 -0
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/lib/feature-libraries/flex-tree/index.d.ts +1 -0
- package/lib/feature-libraries/flex-tree/index.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/index.js +1 -0
- package/lib/feature-libraries/flex-tree/index.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyNode.js +15 -8
- package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
- package/lib/feature-libraries/flex-tree/observer.d.ts +32 -0
- package/lib/feature-libraries/flex-tree/observer.d.ts.map +1 -0
- package/lib/feature-libraries/flex-tree/observer.js +40 -0
- package/lib/feature-libraries/flex-tree/observer.js.map +1 -0
- package/lib/feature-libraries/index.d.ts +1 -1
- package/lib/feature-libraries/index.d.ts.map +1 -1
- package/lib/feature-libraries/index.js +1 -1
- package/lib/feature-libraries/index.js.map +1 -1
- package/lib/index.d.ts +5 -5
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +3 -3
- package/lib/index.js.map +1 -1
- package/lib/legacy.d.ts +7 -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.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 +21 -6
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +78 -39
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/treeAlpha.d.ts +114 -1
- package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
- package/lib/shared-tree/treeAlpha.js +143 -4
- package/lib/shared-tree/treeAlpha.js.map +1 -1
- package/lib/shared-tree/treeCheckout.d.ts +13 -7
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +117 -87
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree-core/branch.d.ts +3 -0
- package/lib/shared-tree-core/branch.d.ts.map +1 -1
- package/lib/shared-tree-core/branch.js.map +1 -1
- package/lib/shared-tree-core/branchIdCodec.d.ts +11 -0
- package/lib/shared-tree-core/branchIdCodec.d.ts.map +1 -0
- package/lib/shared-tree-core/branchIdCodec.js +13 -0
- package/lib/shared-tree-core/branchIdCodec.js.map +1 -0
- package/lib/shared-tree-core/editManager.d.ts +39 -64
- package/lib/shared-tree-core/editManager.d.ts.map +1 -1
- package/lib/shared-tree-core/editManager.js +455 -295
- package/lib/shared-tree-core/editManager.js.map +1 -1
- package/lib/shared-tree-core/editManagerCodecs.d.ts +1 -1
- package/lib/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerCodecs.js +4 -93
- package/lib/shared-tree-core/editManagerCodecs.js.map +1 -1
- package/lib/shared-tree-core/editManagerCodecsCommons.d.ts +17 -0
- package/lib/shared-tree-core/editManagerCodecsCommons.d.ts.map +1 -0
- package/lib/shared-tree-core/editManagerCodecsCommons.js +134 -0
- package/lib/shared-tree-core/editManagerCodecsCommons.js.map +1 -0
- package/lib/shared-tree-core/editManagerCodecsV1toV4.d.ts +16 -0
- package/lib/shared-tree-core/editManagerCodecsV1toV4.d.ts.map +1 -0
- package/lib/shared-tree-core/editManagerCodecsV1toV4.js +35 -0
- package/lib/shared-tree-core/editManagerCodecsV1toV4.js.map +1 -0
- package/lib/shared-tree-core/editManagerCodecsV5.d.ts +16 -0
- package/lib/shared-tree-core/editManagerCodecsV5.d.ts.map +1 -0
- package/lib/shared-tree-core/editManagerCodecsV5.js +54 -0
- package/lib/shared-tree-core/editManagerCodecsV5.js.map +1 -0
- package/lib/shared-tree-core/{editManagerFormat.d.ts → editManagerFormatCommons.d.ts} +31 -7
- package/lib/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -0
- package/lib/shared-tree-core/{editManagerFormat.js → editManagerFormatCommons.js} +10 -11
- package/lib/shared-tree-core/editManagerFormatCommons.js.map +1 -0
- package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts +31 -0
- package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -0
- package/lib/shared-tree-core/editManagerFormatV1toV4.js +20 -0
- package/lib/shared-tree-core/editManagerFormatV1toV4.js.map +1 -0
- package/lib/shared-tree-core/editManagerFormatV5.d.ts +62 -0
- package/lib/shared-tree-core/editManagerFormatV5.d.ts.map +1 -0
- package/lib/shared-tree-core/editManagerFormatV5.js +16 -0
- package/lib/shared-tree-core/editManagerFormatV5.js.map +1 -0
- 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.map +1 -1
- package/lib/shared-tree-core/messageCodecV1ToV4.d.ts +11 -0
- package/lib/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -0
- package/lib/shared-tree-core/messageCodecV1ToV4.js +55 -0
- package/lib/shared-tree-core/messageCodecV1ToV4.js.map +1 -0
- package/lib/shared-tree-core/messageCodecV5.d.ts +11 -0
- package/lib/shared-tree-core/messageCodecV5.d.ts.map +1 -0
- package/lib/shared-tree-core/messageCodecV5.js +74 -0
- package/lib/shared-tree-core/messageCodecV5.js.map +1 -0
- package/lib/shared-tree-core/messageCodecs.d.ts.map +1 -1
- package/lib/shared-tree-core/messageCodecs.js +17 -48
- package/lib/shared-tree-core/messageCodecs.js.map +1 -1
- package/lib/shared-tree-core/{messageFormat.d.ts → messageFormatV1ToV4.d.ts} +1 -1
- package/lib/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -0
- package/lib/shared-tree-core/{messageFormat.js → messageFormatV1ToV4.js} +1 -1
- package/lib/shared-tree-core/messageFormatV1ToV4.js.map +1 -0
- package/lib/shared-tree-core/messageFormatV5.d.ts +42 -0
- package/lib/shared-tree-core/messageFormatV5.d.ts.map +1 -0
- package/lib/shared-tree-core/messageFormatV5.js +16 -0
- package/lib/shared-tree-core/messageFormatV5.js.map +1 -0
- package/lib/shared-tree-core/messageTypes.d.ts +12 -2
- package/lib/shared-tree-core/messageTypes.d.ts.map +1 -1
- package/lib/shared-tree-core/messageTypes.js.map +1 -1
- package/lib/shared-tree-core/sequenceIdUtils.d.ts +1 -1
- package/lib/shared-tree-core/sequenceIdUtils.d.ts.map +1 -1
- package/lib/shared-tree-core/sequenceIdUtils.js.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.d.ts +19 -5
- package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.js +183 -59
- package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/lib/simple-tree/api/tree.d.ts +17 -0
- package/lib/simple-tree/api/tree.d.ts.map +1 -1
- package/lib/simple-tree/api/tree.js +2 -0
- package/lib/simple-tree/api/tree.js.map +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.js +8 -2
- package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
- package/lib/treeFactory.d.ts +38 -9
- package/lib/treeFactory.d.ts.map +1 -1
- package/lib/treeFactory.js +41 -8
- package/lib/treeFactory.js.map +1 -1
- package/package.json +25 -25
- package/src/api.ts +30 -0
- package/src/codec/codec.ts +12 -6
- package/src/codec/index.ts +0 -1
- package/src/core/index.ts +1 -0
- package/src/core/rebase/index.ts +1 -0
- package/src/core/rebase/utils.ts +27 -0
- package/src/core/tree/detachedFieldIndex.ts +2 -2
- package/src/external-utilities/index.ts +1 -1
- package/src/external-utilities/typeboxValidator.ts +1 -3
- package/src/feature-libraries/flex-tree/flexTreeTypes.ts +2 -0
- package/src/feature-libraries/flex-tree/index.ts +2 -0
- package/src/feature-libraries/flex-tree/lazyNode.ts +13 -3
- package/src/feature-libraries/flex-tree/observer.ts +64 -0
- package/src/feature-libraries/index.ts +3 -0
- package/src/index.ts +6 -4
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/index.ts +2 -0
- package/src/shared-tree/schematizingTreeView.ts +2 -2
- package/src/shared-tree/sharedTree.ts +116 -52
- package/src/shared-tree/treeAlpha.ts +309 -4
- package/src/shared-tree/treeCheckout.ts +152 -100
- package/src/shared-tree-core/branch.ts +7 -0
- package/src/shared-tree-core/branchIdCodec.ts +28 -0
- package/src/shared-tree-core/editManager.ts +729 -430
- package/src/shared-tree-core/editManagerCodecs.ts +4 -164
- package/src/shared-tree-core/editManagerCodecsCommons.ts +245 -0
- package/src/shared-tree-core/editManagerCodecsV1toV4.ts +108 -0
- package/src/shared-tree-core/editManagerCodecsV5.ts +156 -0
- package/src/shared-tree-core/{editManagerFormat.ts → editManagerFormatCommons.ts} +17 -13
- package/src/shared-tree-core/editManagerFormatV1toV4.ts +42 -0
- package/src/shared-tree-core/editManagerFormatV5.ts +35 -0
- package/src/shared-tree-core/index.ts +3 -1
- package/src/shared-tree-core/messageCodecV1ToV4.ts +104 -0
- package/src/shared-tree-core/messageCodecV5.ts +131 -0
- package/src/shared-tree-core/messageCodecs.ts +16 -85
- package/src/shared-tree-core/messageFormatV5.ts +50 -0
- package/src/shared-tree-core/messageTypes.ts +15 -2
- package/src/shared-tree-core/sequenceIdUtils.ts +1 -1
- package/src/shared-tree-core/sharedTreeCore.ts +281 -85
- package/src/simple-tree/api/tree.ts +23 -0
- package/src/simple-tree/core/unhydratedFlexTree.ts +11 -2
- package/src/treeFactory.ts +48 -8
- package/dist/codec/noopValidator.d.ts +0 -13
- package/dist/codec/noopValidator.d.ts.map +0 -1
- package/dist/codec/noopValidator.js +0 -17
- package/dist/codec/noopValidator.js.map +0 -1
- package/dist/shared-tree-core/editManagerFormat.d.ts.map +0 -1
- package/dist/shared-tree-core/editManagerFormat.js.map +0 -1
- package/dist/shared-tree-core/messageFormat.d.ts.map +0 -1
- package/dist/shared-tree-core/messageFormat.js.map +0 -1
- package/docs/user-facing/schema-evolution.md +0 -309
- package/lib/codec/noopValidator.d.ts +0 -13
- package/lib/codec/noopValidator.d.ts.map +0 -1
- package/lib/codec/noopValidator.js +0 -14
- package/lib/codec/noopValidator.js.map +0 -1
- package/lib/shared-tree-core/editManagerFormat.d.ts.map +0 -1
- package/lib/shared-tree-core/editManagerFormat.js.map +0 -1
- package/lib/shared-tree-core/messageFormat.d.ts.map +0 -1
- package/lib/shared-tree-core/messageFormat.js.map +0 -1
- package/src/codec/noopValidator.ts +0 -18
- /package/src/shared-tree-core/{messageFormat.ts → messageFormatV1ToV4.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messageTypes.js","sourceRoot":"","sources":["../../src/shared-tree-core/messageTypes.ts"],"names":[],"mappings":";AAAA;;;GAGG","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type { SessionId } from \"@fluidframework/id-compressor\";\n\nimport type { GraphCommit } from \"../core/index.js\";\n\nexport
|
|
1
|
+
{"version":3,"file":"messageTypes.js","sourceRoot":"","sources":["../../src/shared-tree-core/messageTypes.ts"],"names":[],"mappings":";AAAA;;;GAGG","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type { SessionId } from \"@fluidframework/id-compressor\";\n\nimport type { GraphCommit } from \"../core/index.js\";\nimport type { BranchId } from \"./branch.js\";\n\nexport type DecodedMessage<TChange> = CommitMessage<TChange> | BranchMessage;\n\nexport interface MessageBase {\n\tsessionId: SessionId;\n}\n\nexport interface CommitMessage<TChange> extends MessageBase {\n\ttype: \"commit\";\n\tcommit: GraphCommit<TChange>;\n\tbranchId: BranchId;\n}\n\nexport interface BranchMessage extends MessageBase {\n\ttype: \"branch\";\n\tbranchId: BranchId;\n}\n"]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
-
import type { SequenceId } from "./
|
|
5
|
+
import type { SequenceId } from "./editManagerFormatCommons.js";
|
|
6
6
|
/**
|
|
7
7
|
* Compares two sequenceIds. Returns a negative number if a \< b, a positive number if a \> b, and 0 if a === b.
|
|
8
8
|
* Note that this handles cases where indexInBatch is Number.POSITIVE_INFINITY.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequenceIdUtils.d.ts","sourceRoot":"","sources":["../../src/shared-tree-core/sequenceIdUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"sequenceIdUtils.d.ts","sourceRoot":"","sources":["../../src/shared-tree-core/sequenceIdUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEhE;;;GAGG;AACH,eAAO,MAAM,oBAAoB,MAAO,UAAU,KAAK,UAAU,KAAG,MAKlB,CAAC;AACnD,eAAO,MAAM,gBAAgB,MAAO,UAAU,KAAK,UAAU,KAAG,OAC/B,CAAC;AAClC,eAAO,MAAM,aAAa,MAAO,UAAU,KAAK,UAAU,KAAG,UACtB,CAAC;AACxC,eAAO,MAAM,aAAa,MAAO,UAAU,KAAK,UAAU,KAAG,UACtB,CAAC;AACxC;;;;;;GAMG;AACH,eAAO,MAAM,iCAAiC,eAAgB,UAAU,KAAG,UAc1E,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequenceIdUtils.js","sourceRoot":"","sources":["../../src/shared-tree-core/sequenceIdUtils.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,kEAA6D;AAE7D,+CAAyC;AAIzC;;;GAGG;AACI,MAAM,oBAAoB,GAAG,CAAC,CAAa,EAAE,CAAa,EAAU,EAAE,CAC5E,CAAC,CAAC,cAAc,KAAK,CAAC,CAAC,cAAc;IACpC,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,cAAc;IACrC,CAAC,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,YAAY;QAClC,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;AALtC,QAAA,oBAAoB,wBAKkB;AAC5C,MAAM,gBAAgB,GAAG,CAAC,CAAa,EAAE,CAAa,EAAW,EAAE,CACzE,IAAA,4BAAoB,EAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;AADrB,QAAA,gBAAgB,oBACK;AAC3B,MAAM,aAAa,GAAG,CAAC,CAAa,EAAE,CAAa,EAAc,EAAE,CACzE,IAAA,4BAAoB,EAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAD3B,QAAA,aAAa,iBACc;AACjC,MAAM,aAAa,GAAG,CAAC,CAAa,EAAE,CAAa,EAAc,EAAE,CACzE,IAAA,4BAAoB,EAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAD3B,QAAA,aAAa,iBACc;AACxC;;;;;;GAMG;AACI,MAAM,iCAAiC,GAAG,CAAC,UAAsB,EAAc,EAAE;IACvF,IAAA,iBAAM,EACL,UAAU,CAAC,YAAY,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,EACjF,KAAK,CAAC,uCAAuC,CAC7C,CAAC;IACF,OAAO,UAAU,CAAC,YAAY,KAAK,SAAS,IAAI,UAAU,CAAC,YAAY,KAAK,CAAC;QAC5E,CAAC,CAAC;YACA,cAAc,EAAE,IAAA,gBAAK,EAAC,UAAU,CAAC,cAAc,GAAG,CAAC,CAAC;YACpD,YAAY,EAAE,MAAM,CAAC,iBAAiB;SACtC;QACF,CAAC,CAAC;YACA,cAAc,EAAE,IAAA,gBAAK,EAAC,UAAU,CAAC,cAAc,CAAC;YAChD,YAAY,EAAE,UAAU,CAAC,YAAY,GAAG,CAAC;SACzC,CAAC;AACL,CAAC,CAAC;AAdW,QAAA,iCAAiC,qCAc5C","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/core-utils/internal\";\n\nimport { brand } from \"../util/index.js\";\n\nimport type { SequenceId } from \"./
|
|
1
|
+
{"version":3,"file":"sequenceIdUtils.js","sourceRoot":"","sources":["../../src/shared-tree-core/sequenceIdUtils.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,kEAA6D;AAE7D,+CAAyC;AAIzC;;;GAGG;AACI,MAAM,oBAAoB,GAAG,CAAC,CAAa,EAAE,CAAa,EAAU,EAAE,CAC5E,CAAC,CAAC,cAAc,KAAK,CAAC,CAAC,cAAc;IACpC,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,cAAc;IACrC,CAAC,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,YAAY;QAClC,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;AALtC,QAAA,oBAAoB,wBAKkB;AAC5C,MAAM,gBAAgB,GAAG,CAAC,CAAa,EAAE,CAAa,EAAW,EAAE,CACzE,IAAA,4BAAoB,EAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;AADrB,QAAA,gBAAgB,oBACK;AAC3B,MAAM,aAAa,GAAG,CAAC,CAAa,EAAE,CAAa,EAAc,EAAE,CACzE,IAAA,4BAAoB,EAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAD3B,QAAA,aAAa,iBACc;AACjC,MAAM,aAAa,GAAG,CAAC,CAAa,EAAE,CAAa,EAAc,EAAE,CACzE,IAAA,4BAAoB,EAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAD3B,QAAA,aAAa,iBACc;AACxC;;;;;;GAMG;AACI,MAAM,iCAAiC,GAAG,CAAC,UAAsB,EAAc,EAAE;IACvF,IAAA,iBAAM,EACL,UAAU,CAAC,YAAY,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,EACjF,KAAK,CAAC,uCAAuC,CAC7C,CAAC;IACF,OAAO,UAAU,CAAC,YAAY,KAAK,SAAS,IAAI,UAAU,CAAC,YAAY,KAAK,CAAC;QAC5E,CAAC,CAAC;YACA,cAAc,EAAE,IAAA,gBAAK,EAAC,UAAU,CAAC,cAAc,GAAG,CAAC,CAAC;YACpD,YAAY,EAAE,MAAM,CAAC,iBAAiB;SACtC;QACF,CAAC,CAAC;YACA,cAAc,EAAE,IAAA,gBAAK,EAAC,UAAU,CAAC,cAAc,CAAC;YAChD,YAAY,EAAE,UAAU,CAAC,YAAY,GAAG,CAAC;SACzC,CAAC;AACL,CAAC,CAAC;AAdW,QAAA,iCAAiC,qCAc5C","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/core-utils/internal\";\n\nimport { brand } from \"../util/index.js\";\n\nimport type { SequenceId } from \"./editManagerFormatCommons.js\";\n\n/**\n * Compares two sequenceIds. Returns a negative number if a \\< b, a positive number if a \\> b, and 0 if a === b.\n * Note that this handles cases where indexInBatch is Number.POSITIVE_INFINITY.\n */\nexport const sequenceIdComparator = (a: SequenceId, b: SequenceId): number =>\n\ta.sequenceNumber !== b.sequenceNumber\n\t\t? a.sequenceNumber - b.sequenceNumber\n\t\t: a.indexInBatch === b.indexInBatch\n\t\t\t? 0\n\t\t\t: (a.indexInBatch ?? 0) - (b.indexInBatch ?? 0);\nexport const equalSequenceIds = (a: SequenceId, b: SequenceId): boolean =>\n\tsequenceIdComparator(a, b) === 0;\nexport const minSequenceId = (a: SequenceId, b: SequenceId): SequenceId =>\n\tsequenceIdComparator(a, b) < 0 ? a : b;\nexport const maxSequenceId = (a: SequenceId, b: SequenceId): SequenceId =>\n\tsequenceIdComparator(a, b) > 0 ? a : b;\n/**\n * Returns the upper bound (maximum possible) sequenceId that can occur just before the given sequenceId.\n * Some examples:\n * 1. sequenceId = \\{ sequenceNumber: 1, indexInBatch: 2 \\}. The upper bound is \\{ sequenceNumber: 1, indexInBatch: 1 \\}.\n * 2. sequenceId = \\{ sequenceNumber: 2 \\}. The upper bound is \\{ sequenceNumber: 1, indexInBatch: Number.POSITIVE_INFINITY \\}.\n * The indexInBatch value of the previous commit will depend on how many ops were in the previous batch of messages received.\n */\nexport const getUpperBoundOfPreviousSequenceId = (sequenceId: SequenceId): SequenceId => {\n\tassert(\n\t\tsequenceId.indexInBatch === undefined || Number.isFinite(sequenceId.indexInBatch),\n\t\t0xabc /* indexInBatch must not be infinity */,\n\t);\n\treturn sequenceId.indexInBatch === undefined || sequenceId.indexInBatch === 0\n\t\t? {\n\t\t\t\tsequenceNumber: brand(sequenceId.sequenceNumber - 1),\n\t\t\t\tindexInBatch: Number.POSITIVE_INFINITY,\n\t\t\t}\n\t\t: {\n\t\t\t\tsequenceNumber: brand(sequenceId.sequenceNumber),\n\t\t\t\tindexInBatch: sequenceId.indexInBatch - 1,\n\t\t\t};\n};\n"]}
|
|
@@ -10,7 +10,7 @@ import type { IChannelView, IFluidSerializer } from "@fluidframework/shared-obje
|
|
|
10
10
|
import type { ICodecOptions } from "../codec/index.js";
|
|
11
11
|
import { type ChangeFamily, type ChangeFamilyEditor, type GraphCommit, type RevisionTag, type SchemaAndPolicy, type SchemaPolicy, type TreeStoredSchemaRepository } from "../core/index.js";
|
|
12
12
|
import { type JsonCompatibleReadOnly, type Breakable, type WithBreakable } from "../util/index.js";
|
|
13
|
-
import type { SharedTreeBranch } from "./branch.js";
|
|
13
|
+
import type { BranchId, SharedTreeBranch } from "./branch.js";
|
|
14
14
|
import { BranchCommitEnricher } from "./branchCommitEnricher.js";
|
|
15
15
|
import { type ChangeEnricherReadonlyCheckout } from "./changeEnricher.js";
|
|
16
16
|
import type { ResubmitMachine } from "./resubmitMachine.js";
|
|
@@ -29,7 +29,8 @@ export declare class SharedTreeCore<TEditor extends ChangeFamilyEditor, TChange>
|
|
|
29
29
|
readonly sharedObject: IChannelView & IFluidLoadable;
|
|
30
30
|
readonly serializer: IFluidSerializer;
|
|
31
31
|
readonly submitLocalMessage: (content: unknown, localOpMetadata?: unknown) => void;
|
|
32
|
-
|
|
32
|
+
protected readonly changeFamily: ChangeFamily<TEditor, TChange>;
|
|
33
|
+
protected readonly idCompressor: IIdCompressor;
|
|
33
34
|
readonly getEditor: () => TEditor;
|
|
34
35
|
private readonly editManager;
|
|
35
36
|
private readonly summarizables;
|
|
@@ -49,8 +50,7 @@ export declare class SharedTreeCore<TEditor extends ChangeFamilyEditor, TChange>
|
|
|
49
50
|
* and an op needs to be interpreted which isn't written with the current configuration).
|
|
50
51
|
*/
|
|
51
52
|
private readonly messageCodec;
|
|
52
|
-
private readonly
|
|
53
|
-
readonly commitEnricher: BranchCommitEnricher<TChange>;
|
|
53
|
+
private readonly enrichers;
|
|
54
54
|
readonly mintRevisionTag: () => RevisionTag;
|
|
55
55
|
private readonly schemaAndPolicy;
|
|
56
56
|
/**
|
|
@@ -64,6 +64,7 @@ export declare class SharedTreeCore<TEditor extends ChangeFamilyEditor, TChange>
|
|
|
64
64
|
constructor(breaker: Breakable, sharedObject: IChannelView & IFluidLoadable, serializer: IFluidSerializer, submitLocalMessage: (content: unknown, localOpMetadata?: unknown) => void, logger: ITelemetryBaseLogger | undefined, summarizables: readonly Summarizable[], changeFamily: ChangeFamily<TEditor, TChange>, options: ICodecOptions, formatOptions: ExplicitCoreCodecVersions, idCompressor: IIdCompressor, schema: TreeStoredSchemaRepository, schemaPolicy: SchemaPolicy, resubmitMachine?: ResubmitMachine<TChange>, enricher?: ChangeEnricherReadonlyCheckout<TChange>, getEditor?: () => TEditor);
|
|
65
65
|
summarizeCore(serializer: IFluidSerializer, telemetryContext?: ITelemetryContext, incrementalSummaryContext?: IExperimentalIncrementalSummaryContext, fullTree?: boolean): ISummaryTreeWithStats;
|
|
66
66
|
loadCore(services: IChannelStorageService): Promise<void>;
|
|
67
|
+
private registerSharedBranch;
|
|
67
68
|
private loadSummarizable;
|
|
68
69
|
/**
|
|
69
70
|
* Submits an op to the Fluid runtime containing the given commit
|
|
@@ -71,16 +72,29 @@ export declare class SharedTreeCore<TEditor extends ChangeFamilyEditor, TChange>
|
|
|
71
72
|
* @returns the submitted commit. This is undefined if the underlying `SharedObject` is not attached,
|
|
72
73
|
* and may differ from `commit` due to enrichments like detached tree refreshers.
|
|
73
74
|
*/
|
|
74
|
-
protected submitCommit(commit: GraphCommit<TChange>, schemaAndPolicy: ClonableSchemaAndPolicy, isResubmit: boolean): void;
|
|
75
|
+
protected submitCommit(branchId: BranchId, commit: GraphCommit<TChange>, schemaAndPolicy: ClonableSchemaAndPolicy, isResubmit: boolean): void;
|
|
76
|
+
protected submitBranchCreation(branchId: BranchId): void;
|
|
77
|
+
private submitMessage;
|
|
75
78
|
/**
|
|
76
79
|
* Process a bunch of messages from the runtime. SharedObject will call this method with a bunch of messages.
|
|
77
80
|
*/
|
|
78
81
|
processMessagesCore(messagesCollection: IRuntimeMessageCollection): void;
|
|
82
|
+
private processCommits;
|
|
79
83
|
getLocalBranch(): SharedTreeBranch<TEditor, TChange>;
|
|
84
|
+
getSharedBranchIds(): string[];
|
|
85
|
+
createSharedBranch(): string;
|
|
86
|
+
protected addBranch(branchId: BranchId): void;
|
|
87
|
+
getSharedBranch(branchId: BranchId): SharedTreeBranch<TEditor, TChange>;
|
|
80
88
|
didAttach(): void;
|
|
81
89
|
reSubmitCore(content: JsonCompatibleReadOnly, localOpMetadata: unknown): void;
|
|
82
90
|
rollback(content: JsonCompatibleReadOnly, localOpMetadata: unknown): void;
|
|
83
91
|
applyStashedOp(content: JsonCompatibleReadOnly): void;
|
|
92
|
+
protected registerSharedBranchForEditing(branchId: BranchId, enricher: ChangeEnricherReadonlyCheckout<TChange>, resubmitMachine?: ResubmitMachine<TChange>): void;
|
|
93
|
+
private getResubmitMachine;
|
|
94
|
+
private tryGetResubmitMachine;
|
|
95
|
+
getCommitEnricher(branchId: BranchId): BranchCommitEnricher<TChange>;
|
|
96
|
+
private getEnricherState;
|
|
97
|
+
private tryGetEnricherState;
|
|
84
98
|
}
|
|
85
99
|
/**
|
|
86
100
|
* Specifies the behavior of a component that puts data in a summary.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sharedTreeCore.d.ts","sourceRoot":"","sources":["../../src/shared-tree-core/sharedTreeCore.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAE5F,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AAE7F,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"sharedTreeCore.d.ts","sourceRoot":"","sources":["../../src/shared-tree-core/sharedTreeCore.ts"],"names":[],"mappings":"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"}
|
|
@@ -81,6 +81,7 @@ let SharedTreeCore = (() => {
|
|
|
81
81
|
this.sharedObject = sharedObject;
|
|
82
82
|
this.serializer = serializer;
|
|
83
83
|
this.submitLocalMessage = submitLocalMessage;
|
|
84
|
+
this.changeFamily = changeFamily;
|
|
84
85
|
this.idCompressor = idCompressor;
|
|
85
86
|
this.getEditor = getEditor;
|
|
86
87
|
/**
|
|
@@ -89,6 +90,7 @@ let SharedTreeCore = (() => {
|
|
|
89
90
|
* Is `undefined` after (and only after) this instance is attached.
|
|
90
91
|
*/
|
|
91
92
|
this.detachedRevision = editManager_js_1.minimumPossibleSequenceNumber;
|
|
93
|
+
this.enrichers = new Map();
|
|
92
94
|
this.schemaAndPolicy = {
|
|
93
95
|
schema,
|
|
94
96
|
policy: schemaPolicy,
|
|
@@ -104,18 +106,8 @@ let SharedTreeCore = (() => {
|
|
|
104
106
|
* This is used rather than the Fluid client ID because the Fluid client ID is not stable across reconnections.
|
|
105
107
|
*/
|
|
106
108
|
const localSessionId = idCompressor.localSessionId;
|
|
107
|
-
this.editManager = new editManager_js_1.EditManager(changeFamily, localSessionId, this.mintRevisionTag, rebaseLogger);
|
|
108
|
-
this.
|
|
109
|
-
if (this.detachedRevision === undefined) {
|
|
110
|
-
// Commit enrichment is only necessary for changes that will be submitted as ops, and changes issued while detached are not submitted.
|
|
111
|
-
this.commitEnricher.processChange(change);
|
|
112
|
-
}
|
|
113
|
-
if (change.type === "append") {
|
|
114
|
-
for (const commit of change.newCommits) {
|
|
115
|
-
this.submitCommit(commit, this.schemaAndPolicy, false);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
});
|
|
109
|
+
this.editManager = new editManager_js_1.EditManager(changeFamily, localSessionId, this.mintRevisionTag, (branchId) => this.registerSharedBranch(branchId), rebaseLogger);
|
|
110
|
+
this.registerSharedBranch("main");
|
|
119
111
|
const revisionTagCodec = new index_js_1.RevisionTagCodec(idCompressor);
|
|
120
112
|
const editManagerCodec = (0, editManagerCodecs_js_1.makeEditManagerCodec)(this.editManager.changeFamily.codecs, revisionTagCodec, options, formatOptions.editManager);
|
|
121
113
|
this.summarizables = [
|
|
@@ -124,11 +116,7 @@ let SharedTreeCore = (() => {
|
|
|
124
116
|
];
|
|
125
117
|
(0, internal_1.assert)(new Set(this.summarizables.map((e) => e.key)).size === this.summarizables.length, 0x350 /* Index summary element keys must be unique */);
|
|
126
118
|
this.messageCodec = (0, messageCodecs_js_1.makeMessageCodec)(changeFamily.codecs, new index_js_1.RevisionTagCodec(idCompressor), options, formatOptions.message);
|
|
127
|
-
|
|
128
|
-
this.resubmitMachine =
|
|
129
|
-
resubmitMachine ??
|
|
130
|
-
new defaultResubmitMachine_js_1.DefaultResubmitMachine((change) => changeFamily.rebaser.invert(change, true, this.mintRevisionTag()), changeEnricher);
|
|
131
|
-
this.commitEnricher = new branchCommitEnricher_js_1.BranchCommitEnricher(changeFamily.rebaser, changeEnricher);
|
|
119
|
+
this.registerSharedBranchForEditing("main", enricher ?? new changeEnricher_js_1.NoOpChangeEnricher(), resubmitMachine);
|
|
132
120
|
}
|
|
133
121
|
// TODO: SharedObject's merging of the two summary methods into summarizeCore is not what we want here:
|
|
134
122
|
// We might want to not subclass it, or override/reimplement most of its functionality.
|
|
@@ -156,7 +144,7 @@ let SharedTreeCore = (() => {
|
|
|
156
144
|
return builder.getSummaryTree();
|
|
157
145
|
}
|
|
158
146
|
async loadCore(services) {
|
|
159
|
-
(0, internal_1.assert)(this.
|
|
147
|
+
(0, internal_1.assert)(this.getLocalBranch().getHead() === this.editManager.getTrunkHead("main"), 0xaaa /* All local changes should be applied to the trunk before loading from summary */);
|
|
160
148
|
const [editManagerSummarizer, ...summarizables] = this.summarizables;
|
|
161
149
|
const loadEditManager = this.loadSummarizable(editManagerSummarizer, services);
|
|
162
150
|
const loadSummarizables = summarizables.map(async (s) => this.loadSummarizable(s, services));
|
|
@@ -164,8 +152,7 @@ let SharedTreeCore = (() => {
|
|
|
164
152
|
// If we are detached but loading from a summary, then we need to update our detached revision to ensure that it is ahead of all detached revisions in the summary.
|
|
165
153
|
// First, finish loading the edit manager so that we can inspect the sequence numbers of the commits on the trunk.
|
|
166
154
|
await loadEditManager;
|
|
167
|
-
const
|
|
168
|
-
const latestDetachedSequenceNumber = this.editManager.getSequenceNumber(head);
|
|
155
|
+
const latestDetachedSequenceNumber = this.editManager.getLatestSequenceNumber();
|
|
169
156
|
// When we load a summary for a tree that was never attached,
|
|
170
157
|
// latestDetachedSequenceNumber is either undefined (no commits in summary) or negative (all commits in summary were made while detached).
|
|
171
158
|
// We only need to update `this.detachedRevision` in the latter case.
|
|
@@ -178,6 +165,19 @@ let SharedTreeCore = (() => {
|
|
|
178
165
|
await Promise.all([loadEditManager, ...loadSummarizables]);
|
|
179
166
|
}
|
|
180
167
|
}
|
|
168
|
+
registerSharedBranch(branchId) {
|
|
169
|
+
this.editManager.getLocalBranch(branchId).events.on("beforeChange", (change) => {
|
|
170
|
+
if (change.type === "append") {
|
|
171
|
+
if (this.detachedRevision === undefined) {
|
|
172
|
+
// Commit enrichment is only necessary for changes that will be submitted as ops, and changes issued while detached are not submitted.
|
|
173
|
+
this.getCommitEnricher(branchId).processChange(change);
|
|
174
|
+
}
|
|
175
|
+
for (const commit of change.newCommits) {
|
|
176
|
+
this.submitCommit(branchId, commit, this.schemaAndPolicy, false);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
181
|
async loadSummarizable(summarizable, services) {
|
|
182
182
|
return summarizable.load(scopeStorageService(services, summarizablesTreeKey, summarizable.key), (contents) => this.serializer.parse(contents));
|
|
183
183
|
}
|
|
@@ -187,10 +187,10 @@ let SharedTreeCore = (() => {
|
|
|
187
187
|
* @returns the submitted commit. This is undefined if the underlying `SharedObject` is not attached,
|
|
188
188
|
* and may differ from `commit` due to enrichments like detached tree refreshers.
|
|
189
189
|
*/
|
|
190
|
-
submitCommit(commit, schemaAndPolicy, isResubmit) {
|
|
190
|
+
submitCommit(branchId, commit, schemaAndPolicy, isResubmit) {
|
|
191
191
|
(0, internal_1.assert)(this.sharedObject.isAttached() === (this.detachedRevision === undefined), 0x95a /* Detached revision should only be set when not attached */);
|
|
192
192
|
const enrichedCommit = this.detachedRevision === undefined && !isResubmit
|
|
193
|
-
? this.
|
|
193
|
+
? this.getCommitEnricher(branchId).enrich(commit)
|
|
194
194
|
: commit;
|
|
195
195
|
// Edits submitted before the first attach are treated as sequenced because they will be included
|
|
196
196
|
// in the attach summary that is uploaded to the service.
|
|
@@ -198,23 +198,31 @@ let SharedTreeCore = (() => {
|
|
|
198
198
|
if (this.detachedRevision !== undefined) {
|
|
199
199
|
const newRevision = (0, index_js_2.brand)(this.detachedRevision + 1);
|
|
200
200
|
this.detachedRevision = newRevision;
|
|
201
|
-
this.editManager.addSequencedChanges([enrichedCommit], this.editManager.localSessionId, newRevision, this.detachedRevision);
|
|
201
|
+
this.editManager.addSequencedChanges([enrichedCommit], this.editManager.localSessionId, newRevision, this.detachedRevision, branchId);
|
|
202
202
|
this.editManager.advanceMinimumSequenceNumber(newRevision, false);
|
|
203
203
|
return undefined;
|
|
204
204
|
}
|
|
205
|
-
|
|
205
|
+
this.submitMessage({
|
|
206
|
+
type: "commit",
|
|
206
207
|
commit: enrichedCommit,
|
|
207
208
|
sessionId: this.editManager.localSessionId,
|
|
208
|
-
|
|
209
|
+
branchId,
|
|
210
|
+
}, schemaAndPolicy);
|
|
211
|
+
this.getResubmitMachine(branchId).onCommitSubmitted(enrichedCommit);
|
|
212
|
+
}
|
|
213
|
+
submitBranchCreation(branchId) {
|
|
214
|
+
this.submitMessage({ type: "branch", sessionId: this.editManager.localSessionId, branchId }, this.schemaAndPolicy);
|
|
215
|
+
}
|
|
216
|
+
submitMessage(message, schemaAndPolicy) {
|
|
217
|
+
const encodedMessage = this.messageCodec.encode(message, {
|
|
209
218
|
idCompressor: this.idCompressor,
|
|
210
219
|
schema: schemaAndPolicy,
|
|
211
220
|
});
|
|
212
|
-
this.submitLocalMessage(
|
|
221
|
+
this.submitLocalMessage(encodedMessage, {
|
|
213
222
|
// Clone the schema to ensure that during resubmit the schema has not been mutated by later changes
|
|
214
223
|
schema: schemaAndPolicy.schema.clone(),
|
|
215
224
|
policy: schemaAndPolicy.policy,
|
|
216
225
|
});
|
|
217
|
-
this.resubmitMachine.onCommitSubmitted(enrichedCommit);
|
|
218
226
|
}
|
|
219
227
|
/**
|
|
220
228
|
* Process a bunch of messages from the runtime. SharedObject will call this method with a bunch of messages.
|
|
@@ -223,66 +231,182 @@ let SharedTreeCore = (() => {
|
|
|
223
231
|
const { envelope, local, messagesContent } = messagesCollection;
|
|
224
232
|
const commits = [];
|
|
225
233
|
let messagesSessionId;
|
|
234
|
+
let branchId;
|
|
235
|
+
const processBunch = (branch) => {
|
|
236
|
+
(0, internal_1.assert)(messagesSessionId !== undefined, 0xada /* Messages must have a session ID */);
|
|
237
|
+
this.processCommits(messagesSessionId, (0, index_js_2.brand)(envelope.sequenceNumber), (0, index_js_2.brand)(envelope.referenceSequenceNumber), local, branch, commits);
|
|
238
|
+
commits.length = 0;
|
|
239
|
+
branchId = undefined;
|
|
240
|
+
};
|
|
226
241
|
// Get a list of all the commits from the messages.
|
|
227
242
|
for (const messageContent of messagesContent) {
|
|
228
243
|
// Empty context object is passed in, as our decode function is schema-agnostic.
|
|
229
|
-
const
|
|
244
|
+
const message = this.messageCodec.decode(messageContent.contents, {
|
|
230
245
|
idCompressor: this.idCompressor,
|
|
231
246
|
});
|
|
232
|
-
commits.push(commit);
|
|
233
247
|
if (messagesSessionId !== undefined) {
|
|
234
|
-
(0, internal_1.assert)(messagesSessionId === sessionId, 0xad9 /* All messages in a bunch must have the same session ID */);
|
|
248
|
+
(0, internal_1.assert)(messagesSessionId === message.sessionId, 0xad9 /* All messages in a bunch must have the same session ID */);
|
|
249
|
+
}
|
|
250
|
+
messagesSessionId = message.sessionId;
|
|
251
|
+
const type = message.type;
|
|
252
|
+
switch (type) {
|
|
253
|
+
case "commit": {
|
|
254
|
+
if (branchId !== undefined && message.branchId !== branchId) {
|
|
255
|
+
processBunch(branchId);
|
|
256
|
+
}
|
|
257
|
+
branchId = message.branchId;
|
|
258
|
+
commits.push(message.commit);
|
|
259
|
+
break;
|
|
260
|
+
}
|
|
261
|
+
case "branch": {
|
|
262
|
+
if (branchId !== undefined) {
|
|
263
|
+
processBunch(branchId);
|
|
264
|
+
}
|
|
265
|
+
this.editManager.sequenceBranchCreation(messagesSessionId, (0, index_js_2.brand)(envelope.referenceSequenceNumber), message.branchId);
|
|
266
|
+
break;
|
|
267
|
+
}
|
|
268
|
+
default:
|
|
269
|
+
(0, internal_1.unreachableCase)(type);
|
|
235
270
|
}
|
|
236
|
-
messagesSessionId = sessionId;
|
|
237
271
|
}
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
// Update the resubmit machine for each commit applied.
|
|
241
|
-
for (const _ of messagesContent) {
|
|
242
|
-
this.resubmitMachine.onSequencedCommitApplied(local);
|
|
272
|
+
if (branchId !== undefined) {
|
|
273
|
+
processBunch(branchId);
|
|
243
274
|
}
|
|
244
275
|
this.editManager.advanceMinimumSequenceNumber((0, index_js_2.brand)(envelope.minimumSequenceNumber));
|
|
245
276
|
}
|
|
277
|
+
processCommits(sessionId, sequenceNumber, referenceSequenceNumber, isLocal, branchId, commits) {
|
|
278
|
+
this.editManager.addSequencedChanges(commits, sessionId, sequenceNumber, referenceSequenceNumber, branchId);
|
|
279
|
+
// Update the resubmit machine for each commit applied.
|
|
280
|
+
for (const _ of commits) {
|
|
281
|
+
this.tryGetResubmitMachine(branchId)?.onSequencedCommitApplied(isLocal);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
246
284
|
getLocalBranch() {
|
|
247
|
-
return this.editManager.
|
|
285
|
+
return this.editManager.getLocalBranch("main");
|
|
286
|
+
}
|
|
287
|
+
getSharedBranchIds() {
|
|
288
|
+
return this.editManager
|
|
289
|
+
.getSharedBranchIds()
|
|
290
|
+
.filter((id) => id !== "main")
|
|
291
|
+
.map((id) => this.idCompressor.decompress(id));
|
|
292
|
+
}
|
|
293
|
+
createSharedBranch() {
|
|
294
|
+
const branchId = this.idCompressor.generateCompressedId();
|
|
295
|
+
this.addBranch(branchId);
|
|
296
|
+
this.submitBranchCreation(branchId);
|
|
297
|
+
return this.idCompressor.decompress(branchId);
|
|
298
|
+
}
|
|
299
|
+
addBranch(branchId) {
|
|
300
|
+
this.editManager.addNewBranch(branchId);
|
|
301
|
+
}
|
|
302
|
+
getSharedBranch(branchId) {
|
|
303
|
+
return this.editManager.getLocalBranch(branchId);
|
|
248
304
|
}
|
|
249
305
|
didAttach() {
|
|
250
306
|
this.detachedRevision = undefined;
|
|
251
307
|
}
|
|
252
308
|
reSubmitCore(content, localOpMetadata) {
|
|
253
309
|
// Empty context object is passed in, as our decode function is schema-agnostic.
|
|
254
|
-
const
|
|
310
|
+
const message = this.messageCodec.decode(this.serializer.decode(content), {
|
|
255
311
|
idCompressor: this.idCompressor,
|
|
256
312
|
});
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
313
|
+
const type = message.type;
|
|
314
|
+
switch (type) {
|
|
315
|
+
case "commit": {
|
|
316
|
+
const { commit: { revision }, branchId, } = message;
|
|
317
|
+
const resubmitMachine = this.getResubmitMachine(branchId);
|
|
318
|
+
// If a resubmit phase is not already in progress, then this must be the first commit of a new resubmit phase.
|
|
319
|
+
if (resubmitMachine.isInResubmitPhase === false) {
|
|
320
|
+
const localCommits = this.editManager.getLocalCommits(branchId);
|
|
321
|
+
const revisionIndex = localCommits.findIndex((c) => c.revision === revision);
|
|
322
|
+
(0, internal_1.assert)(revisionIndex >= 0, 0xbdb /* revision must exist in local commits */);
|
|
323
|
+
const toResubmit = localCommits.slice(revisionIndex);
|
|
324
|
+
resubmitMachine.prepareForResubmit(toResubmit);
|
|
325
|
+
}
|
|
326
|
+
(0, internal_1.assert)(isClonableSchemaPolicy(localOpMetadata), 0x95e /* Local metadata must contain schema and policy. */);
|
|
327
|
+
(0, internal_1.assert)(resubmitMachine.isInResubmitPhase !== false, 0x984 /* Invalid resubmit outside of resubmit phase */);
|
|
328
|
+
const enrichedCommit = resubmitMachine.peekNextCommit();
|
|
329
|
+
this.submitCommit(branchId, enrichedCommit, localOpMetadata, true);
|
|
330
|
+
break;
|
|
331
|
+
}
|
|
332
|
+
case "branch": {
|
|
333
|
+
this.submitBranchCreation(message.branchId);
|
|
334
|
+
break;
|
|
335
|
+
}
|
|
336
|
+
default:
|
|
337
|
+
(0, internal_1.unreachableCase)(type);
|
|
264
338
|
}
|
|
265
|
-
(0, internal_1.assert)(isClonableSchemaPolicy(localOpMetadata), 0x95e /* Local metadata must contain schema and policy. */);
|
|
266
|
-
(0, internal_1.assert)(this.resubmitMachine.isInResubmitPhase !== false, 0x984 /* Invalid resubmit outside of resubmit phase */);
|
|
267
|
-
const enrichedCommit = this.resubmitMachine.peekNextCommit();
|
|
268
|
-
this.submitCommit(enrichedCommit, localOpMetadata, true);
|
|
269
339
|
}
|
|
270
340
|
rollback(content, localOpMetadata) {
|
|
271
341
|
// Empty context object is passed in, as our decode function is schema-agnostic.
|
|
272
|
-
const
|
|
342
|
+
const message = this.messageCodec.decode(this.serializer.decode(content), {
|
|
273
343
|
idCompressor: this.idCompressor,
|
|
274
344
|
});
|
|
275
|
-
const
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
345
|
+
const type = message.type;
|
|
346
|
+
switch (type) {
|
|
347
|
+
case "commit": {
|
|
348
|
+
const { commit: { revision }, branchId, } = message;
|
|
349
|
+
const branch = this.editManager.getLocalBranch(branchId);
|
|
350
|
+
const head = branch.getHead();
|
|
351
|
+
(0, internal_1.assert)(head.revision === revision, 0xc6b /* Can only rollback latest commit */);
|
|
352
|
+
const newHead = head.parent ?? (0, internal_1.fail)(0xc6c /* must have parent */);
|
|
353
|
+
branch.removeAfter(newHead);
|
|
354
|
+
this.getResubmitMachine(branchId).onCommitRollback(head);
|
|
355
|
+
break;
|
|
356
|
+
}
|
|
357
|
+
case "branch": {
|
|
358
|
+
this.editManager.removeBranch(message.branchId);
|
|
359
|
+
break;
|
|
360
|
+
}
|
|
361
|
+
default:
|
|
362
|
+
(0, internal_1.unreachableCase)(type);
|
|
363
|
+
}
|
|
281
364
|
}
|
|
282
365
|
applyStashedOp(content) {
|
|
283
366
|
// Empty context object is passed in, as our decode function is schema-agnostic.
|
|
284
|
-
const
|
|
285
|
-
|
|
367
|
+
const message = this.messageCodec.decode(this.serializer.decode(content), {
|
|
368
|
+
idCompressor: this.idCompressor,
|
|
369
|
+
});
|
|
370
|
+
const type = message.type;
|
|
371
|
+
switch (type) {
|
|
372
|
+
case "commit": {
|
|
373
|
+
const { commit: { revision, change }, branchId, } = message;
|
|
374
|
+
this.editManager.getLocalBranch(branchId).apply({ change, revision });
|
|
375
|
+
break;
|
|
376
|
+
}
|
|
377
|
+
case "branch": {
|
|
378
|
+
this.editManager.addNewBranch(message.branchId);
|
|
379
|
+
break;
|
|
380
|
+
}
|
|
381
|
+
default:
|
|
382
|
+
(0, internal_1.unreachableCase)(type);
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
registerSharedBranchForEditing(branchId, enricher, resubmitMachine) {
|
|
386
|
+
const changeEnricher = enricher ?? new changeEnricher_js_1.NoOpChangeEnricher();
|
|
387
|
+
const commitEnricher = new branchCommitEnricher_js_1.BranchCommitEnricher(this.changeFamily.rebaser, changeEnricher);
|
|
388
|
+
(0, internal_1.assert)(!this.enrichers.has(branchId), 0xc6d /* Branch already registered */);
|
|
389
|
+
this.enrichers.set(branchId, {
|
|
390
|
+
enricher: commitEnricher,
|
|
391
|
+
resubmitMachine: resubmitMachine ??
|
|
392
|
+
new defaultResubmitMachine_js_1.DefaultResubmitMachine((change) => this.changeFamily.rebaser.invert(change, true, this.mintRevisionTag()), changeEnricher),
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
getResubmitMachine(branchId) {
|
|
396
|
+
return this.getEnricherState(branchId).resubmitMachine;
|
|
397
|
+
}
|
|
398
|
+
tryGetResubmitMachine(branchId) {
|
|
399
|
+
return this.tryGetEnricherState(branchId)?.resubmitMachine;
|
|
400
|
+
}
|
|
401
|
+
getCommitEnricher(branchId) {
|
|
402
|
+
return this.getEnricherState(branchId).enricher;
|
|
403
|
+
}
|
|
404
|
+
getEnricherState(branchId) {
|
|
405
|
+
return (this.tryGetEnricherState(branchId) ??
|
|
406
|
+
(0, internal_1.fail)(0xc6e /* Expected to have a resubmit machine for this branch */));
|
|
407
|
+
}
|
|
408
|
+
tryGetEnricherState(branchId) {
|
|
409
|
+
return this.enrichers.get(branchId);
|
|
286
410
|
}
|
|
287
411
|
};
|
|
288
412
|
__setFunctionName(_classThis, "SharedTreeCore");
|