@fluidframework/tree 2.4.0-297027 → 2.4.0-299374
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/.dependency-cruiser-known-violations.json +0 -14
- package/.vscode/settings.json +9 -1
- package/api-report/tree.alpha.api.md +178 -21
- package/api-report/tree.beta.api.md +46 -21
- package/api-report/tree.legacy.alpha.api.md +46 -21
- package/api-report/tree.legacy.public.api.md +46 -21
- package/api-report/tree.public.api.md +46 -21
- package/dist/alpha.d.ts +29 -1
- package/dist/beta.d.ts +2 -0
- package/dist/codec/codec.d.ts +4 -4
- package/dist/codec/codec.js.map +1 -1
- package/dist/codec/noopValidator.d.ts +1 -1
- package/dist/codec/noopValidator.js +1 -1
- package/dist/codec/noopValidator.js.map +1 -1
- package/dist/core/change-family/changeFamily.d.ts +2 -2
- package/dist/core/change-family/changeFamily.d.ts.map +1 -1
- package/dist/core/change-family/changeFamily.js.map +1 -1
- package/dist/core/change-family/editBuilder.d.ts +3 -2
- package/dist/core/change-family/editBuilder.d.ts.map +1 -1
- package/dist/core/change-family/editBuilder.js.map +1 -1
- package/dist/core/rebase/changeRebaser.d.ts +2 -1
- package/dist/core/rebase/changeRebaser.d.ts.map +1 -1
- package/dist/core/rebase/changeRebaser.js.map +1 -1
- package/dist/core/rebase/utils.js +1 -1
- package/dist/core/rebase/utils.js.map +1 -1
- package/dist/core/tree/anchorSet.d.ts +159 -2
- package/dist/core/tree/anchorSet.d.ts.map +1 -1
- package/dist/core/tree/anchorSet.js +54 -12
- package/dist/core/tree/anchorSet.js.map +1 -1
- package/dist/external-utilities/typeboxValidator.d.ts +1 -1
- package/dist/external-utilities/typeboxValidator.js +1 -1
- package/dist/external-utilities/typeboxValidator.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +4 -3
- package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.js +41 -30
- package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +4 -6
- 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/flex-tree/lazyField.d.ts +4 -0
- package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.js +38 -6
- package/dist/feature-libraries/flex-tree/lazyField.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 +46 -49
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
- package/dist/feature-libraries/mitigatedChangeFamily.js +4 -4
- package/dist/feature-libraries/mitigatedChangeFamily.js.map +1 -1
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +1 -1
- 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/modularChangeFamily.d.ts +12 -8
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js +179 -60
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/dist/feature-libraries/optional-field/optionalField.d.ts +10 -9
- package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
- package/dist/feature-libraries/optional-field/optionalField.js +9 -7
- package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
- package/dist/feature-libraries/schema-index/schemaSummarizer.d.ts +3 -10
- package/dist/feature-libraries/schema-index/schemaSummarizer.d.ts.map +1 -1
- package/dist/feature-libraries/schema-index/schemaSummarizer.js +1 -8
- package/dist/feature-libraries/schema-index/schemaSummarizer.js.map +1 -1
- package/dist/feature-libraries/sequence-field/compose.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/compose.js +32 -20
- package/dist/feature-libraries/sequence-field/compose.js.map +1 -1
- package/dist/feature-libraries/sequence-field/invert.d.ts +6 -1
- package/dist/feature-libraries/sequence-field/invert.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/invert.js +25 -9
- package/dist/feature-libraries/sequence-field/invert.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldEditor.d.ts +17 -16
- package/dist/feature-libraries/sequence-field/sequenceFieldEditor.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldEditor.js +19 -11
- package/dist/feature-libraries/sequence-field/sequenceFieldEditor.js.map +1 -1
- package/dist/feature-libraries/treeCompressionUtils.d.ts +1 -1
- package/dist/feature-libraries/treeCompressionUtils.js +1 -1
- package/dist/feature-libraries/treeCompressionUtils.js.map +1 -1
- package/dist/index.d.ts +6 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/internalTypes.d.ts +2 -2
- package/dist/internalTypes.d.ts.map +1 -1
- package/dist/internalTypes.js.map +1 -1
- package/dist/legacy.d.ts +2 -0
- 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 +2 -1
- package/dist/shared-tree/index.d.ts.map +1 -1
- package/dist/shared-tree/index.js +5 -1
- package/dist/shared-tree/index.js.map +1 -1
- package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +1 -14
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree/sharedTree.d.ts +24 -9
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +21 -9
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/sharedTreeChangeFamily.d.ts +2 -2
- package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
- package/dist/shared-tree/sharedTreeChangeFamily.js +4 -4
- package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
- package/dist/shared-tree/sharedTreeEditBuilder.d.ts +2 -2
- package/dist/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
- package/dist/shared-tree/sharedTreeEditBuilder.js +15 -11
- package/dist/shared-tree/sharedTreeEditBuilder.js.map +1 -1
- package/dist/shared-tree/treeApi.d.ts +6 -6
- package/dist/shared-tree/treeApi.d.ts.map +1 -1
- package/dist/shared-tree/treeApi.js.map +1 -1
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +4 -3
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree-core/branch.d.ts +2 -3
- package/dist/shared-tree-core/branch.d.ts.map +1 -1
- package/dist/shared-tree-core/branch.js +10 -11
- package/dist/shared-tree-core/branch.js.map +1 -1
- package/dist/shared-tree-core/defaultResubmitMachine.d.ts +5 -5
- package/dist/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
- package/dist/shared-tree-core/defaultResubmitMachine.js +4 -4
- package/dist/shared-tree-core/defaultResubmitMachine.js.map +1 -1
- package/dist/shared-tree-core/editManager.d.ts.map +1 -1
- package/dist/shared-tree-core/editManager.js +1 -1
- package/dist/shared-tree-core/editManager.js.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.js +2 -2
- package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/dist/simple-tree/api/conciseTree.d.ts +29 -0
- package/dist/simple-tree/api/conciseTree.d.ts.map +1 -0
- package/dist/simple-tree/api/conciseTree.js +25 -0
- package/dist/simple-tree/api/conciseTree.js.map +1 -0
- package/dist/simple-tree/api/customTree.d.ts +44 -0
- package/dist/simple-tree/api/customTree.d.ts.map +1 -0
- package/dist/simple-tree/api/customTree.js +63 -0
- package/dist/simple-tree/api/customTree.js.map +1 -0
- package/dist/simple-tree/api/index.d.ts +7 -2
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js +5 -1
- package/dist/simple-tree/api/index.js.map +1 -1
- package/dist/simple-tree/api/schemaCreationUtilities.d.ts +41 -26
- package/dist/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaCreationUtilities.js +43 -15
- package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
- package/dist/simple-tree/api/schemaFactory.d.ts +1 -2
- package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactory.js +8 -8
- package/dist/simple-tree/api/schemaFactory.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +1 -2
- package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
- package/dist/simple-tree/api/storedSchema.d.ts +78 -0
- package/dist/simple-tree/api/storedSchema.d.ts.map +1 -0
- package/dist/simple-tree/api/storedSchema.js +107 -0
- package/dist/simple-tree/api/storedSchema.js.map +1 -0
- package/dist/simple-tree/api/testRecursiveDomain.d.ts +10 -10
- package/dist/simple-tree/api/tree.d.ts +12 -3
- 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.d.ts.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.js +5 -5
- package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
- package/dist/simple-tree/{typesUnsafe.d.ts → api/typesUnsafe.d.ts} +58 -10
- package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -0
- package/dist/simple-tree/api/typesUnsafe.js.map +1 -0
- package/dist/simple-tree/api/verboseTree.d.ts +6 -20
- package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
- package/dist/simple-tree/api/verboseTree.js +10 -48
- package/dist/simple-tree/api/verboseTree.js.map +1 -1
- package/dist/simple-tree/arrayNode.d.ts +14 -3
- package/dist/simple-tree/arrayNode.d.ts.map +1 -1
- package/dist/simple-tree/arrayNode.js +1 -2
- package/dist/simple-tree/arrayNode.js.map +1 -1
- package/dist/simple-tree/core/index.d.ts +1 -1
- package/dist/simple-tree/core/index.d.ts.map +1 -1
- package/dist/simple-tree/core/index.js +2 -1
- package/dist/simple-tree/core/index.js.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.d.ts +9 -0
- package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js +14 -1
- package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.d.ts +6 -5
- 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/core/unhydratedFlexTree.d.ts.map +1 -1
- package/dist/simple-tree/core/unhydratedFlexTree.js +3 -1
- package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
- package/dist/simple-tree/core/withType.d.ts +3 -1
- package/dist/simple-tree/core/withType.d.ts.map +1 -1
- package/dist/simple-tree/core/withType.js.map +1 -1
- package/dist/simple-tree/flexList.d.ts.map +1 -0
- package/dist/simple-tree/flexList.js.map +1 -0
- package/dist/simple-tree/index.d.ts +6 -7
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +5 -3
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/mapNode.d.ts.map +1 -1
- package/dist/simple-tree/mapNode.js +2 -3
- package/dist/simple-tree/mapNode.js.map +1 -1
- package/dist/simple-tree/objectNode.d.ts.map +1 -1
- package/dist/simple-tree/objectNode.js +3 -4
- package/dist/simple-tree/objectNode.js.map +1 -1
- package/dist/simple-tree/schemaTypes.d.ts +60 -7
- package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
- package/dist/simple-tree/schemaTypes.js +11 -6
- package/dist/simple-tree/schemaTypes.js.map +1 -1
- package/dist/simple-tree/toFlexSchema.d.ts.map +1 -1
- package/dist/simple-tree/toFlexSchema.js +13 -15
- package/dist/simple-tree/toFlexSchema.js.map +1 -1
- package/dist/simple-tree/toMapTree.d.ts +4 -2
- package/dist/simple-tree/toMapTree.d.ts.map +1 -1
- package/dist/simple-tree/toMapTree.js +3 -3
- package/dist/simple-tree/toMapTree.js.map +1 -1
- package/dist/simple-tree/treeNodeValid.d.ts.map +1 -1
- package/dist/simple-tree/treeNodeValid.js +2 -1
- package/dist/simple-tree/treeNodeValid.js.map +1 -1
- package/dist/treeFactory.d.ts +1 -0
- package/dist/treeFactory.d.ts.map +1 -1
- package/dist/treeFactory.js +1 -0
- package/dist/treeFactory.js.map +1 -1
- package/dist/util/utils.d.ts +10 -8
- package/dist/util/utils.d.ts.map +1 -1
- package/dist/util/utils.js.map +1 -1
- package/docs/main/detached-trees.md +8 -8
- package/lib/alpha.d.ts +29 -1
- package/lib/beta.d.ts +2 -0
- package/lib/codec/codec.d.ts +4 -4
- package/lib/codec/codec.js.map +1 -1
- package/lib/codec/noopValidator.d.ts +1 -1
- package/lib/codec/noopValidator.js +1 -1
- package/lib/codec/noopValidator.js.map +1 -1
- package/lib/core/change-family/changeFamily.d.ts +2 -2
- package/lib/core/change-family/changeFamily.d.ts.map +1 -1
- package/lib/core/change-family/changeFamily.js.map +1 -1
- package/lib/core/change-family/editBuilder.d.ts +3 -2
- package/lib/core/change-family/editBuilder.d.ts.map +1 -1
- package/lib/core/change-family/editBuilder.js.map +1 -1
- package/lib/core/rebase/changeRebaser.d.ts +2 -1
- package/lib/core/rebase/changeRebaser.d.ts.map +1 -1
- package/lib/core/rebase/changeRebaser.js.map +1 -1
- package/lib/core/rebase/utils.js +1 -1
- package/lib/core/rebase/utils.js.map +1 -1
- package/lib/core/tree/anchorSet.d.ts +159 -2
- package/lib/core/tree/anchorSet.d.ts.map +1 -1
- package/lib/core/tree/anchorSet.js +54 -12
- package/lib/core/tree/anchorSet.js.map +1 -1
- package/lib/external-utilities/typeboxValidator.d.ts +1 -1
- package/lib/external-utilities/typeboxValidator.js +1 -1
- package/lib/external-utilities/typeboxValidator.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +4 -3
- package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.js +41 -30
- package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +4 -6
- 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/flex-tree/lazyField.d.ts +4 -0
- package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.js +36 -5
- package/lib/feature-libraries/flex-tree/lazyField.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/mitigatedChangeFamily.d.ts.map +1 -1
- package/lib/feature-libraries/mitigatedChangeFamily.js +4 -4
- package/lib/feature-libraries/mitigatedChangeFamily.js.map +1 -1
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +1 -1
- 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/modularChangeFamily.d.ts +12 -8
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js +180 -61
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/lib/feature-libraries/optional-field/optionalField.d.ts +10 -9
- package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
- package/lib/feature-libraries/optional-field/optionalField.js +9 -7
- package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
- package/lib/feature-libraries/schema-index/schemaSummarizer.d.ts +3 -10
- package/lib/feature-libraries/schema-index/schemaSummarizer.d.ts.map +1 -1
- package/lib/feature-libraries/schema-index/schemaSummarizer.js +1 -8
- package/lib/feature-libraries/schema-index/schemaSummarizer.js.map +1 -1
- package/lib/feature-libraries/sequence-field/compose.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/compose.js +32 -20
- package/lib/feature-libraries/sequence-field/compose.js.map +1 -1
- package/lib/feature-libraries/sequence-field/invert.d.ts +6 -1
- package/lib/feature-libraries/sequence-field/invert.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/invert.js +25 -9
- package/lib/feature-libraries/sequence-field/invert.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldEditor.d.ts +17 -16
- package/lib/feature-libraries/sequence-field/sequenceFieldEditor.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldEditor.js +19 -11
- package/lib/feature-libraries/sequence-field/sequenceFieldEditor.js.map +1 -1
- package/lib/feature-libraries/treeCompressionUtils.d.ts +1 -1
- package/lib/feature-libraries/treeCompressionUtils.js +1 -1
- package/lib/feature-libraries/treeCompressionUtils.js.map +1 -1
- package/lib/index.d.ts +6 -5
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +3 -3
- package/lib/index.js.map +1 -1
- package/lib/internalTypes.d.ts +2 -2
- package/lib/internalTypes.d.ts.map +1 -1
- package/lib/internalTypes.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 +2 -1
- package/lib/shared-tree/index.d.ts.map +1 -1
- package/lib/shared-tree/index.js +2 -1
- package/lib/shared-tree/index.js.map +1 -1
- package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +2 -15
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/shared-tree/sharedTree.d.ts +24 -9
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +20 -9
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/sharedTreeChangeFamily.d.ts +2 -2
- package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
- package/lib/shared-tree/sharedTreeChangeFamily.js +4 -4
- package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
- package/lib/shared-tree/sharedTreeEditBuilder.d.ts +2 -2
- package/lib/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
- package/lib/shared-tree/sharedTreeEditBuilder.js +15 -11
- package/lib/shared-tree/sharedTreeEditBuilder.js.map +1 -1
- package/lib/shared-tree/treeApi.d.ts +6 -6
- package/lib/shared-tree/treeApi.d.ts.map +1 -1
- package/lib/shared-tree/treeApi.js.map +1 -1
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +5 -4
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree-core/branch.d.ts +2 -3
- package/lib/shared-tree-core/branch.d.ts.map +1 -1
- package/lib/shared-tree-core/branch.js +11 -12
- package/lib/shared-tree-core/branch.js.map +1 -1
- package/lib/shared-tree-core/defaultResubmitMachine.d.ts +5 -5
- package/lib/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
- package/lib/shared-tree-core/defaultResubmitMachine.js +4 -4
- package/lib/shared-tree-core/defaultResubmitMachine.js.map +1 -1
- package/lib/shared-tree-core/editManager.d.ts.map +1 -1
- package/lib/shared-tree-core/editManager.js +2 -2
- package/lib/shared-tree-core/editManager.js.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.js +2 -2
- package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/lib/simple-tree/api/conciseTree.d.ts +29 -0
- package/lib/simple-tree/api/conciseTree.d.ts.map +1 -0
- package/lib/simple-tree/api/conciseTree.js +21 -0
- package/lib/simple-tree/api/conciseTree.js.map +1 -0
- package/lib/simple-tree/api/customTree.d.ts +44 -0
- package/lib/simple-tree/api/customTree.d.ts.map +1 -0
- package/lib/simple-tree/api/customTree.js +59 -0
- package/lib/simple-tree/api/customTree.js.map +1 -0
- package/lib/simple-tree/api/index.d.ts +7 -2
- 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/schemaCreationUtilities.d.ts +41 -26
- package/lib/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaCreationUtilities.js +43 -15
- package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
- package/lib/simple-tree/api/schemaFactory.d.ts +1 -2
- package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactory.js +1 -1
- package/lib/simple-tree/api/schemaFactory.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +1 -2
- package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
- package/lib/simple-tree/api/storedSchema.d.ts +78 -0
- package/lib/simple-tree/api/storedSchema.d.ts.map +1 -0
- package/lib/simple-tree/api/storedSchema.js +101 -0
- package/lib/simple-tree/api/storedSchema.js.map +1 -0
- package/lib/simple-tree/api/testRecursiveDomain.d.ts +10 -10
- package/lib/simple-tree/api/tree.d.ts +12 -3
- 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.d.ts.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.js +3 -3
- package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
- package/lib/simple-tree/{typesUnsafe.d.ts → api/typesUnsafe.d.ts} +58 -10
- package/lib/simple-tree/api/typesUnsafe.d.ts.map +1 -0
- package/lib/simple-tree/api/typesUnsafe.js.map +1 -0
- package/lib/simple-tree/api/verboseTree.d.ts +6 -20
- package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
- package/lib/simple-tree/api/verboseTree.js +11 -49
- package/lib/simple-tree/api/verboseTree.js.map +1 -1
- package/lib/simple-tree/arrayNode.d.ts +14 -3
- package/lib/simple-tree/arrayNode.d.ts.map +1 -1
- package/lib/simple-tree/arrayNode.js +1 -2
- package/lib/simple-tree/arrayNode.js.map +1 -1
- package/lib/simple-tree/core/index.d.ts +1 -1
- package/lib/simple-tree/core/index.d.ts.map +1 -1
- package/lib/simple-tree/core/index.js +1 -1
- package/lib/simple-tree/core/index.js.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.d.ts +9 -0
- package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js +12 -0
- package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.d.ts +6 -5
- 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/core/unhydratedFlexTree.d.ts.map +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.js +3 -1
- package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
- package/lib/simple-tree/core/withType.d.ts +3 -1
- package/lib/simple-tree/core/withType.d.ts.map +1 -1
- package/lib/simple-tree/core/withType.js.map +1 -1
- package/lib/simple-tree/flexList.d.ts.map +1 -0
- package/lib/simple-tree/flexList.js.map +1 -0
- package/lib/simple-tree/index.d.ts +6 -7
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +3 -4
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/mapNode.d.ts.map +1 -1
- package/lib/simple-tree/mapNode.js +1 -2
- package/lib/simple-tree/mapNode.js.map +1 -1
- package/lib/simple-tree/objectNode.d.ts.map +1 -1
- package/lib/simple-tree/objectNode.js +1 -2
- package/lib/simple-tree/objectNode.js.map +1 -1
- package/lib/simple-tree/schemaTypes.d.ts +60 -7
- package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
- package/lib/simple-tree/schemaTypes.js +6 -1
- package/lib/simple-tree/schemaTypes.js.map +1 -1
- package/lib/simple-tree/toFlexSchema.d.ts.map +1 -1
- package/lib/simple-tree/toFlexSchema.js +1 -3
- package/lib/simple-tree/toFlexSchema.js.map +1 -1
- package/lib/simple-tree/toMapTree.d.ts +4 -2
- package/lib/simple-tree/toMapTree.d.ts.map +1 -1
- package/lib/simple-tree/toMapTree.js +3 -3
- package/lib/simple-tree/toMapTree.js.map +1 -1
- package/lib/simple-tree/treeNodeValid.d.ts.map +1 -1
- package/lib/simple-tree/treeNodeValid.js +2 -1
- package/lib/simple-tree/treeNodeValid.js.map +1 -1
- package/lib/treeFactory.d.ts +1 -0
- package/lib/treeFactory.d.ts.map +1 -1
- package/lib/treeFactory.js +1 -0
- package/lib/treeFactory.js.map +1 -1
- package/lib/util/utils.d.ts +10 -8
- package/lib/util/utils.d.ts.map +1 -1
- package/lib/util/utils.js.map +1 -1
- package/package.json +44 -27
- package/src/codec/codec.ts +4 -4
- package/src/codec/noopValidator.ts +1 -1
- package/src/core/change-family/changeFamily.ts +5 -2
- package/src/core/change-family/editBuilder.ts +3 -2
- package/src/core/rebase/changeRebaser.ts +6 -1
- package/src/core/rebase/utils.ts +1 -1
- package/src/core/tree/anchorSet.ts +63 -13
- package/src/external-utilities/typeboxValidator.ts +1 -1
- package/src/feature-libraries/default-schema/defaultEditBuilder.ts +92 -47
- package/src/feature-libraries/default-schema/defaultFieldKinds.ts +7 -7
- package/src/feature-libraries/flex-tree/lazyField.ts +44 -7
- package/src/feature-libraries/index.ts +0 -10
- package/src/feature-libraries/mitigatedChangeFamily.ts +11 -4
- package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +1 -0
- package/src/feature-libraries/modular-schema/modularChangeFamily.ts +218 -175
- package/src/feature-libraries/optional-field/optionalField.ts +21 -17
- package/src/feature-libraries/schema-index/schemaSummarizer.ts +2 -10
- package/src/feature-libraries/sequence-field/compose.ts +67 -58
- package/src/feature-libraries/sequence-field/invert.ts +30 -6
- package/src/feature-libraries/sequence-field/sequenceFieldEditor.ts +65 -19
- package/src/feature-libraries/treeCompressionUtils.ts +1 -1
- package/src/index.ts +26 -6
- package/src/internalTypes.ts +4 -1
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/index.ts +5 -0
- package/src/shared-tree/schematizingTreeView.ts +7 -16
- package/src/shared-tree/sharedTree.ts +55 -23
- package/src/shared-tree/sharedTreeChangeFamily.ts +5 -1
- package/src/shared-tree/sharedTreeEditBuilder.ts +23 -12
- package/src/shared-tree/treeApi.ts +19 -9
- package/src/shared-tree/treeCheckout.ts +7 -6
- package/src/shared-tree-core/branch.ts +11 -14
- package/src/shared-tree-core/defaultResubmitMachine.ts +4 -4
- package/src/shared-tree-core/editManager.ts +2 -1
- package/src/shared-tree-core/sharedTreeCore.ts +4 -2
- package/src/simple-tree/api/conciseTree.ts +58 -0
- package/src/simple-tree/api/customTree.ts +119 -0
- package/src/simple-tree/api/index.ts +39 -1
- package/src/simple-tree/api/schemaCreationUtilities.ts +55 -36
- package/src/simple-tree/api/schemaFactory.ts +4 -6
- package/src/simple-tree/api/schemaFactoryRecursive.ts +1 -2
- package/src/simple-tree/api/storedSchema.ts +126 -0
- package/src/simple-tree/api/tree.ts +24 -2
- package/src/simple-tree/api/treeNodeApi.ts +3 -8
- package/src/simple-tree/{typesUnsafe.ts → api/typesUnsafe.ts} +95 -21
- package/src/simple-tree/api/verboseTree.ts +21 -76
- package/src/simple-tree/arrayNode.ts +35 -15
- package/src/simple-tree/core/index.ts +1 -0
- package/src/simple-tree/core/treeNodeKernel.ts +13 -0
- package/src/simple-tree/core/treeNodeSchema.ts +7 -5
- package/src/simple-tree/core/unhydratedFlexTree.ts +6 -1
- package/src/simple-tree/core/withType.ts +10 -1
- package/src/simple-tree/index.ts +41 -21
- package/src/simple-tree/mapNode.ts +1 -1
- package/src/simple-tree/objectNode.ts +1 -1
- package/src/simple-tree/schemaTypes.ts +70 -11
- package/src/simple-tree/toFlexSchema.ts +1 -3
- package/src/simple-tree/toMapTree.ts +7 -4
- package/src/simple-tree/treeNodeValid.ts +2 -1
- package/src/treeFactory.ts +1 -0
- package/src/util/utils.ts +10 -8
- package/dist/feature-libraries/flex-tree/unboxed.d.ts +0 -12
- package/dist/feature-libraries/flex-tree/unboxed.d.ts.map +0 -1
- package/dist/feature-libraries/flex-tree/unboxed.js +0 -20
- package/dist/feature-libraries/flex-tree/unboxed.js.map +0 -1
- package/dist/feature-libraries/typed-schema/flexList.d.ts.map +0 -1
- package/dist/feature-libraries/typed-schema/flexList.js.map +0 -1
- package/dist/feature-libraries/typed-schema/index.d.ts +0 -7
- package/dist/feature-libraries/typed-schema/index.d.ts.map +0 -1
- package/dist/feature-libraries/typed-schema/index.js +0 -12
- package/dist/feature-libraries/typed-schema/index.js.map +0 -1
- package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts +0 -14
- package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +0 -1
- package/dist/feature-libraries/typed-schema/typedTreeSchema.js +0 -7
- package/dist/feature-libraries/typed-schema/typedTreeSchema.js.map +0 -1
- package/dist/simple-tree/proxyBinding.d.ts +0 -15
- package/dist/simple-tree/proxyBinding.d.ts.map +0 -1
- package/dist/simple-tree/proxyBinding.js +0 -22
- package/dist/simple-tree/proxyBinding.js.map +0 -1
- package/dist/simple-tree/typesUnsafe.d.ts.map +0 -1
- package/dist/simple-tree/typesUnsafe.js.map +0 -1
- package/lib/feature-libraries/flex-tree/unboxed.d.ts +0 -12
- package/lib/feature-libraries/flex-tree/unboxed.d.ts.map +0 -1
- package/lib/feature-libraries/flex-tree/unboxed.js +0 -16
- package/lib/feature-libraries/flex-tree/unboxed.js.map +0 -1
- package/lib/feature-libraries/typed-schema/flexList.d.ts.map +0 -1
- package/lib/feature-libraries/typed-schema/flexList.js.map +0 -1
- package/lib/feature-libraries/typed-schema/index.d.ts +0 -7
- package/lib/feature-libraries/typed-schema/index.d.ts.map +0 -1
- package/lib/feature-libraries/typed-schema/index.js +0 -6
- package/lib/feature-libraries/typed-schema/index.js.map +0 -1
- package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts +0 -14
- package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +0 -1
- package/lib/feature-libraries/typed-schema/typedTreeSchema.js +0 -6
- package/lib/feature-libraries/typed-schema/typedTreeSchema.js.map +0 -1
- package/lib/simple-tree/proxyBinding.d.ts +0 -15
- package/lib/simple-tree/proxyBinding.d.ts.map +0 -1
- package/lib/simple-tree/proxyBinding.js +0 -18
- package/lib/simple-tree/proxyBinding.js.map +0 -1
- package/lib/simple-tree/typesUnsafe.d.ts.map +0 -1
- package/lib/simple-tree/typesUnsafe.js.map +0 -1
- package/src/feature-libraries/flex-tree/unboxed.ts +0 -24
- package/src/feature-libraries/typed-schema/README.md +0 -6
- package/src/feature-libraries/typed-schema/index.ts +0 -16
- package/src/feature-libraries/typed-schema/typedTreeSchema.ts +0 -14
- package/src/simple-tree/proxyBinding.ts +0 -20
- /package/dist/simple-tree/{typesUnsafe.js → api/typesUnsafe.js} +0 -0
- /package/dist/{feature-libraries/typed-schema → simple-tree}/flexList.d.ts +0 -0
- /package/dist/{feature-libraries/typed-schema → simple-tree}/flexList.js +0 -0
- /package/lib/simple-tree/{typesUnsafe.js → api/typesUnsafe.js} +0 -0
- /package/lib/{feature-libraries/typed-schema → simple-tree}/flexList.d.ts +0 -0
- /package/lib/{feature-libraries/typed-schema → simple-tree}/flexList.js +0 -0
- /package/src/simple-tree/{ProxyBinding.md → core/TreeNodeBinding.md} +0 -0
- /package/src/{feature-libraries/typed-schema → simple-tree}/flexList.ts +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluidframework/tree",
|
|
3
|
-
"version": "2.4.0-
|
|
3
|
+
"version": "2.4.0-299374",
|
|
4
4
|
"description": "Distributed tree",
|
|
5
5
|
"homepage": "https://fluidframework.com",
|
|
6
6
|
"repository": {
|
|
@@ -87,17 +87,17 @@
|
|
|
87
87
|
"temp-directory": "nyc/.nyc_output"
|
|
88
88
|
},
|
|
89
89
|
"dependencies": {
|
|
90
|
-
"@fluid-internal/client-utils": "2.4.0-
|
|
91
|
-
"@fluidframework/container-runtime": "2.4.0-
|
|
92
|
-
"@fluidframework/core-interfaces": "2.4.0-
|
|
93
|
-
"@fluidframework/core-utils": "2.4.0-
|
|
94
|
-
"@fluidframework/datastore-definitions": "2.4.0-
|
|
95
|
-
"@fluidframework/driver-definitions": "2.4.0-
|
|
96
|
-
"@fluidframework/id-compressor": "2.4.0-
|
|
97
|
-
"@fluidframework/runtime-definitions": "2.4.0-
|
|
98
|
-
"@fluidframework/runtime-utils": "2.4.0-
|
|
99
|
-
"@fluidframework/shared-object-base": "2.4.0-
|
|
100
|
-
"@fluidframework/telemetry-utils": "2.4.0-
|
|
90
|
+
"@fluid-internal/client-utils": "2.4.0-299374",
|
|
91
|
+
"@fluidframework/container-runtime": "2.4.0-299374",
|
|
92
|
+
"@fluidframework/core-interfaces": "2.4.0-299374",
|
|
93
|
+
"@fluidframework/core-utils": "2.4.0-299374",
|
|
94
|
+
"@fluidframework/datastore-definitions": "2.4.0-299374",
|
|
95
|
+
"@fluidframework/driver-definitions": "2.4.0-299374",
|
|
96
|
+
"@fluidframework/id-compressor": "2.4.0-299374",
|
|
97
|
+
"@fluidframework/runtime-definitions": "2.4.0-299374",
|
|
98
|
+
"@fluidframework/runtime-utils": "2.4.0-299374",
|
|
99
|
+
"@fluidframework/shared-object-base": "2.4.0-299374",
|
|
100
|
+
"@fluidframework/telemetry-utils": "2.4.0-299374",
|
|
101
101
|
"@sinclair/typebox": "^0.32.29",
|
|
102
102
|
"@tylerbu/sorted-btree-es6": "^1.8.0",
|
|
103
103
|
"@ungap/structured-clone": "^1.2.0",
|
|
@@ -106,20 +106,20 @@
|
|
|
106
106
|
"devDependencies": {
|
|
107
107
|
"@arethetypeswrong/cli": "^0.15.2",
|
|
108
108
|
"@biomejs/biome": "~1.8.3",
|
|
109
|
-
"@fluid-internal/mocha-test-setup": "2.4.0-
|
|
110
|
-
"@fluid-private/stochastic-test-utils": "2.4.0-
|
|
111
|
-
"@fluid-private/test-dds-utils": "2.4.0-
|
|
112
|
-
"@fluid-private/test-drivers": "2.4.0-
|
|
109
|
+
"@fluid-internal/mocha-test-setup": "2.4.0-299374",
|
|
110
|
+
"@fluid-private/stochastic-test-utils": "2.4.0-299374",
|
|
111
|
+
"@fluid-private/test-dds-utils": "2.4.0-299374",
|
|
112
|
+
"@fluid-private/test-drivers": "2.4.0-299374",
|
|
113
113
|
"@fluid-tools/benchmark": "^0.50.0",
|
|
114
|
-
"@fluid-tools/build-cli": "^0.
|
|
114
|
+
"@fluid-tools/build-cli": "^0.48.0",
|
|
115
115
|
"@fluidframework/build-common": "^2.0.3",
|
|
116
|
-
"@fluidframework/build-tools": "^0.
|
|
117
|
-
"@fluidframework/container-definitions": "2.4.0-
|
|
118
|
-
"@fluidframework/container-loader": "2.4.0-
|
|
116
|
+
"@fluidframework/build-tools": "^0.48.0",
|
|
117
|
+
"@fluidframework/container-definitions": "2.4.0-299374",
|
|
118
|
+
"@fluidframework/container-loader": "2.4.0-299374",
|
|
119
119
|
"@fluidframework/eslint-config-fluid": "^5.4.0",
|
|
120
|
-
"@fluidframework/test-runtime-utils": "2.4.0-
|
|
121
|
-
"@fluidframework/test-utils": "2.4.0-
|
|
122
|
-
"@fluidframework/tree-previous": "npm:@fluidframework/tree
|
|
120
|
+
"@fluidframework/test-runtime-utils": "2.4.0-299374",
|
|
121
|
+
"@fluidframework/test-utils": "2.4.0-299374",
|
|
122
|
+
"@fluidframework/tree-previous": "npm:@fluidframework/tree@~2.3.0",
|
|
123
123
|
"@microsoft/api-extractor": "7.47.8",
|
|
124
124
|
"@types/diff": "^3.5.1",
|
|
125
125
|
"@types/easy-table": "^0.0.32",
|
|
@@ -139,7 +139,6 @@
|
|
|
139
139
|
"eslint": "~8.55.0",
|
|
140
140
|
"eslint-config-prettier": "~9.0.0",
|
|
141
141
|
"mocha": "^10.2.0",
|
|
142
|
-
"mocha-json-output-reporter": "^2.0.1",
|
|
143
142
|
"mocha-multi-reporters": "^1.5.1",
|
|
144
143
|
"moment": "^2.21.0",
|
|
145
144
|
"prettier": "~3.0.3",
|
|
@@ -180,9 +179,27 @@
|
|
|
180
179
|
},
|
|
181
180
|
"TypeAlias_ImplicitAllowedTypes": {
|
|
182
181
|
"forwardCompat": false
|
|
182
|
+
},
|
|
183
|
+
"TypeAlias_InsertableTreeFieldFromImplicitField": {
|
|
184
|
+
"backCompat": false
|
|
185
|
+
},
|
|
186
|
+
"Interface_TreeArrayNode": {
|
|
187
|
+
"backCompat": false
|
|
188
|
+
},
|
|
189
|
+
"TypeAlias_InsertableTreeNodeFromImplicitAllowedTypes": {
|
|
190
|
+
"backCompat": false
|
|
191
|
+
},
|
|
192
|
+
"TypeAlias_NodeFromSchema": {
|
|
193
|
+
"backCompat": false
|
|
194
|
+
},
|
|
195
|
+
"TypeAlias_TreeFieldFromImplicitField": {
|
|
196
|
+
"backCompat": false
|
|
197
|
+
},
|
|
198
|
+
"TypeAlias_TreeNodeFromImplicitAllowedTypes": {
|
|
199
|
+
"backCompat": false
|
|
183
200
|
}
|
|
184
201
|
},
|
|
185
|
-
"entrypoint": "
|
|
202
|
+
"entrypoint": "public"
|
|
186
203
|
},
|
|
187
204
|
"scripts": {
|
|
188
205
|
"api": "fluid-build . --task api",
|
|
@@ -242,9 +259,9 @@
|
|
|
242
259
|
"test:mocha:esm": "mocha",
|
|
243
260
|
"test:mocha:verbose": "cross-env FLUID_TEST_VERBOSE=1 npm run test:mocha",
|
|
244
261
|
"test:snapshots:regen": "pnpm test:mocha:esm --snapshot",
|
|
245
|
-
"test:stress": "cross-env FUZZ_TEST_COUNT=20 FUZZ_STRESS_RUN=
|
|
262
|
+
"test:stress": "cross-env FUZZ_TEST_COUNT=20 FUZZ_STRESS_RUN=normal mocha --ignore \"lib/test/memory/**/*\" --recursive \"lib/test/**/*.spec.js\"",
|
|
246
263
|
"tsc": "fluid-tsc commonjs --project ./tsconfig.cjs.json && copyfiles -f ../../../common/build/build-common/src/cjs/package.json ./dist",
|
|
247
|
-
"typetests:gen": "flub generate typetests --dir . -v
|
|
264
|
+
"typetests:gen": "flub generate typetests --dir . -v",
|
|
248
265
|
"typetests:prepare": "flub typetests --dir . --reset --previous --normalize"
|
|
249
266
|
}
|
|
250
267
|
}
|
package/src/codec/codec.ts
CHANGED
|
@@ -35,18 +35,18 @@ export interface IDecoder<TDecoded, TEncoded, TContext> {
|
|
|
35
35
|
/**
|
|
36
36
|
* Validates data complies with some particular schema.
|
|
37
37
|
* Implementations are typically created by a {@link JsonValidator}.
|
|
38
|
-
* @
|
|
38
|
+
* @alpha
|
|
39
39
|
*/
|
|
40
40
|
export interface SchemaValidationFunction<Schema extends TSchema> {
|
|
41
41
|
/**
|
|
42
|
-
*
|
|
42
|
+
* Returns whether the data matches a schema.
|
|
43
43
|
*/
|
|
44
44
|
check(data: unknown): data is Static<Schema>;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
/**
|
|
48
48
|
* JSON schema validator compliant with draft 6 schema. See https://json-schema.org.
|
|
49
|
-
* @
|
|
49
|
+
* @alpha
|
|
50
50
|
*/
|
|
51
51
|
export interface JsonValidator {
|
|
52
52
|
/**
|
|
@@ -63,7 +63,7 @@ export interface JsonValidator {
|
|
|
63
63
|
|
|
64
64
|
/**
|
|
65
65
|
* Options relating to handling of persisted data.
|
|
66
|
-
* @
|
|
66
|
+
* @alpha
|
|
67
67
|
*/
|
|
68
68
|
export interface ICodecOptions {
|
|
69
69
|
/**
|
|
@@ -11,7 +11,7 @@ import type { JsonValidator } from "./codec.js";
|
|
|
11
11
|
* A {@link JsonValidator} implementation which performs no validation and accepts all data as valid.
|
|
12
12
|
* @privateRemarks Having this as an option unifies opting out of validation with selection of
|
|
13
13
|
* validators, simplifying code performing validation.
|
|
14
|
-
* @
|
|
14
|
+
* @alpha
|
|
15
15
|
*/
|
|
16
16
|
export const noopValidator: JsonValidator = {
|
|
17
17
|
compile: <Schema extends TSchema>() => ({ check: (data): data is Static<Schema> => true }),
|
|
@@ -8,10 +8,13 @@ import type { IIdCompressor, SessionId } from "@fluidframework/id-compressor";
|
|
|
8
8
|
import type { ICodecFamily, IJsonCodec } from "../../codec/index.js";
|
|
9
9
|
import type { SchemaAndPolicy } from "../../core/index.js";
|
|
10
10
|
import type { JsonCompatibleReadOnly } from "../../util/index.js";
|
|
11
|
-
import type { ChangeRebaser, RevisionTag } from "../rebase/index.js";
|
|
11
|
+
import type { ChangeRebaser, RevisionTag, TaggedChange } from "../rebase/index.js";
|
|
12
12
|
|
|
13
13
|
export interface ChangeFamily<TEditor extends ChangeFamilyEditor, TChange> {
|
|
14
|
-
buildEditor(
|
|
14
|
+
buildEditor(
|
|
15
|
+
mintRevisionTag: () => RevisionTag,
|
|
16
|
+
changeReceiver: (change: TaggedChange<TChange>) => void,
|
|
17
|
+
): TEditor;
|
|
15
18
|
|
|
16
19
|
readonly rebaser: ChangeRebaser<TChange>;
|
|
17
20
|
readonly codecs: ICodecFamily<TChange, ChangeEncodingContext>;
|
|
@@ -3,12 +3,13 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
+
import type { TaggedChange } from "../rebase/index.js";
|
|
6
7
|
import type { ChangeFamily, ChangeFamilyEditor } from "./changeFamily.js";
|
|
7
8
|
|
|
8
9
|
export abstract class EditBuilder<TChange> implements ChangeFamilyEditor {
|
|
9
10
|
public constructor(
|
|
10
11
|
protected readonly changeFamily: ChangeFamily<ChangeFamilyEditor, TChange>,
|
|
11
|
-
private readonly changeReceiver: (change: TChange) => void,
|
|
12
|
+
private readonly changeReceiver: (change: TaggedChange<TChange>) => void,
|
|
12
13
|
) {}
|
|
13
14
|
|
|
14
15
|
/**
|
|
@@ -16,7 +17,7 @@ export abstract class EditBuilder<TChange> implements ChangeFamilyEditor {
|
|
|
16
17
|
*
|
|
17
18
|
* @sealed
|
|
18
19
|
*/
|
|
19
|
-
protected applyChange(change: TChange): void {
|
|
20
|
+
protected applyChange(change: TaggedChange<TChange>): void {
|
|
20
21
|
this.changeReceiver(change);
|
|
21
22
|
}
|
|
22
23
|
|
|
@@ -51,6 +51,7 @@ export interface ChangeRebaser<TChangeset> {
|
|
|
51
51
|
* @param changes - The changes to invert.
|
|
52
52
|
* @param isRollback - Whether the inverted change is meant to rollback a change on a branch as is the case when
|
|
53
53
|
* performing a sandwich rebase.
|
|
54
|
+
* @param revision - The revision for the invert changeset.
|
|
54
55
|
* This flag is relevant to merge semantics that are dependent on edit sequencing order:
|
|
55
56
|
* - In the context of an undo, this function inverts a change that is sequenced and applied before the produced inverse.
|
|
56
57
|
* - In the context of a rollback, this function inverts a change that is sequenced after but applied before the produced inverse.
|
|
@@ -59,7 +60,11 @@ export interface ChangeRebaser<TChangeset> {
|
|
|
59
60
|
* `compose([changes, inverse(changes)])` be equal to `compose([])`:
|
|
60
61
|
* See {@link ChangeRebaser} for details.
|
|
61
62
|
*/
|
|
62
|
-
invert(
|
|
63
|
+
invert(
|
|
64
|
+
changes: TaggedChange<TChangeset>,
|
|
65
|
+
isRollback: boolean,
|
|
66
|
+
revision: RevisionTag,
|
|
67
|
+
): TChangeset;
|
|
63
68
|
|
|
64
69
|
/**
|
|
65
70
|
* Rebase `change` over `over`.
|
package/src/core/rebase/utils.ts
CHANGED
|
@@ -444,8 +444,8 @@ function rollbackFromCommit<TChange>(
|
|
|
444
444
|
if (commit.rollback !== undefined) {
|
|
445
445
|
return commit.rollback;
|
|
446
446
|
}
|
|
447
|
-
const untagged = changeRebaser.invert(commit, true);
|
|
448
447
|
const tag = mintRevisionTag();
|
|
448
|
+
const untagged = changeRebaser.invert(commit, true, tag);
|
|
449
449
|
const deeplyTaggedRollback = changeRebaser.changeRevision(untagged, tag, commit.revision);
|
|
450
450
|
const fullyTaggedRollback = tagRollbackInverse(deeplyTaggedRollback, tag, commit.revision);
|
|
451
451
|
|
|
@@ -233,6 +233,13 @@ export interface AnchorNode extends UpPath<AnchorNode>, Listenable<AnchorEvents>
|
|
|
233
233
|
*/
|
|
234
234
|
child(key: FieldKey, index: number): UpPath<AnchorNode>;
|
|
235
235
|
|
|
236
|
+
/**
|
|
237
|
+
* Gets the child AnchorNode if already exists.
|
|
238
|
+
*
|
|
239
|
+
* Does NOT add a ref, so the returned AnchorNode must be used with care.
|
|
240
|
+
*/
|
|
241
|
+
childIfAnchored(key: FieldKey, index: number): AnchorNode | undefined;
|
|
242
|
+
|
|
236
243
|
/**
|
|
237
244
|
* Gets a child AnchorNode (creating it if needed), and an Anchor owning a ref to it.
|
|
238
245
|
* Caller is responsible for freeing the returned Anchor, and must not use the AnchorNode after that.
|
|
@@ -413,8 +420,10 @@ export class AnchorSet implements Listenable<AnchorSetRootEvents>, AnchorLocator
|
|
|
413
420
|
|
|
414
421
|
/**
|
|
415
422
|
* Finds a path node if it already exists.
|
|
423
|
+
*
|
|
424
|
+
* Does not add a ref!
|
|
416
425
|
*/
|
|
417
|
-
|
|
426
|
+
public find(path: UpPath): PathNode | undefined {
|
|
418
427
|
if (path instanceof PathNode) {
|
|
419
428
|
if (path.anchorSet === this) {
|
|
420
429
|
return path;
|
|
@@ -422,7 +431,7 @@ export class AnchorSet implements Listenable<AnchorSetRootEvents>, AnchorLocator
|
|
|
422
431
|
}
|
|
423
432
|
const parent = path.parent ?? this.root;
|
|
424
433
|
const parentPath = this.find(parent);
|
|
425
|
-
return parentPath?.
|
|
434
|
+
return parentPath?.childIfAnchored(path.parentField, path.parentIndex);
|
|
426
435
|
}
|
|
427
436
|
|
|
428
437
|
/**
|
|
@@ -452,7 +461,7 @@ export class AnchorSet implements Listenable<AnchorSetRootEvents>, AnchorLocator
|
|
|
452
461
|
while ((wrapWith = stack.pop()) !== undefined) {
|
|
453
462
|
if (path === undefined || path instanceof PathNode) {
|
|
454
463
|
// If path already has an anchor, get an anchor for it's child if there is one:
|
|
455
|
-
const child = (path ?? this.root).
|
|
464
|
+
const child = (path ?? this.root).childIfAnchored(
|
|
456
465
|
wrapWith.parentField,
|
|
457
466
|
wrapWith.parentIndex,
|
|
458
467
|
);
|
|
@@ -1210,7 +1219,11 @@ class PathNode extends ReferenceCountedBase implements UpPath<PathNode>, AnchorN
|
|
|
1210
1219
|
public child(key: FieldKey, index: number): UpPath<AnchorNode> {
|
|
1211
1220
|
// Fast path: if child exists, return it.
|
|
1212
1221
|
return (
|
|
1213
|
-
this.
|
|
1222
|
+
this.childIfAnchored(key, index) ?? {
|
|
1223
|
+
parent: this,
|
|
1224
|
+
parentField: key,
|
|
1225
|
+
parentIndex: index,
|
|
1226
|
+
}
|
|
1214
1227
|
);
|
|
1215
1228
|
}
|
|
1216
1229
|
|
|
@@ -1271,8 +1284,7 @@ class PathNode extends ReferenceCountedBase implements UpPath<PathNode>, AnchorN
|
|
|
1271
1284
|
field = [];
|
|
1272
1285
|
this.children.set(key, field);
|
|
1273
1286
|
}
|
|
1274
|
-
|
|
1275
|
-
let child = field.find((c) => c.parentIndex === index);
|
|
1287
|
+
let child = binaryFind(field, index);
|
|
1276
1288
|
if (child === undefined) {
|
|
1277
1289
|
child = new PathNode(this.anchorSet, key, index, this);
|
|
1278
1290
|
field.push(child);
|
|
@@ -1284,16 +1296,11 @@ class PathNode extends ReferenceCountedBase implements UpPath<PathNode>, AnchorN
|
|
|
1284
1296
|
return child;
|
|
1285
1297
|
}
|
|
1286
1298
|
|
|
1287
|
-
|
|
1288
|
-
* Gets a child if it exists.
|
|
1289
|
-
* Does NOT add a ref.
|
|
1290
|
-
*/
|
|
1291
|
-
public tryGetChild(key: FieldKey, index: number): PathNode | undefined {
|
|
1299
|
+
public childIfAnchored(key: FieldKey, index: number): PathNode | undefined {
|
|
1292
1300
|
assert(this.status === Status.Alive, 0x40d /* PathNode must be alive */);
|
|
1293
1301
|
const field = this.children.get(key);
|
|
1294
1302
|
|
|
1295
|
-
|
|
1296
|
-
return field?.find((c) => c.parentIndex === index);
|
|
1303
|
+
return field === undefined ? undefined : binaryFind(field, index);
|
|
1297
1304
|
}
|
|
1298
1305
|
|
|
1299
1306
|
/**
|
|
@@ -1343,3 +1350,46 @@ class PathNode extends ReferenceCountedBase implements UpPath<PathNode>, AnchorN
|
|
|
1343
1350
|
}
|
|
1344
1351
|
}
|
|
1345
1352
|
}
|
|
1353
|
+
|
|
1354
|
+
/**
|
|
1355
|
+
* Find a child PathNode by index using a binary search.
|
|
1356
|
+
* @param sorted - array of PathNode's sorted by parentIndex.
|
|
1357
|
+
* @param index - index being looked for.
|
|
1358
|
+
* @returns child with the requested parentIndex, or undefined.
|
|
1359
|
+
* @privateRemarks
|
|
1360
|
+
* This function is very commonly used with small arrays (length 0 or one for all non sequence fields),
|
|
1361
|
+
* and is currently a hot path due to how flex tree leaves to excessive cursor to anchor and anchor to cursor translations,
|
|
1362
|
+
* both of which walk paths down the AnchorSet.
|
|
1363
|
+
* Additionally current usages tends to fully populate the anchor tree leading the correct array index to be the requested parent index.
|
|
1364
|
+
* This makes the performance of this performance both important in small cases and easy to overly tune to the current usage patterns.
|
|
1365
|
+
* This lead to not implementing a general purpose reusable binary search.
|
|
1366
|
+
* Once this function is not so heavily overused due to inefficient patterns in flex-tree,
|
|
1367
|
+
* replacing it with a standard binary search is likely fine.
|
|
1368
|
+
* Until then, care and benchmarking should be used when messing with this function.
|
|
1369
|
+
*/
|
|
1370
|
+
function binaryFind(sorted: readonly PathNode[], index: number): PathNode | undefined {
|
|
1371
|
+
// Try guessing the list is not sparse as a starter:
|
|
1372
|
+
const guess = sorted[index];
|
|
1373
|
+
if (guess !== undefined && guess.parentIndex === index) {
|
|
1374
|
+
return guess;
|
|
1375
|
+
}
|
|
1376
|
+
|
|
1377
|
+
// inclusive
|
|
1378
|
+
let min = 0;
|
|
1379
|
+
// exclusive
|
|
1380
|
+
let max = sorted.length;
|
|
1381
|
+
|
|
1382
|
+
while (min !== max) {
|
|
1383
|
+
const mid = Math.floor((min + max) / 2);
|
|
1384
|
+
const item = sorted[mid]!;
|
|
1385
|
+
const found = item.parentIndex;
|
|
1386
|
+
if (found === index) {
|
|
1387
|
+
return item; // Found the target, return it.
|
|
1388
|
+
} else if (found > index) {
|
|
1389
|
+
max = mid; // Continue search on lower half.
|
|
1390
|
+
} else {
|
|
1391
|
+
min = mid + 1; // Continue search on left half.
|
|
1392
|
+
}
|
|
1393
|
+
}
|
|
1394
|
+
return undefined; // If we reach here, target is not in array (or array was not sorted)
|
|
1395
|
+
}
|
|
@@ -19,7 +19,7 @@ import type { JsonValidator } from "../codec/index.js";
|
|
|
19
19
|
*
|
|
20
20
|
* Defining this validator in its own file also helps to ensure it is tree-shakeable.
|
|
21
21
|
*
|
|
22
|
-
* @
|
|
22
|
+
* @alpha
|
|
23
23
|
*/
|
|
24
24
|
export const typeboxValidator: JsonValidator = {
|
|
25
25
|
compile: <Schema extends TSchema>(schema: Schema) => {
|
|
@@ -8,16 +8,17 @@ import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
|
8
8
|
|
|
9
9
|
import type { ICodecFamily } from "../../codec/index.js";
|
|
10
10
|
import {
|
|
11
|
+
type ChangeAtomId,
|
|
11
12
|
type ChangeEncodingContext,
|
|
12
13
|
type ChangeFamily,
|
|
13
14
|
type ChangeFamilyEditor,
|
|
14
15
|
type ChangeRebaser,
|
|
15
|
-
type ChangesetLocalId,
|
|
16
16
|
CursorLocationType,
|
|
17
17
|
type DeltaDetachedNodeId,
|
|
18
18
|
type DeltaRoot,
|
|
19
19
|
type FieldUpPath,
|
|
20
20
|
type ITreeCursorSynchronous,
|
|
21
|
+
type RevisionTag,
|
|
21
22
|
type TaggedChange,
|
|
22
23
|
type UpPath,
|
|
23
24
|
compareFieldUpPaths,
|
|
@@ -43,6 +44,7 @@ import {
|
|
|
43
44
|
required as valueFieldKind,
|
|
44
45
|
} from "./defaultFieldKinds.js";
|
|
45
46
|
import type { IIdCompressor } from "@fluidframework/id-compressor";
|
|
47
|
+
import type { CellId } from "../sequence-field/index.js";
|
|
46
48
|
|
|
47
49
|
export type DefaultChangeset = ModularChangeset;
|
|
48
50
|
|
|
@@ -68,8 +70,11 @@ export class DefaultChangeFamily
|
|
|
68
70
|
return this.modularFamily.codecs;
|
|
69
71
|
}
|
|
70
72
|
|
|
71
|
-
public buildEditor(
|
|
72
|
-
|
|
73
|
+
public buildEditor(
|
|
74
|
+
mintRevisionTag: () => RevisionTag,
|
|
75
|
+
changeReceiver: (change: TaggedChange<DefaultChangeset>) => void,
|
|
76
|
+
): DefaultEditBuilder {
|
|
77
|
+
return new DefaultEditBuilder(this, mintRevisionTag, changeReceiver);
|
|
73
78
|
}
|
|
74
79
|
}
|
|
75
80
|
|
|
@@ -168,7 +173,8 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
|
|
|
168
173
|
|
|
169
174
|
public constructor(
|
|
170
175
|
family: ChangeFamily<ChangeFamilyEditor, DefaultChangeset>,
|
|
171
|
-
|
|
176
|
+
private readonly mintRevisionTag: () => RevisionTag,
|
|
177
|
+
changeReceiver: (change: TaggedChange<DefaultChangeset>) => void,
|
|
172
178
|
private readonly idCompressor?: IIdCompressor,
|
|
173
179
|
) {
|
|
174
180
|
this.modularBuilder = new ModularEditBuilder(family, fieldKinds, changeReceiver);
|
|
@@ -182,19 +188,25 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
|
|
|
182
188
|
}
|
|
183
189
|
|
|
184
190
|
public addNodeExistsConstraint(path: UpPath): void {
|
|
185
|
-
this.modularBuilder.addNodeExistsConstraint(path);
|
|
191
|
+
this.modularBuilder.addNodeExistsConstraint(path, this.mintRevisionTag());
|
|
186
192
|
}
|
|
187
193
|
|
|
188
194
|
public valueField(field: FieldUpPath): ValueFieldEditBuilder<ITreeCursorSynchronous> {
|
|
189
195
|
return {
|
|
190
196
|
set: (newContent: ITreeCursorSynchronous): void => {
|
|
191
|
-
const
|
|
192
|
-
|
|
193
|
-
const
|
|
197
|
+
const revision = this.mintRevisionTag();
|
|
198
|
+
const fill: ChangeAtomId = { localId: this.modularBuilder.generateId(), revision };
|
|
199
|
+
const detach: ChangeAtomId = { localId: this.modularBuilder.generateId(), revision };
|
|
200
|
+
const build = this.modularBuilder.buildTrees(
|
|
201
|
+
fill.localId,
|
|
202
|
+
newContent,
|
|
203
|
+
revision,
|
|
204
|
+
this.idCompressor,
|
|
205
|
+
);
|
|
194
206
|
const change: FieldChangeset = brand(
|
|
195
207
|
valueFieldKind.changeHandler.editor.set({
|
|
196
|
-
fill
|
|
197
|
-
detach
|
|
208
|
+
fill,
|
|
209
|
+
detach,
|
|
198
210
|
}),
|
|
199
211
|
);
|
|
200
212
|
|
|
@@ -203,8 +215,9 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
|
|
|
203
215
|
field,
|
|
204
216
|
fieldKind: valueFieldKind.identifier,
|
|
205
217
|
change,
|
|
218
|
+
revision,
|
|
206
219
|
};
|
|
207
|
-
this.modularBuilder.submitChanges([build, edit]);
|
|
220
|
+
this.modularBuilder.submitChanges([build, edit], revision);
|
|
208
221
|
},
|
|
209
222
|
};
|
|
210
223
|
}
|
|
@@ -212,21 +225,26 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
|
|
|
212
225
|
public optionalField(field: FieldUpPath): OptionalFieldEditBuilder<ITreeCursorSynchronous> {
|
|
213
226
|
return {
|
|
214
227
|
set: (newContent: ITreeCursorSynchronous | undefined, wasEmpty: boolean): void => {
|
|
215
|
-
const detachId = this.modularBuilder.generateId();
|
|
216
|
-
let fillId: ChangesetLocalId | undefined;
|
|
217
228
|
const edits: EditDescription[] = [];
|
|
218
229
|
let optionalChange: OptionalChangeset;
|
|
230
|
+
const revision = this.mintRevisionTag();
|
|
231
|
+
const detach: ChangeAtomId = { localId: this.modularBuilder.generateId(), revision };
|
|
219
232
|
if (newContent !== undefined) {
|
|
220
|
-
|
|
221
|
-
const build = this.modularBuilder.buildTrees(
|
|
233
|
+
const fill: ChangeAtomId = { localId: this.modularBuilder.generateId(), revision };
|
|
234
|
+
const build = this.modularBuilder.buildTrees(
|
|
235
|
+
fill.localId,
|
|
236
|
+
newContent,
|
|
237
|
+
revision,
|
|
238
|
+
this.idCompressor,
|
|
239
|
+
);
|
|
222
240
|
edits.push(build);
|
|
223
241
|
|
|
224
242
|
optionalChange = optional.changeHandler.editor.set(wasEmpty, {
|
|
225
|
-
fill
|
|
226
|
-
detach
|
|
243
|
+
fill,
|
|
244
|
+
detach,
|
|
227
245
|
});
|
|
228
246
|
} else {
|
|
229
|
-
optionalChange = optional.changeHandler.editor.clear(wasEmpty,
|
|
247
|
+
optionalChange = optional.changeHandler.editor.clear(wasEmpty, detach);
|
|
230
248
|
}
|
|
231
249
|
|
|
232
250
|
const change: FieldChangeset = brand(optionalChange);
|
|
@@ -235,10 +253,11 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
|
|
|
235
253
|
field,
|
|
236
254
|
fieldKind: optional.identifier,
|
|
237
255
|
change,
|
|
256
|
+
revision,
|
|
238
257
|
};
|
|
239
258
|
edits.push(edit);
|
|
240
259
|
|
|
241
|
-
this.modularBuilder.submitChanges(edits);
|
|
260
|
+
this.modularBuilder.submitChanges(edits, revision);
|
|
242
261
|
},
|
|
243
262
|
};
|
|
244
263
|
}
|
|
@@ -255,17 +274,24 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
|
|
|
255
274
|
} else if (count < 0 || !Number.isSafeInteger(count)) {
|
|
256
275
|
throw new UsageError(`Expected non-negative integer count, got ${count}.`);
|
|
257
276
|
}
|
|
258
|
-
const
|
|
259
|
-
const
|
|
277
|
+
const revision = this.mintRevisionTag();
|
|
278
|
+
const detachCellId = this.modularBuilder.generateId(count);
|
|
279
|
+
const attachCellId: CellId = { localId: this.modularBuilder.generateId(count), revision };
|
|
260
280
|
if (compareFieldUpPaths(sourceField, destinationField)) {
|
|
261
281
|
const change = sequence.changeHandler.editor.move(
|
|
262
282
|
sourceIndex,
|
|
263
283
|
count,
|
|
264
284
|
destIndex,
|
|
265
|
-
|
|
266
|
-
|
|
285
|
+
detachCellId,
|
|
286
|
+
attachCellId,
|
|
287
|
+
revision,
|
|
288
|
+
);
|
|
289
|
+
this.modularBuilder.submitChange(
|
|
290
|
+
sourceField,
|
|
291
|
+
sequence.identifier,
|
|
292
|
+
brand(change),
|
|
293
|
+
revision,
|
|
267
294
|
);
|
|
268
|
-
this.modularBuilder.submitChange(sourceField, sequence.identifier, brand(change));
|
|
269
295
|
} else {
|
|
270
296
|
const detachPath = topDownPath(sourceField.parent);
|
|
271
297
|
const attachPath = topDownPath(destinationField.parent);
|
|
@@ -307,27 +333,38 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
|
|
|
307
333
|
}
|
|
308
334
|
}
|
|
309
335
|
}
|
|
310
|
-
const moveOut = sequence.changeHandler.editor.moveOut(
|
|
336
|
+
const moveOut = sequence.changeHandler.editor.moveOut(
|
|
337
|
+
sourceIndex,
|
|
338
|
+
count,
|
|
339
|
+
detachCellId,
|
|
340
|
+
revision,
|
|
341
|
+
);
|
|
311
342
|
const moveIn = sequence.changeHandler.editor.moveIn(
|
|
312
343
|
destIndex,
|
|
313
344
|
count,
|
|
314
|
-
|
|
315
|
-
|
|
345
|
+
detachCellId,
|
|
346
|
+
attachCellId,
|
|
347
|
+
revision,
|
|
348
|
+
);
|
|
349
|
+
this.modularBuilder.submitChanges(
|
|
350
|
+
[
|
|
351
|
+
{
|
|
352
|
+
type: "field",
|
|
353
|
+
field: sourceField,
|
|
354
|
+
fieldKind: sequence.identifier,
|
|
355
|
+
change: brand(moveOut),
|
|
356
|
+
revision,
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
type: "field",
|
|
360
|
+
field: adjustedAttachField,
|
|
361
|
+
fieldKind: sequence.identifier,
|
|
362
|
+
change: brand(moveIn),
|
|
363
|
+
revision,
|
|
364
|
+
},
|
|
365
|
+
],
|
|
366
|
+
revision,
|
|
316
367
|
);
|
|
317
|
-
this.modularBuilder.submitChanges([
|
|
318
|
-
{
|
|
319
|
-
type: "field",
|
|
320
|
-
field: sourceField,
|
|
321
|
-
fieldKind: sequence.identifier,
|
|
322
|
-
change: brand(moveOut),
|
|
323
|
-
},
|
|
324
|
-
{
|
|
325
|
-
type: "field",
|
|
326
|
-
field: adjustedAttachField,
|
|
327
|
-
fieldKind: sequence.identifier,
|
|
328
|
-
change: brand(moveIn),
|
|
329
|
-
},
|
|
330
|
-
]);
|
|
331
368
|
}
|
|
332
369
|
}
|
|
333
370
|
|
|
@@ -340,30 +377,38 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
|
|
|
340
377
|
return;
|
|
341
378
|
}
|
|
342
379
|
|
|
343
|
-
const
|
|
344
|
-
const
|
|
380
|
+
const revision = this.mintRevisionTag();
|
|
381
|
+
const firstId: CellId = { localId: this.modularBuilder.generateId(length), revision };
|
|
382
|
+
const build = this.modularBuilder.buildTrees(
|
|
383
|
+
firstId.localId,
|
|
384
|
+
content,
|
|
385
|
+
revision,
|
|
386
|
+
this.idCompressor,
|
|
387
|
+
);
|
|
345
388
|
const change: FieldChangeset = brand(
|
|
346
|
-
sequence.changeHandler.editor.insert(index, length, firstId),
|
|
389
|
+
sequence.changeHandler.editor.insert(index, length, firstId, revision),
|
|
347
390
|
);
|
|
348
391
|
const attach: FieldEditDescription = {
|
|
349
392
|
type: "field",
|
|
350
393
|
field,
|
|
351
394
|
fieldKind: sequence.identifier,
|
|
352
395
|
change,
|
|
396
|
+
revision,
|
|
353
397
|
};
|
|
354
398
|
// The changes have to be submitted together, otherwise they will be assigned different revisions,
|
|
355
399
|
// which will prevent the build ID and the insert ID from matching.
|
|
356
|
-
this.modularBuilder.submitChanges([build, attach]);
|
|
400
|
+
this.modularBuilder.submitChanges([build, attach], revision);
|
|
357
401
|
},
|
|
358
402
|
remove: (index: number, count: number): void => {
|
|
359
403
|
if (count === 0) {
|
|
360
404
|
return;
|
|
361
405
|
}
|
|
406
|
+
const revision = this.mintRevisionTag();
|
|
362
407
|
const id = this.modularBuilder.generateId(count);
|
|
363
408
|
const change: FieldChangeset = brand(
|
|
364
|
-
sequence.changeHandler.editor.remove(index, count, id),
|
|
409
|
+
sequence.changeHandler.editor.remove(index, count, id, revision),
|
|
365
410
|
);
|
|
366
|
-
this.modularBuilder.submitChange(field, sequence.identifier, change);
|
|
411
|
+
this.modularBuilder.submitChange(field, sequence.identifier, change, revision);
|
|
367
412
|
},
|
|
368
413
|
};
|
|
369
414
|
}
|