@fluidframework/tree 2.102.0 → 2.110.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +65 -0
- package/api-report/tree.alpha.api.md +12 -3
- package/api-report/tree.beta.api.md +11 -3
- package/api-report/tree.legacy.beta.api.md +11 -3
- package/dist/codec/versioned/format.d.ts +5 -4
- package/dist/codec/versioned/format.d.ts.map +1 -1
- package/dist/codec/versioned/format.js +4 -3
- package/dist/codec/versioned/format.js.map +1 -1
- package/dist/core/rebase/types.d.ts +4 -3
- package/dist/core/rebase/types.d.ts.map +1 -1
- package/dist/core/rebase/types.js +5 -4
- package/dist/core/rebase/types.js.map +1 -1
- package/dist/core/schema-stored/formatV1.d.ts +16 -15
- package/dist/core/schema-stored/formatV1.d.ts.map +1 -1
- package/dist/core/schema-stored/formatV1.js +9 -8
- package/dist/core/schema-stored/formatV1.js.map +1 -1
- package/dist/core/schema-stored/formatV2.d.ts +29 -28
- package/dist/core/schema-stored/formatV2.d.ts.map +1 -1
- package/dist/core/schema-stored/formatV2.js +11 -10
- 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/tree/anchorSet.js +4 -8
- package/dist/core/tree/anchorSet.js.map +1 -1
- package/dist/core/tree/detachedFieldIndexFormatCommon.d.ts +11 -10
- package/dist/core/tree/detachedFieldIndexFormatCommon.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndexFormatCommon.js +11 -10
- package/dist/core/tree/detachedFieldIndexFormatCommon.js.map +1 -1
- package/dist/core/tree/detachedFieldIndexFormatV2.d.ts +7 -6
- package/dist/core/tree/detachedFieldIndexFormatV2.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndexFormatV2.js +3 -2
- package/dist/core/tree/detachedFieldIndexFormatV2.js.map +1 -1
- package/dist/core/tree/persistedTreeTextFormat.d.ts +19 -18
- package/dist/core/tree/persistedTreeTextFormat.d.ts.map +1 -1
- package/dist/core/tree/persistedTreeTextFormat.js +11 -10
- package/dist/core/tree/persistedTreeTextFormat.js.map +1 -1
- package/dist/entrypoints/internal.js +2 -15
- package/dist/entrypoints/internal.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkTree.js +1 -1
- package/dist/feature-libraries/chunked-forest/chunkTree.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/format/formatGeneric.d.ts +13 -12
- package/dist/feature-libraries/chunked-forest/codec/format/formatGeneric.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/format/formatGeneric.js +14 -13
- package/dist/feature-libraries/chunked-forest/codec/format/formatGeneric.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/format/formatV1.d.ts +36 -35
- package/dist/feature-libraries/chunked-forest/codec/format/formatV1.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/format/formatV1.js +19 -18
- package/dist/feature-libraries/chunked-forest/codec/format/formatV1.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/format/formatV2.d.ts +26 -25
- package/dist/feature-libraries/chunked-forest/codec/format/formatV2.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/format/formatV2.js +5 -4
- package/dist/feature-libraries/chunked-forest/codec/format/formatV2.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/format/formatVText.d.ts +24 -23
- package/dist/feature-libraries/chunked-forest/codec/format/formatVText.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/format/formatVText.js +8 -7
- package/dist/feature-libraries/chunked-forest/codec/format/formatVText.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/uniformChunk.d.ts +66 -14
- package/dist/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/uniformChunk.js +101 -36
- package/dist/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.js +36 -14
- package/dist/feature-libraries/default-schema/defaultEditBuilder.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/formatCommon.d.ts +6 -5
- package/dist/feature-libraries/forest-summary/formatCommon.d.ts.map +1 -1
- package/dist/feature-libraries/forest-summary/formatCommon.js +4 -3
- package/dist/feature-libraries/forest-summary/formatCommon.js.map +1 -1
- package/dist/feature-libraries/index.js +2 -24
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/modular-schema/genericFieldKindFormat.d.ts +4 -3
- package/dist/feature-libraries/modular-schema/genericFieldKindFormat.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/genericFieldKindFormat.js +4 -3
- package/dist/feature-libraries/modular-schema/genericFieldKindFormat.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.d.ts +45 -44
- package/dist/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFormatV1.js +26 -25
- package/dist/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFormatV2.d.ts +23 -22
- package/dist/feature-libraries/modular-schema/modularChangeFormatV2.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFormatV2.js +7 -6
- 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.d.ts +9 -8
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts.map +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV1.js +9 -8
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV1.js.map +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts +14 -13
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts.map +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV2.js +12 -11
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV2.js.map +1 -1
- package/dist/feature-libraries/schema-edits/schemaChangeFormat.d.ts +5 -4
- package/dist/feature-libraries/schema-edits/schemaChangeFormat.d.ts.map +1 -1
- package/dist/feature-libraries/schema-edits/schemaChangeFormat.js +3 -2
- package/dist/feature-libraries/schema-edits/schemaChangeFormat.js.map +1 -1
- package/dist/feature-libraries/schema-index/formatV1.d.ts +15 -14
- package/dist/feature-libraries/schema-index/formatV1.d.ts.map +1 -1
- package/dist/feature-libraries/schema-index/formatV1.js +5 -4
- package/dist/feature-libraries/schema-index/formatV1.js.map +1 -1
- package/dist/feature-libraries/schema-index/formatV2.d.ts +20 -19
- package/dist/feature-libraries/schema-index/formatV2.d.ts.map +1 -1
- package/dist/feature-libraries/schema-index/formatV2.js +5 -4
- package/dist/feature-libraries/schema-index/formatV2.js.map +1 -1
- package/dist/feature-libraries/sequence-field/compose.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/compose.js +1 -3
- package/dist/feature-libraries/sequence-field/compose.js.map +1 -1
- package/dist/feature-libraries/sequence-field/formatV1.d.ts +283 -282
- package/dist/feature-libraries/sequence-field/formatV1.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/formatV1.js +41 -40
- package/dist/feature-libraries/sequence-field/formatV1.js.map +1 -1
- package/dist/feature-libraries/sequence-field/formatV2.d.ts +180 -179
- package/dist/feature-libraries/sequence-field/formatV2.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/formatV2.js +33 -32
- package/dist/feature-libraries/sequence-field/formatV2.js.map +1 -1
- package/dist/feature-libraries/sequence-field/formatV3.d.ts +126 -125
- package/dist/feature-libraries/sequence-field/formatV3.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/formatV3.js +5 -4
- package/dist/feature-libraries/sequence-field/formatV3.js.map +1 -1
- package/dist/index.js +2 -24
- 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/schematizingTreeView.d.ts +1 -0
- 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 +2 -3
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +6 -45
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/sharedTreeChangeFormat.d.ts +8 -7
- package/dist/shared-tree/sharedTreeChangeFormat.d.ts.map +1 -1
- package/dist/shared-tree/sharedTreeChangeFormat.js +6 -5
- package/dist/shared-tree/sharedTreeChangeFormat.js.map +1 -1
- package/dist/shared-tree/treeCheckout.d.ts +14 -5
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +106 -136
- package/dist/shared-tree/treeCheckout.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/editManager.d.ts +2 -2
- package/dist/shared-tree-core/editManager.d.ts.map +1 -1
- package/dist/shared-tree-core/editManager.js.map +1 -1
- package/dist/shared-tree-core/editManagerFormatCommons.d.ts +35 -34
- package/dist/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerFormatCommons.js +17 -16
- package/dist/shared-tree-core/editManagerFormatCommons.js.map +1 -1
- package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts +15 -15
- package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerFormatV1toV4.js +11 -10
- package/dist/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
- package/dist/shared-tree-core/editManagerFormatVSharedBranches.d.ts +40 -40
- package/dist/shared-tree-core/editManagerFormatVSharedBranches.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerFormatVSharedBranches.js +5 -4
- package/dist/shared-tree-core/editManagerFormatVSharedBranches.js.map +1 -1
- package/dist/shared-tree-core/messageCodecVSharedBranches.d.ts.map +1 -1
- package/dist/shared-tree-core/messageCodecVSharedBranches.js +3 -2
- package/dist/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
- package/dist/shared-tree-core/messageFormatV1ToV4.d.ts +5 -5
- package/dist/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
- package/dist/shared-tree-core/messageFormatV1ToV4.js +9 -8
- package/dist/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
- package/dist/shared-tree-core/messageFormatVSharedBranches.d.ts +7 -7
- package/dist/shared-tree-core/messageFormatVSharedBranches.d.ts.map +1 -1
- package/dist/shared-tree-core/messageFormatVSharedBranches.js +7 -6
- package/dist/shared-tree-core/messageFormatVSharedBranches.js.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.js +6 -43
- package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/dist/shared-tree-core/transaction.js +20 -30
- package/dist/shared-tree-core/transaction.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.js +2 -24
- package/dist/simple-tree/api/snapshotCompatibilityChecker.js.map +1 -1
- package/dist/simple-tree/api/tree.d.ts +10 -0
- package/dist/simple-tree/api/tree.d.ts.map +1 -1
- package/dist/simple-tree/api/tree.js.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.d.ts +5 -0
- package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js +119 -105
- package/dist/simple-tree/core/treeNodeKernel.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/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.d.ts +121 -120
- package/dist/simple-tree/simpleSchemaFormatV1.d.ts.map +1 -1
- package/dist/simple-tree/simpleSchemaFormatV1.js +32 -31
- 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/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/index.d.ts +1 -1
- package/dist/util/index.d.ts.map +1 -1
- package/dist/util/index.js +3 -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.d.ts +1 -1
- package/dist/util/typeboxBrand.d.ts.map +1 -1
- package/dist/util/typeboxBrand.js +4 -3
- package/dist/util/typeboxBrand.js.map +1 -1
- package/dist/util/utils.d.ts +2 -2
- package/dist/util/utils.d.ts.map +1 -1
- package/dist/util/utils.js +3 -2
- package/dist/util/utils.js.map +1 -1
- package/eslint.config.mts +14 -0
- package/lib/codec/versioned/format.d.ts +5 -4
- package/lib/codec/versioned/format.d.ts.map +1 -1
- package/lib/codec/versioned/format.js +1 -1
- package/lib/codec/versioned/format.js.map +1 -1
- package/lib/core/rebase/types.d.ts +4 -3
- package/lib/core/rebase/types.d.ts.map +1 -1
- package/lib/core/rebase/types.js +1 -1
- package/lib/core/rebase/types.js.map +1 -1
- package/lib/core/schema-stored/formatV1.d.ts +16 -15
- package/lib/core/schema-stored/formatV1.d.ts.map +1 -1
- package/lib/core/schema-stored/formatV1.js +1 -1
- package/lib/core/schema-stored/formatV1.js.map +1 -1
- package/lib/core/schema-stored/formatV2.d.ts +29 -28
- package/lib/core/schema-stored/formatV2.d.ts.map +1 -1
- package/lib/core/schema-stored/formatV2.js +1 -1
- package/lib/core/schema-stored/formatV2.js.map +1 -1
- package/lib/core/tree/anchorSet.js +1 -5
- package/lib/core/tree/anchorSet.js.map +1 -1
- package/lib/core/tree/detachedFieldIndexFormatCommon.d.ts +11 -10
- package/lib/core/tree/detachedFieldIndexFormatCommon.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndexFormatCommon.js +1 -1
- package/lib/core/tree/detachedFieldIndexFormatCommon.js.map +1 -1
- package/lib/core/tree/detachedFieldIndexFormatV2.d.ts +7 -6
- package/lib/core/tree/detachedFieldIndexFormatV2.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndexFormatV2.js +1 -1
- package/lib/core/tree/detachedFieldIndexFormatV2.js.map +1 -1
- package/lib/core/tree/persistedTreeTextFormat.d.ts +19 -18
- package/lib/core/tree/persistedTreeTextFormat.d.ts.map +1 -1
- package/lib/core/tree/persistedTreeTextFormat.js +1 -1
- package/lib/core/tree/persistedTreeTextFormat.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkTree.js +1 -1
- package/lib/feature-libraries/chunked-forest/chunkTree.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/format/formatGeneric.d.ts +13 -12
- package/lib/feature-libraries/chunked-forest/codec/format/formatGeneric.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format/formatGeneric.js +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format/formatGeneric.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format/formatV1.d.ts +36 -35
- package/lib/feature-libraries/chunked-forest/codec/format/formatV1.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format/formatV1.js +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format/formatV1.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format/formatV2.d.ts +26 -25
- package/lib/feature-libraries/chunked-forest/codec/format/formatV2.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format/formatV2.js +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format/formatV2.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format/formatVText.d.ts +24 -23
- package/lib/feature-libraries/chunked-forest/codec/format/formatVText.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format/formatVText.js +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format/formatVText.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/uniformChunk.d.ts +66 -14
- package/lib/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/uniformChunk.js +101 -36
- package/lib/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.js +36 -14
- package/lib/feature-libraries/default-schema/defaultEditBuilder.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/formatCommon.d.ts +6 -5
- package/lib/feature-libraries/forest-summary/formatCommon.d.ts.map +1 -1
- package/lib/feature-libraries/forest-summary/formatCommon.js +1 -1
- package/lib/feature-libraries/forest-summary/formatCommon.js.map +1 -1
- package/lib/feature-libraries/modular-schema/genericFieldKindFormat.d.ts +4 -3
- package/lib/feature-libraries/modular-schema/genericFieldKindFormat.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/genericFieldKindFormat.js +1 -1
- package/lib/feature-libraries/modular-schema/genericFieldKindFormat.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/modularChangeFormatV1.d.ts +45 -44
- package/lib/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFormatV1.js +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFormatV2.d.ts +23 -22
- package/lib/feature-libraries/modular-schema/modularChangeFormatV2.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFormatV2.js +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFormatV2.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/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts +9 -8
- package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts.map +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV1.js +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV1.js.map +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts +14 -13
- package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts.map +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV2.js +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV2.js.map +1 -1
- package/lib/feature-libraries/schema-edits/schemaChangeFormat.d.ts +5 -4
- package/lib/feature-libraries/schema-edits/schemaChangeFormat.d.ts.map +1 -1
- package/lib/feature-libraries/schema-edits/schemaChangeFormat.js +1 -1
- package/lib/feature-libraries/schema-edits/schemaChangeFormat.js.map +1 -1
- package/lib/feature-libraries/schema-index/formatV1.d.ts +15 -14
- package/lib/feature-libraries/schema-index/formatV1.d.ts.map +1 -1
- package/lib/feature-libraries/schema-index/formatV1.js +1 -1
- package/lib/feature-libraries/schema-index/formatV1.js.map +1 -1
- package/lib/feature-libraries/schema-index/formatV2.d.ts +20 -19
- package/lib/feature-libraries/schema-index/formatV2.d.ts.map +1 -1
- package/lib/feature-libraries/schema-index/formatV2.js +1 -1
- package/lib/feature-libraries/schema-index/formatV2.js.map +1 -1
- package/lib/feature-libraries/sequence-field/compose.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/compose.js +1 -3
- package/lib/feature-libraries/sequence-field/compose.js.map +1 -1
- package/lib/feature-libraries/sequence-field/formatV1.d.ts +283 -282
- package/lib/feature-libraries/sequence-field/formatV1.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/formatV1.js +1 -1
- package/lib/feature-libraries/sequence-field/formatV1.js.map +1 -1
- package/lib/feature-libraries/sequence-field/formatV2.d.ts +180 -179
- package/lib/feature-libraries/sequence-field/formatV2.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/formatV2.js +1 -1
- package/lib/feature-libraries/sequence-field/formatV2.js.map +1 -1
- package/lib/feature-libraries/sequence-field/formatV3.d.ts +126 -125
- package/lib/feature-libraries/sequence-field/formatV3.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/formatV3.js +1 -1
- package/lib/feature-libraries/sequence-field/formatV3.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/schematizingTreeView.d.ts +1 -0
- 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 +2 -3
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +2 -41
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/sharedTreeChangeFormat.d.ts +8 -7
- package/lib/shared-tree/sharedTreeChangeFormat.d.ts.map +1 -1
- package/lib/shared-tree/sharedTreeChangeFormat.js +1 -1
- package/lib/shared-tree/sharedTreeChangeFormat.js.map +1 -1
- package/lib/shared-tree/treeCheckout.d.ts +14 -5
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +63 -93
- package/lib/shared-tree/treeCheckout.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/editManager.d.ts +2 -2
- package/lib/shared-tree-core/editManager.d.ts.map +1 -1
- package/lib/shared-tree-core/editManager.js.map +1 -1
- package/lib/shared-tree-core/editManagerFormatCommons.d.ts +35 -34
- package/lib/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerFormatCommons.js +1 -1
- package/lib/shared-tree-core/editManagerFormatCommons.js.map +1 -1
- package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts +15 -15
- package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerFormatV1toV4.js +1 -1
- package/lib/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
- package/lib/shared-tree-core/editManagerFormatVSharedBranches.d.ts +40 -40
- package/lib/shared-tree-core/editManagerFormatVSharedBranches.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerFormatVSharedBranches.js +1 -1
- package/lib/shared-tree-core/editManagerFormatVSharedBranches.js.map +1 -1
- package/lib/shared-tree-core/messageCodecVSharedBranches.d.ts.map +1 -1
- package/lib/shared-tree-core/messageCodecVSharedBranches.js +1 -1
- package/lib/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
- package/lib/shared-tree-core/messageFormatV1ToV4.d.ts +5 -5
- package/lib/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
- package/lib/shared-tree-core/messageFormatV1ToV4.js +1 -1
- package/lib/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
- package/lib/shared-tree-core/messageFormatVSharedBranches.d.ts +7 -7
- package/lib/shared-tree-core/messageFormatVSharedBranches.d.ts.map +1 -1
- package/lib/shared-tree-core/messageFormatVSharedBranches.js +1 -1
- package/lib/shared-tree-core/messageFormatVSharedBranches.js.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.js +1 -38
- package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/lib/shared-tree-core/transaction.js +1 -11
- package/lib/shared-tree-core/transaction.js.map +1 -1
- package/lib/simple-tree/api/tree.d.ts +10 -0
- package/lib/simple-tree/api/tree.d.ts.map +1 -1
- package/lib/simple-tree/api/tree.js.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.d.ts +5 -0
- package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js +36 -23
- package/lib/simple-tree/core/treeNodeKernel.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/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/simple-tree/simpleSchemaFormatV1.d.ts +121 -120
- package/lib/simple-tree/simpleSchemaFormatV1.d.ts.map +1 -1
- package/lib/simple-tree/simpleSchemaFormatV1.js +1 -1
- package/lib/simple-tree/simpleSchemaFormatV1.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/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/index.d.ts +1 -1
- package/lib/util/index.d.ts.map +1 -1
- package/lib/util/index.js +1 -1
- package/lib/util/index.js.map +1 -1
- package/lib/util/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/lib/util/typeboxBrand.d.ts +1 -1
- package/lib/util/typeboxBrand.d.ts.map +1 -1
- package/lib/util/typeboxBrand.js +1 -1
- package/lib/util/typeboxBrand.js.map +1 -1
- package/lib/util/utils.d.ts +2 -2
- package/lib/util/utils.d.ts.map +1 -1
- package/lib/util/utils.js +1 -1
- package/lib/util/utils.js.map +1 -1
- package/package.json +24 -23
- package/src/codec/versioned/format.ts +2 -1
- package/src/core/rebase/types.ts +1 -1
- package/src/core/schema-stored/formatV1.ts +2 -1
- package/src/core/schema-stored/formatV2.ts +2 -1
- package/src/core/tree/detachedFieldIndexFormatCommon.ts +2 -1
- package/src/core/tree/detachedFieldIndexFormatV2.ts +2 -1
- package/src/core/tree/persistedTreeTextFormat.ts +2 -1
- package/src/feature-libraries/chunked-forest/chunkTree.ts +3 -2
- package/src/feature-libraries/chunked-forest/codec/format/formatGeneric.ts +2 -1
- package/src/feature-libraries/chunked-forest/codec/format/formatV1.ts +2 -1
- package/src/feature-libraries/chunked-forest/codec/format/formatV2.ts +2 -1
- package/src/feature-libraries/chunked-forest/codec/format/formatVText.ts +2 -1
- package/src/feature-libraries/chunked-forest/uniformChunk.ts +131 -44
- package/src/feature-libraries/default-schema/defaultEditBuilder.ts +36 -14
- package/src/feature-libraries/forest-summary/formatCommon.ts +2 -1
- package/src/feature-libraries/modular-schema/genericFieldKindFormat.ts +2 -1
- package/src/feature-libraries/modular-schema/modularChangeFamily.ts +14 -47
- package/src/feature-libraries/modular-schema/modularChangeFormatV1.ts +2 -1
- package/src/feature-libraries/modular-schema/modularChangeFormatV2.ts +2 -1
- package/src/feature-libraries/modular-schema/modularChangeTypes.ts +0 -5
- package/src/feature-libraries/optional-field/optionalFieldChangeFormatV1.ts +2 -1
- package/src/feature-libraries/optional-field/optionalFieldChangeFormatV2.ts +2 -1
- package/src/feature-libraries/schema-edits/schemaChangeFormat.ts +2 -1
- package/src/feature-libraries/schema-index/formatV1.ts +2 -1
- package/src/feature-libraries/schema-index/formatV2.ts +2 -1
- package/src/feature-libraries/sequence-field/compose.ts +1 -4
- package/src/feature-libraries/sequence-field/formatV1.ts +2 -1
- package/src/feature-libraries/sequence-field/formatV2.ts +2 -1
- package/src/feature-libraries/sequence-field/formatV3.ts +2 -1
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/schematizingTreeView.ts +4 -0
- package/src/shared-tree/sharedTree.ts +3 -10
- package/src/shared-tree/sharedTreeChangeFormat.ts +2 -1
- package/src/shared-tree/treeCheckout.ts +61 -56
- package/src/shared-tree-core/editManager.ts +2 -2
- package/src/shared-tree-core/editManagerFormatCommons.ts +2 -1
- package/src/shared-tree-core/editManagerFormatV1toV4.ts +2 -1
- package/src/shared-tree-core/editManagerFormatVSharedBranches.ts +2 -1
- package/src/shared-tree-core/messageCodecVSharedBranches.ts +2 -1
- package/src/shared-tree-core/messageFormatV1ToV4.ts +2 -1
- package/src/shared-tree-core/messageFormatVSharedBranches.ts +2 -1
- package/src/simple-tree/api/tree.ts +11 -0
- package/src/simple-tree/core/treeNodeKernel.ts +39 -15
- package/src/simple-tree/simpleSchemaFormatV1.ts +2 -1
- package/src/tableSchema.ts +306 -80
- package/src/util/arrayUtilities.ts +35 -0
- package/src/util/index.ts +2 -0
- package/src/util/rangeMap.ts +108 -9
- package/src/util/typeboxBrand.ts +2 -1
- package/src/util/utils.ts +2 -1
- package/tsconfig.json +5 -0
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import
|
|
6
|
+
import * as Type from "@sinclair/typebox";
|
|
7
|
+
import type { ObjectOptions, Static, TSchema } from "@sinclair/typebox";
|
|
7
8
|
|
|
8
9
|
import { unionOptions } from "../../codec/index.js";
|
|
9
10
|
import { RevisionTagSchema } from "../../core/index.js";
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import
|
|
6
|
+
import * as Type from "@sinclair/typebox";
|
|
7
|
+
import type { ObjectOptions, Static, TSchema } from "@sinclair/typebox";
|
|
7
8
|
|
|
8
9
|
import { unionOptions } from "../../codec/index.js";
|
|
9
10
|
import { RevisionTagSchema } from "../../core/index.js";
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import
|
|
6
|
+
import * as Type from "@sinclair/typebox";
|
|
7
|
+
import type { ObjectOptions, Static, TSchema } from "@sinclair/typebox";
|
|
7
8
|
|
|
8
9
|
import { unionOptions } from "../../codec/index.js";
|
|
9
10
|
|
package/src/packageVersion.ts
CHANGED
|
@@ -529,5 +529,9 @@ export class SchematizingSimpleTreeView<
|
|
|
529
529
|
this.checkout.rebaseOnto(context);
|
|
530
530
|
}
|
|
531
531
|
|
|
532
|
+
public isMissingEditsFrom(context: TreeBranchAlpha): boolean {
|
|
533
|
+
return this.checkout.isMissingEditsFrom(context);
|
|
534
|
+
}
|
|
535
|
+
|
|
532
536
|
// #endregion Branching
|
|
533
537
|
}
|
|
@@ -13,10 +13,7 @@ import type {
|
|
|
13
13
|
IFluidSerializer,
|
|
14
14
|
SharedKernel,
|
|
15
15
|
} from "@fluidframework/shared-object-base/internal";
|
|
16
|
-
import {
|
|
17
|
-
UsageError,
|
|
18
|
-
type ITelemetryLoggerExt,
|
|
19
|
-
} from "@fluidframework/telemetry-utils/internal";
|
|
16
|
+
import { type TelemetryLoggerExt, UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
20
17
|
|
|
21
18
|
import {
|
|
22
19
|
type CodecTree,
|
|
@@ -201,7 +198,7 @@ export class SharedTreeKernel
|
|
|
201
198
|
submitLocalMessage: (content: unknown, localOpMetadata?: unknown) => void,
|
|
202
199
|
lastSequenceNumber: () => number | undefined,
|
|
203
200
|
initialSequenceNumber: number,
|
|
204
|
-
private readonly logger:
|
|
201
|
+
private readonly logger: TelemetryLoggerExt | undefined,
|
|
205
202
|
idCompressor: IIdCompressor,
|
|
206
203
|
optionsParam: SharedTreeOptionsInternal,
|
|
207
204
|
) {
|
|
@@ -320,7 +317,6 @@ export class SharedTreeKernel
|
|
|
320
317
|
chunkCompressionStrategy: options.treeEncodeType,
|
|
321
318
|
logger,
|
|
322
319
|
breaker: this.breaker,
|
|
323
|
-
disposeForksAfterTransaction: options.disposeForksAfterTransaction,
|
|
324
320
|
});
|
|
325
321
|
|
|
326
322
|
this.registerSharedBranchForEditing("main", this.checkout);
|
|
@@ -635,9 +631,7 @@ export interface SharedTreeOptions
|
|
|
635
631
|
|
|
636
632
|
export interface SharedTreeOptionsInternal
|
|
637
633
|
extends SharedTreeOptions,
|
|
638
|
-
Partial<SharedTreeCoreOptionsInternal> {
|
|
639
|
-
disposeForksAfterTransaction?: boolean;
|
|
640
|
-
}
|
|
634
|
+
Partial<SharedTreeCoreOptionsInternal> {}
|
|
641
635
|
|
|
642
636
|
/**
|
|
643
637
|
* Configuration options for SharedTree's internal tree storage.
|
|
@@ -760,7 +754,6 @@ export const defaultSharedTreeOptions: Required<SharedTreeOptionsInternal> = {
|
|
|
760
754
|
minVersionForCollab: FluidClientVersion.v2_0,
|
|
761
755
|
forest: ForestTypeReference,
|
|
762
756
|
treeEncodeType: TreeCompressionStrategy.Compressed,
|
|
763
|
-
disposeForksAfterTransaction: true,
|
|
764
757
|
shouldEncodeIncrementally: defaultIncrementalEncodingPolicy,
|
|
765
758
|
enableSharedBranches: false,
|
|
766
759
|
healUnresolvableIdentifiersOnDecode: false,
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import
|
|
6
|
+
import * as Type from "@sinclair/typebox";
|
|
7
|
+
import type { Static, TSchema } from "@sinclair/typebox";
|
|
7
8
|
|
|
8
9
|
import type { EncodedSchemaChange } from "../feature-libraries/index.js";
|
|
9
10
|
import { JsonCompatibleReadOnlySchema } from "../util/index.js";
|
|
@@ -8,10 +8,7 @@ import type { IFluidHandle, Listenable } from "@fluidframework/core-interfaces/i
|
|
|
8
8
|
import { assert, unreachableCase, fail } from "@fluidframework/core-utils/internal";
|
|
9
9
|
import type { IIdCompressor, SessionId } from "@fluidframework/id-compressor";
|
|
10
10
|
import { isStableId } from "@fluidframework/id-compressor/internal";
|
|
11
|
-
import {
|
|
12
|
-
UsageError,
|
|
13
|
-
type ITelemetryLoggerExt,
|
|
14
|
-
} from "@fluidframework/telemetry-utils/internal";
|
|
11
|
+
import { type TelemetryLoggerExt, UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
15
12
|
|
|
16
13
|
import {
|
|
17
14
|
FluidClientVersion,
|
|
@@ -60,6 +57,7 @@ import {
|
|
|
60
57
|
makeAnonChange,
|
|
61
58
|
type TaggedChange,
|
|
62
59
|
deltaFieldMapHasVisibleChanges,
|
|
60
|
+
findCommonAncestor,
|
|
63
61
|
} from "../core/index.js";
|
|
64
62
|
import {
|
|
65
63
|
type FieldBatchCodec,
|
|
@@ -77,7 +75,6 @@ import {
|
|
|
77
75
|
SquashingTransactionStack,
|
|
78
76
|
SharedTreeBranch,
|
|
79
77
|
TransactionResult as InternalTransactionResult,
|
|
80
|
-
onForkTransitive,
|
|
81
78
|
type SharedTreeBranchChange,
|
|
82
79
|
type Transactor,
|
|
83
80
|
} from "../shared-tree-core/index.js";
|
|
@@ -90,7 +87,6 @@ import {
|
|
|
90
87
|
type ViewableTree,
|
|
91
88
|
type TreeBranch,
|
|
92
89
|
type TreeBranchAlpha,
|
|
93
|
-
type TreeChangeEvents,
|
|
94
90
|
type VerboseTree,
|
|
95
91
|
type VoidTransactionCallbackStatus,
|
|
96
92
|
type TransactionCallbackStatus,
|
|
@@ -309,9 +305,8 @@ export function createTreeCheckout(
|
|
|
309
305
|
fieldBatchCodec?: FieldBatchCodec;
|
|
310
306
|
removedRoots?: DetachedFieldIndex;
|
|
311
307
|
chunkCompressionStrategy?: TreeCompressionStrategy;
|
|
312
|
-
logger?:
|
|
308
|
+
logger?: TelemetryLoggerExt;
|
|
313
309
|
breaker?: Breakable;
|
|
314
|
-
disposeForksAfterTransaction?: boolean;
|
|
315
310
|
codecOptions?: Partial<CodecWriteOptions>;
|
|
316
311
|
},
|
|
317
312
|
): TreeCheckout {
|
|
@@ -358,7 +353,6 @@ export function createTreeCheckout(
|
|
|
358
353
|
args?.removedRoots,
|
|
359
354
|
args?.logger,
|
|
360
355
|
breaker,
|
|
361
|
-
args?.disposeForksAfterTransaction,
|
|
362
356
|
);
|
|
363
357
|
}
|
|
364
358
|
|
|
@@ -528,9 +522,8 @@ export class TreeCheckout implements ITreeCheckout {
|
|
|
528
522
|
idCompressor,
|
|
529
523
|
),
|
|
530
524
|
/** Optional logger for telemetry. */
|
|
531
|
-
private readonly logger?:
|
|
525
|
+
private readonly logger?: TelemetryLoggerExt,
|
|
532
526
|
public readonly breaker: Breakable = new Breakable("TreeCheckout"),
|
|
533
|
-
public readonly disposeForksAfterTransaction = true,
|
|
534
527
|
) {
|
|
535
528
|
this.#transaction = this.createTransactionStack(branch);
|
|
536
529
|
this.editLock = new EditLock(this.#transaction.activeBranchEditor);
|
|
@@ -662,9 +655,6 @@ export class TreeCheckout implements ITreeCheckout {
|
|
|
662
655
|
branch: SharedTreeBranch<SharedTreeEditBuilder, SharedTreeChange>,
|
|
663
656
|
): SquashingTransactionStack<SharedTreeEditBuilder, SharedTreeChange> {
|
|
664
657
|
return new SquashingTransactionStack(branch, this.mintRevisionTag, () => {
|
|
665
|
-
const disposeForks = this.disposeForksAfterTransaction
|
|
666
|
-
? trackForksForDisposal(this)
|
|
667
|
-
: undefined;
|
|
668
658
|
// When each transaction is started, make a restorable checkpoint of the current state of removed roots
|
|
669
659
|
const restoreRemovedRoots = this._removedRoots.createCheckpoint();
|
|
670
660
|
return (result, viewUpdate: SharedTreeChange | undefined) => {
|
|
@@ -691,7 +681,6 @@ export class TreeCheckout implements ITreeCheckout {
|
|
|
691
681
|
unreachableCase(result);
|
|
692
682
|
}
|
|
693
683
|
}
|
|
694
|
-
disposeForks?.();
|
|
695
684
|
};
|
|
696
685
|
});
|
|
697
686
|
}
|
|
@@ -791,19 +780,48 @@ export class TreeCheckout implements ITreeCheckout {
|
|
|
791
780
|
labels: buildLabelsSet(this.labelTreeNode),
|
|
792
781
|
};
|
|
793
782
|
|
|
794
|
-
this
|
|
783
|
+
this.emitChangedLocked(() => {
|
|
784
|
+
this.#events.emit("changed", metadata, getRevertible);
|
|
785
|
+
});
|
|
795
786
|
withinEventContext = false;
|
|
796
787
|
}
|
|
797
788
|
} else if (this.isRemoteChangeEvent(event)) {
|
|
798
789
|
// TODO: figure out how to plumb through commit kind info for remote changes
|
|
799
|
-
this
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
790
|
+
this.emitChangedLocked(() => {
|
|
791
|
+
this.#events.emit("changed", {
|
|
792
|
+
isLocal: false,
|
|
793
|
+
kind: CommitKind.Default,
|
|
794
|
+
labels: new Set<unknown>(),
|
|
795
|
+
});
|
|
803
796
|
});
|
|
804
797
|
}
|
|
805
798
|
};
|
|
806
799
|
|
|
800
|
+
/**
|
|
801
|
+
* Hold the `editLock` for the duration of `emit`, so that re-entrant edits, transactions,
|
|
802
|
+
* branch operations, etc. attempted from inside a `changed` listener throw the canonical
|
|
803
|
+
* "forbidden during a change event" {@link UsageError} via {@link EditLock.checkUnlocked}.
|
|
804
|
+
*
|
|
805
|
+
* @remarks
|
|
806
|
+
* Shared by both the local and remote `changed` emission paths in {@link TreeCheckout.onAfterBranchChange}.
|
|
807
|
+
* The `try`/`finally` ensures the lock is released even if a listener throws.
|
|
808
|
+
*/
|
|
809
|
+
private emitChangedLocked(emit: () => void): void {
|
|
810
|
+
this.editLock.lock();
|
|
811
|
+
try {
|
|
812
|
+
emit();
|
|
813
|
+
} finally {
|
|
814
|
+
// TODO: any event that throws potentially leaves the code which triggered that event,
|
|
815
|
+
// and thus this checkout (and likely more) in a broken state.
|
|
816
|
+
// Unlocking this editLock prevents future use of this broken state from giving a confusing error in this case,
|
|
817
|
+
// however, a better approach would probably be to put something (this checkout and/or the editLock)
|
|
818
|
+
// into a broken state (using a properly scoped `Breakable`),
|
|
819
|
+
// likely by moving emitChangedLocked into EditLock, and having EditLock get a Breakable,
|
|
820
|
+
// and having the new emitChangedLocked use `Breakable.use`.
|
|
821
|
+
this.editLock.unlock();
|
|
822
|
+
}
|
|
823
|
+
}
|
|
824
|
+
|
|
807
825
|
private readonly onAfterChange = (event: SharedTreeBranchChange<SharedTreeChange>): void => {
|
|
808
826
|
this.editLock.lock();
|
|
809
827
|
this.#events.emit("beforeBatch", event);
|
|
@@ -911,6 +929,15 @@ export class TreeCheckout implements ITreeCheckout {
|
|
|
911
929
|
|
|
912
930
|
private mountTransaction(params: RunTransactionParams | undefined, isAsync: boolean): void {
|
|
913
931
|
this.checkNotDisposed();
|
|
932
|
+
// Starting a transaction is an edit, so it is forbidden from within a change-event
|
|
933
|
+
// callback (where the edit lock is held), the same as direct edits. For the async
|
|
934
|
+
// entry point this throw is captured as a rejected promise by the `async` wrapper.
|
|
935
|
+
//
|
|
936
|
+
// Note: because runTransaction/runTransactionAsync are `@breakingMethod`, this throw also
|
|
937
|
+
// puts the checkout into a broken state (unlike a direct edit, which throws recoverably).
|
|
938
|
+
// That is the same pre-existing broken-state limitation tracked by the TODO in
|
|
939
|
+
// `emitChangedLocked`, not something specific to transactions.
|
|
940
|
+
this.editLock.checkUnlocked("Running a transaction");
|
|
914
941
|
if (isAsync && this.transaction.size > 0) {
|
|
915
942
|
throw new UsageError(
|
|
916
943
|
"An asynchronous transaction cannot be started while another transaction is already in progress.",
|
|
@@ -1173,7 +1200,6 @@ export class TreeCheckout implements ITreeCheckout {
|
|
|
1173
1200
|
throw new UsageError("A view cannot be forked while it has a pending transaction.");
|
|
1174
1201
|
}
|
|
1175
1202
|
|
|
1176
|
-
this.editLock.checkUnlocked("Branching");
|
|
1177
1203
|
const branch = this.#transaction.activeBranch.fork();
|
|
1178
1204
|
const storedSchema = this.storedSchema.clone();
|
|
1179
1205
|
const forkBreaker = new Breakable("TreeCheckout");
|
|
@@ -1190,7 +1216,6 @@ export class TreeCheckout implements ITreeCheckout {
|
|
|
1190
1216
|
this._removedRoots.clone(),
|
|
1191
1217
|
this.logger,
|
|
1192
1218
|
forkBreaker,
|
|
1193
|
-
this.disposeForksAfterTransaction,
|
|
1194
1219
|
);
|
|
1195
1220
|
this.#events.emit("fork", checkout);
|
|
1196
1221
|
return checkout;
|
|
@@ -1253,6 +1278,19 @@ export class TreeCheckout implements ITreeCheckout {
|
|
|
1253
1278
|
getCheckout(branch).rebase(this);
|
|
1254
1279
|
}
|
|
1255
1280
|
|
|
1281
|
+
public isMissingEditsFrom(branch: TreeBranch): boolean {
|
|
1282
|
+
const branchCheckout = getCheckout(branch);
|
|
1283
|
+
const targetPath: GraphCommit<unknown>[] = [];
|
|
1284
|
+
const ancestor = findCommonAncestor(this.mainBranch.getHead(), [
|
|
1285
|
+
branchCheckout.mainBranch.getHead(),
|
|
1286
|
+
targetPath,
|
|
1287
|
+
]);
|
|
1288
|
+
if (ancestor === undefined) {
|
|
1289
|
+
throw new UsageError("Branches do not share a common ancestor.");
|
|
1290
|
+
}
|
|
1291
|
+
return targetPath.length > 0;
|
|
1292
|
+
}
|
|
1293
|
+
|
|
1256
1294
|
public merge(branch: TreeBranch): void;
|
|
1257
1295
|
public merge(branch: TreeBranch, disposeMerged: boolean): void;
|
|
1258
1296
|
public merge(branch: TreeBranch, disposeMerged = true): void {
|
|
@@ -1684,12 +1722,7 @@ class EditLock {
|
|
|
1684
1722
|
*/
|
|
1685
1723
|
public checkUnlocked<T extends string>(action: T extends Capitalize<T> ? T : never): void {
|
|
1686
1724
|
if (this.locked) {
|
|
1687
|
-
|
|
1688
|
-
const nodeChanged: keyof TreeChangeEvents = "nodeChanged";
|
|
1689
|
-
const treeChanged: keyof TreeChangeEvents = "treeChanged";
|
|
1690
|
-
throw new UsageError(
|
|
1691
|
-
`${action} is forbidden during a ${nodeChanged} or ${treeChanged} event`,
|
|
1692
|
-
);
|
|
1725
|
+
throw new UsageError(`${action} is forbidden during a change event callback`);
|
|
1693
1726
|
}
|
|
1694
1727
|
}
|
|
1695
1728
|
|
|
@@ -1703,34 +1736,6 @@ class EditLock {
|
|
|
1703
1736
|
}
|
|
1704
1737
|
}
|
|
1705
1738
|
|
|
1706
|
-
/**
|
|
1707
|
-
* Keeps track of all new forks created until the returned function is invoked, which will dispose all of those for.
|
|
1708
|
-
* The returned function may only be called once.
|
|
1709
|
-
*
|
|
1710
|
-
* @param checkout - The tree checkout for which you want to monitor forks for disposal.
|
|
1711
|
-
* @returns a function which can be called to dispose all of the tracked forks.
|
|
1712
|
-
*/
|
|
1713
|
-
function trackForksForDisposal(checkout: TreeCheckout): () => void {
|
|
1714
|
-
const forks = new Set<TreeCheckout>();
|
|
1715
|
-
const onDisposeUnSubscribes: (() => void)[] = [];
|
|
1716
|
-
const onForkUnSubscribe = onForkTransitive(checkout, (fork) => {
|
|
1717
|
-
forks.add(fork);
|
|
1718
|
-
onDisposeUnSubscribes.push(fork.events.on("dispose", () => forks.delete(fork)));
|
|
1719
|
-
});
|
|
1720
|
-
let disposed = false;
|
|
1721
|
-
return () => {
|
|
1722
|
-
assert(!disposed, 0xaa9 /* Forks may only be disposed once */);
|
|
1723
|
-
for (const fork of forks) {
|
|
1724
|
-
fork.dispose();
|
|
1725
|
-
}
|
|
1726
|
-
for (const unsubscribe of onDisposeUnSubscribes) {
|
|
1727
|
-
unsubscribe();
|
|
1728
|
-
}
|
|
1729
|
-
onForkUnSubscribe();
|
|
1730
|
-
disposed = true;
|
|
1731
|
-
};
|
|
1732
|
-
}
|
|
1733
|
-
|
|
1734
1739
|
function verboseFromCursor(
|
|
1735
1740
|
reader: ITreeCursor,
|
|
1736
1741
|
schema: ReadonlyMap<TreeNodeSchemaIdentifier, TreeNodeStoredSchema>,
|
|
@@ -9,7 +9,7 @@ import { assert, fail } from "@fluidframework/core-utils/internal";
|
|
|
9
9
|
import type { SessionId } from "@fluidframework/id-compressor";
|
|
10
10
|
import {
|
|
11
11
|
TelemetryEventBatcher,
|
|
12
|
-
type
|
|
12
|
+
type TelemetryLoggerExt,
|
|
13
13
|
} from "@fluidframework/telemetry-utils/internal";
|
|
14
14
|
import { BTree } from "@tylerbu/sorted-btree-es6";
|
|
15
15
|
|
|
@@ -123,7 +123,7 @@ export class EditManager<
|
|
|
123
123
|
public readonly localSessionId: SessionId,
|
|
124
124
|
private readonly mintRevisionTag: () => RevisionTag,
|
|
125
125
|
private readonly onSharedBranchCreated?: (branchId: BranchId) => void,
|
|
126
|
-
logger?:
|
|
126
|
+
logger?: TelemetryLoggerExt,
|
|
127
127
|
) {
|
|
128
128
|
this.trunkBase = {
|
|
129
129
|
revision: rootRevision,
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import type { SessionId } from "@fluidframework/id-compressor";
|
|
7
|
-
import
|
|
7
|
+
import * as Type from "@sinclair/typebox";
|
|
8
|
+
import type { ObjectOptions, Static, TSchema } from "@sinclair/typebox";
|
|
8
9
|
|
|
9
10
|
import {
|
|
10
11
|
type EncodedRevisionTag,
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import type { SessionId } from "@fluidframework/id-compressor";
|
|
7
|
-
import
|
|
7
|
+
import * as Type from "@sinclair/typebox";
|
|
8
|
+
import type { ObjectOptions, TSchema } from "@sinclair/typebox";
|
|
8
9
|
|
|
9
10
|
import { SessionIdSchema } from "../core/index.js";
|
|
10
11
|
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import type { SessionId } from "@fluidframework/id-compressor";
|
|
7
|
-
import
|
|
7
|
+
import * as Type from "@sinclair/typebox";
|
|
8
|
+
import type { ObjectOptions, TSchema } from "@sinclair/typebox";
|
|
8
9
|
|
|
9
10
|
import { SessionIdSchema } from "../core/index.js";
|
|
10
11
|
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { assert, unreachableCase } from "@fluidframework/core-utils/internal";
|
|
7
|
-
import
|
|
7
|
+
import * as Type from "@sinclair/typebox";
|
|
8
|
+
import type { TAnySchema } from "@sinclair/typebox";
|
|
8
9
|
|
|
9
10
|
import type { CodecAndSchema, IJsonCodec, Versioned } from "../codec/index.js";
|
|
10
11
|
import type {
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import type { SessionId } from "@fluidframework/id-compressor";
|
|
7
|
-
import
|
|
7
|
+
import * as Type from "@sinclair/typebox";
|
|
8
|
+
import type { TSchema } from "@sinclair/typebox";
|
|
8
9
|
|
|
9
10
|
import { type EncodedRevisionTag, RevisionTagSchema, SessionIdSchema } from "../core/index.js";
|
|
10
11
|
import type { JsonCompatibleReadOnly } from "../util/index.js";
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import type { SessionId } from "@fluidframework/id-compressor";
|
|
7
|
-
import
|
|
7
|
+
import * as Type from "@sinclair/typebox";
|
|
8
|
+
import type { TSchema } from "@sinclair/typebox";
|
|
8
9
|
|
|
9
10
|
import { type EncodedRevisionTag, RevisionTagSchema, SessionIdSchema } from "../core/index.js";
|
|
10
11
|
import type { JsonCompatibleReadOnly } from "../util/index.js";
|
|
@@ -342,6 +342,17 @@ export interface TreeBranchAlpha extends TreeBranch, TreeContextAlpha {
|
|
|
342
342
|
* Update the tests and docs to match when that is done.
|
|
343
343
|
*/
|
|
344
344
|
applyChange(change: JsonCompatibleReadOnly): void;
|
|
345
|
+
|
|
346
|
+
/**
|
|
347
|
+
* Determines if there are changes on the given branch that are not present on this branch.
|
|
348
|
+
* @param branch - The branch to compare to.
|
|
349
|
+
*
|
|
350
|
+
* The new edits, if any, can be applied to this branch by {@link TreeBranch.rebaseOnto | rebasing this branch onto the given branch}
|
|
351
|
+
* or by {@link TreeBranch.merge | merging the given branch into this branch}.
|
|
352
|
+
*
|
|
353
|
+
* @throws UsageError if the branches are unrelated.
|
|
354
|
+
*/
|
|
355
|
+
isMissingEditsFrom(branch: TreeBranch): boolean;
|
|
345
356
|
}
|
|
346
357
|
|
|
347
358
|
/**
|
|
@@ -332,34 +332,53 @@ export function withBufferedTreeEvents(callback: () => void): void {
|
|
|
332
332
|
callback();
|
|
333
333
|
} else {
|
|
334
334
|
bufferTreeEvents = true;
|
|
335
|
+
const toFlush: KernelEventBuffer[] = [];
|
|
335
336
|
try {
|
|
336
337
|
callback();
|
|
337
338
|
} finally {
|
|
338
339
|
bufferTreeEvents = false;
|
|
339
|
-
|
|
340
|
+
// Snapshot-and-clear before flushing to safely handle reentrant `withBufferedTreeEvents`
|
|
341
|
+
// calls made by listeners that fire during `buffer.flush()` below:
|
|
342
|
+
// - Iterating an array means a reentrant call's `clear()` cannot truncate our loop
|
|
343
|
+
// and cause buffers later in `activeBuffers` to be skipped (and their events dropped).
|
|
344
|
+
// - Clearing up front means the reentrant call starts from an empty set, so its own
|
|
345
|
+
// finally block only flushes what it buffered - not a re-flush of our remaining buffers.
|
|
346
|
+
toFlush.push(...activeBuffers);
|
|
347
|
+
activeBuffers.clear();
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
// Don't flush/emit events in the case of an error
|
|
351
|
+
for (const buffer of toFlush) {
|
|
352
|
+
buffer.flush();
|
|
340
353
|
}
|
|
341
354
|
}
|
|
342
355
|
}
|
|
343
356
|
|
|
344
357
|
/**
|
|
345
|
-
*
|
|
358
|
+
* Set of {@link KernelEventBuffer}s that have accumulated buffered events during the current
|
|
359
|
+
* {@link withBufferedTreeEvents} window and therefore need to be flushed when it ends.
|
|
360
|
+
*
|
|
361
|
+
* @remarks
|
|
362
|
+
* The set should be empty whenever no buffering window is in progress.
|
|
346
363
|
*/
|
|
347
|
-
const
|
|
348
|
-
|
|
349
|
-
|
|
364
|
+
const activeBuffers: Set<KernelEventBuffer> = new Set();
|
|
365
|
+
|
|
366
|
+
/**
|
|
367
|
+
* Test-only accessor for the current size of {@link activeBuffers}.
|
|
368
|
+
* @remarks Only exported for testing purposes. Not intended for any other use.
|
|
369
|
+
*/
|
|
370
|
+
export function TEST_activeBufferCount(): number {
|
|
371
|
+
return activeBuffers.size;
|
|
372
|
+
}
|
|
350
373
|
|
|
351
374
|
/**
|
|
352
375
|
* Event emitter for {@link TreeNodeKernel}, which optionally buffers events based on {@link bufferTreeEvents}.
|
|
353
|
-
* @remarks
|
|
376
|
+
* @remarks When buffering is active, this adds itself to {@link activeBuffers} so that
|
|
377
|
+
* {@link withBufferedTreeEvents} can flush it at the end of the buffering window.
|
|
354
378
|
*/
|
|
355
379
|
class KernelEventBuffer implements Listenable<KernelEvents> {
|
|
356
380
|
#disposed: boolean = false;
|
|
357
381
|
|
|
358
|
-
/**
|
|
359
|
-
* Listen to {@link flushEventsEmitter} to know when to flush buffered events.
|
|
360
|
-
*/
|
|
361
|
-
readonly #disposeOnFlushListener = flushEventsEmitter.on("flush", this.flush.bind(this));
|
|
362
|
-
|
|
363
382
|
readonly #events = createEmitter<KernelEvents>();
|
|
364
383
|
|
|
365
384
|
#eventSource: Listenable<KernelEvents> & HasListeners<KernelEvents>;
|
|
@@ -501,6 +520,7 @@ class KernelEventBuffer implements Listenable<KernelEvents> {
|
|
|
501
520
|
fieldMarks: ReadonlyMap<FieldKey, readonly DeltaMark[]>,
|
|
502
521
|
): void {
|
|
503
522
|
if (bufferTreeEvents) {
|
|
523
|
+
activeBuffers.add(this);
|
|
504
524
|
for (const fieldKey of changedFields) {
|
|
505
525
|
this.#childrenChangedBuffer.add(fieldKey);
|
|
506
526
|
}
|
|
@@ -528,6 +548,7 @@ class KernelEventBuffer implements Listenable<KernelEvents> {
|
|
|
528
548
|
|
|
529
549
|
#handleSubtreeChangedAfterBatch(): void {
|
|
530
550
|
if (bufferTreeEvents) {
|
|
551
|
+
activeBuffers.add(this);
|
|
531
552
|
this.#subTreeChangedBuffer = true;
|
|
532
553
|
} else {
|
|
533
554
|
this.#events.emit("subtreeChangedAfterBatch");
|
|
@@ -565,12 +586,15 @@ class KernelEventBuffer implements Listenable<KernelEvents> {
|
|
|
565
586
|
return;
|
|
566
587
|
}
|
|
567
588
|
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
589
|
+
debugAssert(
|
|
590
|
+
() =>
|
|
591
|
+
(this.#childrenChangedBuffer.size === 0 && !this.#subTreeChangedBuffer) ||
|
|
592
|
+
"Buffered kernel events should have been flushed before disposing.",
|
|
593
|
+
);
|
|
594
|
+
debugAssert(
|
|
595
|
+
() => !activeBuffers.has(this) || "Disposed buffer should not be in activeBuffers.",
|
|
571
596
|
);
|
|
572
597
|
|
|
573
|
-
this.#disposeOnFlushListener();
|
|
574
598
|
for (const off of this.#disposeSourceListeners.values()) {
|
|
575
599
|
off();
|
|
576
600
|
}
|
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
* It may not include some details which impact maintenance of application enforced invariants (like persisted metadata or logic in view schema).
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
import
|
|
14
|
+
import * as Type from "@sinclair/typebox";
|
|
15
|
+
import type { ObjectOptions, Static } from "@sinclair/typebox";
|
|
15
16
|
|
|
16
17
|
const noAdditionalProps: ObjectOptions = { additionalProperties: false };
|
|
17
18
|
|