@fluidframework/tree 2.103.0 → 2.111.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/.vscode/settings.json +1 -0
- package/CHANGELOG.md +109 -0
- package/api-report/tree.alpha.api.md +60 -34
- package/api-report/tree.beta.api.md +49 -3
- package/api-report/tree.legacy.beta.api.md +49 -3
- package/dist/codec/versioned/format.js +2 -24
- package/dist/codec/versioned/format.js.map +1 -1
- package/dist/core/change-family/changeFamily.d.ts +3 -10
- package/dist/core/change-family/changeFamily.d.ts.map +1 -1
- package/dist/core/change-family/changeFamily.js.map +1 -1
- package/dist/core/rebase/types.d.ts +2 -2
- package/dist/core/rebase/types.js +2 -24
- package/dist/core/rebase/types.js.map +1 -1
- package/dist/core/schema-stored/formatV1.js +2 -24
- package/dist/core/schema-stored/formatV1.js.map +1 -1
- package/dist/core/schema-stored/formatV2.js +2 -24
- package/dist/core/schema-stored/formatV2.js.map +1 -1
- package/dist/core/schema-stored/index.js +3 -25
- package/dist/core/schema-stored/index.js.map +1 -1
- package/dist/core/schema-stored/storedSchemaRepository.d.ts +2 -2
- package/dist/core/schema-stored/storedSchemaRepository.js.map +1 -1
- package/dist/core/tree/anchorSet.js +4 -8
- package/dist/core/tree/anchorSet.js.map +1 -1
- package/dist/core/tree/detachedFieldIndexFormatCommon.js +2 -24
- package/dist/core/tree/detachedFieldIndexFormatCommon.js.map +1 -1
- package/dist/core/tree/detachedFieldIndexFormatV2.js +2 -24
- package/dist/core/tree/detachedFieldIndexFormatV2.js.map +1 -1
- package/dist/core/tree/persistedTreeTextFormat.js +2 -24
- package/dist/core/tree/persistedTreeTextFormat.js.map +1 -1
- package/dist/entrypoints/alpha.d.ts +1 -1
- package/dist/entrypoints/alpha.d.ts.map +1 -1
- package/dist/entrypoints/alpha.js.map +1 -1
- package/dist/entrypoints/beta.d.ts +1 -1
- package/dist/entrypoints/beta.d.ts.map +1 -1
- package/dist/entrypoints/beta.js.map +1 -1
- package/dist/entrypoints/internal.js +2 -15
- package/dist/entrypoints/internal.js.map +1 -1
- package/dist/entrypoints/legacy.d.ts +1 -1
- package/dist/entrypoints/legacy.d.ts.map +1 -1
- package/dist/entrypoints/legacy.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkedForest.js +7 -11
- package/dist/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +19 -14
- package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js +13 -32
- package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts +85 -28
- package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/codecs.js +83 -9
- package/dist/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +4 -2
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js +11 -0
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/format/formatGeneric.js +2 -24
- package/dist/feature-libraries/chunked-forest/codec/format/formatGeneric.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/format/formatV1.js +2 -24
- package/dist/feature-libraries/chunked-forest/codec/format/formatV1.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/format/formatV2.js +2 -24
- package/dist/feature-libraries/chunked-forest/codec/format/formatV2.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/format/formatVText.js +2 -24
- package/dist/feature-libraries/chunked-forest/codec/format/formatVText.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/index.d.ts +1 -1
- package/dist/feature-libraries/chunked-forest/codec/index.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/index.js +2 -1
- package/dist/feature-libraries/chunked-forest/codec/index.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts +1 -1
- package/dist/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/nodeEncoder.js +3 -15
- package/dist/feature-libraries/chunked-forest/codec/nodeEncoder.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/index.d.ts +1 -1
- package/dist/feature-libraries/chunked-forest/index.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/index.js +2 -1
- package/dist/feature-libraries/chunked-forest/index.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyEntity.js +9 -19
- package/dist/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyNode.js +3 -13
- package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
- package/dist/feature-libraries/forest-summary/codec.d.ts +3 -3
- package/dist/feature-libraries/forest-summary/codec.d.ts.map +1 -1
- package/dist/feature-libraries/forest-summary/codec.js.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts +3 -2
- package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.js +4 -6
- package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/dist/feature-libraries/forest-summary/formatCommon.js +2 -24
- package/dist/feature-libraries/forest-summary/formatCommon.js.map +1 -1
- package/dist/feature-libraries/index.d.ts +1 -1
- package/dist/feature-libraries/index.d.ts.map +1 -1
- package/dist/feature-libraries/index.js +4 -25
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/modular-schema/genericFieldKindFormat.js +2 -24
- package/dist/feature-libraries/modular-schema/genericFieldKindFormat.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js +9 -9
- package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js +10 -30
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFormatV1.js +2 -24
- package/dist/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFormatV2.js +2 -24
- package/dist/feature-libraries/modular-schema/modularChangeFormatV2.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts +0 -5
- package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
- package/dist/feature-libraries/object-forest/objectForest.js +11 -55
- package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV1.js +2 -24
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV1.js.map +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV2.js +2 -24
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV2.js.map +1 -1
- package/dist/feature-libraries/schema-edits/schemaChangeFormat.js +2 -24
- package/dist/feature-libraries/schema-edits/schemaChangeFormat.js.map +1 -1
- package/dist/feature-libraries/schema-index/formatV1.js +2 -24
- package/dist/feature-libraries/schema-index/formatV1.js.map +1 -1
- package/dist/feature-libraries/schema-index/formatV2.js +2 -24
- package/dist/feature-libraries/schema-index/formatV2.js.map +1 -1
- package/dist/feature-libraries/sequence-field/formatV1.js +2 -24
- package/dist/feature-libraries/sequence-field/formatV1.js.map +1 -1
- package/dist/feature-libraries/sequence-field/formatV2.js +2 -24
- package/dist/feature-libraries/sequence-field/formatV2.js.map +1 -1
- package/dist/feature-libraries/sequence-field/formatV3.js +2 -24
- package/dist/feature-libraries/sequence-field/formatV3.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -25
- package/dist/index.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/shared-tree/independentView.d.ts.map +1 -1
- package/dist/shared-tree/independentView.js +4 -7
- package/dist/shared-tree/independentView.js.map +1 -1
- package/dist/shared-tree/index.d.ts +1 -1
- package/dist/shared-tree/index.d.ts.map +1 -1
- package/dist/shared-tree/index.js.map +1 -1
- package/dist/shared-tree/schematizingTreeView.d.ts +6 -5
- package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +7 -41
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree/sharedTree.d.ts +5 -1
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +13 -49
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/sharedTreeChangeFormat.js +2 -24
- package/dist/shared-tree/sharedTreeChangeFormat.js.map +1 -1
- package/dist/shared-tree/transactionPostProcessor.d.ts +28 -0
- package/dist/shared-tree/transactionPostProcessor.d.ts.map +1 -0
- package/dist/shared-tree/transactionPostProcessor.js +28 -0
- package/dist/shared-tree/transactionPostProcessor.js.map +1 -0
- package/dist/shared-tree/treeAlpha.js +3 -3
- package/dist/shared-tree/treeAlpha.js.map +1 -1
- package/dist/shared-tree/treeCheckout.d.ts +28 -15
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +124 -145
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree/unhydratedTreeContext.d.ts +5 -5
- package/dist/shared-tree/unhydratedTreeContext.d.ts.map +1 -1
- package/dist/shared-tree/unhydratedTreeContext.js.map +1 -1
- package/dist/shared-tree-core/branch.js +13 -17
- package/dist/shared-tree-core/branch.js.map +1 -1
- package/dist/shared-tree-core/editManagerCodecs.d.ts +3 -2
- package/dist/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerCodecs.js.map +1 -1
- package/dist/shared-tree-core/editManagerCodecsCommons.d.ts +3 -9
- package/dist/shared-tree-core/editManagerCodecsCommons.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerCodecsCommons.js +2 -4
- package/dist/shared-tree-core/editManagerCodecsCommons.js.map +1 -1
- package/dist/shared-tree-core/editManagerCodecsV1toV4.d.ts +3 -3
- package/dist/shared-tree-core/editManagerCodecsV1toV4.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerCodecsV1toV4.js.map +1 -1
- package/dist/shared-tree-core/editManagerCodecsVSharedBranches.d.ts +3 -3
- package/dist/shared-tree-core/editManagerCodecsVSharedBranches.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerCodecsVSharedBranches.js.map +1 -1
- package/dist/shared-tree-core/editManagerFormatCommons.js +2 -24
- package/dist/shared-tree-core/editManagerFormatCommons.js.map +1 -1
- package/dist/shared-tree-core/editManagerFormatV1toV4.js +2 -24
- package/dist/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
- package/dist/shared-tree-core/editManagerFormatVSharedBranches.js +2 -24
- package/dist/shared-tree-core/editManagerFormatVSharedBranches.js.map +1 -1
- package/dist/shared-tree-core/editManagerSummarizer.d.ts +5 -9
- package/dist/shared-tree-core/editManagerSummarizer.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerSummarizer.js +5 -10
- package/dist/shared-tree-core/editManagerSummarizer.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 +3 -2
- package/dist/shared-tree-core/index.js.map +1 -1
- package/dist/shared-tree-core/messageCodecVSharedBranches.js +2 -24
- package/dist/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
- package/dist/shared-tree-core/messageFormatV1ToV4.js +2 -24
- package/dist/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
- package/dist/shared-tree-core/messageFormatVSharedBranches.js +2 -24
- package/dist/shared-tree-core/messageFormatVSharedBranches.js.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.js +9 -44
- package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/dist/shared-tree-core/transaction.d.ts +84 -9
- package/dist/shared-tree-core/transaction.d.ts.map +1 -1
- package/dist/shared-tree-core/transaction.js +94 -37
- package/dist/shared-tree-core/transaction.js.map +1 -1
- package/dist/simple-tree/api/index.d.ts +1 -1
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js.map +1 -1
- package/dist/simple-tree/api/schemaCreationUtilities.d.ts +3 -3
- package/dist/simple-tree/api/schemaCreationUtilities.js +3 -3
- package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
- package/dist/simple-tree/api/schemaFactory.d.ts +1 -1
- package/dist/simple-tree/api/schemaFactory.js +2 -2
- package/dist/simple-tree/api/schemaFactory.js.map +1 -1
- package/dist/simple-tree/api/simpleSchemaCodec.js +2 -24
- package/dist/simple-tree/api/simpleSchemaCodec.js.map +1 -1
- package/dist/simple-tree/api/snapshotCompatibilityChecker.d.ts +2 -2
- package/dist/simple-tree/api/snapshotCompatibilityChecker.js +4 -26
- package/dist/simple-tree/api/snapshotCompatibilityChecker.js.map +1 -1
- package/dist/simple-tree/api/transactionTypes.d.ts +91 -28
- package/dist/simple-tree/api/transactionTypes.d.ts.map +1 -1
- package/dist/simple-tree/api/transactionTypes.js.map +1 -1
- package/dist/simple-tree/api/tree.d.ts +96 -22
- 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/treeBeta.d.ts.map +1 -1
- package/dist/simple-tree/api/treeBeta.js.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js +83 -93
- package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.d.ts +7 -7
- package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/dist/simple-tree/core/unhydratedFlexTree.js +6 -10
- 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.map +1 -1
- package/dist/simple-tree/leafNodeSchema.js +2 -12
- package/dist/simple-tree/leafNodeSchema.js.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.js +2 -6
- package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/dist/simple-tree/simpleSchemaFormatV1.js +2 -24
- package/dist/simple-tree/simpleSchemaFormatV1.js.map +1 -1
- package/dist/tableSchema.d.ts +50 -4
- package/dist/tableSchema.d.ts.map +1 -1
- package/dist/tableSchema.js +202 -106
- package/dist/tableSchema.js.map +1 -1
- package/dist/text/index.d.ts +1 -0
- package/dist/text/index.d.ts.map +1 -1
- package/dist/text/index.js +3 -1
- package/dist/text/index.js.map +1 -1
- package/dist/text/textDomainFormatted.d.ts +69 -758
- package/dist/text/textDomainFormatted.d.ts.map +1 -1
- package/dist/text/textDomainFormatted.js +275 -322
- package/dist/text/textDomainFormatted.js.map +1 -1
- package/dist/text/textDomainFormattedDefault.d.ts +273 -0
- package/dist/text/textDomainFormattedDefault.d.ts.map +1 -0
- package/dist/text/textDomainFormattedDefault.js +94 -0
- package/dist/text/textDomainFormattedDefault.js.map +1 -0
- package/dist/util/arrayUtilities.d.ts +20 -0
- package/dist/util/arrayUtilities.d.ts.map +1 -1
- package/dist/util/arrayUtilities.js +24 -1
- package/dist/util/arrayUtilities.js.map +1 -1
- package/dist/util/compressedIds.d.ts +118 -0
- package/dist/util/compressedIds.d.ts.map +1 -0
- package/dist/util/compressedIds.js +133 -0
- package/dist/util/compressedIds.js.map +1 -0
- package/dist/util/index.d.ts +2 -1
- package/dist/util/index.d.ts.map +1 -1
- package/dist/util/index.js +11 -2
- package/dist/util/index.js.map +1 -1
- package/dist/util/rangeMap.d.ts +13 -0
- package/dist/util/rangeMap.d.ts.map +1 -1
- package/dist/util/rangeMap.js +69 -8
- package/dist/util/rangeMap.js.map +1 -1
- package/dist/util/typeboxBrand.js +2 -24
- package/dist/util/typeboxBrand.js.map +1 -1
- package/dist/util/utils.js +2 -24
- package/dist/util/utils.js.map +1 -1
- package/eslint.config.mts +0 -30
- package/lib/core/change-family/changeFamily.d.ts +3 -10
- package/lib/core/change-family/changeFamily.d.ts.map +1 -1
- package/lib/core/change-family/changeFamily.js.map +1 -1
- package/lib/core/rebase/types.d.ts +2 -2
- package/lib/core/rebase/types.js.map +1 -1
- package/lib/core/schema-stored/storedSchemaRepository.d.ts +2 -2
- package/lib/core/schema-stored/storedSchemaRepository.js.map +1 -1
- package/lib/core/tree/anchorSet.js +1 -5
- package/lib/core/tree/anchorSet.js.map +1 -1
- package/lib/entrypoints/alpha.d.ts +1 -1
- package/lib/entrypoints/alpha.d.ts.map +1 -1
- package/lib/entrypoints/alpha.js.map +1 -1
- package/lib/entrypoints/beta.d.ts +1 -1
- package/lib/entrypoints/beta.d.ts.map +1 -1
- package/lib/entrypoints/beta.js.map +1 -1
- package/lib/entrypoints/legacy.d.ts +1 -1
- package/lib/entrypoints/legacy.d.ts.map +1 -1
- package/lib/entrypoints/legacy.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkedForest.js +1 -5
- package/lib/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +19 -14
- package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js +14 -33
- package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts +85 -28
- package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/codecs.js +82 -9
- package/lib/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +4 -2
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js +12 -1
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/index.d.ts +1 -1
- package/lib/feature-libraries/chunked-forest/codec/index.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/index.js +1 -1
- package/lib/feature-libraries/chunked-forest/codec/index.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts +1 -1
- package/lib/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/nodeEncoder.js +3 -15
- package/lib/feature-libraries/chunked-forest/codec/nodeEncoder.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/index.d.ts +1 -1
- package/lib/feature-libraries/chunked-forest/index.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/index.js +1 -1
- package/lib/feature-libraries/chunked-forest/index.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyEntity.js +1 -11
- package/lib/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyNode.js +1 -11
- package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
- package/lib/feature-libraries/forest-summary/codec.d.ts +3 -3
- package/lib/feature-libraries/forest-summary/codec.d.ts.map +1 -1
- package/lib/feature-libraries/forest-summary/codec.js.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts +3 -2
- package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.js +4 -6
- package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/lib/feature-libraries/index.d.ts +1 -1
- package/lib/feature-libraries/index.d.ts.map +1 -1
- package/lib/feature-libraries/index.js +1 -1
- package/lib/feature-libraries/index.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js +10 -10
- package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js +10 -30
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts +0 -5
- package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
- package/lib/feature-libraries/object-forest/objectForest.js +1 -45
- package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
- package/lib/index.d.ts +2 -2
- 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.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/shared-tree/independentView.d.ts.map +1 -1
- package/lib/shared-tree/independentView.js +5 -8
- package/lib/shared-tree/independentView.js.map +1 -1
- package/lib/shared-tree/index.d.ts +1 -1
- package/lib/shared-tree/index.d.ts.map +1 -1
- package/lib/shared-tree/index.js.map +1 -1
- package/lib/shared-tree/schematizingTreeView.d.ts +6 -5
- package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +4 -38
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/shared-tree/sharedTree.d.ts +5 -1
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +9 -45
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/transactionPostProcessor.d.ts +28 -0
- package/lib/shared-tree/transactionPostProcessor.d.ts.map +1 -0
- package/lib/shared-tree/transactionPostProcessor.js +23 -0
- package/lib/shared-tree/transactionPostProcessor.js.map +1 -0
- package/lib/shared-tree/treeAlpha.js +3 -3
- package/lib/shared-tree/treeAlpha.js.map +1 -1
- package/lib/shared-tree/treeCheckout.d.ts +28 -15
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +80 -101
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree/unhydratedTreeContext.d.ts +5 -5
- package/lib/shared-tree/unhydratedTreeContext.d.ts.map +1 -1
- package/lib/shared-tree/unhydratedTreeContext.js.map +1 -1
- package/lib/shared-tree-core/branch.js +1 -5
- package/lib/shared-tree-core/branch.js.map +1 -1
- package/lib/shared-tree-core/editManagerCodecs.d.ts +3 -2
- package/lib/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerCodecs.js.map +1 -1
- package/lib/shared-tree-core/editManagerCodecsCommons.d.ts +3 -9
- package/lib/shared-tree-core/editManagerCodecsCommons.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerCodecsCommons.js +3 -5
- package/lib/shared-tree-core/editManagerCodecsCommons.js.map +1 -1
- package/lib/shared-tree-core/editManagerCodecsV1toV4.d.ts +3 -3
- package/lib/shared-tree-core/editManagerCodecsV1toV4.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerCodecsV1toV4.js.map +1 -1
- package/lib/shared-tree-core/editManagerCodecsVSharedBranches.d.ts +3 -3
- package/lib/shared-tree-core/editManagerCodecsVSharedBranches.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerCodecsVSharedBranches.js.map +1 -1
- package/lib/shared-tree-core/editManagerSummarizer.d.ts +5 -9
- package/lib/shared-tree-core/editManagerSummarizer.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerSummarizer.js +5 -10
- package/lib/shared-tree-core/editManagerSummarizer.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.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.js +4 -39
- package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/lib/shared-tree-core/transaction.d.ts +84 -9
- package/lib/shared-tree-core/transaction.d.ts.map +1 -1
- package/lib/shared-tree-core/transaction.js +74 -17
- package/lib/shared-tree-core/transaction.js.map +1 -1
- package/lib/simple-tree/api/index.d.ts +1 -1
- package/lib/simple-tree/api/index.d.ts.map +1 -1
- package/lib/simple-tree/api/index.js.map +1 -1
- package/lib/simple-tree/api/schemaCreationUtilities.d.ts +3 -3
- package/lib/simple-tree/api/schemaCreationUtilities.js +3 -3
- package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
- package/lib/simple-tree/api/schemaFactory.d.ts +1 -1
- package/lib/simple-tree/api/schemaFactory.js +2 -2
- package/lib/simple-tree/api/schemaFactory.js.map +1 -1
- package/lib/simple-tree/api/snapshotCompatibilityChecker.d.ts +2 -2
- package/lib/simple-tree/api/snapshotCompatibilityChecker.js +2 -2
- package/lib/simple-tree/api/snapshotCompatibilityChecker.js.map +1 -1
- package/lib/simple-tree/api/transactionTypes.d.ts +91 -28
- package/lib/simple-tree/api/transactionTypes.d.ts.map +1 -1
- package/lib/simple-tree/api/transactionTypes.js.map +1 -1
- package/lib/simple-tree/api/tree.d.ts +96 -22
- 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/treeBeta.d.ts.map +1 -1
- package/lib/simple-tree/api/treeBeta.js.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js +1 -11
- package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.d.ts +7 -7
- package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.js +1 -5
- 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.map +1 -1
- package/lib/simple-tree/leafNodeSchema.js +1 -11
- package/lib/simple-tree/leafNodeSchema.js.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.js +1 -5
- package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/lib/tableSchema.d.ts +50 -4
- package/lib/tableSchema.d.ts.map +1 -1
- package/lib/tableSchema.js +171 -75
- package/lib/tableSchema.js.map +1 -1
- package/lib/text/index.d.ts +1 -0
- package/lib/text/index.d.ts.map +1 -1
- package/lib/text/index.js +1 -0
- package/lib/text/index.js.map +1 -1
- package/lib/text/textDomainFormatted.d.ts +69 -758
- package/lib/text/textDomainFormatted.d.ts.map +1 -1
- package/lib/text/textDomainFormatted.js +277 -324
- package/lib/text/textDomainFormatted.js.map +1 -1
- package/lib/text/textDomainFormattedDefault.d.ts +273 -0
- package/lib/text/textDomainFormattedDefault.d.ts.map +1 -0
- package/lib/text/textDomainFormattedDefault.js +91 -0
- package/lib/text/textDomainFormattedDefault.js.map +1 -0
- package/lib/util/arrayUtilities.d.ts +20 -0
- package/lib/util/arrayUtilities.d.ts.map +1 -1
- package/lib/util/arrayUtilities.js +22 -0
- package/lib/util/arrayUtilities.js.map +1 -1
- package/lib/util/compressedIds.d.ts +118 -0
- package/lib/util/compressedIds.d.ts.map +1 -0
- package/lib/util/compressedIds.js +124 -0
- package/lib/util/compressedIds.js.map +1 -0
- package/lib/util/index.d.ts +2 -1
- package/lib/util/index.d.ts.map +1 -1
- package/lib/util/index.js +2 -1
- package/lib/util/index.js.map +1 -1
- package/lib/util/rangeMap.d.ts +13 -0
- package/lib/util/rangeMap.d.ts.map +1 -1
- package/lib/util/rangeMap.js +69 -8
- package/lib/util/rangeMap.js.map +1 -1
- package/package.json +25 -24
- package/src/core/change-family/changeFamily.ts +3 -12
- package/src/core/rebase/types.ts +2 -2
- package/src/core/schema-stored/storedSchemaRepository.ts +2 -2
- package/src/entrypoints/alpha.ts +12 -8
- package/src/entrypoints/beta.ts +8 -0
- package/src/entrypoints/legacy.ts +8 -0
- package/src/feature-libraries/chunked-forest/codec/chunkDecoding.ts +35 -64
- package/src/feature-libraries/chunked-forest/codec/codecs.ts +138 -42
- package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +32 -4
- package/src/feature-libraries/chunked-forest/codec/index.ts +1 -0
- package/src/feature-libraries/chunked-forest/codec/nodeEncoder.ts +7 -19
- package/src/feature-libraries/chunked-forest/index.ts +3 -0
- package/src/feature-libraries/forest-summary/codec.ts +5 -3
- package/src/feature-libraries/forest-summary/forestSummarizer.ts +4 -5
- package/src/feature-libraries/index.ts +3 -0
- package/src/feature-libraries/modular-schema/modularChangeCodecV1.ts +13 -9
- package/src/feature-libraries/modular-schema/modularChangeFamily.ts +14 -47
- package/src/feature-libraries/modular-schema/modularChangeTypes.ts +0 -5
- package/src/index.ts +13 -8
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/independentView.ts +5 -10
- package/src/shared-tree/index.ts +1 -0
- package/src/shared-tree/schematizingTreeView.ts +29 -25
- package/src/shared-tree/sharedTree.ts +18 -10
- package/src/shared-tree/transactionPostProcessor.ts +40 -0
- package/src/shared-tree/treeAlpha.ts +3 -3
- package/src/shared-tree/treeCheckout.ts +120 -95
- package/src/shared-tree/unhydratedTreeContext.ts +18 -15
- package/src/shared-tree-core/editManagerCodecs.ts +3 -2
- package/src/shared-tree-core/editManagerCodecsCommons.ts +10 -14
- package/src/shared-tree-core/editManagerCodecsV1toV4.ts +3 -2
- package/src/shared-tree-core/editManagerCodecsVSharedBranches.ts +3 -2
- package/src/shared-tree-core/editManagerSummarizer.ts +5 -9
- package/src/shared-tree-core/index.ts +8 -5
- package/src/shared-tree-core/sharedTreeCore.ts +3 -2
- package/src/shared-tree-core/transaction.ts +148 -18
- package/src/simple-tree/api/index.ts +13 -9
- package/src/simple-tree/api/schemaCreationUtilities.ts +3 -3
- package/src/simple-tree/api/schemaFactory.ts +2 -2
- package/src/simple-tree/api/snapshotCompatibilityChecker.ts +2 -2
- package/src/simple-tree/api/transactionTypes.ts +111 -39
- package/src/simple-tree/api/tree.ts +152 -47
- package/src/simple-tree/api/treeBeta.ts +2 -0
- package/src/simple-tree/core/treeNodeSchema.ts +7 -7
- package/src/simple-tree/index.ts +12 -8
- package/src/tableSchema.ts +306 -80
- package/src/text/index.ts +1 -0
- package/src/text/textDomainFormatted.ts +520 -415
- package/src/text/textDomainFormattedDefault.ts +150 -0
- package/src/util/arrayUtilities.ts +35 -0
- package/src/util/compressedIds.ts +216 -0
- package/src/util/index.ts +17 -0
- package/src/util/rangeMap.ts +108 -9
- package/tsconfig.json +5 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shared-tree-core/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,gBAAgB,EAChB,gBAAgB,GAIhB,MAAM,aAAa,CAAC;AAErB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shared-tree-core/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,gBAAgB,EAChB,gBAAgB,GAIhB,MAAM,aAAa,CAAC;AAErB,OAAO,EAON,4BAA4B,EAC5B,yBAAyB,EACzB,iBAAiB,EACjB,gBAAgB,GAChB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACN,cAAc,GAId,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,8BAA8B,EAK9B,wBAAwB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAIrE,OAAO,EACN,2BAA2B,EAC3B,0CAA0C,EAC1C,oBAAoB,GACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACN,wBAAwB,EACxB,kCAAkC,GAClC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EACN,WAAW,EACX,6BAA6B,GAG7B,MAAM,kBAAkB,CAAC;AAU1B,OAAO,EACN,sCAAsC,EACtC,uBAAuB,EACvB,gBAAgB,GAEhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACN,oBAAoB,EACpB,8BAA8B,GAC9B,MAAM,oBAAoB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport {\n\tonForkTransitive,\n\tSharedTreeBranch,\n\ttype SharedTreeBranchChange,\n\ttype SharedTreeBranchEvents,\n\ttype BranchId,\n} from \"./branch.js\";\n\nexport {\n\ttype ChangeProcessor,\n\ttype OnPop,\n\ttype OnPush,\n\ttype SquashingTransactionOptions,\n\ttype TransactionEvents,\n\ttype Transactor,\n\tChangeProcessorApplicability,\n\tSquashingTransactionStack,\n\tTransactionResult,\n\tTransactionStack,\n} from \"./transaction.js\";\n\nexport {\n\tSharedTreeCore,\n\ttype ClonableSchemaAndPolicy,\n\ttype SharedTreeCoreOptionsInternal,\n\ttype EnrichmentConfig,\n} from \"./sharedTreeCore.js\";\nexport {\n\tSharedTreeSummaryFormatVersion,\n\ttype SharedTreeSummarizableMetadata,\n\ttype Summarizable,\n\ttype SummaryElementParser,\n\ttype SummaryElementStringifier,\n\tsummarizablesMetadataKey,\n} from \"./summaryTypes.js\";\nexport { VersionedSummarizer } from \"./versionedSummarizer.js\";\n\nexport type { ResubmitMachine } from \"./resubmitMachine.js\";\nexport { DefaultResubmitMachine } from \"./defaultResubmitMachine.js\";\n\nexport { type ChangeEnricher } from \"./changeEnricher.js\";\n\nexport {\n\tmakeEditManagerCodecBuilder,\n\tgetCodecTreeForEditManagerFormatWithChange,\n\teditManagerCodecName,\n} from \"./editManagerCodecs.js\";\nexport {\n\tEditManagerFormatVersion,\n\tsupportedEditManagerFormatVersions,\n} from \"./editManagerFormatCommons.js\";\nexport { EditManagerSummarizer } from \"./editManagerSummarizer.js\";\nexport {\n\tEditManager,\n\tminimumPossibleSequenceNumber,\n\ttype SummaryData,\n\ttype SharedBranchSummaryData,\n} from \"./editManager.js\";\nexport type {\n\tCommit,\n\tSeqNumber,\n\tSequencedCommit,\n\tSummarySessionBranch,\n\tEncodedCommit,\n} from \"./editManagerFormatCommons.js\";\n\nexport type { DecodedMessage } from \"./messageTypes.js\";\nexport {\n\tgetCodecTreeForMessageFormatWithChange,\n\tmakeMessageCodecBuilder,\n\tmessageCodecName,\n\ttype MessageEncodingContext,\n} from \"./messageCodecs.js\";\nexport {\n\tMessageFormatVersion,\n\tsupportedMessageFormatVersions,\n} from \"./messageFormat.js\";\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sharedTreeCore.d.ts","sourceRoot":"","sources":["../../src/shared-tree-core/sharedTreeCore.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sharedTreeCore.d.ts","sourceRoot":"","sources":["../../src/shared-tree-core/sharedTreeCore.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,44 +2,7 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
-
|
|
6
|
-
var useValue = arguments.length > 2;
|
|
7
|
-
for (var i = 0; i < initializers.length; i++) {
|
|
8
|
-
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
9
|
-
}
|
|
10
|
-
return useValue ? value : void 0;
|
|
11
|
-
};
|
|
12
|
-
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
13
|
-
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
14
|
-
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
15
|
-
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
16
|
-
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
17
|
-
var _, done = false;
|
|
18
|
-
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
19
|
-
var context = {};
|
|
20
|
-
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
21
|
-
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
22
|
-
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
23
|
-
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
24
|
-
if (kind === "accessor") {
|
|
25
|
-
if (result === void 0) continue;
|
|
26
|
-
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
27
|
-
if (_ = accept(result.get)) descriptor.get = _;
|
|
28
|
-
if (_ = accept(result.set)) descriptor.set = _;
|
|
29
|
-
if (_ = accept(result.init)) initializers.unshift(_);
|
|
30
|
-
}
|
|
31
|
-
else if (_ = accept(result)) {
|
|
32
|
-
if (kind === "field") initializers.unshift(_);
|
|
33
|
-
else descriptor[key] = _;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
37
|
-
done = true;
|
|
38
|
-
};
|
|
39
|
-
var __setFunctionName = (this && this.__setFunctionName) || function (f, name, prefix) {
|
|
40
|
-
if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
|
|
41
|
-
return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
|
|
42
|
-
};
|
|
5
|
+
import { __esDecorate, __runInitializers, __setFunctionName } from "tslib";
|
|
43
6
|
import { assert, fail, unreachableCase } from "@fluidframework/core-utils/internal";
|
|
44
7
|
import { SummaryTreeBuilder } from "@fluidframework/runtime-utils/internal";
|
|
45
8
|
import { createChildLogger } from "@fluidframework/telemetry-utils/internal";
|
|
@@ -114,7 +77,9 @@ let SharedTreeCore = (() => {
|
|
|
114
77
|
revisionTagCodec,
|
|
115
78
|
});
|
|
116
79
|
this.summarizables = [
|
|
117
|
-
new EditManagerSummarizer(this.editManager, editManagerCodec, this.idCompressor, options.minVersionForCollab, this.schemaAndPolicy, options.healUnresolvableIdentifiersOnDecode
|
|
80
|
+
new EditManagerSummarizer(this.editManager, editManagerCodec, this.idCompressor, options.minVersionForCollab, this.schemaAndPolicy, options.healUnresolvableIdentifiersOnDecode === true
|
|
81
|
+
? { sharedObjectId: sharedObject.id }
|
|
82
|
+
: undefined),
|
|
118
83
|
...summarizables,
|
|
119
84
|
];
|
|
120
85
|
assert(new Set(this.summarizables.map((e) => e.key)).size === this.summarizables.length, 0x350 /* Index summary element keys must be unique */);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sharedTreeCore.js","sourceRoot":"","sources":["../../src/shared-tree-core/sharedTreeCore.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type { IFluidLoadable, ITelemetryBaseLogger } from \"@fluidframework/core-interfaces\";\nimport { assert, fail, unreachableCase } from \"@fluidframework/core-utils/internal\";\nimport type { IChannelStorageService } from \"@fluidframework/datastore-definitions/internal\";\nimport type { ISnapshotTree } from \"@fluidframework/driver-definitions/internal\";\nimport type {\n\tIIdCompressor,\n\tSessionId,\n\tSessionSpaceCompressedId,\n} from \"@fluidframework/id-compressor\";\nimport type {\n\tIExperimentalIncrementalSummaryContext,\n\tIRuntimeMessageCollection,\n\tISummaryTreeWithStats,\n\tITelemetryContext,\n} from \"@fluidframework/runtime-definitions/internal\";\nimport { SummaryTreeBuilder } from \"@fluidframework/runtime-utils/internal\";\nimport type {\n\tIChannelView,\n\tIFluidSerializer,\n} from \"@fluidframework/shared-object-base/internal\";\nimport { createChildLogger } from \"@fluidframework/telemetry-utils/internal\";\n\nimport type { CodecWriteOptions, DependentFormatVersion, IJsonCodec } from \"../codec/index.js\";\nimport {\n\ttype ChangeFamily,\n\ttype ChangeFamilyEditor,\n\ttype GraphCommit,\n\treplaceChange,\n\ttype RevisionTag,\n\tRevisionTagCodec,\n\ttype SchemaAndPolicy,\n\ttype SchemaPolicy,\n\ttype TreeStoredSchemaRepository,\n} from \"../core/index.js\";\nimport {\n\ttype JsonCompatibleReadOnly,\n\tbrand,\n\ttype Breakable,\n\ttype WithBreakable,\n\tthrowIfBroken,\n\tbreakingClass,\n} from \"../util/index.js\";\n\nimport type { BranchId, SharedTreeBranch } from \"./branch.js\";\nimport { BranchCommitEnricher } from \"./branchCommitEnricher.js\";\nimport type { ChangeEnricher } from \"./changeEnricher.js\";\nimport { DefaultResubmitMachine } from \"./defaultResubmitMachine.js\";\nimport { EditManager, minimumPossibleSequenceNumber } from \"./editManager.js\";\nimport { makeEditManagerCodecBuilder } from \"./editManagerCodecs.js\";\nimport type { EditManagerFormatVersion, SeqNumber } from \"./editManagerFormatCommons.js\";\nimport { EditManagerSummarizer } from \"./editManagerSummarizer.js\";\nimport { type MessageEncodingContext, makeMessageCodecBuilder } from \"./messageCodecs.js\";\nimport type { MessageFormatVersion } from \"./messageFormat.js\";\nimport type { DecodedMessage } from \"./messageTypes.js\";\nimport type { ResubmitMachine } from \"./resubmitMachine.js\";\nimport {\n\tminVersionToSharedTreeSummaryFormatVersion,\n\tsummarizablesTreeKey,\n\tsupportedSharedTreeSummaryFormatVersions,\n\ttype SharedTreeSummaryFormatVersion,\n\ttype Summarizable,\n\ttype SummaryElementParser,\n\ttype SummaryElementStringifier,\n} from \"./summaryTypes.js\";\nimport { VersionedSummarizer } from \"./versionedSummarizer.js\";\n\nexport interface ClonableSchemaAndPolicy extends SchemaAndPolicy {\n\tschema: TreeStoredSchemaRepository;\n}\n\nexport interface SharedTreeCoreOptionsInternal extends CodecWriteOptions {\n\t/**\n\t * See {@link SharedTreeOptionsBeta.healUnresolvableIdentifiersOnDecode}.\n\t */\n\treadonly healUnresolvableIdentifiersOnDecode?: boolean;\n}\n\nexport interface EnrichmentConfig<TChange> {\n\treadonly enricher: ChangeEnricher<TChange>;\n\treadonly resubmitMachine?: ResubmitMachine<TChange>;\n}\n\n/**\n * Generic shared tree, which needs to be configured with indexes, field kinds and other configuration.\n */\n@breakingClass\nexport class SharedTreeCore<TEditor extends ChangeFamilyEditor, TChange>\n\textends VersionedSummarizer<SharedTreeSummaryFormatVersion>\n\timplements WithBreakable, Summarizable\n{\n\tprivate readonly editManager: EditManager<TEditor, TChange, ChangeFamily<TEditor, TChange>>;\n\tprivate readonly summarizables: readonly [EditManagerSummarizer<TChange>, ...Summarizable[]];\n\t/**\n\t * The sequence number that this instance is at.\n\t * This number is artificial in that it is made up by this instance as opposed to being provided by the runtime.\n\t * Is `undefined` after (and only after) this instance is attached.\n\t */\n\tprivate detachedRevision: SeqNumber | undefined = minimumPossibleSequenceNumber;\n\n\t/**\n\t * Used to encode/decode messages sent to/received from the Fluid runtime.\n\t *\n\t * @remarks Since there is currently only one format, this can just be cached on the class.\n\t * With more write formats active, it may make sense to keep around the \"usual\" format codec\n\t * (the one for the current persisted configuration) and resolve codecs for different versions\n\t * as necessary (e.g. an upgrade op came in, or the configuration changed within the collab window\n\t * and an op needs to be interpreted which isn't written with the current configuration).\n\t */\n\tprivate readonly messageCodec: IJsonCodec<\n\t\tDecodedMessage<TChange>,\n\t\tunknown,\n\t\tunknown,\n\t\tMessageEncodingContext\n\t>;\n\n\tprivate readonly enrichers: Map<BranchId, EnricherState<TChange>> = new Map();\n\n\tpublic readonly mintRevisionTag: () => RevisionTag;\n\n\tprivate readonly schemaAndPolicy: ClonableSchemaAndPolicy;\n\n\t/**\n\t * @param summarizables - Summarizers for all indexes used by this tree\n\t * @param changeFamily - The change family\n\t * @param editManager - The edit manager\n\t * @param runtime - The IFluidDataStoreRuntime which contains the shared object\n\t * @param editor - Used to edit the state of the tree. Edits will be immediately applied locally to the tree.\n\t * If there is no transaction currently ongoing, then the edits will be submitted to Fluid immediately as well.\n\t */\n\tpublic constructor(\n\t\tpublic readonly breaker: Breakable,\n\t\tpublic readonly sharedObject: IChannelView & IFluidLoadable,\n\t\tpublic readonly serializer: IFluidSerializer,\n\t\tpublic readonly submitLocalMessage: (content: unknown, localOpMetadata?: unknown) => void,\n\t\tlogger: ITelemetryBaseLogger | undefined,\n\t\tsummarizables: readonly Summarizable[],\n\t\tprotected readonly changeFamily: ChangeFamily<TEditor, TChange>,\n\t\toptions: SharedTreeCoreOptionsInternal,\n\t\tchangeFormatVersionForEditManager: DependentFormatVersion<EditManagerFormatVersion>,\n\t\tchangeFormatVersionForMessage: DependentFormatVersion<MessageFormatVersion>,\n\t\tprotected readonly idCompressor: IIdCompressor,\n\t\tschema: TreeStoredSchemaRepository,\n\t\tschemaPolicy: SchemaPolicy,\n\t\tenrichmentConfig?: EnrichmentConfig<TChange>,\n\t\tpublic readonly getEditor: () => TEditor = () => this.getLocalBranch().editor,\n\t) {\n\t\tsuper(\n\t\t\tsummarizablesTreeKey,\n\t\t\tminVersionToSharedTreeSummaryFormatVersion(options.minVersionForCollab),\n\t\t\tsupportedSharedTreeSummaryFormatVersions,\n\t\t\ttrue /* supportPreVersioningFormat */,\n\t\t);\n\n\t\tthis.schemaAndPolicy = {\n\t\t\tschema,\n\t\t\tpolicy: schemaPolicy,\n\t\t};\n\n\t\tconst rebaseLogger = createChildLogger({\n\t\t\tlogger,\n\t\t\tnamespace: \"Rebase\",\n\t\t});\n\n\t\tthis.mintRevisionTag = () => this.idCompressor.generateCompressedId();\n\t\t/**\n\t\t * A random ID that uniquely identifies this client in the collab session.\n\t\t * This is sent alongside every op to identify which client the op originated from.\n\t\t * This is used rather than the Fluid client ID because the Fluid client ID is not stable across reconnections.\n\t\t */\n\t\tconst localSessionId = idCompressor.localSessionId;\n\t\tthis.editManager = new EditManager(\n\t\t\tchangeFamily,\n\t\t\tlocalSessionId,\n\t\t\tthis.mintRevisionTag,\n\t\t\t(branchId) => this.registerSharedBranch(branchId),\n\t\t\trebaseLogger,\n\t\t);\n\n\t\tthis.registerSharedBranch(\"main\");\n\n\t\tconst revisionTagCodec = new RevisionTagCodec(idCompressor);\n\t\tconst editManagerCodec = makeEditManagerCodecBuilder<TChange>().build({\n\t\t\t...options,\n\t\t\tchangeCodecs: this.editManager.changeFamily.codecs,\n\t\t\tdependentChangeFormatVersion: changeFormatVersionForEditManager,\n\t\t\trevisionTagCodec,\n\t\t});\n\t\tthis.summarizables = [\n\t\t\tnew EditManagerSummarizer(\n\t\t\t\tthis.editManager,\n\t\t\t\teditManagerCodec,\n\t\t\t\tthis.idCompressor,\n\t\t\t\toptions.minVersionForCollab,\n\t\t\t\tthis.schemaAndPolicy,\n\t\t\t\toptions.healUnresolvableIdentifiersOnDecode,\n\t\t\t\tsharedObject.id,\n\t\t\t),\n\t\t\t...summarizables,\n\t\t];\n\t\tassert(\n\t\t\tnew Set(this.summarizables.map((e) => e.key)).size === this.summarizables.length,\n\t\t\t0x350 /* Index summary element keys must be unique */,\n\t\t);\n\n\t\tthis.messageCodec = makeMessageCodecBuilder<TChange>().build({\n\t\t\t...options,\n\t\t\tchangeCodecs: changeFamily.codecs,\n\t\t\tdependentChangeFormatVersion: changeFormatVersionForMessage,\n\t\t\trevisionTagCodec: new RevisionTagCodec(idCompressor),\n\t\t});\n\n\t\tif (enrichmentConfig !== undefined) {\n\t\t\tthis.registerSharedBranchForEditing(\n\t\t\t\t\"main\",\n\t\t\t\tenrichmentConfig.enricher,\n\t\t\t\tenrichmentConfig.resubmitMachine,\n\t\t\t);\n\t\t}\n\t}\n\n\t// TODO: SharedObject's merging of the two summary methods into summarizeCore is not what we want here:\n\t// We might want to not subclass it, or override/reimplement most of its functionality.\n\tprotected summarizeInternal(props: {\n\t\tstringify: SummaryElementStringifier;\n\t\tfullTree?: boolean;\n\t\ttrackState?: boolean;\n\t\ttelemetryContext?: ITelemetryContext;\n\t\tincrementalSummaryContext?: IExperimentalIncrementalSummaryContext;\n\t\tbuilder: SummaryTreeBuilder;\n\t}): void {\n\t\tconst { stringify, fullTree, telemetryContext, incrementalSummaryContext, builder } =\n\t\t\tprops;\n\t\tconst summarizableBuilder = new SummaryTreeBuilder();\n\t\t// Merge the summaries of all summarizables together under a single ISummaryTree\n\t\tfor (const s of this.summarizables) {\n\t\t\t// Add the summarizable's path in the summary tree to the incremental summary context's\n\t\t\t// summary path, so that the summarizable can use it to generate incremental summaries.\n\t\t\tconst childIncrementalSummaryContext =\n\t\t\t\tincrementalSummaryContext === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: {\n\t\t\t\t\t\t\t...incrementalSummaryContext,\n\t\t\t\t\t\t\tsummaryPath: `${incrementalSummaryContext.summaryPath}/${summarizablesTreeKey}/${s.key}`,\n\t\t\t\t\t\t};\n\t\t\tsummarizableBuilder.addWithStats(\n\t\t\t\ts.key,\n\t\t\t\ts.summarize({\n\t\t\t\t\tstringify,\n\t\t\t\t\tfullTree,\n\t\t\t\t\ttelemetryContext,\n\t\t\t\t\tincrementalSummaryContext: childIncrementalSummaryContext,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tbuilder.addWithStats(summarizablesTreeKey, summarizableBuilder.getSummaryTree());\n\t}\n\n\tprotected async loadInternal(\n\t\tservices: IChannelStorageService,\n\t\tparse: SummaryElementParser,\n\t): Promise<void> {\n\t\tconst [editManagerSummarizer, ...summarizables] = this.summarizables;\n\t\tconst loadEditManager = this.loadSummarizable(editManagerSummarizer, services, parse);\n\t\tconst loadSummarizables = summarizables.map(async (s) =>\n\t\t\tthis.loadSummarizable(s, services, parse),\n\t\t);\n\n\t\tif (this.detachedRevision === undefined) {\n\t\t\tawait Promise.all([loadEditManager, ...loadSummarizables]);\n\t\t} else {\n\t\t\t// 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.\n\t\t\t// First, finish loading the edit manager so that we can inspect the sequence numbers of the commits on the trunk.\n\t\t\tawait loadEditManager;\n\n\t\t\tconst latestDetachedSequenceNumber = this.editManager.getLatestSequenceNumber();\n\t\t\t// When we load a summary for a tree that was never attached,\n\t\t\t// latestDetachedSequenceNumber is either undefined (no commits in summary) or negative (all commits in summary were made while detached).\n\t\t\t// We only need to update `this.detachedRevision` in the latter case.\n\t\t\tif (latestDetachedSequenceNumber !== undefined && latestDetachedSequenceNumber < 0) {\n\t\t\t\tthis.detachedRevision = latestDetachedSequenceNumber;\n\t\t\t}\n\t\t\tawait Promise.all(loadSummarizables);\n\t\t}\n\t}\n\n\t@throwIfBroken\n\tpublic summarizeCore(\n\t\tserializer: IFluidSerializer,\n\t\ttelemetryContext?: ITelemetryContext,\n\t\tincrementalSummaryContext?: IExperimentalIncrementalSummaryContext,\n\t\tfullTree?: boolean,\n\t): ISummaryTreeWithStats {\n\t\treturn this.summarize({\n\t\t\tstringify: (contents: unknown) =>\n\t\t\t\tserializer.stringify(contents, this.sharedObject.handle),\n\t\t\tfullTree,\n\t\t\ttelemetryContext,\n\t\t\tincrementalSummaryContext,\n\t\t});\n\t}\n\n\tpublic async loadCore(services: IChannelStorageService): Promise<void> {\n\t\tassert(\n\t\t\tthis.getLocalBranch().getHead() === this.editManager.getTrunkHead(\"main\"),\n\t\t\t0xaaa /* All local changes should be applied to the trunk before loading from summary */,\n\t\t);\n\t\tawait super.load(services, (contents) => this.serializer.parse(contents));\n\t}\n\n\tprivate registerSharedBranch(branchId: BranchId): void {\n\t\tconst branch = this.editManager.getLocalBranch(branchId);\n\t\tbranch.events.on(\"beforeChange\", (change) => {\n\t\t\tif (change.type === \"append\") {\n\t\t\t\tif (this.detachedRevision === undefined) {\n\t\t\t\t\t// Commit enrichment is only necessary for changes that will be submitted as ops, and changes issued while detached are not submitted.\n\t\t\t\t\tthis.getCommitEnricher(branchId).prepareChanges(change.newCommits);\n\t\t\t\t}\n\n\t\t\t\tfor (const commit of change.newCommits) {\n\t\t\t\t\tthis.submitCommit(branchId, commit, this.schemaAndPolicy, false);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate async loadSummarizable(\n\t\tsummarizable: Summarizable,\n\t\tservices: IChannelStorageService,\n\t\tparse: SummaryElementParser,\n\t): Promise<void> {\n\t\treturn summarizable.load(\n\t\t\tscopeStorageService(services, summarizablesTreeKey, summarizable.key),\n\t\t\tparse,\n\t\t);\n\t}\n\n\t/**\n\t * Submits an op to the Fluid runtime containing the given commit\n\t * @param commit - the commit to submit\n\t * @returns the submitted commit. This is undefined if the underlying `SharedObject` is not attached,\n\t * and may differ from `commit` due to enrichments like detached tree refreshers.\n\t */\n\tprotected submitCommit(\n\t\tbranchId: BranchId,\n\t\tcommit: GraphCommit<TChange>,\n\t\tschemaAndPolicy: ClonableSchemaAndPolicy,\n\t\tisResubmit: boolean,\n\t): void {\n\t\tassert(\n\t\t\tthis.sharedObject.isAttached() === (this.detachedRevision === undefined),\n\t\t\t0x95a /* Detached revision should only be set when not attached */,\n\t\t);\n\n\t\t// Edits submitted before the first attach are treated as sequenced because they will be included\n\t\t// in the attach summary that is uploaded to the service.\n\t\t// Until this attach workflow happens, this instance essentially behaves as a centralized data structure.\n\t\tif (this.detachedRevision !== undefined) {\n\t\t\tconst newRevision: SeqNumber = brand((this.detachedRevision as number) + 1);\n\t\t\tthis.detachedRevision = newRevision;\n\t\t\tthis.editManager.addSequencedChanges(\n\t\t\t\t[commit],\n\t\t\t\tthis.editManager.localSessionId,\n\t\t\t\tnewRevision,\n\t\t\t\tthis.detachedRevision,\n\t\t\t\tbranchId,\n\t\t\t);\n\t\t\tthis.editManager.advanceMinimumSequenceNumber(newRevision, false);\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst enrichedCommit = isResubmit\n\t\t\t? commit\n\t\t\t: replaceChange(commit, this.getCommitEnricher(branchId).retrieveChange(commit));\n\n\t\tthis.submitMessage(\n\t\t\t{\n\t\t\t\ttype: \"commit\",\n\t\t\t\tcommit: enrichedCommit,\n\t\t\t\tsessionId: this.editManager.localSessionId,\n\t\t\t\tbranchId,\n\t\t\t},\n\t\t\tschemaAndPolicy,\n\t\t);\n\n\t\tthis.getResubmitMachine(branchId).onCommitSubmitted(enrichedCommit);\n\t}\n\n\tprotected submitBranchCreation(branchId: BranchId): void {\n\t\tthis.submitMessage(\n\t\t\t{ type: \"branch\", sessionId: this.editManager.localSessionId, branchId },\n\t\t\tthis.schemaAndPolicy,\n\t\t);\n\t}\n\n\tprivate submitMessage(\n\t\tmessage: DecodedMessage<TChange>,\n\t\tschemaAndPolicy: ClonableSchemaAndPolicy,\n\t): void {\n\t\tconst encodedMessage = this.messageCodec.encode(message, {\n\t\t\tidCompressor: this.idCompressor,\n\t\t\tschema: schemaAndPolicy,\n\t\t});\n\t\tthis.submitLocalMessage(encodedMessage, {\n\t\t\t// Clone the schema to ensure that during resubmit the schema has not been mutated by later changes\n\t\t\tschema: schemaAndPolicy.schema.clone(),\n\t\t\tpolicy: schemaAndPolicy.policy,\n\t\t});\n\t}\n\n\t/**\n\t * Process a bunch of messages from the runtime. SharedObject will call this method with a bunch of messages.\n\t */\n\tpublic processMessagesCore(messagesCollection: IRuntimeMessageCollection): void {\n\t\tconst { envelope, local, messagesContent } = messagesCollection;\n\t\tconst commits: GraphCommit<TChange>[] = [];\n\t\tlet messagesSessionId: SessionId | undefined;\n\t\tlet branchId: BranchId | undefined;\n\n\t\tconst processBunch = (branch: BranchId): void => {\n\t\t\tassert(messagesSessionId !== undefined, 0xada /* Messages must have a session ID */);\n\t\t\tthis.processCommits(\n\t\t\t\tmessagesSessionId,\n\t\t\t\tbrand(envelope.sequenceNumber),\n\t\t\t\tbrand(envelope.referenceSequenceNumber),\n\t\t\t\tlocal,\n\t\t\t\tbranch,\n\t\t\t\tcommits,\n\t\t\t);\n\n\t\t\tcommits.length = 0;\n\t\t\tbranchId = undefined;\n\t\t};\n\n\t\t// Get a list of all the commits from the messages.\n\t\tfor (const messageContent of messagesContent) {\n\t\t\t// Empty context object is passed in, as our decode function is schema-agnostic.\n\t\t\tconst message = this.messageCodec.decode(messageContent.contents, {\n\t\t\t\tidCompressor: this.idCompressor,\n\t\t\t});\n\n\t\t\tif (messagesSessionId !== undefined) {\n\t\t\t\tassert(\n\t\t\t\t\tmessagesSessionId === message.sessionId,\n\t\t\t\t\t0xad9 /* All messages in a bunch must have the same session ID */,\n\t\t\t\t);\n\t\t\t}\n\t\t\tmessagesSessionId = message.sessionId;\n\n\t\t\tconst type = message.type;\n\t\t\tswitch (type) {\n\t\t\t\tcase \"commit\": {\n\t\t\t\t\tif (branchId !== undefined && message.branchId !== branchId) {\n\t\t\t\t\t\tprocessBunch(branchId);\n\t\t\t\t\t}\n\n\t\t\t\t\tbranchId = message.branchId;\n\t\t\t\t\tcommits.push(message.commit);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"branch\": {\n\t\t\t\t\tif (branchId !== undefined) {\n\t\t\t\t\t\tprocessBunch(branchId);\n\t\t\t\t\t}\n\t\t\t\t\tthis.editManager.sequenceBranchCreation(\n\t\t\t\t\t\tmessagesSessionId,\n\t\t\t\t\t\tbrand(envelope.referenceSequenceNumber),\n\t\t\t\t\t\tmessage.branchId,\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tunreachableCase(type);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (branchId !== undefined) {\n\t\t\tprocessBunch(branchId);\n\t\t}\n\n\t\tthis.editManager.advanceMinimumSequenceNumber(brand(envelope.minimumSequenceNumber));\n\t}\n\n\tprivate processCommits(\n\t\tsessionId: SessionId,\n\t\tsequenceNumber: SeqNumber,\n\t\treferenceSequenceNumber: SeqNumber,\n\t\tisLocal: boolean,\n\t\tbranchId: BranchId,\n\t\tcommits: readonly GraphCommit<TChange>[],\n\t): void {\n\t\tthis.editManager.addSequencedChanges(\n\t\t\tcommits,\n\t\t\tsessionId,\n\t\t\tsequenceNumber,\n\t\t\treferenceSequenceNumber,\n\t\t\tbranchId,\n\t\t);\n\n\t\t// Update the resubmit machine for each commit applied.\n\t\tfor (const commit of commits) {\n\t\t\tthis.tryGetResubmitMachine(branchId)?.onSequencedCommitApplied(commit.revision, isLocal);\n\t\t}\n\t}\n\n\tpublic getLocalBranch(): SharedTreeBranch<TEditor, TChange> {\n\t\treturn this.editManager.getLocalBranch(\"main\");\n\t}\n\n\tpublic getSharedBranchIds(): string[] {\n\t\treturn this.editManager\n\t\t\t.getSharedBranchIds()\n\t\t\t.filter((id): id is SessionSpaceCompressedId => id !== \"main\")\n\t\t\t.map((id) => this.idCompressor.decompress(id));\n\t}\n\tpublic createSharedBranch(): string {\n\t\tconst branchId = this.idCompressor.generateCompressedId();\n\t\tthis.addBranch(branchId);\n\t\tthis.submitBranchCreation(branchId);\n\t\treturn this.idCompressor.decompress(branchId);\n\t}\n\n\tprotected addBranch(branchId: BranchId): void {\n\t\tthis.editManager.addNewBranch(branchId);\n\t}\n\n\tpublic getSharedBranch(branchId: BranchId): SharedTreeBranch<TEditor, TChange> {\n\t\treturn this.editManager.getLocalBranch(branchId);\n\t}\n\n\tpublic didAttach(): void {\n\t\tthis.detachedRevision = undefined;\n\t}\n\n\tpublic reSubmitCore(content: JsonCompatibleReadOnly, localOpMetadata: unknown): void {\n\t\t// Empty context object is passed in, as our decode function is schema-agnostic.\n\t\tconst message = this.messageCodec.decode(this.serializer.decode(content), {\n\t\t\tidCompressor: this.idCompressor,\n\t\t});\n\n\t\tconst type = message.type;\n\t\tswitch (type) {\n\t\t\tcase \"commit\": {\n\t\t\t\tconst {\n\t\t\t\t\tcommit: { revision },\n\t\t\t\t\tbranchId,\n\t\t\t\t} = message;\n\n\t\t\t\tconst resubmitMachine = this.getResubmitMachine(branchId);\n\n\t\t\t\tconst getLocalCommits = (): GraphCommit<TChange>[] => {\n\t\t\t\t\tconst localCommits = this.editManager.getLocalCommits(branchId);\n\t\t\t\t\tconst revisionIndex = localCommits.findIndex((c) => c.revision === revision);\n\t\t\t\t\tassert(revisionIndex >= 0, 0xbdb /* revision must exist in local commits */);\n\t\t\t\t\treturn localCommits.slice(revisionIndex);\n\t\t\t\t};\n\n\t\t\t\tassert(\n\t\t\t\t\tisClonableSchemaPolicy(localOpMetadata),\n\t\t\t\t\t0x95e /* Local metadata must contain schema and policy. */,\n\t\t\t\t);\n\n\t\t\t\tconst enrichedCommit = resubmitMachine.getEnrichedCommit(revision, getLocalCommits);\n\t\t\t\tif (enrichedCommit !== undefined) {\n\t\t\t\t\tthis.submitCommit(branchId, enrichedCommit, localOpMetadata, true);\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"branch\": {\n\t\t\t\tthis.submitBranchCreation(message.branchId);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tunreachableCase(type);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic rollback(content: JsonCompatibleReadOnly, localOpMetadata: unknown): void {\n\t\t// Empty context object is passed in, as our decode function is schema-agnostic.\n\t\tconst message = this.messageCodec.decode(this.serializer.decode(content), {\n\t\t\tidCompressor: this.idCompressor,\n\t\t});\n\n\t\tconst type = message.type;\n\t\tswitch (type) {\n\t\t\tcase \"commit\": {\n\t\t\t\tconst {\n\t\t\t\t\tcommit: { revision },\n\t\t\t\t\tbranchId,\n\t\t\t\t} = message;\n\t\t\t\tconst branch = this.editManager.getLocalBranch(branchId);\n\t\t\t\tconst head = branch.getHead();\n\t\t\t\tassert(head.revision === revision, 0xc6b /* Can only rollback latest commit */);\n\t\t\t\tconst newHead = head.parent ?? fail(0xc6c /* must have parent */);\n\t\t\t\tbranch.removeAfter(newHead);\n\t\t\t\tthis.getResubmitMachine(branchId).onCommitRollback(head);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"branch\": {\n\t\t\t\tthis.editManager.removeBranch(message.branchId);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tunreachableCase(type);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic applyStashedOp(content: JsonCompatibleReadOnly): void {\n\t\t// Empty context object is passed in, as our decode function is schema-agnostic.\n\t\tconst message = this.messageCodec.decode(this.serializer.decode(content), {\n\t\t\tidCompressor: this.idCompressor,\n\t\t});\n\n\t\tconst type = message.type;\n\t\tswitch (type) {\n\t\t\tcase \"commit\": {\n\t\t\t\tconst {\n\t\t\t\t\tcommit: { revision, change },\n\t\t\t\t\tbranchId,\n\t\t\t\t} = message;\n\t\t\t\tthis.editManager.getLocalBranch(branchId).apply({ change, revision });\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"branch\": {\n\t\t\t\tthis.editManager.addNewBranch(message.branchId);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tunreachableCase(type);\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected registerSharedBranchForEditing(\n\t\tbranchId: BranchId,\n\t\tenricher: ChangeEnricher<TChange>,\n\t\tresubmitMachine?: ResubmitMachine<TChange>,\n\t): void {\n\t\tconst commitEnricher = new BranchCommitEnricher(enricher);\n\t\tassert(!this.enrichers.has(branchId), 0xc6d /* Branch already registered */);\n\t\tthis.enrichers.set(branchId, {\n\t\t\tenricher: commitEnricher,\n\t\t\tresubmitMachine: resubmitMachine ?? new DefaultResubmitMachine(enricher),\n\t\t});\n\t}\n\n\tprivate getResubmitMachine(branchId: BranchId): ResubmitMachine<TChange> {\n\t\treturn this.getEnricherState(branchId).resubmitMachine;\n\t}\n\n\tprivate tryGetResubmitMachine(branchId: BranchId): ResubmitMachine<TChange> | undefined {\n\t\treturn this.tryGetEnricherState(branchId)?.resubmitMachine;\n\t}\n\n\tpublic getCommitEnricher(branchId: BranchId): BranchCommitEnricher<TChange> {\n\t\treturn this.getEnricherState(branchId).enricher;\n\t}\n\n\tprivate getEnricherState(branchId: BranchId): EnricherState<TChange> {\n\t\treturn (\n\t\t\tthis.tryGetEnricherState(branchId) ??\n\t\t\tfail(0xc6e /* Expected to have a resubmit machine for this branch */)\n\t\t);\n\t}\n\n\tprivate tryGetEnricherState(branchId: BranchId): EnricherState<TChange> | undefined {\n\t\treturn this.enrichers.get(branchId);\n\t}\n}\n\ninterface EnricherState<TChange> {\n\treadonly enricher: BranchCommitEnricher<TChange>;\n\treadonly resubmitMachine: ResubmitMachine<TChange>;\n}\n\nfunction isClonableSchemaPolicy(\n\tmaybeSchemaPolicy: unknown,\n): maybeSchemaPolicy is ClonableSchemaAndPolicy {\n\tconst schemaAndPolicy = maybeSchemaPolicy as ClonableSchemaAndPolicy;\n\treturn schemaAndPolicy.schema !== undefined && schemaAndPolicy.policy !== undefined;\n}\n\n/**\n * Compose an {@link IChannelStorageService} which prefixes all paths before forwarding them to the original service\n */\nfunction scopeStorageService(\n\tservice: IChannelStorageService,\n\t...pathElements: string[]\n): IChannelStorageService {\n\tconst scope = `${pathElements.join(\"/\")}/`;\n\n\treturn {\n\t\tasync readBlob(path: string): Promise<ArrayBufferLike> {\n\t\t\treturn service.readBlob(`${scope}${path}`);\n\t\t},\n\t\tasync contains(path) {\n\t\t\treturn service.contains(`${scope}${path}`);\n\t\t},\n\t\tasync list(path) {\n\t\t\treturn service.list(`${scope}${path}`);\n\t\t},\n\t\tgetSnapshotTree(): ISnapshotTree | undefined {\n\t\t\tconst snapshotTree = service.getSnapshotTree();\n\t\t\tif (snapshotTree === undefined) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tlet scopedTree = snapshotTree;\n\t\t\tfor (const element of pathElements) {\n\t\t\t\tconst tree = scopedTree.trees[element];\n\t\t\t\tassert(\n\t\t\t\t\ttree !== undefined,\n\t\t\t\t\t0xc20 /* snapshot tree not found for one of tree's summarizables */,\n\t\t\t\t);\n\t\t\t\tscopedTree = tree;\n\t\t\t}\n\t\t\treturn scopedTree;\n\t\t},\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sharedTreeCore.js","sourceRoot":"","sources":["../../src/shared-tree-core/sharedTreeCore.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type { IFluidLoadable, ITelemetryBaseLogger } from \"@fluidframework/core-interfaces\";\nimport { assert, fail, unreachableCase } from \"@fluidframework/core-utils/internal\";\nimport type { IChannelStorageService } from \"@fluidframework/datastore-definitions/internal\";\nimport type { ISnapshotTree } from \"@fluidframework/driver-definitions/internal\";\nimport type {\n\tIIdCompressor,\n\tSessionId,\n\tSessionSpaceCompressedId,\n} from \"@fluidframework/id-compressor\";\nimport type {\n\tIExperimentalIncrementalSummaryContext,\n\tIRuntimeMessageCollection,\n\tISummaryTreeWithStats,\n\tITelemetryContext,\n} from \"@fluidframework/runtime-definitions/internal\";\nimport { SummaryTreeBuilder } from \"@fluidframework/runtime-utils/internal\";\nimport type {\n\tIChannelView,\n\tIFluidSerializer,\n} from \"@fluidframework/shared-object-base/internal\";\nimport { createChildLogger } from \"@fluidframework/telemetry-utils/internal\";\n\nimport type { CodecWriteOptions, DependentFormatVersion, IJsonCodec } from \"../codec/index.js\";\nimport {\n\ttype ChangeFamily,\n\ttype ChangeFamilyEditor,\n\ttype GraphCommit,\n\treplaceChange,\n\ttype RevisionTag,\n\tRevisionTagCodec,\n\ttype SchemaAndPolicy,\n\ttype SchemaPolicy,\n\ttype TreeStoredSchemaRepository,\n} from \"../core/index.js\";\nimport {\n\ttype JsonCompatibleReadOnly,\n\tbrand,\n\ttype Breakable,\n\ttype WithBreakable,\n\tthrowIfBroken,\n\tbreakingClass,\n} from \"../util/index.js\";\n\nimport type { BranchId, SharedTreeBranch } from \"./branch.js\";\nimport { BranchCommitEnricher } from \"./branchCommitEnricher.js\";\nimport type { ChangeEnricher } from \"./changeEnricher.js\";\nimport { DefaultResubmitMachine } from \"./defaultResubmitMachine.js\";\nimport { EditManager, minimumPossibleSequenceNumber } from \"./editManager.js\";\nimport { makeEditManagerCodecBuilder } from \"./editManagerCodecs.js\";\nimport type { EditManagerFormatVersion, SeqNumber } from \"./editManagerFormatCommons.js\";\nimport { EditManagerSummarizer } from \"./editManagerSummarizer.js\";\nimport { type MessageEncodingContext, makeMessageCodecBuilder } from \"./messageCodecs.js\";\nimport type { MessageFormatVersion } from \"./messageFormat.js\";\nimport type { DecodedMessage } from \"./messageTypes.js\";\nimport type { ResubmitMachine } from \"./resubmitMachine.js\";\nimport {\n\tminVersionToSharedTreeSummaryFormatVersion,\n\tsummarizablesTreeKey,\n\tsupportedSharedTreeSummaryFormatVersions,\n\ttype SharedTreeSummaryFormatVersion,\n\ttype Summarizable,\n\ttype SummaryElementParser,\n\ttype SummaryElementStringifier,\n} from \"./summaryTypes.js\";\nimport { VersionedSummarizer } from \"./versionedSummarizer.js\";\n\nexport interface ClonableSchemaAndPolicy extends SchemaAndPolicy {\n\tschema: TreeStoredSchemaRepository;\n}\n\nexport interface SharedTreeCoreOptionsInternal extends CodecWriteOptions {\n\t/**\n\t * See {@link SharedTreeOptionsBeta.healUnresolvableIdentifiersOnDecode}.\n\t */\n\treadonly healUnresolvableIdentifiersOnDecode?: boolean;\n}\n\nexport interface EnrichmentConfig<TChange> {\n\treadonly enricher: ChangeEnricher<TChange>;\n\treadonly resubmitMachine?: ResubmitMachine<TChange>;\n}\n\n/**\n * Generic shared tree, which needs to be configured with indexes, field kinds and other configuration.\n */\n@breakingClass\nexport class SharedTreeCore<TEditor extends ChangeFamilyEditor, TChange>\n\textends VersionedSummarizer<SharedTreeSummaryFormatVersion>\n\timplements WithBreakable, Summarizable\n{\n\tprivate readonly editManager: EditManager<TEditor, TChange, ChangeFamily<TEditor, TChange>>;\n\tprivate readonly summarizables: readonly [EditManagerSummarizer<TChange>, ...Summarizable[]];\n\t/**\n\t * The sequence number that this instance is at.\n\t * This number is artificial in that it is made up by this instance as opposed to being provided by the runtime.\n\t * Is `undefined` after (and only after) this instance is attached.\n\t */\n\tprivate detachedRevision: SeqNumber | undefined = minimumPossibleSequenceNumber;\n\n\t/**\n\t * Used to encode/decode messages sent to/received from the Fluid runtime.\n\t *\n\t * @remarks Since there is currently only one format, this can just be cached on the class.\n\t * With more write formats active, it may make sense to keep around the \"usual\" format codec\n\t * (the one for the current persisted configuration) and resolve codecs for different versions\n\t * as necessary (e.g. an upgrade op came in, or the configuration changed within the collab window\n\t * and an op needs to be interpreted which isn't written with the current configuration).\n\t */\n\tprivate readonly messageCodec: IJsonCodec<\n\t\tDecodedMessage<TChange>,\n\t\tunknown,\n\t\tunknown,\n\t\tMessageEncodingContext\n\t>;\n\n\tprivate readonly enrichers: Map<BranchId, EnricherState<TChange>> = new Map();\n\n\tpublic readonly mintRevisionTag: () => RevisionTag;\n\n\tprivate readonly schemaAndPolicy: ClonableSchemaAndPolicy;\n\n\t/**\n\t * @param summarizables - Summarizers for all indexes used by this tree\n\t * @param changeFamily - The change family\n\t * @param editManager - The edit manager\n\t * @param runtime - The IFluidDataStoreRuntime which contains the shared object\n\t * @param editor - Used to edit the state of the tree. Edits will be immediately applied locally to the tree.\n\t * If there is no transaction currently ongoing, then the edits will be submitted to Fluid immediately as well.\n\t */\n\tpublic constructor(\n\t\tpublic readonly breaker: Breakable,\n\t\tpublic readonly sharedObject: IChannelView & IFluidLoadable,\n\t\tpublic readonly serializer: IFluidSerializer,\n\t\tpublic readonly submitLocalMessage: (content: unknown, localOpMetadata?: unknown) => void,\n\t\tlogger: ITelemetryBaseLogger | undefined,\n\t\tsummarizables: readonly Summarizable[],\n\t\tprotected readonly changeFamily: ChangeFamily<TEditor, TChange>,\n\t\toptions: SharedTreeCoreOptionsInternal,\n\t\tchangeFormatVersionForEditManager: DependentFormatVersion<EditManagerFormatVersion>,\n\t\tchangeFormatVersionForMessage: DependentFormatVersion<MessageFormatVersion>,\n\t\tprotected readonly idCompressor: IIdCompressor,\n\t\tschema: TreeStoredSchemaRepository,\n\t\tschemaPolicy: SchemaPolicy,\n\t\tenrichmentConfig?: EnrichmentConfig<TChange>,\n\t\tpublic readonly getEditor: () => TEditor = () => this.getLocalBranch().editor,\n\t) {\n\t\tsuper(\n\t\t\tsummarizablesTreeKey,\n\t\t\tminVersionToSharedTreeSummaryFormatVersion(options.minVersionForCollab),\n\t\t\tsupportedSharedTreeSummaryFormatVersions,\n\t\t\ttrue /* supportPreVersioningFormat */,\n\t\t);\n\n\t\tthis.schemaAndPolicy = {\n\t\t\tschema,\n\t\t\tpolicy: schemaPolicy,\n\t\t};\n\n\t\tconst rebaseLogger = createChildLogger({\n\t\t\tlogger,\n\t\t\tnamespace: \"Rebase\",\n\t\t});\n\n\t\tthis.mintRevisionTag = () => this.idCompressor.generateCompressedId();\n\t\t/**\n\t\t * A random ID that uniquely identifies this client in the collab session.\n\t\t * This is sent alongside every op to identify which client the op originated from.\n\t\t * This is used rather than the Fluid client ID because the Fluid client ID is not stable across reconnections.\n\t\t */\n\t\tconst localSessionId = idCompressor.localSessionId;\n\t\tthis.editManager = new EditManager(\n\t\t\tchangeFamily,\n\t\t\tlocalSessionId,\n\t\t\tthis.mintRevisionTag,\n\t\t\t(branchId) => this.registerSharedBranch(branchId),\n\t\t\trebaseLogger,\n\t\t);\n\n\t\tthis.registerSharedBranch(\"main\");\n\n\t\tconst revisionTagCodec = new RevisionTagCodec(idCompressor);\n\t\tconst editManagerCodec = makeEditManagerCodecBuilder<TChange>().build({\n\t\t\t...options,\n\t\t\tchangeCodecs: this.editManager.changeFamily.codecs,\n\t\t\tdependentChangeFormatVersion: changeFormatVersionForEditManager,\n\t\t\trevisionTagCodec,\n\t\t});\n\t\tthis.summarizables = [\n\t\t\tnew EditManagerSummarizer(\n\t\t\t\tthis.editManager,\n\t\t\t\teditManagerCodec,\n\t\t\t\tthis.idCompressor,\n\t\t\t\toptions.minVersionForCollab,\n\t\t\t\tthis.schemaAndPolicy,\n\t\t\t\toptions.healUnresolvableIdentifiersOnDecode === true\n\t\t\t\t\t? { sharedObjectId: sharedObject.id }\n\t\t\t\t\t: undefined,\n\t\t\t),\n\t\t\t...summarizables,\n\t\t];\n\t\tassert(\n\t\t\tnew Set(this.summarizables.map((e) => e.key)).size === this.summarizables.length,\n\t\t\t0x350 /* Index summary element keys must be unique */,\n\t\t);\n\n\t\tthis.messageCodec = makeMessageCodecBuilder<TChange>().build({\n\t\t\t...options,\n\t\t\tchangeCodecs: changeFamily.codecs,\n\t\t\tdependentChangeFormatVersion: changeFormatVersionForMessage,\n\t\t\trevisionTagCodec: new RevisionTagCodec(idCompressor),\n\t\t});\n\n\t\tif (enrichmentConfig !== undefined) {\n\t\t\tthis.registerSharedBranchForEditing(\n\t\t\t\t\"main\",\n\t\t\t\tenrichmentConfig.enricher,\n\t\t\t\tenrichmentConfig.resubmitMachine,\n\t\t\t);\n\t\t}\n\t}\n\n\t// TODO: SharedObject's merging of the two summary methods into summarizeCore is not what we want here:\n\t// We might want to not subclass it, or override/reimplement most of its functionality.\n\tprotected summarizeInternal(props: {\n\t\tstringify: SummaryElementStringifier;\n\t\tfullTree?: boolean;\n\t\ttrackState?: boolean;\n\t\ttelemetryContext?: ITelemetryContext;\n\t\tincrementalSummaryContext?: IExperimentalIncrementalSummaryContext;\n\t\tbuilder: SummaryTreeBuilder;\n\t}): void {\n\t\tconst { stringify, fullTree, telemetryContext, incrementalSummaryContext, builder } =\n\t\t\tprops;\n\t\tconst summarizableBuilder = new SummaryTreeBuilder();\n\t\t// Merge the summaries of all summarizables together under a single ISummaryTree\n\t\tfor (const s of this.summarizables) {\n\t\t\t// Add the summarizable's path in the summary tree to the incremental summary context's\n\t\t\t// summary path, so that the summarizable can use it to generate incremental summaries.\n\t\t\tconst childIncrementalSummaryContext =\n\t\t\t\tincrementalSummaryContext === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: {\n\t\t\t\t\t\t\t...incrementalSummaryContext,\n\t\t\t\t\t\t\tsummaryPath: `${incrementalSummaryContext.summaryPath}/${summarizablesTreeKey}/${s.key}`,\n\t\t\t\t\t\t};\n\t\t\tsummarizableBuilder.addWithStats(\n\t\t\t\ts.key,\n\t\t\t\ts.summarize({\n\t\t\t\t\tstringify,\n\t\t\t\t\tfullTree,\n\t\t\t\t\ttelemetryContext,\n\t\t\t\t\tincrementalSummaryContext: childIncrementalSummaryContext,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tbuilder.addWithStats(summarizablesTreeKey, summarizableBuilder.getSummaryTree());\n\t}\n\n\tprotected async loadInternal(\n\t\tservices: IChannelStorageService,\n\t\tparse: SummaryElementParser,\n\t): Promise<void> {\n\t\tconst [editManagerSummarizer, ...summarizables] = this.summarizables;\n\t\tconst loadEditManager = this.loadSummarizable(editManagerSummarizer, services, parse);\n\t\tconst loadSummarizables = summarizables.map(async (s) =>\n\t\t\tthis.loadSummarizable(s, services, parse),\n\t\t);\n\n\t\tif (this.detachedRevision === undefined) {\n\t\t\tawait Promise.all([loadEditManager, ...loadSummarizables]);\n\t\t} else {\n\t\t\t// 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.\n\t\t\t// First, finish loading the edit manager so that we can inspect the sequence numbers of the commits on the trunk.\n\t\t\tawait loadEditManager;\n\n\t\t\tconst latestDetachedSequenceNumber = this.editManager.getLatestSequenceNumber();\n\t\t\t// When we load a summary for a tree that was never attached,\n\t\t\t// latestDetachedSequenceNumber is either undefined (no commits in summary) or negative (all commits in summary were made while detached).\n\t\t\t// We only need to update `this.detachedRevision` in the latter case.\n\t\t\tif (latestDetachedSequenceNumber !== undefined && latestDetachedSequenceNumber < 0) {\n\t\t\t\tthis.detachedRevision = latestDetachedSequenceNumber;\n\t\t\t}\n\t\t\tawait Promise.all(loadSummarizables);\n\t\t}\n\t}\n\n\t@throwIfBroken\n\tpublic summarizeCore(\n\t\tserializer: IFluidSerializer,\n\t\ttelemetryContext?: ITelemetryContext,\n\t\tincrementalSummaryContext?: IExperimentalIncrementalSummaryContext,\n\t\tfullTree?: boolean,\n\t): ISummaryTreeWithStats {\n\t\treturn this.summarize({\n\t\t\tstringify: (contents: unknown) =>\n\t\t\t\tserializer.stringify(contents, this.sharedObject.handle),\n\t\t\tfullTree,\n\t\t\ttelemetryContext,\n\t\t\tincrementalSummaryContext,\n\t\t});\n\t}\n\n\tpublic async loadCore(services: IChannelStorageService): Promise<void> {\n\t\tassert(\n\t\t\tthis.getLocalBranch().getHead() === this.editManager.getTrunkHead(\"main\"),\n\t\t\t0xaaa /* All local changes should be applied to the trunk before loading from summary */,\n\t\t);\n\t\tawait super.load(services, (contents) => this.serializer.parse(contents));\n\t}\n\n\tprivate registerSharedBranch(branchId: BranchId): void {\n\t\tconst branch = this.editManager.getLocalBranch(branchId);\n\t\tbranch.events.on(\"beforeChange\", (change) => {\n\t\t\tif (change.type === \"append\") {\n\t\t\t\tif (this.detachedRevision === undefined) {\n\t\t\t\t\t// Commit enrichment is only necessary for changes that will be submitted as ops, and changes issued while detached are not submitted.\n\t\t\t\t\tthis.getCommitEnricher(branchId).prepareChanges(change.newCommits);\n\t\t\t\t}\n\n\t\t\t\tfor (const commit of change.newCommits) {\n\t\t\t\t\tthis.submitCommit(branchId, commit, this.schemaAndPolicy, false);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate async loadSummarizable(\n\t\tsummarizable: Summarizable,\n\t\tservices: IChannelStorageService,\n\t\tparse: SummaryElementParser,\n\t): Promise<void> {\n\t\treturn summarizable.load(\n\t\t\tscopeStorageService(services, summarizablesTreeKey, summarizable.key),\n\t\t\tparse,\n\t\t);\n\t}\n\n\t/**\n\t * Submits an op to the Fluid runtime containing the given commit\n\t * @param commit - the commit to submit\n\t * @returns the submitted commit. This is undefined if the underlying `SharedObject` is not attached,\n\t * and may differ from `commit` due to enrichments like detached tree refreshers.\n\t */\n\tprotected submitCommit(\n\t\tbranchId: BranchId,\n\t\tcommit: GraphCommit<TChange>,\n\t\tschemaAndPolicy: ClonableSchemaAndPolicy,\n\t\tisResubmit: boolean,\n\t): void {\n\t\tassert(\n\t\t\tthis.sharedObject.isAttached() === (this.detachedRevision === undefined),\n\t\t\t0x95a /* Detached revision should only be set when not attached */,\n\t\t);\n\n\t\t// Edits submitted before the first attach are treated as sequenced because they will be included\n\t\t// in the attach summary that is uploaded to the service.\n\t\t// Until this attach workflow happens, this instance essentially behaves as a centralized data structure.\n\t\tif (this.detachedRevision !== undefined) {\n\t\t\tconst newRevision: SeqNumber = brand((this.detachedRevision as number) + 1);\n\t\t\tthis.detachedRevision = newRevision;\n\t\t\tthis.editManager.addSequencedChanges(\n\t\t\t\t[commit],\n\t\t\t\tthis.editManager.localSessionId,\n\t\t\t\tnewRevision,\n\t\t\t\tthis.detachedRevision,\n\t\t\t\tbranchId,\n\t\t\t);\n\t\t\tthis.editManager.advanceMinimumSequenceNumber(newRevision, false);\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst enrichedCommit = isResubmit\n\t\t\t? commit\n\t\t\t: replaceChange(commit, this.getCommitEnricher(branchId).retrieveChange(commit));\n\n\t\tthis.submitMessage(\n\t\t\t{\n\t\t\t\ttype: \"commit\",\n\t\t\t\tcommit: enrichedCommit,\n\t\t\t\tsessionId: this.editManager.localSessionId,\n\t\t\t\tbranchId,\n\t\t\t},\n\t\t\tschemaAndPolicy,\n\t\t);\n\n\t\tthis.getResubmitMachine(branchId).onCommitSubmitted(enrichedCommit);\n\t}\n\n\tprotected submitBranchCreation(branchId: BranchId): void {\n\t\tthis.submitMessage(\n\t\t\t{ type: \"branch\", sessionId: this.editManager.localSessionId, branchId },\n\t\t\tthis.schemaAndPolicy,\n\t\t);\n\t}\n\n\tprivate submitMessage(\n\t\tmessage: DecodedMessage<TChange>,\n\t\tschemaAndPolicy: ClonableSchemaAndPolicy,\n\t): void {\n\t\tconst encodedMessage = this.messageCodec.encode(message, {\n\t\t\tidCompressor: this.idCompressor,\n\t\t\tschema: schemaAndPolicy,\n\t\t});\n\t\tthis.submitLocalMessage(encodedMessage, {\n\t\t\t// Clone the schema to ensure that during resubmit the schema has not been mutated by later changes\n\t\t\tschema: schemaAndPolicy.schema.clone(),\n\t\t\tpolicy: schemaAndPolicy.policy,\n\t\t});\n\t}\n\n\t/**\n\t * Process a bunch of messages from the runtime. SharedObject will call this method with a bunch of messages.\n\t */\n\tpublic processMessagesCore(messagesCollection: IRuntimeMessageCollection): void {\n\t\tconst { envelope, local, messagesContent } = messagesCollection;\n\t\tconst commits: GraphCommit<TChange>[] = [];\n\t\tlet messagesSessionId: SessionId | undefined;\n\t\tlet branchId: BranchId | undefined;\n\n\t\tconst processBunch = (branch: BranchId): void => {\n\t\t\tassert(messagesSessionId !== undefined, 0xada /* Messages must have a session ID */);\n\t\t\tthis.processCommits(\n\t\t\t\tmessagesSessionId,\n\t\t\t\tbrand(envelope.sequenceNumber),\n\t\t\t\tbrand(envelope.referenceSequenceNumber),\n\t\t\t\tlocal,\n\t\t\t\tbranch,\n\t\t\t\tcommits,\n\t\t\t);\n\n\t\t\tcommits.length = 0;\n\t\t\tbranchId = undefined;\n\t\t};\n\n\t\t// Get a list of all the commits from the messages.\n\t\tfor (const messageContent of messagesContent) {\n\t\t\t// Empty context object is passed in, as our decode function is schema-agnostic.\n\t\t\tconst message = this.messageCodec.decode(messageContent.contents, {\n\t\t\t\tidCompressor: this.idCompressor,\n\t\t\t});\n\n\t\t\tif (messagesSessionId !== undefined) {\n\t\t\t\tassert(\n\t\t\t\t\tmessagesSessionId === message.sessionId,\n\t\t\t\t\t0xad9 /* All messages in a bunch must have the same session ID */,\n\t\t\t\t);\n\t\t\t}\n\t\t\tmessagesSessionId = message.sessionId;\n\n\t\t\tconst type = message.type;\n\t\t\tswitch (type) {\n\t\t\t\tcase \"commit\": {\n\t\t\t\t\tif (branchId !== undefined && message.branchId !== branchId) {\n\t\t\t\t\t\tprocessBunch(branchId);\n\t\t\t\t\t}\n\n\t\t\t\t\tbranchId = message.branchId;\n\t\t\t\t\tcommits.push(message.commit);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"branch\": {\n\t\t\t\t\tif (branchId !== undefined) {\n\t\t\t\t\t\tprocessBunch(branchId);\n\t\t\t\t\t}\n\t\t\t\t\tthis.editManager.sequenceBranchCreation(\n\t\t\t\t\t\tmessagesSessionId,\n\t\t\t\t\t\tbrand(envelope.referenceSequenceNumber),\n\t\t\t\t\t\tmessage.branchId,\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tunreachableCase(type);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (branchId !== undefined) {\n\t\t\tprocessBunch(branchId);\n\t\t}\n\n\t\tthis.editManager.advanceMinimumSequenceNumber(brand(envelope.minimumSequenceNumber));\n\t}\n\n\tprivate processCommits(\n\t\tsessionId: SessionId,\n\t\tsequenceNumber: SeqNumber,\n\t\treferenceSequenceNumber: SeqNumber,\n\t\tisLocal: boolean,\n\t\tbranchId: BranchId,\n\t\tcommits: readonly GraphCommit<TChange>[],\n\t): void {\n\t\tthis.editManager.addSequencedChanges(\n\t\t\tcommits,\n\t\t\tsessionId,\n\t\t\tsequenceNumber,\n\t\t\treferenceSequenceNumber,\n\t\t\tbranchId,\n\t\t);\n\n\t\t// Update the resubmit machine for each commit applied.\n\t\tfor (const commit of commits) {\n\t\t\tthis.tryGetResubmitMachine(branchId)?.onSequencedCommitApplied(commit.revision, isLocal);\n\t\t}\n\t}\n\n\tpublic getLocalBranch(): SharedTreeBranch<TEditor, TChange> {\n\t\treturn this.editManager.getLocalBranch(\"main\");\n\t}\n\n\tpublic getSharedBranchIds(): string[] {\n\t\treturn this.editManager\n\t\t\t.getSharedBranchIds()\n\t\t\t.filter((id): id is SessionSpaceCompressedId => id !== \"main\")\n\t\t\t.map((id) => this.idCompressor.decompress(id));\n\t}\n\tpublic createSharedBranch(): string {\n\t\tconst branchId = this.idCompressor.generateCompressedId();\n\t\tthis.addBranch(branchId);\n\t\tthis.submitBranchCreation(branchId);\n\t\treturn this.idCompressor.decompress(branchId);\n\t}\n\n\tprotected addBranch(branchId: BranchId): void {\n\t\tthis.editManager.addNewBranch(branchId);\n\t}\n\n\tpublic getSharedBranch(branchId: BranchId): SharedTreeBranch<TEditor, TChange> {\n\t\treturn this.editManager.getLocalBranch(branchId);\n\t}\n\n\tpublic didAttach(): void {\n\t\tthis.detachedRevision = undefined;\n\t}\n\n\tpublic reSubmitCore(content: JsonCompatibleReadOnly, localOpMetadata: unknown): void {\n\t\t// Empty context object is passed in, as our decode function is schema-agnostic.\n\t\tconst message = this.messageCodec.decode(this.serializer.decode(content), {\n\t\t\tidCompressor: this.idCompressor,\n\t\t});\n\n\t\tconst type = message.type;\n\t\tswitch (type) {\n\t\t\tcase \"commit\": {\n\t\t\t\tconst {\n\t\t\t\t\tcommit: { revision },\n\t\t\t\t\tbranchId,\n\t\t\t\t} = message;\n\n\t\t\t\tconst resubmitMachine = this.getResubmitMachine(branchId);\n\n\t\t\t\tconst getLocalCommits = (): GraphCommit<TChange>[] => {\n\t\t\t\t\tconst localCommits = this.editManager.getLocalCommits(branchId);\n\t\t\t\t\tconst revisionIndex = localCommits.findIndex((c) => c.revision === revision);\n\t\t\t\t\tassert(revisionIndex >= 0, 0xbdb /* revision must exist in local commits */);\n\t\t\t\t\treturn localCommits.slice(revisionIndex);\n\t\t\t\t};\n\n\t\t\t\tassert(\n\t\t\t\t\tisClonableSchemaPolicy(localOpMetadata),\n\t\t\t\t\t0x95e /* Local metadata must contain schema and policy. */,\n\t\t\t\t);\n\n\t\t\t\tconst enrichedCommit = resubmitMachine.getEnrichedCommit(revision, getLocalCommits);\n\t\t\t\tif (enrichedCommit !== undefined) {\n\t\t\t\t\tthis.submitCommit(branchId, enrichedCommit, localOpMetadata, true);\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"branch\": {\n\t\t\t\tthis.submitBranchCreation(message.branchId);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tunreachableCase(type);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic rollback(content: JsonCompatibleReadOnly, localOpMetadata: unknown): void {\n\t\t// Empty context object is passed in, as our decode function is schema-agnostic.\n\t\tconst message = this.messageCodec.decode(this.serializer.decode(content), {\n\t\t\tidCompressor: this.idCompressor,\n\t\t});\n\n\t\tconst type = message.type;\n\t\tswitch (type) {\n\t\t\tcase \"commit\": {\n\t\t\t\tconst {\n\t\t\t\t\tcommit: { revision },\n\t\t\t\t\tbranchId,\n\t\t\t\t} = message;\n\t\t\t\tconst branch = this.editManager.getLocalBranch(branchId);\n\t\t\t\tconst head = branch.getHead();\n\t\t\t\tassert(head.revision === revision, 0xc6b /* Can only rollback latest commit */);\n\t\t\t\tconst newHead = head.parent ?? fail(0xc6c /* must have parent */);\n\t\t\t\tbranch.removeAfter(newHead);\n\t\t\t\tthis.getResubmitMachine(branchId).onCommitRollback(head);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"branch\": {\n\t\t\t\tthis.editManager.removeBranch(message.branchId);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tunreachableCase(type);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic applyStashedOp(content: JsonCompatibleReadOnly): void {\n\t\t// Empty context object is passed in, as our decode function is schema-agnostic.\n\t\tconst message = this.messageCodec.decode(this.serializer.decode(content), {\n\t\t\tidCompressor: this.idCompressor,\n\t\t});\n\n\t\tconst type = message.type;\n\t\tswitch (type) {\n\t\t\tcase \"commit\": {\n\t\t\t\tconst {\n\t\t\t\t\tcommit: { revision, change },\n\t\t\t\t\tbranchId,\n\t\t\t\t} = message;\n\t\t\t\tthis.editManager.getLocalBranch(branchId).apply({ change, revision });\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"branch\": {\n\t\t\t\tthis.editManager.addNewBranch(message.branchId);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tunreachableCase(type);\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected registerSharedBranchForEditing(\n\t\tbranchId: BranchId,\n\t\tenricher: ChangeEnricher<TChange>,\n\t\tresubmitMachine?: ResubmitMachine<TChange>,\n\t): void {\n\t\tconst commitEnricher = new BranchCommitEnricher(enricher);\n\t\tassert(!this.enrichers.has(branchId), 0xc6d /* Branch already registered */);\n\t\tthis.enrichers.set(branchId, {\n\t\t\tenricher: commitEnricher,\n\t\t\tresubmitMachine: resubmitMachine ?? new DefaultResubmitMachine(enricher),\n\t\t});\n\t}\n\n\tprivate getResubmitMachine(branchId: BranchId): ResubmitMachine<TChange> {\n\t\treturn this.getEnricherState(branchId).resubmitMachine;\n\t}\n\n\tprivate tryGetResubmitMachine(branchId: BranchId): ResubmitMachine<TChange> | undefined {\n\t\treturn this.tryGetEnricherState(branchId)?.resubmitMachine;\n\t}\n\n\tpublic getCommitEnricher(branchId: BranchId): BranchCommitEnricher<TChange> {\n\t\treturn this.getEnricherState(branchId).enricher;\n\t}\n\n\tprivate getEnricherState(branchId: BranchId): EnricherState<TChange> {\n\t\treturn (\n\t\t\tthis.tryGetEnricherState(branchId) ??\n\t\t\tfail(0xc6e /* Expected to have a resubmit machine for this branch */)\n\t\t);\n\t}\n\n\tprivate tryGetEnricherState(branchId: BranchId): EnricherState<TChange> | undefined {\n\t\treturn this.enrichers.get(branchId);\n\t}\n}\n\ninterface EnricherState<TChange> {\n\treadonly enricher: BranchCommitEnricher<TChange>;\n\treadonly resubmitMachine: ResubmitMachine<TChange>;\n}\n\nfunction isClonableSchemaPolicy(\n\tmaybeSchemaPolicy: unknown,\n): maybeSchemaPolicy is ClonableSchemaAndPolicy {\n\tconst schemaAndPolicy = maybeSchemaPolicy as ClonableSchemaAndPolicy;\n\treturn schemaAndPolicy.schema !== undefined && schemaAndPolicy.policy !== undefined;\n}\n\n/**\n * Compose an {@link IChannelStorageService} which prefixes all paths before forwarding them to the original service\n */\nfunction scopeStorageService(\n\tservice: IChannelStorageService,\n\t...pathElements: string[]\n): IChannelStorageService {\n\tconst scope = `${pathElements.join(\"/\")}/`;\n\n\treturn {\n\t\tasync readBlob(path: string): Promise<ArrayBufferLike> {\n\t\t\treturn service.readBlob(`${scope}${path}`);\n\t\t},\n\t\tasync contains(path) {\n\t\t\treturn service.contains(`${scope}${path}`);\n\t\t},\n\t\tasync list(path) {\n\t\t\treturn service.list(`${scope}${path}`);\n\t\t},\n\t\tgetSnapshotTree(): ISnapshotTree | undefined {\n\t\t\tconst snapshotTree = service.getSnapshotTree();\n\t\t\tif (snapshotTree === undefined) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tlet scopedTree = snapshotTree;\n\t\t\tfor (const element of pathElements) {\n\t\t\t\tconst tree = scopedTree.trees[element];\n\t\t\t\tassert(\n\t\t\t\t\ttree !== undefined,\n\t\t\t\t\t0xc20 /* snapshot tree not found for one of tree's summarizables */,\n\t\t\t\t);\n\t\t\t\tscopedTree = tree;\n\t\t\t}\n\t\t\treturn scopedTree;\n\t\t},\n\t};\n}\n"]}
|
|
@@ -21,15 +21,17 @@ export declare enum TransactionResult {
|
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
23
|
* A simple API for managing transactions.
|
|
24
|
+
* @typeParam TOptions - The type of the options passed to {@link Transactor.start | start}.
|
|
24
25
|
*/
|
|
25
|
-
export interface Transactor {
|
|
26
|
+
export interface Transactor<TOptions> {
|
|
26
27
|
/**
|
|
27
28
|
* Start a new transaction.
|
|
29
|
+
* @param options - Options controlling how the transaction is committed.
|
|
28
30
|
* @remarks
|
|
29
31
|
* If a transaction is already in progress when this new transaction starts, then this transaction will be "nested" inside of it,
|
|
30
32
|
* i.e. the outer transaction will still be in progress after this new transaction is committed or aborted.
|
|
31
33
|
*/
|
|
32
|
-
start(): void;
|
|
34
|
+
start(options?: TOptions): void;
|
|
33
35
|
/**
|
|
34
36
|
* Close this transaction by squashing its edits and committing them as a single edit.
|
|
35
37
|
* @remarks If this is the root checkout and there are no ongoing transactions remaining, the squashed edit will be submitted to Fluid.
|
|
@@ -68,8 +70,9 @@ export interface TransactionEvents {
|
|
|
68
70
|
}
|
|
69
71
|
/**
|
|
70
72
|
* Callbacks for transaction lifecycle events.
|
|
73
|
+
* @typeParam TOptions - The type of the options passed to {@link Transactor.start | start}.
|
|
71
74
|
*/
|
|
72
|
-
export interface Callbacks {
|
|
75
|
+
export interface Callbacks<TOptions> {
|
|
73
76
|
/**
|
|
74
77
|
* Called when the current transaction is popped from the {@link TransactionStack | stack}.
|
|
75
78
|
*/
|
|
@@ -83,24 +86,28 @@ export interface Callbacks {
|
|
|
83
86
|
* Put another way, a transaction always results in a call to exactly one `OnPush` callback - whichever is closest to the transaction.
|
|
84
87
|
* The event "bubbles up" to (and no further past) its first registered callback.
|
|
85
88
|
*/
|
|
86
|
-
readonly onPush?: OnPush
|
|
89
|
+
readonly onPush?: OnPush<TOptions>;
|
|
87
90
|
}
|
|
88
91
|
/**
|
|
89
92
|
* A function that will be called when a transaction is pushed to the {@link TransactionStack | stack}.
|
|
90
93
|
* @remarks This function may return other functions that will be called when the transaction is popped from the stack or a nested transaction is pushed onto the stack.
|
|
91
94
|
* This function runs just before the transaction begins, so if this is the beginning of an outermost (not nested) transaction then {@link Transactor.size} will be 0 during its execution.
|
|
95
|
+
* @typeParam TOptions - The type of the options passed to {@link Transactor.start | start}.
|
|
96
|
+
* @param options - The options passed to {@link Transactor.start | start}.
|
|
92
97
|
*/
|
|
93
|
-
export type OnPush = () => Callbacks | void;
|
|
98
|
+
export type OnPush<TOptions> = (options?: TOptions) => Callbacks<TOptions> | void;
|
|
94
99
|
/**
|
|
95
100
|
* A function that will be called when a transaction is popped from the {@link TransactionStack | stack}.
|
|
96
101
|
* @remarks This function runs just after the transaction ends, so if this is the end of an outermost (not nested) transaction then {@link Transactor.size} will be 0 during its execution.
|
|
102
|
+
* @param result - The result of the transaction.
|
|
97
103
|
*/
|
|
98
104
|
export type OnPop = (result: TransactionResult) => void;
|
|
99
105
|
/**
|
|
100
106
|
* An implementation of {@link Transactor} that uses a stack to manage transactions.
|
|
101
107
|
* @remarks Using a stack allows transactions to nest - i.e. an inner transaction may be started while an outer transaction is already in progress.
|
|
108
|
+
* @typeParam TOptions - The type of the options passed to {@link Transactor.start | start}.
|
|
102
109
|
*/
|
|
103
|
-
export declare class TransactionStack implements Transactor
|
|
110
|
+
export declare class TransactionStack<TOptions> implements Transactor<TOptions>, IDisposable {
|
|
104
111
|
#private;
|
|
105
112
|
get events(): Listenable<TransactionEvents>;
|
|
106
113
|
get disposed(): boolean;
|
|
@@ -108,9 +115,9 @@ export declare class TransactionStack implements Transactor, IDisposable {
|
|
|
108
115
|
* Construct a new {@link TransactionStack}.
|
|
109
116
|
* @param onPush - A {@link OnPush | function} that will be called when a transaction begins.
|
|
110
117
|
*/
|
|
111
|
-
constructor(onPush?: OnPush);
|
|
118
|
+
constructor(onPush?: OnPush<TOptions>);
|
|
112
119
|
get size(): number;
|
|
113
|
-
start(): void;
|
|
120
|
+
start(options?: TOptions): void;
|
|
114
121
|
commit(): void;
|
|
115
122
|
abort(): void;
|
|
116
123
|
dispose(): void;
|
|
@@ -125,13 +132,77 @@ export declare class TransactionStack implements Transactor, IDisposable {
|
|
|
125
132
|
* This will be `undefined` if no such change is necessary.
|
|
126
133
|
*/
|
|
127
134
|
export type OnPopWithViewUpdate<TChange> = (result: TransactionResult, viewUpdate: TChange | undefined) => void;
|
|
135
|
+
/**
|
|
136
|
+
* Informs the caller of {@link ChangeProcessor} what context it should be invoked for.
|
|
137
|
+
* @remarks This is purely a recommendation to the caller of the processor and
|
|
138
|
+
* not a strict rule.
|
|
139
|
+
*/
|
|
140
|
+
export declare enum ChangeProcessorApplicability {
|
|
141
|
+
/**
|
|
142
|
+
* Invoke the processor if no later (outer) instance of this change processor
|
|
143
|
+
* may be applied to related changes before changes are "visible".
|
|
144
|
+
*
|
|
145
|
+
* @remarks
|
|
146
|
+
* This designation is meant for processors that only need to be applied
|
|
147
|
+
* once to a set of related changes independent of scope or nesting,
|
|
148
|
+
* with the understanding that the processor should still be applied no
|
|
149
|
+
* later than when the changes are "visible" (e.g. committed to a branch).
|
|
150
|
+
* For example, a processor that removes extraneous information from a
|
|
151
|
+
* change (e.g. data for nodes that were both created and removed within a
|
|
152
|
+
* transaction) only needs to be applied once to the squashed change
|
|
153
|
+
* produced by the outermost transaction.
|
|
154
|
+
*/
|
|
155
|
+
IfOutermost = 0,
|
|
156
|
+
/**
|
|
157
|
+
* Invoke the processor in all contexts.
|
|
158
|
+
*/
|
|
159
|
+
Always = 1
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Processes a change altering its representation.
|
|
163
|
+
*
|
|
164
|
+
* @remarks
|
|
165
|
+
* A change processor receives a change and returns a change with the
|
|
166
|
+
* same observable effect but otherwise transformed.
|
|
167
|
+
*
|
|
168
|
+
* Currently this is the internal counterpart of the type-erased post-processor
|
|
169
|
+
* exposed on the public transaction API. The public boundary type-erases this
|
|
170
|
+
* (see the conversion helpers in the `shared-tree` layer) so that its internal
|
|
171
|
+
* change representation does not leak into the public API.
|
|
172
|
+
*/
|
|
173
|
+
export interface ChangeProcessor<TChange> {
|
|
174
|
+
/**
|
|
175
|
+
* Informs what context it should be invoked for.
|
|
176
|
+
*/
|
|
177
|
+
readonly applicability: ChangeProcessorApplicability;
|
|
178
|
+
/**
|
|
179
|
+
* Processes the given change, returning a change with the same observable effect.
|
|
180
|
+
*/
|
|
181
|
+
readonly processChange: (change: TChange) => TChange;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Options for {@link Transactor.start | starting} a transaction.
|
|
185
|
+
*/
|
|
186
|
+
export interface SquashingTransactionOptions<TChange> {
|
|
187
|
+
/**
|
|
188
|
+
* An optional {@link ChangeProcessor} applied to the squashed change produced when a transaction that was started
|
|
189
|
+
* with this option is committed.
|
|
190
|
+
*
|
|
191
|
+
* @remarks
|
|
192
|
+
* When omitted, the transaction's edits are squashed without any post-processing.
|
|
193
|
+
*
|
|
194
|
+
* How often the processor is invoked across nested transactions is governed by its
|
|
195
|
+
* {@link ChangeProcessor.applicability | applicability}.
|
|
196
|
+
*/
|
|
197
|
+
readonly postProcessor?: ChangeProcessor<TChange>;
|
|
198
|
+
}
|
|
128
199
|
/**
|
|
129
200
|
* An implementation of {@link Transactor} that {@link TransactionStack | uses a stack} and a {@link SharedTreeBranch | branch} to manage transactions.
|
|
130
201
|
* @remarks Given a branch, this class will fork the branch when a transaction begins and squash the forked branch back into the original branch when the transaction ends.
|
|
131
202
|
* This class provides conveniences for interacting with the {@link SquashingTransactionStack.activeBranch | active branch} in a way that is stable across transaction boundaries.
|
|
132
203
|
* For example, see {@link SquashingTransactionStack.activeBranchEditor | activeBranchEditor} and {@link SquashingTransactionStack.activeBranchEvents | activeBranchEvents}.
|
|
133
204
|
*/
|
|
134
|
-
export declare class SquashingTransactionStack<TEditor extends ChangeFamilyEditor, TChange> extends TransactionStack {
|
|
205
|
+
export declare class SquashingTransactionStack<TEditor extends ChangeFamilyEditor, TChange> extends TransactionStack<SquashingTransactionOptions<TChange>> {
|
|
135
206
|
#private;
|
|
136
207
|
readonly branch: SharedTreeBranch<TEditor, TChange>;
|
|
137
208
|
/**
|
|
@@ -154,6 +225,10 @@ export declare class SquashingTransactionStack<TEditor extends ChangeFamilyEdito
|
|
|
154
225
|
* Construct a new {@link SquashingTransactionStack}.
|
|
155
226
|
* @param branch - The {@link SquashingTransactionStack.branch | branch} that will be forked off of when a transaction begins.
|
|
156
227
|
* @param onPush - A function that will be called when a transaction is pushed to the {@link TransactionStack | stack}.
|
|
228
|
+
* @remarks To post-process the squashed change produced when a transaction is committed (for example, to "minimize"
|
|
229
|
+
* it so that it contains no extraneous information), start the transaction with a
|
|
230
|
+
* {@link SquashingTransactionOptions.postProcessor | post-processor}. The post-processor is injected via the transaction
|
|
231
|
+
* options rather than baked into this stack, so different transactions may supply different post-processors (or none).
|
|
157
232
|
*/
|
|
158
233
|
constructor(branch: SharedTreeBranch<TEditor, TChange>, mintRevisionTag: () => RevisionTag, onPush?: () => OnPopWithViewUpdate<TChange> | void);
|
|
159
234
|
/** Updates the transaction branch (and therefore the active branch) and rebinds the branch events. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../src/shared-tree-core/transaction.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAI/E,OAAO,EAON,KAAK,kBAAkB,EAEvB,KAAK,WAAW,EAChB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAE5E;;;GAGG;AACH,oBAAY,iBAAiB;IAC5B;;OAEG;IACH,KAAK,IAAA;IACL;;OAEG;IACH,MAAM,IAAA;CACN;AAED
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../src/shared-tree-core/transaction.ts"],"names":[],"mappings":"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"}
|