@fluidframework/tree 2.80.0 → 2.81.0-374083
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/api-report/tree.alpha.api.md +43 -7
- package/dist/alpha.d.ts +5 -0
- package/dist/core/change-family/changeFamily.d.ts +4 -1
- 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/index.d.ts +1 -1
- package/dist/core/change-family/index.d.ts.map +1 -1
- package/dist/core/change-family/index.js.map +1 -1
- package/dist/core/index.d.ts +3 -3
- 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/changeRebaser.d.ts +6 -1
- package/dist/core/rebase/changeRebaser.d.ts.map +1 -1
- package/dist/core/rebase/changeRebaser.js.map +1 -1
- package/dist/core/rebase/index.d.ts +1 -1
- package/dist/core/rebase/index.d.ts.map +1 -1
- package/dist/core/rebase/index.js +2 -1
- package/dist/core/rebase/index.js.map +1 -1
- package/dist/core/rebase/types.d.ts +46 -8
- package/dist/core/rebase/types.d.ts.map +1 -1
- package/dist/core/rebase/types.js +5 -1
- package/dist/core/rebase/types.js.map +1 -1
- package/dist/core/rebase/utils.d.ts.map +1 -1
- package/dist/core/rebase/utils.js +30 -8
- package/dist/core/rebase/utils.js.map +1 -1
- package/dist/core/tree/anchorSet.js +1 -0
- package/dist/core/tree/anchorSet.js.map +1 -1
- package/dist/core/tree/detachedFieldIndex.d.ts +6 -0
- package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndex.js +9 -0
- package/dist/core/tree/detachedFieldIndex.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 +4 -3
- package/dist/core/tree/index.js.map +1 -1
- package/dist/core/tree/pathTree.d.ts +11 -3
- package/dist/core/tree/pathTree.d.ts.map +1 -1
- package/dist/core/tree/pathTree.js +14 -2
- package/dist/core/tree/pathTree.js.map +1 -1
- package/dist/core/tree/visitDelta.d.ts.map +1 -1
- package/dist/core/tree/visitDelta.js +3 -2
- package/dist/core/tree/visitDelta.js.map +1 -1
- package/dist/core/tree/visitorUtils.d.ts.map +1 -1
- package/dist/core/tree/visitorUtils.js +58 -18
- package/dist/core/tree/visitorUtils.js.map +1 -1
- package/dist/feature-libraries/changeAtomIdBTree.d.ts +10 -4
- package/dist/feature-libraries/changeAtomIdBTree.d.ts.map +1 -1
- package/dist/feature-libraries/changeAtomIdBTree.js +16 -2
- package/dist/feature-libraries/changeAtomIdBTree.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/basicChunk.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/basicChunk.js +7 -0
- package/dist/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkTree.js +4 -1
- package/dist/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkedForest.js +3 -1
- package/dist/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js +1 -0
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +93 -44
- package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.js +238 -69
- package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +1 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.js +11 -2
- package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
- package/dist/feature-libraries/default-schema/index.d.ts +2 -1
- package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/index.js +5 -2
- package/dist/feature-libraries/default-schema/index.js.map +1 -1
- package/dist/feature-libraries/default-schema/locationBasedEditBuilder.d.ts +38 -0
- package/dist/feature-libraries/default-schema/locationBasedEditBuilder.d.ts.map +1 -0
- package/dist/feature-libraries/default-schema/locationBasedEditBuilder.js +132 -0
- package/dist/feature-libraries/default-schema/locationBasedEditBuilder.js.map +1 -0
- package/dist/feature-libraries/default-schema/mappedEditBuilder.d.ts +7 -6
- package/dist/feature-libraries/default-schema/mappedEditBuilder.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/mappedEditBuilder.js +15 -0
- package/dist/feature-libraries/default-schema/mappedEditBuilder.js.map +1 -1
- package/dist/feature-libraries/deltaUtils.d.ts +1 -0
- package/dist/feature-libraries/deltaUtils.d.ts.map +1 -1
- package/dist/feature-libraries/deltaUtils.js +6 -1
- package/dist/feature-libraries/deltaUtils.js.map +1 -1
- package/dist/feature-libraries/flex-tree/context.d.ts +9 -0
- package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/context.js +6 -0
- package/dist/feature-libraries/flex-tree/context.js.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +6 -6
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.d.ts +8 -7
- package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.js +40 -9
- package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.js +3 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/dist/feature-libraries/index.d.ts +3 -3
- package/dist/feature-libraries/index.d.ts.map +1 -1
- package/dist/feature-libraries/index.js +8 -3
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/mapTreeCursor.d.ts.map +1 -1
- package/dist/feature-libraries/mapTreeCursor.js +1 -0
- package/dist/feature-libraries/mapTreeCursor.js.map +1 -1
- package/dist/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
- package/dist/feature-libraries/mitigatedChangeFamily.js +2 -2
- package/dist/feature-libraries/mitigatedChangeFamily.js.map +1 -1
- package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts +97 -21
- package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/crossFieldQueries.js +4 -7
- package/dist/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +20 -51
- 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 +3 -9
- package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
- package/dist/feature-libraries/modular-schema/index.d.ts +4 -4
- package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/index.js +2 -2
- package/dist/feature-libraries/modular-schema/index.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +11 -28
- package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js +255 -161
- package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecV3.d.ts +15 -0
- package/dist/feature-libraries/modular-schema/modularChangeCodecV3.d.ts.map +1 -0
- package/dist/feature-libraries/modular-schema/modularChangeCodecV3.js +393 -0
- package/dist/feature-libraries/modular-schema/modularChangeCodecV3.js.map +1 -0
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +8 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +48 -20
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js +1350 -476
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFormatV3.d.ts +146 -0
- package/dist/feature-libraries/modular-schema/modularChangeFormatV3.d.ts.map +1 -0
- package/dist/feature-libraries/modular-schema/modularChangeFormatV3.js +32 -0
- package/dist/feature-libraries/modular-schema/modularChangeFormatV3.js.map +1 -0
- package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts +47 -11
- package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeTypes.js +3 -3
- package/dist/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
- package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
- package/dist/feature-libraries/object-forest/objectForest.js +3 -1
- package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
- package/dist/feature-libraries/optional-field/index.d.ts +2 -2
- package/dist/feature-libraries/optional-field/index.d.ts.map +1 -1
- package/dist/feature-libraries/optional-field/index.js +1 -2
- package/dist/feature-libraries/optional-field/index.js.map +1 -1
- package/dist/feature-libraries/optional-field/optionalField.d.ts +5 -26
- package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
- package/dist/feature-libraries/optional-field/optionalField.js +221 -443
- package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts +23 -0
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts.map +1 -0
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.js +31 -0
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.js.map +1 -0
- package/dist/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts +24 -33
- package/dist/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts.map +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldChangeTypes.js.map +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldCodecV2.d.ts +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldCodecV2.d.ts.map +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldCodecV2.js +57 -28
- package/dist/feature-libraries/optional-field/optionalFieldCodecV2.js.map +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldCodecV3.d.ts +12 -0
- package/dist/feature-libraries/optional-field/optionalFieldCodecV3.d.ts.map +1 -0
- package/dist/feature-libraries/optional-field/optionalFieldCodecV3.js +57 -0
- package/dist/feature-libraries/optional-field/optionalFieldCodecV3.js.map +1 -0
- package/dist/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldCodecs.js +5 -1
- package/dist/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
- package/dist/feature-libraries/sequence-field/compose.d.ts +6 -7
- package/dist/feature-libraries/sequence-field/compose.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/compose.js +83 -259
- package/dist/feature-libraries/sequence-field/compose.js.map +1 -1
- package/dist/feature-libraries/sequence-field/helperTypes.d.ts +14 -10
- package/dist/feature-libraries/sequence-field/helperTypes.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/helperTypes.js.map +1 -1
- package/dist/feature-libraries/sequence-field/index.d.ts +2 -3
- package/dist/feature-libraries/sequence-field/index.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/index.js +1 -3
- package/dist/feature-libraries/sequence-field/index.js.map +1 -1
- package/dist/feature-libraries/sequence-field/invert.d.ts +3 -3
- package/dist/feature-libraries/sequence-field/invert.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/invert.js +65 -167
- package/dist/feature-libraries/sequence-field/invert.js.map +1 -1
- package/dist/feature-libraries/sequence-field/markQueue.d.ts +2 -2
- package/dist/feature-libraries/sequence-field/markQueue.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/markQueue.js.map +1 -1
- package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts +4 -56
- package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/moveEffectTable.js +7 -90
- package/dist/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
- package/dist/feature-libraries/sequence-field/rebase.d.ts +3 -3
- package/dist/feature-libraries/sequence-field/rebase.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/rebase.js +107 -114
- package/dist/feature-libraries/sequence-field/rebase.js.map +1 -1
- package/dist/feature-libraries/sequence-field/replaceRevisions.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/replaceRevisions.js +18 -31
- package/dist/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.js +0 -2
- package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +22 -4
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js +365 -187
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js +20 -62
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldEditor.d.ts +2 -2
- package/dist/feature-libraries/sequence-field/sequenceFieldEditor.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldEditor.js +10 -10
- package/dist/feature-libraries/sequence-field/sequenceFieldEditor.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts +3 -2
- package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js +14 -109
- package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
- package/dist/feature-libraries/sequence-field/types.d.ts +30 -59
- package/dist/feature-libraries/sequence-field/types.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/types.js.map +1 -1
- package/dist/feature-libraries/sequence-field/utils.d.ts +15 -24
- package/dist/feature-libraries/sequence-field/utils.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/utils.js +116 -305
- package/dist/feature-libraries/sequence-field/utils.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.d.ts.map +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/shared-tree/index.d.ts +1 -1
- package/dist/shared-tree/index.d.ts.map +1 -1
- package/dist/shared-tree/index.js.map +1 -1
- package/dist/shared-tree/schematizeTree.d.ts +4 -4
- package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
- package/dist/shared-tree/schematizeTree.js +2 -1
- package/dist/shared-tree/schematizeTree.js.map +1 -1
- package/dist/shared-tree/schematizingTreeView.d.ts +1 -5
- package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +38 -35
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree/sharedTree.d.ts +9 -3
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +11 -0
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/sharedTreeChangeCodecs.d.ts +1 -1
- package/dist/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
- package/dist/shared-tree/sharedTreeChangeCodecs.js +1 -0
- package/dist/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
- package/dist/shared-tree/sharedTreeChangeEnricher.d.ts.map +1 -1
- package/dist/shared-tree/sharedTreeChangeEnricher.js +1 -1
- package/dist/shared-tree/sharedTreeChangeEnricher.js.map +1 -1
- package/dist/shared-tree/sharedTreeChangeFamily.d.ts +5 -5
- package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
- package/dist/shared-tree/sharedTreeChangeFamily.js +10 -4
- package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
- package/dist/shared-tree/sharedTreeEditBuilder.d.ts +16 -6
- package/dist/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
- package/dist/shared-tree/sharedTreeEditBuilder.js +14 -7
- package/dist/shared-tree/sharedTreeEditBuilder.js.map +1 -1
- package/dist/shared-tree/treeCheckout.d.ts +9 -10
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +63 -8
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree-core/branch.d.ts +3 -2
- package/dist/shared-tree-core/branch.d.ts.map +1 -1
- package/dist/shared-tree-core/branch.js +9 -4
- package/dist/shared-tree-core/branch.js.map +1 -1
- package/dist/shared-tree-core/editManager.d.ts +2 -2
- package/dist/shared-tree-core/editManager.d.ts.map +1 -1
- package/dist/shared-tree-core/editManager.js +20 -14
- package/dist/shared-tree-core/editManager.js.map +1 -1
- package/dist/shared-tree-core/editManagerCodecs.d.ts +4 -0
- package/dist/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerCodecs.js +10 -2
- package/dist/shared-tree-core/editManagerCodecs.js.map +1 -1
- package/dist/shared-tree-core/editManagerFormatCommons.d.ts +1 -0
- package/dist/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerFormatCommons.js +6 -0
- package/dist/shared-tree-core/editManagerFormatCommons.js.map +1 -1
- package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts +2 -2
- package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerFormatV1toV4.js +1 -0
- package/dist/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
- package/dist/shared-tree-core/index.d.ts +2 -2
- package/dist/shared-tree-core/index.d.ts.map +1 -1
- package/dist/shared-tree-core/index.js +3 -1
- package/dist/shared-tree-core/index.js.map +1 -1
- package/dist/shared-tree-core/messageCodecV1ToV4.d.ts +1 -1
- package/dist/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
- package/dist/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
- package/dist/shared-tree-core/messageCodecs.d.ts +4 -0
- package/dist/shared-tree-core/messageCodecs.d.ts.map +1 -1
- package/dist/shared-tree-core/messageCodecs.js +10 -2
- package/dist/shared-tree-core/messageCodecs.js.map +1 -1
- package/dist/shared-tree-core/messageFormat.d.ts +1 -0
- package/dist/shared-tree-core/messageFormat.d.ts.map +1 -1
- package/dist/shared-tree-core/messageFormat.js +6 -0
- package/dist/shared-tree-core/messageFormat.js.map +1 -1
- package/dist/shared-tree-core/messageFormatV1ToV4.d.ts +2 -2
- package/dist/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
- package/dist/shared-tree-core/messageFormatV1ToV4.js +1 -0
- package/dist/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.d.ts +1 -0
- package/dist/shared-tree-core/sharedTreeCore.d.ts.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 -1
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js +2 -1
- package/dist/simple-tree/api/index.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.js +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryBeta.js +1 -1
- package/dist/simple-tree/api/schemaFactoryBeta.js.map +1 -1
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.js +4 -4
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
- package/dist/simple-tree/api/snapshotCompatibilityChecker.d.ts +244 -0
- package/dist/simple-tree/api/snapshotCompatibilityChecker.d.ts.map +1 -1
- package/dist/simple-tree/api/snapshotCompatibilityChecker.js +297 -1
- package/dist/simple-tree/api/snapshotCompatibilityChecker.js.map +1 -1
- package/dist/simple-tree/api/tree.d.ts +3 -1
- package/dist/simple-tree/api/tree.d.ts.map +1 -1
- package/dist/simple-tree/api/tree.js.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js +6 -2
- package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/dist/simple-tree/core/unhydratedFlexTree.d.ts +15 -15
- package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
- package/dist/simple-tree/core/unhydratedFlexTree.js +59 -8
- package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
- package/dist/simple-tree/fieldSchema.d.ts +4 -4
- package/dist/simple-tree/fieldSchema.d.ts.map +1 -1
- package/dist/simple-tree/fieldSchema.js.map +1 -1
- package/dist/simple-tree/index.d.ts +3 -3
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +4 -3
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.js +7 -5
- package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/common.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/common.js +1 -1
- package/dist/simple-tree/node-kinds/common.js.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.js +2 -2
- package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.js +19 -19
- package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/record/recordNode.js +4 -2
- package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
- package/dist/simple-tree/prepareForInsertion.d.ts +54 -47
- package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
- package/dist/simple-tree/prepareForInsertion.js +184 -126
- package/dist/simple-tree/prepareForInsertion.js.map +1 -1
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +13 -4
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js +31 -13
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
- package/dist/text/index.d.ts +6 -0
- package/dist/text/index.d.ts.map +1 -0
- package/dist/text/index.js +10 -0
- package/dist/text/index.js.map +1 -0
- package/dist/text/textDomain.d.ts +138 -0
- package/dist/text/textDomain.d.ts.map +1 -0
- package/dist/text/textDomain.js +121 -0
- package/dist/text/textDomain.js.map +1 -0
- package/dist/treeFactory.d.ts.map +1 -1
- package/dist/treeFactory.js +12 -2
- package/dist/treeFactory.js.map +1 -1
- package/dist/util/bTreeUtils.d.ts +12 -4
- package/dist/util/bTreeUtils.d.ts.map +1 -1
- package/dist/util/bTreeUtils.js +14 -18
- package/dist/util/bTreeUtils.js.map +1 -1
- package/dist/util/index.d.ts +1 -1
- package/dist/util/index.d.ts.map +1 -1
- package/dist/util/index.js +2 -1
- package/dist/util/index.js.map +1 -1
- package/dist/util/nestedMap.js +12 -12
- package/dist/util/nestedMap.js.map +1 -1
- package/dist/util/rangeMap.d.ts +24 -12
- package/dist/util/rangeMap.d.ts.map +1 -1
- package/dist/util/rangeMap.js +46 -6
- package/dist/util/rangeMap.js.map +1 -1
- package/docs/user-facing/merge-semantics.md +3 -2
- package/eslint.config.mts +4 -32
- package/lib/alpha.d.ts +5 -0
- package/lib/core/change-family/changeFamily.d.ts +4 -1
- 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/index.d.ts +1 -1
- package/lib/core/change-family/index.d.ts.map +1 -1
- package/lib/core/change-family/index.js.map +1 -1
- package/lib/core/index.d.ts +3 -3
- 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/changeRebaser.d.ts +6 -1
- package/lib/core/rebase/changeRebaser.d.ts.map +1 -1
- package/lib/core/rebase/changeRebaser.js.map +1 -1
- package/lib/core/rebase/index.d.ts +1 -1
- package/lib/core/rebase/index.d.ts.map +1 -1
- package/lib/core/rebase/index.js +1 -1
- package/lib/core/rebase/index.js.map +1 -1
- package/lib/core/rebase/types.d.ts +46 -8
- package/lib/core/rebase/types.d.ts.map +1 -1
- package/lib/core/rebase/types.js +3 -0
- package/lib/core/rebase/types.js.map +1 -1
- package/lib/core/rebase/utils.d.ts.map +1 -1
- package/lib/core/rebase/utils.js +30 -8
- package/lib/core/rebase/utils.js.map +1 -1
- package/lib/core/tree/anchorSet.js +1 -0
- package/lib/core/tree/anchorSet.js.map +1 -1
- package/lib/core/tree/detachedFieldIndex.d.ts +6 -0
- package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndex.js +10 -1
- package/lib/core/tree/detachedFieldIndex.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/pathTree.d.ts +11 -3
- package/lib/core/tree/pathTree.d.ts.map +1 -1
- package/lib/core/tree/pathTree.js +12 -1
- package/lib/core/tree/pathTree.js.map +1 -1
- package/lib/core/tree/visitDelta.d.ts.map +1 -1
- package/lib/core/tree/visitDelta.js +3 -2
- package/lib/core/tree/visitDelta.js.map +1 -1
- package/lib/core/tree/visitorUtils.d.ts.map +1 -1
- package/lib/core/tree/visitorUtils.js +58 -18
- package/lib/core/tree/visitorUtils.js.map +1 -1
- package/lib/feature-libraries/changeAtomIdBTree.d.ts +10 -4
- package/lib/feature-libraries/changeAtomIdBTree.d.ts.map +1 -1
- package/lib/feature-libraries/changeAtomIdBTree.js +14 -1
- package/lib/feature-libraries/changeAtomIdBTree.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/basicChunk.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/basicChunk.js +8 -1
- package/lib/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkTree.js +4 -1
- package/lib/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkedForest.js +3 -1
- package/lib/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js +1 -0
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +93 -44
- package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.js +236 -70
- package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +1 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.js +11 -2
- package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
- package/lib/feature-libraries/default-schema/index.d.ts +2 -1
- package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/index.js +2 -1
- package/lib/feature-libraries/default-schema/index.js.map +1 -1
- package/lib/feature-libraries/default-schema/locationBasedEditBuilder.d.ts +38 -0
- package/lib/feature-libraries/default-schema/locationBasedEditBuilder.d.ts.map +1 -0
- package/lib/feature-libraries/default-schema/locationBasedEditBuilder.js +128 -0
- package/lib/feature-libraries/default-schema/locationBasedEditBuilder.js.map +1 -0
- package/lib/feature-libraries/default-schema/mappedEditBuilder.d.ts +7 -6
- package/lib/feature-libraries/default-schema/mappedEditBuilder.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/mappedEditBuilder.js +15 -0
- package/lib/feature-libraries/default-schema/mappedEditBuilder.js.map +1 -1
- package/lib/feature-libraries/deltaUtils.d.ts +1 -0
- package/lib/feature-libraries/deltaUtils.d.ts.map +1 -1
- package/lib/feature-libraries/deltaUtils.js +5 -1
- package/lib/feature-libraries/deltaUtils.js.map +1 -1
- package/lib/feature-libraries/flex-tree/context.d.ts +9 -0
- package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/context.js +6 -0
- package/lib/feature-libraries/flex-tree/context.js.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +6 -6
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.d.ts +8 -7
- package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.js +41 -10
- package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.js +3 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/lib/feature-libraries/index.d.ts +3 -3
- package/lib/feature-libraries/index.d.ts.map +1 -1
- package/lib/feature-libraries/index.js +2 -2
- package/lib/feature-libraries/index.js.map +1 -1
- package/lib/feature-libraries/mapTreeCursor.d.ts.map +1 -1
- package/lib/feature-libraries/mapTreeCursor.js +2 -1
- package/lib/feature-libraries/mapTreeCursor.js.map +1 -1
- package/lib/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
- package/lib/feature-libraries/mitigatedChangeFamily.js +2 -2
- package/lib/feature-libraries/mitigatedChangeFamily.js.map +1 -1
- package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts +97 -21
- package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/crossFieldQueries.js +3 -5
- package/lib/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +20 -51
- 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 +3 -9
- package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
- package/lib/feature-libraries/modular-schema/index.d.ts +4 -4
- package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/index.js +2 -2
- package/lib/feature-libraries/modular-schema/index.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +11 -28
- package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js +247 -143
- package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecV3.d.ts +15 -0
- package/lib/feature-libraries/modular-schema/modularChangeCodecV3.d.ts.map +1 -0
- package/lib/feature-libraries/modular-schema/modularChangeCodecV3.js +389 -0
- package/lib/feature-libraries/modular-schema/modularChangeCodecV3.js.map +1 -0
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +8 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +48 -20
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js +1344 -479
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFormatV3.d.ts +146 -0
- package/lib/feature-libraries/modular-schema/modularChangeFormatV3.d.ts.map +1 -0
- package/lib/feature-libraries/modular-schema/modularChangeFormatV3.js +29 -0
- package/lib/feature-libraries/modular-schema/modularChangeFormatV3.js.map +1 -0
- package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts +47 -11
- package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeTypes.js +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
- package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
- package/lib/feature-libraries/object-forest/objectForest.js +3 -1
- package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
- package/lib/feature-libraries/optional-field/index.d.ts +2 -2
- package/lib/feature-libraries/optional-field/index.d.ts.map +1 -1
- package/lib/feature-libraries/optional-field/index.js +1 -1
- package/lib/feature-libraries/optional-field/index.js.map +1 -1
- package/lib/feature-libraries/optional-field/optionalField.d.ts +5 -26
- package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
- package/lib/feature-libraries/optional-field/optionalField.js +221 -441
- package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts +23 -0
- package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts.map +1 -0
- package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.js +27 -0
- package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.js.map +1 -0
- package/lib/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts +24 -33
- package/lib/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts.map +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldChangeTypes.js.map +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldCodecV2.d.ts +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldCodecV2.d.ts.map +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldCodecV2.js +55 -26
- package/lib/feature-libraries/optional-field/optionalFieldCodecV2.js.map +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldCodecV3.d.ts +12 -0
- package/lib/feature-libraries/optional-field/optionalFieldCodecV3.d.ts.map +1 -0
- package/lib/feature-libraries/optional-field/optionalFieldCodecV3.js +53 -0
- package/lib/feature-libraries/optional-field/optionalFieldCodecV3.js.map +1 -0
- package/lib/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldCodecs.js +5 -1
- package/lib/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
- package/lib/feature-libraries/sequence-field/compose.d.ts +6 -7
- package/lib/feature-libraries/sequence-field/compose.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/compose.js +85 -261
- package/lib/feature-libraries/sequence-field/compose.js.map +1 -1
- package/lib/feature-libraries/sequence-field/helperTypes.d.ts +14 -10
- package/lib/feature-libraries/sequence-field/helperTypes.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/helperTypes.js.map +1 -1
- package/lib/feature-libraries/sequence-field/index.d.ts +2 -3
- package/lib/feature-libraries/sequence-field/index.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/index.js +0 -1
- package/lib/feature-libraries/sequence-field/index.js.map +1 -1
- package/lib/feature-libraries/sequence-field/invert.d.ts +3 -3
- package/lib/feature-libraries/sequence-field/invert.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/invert.js +67 -169
- package/lib/feature-libraries/sequence-field/invert.js.map +1 -1
- package/lib/feature-libraries/sequence-field/markQueue.d.ts +2 -2
- package/lib/feature-libraries/sequence-field/markQueue.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/markQueue.js.map +1 -1
- package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts +4 -56
- package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/moveEffectTable.js +6 -84
- package/lib/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
- package/lib/feature-libraries/sequence-field/rebase.d.ts +3 -3
- package/lib/feature-libraries/sequence-field/rebase.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/rebase.js +109 -116
- package/lib/feature-libraries/sequence-field/rebase.js.map +1 -1
- package/lib/feature-libraries/sequence-field/replaceRevisions.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/replaceRevisions.js +18 -31
- package/lib/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.js +0 -2
- package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +22 -4
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js +356 -182
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js +21 -63
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldEditor.d.ts +2 -2
- package/lib/feature-libraries/sequence-field/sequenceFieldEditor.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldEditor.js +10 -10
- package/lib/feature-libraries/sequence-field/sequenceFieldEditor.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts +3 -2
- package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js +14 -109
- package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
- package/lib/feature-libraries/sequence-field/types.d.ts +30 -59
- package/lib/feature-libraries/sequence-field/types.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/types.js.map +1 -1
- package/lib/feature-libraries/sequence-field/utils.d.ts +15 -24
- package/lib/feature-libraries/sequence-field/utils.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/utils.js +112 -298
- package/lib/feature-libraries/sequence-field/utils.js.map +1 -1
- package/lib/index.d.ts +3 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.d.ts.map +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/shared-tree/index.d.ts +1 -1
- package/lib/shared-tree/index.d.ts.map +1 -1
- package/lib/shared-tree/index.js.map +1 -1
- package/lib/shared-tree/schematizeTree.d.ts +4 -4
- package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
- package/lib/shared-tree/schematizeTree.js +3 -2
- package/lib/shared-tree/schematizeTree.js.map +1 -1
- package/lib/shared-tree/schematizingTreeView.d.ts +1 -5
- package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +41 -38
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/shared-tree/sharedTree.d.ts +9 -3
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +11 -0
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/sharedTreeChangeCodecs.d.ts +1 -1
- package/lib/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
- package/lib/shared-tree/sharedTreeChangeCodecs.js +1 -0
- package/lib/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
- package/lib/shared-tree/sharedTreeChangeEnricher.d.ts.map +1 -1
- package/lib/shared-tree/sharedTreeChangeEnricher.js +2 -2
- package/lib/shared-tree/sharedTreeChangeEnricher.js.map +1 -1
- package/lib/shared-tree/sharedTreeChangeFamily.d.ts +5 -5
- package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
- package/lib/shared-tree/sharedTreeChangeFamily.js +11 -5
- package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
- package/lib/shared-tree/sharedTreeEditBuilder.d.ts +16 -6
- package/lib/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
- package/lib/shared-tree/sharedTreeEditBuilder.js +12 -6
- package/lib/shared-tree/sharedTreeEditBuilder.js.map +1 -1
- package/lib/shared-tree/treeCheckout.d.ts +9 -10
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +66 -11
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree-core/branch.d.ts +3 -2
- package/lib/shared-tree-core/branch.d.ts.map +1 -1
- package/lib/shared-tree-core/branch.js +9 -4
- package/lib/shared-tree-core/branch.js.map +1 -1
- package/lib/shared-tree-core/editManager.d.ts +2 -2
- package/lib/shared-tree-core/editManager.d.ts.map +1 -1
- package/lib/shared-tree-core/editManager.js +20 -14
- package/lib/shared-tree-core/editManager.js.map +1 -1
- package/lib/shared-tree-core/editManagerCodecs.d.ts +4 -0
- package/lib/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerCodecs.js +8 -1
- package/lib/shared-tree-core/editManagerCodecs.js.map +1 -1
- package/lib/shared-tree-core/editManagerFormatCommons.d.ts +1 -0
- package/lib/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerFormatCommons.js +6 -0
- package/lib/shared-tree-core/editManagerFormatCommons.js.map +1 -1
- package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts +2 -2
- package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerFormatV1toV4.js +1 -0
- package/lib/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
- package/lib/shared-tree-core/index.d.ts +2 -2
- package/lib/shared-tree-core/index.d.ts.map +1 -1
- package/lib/shared-tree-core/index.js +2 -2
- package/lib/shared-tree-core/index.js.map +1 -1
- package/lib/shared-tree-core/messageCodecV1ToV4.d.ts +1 -1
- package/lib/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
- package/lib/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
- package/lib/shared-tree-core/messageCodecs.d.ts +4 -0
- package/lib/shared-tree-core/messageCodecs.d.ts.map +1 -1
- package/lib/shared-tree-core/messageCodecs.js +8 -1
- package/lib/shared-tree-core/messageCodecs.js.map +1 -1
- package/lib/shared-tree-core/messageFormat.d.ts +1 -0
- package/lib/shared-tree-core/messageFormat.d.ts.map +1 -1
- package/lib/shared-tree-core/messageFormat.js +6 -0
- package/lib/shared-tree-core/messageFormat.js.map +1 -1
- package/lib/shared-tree-core/messageFormatV1ToV4.d.ts +2 -2
- package/lib/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
- package/lib/shared-tree-core/messageFormatV1ToV4.js +1 -0
- package/lib/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.d.ts +1 -0
- package/lib/shared-tree-core/sharedTreeCore.d.ts.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 -1
- package/lib/simple-tree/api/index.d.ts.map +1 -1
- package/lib/simple-tree/api/index.js +1 -1
- package/lib/simple-tree/api/index.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.js +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryBeta.js +1 -1
- package/lib/simple-tree/api/schemaFactoryBeta.js.map +1 -1
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.js +4 -4
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
- package/lib/simple-tree/api/snapshotCompatibilityChecker.d.ts +244 -0
- package/lib/simple-tree/api/snapshotCompatibilityChecker.d.ts.map +1 -1
- package/lib/simple-tree/api/snapshotCompatibilityChecker.js +270 -0
- package/lib/simple-tree/api/snapshotCompatibilityChecker.js.map +1 -1
- package/lib/simple-tree/api/tree.d.ts +3 -1
- package/lib/simple-tree/api/tree.d.ts.map +1 -1
- package/lib/simple-tree/api/tree.js.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js +6 -2
- package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.d.ts +15 -15
- package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.js +58 -8
- package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
- package/lib/simple-tree/fieldSchema.d.ts +4 -4
- package/lib/simple-tree/fieldSchema.d.ts.map +1 -1
- package/lib/simple-tree/fieldSchema.js.map +1 -1
- package/lib/simple-tree/index.d.ts +3 -3
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +2 -2
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.js +8 -6
- package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/common.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/common.js +2 -2
- package/lib/simple-tree/node-kinds/common.js.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.js +2 -2
- package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.js +20 -20
- package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/record/recordNode.js +4 -2
- package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
- package/lib/simple-tree/prepareForInsertion.d.ts +54 -47
- package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
- package/lib/simple-tree/prepareForInsertion.js +184 -125
- package/lib/simple-tree/prepareForInsertion.js.map +1 -1
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +13 -4
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +28 -11
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
- package/lib/text/index.d.ts +6 -0
- package/lib/text/index.d.ts.map +1 -0
- package/lib/text/index.js +6 -0
- package/lib/text/index.js.map +1 -0
- package/lib/text/textDomain.d.ts +138 -0
- package/lib/text/textDomain.d.ts.map +1 -0
- package/lib/text/textDomain.js +118 -0
- package/lib/text/textDomain.js.map +1 -0
- package/lib/treeFactory.d.ts.map +1 -1
- package/lib/treeFactory.js +13 -3
- package/lib/treeFactory.js.map +1 -1
- package/lib/util/bTreeUtils.d.ts +12 -4
- package/lib/util/bTreeUtils.d.ts.map +1 -1
- package/lib/util/bTreeUtils.js +15 -19
- package/lib/util/bTreeUtils.js.map +1 -1
- package/lib/util/index.d.ts +1 -1
- package/lib/util/index.d.ts.map +1 -1
- package/lib/util/index.js +1 -1
- package/lib/util/index.js.map +1 -1
- package/lib/util/nestedMap.js +12 -12
- package/lib/util/nestedMap.js.map +1 -1
- package/lib/util/rangeMap.d.ts +24 -12
- package/lib/util/rangeMap.d.ts.map +1 -1
- package/lib/util/rangeMap.js +44 -5
- package/lib/util/rangeMap.js.map +1 -1
- package/package.json +25 -25
- package/src/core/change-family/changeFamily.ts +5 -0
- package/src/core/change-family/index.ts +1 -0
- package/src/core/index.ts +6 -1
- package/src/core/rebase/changeRebaser.ts +6 -1
- package/src/core/rebase/index.ts +3 -0
- package/src/core/rebase/types.ts +65 -21
- package/src/core/rebase/utils.ts +39 -11
- package/src/core/tree/anchorSet.ts +1 -0
- package/src/core/tree/detachedFieldIndex.ts +17 -1
- package/src/core/tree/index.ts +2 -1
- package/src/core/tree/pathTree.ts +16 -4
- package/src/core/tree/visitDelta.ts +6 -2
- package/src/core/tree/visitorUtils.ts +55 -19
- package/src/feature-libraries/changeAtomIdBTree.ts +37 -5
- package/src/feature-libraries/chunked-forest/basicChunk.ts +7 -1
- package/src/feature-libraries/chunked-forest/chunkTree.ts +6 -1
- package/src/feature-libraries/chunked-forest/chunkedForest.ts +3 -1
- package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +1 -0
- package/src/feature-libraries/default-schema/defaultEditBuilder.ts +399 -127
- package/src/feature-libraries/default-schema/defaultFieldKinds.ts +13 -5
- package/src/feature-libraries/default-schema/index.ts +17 -5
- package/src/feature-libraries/default-schema/locationBasedEditBuilder.ts +188 -0
- package/src/feature-libraries/default-schema/mappedEditBuilder.ts +35 -9
- package/src/feature-libraries/deltaUtils.ts +6 -1
- package/src/feature-libraries/flex-tree/context.ts +17 -0
- package/src/feature-libraries/flex-tree/flexTreeTypes.ts +7 -8
- package/src/feature-libraries/flex-tree/lazyField.ts +68 -25
- package/src/feature-libraries/forest-summary/forestSummarizer.ts +3 -1
- package/src/feature-libraries/index.ts +22 -8
- package/src/feature-libraries/mapTreeCursor.ts +2 -1
- package/src/feature-libraries/mitigatedChangeFamily.ts +3 -1
- package/src/feature-libraries/modular-schema/crossFieldQueries.ts +142 -44
- package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +32 -58
- package/src/feature-libraries/modular-schema/genericFieldKind.ts +6 -18
- package/src/feature-libraries/modular-schema/index.ts +16 -15
- package/src/feature-libraries/modular-schema/modularChangeCodecV1.ts +560 -351
- package/src/feature-libraries/modular-schema/modularChangeCodecV3.ts +760 -0
- package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +14 -1
- package/src/feature-libraries/modular-schema/modularChangeFamily.ts +2620 -782
- package/src/feature-libraries/modular-schema/modularChangeFormatV1.ts +1 -0
- package/src/feature-libraries/modular-schema/modularChangeFormatV3.ts +62 -0
- package/src/feature-libraries/modular-schema/modularChangeTypes.ts +58 -11
- package/src/feature-libraries/object-forest/objectForest.ts +3 -1
- package/src/feature-libraries/optional-field/index.ts +1 -3
- package/src/feature-libraries/optional-field/optionalField.ts +318 -562
- package/src/feature-libraries/optional-field/optionalFieldChangeFormatV3.ts +45 -0
- package/src/feature-libraries/optional-field/optionalFieldChangeTypes.ts +24 -38
- package/src/feature-libraries/optional-field/optionalFieldCodecV2.ts +89 -35
- package/src/feature-libraries/optional-field/optionalFieldCodecV3.ts +94 -0
- package/src/feature-libraries/optional-field/optionalFieldCodecs.ts +5 -1
- package/src/feature-libraries/sequence-field/compose.ts +139 -522
- package/src/feature-libraries/sequence-field/helperTypes.ts +34 -19
- package/src/feature-libraries/sequence-field/index.ts +0 -9
- package/src/feature-libraries/sequence-field/invert.ts +103 -228
- package/src/feature-libraries/sequence-field/markQueue.ts +2 -2
- package/src/feature-libraries/sequence-field/moveEffectTable.ts +8 -195
- package/src/feature-libraries/sequence-field/rebase.ts +169 -205
- package/src/feature-libraries/sequence-field/replaceRevisions.ts +25 -47
- package/src/feature-libraries/sequence-field/sequenceFieldChangeHandler.ts +0 -2
- package/src/feature-libraries/sequence-field/sequenceFieldCodecV2.ts +648 -228
- package/src/feature-libraries/sequence-field/sequenceFieldCodecV3.ts +56 -70
- package/src/feature-libraries/sequence-field/sequenceFieldEditor.ts +25 -27
- package/src/feature-libraries/sequence-field/sequenceFieldToDelta.ts +19 -129
- package/src/feature-libraries/sequence-field/types.ts +34 -64
- package/src/feature-libraries/sequence-field/utils.ts +139 -353
- package/src/index.ts +7 -0
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/index.ts +3 -2
- package/src/shared-tree/schematizeTree.ts +21 -8
- package/src/shared-tree/schematizingTreeView.ts +56 -70
- package/src/shared-tree/sharedTree.ts +20 -3
- package/src/shared-tree/sharedTreeChangeCodecs.ts +5 -1
- package/src/shared-tree/sharedTreeChangeEnricher.ts +2 -0
- package/src/shared-tree/sharedTreeChangeFamily.ts +15 -5
- package/src/shared-tree/sharedTreeEditBuilder.ts +39 -8
- package/src/shared-tree/treeCheckout.ts +95 -24
- package/src/shared-tree-core/branch.ts +13 -3
- package/src/shared-tree-core/editManager.ts +42 -28
- package/src/shared-tree-core/editManagerCodecs.ts +11 -1
- package/src/shared-tree-core/editManagerFormatCommons.ts +6 -0
- package/src/shared-tree-core/editManagerFormatV1toV4.ts +3 -1
- package/src/shared-tree-core/index.ts +2 -0
- package/src/shared-tree-core/messageCodecV1ToV4.ts +2 -1
- package/src/shared-tree-core/messageCodecs.ts +11 -1
- package/src/shared-tree-core/messageFormat.ts +6 -0
- package/src/shared-tree-core/messageFormatV1ToV4.ts +3 -1
- package/src/shared-tree-core/sharedTreeCore.ts +4 -1
- package/src/simple-tree/api/index.ts +3 -0
- package/src/simple-tree/api/schemaFactoryAlpha.ts +1 -1
- package/src/simple-tree/api/schemaFactoryBeta.ts +1 -1
- package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +4 -4
- package/src/simple-tree/api/snapshotCompatibilityChecker.ts +501 -0
- package/src/simple-tree/api/tree.ts +3 -1
- package/src/simple-tree/core/treeNodeKernel.ts +6 -2
- package/src/simple-tree/core/unhydratedFlexTree.ts +87 -36
- package/src/simple-tree/fieldSchema.ts +6 -4
- package/src/simple-tree/index.ts +5 -1
- package/src/simple-tree/node-kinds/array/arrayNode.ts +9 -7
- package/src/simple-tree/node-kinds/common.ts +2 -5
- package/src/simple-tree/node-kinds/map/mapNode.ts +4 -4
- package/src/simple-tree/node-kinds/object/objectNode.ts +26 -26
- package/src/simple-tree/node-kinds/record/recordNode.ts +10 -9
- package/src/simple-tree/prepareForInsertion.ts +343 -201
- package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +43 -15
- package/src/text/README.md +8 -0
- package/src/text/index.ts +6 -0
- package/src/text/textDomain.ts +199 -0
- package/src/treeFactory.ts +14 -4
- package/src/util/bTreeUtils.ts +33 -22
- package/src/util/index.ts +3 -0
- package/src/util/nestedMap.ts +12 -12
- package/src/util/rangeMap.ts +72 -18
- package/.eslintrc.cjs +0 -125
- package/assertTagging.config.mjs +0 -14
- package/dist/feature-libraries/sequence-field/relevantRemovedRoots.d.ts +0 -9
- package/dist/feature-libraries/sequence-field/relevantRemovedRoots.d.ts.map +0 -1
- package/dist/feature-libraries/sequence-field/relevantRemovedRoots.js +0 -50
- package/dist/feature-libraries/sequence-field/relevantRemovedRoots.js.map +0 -1
- package/docs/main/sequence-field/move-composition.md +0 -46
- package/lib/feature-libraries/sequence-field/relevantRemovedRoots.d.ts +0 -9
- package/lib/feature-libraries/sequence-field/relevantRemovedRoots.d.ts.map +0 -1
- package/lib/feature-libraries/sequence-field/relevantRemovedRoots.js +0 -46
- package/lib/feature-libraries/sequence-field/relevantRemovedRoots.js.map +0 -1
- package/src/feature-libraries/sequence-field/relevantRemovedRoots.ts +0 -57
|
@@ -13,8 +13,10 @@ import {
|
|
|
13
13
|
type ChangeFamily,
|
|
14
14
|
type ChangeFamilyEditor,
|
|
15
15
|
type ChangeRebaser,
|
|
16
|
+
type ChangesetLocalId,
|
|
16
17
|
type DeltaDetachedNodeId,
|
|
17
18
|
type DeltaRoot,
|
|
19
|
+
type EditorOptions,
|
|
18
20
|
type FieldUpPath,
|
|
19
21
|
type NormalizedFieldUpPath,
|
|
20
22
|
type NormalizedUpPath,
|
|
@@ -23,21 +25,23 @@ import {
|
|
|
23
25
|
type TreeChunk,
|
|
24
26
|
type UpPath,
|
|
25
27
|
compareFieldUpPaths,
|
|
28
|
+
getDetachedFieldContainingFieldPath,
|
|
29
|
+
rootField,
|
|
26
30
|
topDownPath,
|
|
27
31
|
} from "../../core/index.js";
|
|
28
|
-
import { brand } from "../../util/index.js";
|
|
32
|
+
import { brand, RangeMap } from "../../util/index.js";
|
|
29
33
|
import {
|
|
30
34
|
type EditDescription,
|
|
31
35
|
type FieldChangeset,
|
|
32
36
|
type FieldEditDescription,
|
|
37
|
+
type GlobalEditDescription,
|
|
33
38
|
ModularChangeFamily,
|
|
34
39
|
type ModularChangeset,
|
|
35
40
|
ModularEditBuilder,
|
|
36
41
|
intoDelta as intoModularDelta,
|
|
37
42
|
relevantRemovedRoots as relevantModularRemovedRoots,
|
|
43
|
+
getBuildIds as getModularBuildIds,
|
|
38
44
|
} from "../modular-schema/index.js";
|
|
39
|
-
import type { OptionalChangeset } from "../optional-field/index.js";
|
|
40
|
-
import type { CellId } from "../sequence-field/index.js";
|
|
41
45
|
|
|
42
46
|
import {
|
|
43
47
|
fieldKinds,
|
|
@@ -45,6 +49,7 @@ import {
|
|
|
45
49
|
sequence,
|
|
46
50
|
required as valueFieldKind,
|
|
47
51
|
} from "./defaultFieldKinds.js";
|
|
52
|
+
import type { CellId } from "../sequence-field/index.js";
|
|
48
53
|
|
|
49
54
|
export type DefaultChangeset = ModularChangeset;
|
|
50
55
|
|
|
@@ -54,7 +59,7 @@ export type DefaultChangeset = ModularChangeset;
|
|
|
54
59
|
* @sealed
|
|
55
60
|
*/
|
|
56
61
|
export class DefaultChangeFamily
|
|
57
|
-
implements ChangeFamily<
|
|
62
|
+
implements ChangeFamily<IdBasedChangeFamilyDataEditor, DefaultChangeset>
|
|
58
63
|
{
|
|
59
64
|
private readonly modularFamily: ModularChangeFamily;
|
|
60
65
|
|
|
@@ -76,11 +81,13 @@ export class DefaultChangeFamily
|
|
|
76
81
|
public buildEditor(
|
|
77
82
|
mintRevisionTag: () => RevisionTag,
|
|
78
83
|
changeReceiver: (change: TaggedChange<DefaultChangeset>) => void,
|
|
79
|
-
|
|
80
|
-
|
|
84
|
+
options?: EditorOptions,
|
|
85
|
+
): IdBasedChangeFamilyDataEditor {
|
|
86
|
+
return new DefaultIdBasedDataEditor(
|
|
81
87
|
this,
|
|
82
88
|
mintRevisionTag,
|
|
83
89
|
changeReceiver,
|
|
90
|
+
options,
|
|
84
91
|
this.modularFamily.codecOptions,
|
|
85
92
|
);
|
|
86
93
|
}
|
|
@@ -111,8 +118,18 @@ export function relevantRemovedRoots(change: ModularChangeset): Iterable<DeltaDe
|
|
|
111
118
|
return relevantModularRemovedRoots(change, fieldKinds);
|
|
112
119
|
}
|
|
113
120
|
|
|
121
|
+
export function getBuildsIds(change: ModularChangeset): Iterable<DeltaDetachedNodeId> {
|
|
122
|
+
return getModularBuildIds(change);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export type DetachedRootIds = readonly DetachedRootIdRange[];
|
|
126
|
+
export interface DetachedRootIdRange {
|
|
127
|
+
readonly first: ChangeAtomId;
|
|
128
|
+
readonly count: number;
|
|
129
|
+
}
|
|
130
|
+
|
|
114
131
|
/**
|
|
115
|
-
* Default editor for
|
|
132
|
+
* Default editor for tree data changes.
|
|
116
133
|
* @privateRemarks
|
|
117
134
|
* When taking into account not just the content of the tree,
|
|
118
135
|
* but also how the merge identities (and thus anchors, flex-tree and simple-tree nodes) of nodes before and after the edits correspond,
|
|
@@ -128,32 +145,7 @@ export function relevantRemovedRoots(change: ModularChangeset): Iterable<DeltaDe
|
|
|
128
145
|
* If/when such a mechanism becomes available, an evaluation should be done to determine if any existing editing operations should be changed to leverage it
|
|
129
146
|
* (Possibly by adding opt ins at the view schema layer).
|
|
130
147
|
*/
|
|
131
|
-
export interface
|
|
132
|
-
/**
|
|
133
|
-
* @param field - the value field which is being edited under the parent node
|
|
134
|
-
* @returns An object with methods to edit the given field of the given parent.
|
|
135
|
-
* The returned object can be used (i.e., have its methods called) multiple times but its lifetime
|
|
136
|
-
* is bounded by the lifetime of this edit builder.
|
|
137
|
-
*/
|
|
138
|
-
valueField(field: NormalizedFieldUpPath): ValueFieldEditBuilder<TContent>;
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* @param field - the optional field which is being edited under the parent node
|
|
142
|
-
* @returns An object with methods to edit the given field of the given parent.
|
|
143
|
-
* The returned object can be used (i.e., have its methods called) multiple times but its lifetime
|
|
144
|
-
* is bounded by the lifetime of this edit builder.
|
|
145
|
-
*/
|
|
146
|
-
optionalField(field: NormalizedFieldUpPath): OptionalFieldEditBuilder<TContent>;
|
|
147
|
-
|
|
148
|
-
/**
|
|
149
|
-
* @param field - the sequence field which is being edited under the parent node
|
|
150
|
-
*
|
|
151
|
-
* @returns An object with methods to edit the given field of the given parent.
|
|
152
|
-
* The returned object can be used (i.e., have its methods called) multiple times but its lifetime
|
|
153
|
-
* is bounded by the lifetime of this edit builder.
|
|
154
|
-
*/
|
|
155
|
-
sequenceField(field: NormalizedFieldUpPath): SequenceFieldEditBuilder<TContent>;
|
|
156
|
-
|
|
148
|
+
export interface DataEditor<TContent, TDetachedRoot, TDetachedRoots> {
|
|
157
149
|
/**
|
|
158
150
|
* Moves a subsequence from one sequence field to another sequence field.
|
|
159
151
|
*
|
|
@@ -189,19 +181,71 @@ export interface IDefaultEditBuilder<TContent = TreeChunk> {
|
|
|
189
181
|
* Add a constraint that, for the revert of this change to apply, the document must be in the same state immediately before the revert is applied as it was after this change was applied.
|
|
190
182
|
*/
|
|
191
183
|
addNoChangeConstraintOnRevert(): void;
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Builds the detached roots for the given content.
|
|
187
|
+
* @param content - The content to be built into detached nodes.
|
|
188
|
+
*
|
|
189
|
+
* Requires SharedTreeFormatVersion.vDetachedRoots or later.
|
|
190
|
+
*/
|
|
191
|
+
buildRoots(content: TContent): TDetachedRoots;
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* @param field - the value field which is being edited under the parent node
|
|
195
|
+
* @returns An object with methods to edit the given field of the given parent.
|
|
196
|
+
* The returned object can be used (i.e., have its methods called) multiple times but its lifetime
|
|
197
|
+
* is bounded by the lifetime of this edit builder.
|
|
198
|
+
*/
|
|
199
|
+
valueField(field: NormalizedFieldUpPath): RequiredFieldEditor<TContent, TDetachedRoot>;
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* @param field - the optional field which is being edited under the parent node
|
|
203
|
+
* @returns An object with methods to edit the given field of the given parent.
|
|
204
|
+
* The returned object can be used (i.e., have its methods called) multiple times but its lifetime
|
|
205
|
+
* is bounded by the lifetime of this edit builder.
|
|
206
|
+
*/
|
|
207
|
+
optionalField(field: NormalizedFieldUpPath): OptionalFieldEditor<TContent, TDetachedRoot>;
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* @param field - the sequence field which is being edited under the parent node
|
|
211
|
+
*
|
|
212
|
+
* @returns An object with methods to edit the given field of the given parent.
|
|
213
|
+
* The returned object can be used (i.e., have its methods called) multiple times but its lifetime
|
|
214
|
+
* is bounded by the lifetime of this edit builder.
|
|
215
|
+
*/
|
|
216
|
+
sequenceField(field: NormalizedFieldUpPath): SequenceFieldEditor<TContent, TDetachedRoots>;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
export type IdBasedChangeFamilyDataEditor = ChangeFamilyEditor &
|
|
220
|
+
DataEditor<TreeChunk, ChangeAtomId, DetachedRootIds>;
|
|
221
|
+
|
|
222
|
+
export function offsetChangesetLocalId(
|
|
223
|
+
id: ChangesetLocalId,
|
|
224
|
+
offset: number,
|
|
225
|
+
): ChangesetLocalId {
|
|
226
|
+
return brand(id + offset);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
export function subtractChangesetLocalId(a: ChangesetLocalId, b: ChangesetLocalId): number {
|
|
230
|
+
return a - b;
|
|
192
231
|
}
|
|
193
232
|
|
|
194
233
|
/**
|
|
195
|
-
* Implementation of {@link
|
|
234
|
+
* Implementation of {@link IdBasedChangeFamilyDataEditor} based on the default set of supported field kinds.
|
|
196
235
|
* @sealed
|
|
197
236
|
*/
|
|
198
|
-
export class
|
|
237
|
+
export class DefaultIdBasedDataEditor implements IdBasedChangeFamilyDataEditor {
|
|
199
238
|
private readonly modularBuilder: ModularEditBuilder;
|
|
239
|
+
private readonly nodesWithoutCells: RangeMap<ChangesetLocalId, true> = new RangeMap(
|
|
240
|
+
offsetChangesetLocalId,
|
|
241
|
+
subtractChangesetLocalId,
|
|
242
|
+
);
|
|
200
243
|
|
|
201
244
|
public constructor(
|
|
202
245
|
family: ChangeFamily<ChangeFamilyEditor, DefaultChangeset>,
|
|
203
246
|
private readonly mintRevisionTag: () => RevisionTag,
|
|
204
247
|
changeReceiver: (change: TaggedChange<DefaultChangeset>) => void,
|
|
248
|
+
private readonly options: EditorOptions = { canMakeDetachedRootEdits: false },
|
|
205
249
|
codecOptions: CodecWriteOptions,
|
|
206
250
|
) {
|
|
207
251
|
this.modularBuilder = new ModularEditBuilder(
|
|
@@ -213,17 +257,31 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
|
|
|
213
257
|
}
|
|
214
258
|
|
|
215
259
|
public enterTransaction(): void {
|
|
260
|
+
if (this.modularBuilder.isInTransaction() === false) {
|
|
261
|
+
this.nodesWithoutCells.clear();
|
|
262
|
+
}
|
|
216
263
|
this.modularBuilder.enterTransaction();
|
|
217
264
|
}
|
|
218
265
|
public exitTransaction(): void {
|
|
219
266
|
this.modularBuilder.exitTransaction();
|
|
267
|
+
if (this.modularBuilder.isInTransaction() === false) {
|
|
268
|
+
this.nodesWithoutCells.clear();
|
|
269
|
+
}
|
|
220
270
|
}
|
|
221
271
|
|
|
222
|
-
public addNodeExistsConstraint(path:
|
|
272
|
+
public addNodeExistsConstraint(path: NormalizedUpPath): void {
|
|
273
|
+
enforceEditsToDetachedTreesOptions(
|
|
274
|
+
{ parent: path.parent, field: path.parentField },
|
|
275
|
+
this.options,
|
|
276
|
+
);
|
|
223
277
|
this.modularBuilder.addNodeExistsConstraint(path, this.mintRevisionTag());
|
|
224
278
|
}
|
|
225
279
|
|
|
226
|
-
public addNodeExistsConstraintOnRevert(path:
|
|
280
|
+
public addNodeExistsConstraintOnRevert(path: NormalizedUpPath): void {
|
|
281
|
+
enforceEditsToDetachedTreesOptions(
|
|
282
|
+
{ parent: path.parent, field: path.parentField },
|
|
283
|
+
this.options,
|
|
284
|
+
);
|
|
227
285
|
this.modularBuilder.addNodeExistsConstraintOnRevert(path, this.mintRevisionTag());
|
|
228
286
|
}
|
|
229
287
|
|
|
@@ -235,61 +293,138 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
|
|
|
235
293
|
this.modularBuilder.addNoChangeConstraintOnRevert(this.mintRevisionTag());
|
|
236
294
|
}
|
|
237
295
|
|
|
238
|
-
public
|
|
296
|
+
public buildRoots(content: TreeChunk): DetachedRootIds {
|
|
297
|
+
const detachedRoots = [];
|
|
298
|
+
const count = content.topLevelLength;
|
|
299
|
+
if (count > 0) {
|
|
300
|
+
const buildRevision = this.mintRevisionTag();
|
|
301
|
+
const buildId = {
|
|
302
|
+
localId: this.modularBuilder.generateId(count),
|
|
303
|
+
revision: buildRevision,
|
|
304
|
+
};
|
|
305
|
+
const build = this.modularBuilder.buildTrees(buildId.localId, content, buildRevision);
|
|
306
|
+
this.modularBuilder.submitChanges([build], buildRevision);
|
|
307
|
+
detachedRoots.push({ first: buildId, count });
|
|
308
|
+
this.nodesWithoutCells.set(buildId.localId, count, true);
|
|
309
|
+
}
|
|
310
|
+
return detachedRoots;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
public valueField(
|
|
314
|
+
field: NormalizedFieldUpPath,
|
|
315
|
+
): RequiredFieldEditor<TreeChunk, ChangeAtomId> {
|
|
316
|
+
enforceEditsToDetachedTreesOptions(field, this.options);
|
|
317
|
+
const makeAttachEditDescription = (
|
|
318
|
+
fill: ChangeAtomId,
|
|
319
|
+
revision: RevisionTag,
|
|
320
|
+
): FieldEditDescription => {
|
|
321
|
+
const detachLocalId = this.modularBuilder.generateId();
|
|
322
|
+
const detach = { localId: detachLocalId, revision };
|
|
323
|
+
const change = valueFieldKind.changeHandler.editor.set({ fill, detach });
|
|
324
|
+
return {
|
|
325
|
+
type: "field",
|
|
326
|
+
field,
|
|
327
|
+
fieldKind: valueFieldKind.identifier,
|
|
328
|
+
change: brand(change),
|
|
329
|
+
revision,
|
|
330
|
+
};
|
|
331
|
+
};
|
|
239
332
|
return {
|
|
240
333
|
set: (newContent: TreeChunk): void => {
|
|
241
|
-
assert(
|
|
242
|
-
newContent.topLevelLength === 1,
|
|
243
|
-
0xc12 /* Value fields should have a single top level node */,
|
|
244
|
-
);
|
|
334
|
+
assert(newContent.topLevelLength === 1, "Expected exactly one node");
|
|
245
335
|
const revision = this.mintRevisionTag();
|
|
246
|
-
const
|
|
247
|
-
const
|
|
248
|
-
const build = this.modularBuilder.buildTrees(
|
|
249
|
-
const
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
detach,
|
|
253
|
-
}),
|
|
254
|
-
);
|
|
336
|
+
const buildLocalId = this.modularBuilder.generateId();
|
|
337
|
+
const buildId = { localId: buildLocalId, revision };
|
|
338
|
+
const build = this.modularBuilder.buildTrees(buildLocalId, newContent, revision);
|
|
339
|
+
const attach = makeAttachEditDescription(buildId, revision);
|
|
340
|
+
this.modularBuilder.submitChanges([build, attach], revision);
|
|
341
|
+
},
|
|
255
342
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
}
|
|
263
|
-
this.
|
|
343
|
+
attach: (newContent: ChangeAtomId): void => {
|
|
344
|
+
const isWithoutCell = this.nodesWithoutCells.delete(newContent.localId, 1) === 1;
|
|
345
|
+
if (!isWithoutCell) {
|
|
346
|
+
throw new UsageError(
|
|
347
|
+
"A hydrated node that has been attached before cannot be attached into an object's required field. Assign new content to the field instead.",
|
|
348
|
+
);
|
|
349
|
+
}
|
|
350
|
+
const revision = this.mintRevisionTag();
|
|
351
|
+
const attach = makeAttachEditDescription(newContent, revision);
|
|
352
|
+
this.modularBuilder.submitChanges([attach], revision);
|
|
264
353
|
},
|
|
265
354
|
};
|
|
266
355
|
}
|
|
267
356
|
|
|
268
|
-
public optionalField(
|
|
269
|
-
|
|
357
|
+
public optionalField(
|
|
358
|
+
field: NormalizedFieldUpPath,
|
|
359
|
+
): OptionalFieldEditor<TreeChunk, ChangeAtomId> {
|
|
360
|
+
enforceEditsToDetachedTreesOptions(field, this.options);
|
|
361
|
+
const makeAttachEditDescription = (
|
|
362
|
+
fill: ChangeAtomId,
|
|
363
|
+
revision: RevisionTag,
|
|
364
|
+
wasEmpty: boolean,
|
|
365
|
+
): FieldEditDescription => {
|
|
366
|
+
const detachLocalId = this.modularBuilder.generateId();
|
|
367
|
+
const detach = { localId: detachLocalId, revision };
|
|
368
|
+
const change = optional.changeHandler.editor.set(wasEmpty, { fill, detach });
|
|
369
|
+
return {
|
|
370
|
+
type: "field",
|
|
371
|
+
field,
|
|
372
|
+
fieldKind: optional.identifier,
|
|
373
|
+
change: brand(change),
|
|
374
|
+
revision,
|
|
375
|
+
};
|
|
376
|
+
};
|
|
377
|
+
const editBuilder = {
|
|
270
378
|
set: (newContent: TreeChunk | undefined, wasEmpty: boolean): void => {
|
|
271
|
-
// The choice to ban empty chunks here instead of treating them as a clear is a subjective choice made to err of the side of more explicitness and stricter validation.
|
|
272
|
-
assert(
|
|
273
|
-
newContent === undefined || newContent.topLevelLength === 1,
|
|
274
|
-
0xc13 /* optional fields should have a single top level node, or undefined */,
|
|
275
|
-
);
|
|
276
|
-
const edits: EditDescription[] = [];
|
|
277
|
-
let optionalChange: OptionalChangeset;
|
|
278
|
-
const revision = this.mintRevisionTag();
|
|
279
|
-
const detach: ChangeAtomId = { localId: this.modularBuilder.generateId(), revision };
|
|
280
379
|
if (newContent === undefined) {
|
|
281
|
-
|
|
380
|
+
editBuilder.clear(wasEmpty);
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
383
|
+
assert(newContent.topLevelLength === 1, "Expected exactly one node");
|
|
384
|
+
const revision = this.mintRevisionTag();
|
|
385
|
+
const buildLocalId = this.modularBuilder.generateId();
|
|
386
|
+
const buildId = { localId: buildLocalId, revision };
|
|
387
|
+
const build = this.modularBuilder.buildTrees(buildLocalId, newContent, revision);
|
|
388
|
+
const attach = makeAttachEditDescription(buildId, revision, wasEmpty);
|
|
389
|
+
this.modularBuilder.submitChanges([build, attach], revision);
|
|
390
|
+
},
|
|
391
|
+
attach: (content: ChangeAtomId | undefined, wasEmpty: boolean): void => {
|
|
392
|
+
if (content === undefined) {
|
|
393
|
+
editBuilder.clear(wasEmpty);
|
|
394
|
+
return;
|
|
395
|
+
}
|
|
396
|
+
const isWithoutCell = this.nodesWithoutCells.delete(content.localId, 1) === 1;
|
|
397
|
+
if (!isWithoutCell && this.options.canMakeDetachedRootEdits !== true) {
|
|
398
|
+
throw new UsageError(
|
|
399
|
+
`Attach edits require a minimum version for collaboration >= TBD.`,
|
|
400
|
+
);
|
|
401
|
+
}
|
|
402
|
+
const revision = this.mintRevisionTag();
|
|
403
|
+
const edits: EditDescription[] = [];
|
|
404
|
+
let stableSrcId: ChangeAtomId;
|
|
405
|
+
if (isWithoutCell) {
|
|
406
|
+
stableSrcId = content;
|
|
282
407
|
} else {
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
408
|
+
// If the node has an associated cell, then it may be concurrently moved to another location.
|
|
409
|
+
// We use a rename to ensure that the node will be moved to a specific grave before the attach.
|
|
410
|
+
stableSrcId = { localId: this.modularBuilder.generateId(), revision };
|
|
411
|
+
const rename: GlobalEditDescription = {
|
|
412
|
+
type: "global",
|
|
413
|
+
revision,
|
|
414
|
+
renames: [
|
|
415
|
+
{ count: 1, oldId: content, newId: stableSrcId, detachLocation: undefined },
|
|
416
|
+
],
|
|
417
|
+
};
|
|
418
|
+
edits.push(rename);
|
|
291
419
|
}
|
|
292
|
-
|
|
420
|
+
const attach = makeAttachEditDescription(stableSrcId, revision, wasEmpty);
|
|
421
|
+
edits.push(attach);
|
|
422
|
+
this.modularBuilder.submitChanges(edits, revision);
|
|
423
|
+
},
|
|
424
|
+
clear: (wasEmpty: boolean): void => {
|
|
425
|
+
const revision = this.mintRevisionTag();
|
|
426
|
+
const detach: ChangeAtomId = { localId: this.modularBuilder.generateId(), revision };
|
|
427
|
+
const optionalChange = optional.changeHandler.editor.clear(wasEmpty, detach);
|
|
293
428
|
const change: FieldChangeset = brand(optionalChange);
|
|
294
429
|
const edit: FieldEditDescription = {
|
|
295
430
|
type: "field",
|
|
@@ -298,18 +433,17 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
|
|
|
298
433
|
change,
|
|
299
434
|
revision,
|
|
300
435
|
};
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
this.modularBuilder.submitChanges(edits, revision);
|
|
436
|
+
this.modularBuilder.submitChanges([edit], revision);
|
|
304
437
|
},
|
|
305
438
|
};
|
|
439
|
+
return editBuilder;
|
|
306
440
|
}
|
|
307
441
|
|
|
308
442
|
public move(
|
|
309
|
-
sourceField:
|
|
443
|
+
sourceField: NormalizedFieldUpPath,
|
|
310
444
|
sourceIndex: number,
|
|
311
445
|
count: number,
|
|
312
|
-
destinationField:
|
|
446
|
+
destinationField: NormalizedFieldUpPath,
|
|
313
447
|
destIndex: number,
|
|
314
448
|
): void {
|
|
315
449
|
if (count === 0) {
|
|
@@ -317,6 +451,8 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
|
|
|
317
451
|
} else if (count < 0 || !Number.isSafeInteger(count)) {
|
|
318
452
|
throw new UsageError(`Expected non-negative integer count, got ${count}.`);
|
|
319
453
|
}
|
|
454
|
+
enforceEditsToDetachedTreesOptions(sourceField, this.options);
|
|
455
|
+
enforceEditsToDetachedTreesOptions(destinationField, this.options);
|
|
320
456
|
const revision = this.mintRevisionTag();
|
|
321
457
|
const detachCellId = this.modularBuilder.generateId(count);
|
|
322
458
|
const attachCellId: CellId = { localId: this.modularBuilder.generateId(count), revision };
|
|
@@ -340,13 +476,13 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
|
|
|
340
476
|
const attachPath = topDownPath(destinationField.parent);
|
|
341
477
|
const sharedDepth = getSharedPrefixLength(detachPath, attachPath);
|
|
342
478
|
let adjustedAttachField = destinationField;
|
|
343
|
-
//
|
|
344
|
-
// that both paths have in common.
|
|
479
|
+
// `sharedDepth` is the number of elements, starting from the root, that both paths have in common.
|
|
345
480
|
if (sharedDepth === detachPath.length) {
|
|
346
|
-
const
|
|
481
|
+
const lowestCommonAncestor: NormalizedUpPath | undefined = attachPath[sharedDepth];
|
|
482
|
+
const attachField = lowestCommonAncestor?.parentField ?? destinationField.field;
|
|
347
483
|
if (attachField === sourceField.field) {
|
|
348
484
|
// The detach occurs in an ancestor field of the field where the attach occurs.
|
|
349
|
-
|
|
485
|
+
const attachAncestorIndex = lowestCommonAncestor?.parentIndex ?? destIndex;
|
|
350
486
|
if (attachAncestorIndex < sourceIndex) {
|
|
351
487
|
// The attach path runs through a node located before the detached nodes.
|
|
352
488
|
// No need to adjust the attach path.
|
|
@@ -354,14 +490,19 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
|
|
|
354
490
|
// The attach path runs through a node located after the detached nodes.
|
|
355
491
|
// adjust the index for the node at that depth of the path, so that it is interpreted correctly
|
|
356
492
|
// in the composition performed by `submitChanges`.
|
|
357
|
-
attachAncestorIndex
|
|
358
|
-
let parent:
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
493
|
+
const adjustedAttachAncestorIndex = attachAncestorIndex - count;
|
|
494
|
+
let parent: NormalizedUpPath =
|
|
495
|
+
lowestCommonAncestor === undefined
|
|
496
|
+
? {
|
|
497
|
+
parent: undefined,
|
|
498
|
+
detachedNodeId: undefined,
|
|
499
|
+
parentIndex: adjustedAttachAncestorIndex,
|
|
500
|
+
parentField: destinationField.field,
|
|
501
|
+
}
|
|
502
|
+
: {
|
|
503
|
+
...lowestCommonAncestor,
|
|
504
|
+
parentIndex: adjustedAttachAncestorIndex,
|
|
505
|
+
};
|
|
365
506
|
for (let i = sharedDepth + 1; i < attachPath.length; i += 1) {
|
|
366
507
|
parent = {
|
|
367
508
|
...(attachPath[i] ?? oob()),
|
|
@@ -376,19 +517,20 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
|
|
|
376
517
|
}
|
|
377
518
|
}
|
|
378
519
|
}
|
|
379
|
-
const moveOut = sequence.changeHandler.editor.
|
|
520
|
+
const moveOut = sequence.changeHandler.editor.remove(
|
|
380
521
|
sourceIndex,
|
|
381
522
|
count,
|
|
382
523
|
detachCellId,
|
|
383
524
|
revision,
|
|
384
525
|
);
|
|
385
|
-
const moveIn = sequence.changeHandler.editor.
|
|
526
|
+
const moveIn = sequence.changeHandler.editor.insert(
|
|
386
527
|
destIndex,
|
|
387
528
|
count,
|
|
388
|
-
detachCellId,
|
|
389
529
|
attachCellId,
|
|
390
530
|
revision,
|
|
531
|
+
detachCellId,
|
|
391
532
|
);
|
|
533
|
+
|
|
392
534
|
this.modularBuilder.submitChanges(
|
|
393
535
|
[
|
|
394
536
|
{
|
|
@@ -411,30 +553,114 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
|
|
|
411
553
|
}
|
|
412
554
|
}
|
|
413
555
|
|
|
414
|
-
public sequenceField(
|
|
415
|
-
|
|
556
|
+
public sequenceField(
|
|
557
|
+
field: NormalizedFieldUpPath,
|
|
558
|
+
): SequenceFieldEditor<TreeChunk, DetachedRootIds> {
|
|
559
|
+
enforceEditsToDetachedTreesOptions(field, this.options);
|
|
560
|
+
const makeAttachEditDescription = (
|
|
561
|
+
index: number,
|
|
562
|
+
{ first, count }: DetachedRootIdRange,
|
|
563
|
+
revision: RevisionTag,
|
|
564
|
+
areWithoutCells: boolean,
|
|
565
|
+
): EditDescription[] => {
|
|
566
|
+
const edits: EditDescription[] = [];
|
|
567
|
+
// If the nodes have never been attached in cell, then we must use a cell ID that matches the build ID.
|
|
568
|
+
// This ensures back-compatibility with the v1 ModularChangeFamily model which requires that every node be associated with cell
|
|
569
|
+
// by generating an insert whose destination cell is the cell associated with the build ID.
|
|
570
|
+
let stableSrcId: ChangeAtomId;
|
|
571
|
+
if (areWithoutCells) {
|
|
572
|
+
stableSrcId = first;
|
|
573
|
+
} else {
|
|
574
|
+
// If the node has an associated cell, then it may be concurrently moved to another location.
|
|
575
|
+
// We use a rename to ensure that the node will be moved to a specific grave before the attach.
|
|
576
|
+
stableSrcId = { localId: this.modularBuilder.generateId(count), revision };
|
|
577
|
+
const rename: GlobalEditDescription = {
|
|
578
|
+
type: "global",
|
|
579
|
+
revision,
|
|
580
|
+
renames: [
|
|
581
|
+
{
|
|
582
|
+
count,
|
|
583
|
+
oldId: first,
|
|
584
|
+
newId: stableSrcId,
|
|
585
|
+
detachLocation: undefined,
|
|
586
|
+
},
|
|
587
|
+
],
|
|
588
|
+
};
|
|
589
|
+
edits.push(rename);
|
|
590
|
+
}
|
|
591
|
+
assert(stableSrcId.revision !== undefined, "Detached nodes ID must have a revision");
|
|
592
|
+
const change = sequence.changeHandler.editor.insert(
|
|
593
|
+
index,
|
|
594
|
+
count,
|
|
595
|
+
stableSrcId,
|
|
596
|
+
stableSrcId.revision,
|
|
597
|
+
stableSrcId.localId,
|
|
598
|
+
);
|
|
599
|
+
const attach: FieldEditDescription = {
|
|
600
|
+
type: "field",
|
|
601
|
+
field,
|
|
602
|
+
fieldKind: sequence.identifier,
|
|
603
|
+
change: brand(change),
|
|
604
|
+
revision,
|
|
605
|
+
};
|
|
606
|
+
edits.push(attach);
|
|
607
|
+
return edits;
|
|
608
|
+
};
|
|
609
|
+
const editBuilder = {
|
|
416
610
|
insert: (index: number, content: TreeChunk): void => {
|
|
417
|
-
const
|
|
418
|
-
if (
|
|
611
|
+
const count = content.topLevelLength;
|
|
612
|
+
if (count === 0) {
|
|
419
613
|
return;
|
|
420
614
|
}
|
|
421
|
-
|
|
422
615
|
const revision = this.mintRevisionTag();
|
|
423
|
-
const
|
|
424
|
-
const build = this.modularBuilder.buildTrees(
|
|
425
|
-
const
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
const attach: FieldEditDescription = {
|
|
429
|
-
type: "field",
|
|
430
|
-
field,
|
|
431
|
-
fieldKind: sequence.identifier,
|
|
432
|
-
change,
|
|
433
|
-
revision,
|
|
616
|
+
const buildLocalId = this.modularBuilder.generateId();
|
|
617
|
+
const build = this.modularBuilder.buildTrees(buildLocalId, content, revision);
|
|
618
|
+
const roots: DetachedRootIdRange = {
|
|
619
|
+
first: { localId: buildLocalId, revision },
|
|
620
|
+
count,
|
|
434
621
|
};
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
this.modularBuilder.submitChanges([build, attach], revision);
|
|
622
|
+
|
|
623
|
+
const attach = makeAttachEditDescription(index, roots, revision, true);
|
|
624
|
+
this.modularBuilder.submitChanges([build, ...attach], revision);
|
|
625
|
+
},
|
|
626
|
+
attach: (index: number, newContent: DetachedRootIds): void => {
|
|
627
|
+
const attachRevision = this.mintRevisionTag();
|
|
628
|
+
let areAllWithoutCells = true;
|
|
629
|
+
let insertOffset = 0;
|
|
630
|
+
const edits: EditDescription[] = [];
|
|
631
|
+
for (const range of newContent) {
|
|
632
|
+
if (range.count === 0) {
|
|
633
|
+
continue;
|
|
634
|
+
}
|
|
635
|
+
const countWithoutCells = this.nodesWithoutCells.delete(
|
|
636
|
+
range.first.localId,
|
|
637
|
+
range.count,
|
|
638
|
+
);
|
|
639
|
+
assert(
|
|
640
|
+
countWithoutCells === 0 || countWithoutCells === range.count,
|
|
641
|
+
"All detached roots within the same ID range must either all have or all not have a cell",
|
|
642
|
+
);
|
|
643
|
+
const areWithoutCells = countWithoutCells === range.count;
|
|
644
|
+
if (!areWithoutCells) {
|
|
645
|
+
areAllWithoutCells = false;
|
|
646
|
+
}
|
|
647
|
+
const renameAndAttach = makeAttachEditDescription(
|
|
648
|
+
index + insertOffset,
|
|
649
|
+
range,
|
|
650
|
+
attachRevision,
|
|
651
|
+
areWithoutCells,
|
|
652
|
+
);
|
|
653
|
+
edits.push(...renameAndAttach);
|
|
654
|
+
insertOffset += range.count;
|
|
655
|
+
}
|
|
656
|
+
if (!areAllWithoutCells && this.options.canMakeDetachedRootEdits !== true) {
|
|
657
|
+
throw new UsageError(
|
|
658
|
+
`Attach edits require a minimum version for collaboration >= TBD.`,
|
|
659
|
+
);
|
|
660
|
+
}
|
|
661
|
+
if (edits.length > 0) {
|
|
662
|
+
this.modularBuilder.submitChanges(edits, attachRevision);
|
|
663
|
+
}
|
|
438
664
|
},
|
|
439
665
|
remove: (index: number, count: number): void => {
|
|
440
666
|
if (count === 0) {
|
|
@@ -448,34 +674,80 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
|
|
|
448
674
|
this.modularBuilder.submitChange(field, sequence.identifier, change, revision);
|
|
449
675
|
},
|
|
450
676
|
};
|
|
677
|
+
return editBuilder;
|
|
451
678
|
}
|
|
452
679
|
}
|
|
453
680
|
|
|
454
|
-
|
|
681
|
+
function enforceEditsToDetachedTreesOptions(field: FieldUpPath, options: EditorOptions): void {
|
|
682
|
+
if (options.canMakeDetachedRootEdits !== true) {
|
|
683
|
+
const topField = getDetachedFieldContainingFieldPath(field);
|
|
684
|
+
if (topField !== rootField) {
|
|
685
|
+
throw new UsageError(
|
|
686
|
+
`Edits and constraints on detached trees require a minimum version for collaboration >= TBD.`,
|
|
687
|
+
);
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
export interface RequiredFieldEditor<TContent, TDetachedRoot> {
|
|
693
|
+
/**
|
|
694
|
+
* Issues a change which replaces the content of the field with the given detached node.
|
|
695
|
+
* @param content - The content to be attached in the field in the given order.
|
|
696
|
+
* Must represent a single detached node.
|
|
697
|
+
* Must have been created in the same JS turn.
|
|
698
|
+
*
|
|
699
|
+
* Requires SharedTreeFormatVersion.vDetachedRoots or later.
|
|
700
|
+
*/
|
|
701
|
+
attach(content: TDetachedRoot): void;
|
|
702
|
+
|
|
455
703
|
/**
|
|
456
|
-
* Issues a change which replaces the
|
|
704
|
+
* Issues a change which replaces the content of the field with `newContent`.
|
|
457
705
|
* @param newContent - the new content for the field.
|
|
458
706
|
*/
|
|
459
707
|
set(newContent: TContent): void;
|
|
460
708
|
}
|
|
461
709
|
|
|
462
|
-
export interface
|
|
710
|
+
export interface OptionalFieldEditor<TContent, TDetachedRoots> {
|
|
463
711
|
/**
|
|
464
|
-
* Issues a change which replaces the
|
|
712
|
+
* Issues a change which replaces the content of the field with the given detached node.
|
|
713
|
+
* @param content - The content to be attached in the field in the given order.
|
|
714
|
+
* Must represent a single detached node.
|
|
715
|
+
*
|
|
716
|
+
* Requires SharedTreeFormatVersion.vDetachedRoots or later.
|
|
717
|
+
*/
|
|
718
|
+
attach(content: TDetachedRoots | undefined, wasEmpty: boolean): void;
|
|
719
|
+
|
|
720
|
+
/**
|
|
721
|
+
* Issues a change which clears content of the field.
|
|
722
|
+
* @param wasEmpty - whether the field is empty when creating this change
|
|
723
|
+
*/
|
|
724
|
+
clear(wasEmpty: boolean): void;
|
|
725
|
+
|
|
726
|
+
/**
|
|
727
|
+
* Issues a change which replaces the content of the field with `newContent`
|
|
465
728
|
* @param newContent - the new content for the field.
|
|
466
|
-
* @param wasEmpty - whether the field is empty when creating this change
|
|
729
|
+
* @param wasEmpty - whether the field is empty when creating this change
|
|
467
730
|
*/
|
|
468
731
|
set(newContent: TContent | undefined, wasEmpty: boolean): void;
|
|
469
732
|
}
|
|
470
733
|
|
|
471
734
|
/**
|
|
472
|
-
*
|
|
735
|
+
* Editor for the sequence field kind.
|
|
473
736
|
*/
|
|
474
|
-
export interface
|
|
737
|
+
export interface SequenceFieldEditor<TContent, TDetachedRoots, TRemoved = void> {
|
|
738
|
+
/**
|
|
739
|
+
* Issues a change which attaches a sequence of detached nodes at the given `index`.
|
|
740
|
+
* @param index - The index at which to attach the detached nodes.
|
|
741
|
+
* @param detachedContent - The content to be attached in the field in the given order. Each node must be detached.
|
|
742
|
+
*
|
|
743
|
+
* Requires SharedTreeFormatVersion.vDetachedRoots or later.
|
|
744
|
+
*/
|
|
745
|
+
attach(index: number, detachedContent: TDetachedRoots): void;
|
|
746
|
+
|
|
475
747
|
/**
|
|
476
748
|
* Issues a change which inserts the `newContent` at the given `index`.
|
|
477
749
|
* @param index - the index at which to insert the `newContent`.
|
|
478
|
-
* @param newContent - the new content to be inserted in the field.
|
|
750
|
+
* @param newContent - the new content to be inserted in the field.
|
|
479
751
|
*/
|
|
480
752
|
insert(index: number, newContent: TContent): void;
|
|
481
753
|
|