@fluidframework/tree 2.12.0 → 2.20.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 +154 -0
- package/api-report/tree.alpha.api.md +108 -22
- package/api-report/tree.beta.api.md +31 -15
- package/api-report/tree.legacy.alpha.api.md +31 -15
- package/api-report/tree.legacy.public.api.md +31 -15
- package/api-report/tree.public.api.md +31 -15
- package/assertTagging.config.mjs +14 -0
- package/dist/alpha.d.ts +14 -0
- package/dist/beta.d.ts +2 -0
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +6 -4
- package/dist/core/index.js.map +1 -1
- package/dist/core/rebase/index.d.ts +2 -2
- package/dist/core/rebase/index.d.ts.map +1 -1
- package/dist/core/rebase/index.js +5 -1
- package/dist/core/rebase/index.js.map +1 -1
- package/dist/core/rebase/types.d.ts +5 -4
- package/dist/core/rebase/types.d.ts.map +1 -1
- package/dist/core/rebase/types.js +29 -1
- package/dist/core/rebase/types.js.map +1 -1
- package/dist/core/rebase/utils.d.ts +10 -0
- package/dist/core/rebase/utils.d.ts.map +1 -1
- package/dist/core/rebase/utils.js +22 -1
- package/dist/core/rebase/utils.js.map +1 -1
- package/dist/core/tree/delta.d.ts +21 -26
- package/dist/core/tree/delta.d.ts.map +1 -1
- package/dist/core/tree/delta.js.map +1 -1
- package/dist/core/tree/deltaUtil.d.ts +1 -3
- package/dist/core/tree/deltaUtil.d.ts.map +1 -1
- package/dist/core/tree/deltaUtil.js +2 -14
- package/dist/core/tree/deltaUtil.js.map +1 -1
- package/dist/core/tree/index.d.ts +1 -1
- package/dist/core/tree/index.d.ts.map +1 -1
- package/dist/core/tree/index.js +1 -3
- package/dist/core/tree/index.js.map +1 -1
- package/dist/core/tree/visitDelta.d.ts.map +1 -1
- package/dist/core/tree/visitDelta.js +82 -80
- package/dist/core/tree/visitDelta.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +10 -0
- package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.js +3 -0
- package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
- package/dist/feature-libraries/deltaUtils.d.ts.map +1 -1
- package/dist/feature-libraries/deltaUtils.js +13 -0
- package/dist/feature-libraries/deltaUtils.js.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.js +1 -6
- package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/dist/feature-libraries/index.d.ts +0 -1
- package/dist/feature-libraries/index.d.ts.map +1 -1
- package/dist/feature-libraries/index.js +2 -4
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts +5 -5
- package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/crossFieldQueries.js +2 -3
- package/dist/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +30 -6
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
- package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/genericFieldKind.js +2 -1
- package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
- package/dist/feature-libraries/modular-schema/index.d.ts +2 -2
- package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/index.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +8 -8
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +5 -4
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js +186 -216
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts +23 -20
- package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeTypes.js +20 -0
- package/dist/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
- package/dist/feature-libraries/optional-field/optionalField.d.ts +3 -3
- package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
- package/dist/feature-libraries/optional-field/optionalField.js +24 -4
- package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
- package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts +1 -1
- package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
- package/dist/feature-libraries/sequence-field/rebase.js +4 -4
- package/dist/feature-libraries/sequence-field/rebase.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.js +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts +2 -3
- package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
- package/dist/feature-libraries/sequence-field/utils.d.ts +2 -2
- package/dist/feature-libraries/sequence-field/utils.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/utils.js +50 -9
- package/dist/feature-libraries/sequence-field/utils.js.map +1 -1
- package/dist/feature-libraries/treeCursorUtils.d.ts.map +1 -1
- package/dist/feature-libraries/treeCursorUtils.js +4 -1
- package/dist/feature-libraries/treeCursorUtils.js.map +1 -1
- package/dist/index.d.ts +27 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/legacy.d.ts +2 -0
- package/dist/package.json +2 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/public.d.ts +2 -0
- package/dist/shared-tree/index.d.ts +3 -2
- package/dist/shared-tree/index.d.ts.map +1 -1
- package/dist/shared-tree/index.js +6 -3
- package/dist/shared-tree/index.js.map +1 -1
- package/dist/shared-tree/schematizingTreeView.d.ts +10 -1
- package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +43 -0
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree/sharedTree.d.ts +44 -21
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +41 -35
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/transactionTypes.d.ts +105 -0
- package/dist/shared-tree/transactionTypes.d.ts.map +1 -0
- package/dist/shared-tree/transactionTypes.js +13 -0
- package/dist/shared-tree/transactionTypes.js.map +1 -0
- package/dist/shared-tree/treeApi.d.ts +1 -25
- package/dist/shared-tree/treeApi.d.ts.map +1 -1
- package/dist/shared-tree/treeApi.js +4 -8
- package/dist/shared-tree/treeApi.js.map +1 -1
- package/dist/shared-tree/treeCheckout.d.ts +4 -1
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +142 -23
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.js +1 -1
- package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/dist/simple-tree/api/index.d.ts +1 -0
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js +3 -1
- package/dist/simple-tree/api/index.js.map +1 -1
- package/dist/simple-tree/api/jsonSchema.d.ts +6 -0
- package/dist/simple-tree/api/jsonSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/jsonSchema.js.map +1 -1
- package/dist/simple-tree/api/schemaFactory.d.ts +21 -12
- package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactory.js +5 -2
- package/dist/simple-tree/api/schemaFactory.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +83 -0
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -0
- package/dist/simple-tree/api/schemaFactoryAlpha.js +90 -0
- package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -0
- package/dist/simple-tree/api/simpleSchema.d.ts +5 -1
- package/dist/simple-tree/api/simpleSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/simpleSchema.js.map +1 -1
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.js +13 -10
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
- package/dist/simple-tree/api/testRecursiveDomain.d.ts +5 -5
- package/dist/simple-tree/api/tree.d.ts +60 -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/api/treeNodeApi.js +1 -1
- package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
- package/dist/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/viewSchemaToSimpleSchema.js +11 -11
- package/dist/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
- package/dist/simple-tree/arrayNode.d.ts +2 -2
- package/dist/simple-tree/arrayNode.d.ts.map +1 -1
- package/dist/simple-tree/arrayNode.js +3 -2
- package/dist/simple-tree/arrayNode.js.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.d.ts +10 -6
- package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/dist/simple-tree/index.d.ts +2 -2
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +3 -2
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/leafNodeSchema.d.ts +5 -5
- package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/mapNode.d.ts +2 -2
- package/dist/simple-tree/mapNode.d.ts.map +1 -1
- package/dist/simple-tree/mapNode.js +2 -1
- package/dist/simple-tree/mapNode.js.map +1 -1
- package/dist/simple-tree/objectNode.d.ts +2 -2
- package/dist/simple-tree/objectNode.d.ts.map +1 -1
- package/dist/simple-tree/objectNode.js +2 -1
- package/dist/simple-tree/objectNode.js.map +1 -1
- package/dist/simple-tree/objectNodeTypes.d.ts +2 -2
- package/dist/simple-tree/objectNodeTypes.d.ts.map +1 -1
- package/dist/simple-tree/objectNodeTypes.js.map +1 -1
- package/dist/simple-tree/schemaTypes.d.ts +47 -1
- package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
- package/dist/simple-tree/schemaTypes.js.map +1 -1
- package/dist/simple-tree/toMapTree.js +1 -1
- package/dist/simple-tree/toMapTree.js.map +1 -1
- package/dist/util/bTreeUtils.d.ts +10 -0
- package/dist/util/bTreeUtils.d.ts.map +1 -0
- package/dist/util/bTreeUtils.js +52 -0
- package/dist/util/bTreeUtils.js.map +1 -0
- package/dist/util/idAllocator.d.ts +0 -2
- package/dist/util/idAllocator.d.ts.map +1 -1
- package/dist/util/idAllocator.js +0 -2
- package/dist/util/idAllocator.js.map +1 -1
- package/dist/util/index.d.ts +3 -2
- package/dist/util/index.d.ts.map +1 -1
- package/dist/util/index.js +7 -5
- package/dist/util/index.js.map +1 -1
- package/dist/util/rangeMap.d.ts +95 -43
- package/dist/util/rangeMap.d.ts.map +1 -1
- package/dist/util/rangeMap.js +202 -148
- package/dist/util/rangeMap.js.map +1 -1
- package/dist/util/utils.d.ts +26 -2
- package/dist/util/utils.d.ts.map +1 -1
- package/dist/util/utils.js +17 -2
- package/dist/util/utils.js.map +1 -1
- package/lib/alpha.d.ts +14 -0
- package/lib/beta.d.ts +2 -0
- package/lib/core/index.d.ts +2 -2
- package/lib/core/index.d.ts.map +1 -1
- package/lib/core/index.js +2 -2
- package/lib/core/index.js.map +1 -1
- package/lib/core/rebase/index.d.ts +2 -2
- package/lib/core/rebase/index.d.ts.map +1 -1
- package/lib/core/rebase/index.js +2 -2
- package/lib/core/rebase/index.js.map +1 -1
- package/lib/core/rebase/types.d.ts +5 -4
- package/lib/core/rebase/types.d.ts.map +1 -1
- package/lib/core/rebase/types.js +26 -1
- package/lib/core/rebase/types.js.map +1 -1
- package/lib/core/rebase/utils.d.ts +10 -0
- package/lib/core/rebase/utils.d.ts.map +1 -1
- package/lib/core/rebase/utils.js +20 -0
- package/lib/core/rebase/utils.js.map +1 -1
- package/lib/core/tree/delta.d.ts +21 -26
- package/lib/core/tree/delta.d.ts.map +1 -1
- package/lib/core/tree/delta.js.map +1 -1
- package/lib/core/tree/deltaUtil.d.ts +1 -3
- package/lib/core/tree/deltaUtil.d.ts.map +1 -1
- package/lib/core/tree/deltaUtil.js +1 -12
- package/lib/core/tree/deltaUtil.js.map +1 -1
- package/lib/core/tree/index.d.ts +1 -1
- package/lib/core/tree/index.d.ts.map +1 -1
- package/lib/core/tree/index.js +1 -1
- package/lib/core/tree/index.js.map +1 -1
- package/lib/core/tree/visitDelta.d.ts.map +1 -1
- package/lib/core/tree/visitDelta.js +82 -80
- package/lib/core/tree/visitDelta.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +10 -0
- package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.js +3 -0
- package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
- package/lib/feature-libraries/deltaUtils.d.ts.map +1 -1
- package/lib/feature-libraries/deltaUtils.js +13 -0
- package/lib/feature-libraries/deltaUtils.js.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.js +1 -6
- package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/lib/feature-libraries/index.d.ts +0 -1
- package/lib/feature-libraries/index.d.ts.map +1 -1
- package/lib/feature-libraries/index.js +0 -1
- package/lib/feature-libraries/index.js.map +1 -1
- package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts +5 -5
- package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/crossFieldQueries.js +2 -3
- package/lib/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +30 -6
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
- package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/genericFieldKind.js +2 -1
- package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
- package/lib/feature-libraries/modular-schema/index.d.ts +2 -2
- package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/index.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +4 -4
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +5 -4
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js +158 -186
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts +23 -20
- package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeTypes.js +18 -1
- package/lib/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
- package/lib/feature-libraries/optional-field/optionalField.d.ts +3 -3
- package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
- package/lib/feature-libraries/optional-field/optionalField.js +24 -4
- package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
- package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts +1 -1
- package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
- package/lib/feature-libraries/sequence-field/rebase.js +4 -4
- package/lib/feature-libraries/sequence-field/rebase.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.js +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts +2 -3
- package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
- package/lib/feature-libraries/sequence-field/utils.d.ts +2 -2
- package/lib/feature-libraries/sequence-field/utils.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/utils.js +50 -9
- package/lib/feature-libraries/sequence-field/utils.js.map +1 -1
- package/lib/feature-libraries/treeCursorUtils.d.ts.map +1 -1
- package/lib/feature-libraries/treeCursorUtils.js +4 -1
- package/lib/feature-libraries/treeCursorUtils.js.map +1 -1
- package/lib/index.d.ts +27 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/lib/legacy.d.ts +2 -0
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/public.d.ts +2 -0
- package/lib/shared-tree/index.d.ts +3 -2
- package/lib/shared-tree/index.d.ts.map +1 -1
- package/lib/shared-tree/index.js +3 -2
- package/lib/shared-tree/index.js.map +1 -1
- package/lib/shared-tree/schematizingTreeView.d.ts +10 -1
- package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +46 -3
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/shared-tree/sharedTree.d.ts +44 -21
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +40 -34
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/transactionTypes.d.ts +105 -0
- package/lib/shared-tree/transactionTypes.d.ts.map +1 -0
- package/lib/shared-tree/transactionTypes.js +10 -0
- package/lib/shared-tree/transactionTypes.js.map +1 -0
- package/lib/shared-tree/treeApi.d.ts +1 -25
- package/lib/shared-tree/treeApi.d.ts.map +1 -1
- package/lib/shared-tree/treeApi.js +1 -5
- package/lib/shared-tree/treeApi.js.map +1 -1
- package/lib/shared-tree/treeCheckout.d.ts +4 -1
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +143 -24
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.js +1 -1
- package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/lib/simple-tree/api/index.d.ts +1 -0
- package/lib/simple-tree/api/index.d.ts.map +1 -1
- package/lib/simple-tree/api/index.js +1 -0
- package/lib/simple-tree/api/index.js.map +1 -1
- package/lib/simple-tree/api/jsonSchema.d.ts +6 -0
- package/lib/simple-tree/api/jsonSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/jsonSchema.js.map +1 -1
- package/lib/simple-tree/api/schemaFactory.d.ts +21 -12
- package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactory.js +5 -2
- package/lib/simple-tree/api/schemaFactory.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +83 -0
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -0
- package/lib/simple-tree/api/schemaFactoryAlpha.js +86 -0
- package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -0
- package/lib/simple-tree/api/simpleSchema.d.ts +5 -1
- package/lib/simple-tree/api/simpleSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/simpleSchema.js.map +1 -1
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.js +14 -11
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
- package/lib/simple-tree/api/testRecursiveDomain.d.ts +5 -5
- package/lib/simple-tree/api/tree.d.ts +60 -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/api/treeNodeApi.js +1 -1
- package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
- package/lib/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/viewSchemaToSimpleSchema.js +12 -12
- package/lib/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
- package/lib/simple-tree/arrayNode.d.ts +2 -2
- package/lib/simple-tree/arrayNode.d.ts.map +1 -1
- package/lib/simple-tree/arrayNode.js +3 -2
- package/lib/simple-tree/arrayNode.js.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.d.ts +10 -6
- package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/lib/simple-tree/index.d.ts +2 -2
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +1 -1
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/leafNodeSchema.d.ts +5 -5
- package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/mapNode.d.ts +2 -2
- package/lib/simple-tree/mapNode.d.ts.map +1 -1
- package/lib/simple-tree/mapNode.js +2 -1
- package/lib/simple-tree/mapNode.js.map +1 -1
- package/lib/simple-tree/objectNode.d.ts +2 -2
- package/lib/simple-tree/objectNode.d.ts.map +1 -1
- package/lib/simple-tree/objectNode.js +2 -1
- package/lib/simple-tree/objectNode.js.map +1 -1
- package/lib/simple-tree/objectNodeTypes.d.ts +2 -2
- package/lib/simple-tree/objectNodeTypes.d.ts.map +1 -1
- package/lib/simple-tree/objectNodeTypes.js.map +1 -1
- package/lib/simple-tree/schemaTypes.d.ts +47 -1
- package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
- package/lib/simple-tree/schemaTypes.js.map +1 -1
- package/lib/simple-tree/toMapTree.js +1 -1
- package/lib/simple-tree/toMapTree.js.map +1 -1
- package/lib/util/bTreeUtils.d.ts +10 -0
- package/lib/util/bTreeUtils.d.ts.map +1 -0
- package/lib/util/bTreeUtils.js +47 -0
- package/lib/util/bTreeUtils.js.map +1 -0
- package/lib/util/idAllocator.d.ts +0 -2
- package/lib/util/idAllocator.d.ts.map +1 -1
- package/lib/util/idAllocator.js +0 -2
- package/lib/util/idAllocator.js.map +1 -1
- package/lib/util/index.d.ts +3 -2
- package/lib/util/index.d.ts.map +1 -1
- package/lib/util/index.js +3 -2
- package/lib/util/index.js.map +1 -1
- package/lib/util/rangeMap.d.ts +95 -43
- package/lib/util/rangeMap.d.ts.map +1 -1
- package/lib/util/rangeMap.js +200 -144
- package/lib/util/rangeMap.js.map +1 -1
- package/lib/util/utils.d.ts +26 -2
- package/lib/util/utils.d.ts.map +1 -1
- package/lib/util/utils.js +15 -1
- package/lib/util/utils.js.map +1 -1
- package/package.json +24 -24
- package/src/core/index.ts +5 -2
- package/src/core/rebase/index.ts +5 -0
- package/src/core/rebase/types.ts +33 -5
- package/src/core/rebase/utils.ts +27 -0
- package/src/core/tree/delta.ts +21 -26
- package/src/core/tree/deltaUtil.ts +1 -16
- package/src/core/tree/index.ts +0 -2
- package/src/core/tree/visitDelta.ts +108 -97
- package/src/feature-libraries/default-schema/defaultEditBuilder.ts +14 -1
- package/src/feature-libraries/default-schema/defaultFieldKinds.ts +2 -2
- package/src/feature-libraries/deltaUtils.ts +13 -0
- package/src/feature-libraries/forest-summary/forestSummarizer.ts +1 -6
- package/src/feature-libraries/index.ts +0 -1
- package/src/feature-libraries/modular-schema/crossFieldQueries.ts +12 -13
- package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +33 -9
- package/src/feature-libraries/modular-schema/genericFieldKind.ts +6 -4
- package/src/feature-libraries/modular-schema/index.ts +3 -0
- package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +12 -11
- package/src/feature-libraries/modular-schema/modularChangeFamily.ts +254 -248
- package/src/feature-libraries/modular-schema/modularChangeTypes.ts +51 -26
- package/src/feature-libraries/optional-field/optionalField.ts +37 -8
- package/src/feature-libraries/sequence-field/moveEffectTable.ts +1 -1
- package/src/feature-libraries/sequence-field/rebase.ts +9 -3
- package/src/feature-libraries/sequence-field/sequenceFieldCodecV1.ts +1 -1
- package/src/feature-libraries/sequence-field/sequenceFieldCodecV2.ts +1 -1
- package/src/feature-libraries/sequence-field/sequenceFieldToDelta.ts +3 -4
- package/src/feature-libraries/sequence-field/utils.ts +54 -11
- package/src/feature-libraries/treeCursorUtils.ts +6 -1
- package/src/index.ts +45 -6
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/index.ts +16 -3
- package/src/shared-tree/schematizingTreeView.ts +91 -2
- package/src/shared-tree/sharedTree.ts +69 -44
- package/src/shared-tree/transactionTypes.ts +125 -0
- package/src/shared-tree/treeApi.ts +1 -28
- package/src/shared-tree/treeCheckout.ts +166 -25
- package/src/shared-tree-core/sharedTreeCore.ts +1 -1
- package/src/simple-tree/api/index.ts +1 -0
- package/src/simple-tree/api/jsonSchema.ts +7 -0
- package/src/simple-tree/api/schemaFactory.ts +33 -6
- package/src/simple-tree/api/schemaFactoryAlpha.ts +253 -0
- package/src/simple-tree/api/simpleSchema.ts +6 -1
- package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +22 -12
- package/src/simple-tree/api/tree.ts +76 -4
- package/src/simple-tree/api/treeNodeApi.ts +1 -1
- package/src/simple-tree/api/viewSchemaToSimpleSchema.ts +19 -13
- package/src/simple-tree/arrayNode.ts +8 -2
- package/src/simple-tree/core/treeNodeSchema.ts +51 -7
- package/src/simple-tree/index.ts +3 -0
- package/src/simple-tree/mapNode.ts +7 -1
- package/src/simple-tree/objectNode.ts +7 -1
- package/src/simple-tree/objectNodeTypes.ts +4 -1
- package/src/simple-tree/schemaTypes.ts +50 -1
- package/src/simple-tree/toMapTree.ts +1 -1
- package/src/util/bTreeUtils.ts +60 -0
- package/src/util/idAllocator.ts +0 -2
- package/src/util/index.ts +5 -6
- package/src/util/rangeMap.ts +259 -184
- package/src/util/utils.ts +57 -4
- package/dist/feature-libraries/memoizedIdRangeAllocator.d.ts +0 -38
- package/dist/feature-libraries/memoizedIdRangeAllocator.d.ts.map +0 -1
- package/dist/feature-libraries/memoizedIdRangeAllocator.js +0 -74
- package/dist/feature-libraries/memoizedIdRangeAllocator.js.map +0 -1
- package/lib/feature-libraries/memoizedIdRangeAllocator.d.ts +0 -38
- package/lib/feature-libraries/memoizedIdRangeAllocator.d.ts.map +0 -1
- package/lib/feature-libraries/memoizedIdRangeAllocator.js +0 -71
- package/lib/feature-libraries/memoizedIdRangeAllocator.js.map +0 -1
- package/lib/package.json +0 -3
- package/src/feature-libraries/memoizedIdRangeAllocator.ts +0 -112
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import
|
|
7
|
-
|
|
8
|
-
ChangeAtomId,
|
|
9
|
-
ChangesetLocalId,
|
|
10
|
-
FieldKey,
|
|
11
|
-
FieldKindIdentifier,
|
|
12
|
-
RevisionInfo,
|
|
13
|
-
RevisionTag,
|
|
6
|
+
import {
|
|
7
|
+
subtractChangeAtomIds,
|
|
8
|
+
type ChangeAtomId,
|
|
9
|
+
type ChangesetLocalId,
|
|
10
|
+
type FieldKey,
|
|
11
|
+
type FieldKindIdentifier,
|
|
12
|
+
type RevisionInfo,
|
|
13
|
+
type RevisionTag,
|
|
14
14
|
} from "../../core/index.js";
|
|
15
|
-
import type
|
|
15
|
+
import { brand, RangeMap, type Brand, type TupleBTree } from "../../util/index.js";
|
|
16
16
|
import type { TreeChunk } from "../chunked-forest/index.js";
|
|
17
17
|
import type { CrossFieldTarget } from "./crossFieldQueries.js";
|
|
18
18
|
|
|
@@ -56,31 +56,53 @@ export interface ModularChangeset extends HasFieldChanges {
|
|
|
56
56
|
*/
|
|
57
57
|
readonly nodeAliases: ChangeAtomIdBTree<NodeId>;
|
|
58
58
|
readonly crossFieldKeys: CrossFieldKeyTable;
|
|
59
|
+
/**
|
|
60
|
+
* The number of constraint violations that apply to the input context of the changeset, i.e., before this change is applied.
|
|
61
|
+
* If this count is greater than 0, it will prevent the changeset from being applied.
|
|
62
|
+
*/
|
|
59
63
|
readonly constraintViolationCount?: number;
|
|
64
|
+
/**
|
|
65
|
+
* The number of constraint violations that apply to the revert of the changeset. If this count is greater than 0, it will
|
|
66
|
+
* prevent the changeset from being reverted or undone.
|
|
67
|
+
*/
|
|
68
|
+
readonly constraintViolationCountOnRevert?: number;
|
|
60
69
|
readonly builds?: ChangeAtomIdBTree<TreeChunk>;
|
|
61
70
|
readonly destroys?: ChangeAtomIdBTree<number>;
|
|
62
71
|
readonly refreshers?: ChangeAtomIdBTree<TreeChunk>;
|
|
63
72
|
}
|
|
64
73
|
|
|
65
|
-
export type TupleBTree<K, V> = Brand<BTree<K, V>, "TupleBTree">;
|
|
66
74
|
export type ChangeAtomIdBTree<V> = TupleBTree<[RevisionTag | undefined, ChangesetLocalId], V>;
|
|
67
|
-
export type CrossFieldKeyTable = TupleBTree<CrossFieldKeyRange, FieldId>;
|
|
68
|
-
export type CrossFieldKeyRange = readonly [
|
|
69
|
-
CrossFieldTarget,
|
|
70
|
-
RevisionTag | undefined,
|
|
71
|
-
ChangesetLocalId,
|
|
72
|
-
/**
|
|
73
|
-
* The length of this range.
|
|
74
|
-
* TODO: This does not need to be part of the key and could be part of the value instead.
|
|
75
|
-
*/
|
|
76
|
-
number,
|
|
77
|
-
];
|
|
78
75
|
|
|
79
|
-
export type
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
76
|
+
export type CrossFieldKeyTable = RangeMap<CrossFieldKey, FieldId>;
|
|
77
|
+
|
|
78
|
+
export function newCrossFieldKeyTable(): CrossFieldKeyTable {
|
|
79
|
+
return new RangeMap(offsetCrossFieldKey, subtractCrossFieldKeys);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function offsetCrossFieldKey(key: CrossFieldKey, offset: number): CrossFieldKey {
|
|
83
|
+
return {
|
|
84
|
+
...key,
|
|
85
|
+
localId: brand(key.localId + offset),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function subtractCrossFieldKeys(a: CrossFieldKey, b: CrossFieldKey): number {
|
|
90
|
+
const cmpTarget = a.target - b.target;
|
|
91
|
+
if (cmpTarget !== 0) {
|
|
92
|
+
return cmpTarget * Number.POSITIVE_INFINITY;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return subtractChangeAtomIds(a, b);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export interface CrossFieldKey extends ChangeAtomId {
|
|
99
|
+
readonly target: CrossFieldTarget;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export interface CrossFieldKeyRange {
|
|
103
|
+
key: CrossFieldKey;
|
|
104
|
+
count: number;
|
|
105
|
+
}
|
|
84
106
|
|
|
85
107
|
export interface FieldId {
|
|
86
108
|
readonly nodeId: NodeId | undefined;
|
|
@@ -97,7 +119,10 @@ export interface NodeExistsConstraint {
|
|
|
97
119
|
* Changeset for a subtree rooted at a specific node.
|
|
98
120
|
*/
|
|
99
121
|
export interface NodeChangeset extends HasFieldChanges {
|
|
122
|
+
/** Keeps track of whether node exists constraint has been violated by this change */
|
|
100
123
|
nodeExistsConstraint?: NodeExistsConstraint;
|
|
124
|
+
/** Keeps track of whether node exists constraint will be violated when this change is reverted */
|
|
125
|
+
nodeExistsConstraintOnRevert?: NodeExistsConstraint;
|
|
101
126
|
}
|
|
102
127
|
|
|
103
128
|
export type NodeId = ChangeAtomId;
|
|
@@ -11,7 +11,6 @@ import {
|
|
|
11
11
|
type ChangesetLocalId,
|
|
12
12
|
type DeltaDetachedNodeChanges,
|
|
13
13
|
type DeltaDetachedNodeId,
|
|
14
|
-
type DeltaFieldChanges,
|
|
15
14
|
type DeltaMark,
|
|
16
15
|
type RevisionTag,
|
|
17
16
|
areEqualChangeAtomIds,
|
|
@@ -39,6 +38,8 @@ import {
|
|
|
39
38
|
type NodeId,
|
|
40
39
|
type RelevantRemovedRootsFromChild,
|
|
41
40
|
type ToDelta,
|
|
41
|
+
type NestedChangesIndices,
|
|
42
|
+
type FieldChangeDelta,
|
|
42
43
|
} from "../modular-schema/index.js";
|
|
43
44
|
|
|
44
45
|
import type {
|
|
@@ -536,6 +537,16 @@ function areEqualRegisterIds(id1: RegisterId, id2: RegisterId): boolean {
|
|
|
536
537
|
return id1 === "self" || id2 === "self" ? id1 === id2 : areEqualChangeAtomIds(id1, id2);
|
|
537
538
|
}
|
|
538
539
|
|
|
540
|
+
function areEqualRegisterIdsOpt(
|
|
541
|
+
id1: RegisterId | undefined,
|
|
542
|
+
id2: RegisterId | undefined,
|
|
543
|
+
): boolean {
|
|
544
|
+
if (id1 === undefined || id2 === undefined) {
|
|
545
|
+
return id1 === id2;
|
|
546
|
+
}
|
|
547
|
+
return areEqualRegisterIds(id1, id2);
|
|
548
|
+
}
|
|
549
|
+
|
|
539
550
|
function getBidirectionalMaps(moves: OptionalChangeset["moves"]): {
|
|
540
551
|
srcToDst: ChangeAtomIdMap<ChangeAtomId>;
|
|
541
552
|
dstToSrc: ChangeAtomIdMap<ChangeAtomId>;
|
|
@@ -646,8 +657,8 @@ export const optionalFieldEditor: OptionalFieldEditor = {
|
|
|
646
657
|
export function optionalFieldIntoDelta(
|
|
647
658
|
change: OptionalChangeset,
|
|
648
659
|
deltaFromChild: ToDelta,
|
|
649
|
-
):
|
|
650
|
-
const delta: Mutable<
|
|
660
|
+
): FieldChangeDelta {
|
|
661
|
+
const delta: Mutable<FieldChangeDelta> = {};
|
|
651
662
|
|
|
652
663
|
let markIsANoop = true;
|
|
653
664
|
const mark: Mutable<DeltaMark> = { count: 1 };
|
|
@@ -720,11 +731,29 @@ export const optionalChangeHandler: FieldChangeHandler<
|
|
|
720
731
|
getCrossFieldKeys: (_change) => [],
|
|
721
732
|
};
|
|
722
733
|
|
|
723
|
-
function getNestedChanges(change: OptionalChangeset):
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
734
|
+
function getNestedChanges(change: OptionalChangeset): NestedChangesIndices {
|
|
735
|
+
// True iff the content of the field changes in some way
|
|
736
|
+
const isFieldContentChanged =
|
|
737
|
+
change.valueReplace !== undefined && change.valueReplace.src !== "self";
|
|
738
|
+
|
|
739
|
+
// The node that is moved into the field (if any).
|
|
740
|
+
const nodeMovedIntoField = change.valueReplace?.src;
|
|
741
|
+
|
|
742
|
+
return change.childChanges.map(([register, nodeId]) => {
|
|
743
|
+
// The node is removed in the input context iif register is not self.
|
|
744
|
+
const inputIndex = register === "self" ? 0 : undefined;
|
|
745
|
+
const outputIndex =
|
|
746
|
+
register === "self"
|
|
747
|
+
? // If the node starts out as not-removed, it is removed in the output context iff the field content is changed
|
|
748
|
+
isFieldContentChanged
|
|
749
|
+
? undefined
|
|
750
|
+
: 0
|
|
751
|
+
: // If the node starts out as removed, then it remains removed in the output context iff it is not the node that is moved into the field
|
|
752
|
+
!areEqualRegisterIdsOpt(register, nodeMovedIntoField)
|
|
753
|
+
? undefined
|
|
754
|
+
: 0;
|
|
755
|
+
return [nodeId, inputIndex, outputIndex];
|
|
756
|
+
});
|
|
728
757
|
}
|
|
729
758
|
|
|
730
759
|
function* relevantRemovedRoots(
|
|
@@ -101,7 +101,7 @@ export function getMoveEffect(
|
|
|
101
101
|
id: MoveId,
|
|
102
102
|
count: number,
|
|
103
103
|
addDependency: boolean = true,
|
|
104
|
-
): RangeQueryResult<MoveEffect> {
|
|
104
|
+
): RangeQueryResult<ChangeAtomId, MoveEffect> {
|
|
105
105
|
const result = moveEffects.get(target, revision, id, count, addDependency);
|
|
106
106
|
return result.value !== undefined
|
|
107
107
|
? { ...result, value: adjustMoveEffectBasis(result.value as MoveEffectWithBasis, id) }
|
|
@@ -545,9 +545,14 @@ function getMovedChangesFromBaseMark(
|
|
|
545
545
|
baseMark: Mark,
|
|
546
546
|
): NodeId | undefined {
|
|
547
547
|
if (isMoveIn(baseMark)) {
|
|
548
|
-
return getMovedNodeChanges(moveEffects, baseMark.revision, baseMark.id);
|
|
548
|
+
return getMovedNodeChanges(moveEffects, baseMark.revision, baseMark.id, baseMark.count);
|
|
549
549
|
} else if (isAttachAndDetachEffect(baseMark) && isMoveIn(baseMark.attach)) {
|
|
550
|
-
return getMovedNodeChanges(
|
|
550
|
+
return getMovedNodeChanges(
|
|
551
|
+
moveEffects,
|
|
552
|
+
baseMark.attach.revision,
|
|
553
|
+
baseMark.attach.id,
|
|
554
|
+
baseMark.count,
|
|
555
|
+
);
|
|
551
556
|
} else {
|
|
552
557
|
return undefined;
|
|
553
558
|
}
|
|
@@ -557,7 +562,8 @@ function getMovedNodeChanges(
|
|
|
557
562
|
moveEffects: MoveEffectTable,
|
|
558
563
|
revision: RevisionTag | undefined,
|
|
559
564
|
id: MoveId,
|
|
565
|
+
count: number,
|
|
560
566
|
): NodeId | undefined {
|
|
561
|
-
return getMoveEffect(moveEffects, CrossFieldTarget.Destination, revision, id,
|
|
567
|
+
return getMoveEffect(moveEffects, CrossFieldTarget.Destination, revision, id, count).value
|
|
562
568
|
?.rebasedChanges;
|
|
563
569
|
}
|
|
@@ -8,7 +8,6 @@ import { assert, unreachableCase } from "@fluidframework/core-utils/internal";
|
|
|
8
8
|
import {
|
|
9
9
|
type DeltaDetachedNodeChanges,
|
|
10
10
|
type DeltaDetachedNodeRename,
|
|
11
|
-
type DeltaFieldChanges,
|
|
12
11
|
type DeltaMark,
|
|
13
12
|
areEqualChangeAtomIds,
|
|
14
13
|
} from "../../core/index.js";
|
|
@@ -25,12 +24,12 @@ import {
|
|
|
25
24
|
getInputCellId,
|
|
26
25
|
isAttachAndDetachEffect,
|
|
27
26
|
} from "./utils.js";
|
|
28
|
-
import type { ToDelta } from "../modular-schema/index.js";
|
|
27
|
+
import type { FieldChangeDelta, ToDelta } from "../modular-schema/index.js";
|
|
29
28
|
|
|
30
29
|
export function sequenceFieldToDelta(
|
|
31
30
|
change: MarkList,
|
|
32
31
|
deltaFromChild: ToDelta,
|
|
33
|
-
):
|
|
32
|
+
): FieldChangeDelta {
|
|
34
33
|
const local: DeltaMark[] = [];
|
|
35
34
|
const global: DeltaDetachedNodeChanges[] = [];
|
|
36
35
|
const rename: DeltaDetachedNodeRename[] = [];
|
|
@@ -187,7 +186,7 @@ export function sequenceFieldToDelta(
|
|
|
187
186
|
}
|
|
188
187
|
local.pop();
|
|
189
188
|
}
|
|
190
|
-
const delta: Mutable<
|
|
189
|
+
const delta: Mutable<FieldChangeDelta> = {};
|
|
191
190
|
if (local.length > 0) {
|
|
192
191
|
delta.local = local;
|
|
193
192
|
}
|
|
@@ -19,6 +19,7 @@ import {
|
|
|
19
19
|
CrossFieldTarget,
|
|
20
20
|
type NodeId,
|
|
21
21
|
type CrossFieldKeyRange,
|
|
22
|
+
type NestedChangesIndices,
|
|
22
23
|
} from "../modular-schema/index.js";
|
|
23
24
|
|
|
24
25
|
import type {
|
|
@@ -61,15 +62,25 @@ export function createEmpty(): Changeset {
|
|
|
61
62
|
return [];
|
|
62
63
|
}
|
|
63
64
|
|
|
64
|
-
export function getNestedChanges(change: Changeset):
|
|
65
|
-
const output:
|
|
66
|
-
let
|
|
67
|
-
|
|
65
|
+
export function getNestedChanges(change: Changeset): NestedChangesIndices {
|
|
66
|
+
const output: NestedChangesIndices = [];
|
|
67
|
+
let inputIndex = 0;
|
|
68
|
+
let outputIndex = 0;
|
|
69
|
+
for (const mark of change) {
|
|
70
|
+
const { changes, count } = mark;
|
|
68
71
|
if (changes !== undefined) {
|
|
69
|
-
output.push([
|
|
72
|
+
output.push([
|
|
73
|
+
changes,
|
|
74
|
+
!areInputCellsEmpty(mark) ? inputIndex : undefined /* inputIndex */,
|
|
75
|
+
!areOutputCellsEmpty(mark) ? outputIndex : undefined /* outputIndex */,
|
|
76
|
+
]);
|
|
77
|
+
}
|
|
78
|
+
if (!areInputCellsEmpty(mark)) {
|
|
79
|
+
inputIndex += count;
|
|
70
80
|
}
|
|
71
|
-
|
|
72
|
-
|
|
81
|
+
|
|
82
|
+
if (!areOutputCellsEmpty(mark)) {
|
|
83
|
+
outputIndex += count;
|
|
73
84
|
}
|
|
74
85
|
}
|
|
75
86
|
return output;
|
|
@@ -931,13 +942,45 @@ function getCrossFieldKeysForMarkEffect(
|
|
|
931
942
|
// An insert behaves like a move where the source and destination are at the same location.
|
|
932
943
|
// An insert can become a move when after rebasing.
|
|
933
944
|
return [
|
|
934
|
-
|
|
935
|
-
|
|
945
|
+
{
|
|
946
|
+
key: {
|
|
947
|
+
target: CrossFieldTarget.Source,
|
|
948
|
+
revision: effect.revision,
|
|
949
|
+
localId: effect.id,
|
|
950
|
+
},
|
|
951
|
+
count,
|
|
952
|
+
},
|
|
953
|
+
{
|
|
954
|
+
key: {
|
|
955
|
+
target: CrossFieldTarget.Destination,
|
|
956
|
+
revision: effect.revision,
|
|
957
|
+
localId: effect.id,
|
|
958
|
+
},
|
|
959
|
+
count,
|
|
960
|
+
},
|
|
936
961
|
];
|
|
937
962
|
case "MoveOut":
|
|
938
|
-
return [
|
|
963
|
+
return [
|
|
964
|
+
{
|
|
965
|
+
key: {
|
|
966
|
+
target: CrossFieldTarget.Source,
|
|
967
|
+
revision: effect.revision,
|
|
968
|
+
localId: effect.id,
|
|
969
|
+
},
|
|
970
|
+
count,
|
|
971
|
+
},
|
|
972
|
+
];
|
|
939
973
|
case "MoveIn":
|
|
940
|
-
return [
|
|
974
|
+
return [
|
|
975
|
+
{
|
|
976
|
+
key: {
|
|
977
|
+
target: CrossFieldTarget.Destination,
|
|
978
|
+
revision: effect.revision,
|
|
979
|
+
localId: effect.id,
|
|
980
|
+
},
|
|
981
|
+
count,
|
|
982
|
+
},
|
|
983
|
+
];
|
|
941
984
|
case "AttachAndDetach":
|
|
942
985
|
return [
|
|
943
986
|
...getCrossFieldKeysForMarkEffect(effect.attach, count),
|
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
rootField,
|
|
21
21
|
} from "../core/index.js";
|
|
22
22
|
import { fail } from "../util/index.js";
|
|
23
|
+
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
23
24
|
|
|
24
25
|
/**
|
|
25
26
|
* {@link ITreeCursorSynchronous} that can return the underlying node objects.
|
|
@@ -177,7 +178,11 @@ class StackCursor<TNode> extends SynchronousCursor implements CursorWithNode<TNo
|
|
|
177
178
|
public enterNode(index: number): void {
|
|
178
179
|
// assert(this.mode === CursorLocationType.Fields, "must be in fields mode");
|
|
179
180
|
const siblings = this.getField();
|
|
180
|
-
|
|
181
|
+
if (!(index in siblings)) {
|
|
182
|
+
throw new UsageError(
|
|
183
|
+
"A child does not exist at the specified index, check the status of a node using `Tree.status()`.",
|
|
184
|
+
);
|
|
185
|
+
}
|
|
181
186
|
this.siblingStack.push(this.siblings);
|
|
182
187
|
this.indexStack.push(this.index);
|
|
183
188
|
this.index = index;
|
package/src/index.ts
CHANGED
|
@@ -14,13 +14,38 @@ export {
|
|
|
14
14
|
type RevertibleAlpha,
|
|
15
15
|
} from "./core/index.js";
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
Listeners,
|
|
19
|
-
IsListener,
|
|
20
|
-
Listenable,
|
|
21
|
-
Off,
|
|
17
|
+
import type {
|
|
18
|
+
Listeners as EventListeners,
|
|
19
|
+
IsListener as EventIsListener,
|
|
20
|
+
Listenable as EventListenable,
|
|
21
|
+
Off as EventOff,
|
|
22
22
|
} from "@fluidframework/core-interfaces";
|
|
23
23
|
|
|
24
|
+
/**
|
|
25
|
+
* {@inheritdoc @fluidframework/core-interfaces#Listeners}
|
|
26
|
+
* @public
|
|
27
|
+
* @deprecated Deprecated in `@fluidframework/tree`. Consider importing from `fluid-framework` or `@fluidframework/core-interfaces` instead.
|
|
28
|
+
*/
|
|
29
|
+
export type Listeners<T extends object> = EventListeners<T>;
|
|
30
|
+
/**
|
|
31
|
+
* {@inheritdoc @fluidframework/core-interfaces#IsListener}
|
|
32
|
+
* @public
|
|
33
|
+
* @deprecated Deprecated in `@fluidframework/tree`. Consider importing from `fluid-framework` or `@fluidframework/core-interfaces` instead.
|
|
34
|
+
*/
|
|
35
|
+
export type IsListener<T> = EventIsListener<T>;
|
|
36
|
+
/**
|
|
37
|
+
* {@inheritdoc @fluidframework/core-interfaces#Listenable}
|
|
38
|
+
* @public
|
|
39
|
+
* @deprecated Deprecated in `@fluidframework/tree`. Consider importing from `fluid-framework` or `@fluidframework/core-interfaces` instead.
|
|
40
|
+
*/
|
|
41
|
+
export type Listenable<T extends object> = EventListenable<T>;
|
|
42
|
+
/**
|
|
43
|
+
* {@inheritdoc @fluidframework/core-interfaces#Off}
|
|
44
|
+
* @public
|
|
45
|
+
* @deprecated Deprecated in `@fluidframework/tree`. Consider importing from `fluid-framework` or `@fluidframework/core-interfaces` instead.
|
|
46
|
+
*/
|
|
47
|
+
export type Off = EventOff;
|
|
48
|
+
|
|
24
49
|
export {
|
|
25
50
|
TreeStatus,
|
|
26
51
|
TreeCompressionStrategy,
|
|
@@ -32,7 +57,7 @@ export {
|
|
|
32
57
|
export {
|
|
33
58
|
type ITreeInternal,
|
|
34
59
|
type SharedTreeOptions,
|
|
35
|
-
ForestType,
|
|
60
|
+
type ForestType,
|
|
36
61
|
type SharedTreeFormatOptions,
|
|
37
62
|
SharedTreeFormatVersion,
|
|
38
63
|
Tree,
|
|
@@ -48,6 +73,16 @@ export {
|
|
|
48
73
|
type ViewContent,
|
|
49
74
|
TreeAlpha,
|
|
50
75
|
independentView,
|
|
76
|
+
type RunTransactionParams,
|
|
77
|
+
type VoidTransactionCallbackStatus,
|
|
78
|
+
type TransactionCallbackStatus,
|
|
79
|
+
type TransactionResult,
|
|
80
|
+
type TransactionResultExt,
|
|
81
|
+
type TransactionResultSuccess,
|
|
82
|
+
type TransactionResultFailed,
|
|
83
|
+
ForestTypeOptimized,
|
|
84
|
+
ForestTypeExpensiveDebug,
|
|
85
|
+
ForestTypeReference,
|
|
51
86
|
} from "./shared-tree/index.js";
|
|
52
87
|
|
|
53
88
|
export {
|
|
@@ -64,6 +99,8 @@ export {
|
|
|
64
99
|
type TreeView,
|
|
65
100
|
type TreeViewEvents,
|
|
66
101
|
SchemaFactory,
|
|
102
|
+
SchemaFactoryAlpha,
|
|
103
|
+
type SchemaFactoryObjectOptions,
|
|
67
104
|
type ImplicitFieldSchema,
|
|
68
105
|
type TreeFieldFromImplicitField,
|
|
69
106
|
type TreeChangeEvents,
|
|
@@ -175,6 +212,8 @@ export {
|
|
|
175
212
|
type TreeBranch,
|
|
176
213
|
type TreeBranchEvents,
|
|
177
214
|
asTreeViewAlpha,
|
|
215
|
+
type NodeSchemaOptions,
|
|
216
|
+
type NodeSchemaMetadata,
|
|
178
217
|
} from "./simple-tree/index.js";
|
|
179
218
|
export {
|
|
180
219
|
SharedTree,
|
package/src/packageVersion.ts
CHANGED
package/src/shared-tree/index.ts
CHANGED
|
@@ -9,7 +9,7 @@ export {
|
|
|
9
9
|
type SharedTreeOptions,
|
|
10
10
|
SharedTree,
|
|
11
11
|
getBranch,
|
|
12
|
-
ForestType,
|
|
12
|
+
type ForestType,
|
|
13
13
|
type SharedTreeContentSnapshot,
|
|
14
14
|
type SharedTreeFormatOptions,
|
|
15
15
|
SharedTreeFormatVersion,
|
|
@@ -17,6 +17,9 @@ export {
|
|
|
17
17
|
defaultSharedTreeOptions,
|
|
18
18
|
type ForestOptions,
|
|
19
19
|
type ITreeInternal,
|
|
20
|
+
ForestTypeOptimized,
|
|
21
|
+
ForestTypeExpensiveDebug,
|
|
22
|
+
ForestTypeReference,
|
|
20
23
|
} from "./sharedTree.js";
|
|
21
24
|
|
|
22
25
|
export {
|
|
@@ -40,11 +43,21 @@ export type { ISharedTreeEditor, ISchemaEditor } from "./sharedTreeEditBuilder.j
|
|
|
40
43
|
export {
|
|
41
44
|
treeApi as Tree,
|
|
42
45
|
type TreeApi,
|
|
46
|
+
type RunTransaction,
|
|
47
|
+
} from "./treeApi.js";
|
|
48
|
+
|
|
49
|
+
export {
|
|
43
50
|
type TransactionConstraint,
|
|
44
51
|
type NodeInDocumentConstraint,
|
|
45
|
-
type
|
|
52
|
+
type RunTransactionParams,
|
|
53
|
+
type VoidTransactionCallbackStatus,
|
|
54
|
+
type TransactionCallbackStatus,
|
|
55
|
+
type TransactionResult,
|
|
56
|
+
type TransactionResultExt,
|
|
57
|
+
type TransactionResultSuccess,
|
|
58
|
+
type TransactionResultFailed,
|
|
46
59
|
rollback,
|
|
47
|
-
} from "./
|
|
60
|
+
} from "./transactionTypes.js";
|
|
48
61
|
|
|
49
62
|
export { TreeAlpha } from "./treeApiAlpha.js";
|
|
50
63
|
|
|
@@ -9,7 +9,7 @@ import type {
|
|
|
9
9
|
Listenable,
|
|
10
10
|
} from "@fluidframework/core-interfaces/internal";
|
|
11
11
|
import { createEmitter } from "@fluid-internal/client-utils";
|
|
12
|
-
import { assert } from "@fluidframework/core-utils/internal";
|
|
12
|
+
import { assert, unreachableCase } from "@fluidframework/core-utils/internal";
|
|
13
13
|
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
14
14
|
|
|
15
15
|
import { AllowedUpdateType, anchorSlot, type SchemaPolicy } from "../core/index.js";
|
|
@@ -19,6 +19,7 @@ import {
|
|
|
19
19
|
ContextSlot,
|
|
20
20
|
cursorForMapTreeNode,
|
|
21
21
|
type FullSchemaPolicy,
|
|
22
|
+
TreeStatus,
|
|
22
23
|
} from "../feature-libraries/index.js";
|
|
23
24
|
import {
|
|
24
25
|
type FieldSchema,
|
|
@@ -43,6 +44,8 @@ import {
|
|
|
43
44
|
type UnsafeUnknownSchema,
|
|
44
45
|
type TreeBranch,
|
|
45
46
|
type TreeBranchEvents,
|
|
47
|
+
getOrCreateInnerNode,
|
|
48
|
+
getKernel,
|
|
46
49
|
} from "../simple-tree/index.js";
|
|
47
50
|
import { Breakable, breakingClass, disposeSymbol, type WithBreakable } from "../util/index.js";
|
|
48
51
|
|
|
@@ -55,6 +58,14 @@ import {
|
|
|
55
58
|
areImplicitFieldSchemaEqual,
|
|
56
59
|
createUnknownOptionalFieldPolicy,
|
|
57
60
|
} from "../simple-tree/index.js";
|
|
61
|
+
import type {
|
|
62
|
+
VoidTransactionCallbackStatus,
|
|
63
|
+
TransactionCallbackStatus,
|
|
64
|
+
TransactionResult,
|
|
65
|
+
TransactionResultExt,
|
|
66
|
+
RunTransactionParams,
|
|
67
|
+
TransactionConstraint,
|
|
68
|
+
} from "./transactionTypes.js";
|
|
58
69
|
|
|
59
70
|
/**
|
|
60
71
|
* Creating multiple tree views from the same checkout is not supported. This slot is used to detect if one already
|
|
@@ -213,6 +224,84 @@ export class SchematizingSimpleTreeView<
|
|
|
213
224
|
return this.view;
|
|
214
225
|
}
|
|
215
226
|
|
|
227
|
+
/**
|
|
228
|
+
* {@inheritDoc @fluidframework/shared-tree#TreeViewAlpha.runTransaction}
|
|
229
|
+
*/
|
|
230
|
+
public runTransaction<TSuccessValue, TFailureValue>(
|
|
231
|
+
transaction: () => TransactionCallbackStatus<TSuccessValue, TFailureValue>,
|
|
232
|
+
params?: RunTransactionParams,
|
|
233
|
+
): TransactionResultExt<TSuccessValue, TFailureValue>;
|
|
234
|
+
/**
|
|
235
|
+
* {@inheritDoc @fluidframework/shared-tree#TreeViewAlpha.runTransaction}
|
|
236
|
+
*/
|
|
237
|
+
public runTransaction(
|
|
238
|
+
transaction: () => VoidTransactionCallbackStatus | void,
|
|
239
|
+
params?: RunTransactionParams,
|
|
240
|
+
): TransactionResult;
|
|
241
|
+
public runTransaction<TSuccessValue, TFailureValue>(
|
|
242
|
+
transaction: () =>
|
|
243
|
+
| TransactionCallbackStatus<TSuccessValue, TFailureValue>
|
|
244
|
+
| VoidTransactionCallbackStatus
|
|
245
|
+
| void,
|
|
246
|
+
params?: RunTransactionParams,
|
|
247
|
+
): TransactionResultExt<TSuccessValue, TFailureValue> | TransactionResult {
|
|
248
|
+
const addConstraints = (
|
|
249
|
+
constraintsOnRevert: boolean,
|
|
250
|
+
constraints: readonly TransactionConstraint[] = [],
|
|
251
|
+
): void => {
|
|
252
|
+
for (const constraint of constraints) {
|
|
253
|
+
switch (constraint.type) {
|
|
254
|
+
case "nodeInDocument": {
|
|
255
|
+
const node = getOrCreateInnerNode(constraint.node);
|
|
256
|
+
const nodeStatus = getKernel(constraint.node).getStatus();
|
|
257
|
+
if (nodeStatus !== TreeStatus.InDocument) {
|
|
258
|
+
const revertText = constraintsOnRevert ? " on revert" : "";
|
|
259
|
+
throw new UsageError(
|
|
260
|
+
`Attempted to add a "nodeInDocument" constraint${revertText}, but the node is not currently in the document. Node status: ${nodeStatus}`,
|
|
261
|
+
);
|
|
262
|
+
}
|
|
263
|
+
if (constraintsOnRevert) {
|
|
264
|
+
this.checkout.editor.addNodeExistsConstraintOnRevert(node.anchorNode);
|
|
265
|
+
} else {
|
|
266
|
+
this.checkout.editor.addNodeExistsConstraint(node.anchorNode);
|
|
267
|
+
}
|
|
268
|
+
break;
|
|
269
|
+
}
|
|
270
|
+
default:
|
|
271
|
+
unreachableCase(constraint.type);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
};
|
|
275
|
+
|
|
276
|
+
this.checkout.transaction.start();
|
|
277
|
+
|
|
278
|
+
// Validate preconditions before running the transaction callback.
|
|
279
|
+
addConstraints(false /* constraintsOnRevert */, params?.preconditions);
|
|
280
|
+
const transactionCallbackStatus = transaction();
|
|
281
|
+
const rollback = transactionCallbackStatus?.rollback;
|
|
282
|
+
const value = (
|
|
283
|
+
transactionCallbackStatus as TransactionCallbackStatus<TSuccessValue, TFailureValue>
|
|
284
|
+
)?.value;
|
|
285
|
+
|
|
286
|
+
if (rollback === true) {
|
|
287
|
+
this.checkout.transaction.abort();
|
|
288
|
+
return value !== undefined
|
|
289
|
+
? { success: false, value: value as TFailureValue }
|
|
290
|
+
: { success: false };
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
// Validate preconditions on revert after running the transaction callback and was successful.
|
|
294
|
+
addConstraints(
|
|
295
|
+
true /* constraintsOnRevert */,
|
|
296
|
+
transactionCallbackStatus?.preconditionsOnRevert,
|
|
297
|
+
);
|
|
298
|
+
|
|
299
|
+
this.checkout.transaction.commit();
|
|
300
|
+
return value !== undefined
|
|
301
|
+
? { success: true, value: value as TSuccessValue }
|
|
302
|
+
: { success: true };
|
|
303
|
+
}
|
|
304
|
+
|
|
216
305
|
private ensureUndisposed(): void {
|
|
217
306
|
if (this.disposed) {
|
|
218
307
|
this.failDisposed();
|
|
@@ -383,7 +472,7 @@ export class SchematizingSimpleTreeView<
|
|
|
383
472
|
|
|
384
473
|
// #region Branching
|
|
385
474
|
|
|
386
|
-
public fork(): ReturnType<TreeBranch["fork"]> &
|
|
475
|
+
public fork(): ReturnType<TreeBranch["fork"]> & SchematizingSimpleTreeView<TRootSchema> {
|
|
387
476
|
return this.checkout.branch().viewWith(this.config);
|
|
388
477
|
}
|
|
389
478
|
|