@fluidframework/tree 2.1.0-276985 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.cjs +7 -0
- package/.vscode/Tree.code-workspace +9 -2
- package/CHANGELOG.md +38 -0
- package/README.md +55 -12
- package/api-report/tree.alpha.api.md +2 -1
- package/api-report/tree.beta.api.md +2 -1
- package/api-report/tree.public.api.md +2 -1
- package/beta.d.ts +1 -1
- package/dist/beta.d.ts +1 -1
- package/dist/core/forest/editableForest.d.ts +6 -3
- package/dist/core/forest/editableForest.d.ts.map +1 -1
- package/dist/core/forest/editableForest.js +16 -4
- package/dist/core/forest/editableForest.js.map +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +3 -1
- package/dist/core/index.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 +3 -1
- package/dist/core/rebase/index.js.map +1 -1
- package/dist/core/rebase/types.d.ts +2 -0
- package/dist/core/rebase/types.d.ts.map +1 -1
- package/dist/core/rebase/types.js +9 -1
- package/dist/core/rebase/types.js.map +1 -1
- package/dist/core/tree/anchorSet.d.ts +1 -0
- package/dist/core/tree/anchorSet.d.ts.map +1 -1
- package/dist/core/tree/anchorSet.js +13 -0
- package/dist/core/tree/anchorSet.js.map +1 -1
- package/dist/core/tree/detachedFieldIndex.d.ts +48 -11
- package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndex.js +144 -20
- package/dist/core/tree/detachedFieldIndex.js.map +1 -1
- package/dist/core/tree/detachedFieldIndexCodec.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndexCodec.js +13 -4
- package/dist/core/tree/detachedFieldIndexCodec.js.map +1 -1
- package/dist/core/tree/detachedFieldIndexFormat.d.ts +1 -1
- package/dist/core/tree/detachedFieldIndexFormat.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndexFormat.js.map +1 -1
- package/dist/core/tree/detachedFieldIndexTypes.d.ts +39 -4
- package/dist/core/tree/detachedFieldIndexTypes.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndexTypes.js.map +1 -1
- package/dist/core/tree/index.d.ts +2 -1
- package/dist/core/tree/index.d.ts.map +1 -1
- package/dist/core/tree/index.js.map +1 -1
- package/dist/core/tree/visitDelta.d.ts +3 -1
- package/dist/core/tree/visitDelta.d.ts.map +1 -1
- package/dist/core/tree/visitDelta.js +31 -15
- package/dist/core/tree/visitDelta.js.map +1 -1
- package/dist/core/tree/visitorUtils.d.ts +3 -3
- package/dist/core/tree/visitorUtils.d.ts.map +1 -1
- package/dist/core/tree/visitorUtils.js +4 -4
- package/dist/core/tree/visitorUtils.js.map +1 -1
- package/dist/events/events.d.ts +4 -1
- package/dist/events/events.d.ts.map +1 -1
- package/dist/events/events.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.js +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.js +1 -0
- package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
- package/dist/feature-libraries/editableTreeBinder.js +1 -1
- package/dist/feature-libraries/editableTreeBinder.js.map +1 -1
- package/dist/feature-libraries/flex-map-tree/mapTreeNode.d.ts +1 -10
- package/dist/feature-libraries/flex-map-tree/mapTreeNode.d.ts.map +1 -1
- package/dist/feature-libraries/flex-map-tree/mapTreeNode.js +0 -72
- package/dist/feature-libraries/flex-map-tree/mapTreeNode.js.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +1 -51
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.js +0 -2
- package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/dist/feature-libraries/flex-tree/index.d.ts +3 -2
- package/dist/feature-libraries/flex-tree/index.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/index.js +5 -1
- package/dist/feature-libraries/flex-tree/index.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyEntity.d.ts +1 -2
- package/dist/feature-libraries/flex-tree/lazyEntity.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.d.ts +1 -6
- package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.js +11 -32
- package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyNode.d.ts +1 -5
- package/dist/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyNode.js +0 -30
- package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.js +1 -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 +6 -3
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts +11 -0
- package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
- package/dist/feature-libraries/modular-schema/discrepancies.d.ts +96 -0
- package/dist/feature-libraries/modular-schema/discrepancies.d.ts.map +1 -0
- package/dist/feature-libraries/modular-schema/discrepancies.js +264 -0
- package/dist/feature-libraries/modular-schema/discrepancies.js.map +1 -0
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +9 -2
- 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 -0
- package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
- package/dist/feature-libraries/modular-schema/index.d.ts +2 -1
- package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/index.js +3 -1
- package/dist/feature-libraries/modular-schema/index.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +42 -26
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +51 -2
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js +827 -245
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFormat.js +2 -0
- package/dist/feature-libraries/modular-schema/modularChangeFormat.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts +44 -1
- package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
- package/dist/feature-libraries/node-key/index.d.ts +0 -1
- package/dist/feature-libraries/node-key/index.d.ts.map +1 -1
- package/dist/feature-libraries/node-key/index.js +1 -3
- package/dist/feature-libraries/node-key/index.js.map +1 -1
- package/dist/feature-libraries/object-forest/objectForest.d.ts +3 -2
- package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
- package/dist/feature-libraries/object-forest/objectForest.js +5 -4
- package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
- package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
- package/dist/feature-libraries/optional-field/optionalField.js +1 -0
- package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
- package/dist/feature-libraries/sequence-field/index.d.ts +1 -1
- package/dist/feature-libraries/sequence-field/index.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/index.js +1 -2
- package/dist/feature-libraries/sequence-field/index.js.map +1 -1
- package/dist/feature-libraries/sequence-field/invert.js +1 -1
- package/dist/feature-libraries/sequence-field/invert.js.map +1 -1
- package/dist/feature-libraries/sequence-field/rebase.js +6 -1
- package/dist/feature-libraries/sequence-field/rebase.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.js +1 -0
- package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.js.map +1 -1
- package/dist/feature-libraries/sequence-field/utils.d.ts +2 -17
- package/dist/feature-libraries/sequence-field/utils.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/utils.js +31 -39
- package/dist/feature-libraries/sequence-field/utils.js.map +1 -1
- package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts +1 -0
- package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +1 -1
- package/dist/feature-libraries/typed-schema/typedTreeSchema.js +2 -0
- package/dist/feature-libraries/typed-schema/typedTreeSchema.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -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/public.d.ts +1 -1
- package/dist/shared-tree/schematizingTreeView.d.ts +4 -2
- package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +240 -184
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree/sharedTree.d.ts +5 -1
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +157 -90
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/sharedTreeChangeEnricher.js +1 -1
- package/dist/shared-tree/sharedTreeChangeEnricher.js.map +1 -1
- package/dist/shared-tree/treeApi.js +1 -1
- package/dist/shared-tree/treeApi.js.map +1 -1
- package/dist/shared-tree/treeCheckout.d.ts +10 -1
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +47 -3
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree/treeView.d.ts.map +1 -1
- package/dist/shared-tree/treeView.js +7 -3
- package/dist/shared-tree/treeView.js.map +1 -1
- package/dist/shared-tree-core/branch.d.ts +6 -0
- package/dist/shared-tree-core/branch.d.ts.map +1 -1
- package/dist/shared-tree-core/branch.js +3 -0
- package/dist/shared-tree-core/branch.js.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.d.ts +8 -6
- package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.js +271 -209
- package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/dist/simple-tree/arrayNode.d.ts +4 -0
- package/dist/simple-tree/arrayNode.d.ts.map +1 -1
- package/dist/simple-tree/arrayNode.js +36 -19
- package/dist/simple-tree/arrayNode.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 +2 -1
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/leafNodeSchema.d.ts +22 -1
- package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/leafNodeSchema.js +2 -1
- package/dist/simple-tree/leafNodeSchema.js.map +1 -1
- package/dist/simple-tree/mapNode.d.ts.map +1 -1
- 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 +2 -1
- package/dist/simple-tree/objectNode.js.map +1 -1
- package/dist/simple-tree/proxies.d.ts.map +1 -1
- package/dist/simple-tree/proxies.js +9 -25
- package/dist/simple-tree/proxies.js.map +1 -1
- package/dist/simple-tree/proxyBinding.d.ts +4 -0
- package/dist/simple-tree/proxyBinding.d.ts.map +1 -1
- package/dist/simple-tree/proxyBinding.js +23 -1
- package/dist/simple-tree/proxyBinding.js.map +1 -1
- package/dist/simple-tree/schemaFactory.d.ts +16 -1
- package/dist/simple-tree/schemaFactory.d.ts.map +1 -1
- package/dist/simple-tree/schemaFactory.js +32 -4
- package/dist/simple-tree/schemaFactory.js.map +1 -1
- package/dist/simple-tree/schemaTypes.d.ts +36 -1
- package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
- package/dist/simple-tree/schemaTypes.js.map +1 -1
- package/dist/simple-tree/toFlexSchema.d.ts +2 -2
- package/dist/simple-tree/toFlexSchema.d.ts.map +1 -1
- package/dist/simple-tree/toFlexSchema.js +3 -2
- package/dist/simple-tree/toFlexSchema.js.map +1 -1
- package/dist/simple-tree/tree.d.ts +4 -1
- package/dist/simple-tree/tree.d.ts.map +1 -1
- package/dist/simple-tree/tree.js +48 -1
- package/dist/simple-tree/tree.js.map +1 -1
- package/dist/simple-tree/treeNodeApi.d.ts +2 -75
- package/dist/simple-tree/treeNodeApi.d.ts.map +1 -1
- package/dist/simple-tree/treeNodeApi.js +17 -25
- package/dist/simple-tree/treeNodeApi.js.map +1 -1
- package/dist/simple-tree/treeNodeKernel.d.ts +26 -0
- package/dist/simple-tree/treeNodeKernel.d.ts.map +1 -0
- package/dist/simple-tree/treeNodeKernel.js +83 -0
- package/dist/simple-tree/treeNodeKernel.js.map +1 -0
- package/dist/simple-tree/types.d.ts +95 -3
- package/dist/simple-tree/types.d.ts.map +1 -1
- package/dist/simple-tree/types.js +120 -21
- package/dist/simple-tree/types.js.map +1 -1
- package/dist/util/breakable.d.ts +83 -0
- package/dist/util/breakable.d.ts.map +1 -0
- package/dist/util/breakable.js +178 -0
- package/dist/util/breakable.js.map +1 -0
- package/dist/util/index.d.ts +3 -2
- package/dist/util/index.d.ts.map +1 -1
- package/dist/util/index.js +9 -2
- package/dist/util/index.js.map +1 -1
- package/dist/util/nestedMap.d.ts +17 -3
- package/dist/util/nestedMap.d.ts.map +1 -1
- package/dist/util/nestedMap.js +21 -1
- package/dist/util/nestedMap.js.map +1 -1
- package/dist/util/utils.d.ts +7 -0
- package/dist/util/utils.d.ts.map +1 -1
- package/dist/util/utils.js +15 -1
- package/dist/util/utils.js.map +1 -1
- package/internal.d.ts +1 -1
- package/lib/beta.d.ts +1 -1
- package/lib/core/forest/editableForest.d.ts +6 -3
- package/lib/core/forest/editableForest.d.ts.map +1 -1
- package/lib/core/forest/editableForest.js +17 -5
- package/lib/core/forest/editableForest.js.map +1 -1
- package/lib/core/index.d.ts +1 -1
- package/lib/core/index.d.ts.map +1 -1
- package/lib/core/index.js +1 -1
- package/lib/core/index.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 +2 -0
- package/lib/core/rebase/types.d.ts.map +1 -1
- package/lib/core/rebase/types.js +7 -1
- package/lib/core/rebase/types.js.map +1 -1
- package/lib/core/tree/anchorSet.d.ts +1 -0
- package/lib/core/tree/anchorSet.d.ts.map +1 -1
- package/lib/core/tree/anchorSet.js +13 -0
- package/lib/core/tree/anchorSet.js.map +1 -1
- package/lib/core/tree/detachedFieldIndex.d.ts +48 -11
- package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndex.js +145 -21
- package/lib/core/tree/detachedFieldIndex.js.map +1 -1
- package/lib/core/tree/detachedFieldIndexCodec.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndexCodec.js +13 -4
- package/lib/core/tree/detachedFieldIndexCodec.js.map +1 -1
- package/lib/core/tree/detachedFieldIndexFormat.d.ts +1 -1
- package/lib/core/tree/detachedFieldIndexFormat.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndexFormat.js.map +1 -1
- package/lib/core/tree/detachedFieldIndexTypes.d.ts +39 -4
- package/lib/core/tree/detachedFieldIndexTypes.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndexTypes.js.map +1 -1
- package/lib/core/tree/index.d.ts +2 -1
- package/lib/core/tree/index.d.ts.map +1 -1
- package/lib/core/tree/index.js.map +1 -1
- package/lib/core/tree/visitDelta.d.ts +3 -1
- package/lib/core/tree/visitDelta.d.ts.map +1 -1
- package/lib/core/tree/visitDelta.js +31 -15
- package/lib/core/tree/visitDelta.js.map +1 -1
- package/lib/core/tree/visitorUtils.d.ts +3 -3
- package/lib/core/tree/visitorUtils.d.ts.map +1 -1
- package/lib/core/tree/visitorUtils.js +4 -4
- package/lib/core/tree/visitorUtils.js.map +1 -1
- package/lib/events/events.d.ts +4 -1
- package/lib/events/events.d.ts.map +1 -1
- package/lib/events/events.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.js +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.js +1 -0
- package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
- package/lib/feature-libraries/editableTreeBinder.js +1 -1
- package/lib/feature-libraries/editableTreeBinder.js.map +1 -1
- package/lib/feature-libraries/flex-map-tree/mapTreeNode.d.ts +1 -10
- package/lib/feature-libraries/flex-map-tree/mapTreeNode.d.ts.map +1 -1
- package/lib/feature-libraries/flex-map-tree/mapTreeNode.js +2 -74
- package/lib/feature-libraries/flex-map-tree/mapTreeNode.js.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +1 -51
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.js +0 -2
- package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/lib/feature-libraries/flex-tree/index.d.ts +3 -2
- package/lib/feature-libraries/flex-tree/index.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/index.js +2 -1
- package/lib/feature-libraries/flex-tree/index.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyEntity.d.ts +1 -2
- package/lib/feature-libraries/flex-tree/lazyEntity.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.d.ts +1 -6
- package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.js +13 -34
- package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyNode.d.ts +1 -5
- package/lib/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyNode.js +3 -33
- package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.js +1 -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 +3 -3
- package/lib/feature-libraries/index.js.map +1 -1
- package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts +11 -0
- package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
- package/lib/feature-libraries/modular-schema/discrepancies.d.ts +96 -0
- package/lib/feature-libraries/modular-schema/discrepancies.d.ts.map +1 -0
- package/lib/feature-libraries/modular-schema/discrepancies.js +260 -0
- package/lib/feature-libraries/modular-schema/discrepancies.js.map +1 -0
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +9 -2
- 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 -0
- package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
- package/lib/feature-libraries/modular-schema/index.d.ts +2 -1
- package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/index.js +1 -0
- package/lib/feature-libraries/modular-schema/index.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +42 -26
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +51 -2
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js +826 -247
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFormat.js +2 -0
- package/lib/feature-libraries/modular-schema/modularChangeFormat.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts +44 -1
- package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
- package/lib/feature-libraries/node-key/index.d.ts +0 -1
- package/lib/feature-libraries/node-key/index.d.ts.map +1 -1
- package/lib/feature-libraries/node-key/index.js +0 -1
- package/lib/feature-libraries/node-key/index.js.map +1 -1
- package/lib/feature-libraries/object-forest/objectForest.d.ts +3 -2
- package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
- package/lib/feature-libraries/object-forest/objectForest.js +5 -4
- package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
- package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
- package/lib/feature-libraries/optional-field/optionalField.js +1 -0
- package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
- package/lib/feature-libraries/sequence-field/index.d.ts +1 -1
- package/lib/feature-libraries/sequence-field/index.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/index.js +1 -1
- package/lib/feature-libraries/sequence-field/index.js.map +1 -1
- package/lib/feature-libraries/sequence-field/invert.js +1 -1
- package/lib/feature-libraries/sequence-field/invert.js.map +1 -1
- package/lib/feature-libraries/sequence-field/rebase.js +6 -1
- package/lib/feature-libraries/sequence-field/rebase.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.js +2 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.js.map +1 -1
- package/lib/feature-libraries/sequence-field/utils.d.ts +2 -17
- package/lib/feature-libraries/sequence-field/utils.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/utils.js +31 -39
- package/lib/feature-libraries/sequence-field/utils.js.map +1 -1
- package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts +1 -0
- package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +1 -1
- package/lib/feature-libraries/typed-schema/typedTreeSchema.js +4 -2
- package/lib/feature-libraries/typed-schema/typedTreeSchema.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -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/public.d.ts +1 -1
- package/lib/shared-tree/schematizingTreeView.d.ts +4 -2
- package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +242 -185
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/shared-tree/sharedTree.d.ts +5 -1
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +158 -90
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/sharedTreeChangeEnricher.js +1 -1
- package/lib/shared-tree/sharedTreeChangeEnricher.js.map +1 -1
- package/lib/shared-tree/treeApi.js +1 -1
- package/lib/shared-tree/treeApi.js.map +1 -1
- package/lib/shared-tree/treeCheckout.d.ts +10 -1
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +47 -3
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree/treeView.d.ts.map +1 -1
- package/lib/shared-tree/treeView.js +4 -0
- package/lib/shared-tree/treeView.js.map +1 -1
- package/lib/shared-tree-core/branch.d.ts +6 -0
- package/lib/shared-tree-core/branch.d.ts.map +1 -1
- package/lib/shared-tree-core/branch.js +3 -0
- package/lib/shared-tree-core/branch.js.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.d.ts +8 -6
- package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.js +273 -210
- package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/lib/simple-tree/arrayNode.d.ts +4 -0
- package/lib/simple-tree/arrayNode.d.ts.map +1 -1
- package/lib/simple-tree/arrayNode.js +39 -22
- package/lib/simple-tree/arrayNode.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 +1 -1
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/leafNodeSchema.d.ts +22 -1
- package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/leafNodeSchema.js +1 -1
- package/lib/simple-tree/leafNodeSchema.js.map +1 -1
- package/lib/simple-tree/mapNode.d.ts.map +1 -1
- 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 +3 -2
- package/lib/simple-tree/objectNode.js.map +1 -1
- package/lib/simple-tree/proxies.d.ts.map +1 -1
- package/lib/simple-tree/proxies.js +9 -25
- package/lib/simple-tree/proxies.js.map +1 -1
- package/lib/simple-tree/proxyBinding.d.ts +4 -0
- package/lib/simple-tree/proxyBinding.d.ts.map +1 -1
- package/lib/simple-tree/proxyBinding.js +19 -0
- package/lib/simple-tree/proxyBinding.js.map +1 -1
- package/lib/simple-tree/schemaFactory.d.ts +16 -1
- package/lib/simple-tree/schemaFactory.d.ts.map +1 -1
- package/lib/simple-tree/schemaFactory.js +30 -3
- package/lib/simple-tree/schemaFactory.js.map +1 -1
- package/lib/simple-tree/schemaTypes.d.ts +36 -1
- package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
- package/lib/simple-tree/schemaTypes.js.map +1 -1
- package/lib/simple-tree/toFlexSchema.d.ts +2 -2
- package/lib/simple-tree/toFlexSchema.d.ts.map +1 -1
- package/lib/simple-tree/toFlexSchema.js +3 -2
- package/lib/simple-tree/toFlexSchema.js.map +1 -1
- package/lib/simple-tree/tree.d.ts +4 -1
- package/lib/simple-tree/tree.d.ts.map +1 -1
- package/lib/simple-tree/tree.js +44 -0
- package/lib/simple-tree/tree.js.map +1 -1
- package/lib/simple-tree/treeNodeApi.d.ts +2 -75
- package/lib/simple-tree/treeNodeApi.d.ts.map +1 -1
- package/lib/simple-tree/treeNodeApi.js +20 -28
- package/lib/simple-tree/treeNodeApi.js.map +1 -1
- package/lib/simple-tree/treeNodeKernel.d.ts +26 -0
- package/lib/simple-tree/treeNodeKernel.d.ts.map +1 -0
- package/lib/simple-tree/treeNodeKernel.js +79 -0
- package/lib/simple-tree/treeNodeKernel.js.map +1 -0
- package/lib/simple-tree/types.d.ts +95 -3
- package/lib/simple-tree/types.d.ts.map +1 -1
- package/lib/simple-tree/types.js +121 -22
- package/lib/simple-tree/types.js.map +1 -1
- package/lib/util/breakable.d.ts +83 -0
- package/lib/util/breakable.d.ts.map +1 -0
- package/lib/util/breakable.js +171 -0
- package/lib/util/breakable.js.map +1 -0
- package/lib/util/index.d.ts +3 -2
- package/lib/util/index.d.ts.map +1 -1
- package/lib/util/index.js +3 -2
- package/lib/util/index.js.map +1 -1
- package/lib/util/nestedMap.d.ts +17 -3
- package/lib/util/nestedMap.d.ts.map +1 -1
- package/lib/util/nestedMap.js +19 -0
- package/lib/util/nestedMap.js.map +1 -1
- package/lib/util/utils.d.ts +7 -0
- package/lib/util/utils.d.ts.map +1 -1
- package/lib/util/utils.js +13 -0
- package/lib/util/utils.js.map +1 -1
- package/package.json +29 -27
- package/src/core/forest/editableForest.ts +25 -4
- package/src/core/index.ts +2 -0
- package/src/core/rebase/index.ts +2 -0
- package/src/core/rebase/types.ts +17 -0
- package/src/core/tree/anchorSet.ts +14 -0
- package/src/core/tree/detachedFieldIndex.ts +217 -35
- package/src/core/tree/detachedFieldIndexCodec.ts +17 -8
- package/src/core/tree/detachedFieldIndexFormat.ts +1 -1
- package/src/core/tree/detachedFieldIndexTypes.ts +41 -5
- package/src/core/tree/index.ts +2 -1
- package/src/core/tree/visitDelta.ts +58 -16
- package/src/core/tree/visitorUtils.ts +7 -4
- package/src/events/events.ts +4 -2
- package/src/feature-libraries/default-schema/defaultEditBuilder.ts +1 -1
- package/src/feature-libraries/default-schema/defaultFieldKinds.ts +1 -0
- package/src/feature-libraries/editableTreeBinder.ts +1 -1
- package/src/feature-libraries/flex-map-tree/mapTreeNode.ts +1 -95
- package/src/feature-libraries/flex-tree/flexTreeTypes.ts +0 -62
- package/src/feature-libraries/flex-tree/index.ts +7 -2
- package/src/feature-libraries/flex-tree/lazyEntity.ts +0 -3
- package/src/feature-libraries/flex-tree/lazyField.ts +15 -47
- package/src/feature-libraries/flex-tree/lazyNode.ts +1 -48
- package/src/feature-libraries/forest-summary/forestSummarizer.ts +1 -0
- package/src/feature-libraries/index.ts +4 -2
- package/src/feature-libraries/modular-schema/crossFieldQueries.ts +18 -0
- package/src/feature-libraries/modular-schema/discrepancies.ts +395 -0
- package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +10 -2
- package/src/feature-libraries/modular-schema/genericFieldKind.ts +3 -0
- package/src/feature-libraries/modular-schema/index.ts +2 -0
- package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +81 -35
- package/src/feature-libraries/modular-schema/modularChangeFamily.ts +1521 -444
- package/src/feature-libraries/modular-schema/modularChangeFormat.ts +2 -0
- package/src/feature-libraries/modular-schema/modularChangeTypes.ts +51 -0
- package/src/feature-libraries/node-key/index.ts +0 -1
- package/src/feature-libraries/object-forest/objectForest.ts +7 -3
- package/src/feature-libraries/optional-field/optionalField.ts +1 -0
- package/src/feature-libraries/sequence-field/index.ts +0 -2
- package/src/feature-libraries/sequence-field/invert.ts +1 -1
- package/src/feature-libraries/sequence-field/rebase.ts +7 -1
- package/src/feature-libraries/sequence-field/sequenceFieldChangeHandler.ts +2 -1
- package/src/feature-libraries/sequence-field/utils.ts +37 -85
- package/src/feature-libraries/typed-schema/typedTreeSchema.ts +10 -0
- package/src/index.ts +0 -1
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/schematizingTreeView.ts +6 -2
- package/src/shared-tree/sharedTree.ts +12 -1
- package/src/shared-tree/sharedTreeChangeEnricher.ts +1 -1
- package/src/shared-tree/treeApi.ts +1 -1
- package/src/shared-tree/treeCheckout.ts +60 -5
- package/src/shared-tree/treeView.ts +5 -0
- package/src/shared-tree-core/branch.ts +10 -0
- package/src/shared-tree-core/sharedTreeCore.ts +25 -6
- package/src/simple-tree/arrayNode.ts +50 -23
- package/src/simple-tree/index.ts +3 -3
- package/src/simple-tree/leafNodeSchema.ts +1 -1
- package/src/simple-tree/mapNode.ts +2 -2
- package/src/simple-tree/objectNode.ts +9 -3
- package/src/simple-tree/proxies.ts +10 -33
- package/src/simple-tree/proxyBinding.ts +23 -0
- package/src/simple-tree/schemaFactory.ts +37 -2
- package/src/simple-tree/schemaTypes.ts +36 -1
- package/src/simple-tree/toFlexSchema.ts +5 -4
- package/src/simple-tree/tree.ts +68 -4
- package/src/simple-tree/treeNodeApi.ts +29 -111
- package/src/simple-tree/treeNodeKernel.ts +91 -0
- package/src/simple-tree/types.ts +292 -31
- package/src/util/breakable.ts +214 -0
- package/src/util/index.ts +11 -0
- package/src/util/nestedMap.ts +33 -3
- package/src/util/utils.ts +17 -0
- package/dist/feature-libraries/node-key/nodeKeyIndex.d.ts +0 -41
- package/dist/feature-libraries/node-key/nodeKeyIndex.d.ts.map +0 -1
- package/dist/feature-libraries/node-key/nodeKeyIndex.js +0 -101
- package/dist/feature-libraries/node-key/nodeKeyIndex.js.map +0 -1
- package/lib/feature-libraries/node-key/nodeKeyIndex.d.ts +0 -41
- package/lib/feature-libraries/node-key/nodeKeyIndex.d.ts.map +0 -1
- package/lib/feature-libraries/node-key/nodeKeyIndex.js +0 -97
- package/lib/feature-libraries/node-key/nodeKeyIndex.js.map +0 -1
- package/src/feature-libraries/node-key/nodeKeyIndex.ts +0 -132
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"optionalField.js","sourceRoot":"","sources":["../../../src/feature-libraries/optional-field/optionalField.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/core-utils/internal\";\n\nimport {\n\ttype ChangeAtomId,\n\ttype ChangeAtomIdMap,\n\ttype ChangesetLocalId,\n\ttype DeltaDetachedNodeChanges,\n\ttype DeltaDetachedNodeId,\n\ttype DeltaFieldChanges,\n\ttype DeltaMark,\n\ttype RevisionTag,\n\tareEqualChangeAtomIds,\n\tmakeChangeAtomId,\n\treplaceAtomRevisions,\n\ttaggedAtomId,\n} from \"../../core/index.js\";\nimport {\n\ttype IdAllocator,\n\ttype Mutable,\n\tSizedNestedMap,\n\tdeleteFromNestedMap,\n\tsetInNestedMap,\n\ttryGetFromNestedMap,\n} from \"../../util/index.js\";\nimport { nodeIdFromChangeAtom } from \"../deltaUtils.js\";\nimport {\n\ttype FieldChangeHandler,\n\ttype FieldChangeRebaser,\n\ttype FieldEditor,\n\ttype NodeChangeComposer,\n\ttype NodeChangePruner,\n\ttype NodeChangeRebaser,\n\tNodeAttachState,\n\ttype NodeId,\n\ttype RelevantRemovedRootsFromChild,\n\ttype ToDelta,\n} from \"../modular-schema/index.js\";\n\nimport type {\n\tChildChange,\n\tMove,\n\tOptionalChangeset,\n\tRegisterId,\n\tReplace,\n} from \"./optionalFieldChangeTypes.js\";\nimport { makeOptionalFieldCodecFamily } from \"./optionalFieldCodecs.js\";\n\nexport interface IRegisterMap<T> {\n\tset(id: RegisterId, childChange: T): void;\n\tget(id: RegisterId): T | undefined;\n\tdelete(id: RegisterId): boolean;\n\tkeys(): Iterable<RegisterId>;\n\tvalues(): Iterable<T>;\n\tentries(): Iterable<[RegisterId, T]>;\n\treadonly size: number;\n}\n\nexport class RegisterMap<T> implements IRegisterMap<T> {\n\tprivate readonly nestedMapData = new SizedNestedMap<\n\t\tChangesetLocalId | \"self\",\n\t\tRevisionTag | undefined,\n\t\tT\n\t>();\n\n\tpublic clone(): RegisterMap<T> {\n\t\tconst clone = new RegisterMap<T>();\n\t\tfor (const [id, t] of this.entries()) {\n\t\t\tclone.set(id, t);\n\t\t}\n\t\treturn clone;\n\t}\n\n\tpublic set(id: RegisterId, childChange: T): void {\n\t\tif (id === \"self\") {\n\t\t\tthis.nestedMapData.set(\"self\", undefined, childChange);\n\t\t} else {\n\t\t\tthis.nestedMapData.set(id.localId, id.revision, childChange);\n\t\t}\n\t}\n\n\tpublic get(id: RegisterId): T | undefined {\n\t\treturn id === \"self\"\n\t\t\t? this.nestedMapData.tryGet(id, undefined)\n\t\t\t: this.nestedMapData.tryGet(id.localId, id.revision);\n\t}\n\n\tpublic has(id: RegisterId): boolean {\n\t\treturn this.get(id) !== undefined;\n\t}\n\n\tpublic delete(id: RegisterId): boolean {\n\t\treturn id === \"self\"\n\t\t\t? this.nestedMapData.delete(\"self\", undefined)\n\t\t\t: this.nestedMapData.delete(id.localId, id.revision);\n\t}\n\n\tpublic keys(): Iterable<RegisterId> {\n\t\tconst changeIds: RegisterId[] = [];\n\t\tfor (const [localId, nestedMap] of this.nestedMapData) {\n\t\t\tif (localId === \"self\") {\n\t\t\t\tchangeIds.push(\"self\");\n\t\t\t} else {\n\t\t\t\tfor (const [revisionTag, _] of nestedMap) {\n\t\t\t\t\tchangeIds.push(\n\t\t\t\t\t\trevisionTag === undefined ? { localId } : { localId, revision: revisionTag },\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn changeIds;\n\t}\n\tpublic values(): Iterable<T> {\n\t\treturn this.nestedMapData.values();\n\t}\n\tpublic entries(): Iterable<[RegisterId, T]> {\n\t\tconst entries: [RegisterId, T][] = [];\n\t\tfor (const changeId of this.keys()) {\n\t\t\tif (changeId === \"self\") {\n\t\t\t\tconst entry = this.nestedMapData.tryGet(\"self\", undefined);\n\t\t\t\tassert(\n\t\t\t\t\tentry !== undefined,\n\t\t\t\t\t0x770 /* Entry should not be undefined when iterating keys. */,\n\t\t\t\t);\n\t\t\t\tentries.push([\"self\", entry]);\n\t\t\t} else {\n\t\t\t\tconst entry = this.nestedMapData.tryGet(changeId.localId, changeId.revision);\n\t\t\t\tassert(\n\t\t\t\t\tentry !== undefined,\n\t\t\t\t\t0x771 /* Entry should not be undefined when iterating keys. */,\n\t\t\t\t);\n\t\t\t\tentries.push([changeId, entry]);\n\t\t\t}\n\t\t}\n\n\t\treturn entries;\n\t}\n\tpublic get size(): number {\n\t\treturn this.nestedMapData.size;\n\t}\n}\n\nexport const optionalChangeRebaser: FieldChangeRebaser<OptionalChangeset> = {\n\tcompose: (\n\t\tchange1: OptionalChangeset,\n\t\tchange2: OptionalChangeset,\n\t\tcomposeChild: NodeChangeComposer,\n\t): OptionalChangeset => {\n\t\tconst { srcToDst, dstToSrc } = getBidirectionalMaps(change1.moves);\n\t\tconst change1FieldSrc = change1.valueReplace?.src;\n\t\tconst change1FieldDst = getEffectfulDst(change1.valueReplace);\n\n\t\tconst change2FieldSrc = change2.valueReplace?.src;\n\t\tlet composedFieldSrc: RegisterId | undefined;\n\t\tif (change2FieldSrc !== undefined) {\n\t\t\tif (change2FieldSrc === \"self\") {\n\t\t\t\tcomposedFieldSrc = change1FieldSrc ?? change2FieldSrc;\n\t\t\t} else if (\n\t\t\t\tchange1FieldDst !== undefined &&\n\t\t\t\tareEqualRegisterIds(change1FieldDst, change2FieldSrc)\n\t\t\t) {\n\t\t\t\tcomposedFieldSrc = \"self\";\n\t\t\t} else {\n\t\t\t\tcomposedFieldSrc =\n\t\t\t\t\ttryGetFromNestedMap(dstToSrc, change2FieldSrc.revision, change2FieldSrc.localId) ??\n\t\t\t\t\tchange2FieldSrc;\n\t\t\t}\n\t\t} else if (change1FieldSrc !== undefined && change2.valueReplace === undefined) {\n\t\t\tcomposedFieldSrc = change1FieldSrc;\n\t\t}\n\n\t\tconst childChanges2ByOriginalId = new RegisterMap<NodeId>();\n\t\tfor (const [id, change] of change2.childChanges) {\n\t\t\tif (id === \"self\") {\n\t\t\t\tif (change1FieldSrc !== undefined) {\n\t\t\t\t\tchildChanges2ByOriginalId.set(change1FieldSrc, change);\n\t\t\t\t} else {\n\t\t\t\t\tchildChanges2ByOriginalId.set(\"self\", change);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (change1FieldDst !== undefined && areEqualChangeAtomIds(change1FieldDst, id)) {\n\t\t\t\t\tchildChanges2ByOriginalId.set(\"self\", change);\n\t\t\t\t} else {\n\t\t\t\t\tconst originalId = tryGetFromNestedMap(dstToSrc, id.revision, id.localId);\n\t\t\t\t\tchildChanges2ByOriginalId.set(originalId ?? id, change);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst composedMoves: Move[] = [];\n\t\tconst composedChildChanges: ChildChange[] = [];\n\t\tconst composed: Mutable<OptionalChangeset> = {\n\t\t\tmoves: composedMoves,\n\t\t\tchildChanges: composedChildChanges,\n\t\t};\n\n\t\tfor (const [id, childChange1] of change1.childChanges) {\n\t\t\tconst childChange2 = childChanges2ByOriginalId.get(id);\n\t\t\tcomposedChildChanges.push([id, composeChild(childChange1, childChange2)]);\n\t\t\tchildChanges2ByOriginalId.delete(id);\n\t\t}\n\n\t\tfor (const [id, childChange2] of childChanges2ByOriginalId.entries()) {\n\t\t\tcomposedChildChanges.push([id, composeChild(undefined, childChange2)]);\n\t\t}\n\n\t\tfor (const [leg2Src, leg2Dst] of change2.moves) {\n\t\t\tconst leg1Src = tryGetFromNestedMap(dstToSrc, leg2Src.revision, leg2Src.localId);\n\t\t\tif (leg1Src !== undefined) {\n\t\t\t\tcomposedMoves.push([leg1Src, leg2Dst]);\n\t\t\t\tdeleteFromNestedMap(srcToDst, leg1Src.revision, leg1Src.localId);\n\t\t\t\tdeleteFromNestedMap(dstToSrc, leg2Src.revision, leg2Src.localId);\n\t\t\t} else if (\n\t\t\t\tchange1FieldDst === undefined ||\n\t\t\t\t!areEqualChangeAtomIds(change1FieldDst, leg2Src)\n\t\t\t) {\n\t\t\t\tcomposedMoves.push([leg2Src, leg2Dst]);\n\t\t\t}\n\t\t}\n\n\t\tfor (const [revision, innerMap] of srcToDst.entries()) {\n\t\t\tfor (const [localId, dst] of innerMap.entries()) {\n\t\t\t\tconst src = makeChangeAtomId(localId, revision);\n\t\t\t\tif (composedFieldSrc === undefined || !areEqualRegisterIds(src, composedFieldSrc)) {\n\t\t\t\t\tcomposedMoves.push([src, dst]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\tchange1FieldSrc !== undefined &&\n\t\t\tchange1FieldSrc !== \"self\" &&\n\t\t\tchange2.valueReplace !== undefined\n\t\t) {\n\t\t\tconst change2FieldDst = change2.valueReplace.dst;\n\t\t\tif (\n\t\t\t\tisReplaceEffectful(change2.valueReplace) &&\n\t\t\t\t!areEqualChangeAtomIds(change1FieldSrc, change2FieldDst)\n\t\t\t) {\n\t\t\t\tcomposedMoves.push([change1FieldSrc, change2FieldDst]);\n\t\t\t}\n\t\t}\n\n\t\tconst firstChange = change1.valueReplace ?? change2.valueReplace;\n\t\tif (firstChange === undefined) {\n\t\t\treturn composed;\n\t\t}\n\n\t\tconst replace: Mutable<Replace> = {\n\t\t\tisEmpty: firstChange.isEmpty,\n\t\t\tdst: getComposedReplaceDst(change1.valueReplace, change2),\n\t\t};\n\t\tif (composedFieldSrc !== undefined) {\n\t\t\treplace.src = composedFieldSrc;\n\t\t}\n\t\tcomposed.valueReplace = replace;\n\t\treturn composed;\n\t},\n\n\tinvert: (\n\t\tchange: OptionalChangeset,\n\t\tisRollback: boolean,\n\t\tgenId: IdAllocator<ChangesetLocalId>,\n\t): OptionalChangeset => {\n\t\tconst { moves, childChanges } = change;\n\n\t\tconst invertIdMap = new RegisterMap<RegisterId>();\n\t\tconst invertedMoves: Move[] = [];\n\t\tfor (const [src, dst] of moves) {\n\t\t\tinvertIdMap.set(src, dst);\n\t\t\tinvertedMoves.push([dst, src]);\n\t\t}\n\t\tif (change.valueReplace !== undefined) {\n\t\t\tconst effectfulDst = getEffectfulDst(change.valueReplace);\n\t\t\tif (effectfulDst !== undefined) {\n\t\t\t\tinvertIdMap.set(\"self\", change.valueReplace.dst);\n\t\t\t}\n\t\t\tif (change.valueReplace.src !== undefined) {\n\t\t\t\tinvertIdMap.set(change.valueReplace.src, \"self\");\n\t\t\t}\n\t\t}\n\n\t\tconst inverted: Mutable<OptionalChangeset> = {\n\t\t\tmoves: invertedMoves,\n\t\t\tchildChanges: childChanges.map(([id, childChange]) => {\n\t\t\t\treturn [invertIdMap.get(id) ?? id, childChange];\n\t\t\t}),\n\t\t};\n\n\t\tif (change.valueReplace !== undefined) {\n\t\t\tif (isReplaceEffectful(change.valueReplace)) {\n\t\t\t\tconst replace: Mutable<Replace> =\n\t\t\t\t\tchange.valueReplace.src === undefined\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tisEmpty: true,\n\t\t\t\t\t\t\t\tdst: makeChangeAtomId(genId.allocate()),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tisEmpty: false,\n\t\t\t\t\t\t\t\tdst: isRollback ? change.valueReplace.src : makeChangeAtomId(genId.allocate()),\n\t\t\t\t\t\t\t};\n\t\t\t\tif (change.valueReplace.isEmpty === false) {\n\t\t\t\t\treplace.src = change.valueReplace.dst;\n\t\t\t\t}\n\t\t\t\tinverted.valueReplace = replace;\n\t\t\t} else if (!isRollback && change.valueReplace.src === \"self\") {\n\t\t\t\tinverted.valueReplace = {\n\t\t\t\t\tisEmpty: false,\n\t\t\t\t\tsrc: \"self\",\n\t\t\t\t\tdst: makeChangeAtomId(genId.allocate()),\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\treturn inverted;\n\t},\n\n\trebase: (\n\t\tchange: OptionalChangeset,\n\t\toverChange: OptionalChangeset,\n\t\trebaseChild: NodeChangeRebaser,\n\t): OptionalChangeset => {\n\t\tconst { moves, childChanges, valueReplace: field } = change;\n\n\t\t// TODO: avoid computing the dstToSrc map if it's not needed.\n\t\t// TODO: de-dupe overSrcToDst and forwardMap\n\t\tconst { srcToDst: overSrcToDst } = getBidirectionalMaps(overChange.moves);\n\n\t\tconst forwardMap = new RegisterMap<RegisterId>();\n\t\tfor (const [src, dst] of overChange.moves) {\n\t\t\tforwardMap.set(src, dst);\n\t\t}\n\t\tif (overChange.valueReplace !== undefined) {\n\t\t\tconst effectfulDst = getEffectfulDst(overChange.valueReplace);\n\t\t\tif (effectfulDst !== undefined) {\n\t\t\t\tforwardMap.set(\"self\", overChange.valueReplace.dst);\n\t\t\t}\n\t\t\tif (overChange.valueReplace.src !== undefined) {\n\t\t\t\tforwardMap.set(overChange.valueReplace.src, \"self\");\n\t\t\t}\n\t\t}\n\n\t\tconst rebasedMoves: Move[] = [];\n\t\tfor (const [src, dst] of moves) {\n\t\t\tconst newDst = tryGetFromNestedMap(overSrcToDst, src.revision, src.localId);\n\t\t\trebasedMoves.push([src, newDst ?? dst]);\n\t\t}\n\n\t\tconst overChildChangesBySrc = new RegisterMap<NodeId>();\n\t\tfor (const [id, childChange] of overChange.childChanges) {\n\t\t\toverChildChangesBySrc.set(id, childChange);\n\t\t}\n\n\t\tconst rebasedChildChanges: ChildChange[] = [];\n\t\tfor (const [id, childChange] of childChanges) {\n\t\t\tconst overChildChange = overChildChangesBySrc.get(id);\n\t\t\tif (overChildChange !== undefined) {\n\t\t\t\toverChildChangesBySrc.delete(id);\n\t\t\t}\n\n\t\t\tconst rebasedId = forwardMap.get(id) ?? id;\n\t\t\tconst rebasedChildChange = rebaseChild(\n\t\t\t\tchildChange,\n\t\t\t\toverChildChange,\n\t\t\t\trebasedId === \"self\" ? NodeAttachState.Attached : NodeAttachState.Detached,\n\t\t\t);\n\t\t\tif (rebasedChildChange !== undefined) {\n\t\t\t\trebasedChildChanges.push([rebasedId, rebasedChildChange]);\n\t\t\t}\n\t\t}\n\n\t\tfor (const [id, overChildChange] of overChildChangesBySrc.entries()) {\n\t\t\tconst rebasedId = forwardMap.get(id) ?? id;\n\t\t\tconst rebasedChildChange = rebaseChild(\n\t\t\t\tundefined,\n\t\t\t\toverChildChange,\n\t\t\t\trebasedId === \"self\" ? NodeAttachState.Attached : NodeAttachState.Detached,\n\t\t\t);\n\t\t\tif (rebasedChildChange !== undefined) {\n\t\t\t\trebasedChildChanges.push([rebasedId, rebasedChildChange]);\n\t\t\t}\n\t\t}\n\n\t\tconst rebased: Mutable<OptionalChangeset> = {\n\t\t\tmoves: rebasedMoves,\n\t\t\tchildChanges: rebasedChildChanges,\n\t\t};\n\n\t\tif (field !== undefined) {\n\t\t\tconst replace: Mutable<Replace> = {\n\t\t\t\tisEmpty:\n\t\t\t\t\toverChange.valueReplace === undefined\n\t\t\t\t\t\t? field.isEmpty\n\t\t\t\t\t\t: overChange.valueReplace.src === undefined,\n\t\t\t\tdst: field.dst,\n\t\t\t};\n\t\t\tif (field.src !== undefined) {\n\t\t\t\treplace.src = forwardMap.get(field.src) ?? field.src;\n\t\t\t}\n\t\t\trebased.valueReplace = replace;\n\t\t}\n\n\t\treturn rebased;\n\t},\n\n\tprune: (change: OptionalChangeset, pruneChild: NodeChangePruner): OptionalChangeset => {\n\t\tconst childChanges: ChildChange[] = [];\n\t\tconst prunedChange: Mutable<OptionalChangeset> = {\n\t\t\tmoves: change.moves,\n\t\t\tchildChanges,\n\t\t};\n\t\tif (change.valueReplace !== undefined) {\n\t\t\tprunedChange.valueReplace = change.valueReplace;\n\t\t}\n\n\t\tfor (const [id, childChange] of change.childChanges) {\n\t\t\tconst prunedChildChange = pruneChild(childChange);\n\t\t\tif (prunedChildChange !== undefined) {\n\t\t\t\tchildChanges.push([id, prunedChildChange]);\n\t\t\t}\n\t\t}\n\n\t\treturn prunedChange;\n\t},\n\n\treplaceRevisions: (\n\t\tchange: OptionalChangeset,\n\t\toldRevisions: Set<RevisionTag | undefined>,\n\t\tnewRevision: RevisionTag | undefined,\n\t): OptionalChangeset => {\n\t\tconst valueReplace = replaceReplaceRevisions(\n\t\t\tchange.valueReplace,\n\t\t\toldRevisions,\n\t\t\tnewRevision,\n\t\t);\n\n\t\tconst childChanges: ChildChange[] = [];\n\t\tfor (const [id, childChange] of change.childChanges) {\n\t\t\tchildChanges.push([\n\t\t\t\treplaceRegisterRevisions(id, oldRevisions, newRevision),\n\t\t\t\treplaceAtomRevisions(childChange, oldRevisions, newRevision),\n\t\t\t]);\n\t\t}\n\n\t\tconst moves: Move[] = [];\n\t\tfor (const [src, dst] of change.moves) {\n\t\t\tmoves.push([\n\t\t\t\treplaceAtomRevisions(src, oldRevisions, newRevision),\n\t\t\t\treplaceAtomRevisions(dst, oldRevisions, newRevision),\n\t\t\t]);\n\t\t}\n\n\t\tconst updated: Mutable<OptionalChangeset> = { childChanges, moves };\n\t\tif (valueReplace !== undefined) {\n\t\t\tupdated.valueReplace = valueReplace;\n\t\t}\n\n\t\treturn updated;\n\t},\n};\n\nfunction replaceReplaceRevisions(\n\treplace: Replace | undefined,\n\toldRevisions: Set<RevisionTag | undefined>,\n\tnewRevision: RevisionTag | undefined,\n): Replace | undefined {\n\tif (replace === undefined) {\n\t\treturn undefined;\n\t}\n\n\tconst updated: Mutable<Replace> = {\n\t\t...replace,\n\t\tdst: replaceAtomRevisions(replace.dst, oldRevisions, newRevision),\n\t};\n\n\tif (replace.src !== undefined) {\n\t\tupdated.src = replaceRegisterRevisions(replace.src, oldRevisions, newRevision);\n\t}\n\n\treturn updated;\n}\n\nfunction replaceRegisterRevisions(\n\tregister: RegisterId,\n\toldRevisions: Set<RevisionTag | undefined>,\n\tnewRevision: RevisionTag | undefined,\n): RegisterId {\n\treturn register === \"self\"\n\t\t? register\n\t\t: replaceAtomRevisions(register, oldRevisions, newRevision);\n}\n\nfunction getComposedReplaceDst(\n\tchange1: Replace | undefined,\n\tchange2: OptionalChangeset,\n): ChangeAtomId {\n\tconst dst1 = change1?.dst;\n\tif (change2.valueReplace === undefined) {\n\t\tassert(dst1 !== undefined, 0x8ce /* Both replace replaces should not be undefined */);\n\t\treturn getIdAfterMoves(dst1, change2.moves);\n\t}\n\n\tif (\n\t\tdst1 === undefined ||\n\t\tchange1?.src === \"self\" ||\n\t\t(change2.valueReplace.src !== undefined &&\n\t\t\tareEqualRegisterIds(change2.valueReplace.src, dst1))\n\t) {\n\t\tassert(\n\t\t\tchange2.valueReplace !== undefined,\n\t\t\t0x8cf /* Both replace replaces should not be undefined */,\n\t\t);\n\t\treturn change2.valueReplace.dst;\n\t} else {\n\t\treturn getIdAfterMoves(dst1, change2.moves);\n\t}\n}\n\nfunction getIdAfterMoves(id: ChangeAtomId, moves: readonly Move[]): ChangeAtomId {\n\tfor (const [src, dst] of moves) {\n\t\tif (areEqualChangeAtomIds(id, src)) {\n\t\t\treturn dst;\n\t\t}\n\t}\n\treturn id;\n}\n\nfunction areEqualRegisterIds(id1: RegisterId, id2: RegisterId): boolean {\n\treturn id1 === \"self\" || id2 === \"self\" ? id1 === id2 : areEqualChangeAtomIds(id1, id2);\n}\n\nfunction getBidirectionalMaps(moves: OptionalChangeset[\"moves\"]): {\n\tsrcToDst: ChangeAtomIdMap<ChangeAtomId>;\n\tdstToSrc: ChangeAtomIdMap<ChangeAtomId>;\n} {\n\tconst srcToDst: ChangeAtomIdMap<ChangeAtomId> = new Map();\n\tconst dstToSrc: ChangeAtomIdMap<ChangeAtomId> = new Map();\n\tfor (const [src, dst] of moves) {\n\t\tsetInNestedMap(srcToDst, src.revision, src.localId, dst);\n\t\tsetInNestedMap(dstToSrc, dst.revision, dst.localId, src);\n\t}\n\treturn { srcToDst, dstToSrc };\n}\n\ntype EffectfulReplace =\n\t| {\n\t\t\tisEmpty: true;\n\t\t\tsrc?: ChangeAtomId;\n\t\t\tdst: ChangeAtomId;\n\t }\n\t| {\n\t\t\tisEmpty: boolean;\n\t\t\tsrc: ChangeAtomId;\n\t\t\tdst: ChangeAtomId;\n\t };\n\nfunction isReplaceEffectful(replace: Replace): replace is EffectfulReplace {\n\tif (replace.src === \"self\") {\n\t\treturn false;\n\t}\n\treturn !replace.isEmpty || replace.src !== undefined;\n}\n\nfunction getEffectfulDst(replace: Replace | undefined): ChangeAtomId | undefined {\n\treturn replace === undefined || replace.isEmpty || replace.src === \"self\"\n\t\t? undefined\n\t\t: replace.dst;\n}\n\nexport function taggedRegister(id: RegisterId, revision: RevisionTag | undefined): RegisterId {\n\tif (id === \"self\") {\n\t\treturn id;\n\t}\n\n\treturn taggedAtomId(id, revision);\n}\n\nexport interface OptionalFieldEditor extends FieldEditor<OptionalChangeset> {\n\t/**\n\t * Creates a change which replaces the field with `newContent`\n\t * @param newContent - the new content for the field\n\t * @param wasEmpty - whether the field is empty when creating this change\n\t * @param changeId - the ID associated with the replacement of the current content.\n\t * @param buildId - the ID associated with the creation of the `newContent`.\n\t */\n\tset(\n\t\twasEmpty: boolean,\n\t\tids: {\n\t\t\tfill: ChangesetLocalId;\n\t\t\tdetach: ChangesetLocalId;\n\t\t},\n\t): OptionalChangeset;\n\n\t/**\n\t * Creates a change which clears the field's contents (if any).\n\t * @param wasEmpty - whether the field is empty when creating this change\n\t * @param changeId - the ID associated with the detach.\n\t */\n\tclear(wasEmpty: boolean, id: ChangesetLocalId): OptionalChangeset;\n}\n\nexport const optionalFieldEditor: OptionalFieldEditor = {\n\tset: (\n\t\twasEmpty: boolean,\n\t\tids: {\n\t\t\tfill: ChangesetLocalId;\n\t\t\t// Should be interpreted as a set of an empty field if undefined.\n\t\t\tdetach: ChangesetLocalId;\n\t\t},\n\t): OptionalChangeset => ({\n\t\tmoves: [],\n\t\tchildChanges: [],\n\t\tvalueReplace: {\n\t\t\tisEmpty: wasEmpty,\n\t\t\tsrc: { localId: ids.fill },\n\t\t\tdst: { localId: ids.detach },\n\t\t},\n\t}),\n\n\tclear: (wasEmpty: boolean, detachId: ChangesetLocalId): OptionalChangeset => ({\n\t\tmoves: [],\n\t\tchildChanges: [],\n\t\tvalueReplace: {\n\t\t\tisEmpty: wasEmpty,\n\t\t\tdst: { localId: detachId },\n\t\t},\n\t}),\n\n\tbuildChildChange: (index: number, childChange: NodeId): OptionalChangeset => {\n\t\tassert(index === 0, 0x404 /* Optional fields only support a single child node */);\n\t\treturn {\n\t\t\tmoves: [],\n\t\t\tchildChanges: [[\"self\", childChange]],\n\t\t};\n\t},\n};\n\nexport function optionalFieldIntoDelta(\n\tchange: OptionalChangeset,\n\tdeltaFromChild: ToDelta,\n): DeltaFieldChanges {\n\tconst delta: Mutable<DeltaFieldChanges> = {};\n\n\tlet markIsANoop = true;\n\tconst mark: Mutable<DeltaMark> = { count: 1 };\n\n\tif (change.valueReplace !== undefined && isReplaceEffectful(change.valueReplace)) {\n\t\tif (!change.valueReplace.isEmpty) {\n\t\t\tmark.detach = nodeIdFromChangeAtom(change.valueReplace.dst);\n\t\t}\n\t\tif (change.valueReplace.src !== undefined) {\n\t\t\tmark.attach = nodeIdFromChangeAtom(change.valueReplace.src);\n\t\t}\n\t\tmarkIsANoop = false;\n\t}\n\n\tif (change.moves.length > 0) {\n\t\tdelta.rename = change.moves.map(([src, dst]) => ({\n\t\t\tcount: 1,\n\t\t\toldId: nodeIdFromChangeAtom(src),\n\t\t\tnewId: nodeIdFromChangeAtom(dst),\n\t\t}));\n\t}\n\n\tif (change.childChanges.length > 0) {\n\t\tconst globals: DeltaDetachedNodeChanges[] = [];\n\t\tfor (const [id, childChange] of change.childChanges) {\n\t\t\tconst childDelta = deltaFromChild(childChange);\n\t\t\tif (id !== \"self\") {\n\t\t\t\tconst fields = childDelta;\n\t\t\t\tglobals.push({\n\t\t\t\t\tid: { major: id.revision, minor: id.localId },\n\t\t\t\t\tfields,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tmark.fields = childDelta;\n\t\t\t\tmarkIsANoop = false;\n\t\t\t}\n\t\t}\n\n\t\tif (globals.length > 0) {\n\t\t\tdelta.global = globals;\n\t\t}\n\t}\n\n\tif (!markIsANoop) {\n\t\tdelta.local = [mark];\n\t}\n\n\treturn delta;\n}\n\nexport const optionalChangeHandler: FieldChangeHandler<\n\tOptionalChangeset,\n\tOptionalFieldEditor\n> = {\n\trebaser: optionalChangeRebaser,\n\tcodecsFactory: makeOptionalFieldCodecFamily,\n\teditor: optionalFieldEditor,\n\n\tintoDelta: optionalFieldIntoDelta,\n\trelevantRemovedRoots,\n\n\tisEmpty: (change: OptionalChangeset) =>\n\t\tchange.childChanges.length === 0 &&\n\t\tchange.moves.length === 0 &&\n\t\tchange.valueReplace === undefined,\n\n\tgetNestedChanges,\n\n\tcreateEmpty: () => ({ moves: [], childChanges: [] }),\n};\n\nfunction getNestedChanges(change: OptionalChangeset): [NodeId, number | undefined][] {\n\treturn change.childChanges.map(([register, nodeId]) => [\n\t\tnodeId,\n\t\tregister === \"self\" ? 0 : undefined,\n\t]);\n}\n\nfunction* relevantRemovedRoots(\n\tchange: OptionalChangeset,\n\trelevantRemovedRootsFromChild: RelevantRemovedRootsFromChild,\n): Iterable<DeltaDetachedNodeId> {\n\tconst alreadyYielded = new RegisterMap<boolean>();\n\n\tfor (const [src] of change.moves) {\n\t\tif (!alreadyYielded.has(src)) {\n\t\t\talreadyYielded.set(src, true);\n\t\t\tyield nodeIdFromChangeAtom(src);\n\t\t}\n\t}\n\n\tfor (const [id, childChange] of change.childChanges) {\n\t\t// Child changes make the tree they apply to relevant unless that tree existed in the starting context of\n\t\t// of this change.\n\t\tif (id !== \"self\" && !alreadyYielded.has(id)) {\n\t\t\talreadyYielded.set(id, true);\n\t\t\tyield nodeIdFromChangeAtom(id);\n\t\t}\n\t\tyield* relevantRemovedRootsFromChild(childChange);\n\t}\n\n\tconst selfSrc = change.valueReplace?.src;\n\tif (selfSrc !== undefined && selfSrc !== \"self\" && !alreadyYielded.has(selfSrc)) {\n\t\tyield nodeIdFromChangeAtom(selfSrc);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"optionalField.js","sourceRoot":"","sources":["../../../src/feature-libraries/optional-field/optionalField.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/core-utils/internal\";\n\nimport {\n\ttype ChangeAtomId,\n\ttype ChangeAtomIdMap,\n\ttype ChangesetLocalId,\n\ttype DeltaDetachedNodeChanges,\n\ttype DeltaDetachedNodeId,\n\ttype DeltaFieldChanges,\n\ttype DeltaMark,\n\ttype RevisionTag,\n\tareEqualChangeAtomIds,\n\tmakeChangeAtomId,\n\treplaceAtomRevisions,\n\ttaggedAtomId,\n} from \"../../core/index.js\";\nimport {\n\ttype IdAllocator,\n\ttype Mutable,\n\tSizedNestedMap,\n\tdeleteFromNestedMap,\n\tsetInNestedMap,\n\ttryGetFromNestedMap,\n} from \"../../util/index.js\";\nimport { nodeIdFromChangeAtom } from \"../deltaUtils.js\";\nimport {\n\ttype FieldChangeHandler,\n\ttype FieldChangeRebaser,\n\ttype FieldEditor,\n\ttype NodeChangeComposer,\n\ttype NodeChangePruner,\n\ttype NodeChangeRebaser,\n\tNodeAttachState,\n\ttype NodeId,\n\ttype RelevantRemovedRootsFromChild,\n\ttype ToDelta,\n} from \"../modular-schema/index.js\";\n\nimport type {\n\tChildChange,\n\tMove,\n\tOptionalChangeset,\n\tRegisterId,\n\tReplace,\n} from \"./optionalFieldChangeTypes.js\";\nimport { makeOptionalFieldCodecFamily } from \"./optionalFieldCodecs.js\";\n\nexport interface IRegisterMap<T> {\n\tset(id: RegisterId, childChange: T): void;\n\tget(id: RegisterId): T | undefined;\n\tdelete(id: RegisterId): boolean;\n\tkeys(): Iterable<RegisterId>;\n\tvalues(): Iterable<T>;\n\tentries(): Iterable<[RegisterId, T]>;\n\treadonly size: number;\n}\n\nexport class RegisterMap<T> implements IRegisterMap<T> {\n\tprivate readonly nestedMapData = new SizedNestedMap<\n\t\tChangesetLocalId | \"self\",\n\t\tRevisionTag | undefined,\n\t\tT\n\t>();\n\n\tpublic clone(): RegisterMap<T> {\n\t\tconst clone = new RegisterMap<T>();\n\t\tfor (const [id, t] of this.entries()) {\n\t\t\tclone.set(id, t);\n\t\t}\n\t\treturn clone;\n\t}\n\n\tpublic set(id: RegisterId, childChange: T): void {\n\t\tif (id === \"self\") {\n\t\t\tthis.nestedMapData.set(\"self\", undefined, childChange);\n\t\t} else {\n\t\t\tthis.nestedMapData.set(id.localId, id.revision, childChange);\n\t\t}\n\t}\n\n\tpublic get(id: RegisterId): T | undefined {\n\t\treturn id === \"self\"\n\t\t\t? this.nestedMapData.tryGet(id, undefined)\n\t\t\t: this.nestedMapData.tryGet(id.localId, id.revision);\n\t}\n\n\tpublic has(id: RegisterId): boolean {\n\t\treturn this.get(id) !== undefined;\n\t}\n\n\tpublic delete(id: RegisterId): boolean {\n\t\treturn id === \"self\"\n\t\t\t? this.nestedMapData.delete(\"self\", undefined)\n\t\t\t: this.nestedMapData.delete(id.localId, id.revision);\n\t}\n\n\tpublic keys(): Iterable<RegisterId> {\n\t\tconst changeIds: RegisterId[] = [];\n\t\tfor (const [localId, nestedMap] of this.nestedMapData) {\n\t\t\tif (localId === \"self\") {\n\t\t\t\tchangeIds.push(\"self\");\n\t\t\t} else {\n\t\t\t\tfor (const [revisionTag, _] of nestedMap) {\n\t\t\t\t\tchangeIds.push(\n\t\t\t\t\t\trevisionTag === undefined ? { localId } : { localId, revision: revisionTag },\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn changeIds;\n\t}\n\tpublic values(): Iterable<T> {\n\t\treturn this.nestedMapData.values();\n\t}\n\tpublic entries(): Iterable<[RegisterId, T]> {\n\t\tconst entries: [RegisterId, T][] = [];\n\t\tfor (const changeId of this.keys()) {\n\t\t\tif (changeId === \"self\") {\n\t\t\t\tconst entry = this.nestedMapData.tryGet(\"self\", undefined);\n\t\t\t\tassert(\n\t\t\t\t\tentry !== undefined,\n\t\t\t\t\t0x770 /* Entry should not be undefined when iterating keys. */,\n\t\t\t\t);\n\t\t\t\tentries.push([\"self\", entry]);\n\t\t\t} else {\n\t\t\t\tconst entry = this.nestedMapData.tryGet(changeId.localId, changeId.revision);\n\t\t\t\tassert(\n\t\t\t\t\tentry !== undefined,\n\t\t\t\t\t0x771 /* Entry should not be undefined when iterating keys. */,\n\t\t\t\t);\n\t\t\t\tentries.push([changeId, entry]);\n\t\t\t}\n\t\t}\n\n\t\treturn entries;\n\t}\n\tpublic get size(): number {\n\t\treturn this.nestedMapData.size;\n\t}\n}\n\nexport const optionalChangeRebaser: FieldChangeRebaser<OptionalChangeset> = {\n\tcompose: (\n\t\tchange1: OptionalChangeset,\n\t\tchange2: OptionalChangeset,\n\t\tcomposeChild: NodeChangeComposer,\n\t): OptionalChangeset => {\n\t\tconst { srcToDst, dstToSrc } = getBidirectionalMaps(change1.moves);\n\t\tconst change1FieldSrc = change1.valueReplace?.src;\n\t\tconst change1FieldDst = getEffectfulDst(change1.valueReplace);\n\n\t\tconst change2FieldSrc = change2.valueReplace?.src;\n\t\tlet composedFieldSrc: RegisterId | undefined;\n\t\tif (change2FieldSrc !== undefined) {\n\t\t\tif (change2FieldSrc === \"self\") {\n\t\t\t\tcomposedFieldSrc = change1FieldSrc ?? change2FieldSrc;\n\t\t\t} else if (\n\t\t\t\tchange1FieldDst !== undefined &&\n\t\t\t\tareEqualRegisterIds(change1FieldDst, change2FieldSrc)\n\t\t\t) {\n\t\t\t\tcomposedFieldSrc = \"self\";\n\t\t\t} else {\n\t\t\t\tcomposedFieldSrc =\n\t\t\t\t\ttryGetFromNestedMap(dstToSrc, change2FieldSrc.revision, change2FieldSrc.localId) ??\n\t\t\t\t\tchange2FieldSrc;\n\t\t\t}\n\t\t} else if (change1FieldSrc !== undefined && change2.valueReplace === undefined) {\n\t\t\tcomposedFieldSrc = change1FieldSrc;\n\t\t}\n\n\t\tconst childChanges2ByOriginalId = new RegisterMap<NodeId>();\n\t\tfor (const [id, change] of change2.childChanges) {\n\t\t\tif (id === \"self\") {\n\t\t\t\tif (change1FieldSrc !== undefined) {\n\t\t\t\t\tchildChanges2ByOriginalId.set(change1FieldSrc, change);\n\t\t\t\t} else {\n\t\t\t\t\tchildChanges2ByOriginalId.set(\"self\", change);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (change1FieldDst !== undefined && areEqualChangeAtomIds(change1FieldDst, id)) {\n\t\t\t\t\tchildChanges2ByOriginalId.set(\"self\", change);\n\t\t\t\t} else {\n\t\t\t\t\tconst originalId = tryGetFromNestedMap(dstToSrc, id.revision, id.localId);\n\t\t\t\t\tchildChanges2ByOriginalId.set(originalId ?? id, change);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst composedMoves: Move[] = [];\n\t\tconst composedChildChanges: ChildChange[] = [];\n\t\tconst composed: Mutable<OptionalChangeset> = {\n\t\t\tmoves: composedMoves,\n\t\t\tchildChanges: composedChildChanges,\n\t\t};\n\n\t\tfor (const [id, childChange1] of change1.childChanges) {\n\t\t\tconst childChange2 = childChanges2ByOriginalId.get(id);\n\t\t\tcomposedChildChanges.push([id, composeChild(childChange1, childChange2)]);\n\t\t\tchildChanges2ByOriginalId.delete(id);\n\t\t}\n\n\t\tfor (const [id, childChange2] of childChanges2ByOriginalId.entries()) {\n\t\t\tcomposedChildChanges.push([id, composeChild(undefined, childChange2)]);\n\t\t}\n\n\t\tfor (const [leg2Src, leg2Dst] of change2.moves) {\n\t\t\tconst leg1Src = tryGetFromNestedMap(dstToSrc, leg2Src.revision, leg2Src.localId);\n\t\t\tif (leg1Src !== undefined) {\n\t\t\t\tcomposedMoves.push([leg1Src, leg2Dst]);\n\t\t\t\tdeleteFromNestedMap(srcToDst, leg1Src.revision, leg1Src.localId);\n\t\t\t\tdeleteFromNestedMap(dstToSrc, leg2Src.revision, leg2Src.localId);\n\t\t\t} else if (\n\t\t\t\tchange1FieldDst === undefined ||\n\t\t\t\t!areEqualChangeAtomIds(change1FieldDst, leg2Src)\n\t\t\t) {\n\t\t\t\tcomposedMoves.push([leg2Src, leg2Dst]);\n\t\t\t}\n\t\t}\n\n\t\tfor (const [revision, innerMap] of srcToDst.entries()) {\n\t\t\tfor (const [localId, dst] of innerMap.entries()) {\n\t\t\t\tconst src = makeChangeAtomId(localId, revision);\n\t\t\t\tif (composedFieldSrc === undefined || !areEqualRegisterIds(src, composedFieldSrc)) {\n\t\t\t\t\tcomposedMoves.push([src, dst]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\tchange1FieldSrc !== undefined &&\n\t\t\tchange1FieldSrc !== \"self\" &&\n\t\t\tchange2.valueReplace !== undefined\n\t\t) {\n\t\t\tconst change2FieldDst = change2.valueReplace.dst;\n\t\t\tif (\n\t\t\t\tisReplaceEffectful(change2.valueReplace) &&\n\t\t\t\t!areEqualChangeAtomIds(change1FieldSrc, change2FieldDst)\n\t\t\t) {\n\t\t\t\tcomposedMoves.push([change1FieldSrc, change2FieldDst]);\n\t\t\t}\n\t\t}\n\n\t\tconst firstChange = change1.valueReplace ?? change2.valueReplace;\n\t\tif (firstChange === undefined) {\n\t\t\treturn composed;\n\t\t}\n\n\t\tconst replace: Mutable<Replace> = {\n\t\t\tisEmpty: firstChange.isEmpty,\n\t\t\tdst: getComposedReplaceDst(change1.valueReplace, change2),\n\t\t};\n\t\tif (composedFieldSrc !== undefined) {\n\t\t\treplace.src = composedFieldSrc;\n\t\t}\n\t\tcomposed.valueReplace = replace;\n\t\treturn composed;\n\t},\n\n\tinvert: (\n\t\tchange: OptionalChangeset,\n\t\tisRollback: boolean,\n\t\tgenId: IdAllocator<ChangesetLocalId>,\n\t): OptionalChangeset => {\n\t\tconst { moves, childChanges } = change;\n\n\t\tconst invertIdMap = new RegisterMap<RegisterId>();\n\t\tconst invertedMoves: Move[] = [];\n\t\tfor (const [src, dst] of moves) {\n\t\t\tinvertIdMap.set(src, dst);\n\t\t\tinvertedMoves.push([dst, src]);\n\t\t}\n\t\tif (change.valueReplace !== undefined) {\n\t\t\tconst effectfulDst = getEffectfulDst(change.valueReplace);\n\t\t\tif (effectfulDst !== undefined) {\n\t\t\t\tinvertIdMap.set(\"self\", change.valueReplace.dst);\n\t\t\t}\n\t\t\tif (change.valueReplace.src !== undefined) {\n\t\t\t\tinvertIdMap.set(change.valueReplace.src, \"self\");\n\t\t\t}\n\t\t}\n\n\t\tconst inverted: Mutable<OptionalChangeset> = {\n\t\t\tmoves: invertedMoves,\n\t\t\tchildChanges: childChanges.map(([id, childChange]) => {\n\t\t\t\treturn [invertIdMap.get(id) ?? id, childChange];\n\t\t\t}),\n\t\t};\n\n\t\tif (change.valueReplace !== undefined) {\n\t\t\tif (isReplaceEffectful(change.valueReplace)) {\n\t\t\t\tconst replace: Mutable<Replace> =\n\t\t\t\t\tchange.valueReplace.src === undefined\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tisEmpty: true,\n\t\t\t\t\t\t\t\tdst: makeChangeAtomId(genId.allocate()),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tisEmpty: false,\n\t\t\t\t\t\t\t\tdst: isRollback ? change.valueReplace.src : makeChangeAtomId(genId.allocate()),\n\t\t\t\t\t\t\t};\n\t\t\t\tif (change.valueReplace.isEmpty === false) {\n\t\t\t\t\treplace.src = change.valueReplace.dst;\n\t\t\t\t}\n\t\t\t\tinverted.valueReplace = replace;\n\t\t\t} else if (!isRollback && change.valueReplace.src === \"self\") {\n\t\t\t\tinverted.valueReplace = {\n\t\t\t\t\tisEmpty: false,\n\t\t\t\t\tsrc: \"self\",\n\t\t\t\t\tdst: makeChangeAtomId(genId.allocate()),\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\treturn inverted;\n\t},\n\n\trebase: (\n\t\tchange: OptionalChangeset,\n\t\toverChange: OptionalChangeset,\n\t\trebaseChild: NodeChangeRebaser,\n\t): OptionalChangeset => {\n\t\tconst { moves, childChanges, valueReplace: field } = change;\n\n\t\t// TODO: avoid computing the dstToSrc map if it's not needed.\n\t\t// TODO: de-dupe overSrcToDst and forwardMap\n\t\tconst { srcToDst: overSrcToDst } = getBidirectionalMaps(overChange.moves);\n\n\t\tconst forwardMap = new RegisterMap<RegisterId>();\n\t\tfor (const [src, dst] of overChange.moves) {\n\t\t\tforwardMap.set(src, dst);\n\t\t}\n\t\tif (overChange.valueReplace !== undefined) {\n\t\t\tconst effectfulDst = getEffectfulDst(overChange.valueReplace);\n\t\t\tif (effectfulDst !== undefined) {\n\t\t\t\tforwardMap.set(\"self\", overChange.valueReplace.dst);\n\t\t\t}\n\t\t\tif (overChange.valueReplace.src !== undefined) {\n\t\t\t\tforwardMap.set(overChange.valueReplace.src, \"self\");\n\t\t\t}\n\t\t}\n\n\t\tconst rebasedMoves: Move[] = [];\n\t\tfor (const [src, dst] of moves) {\n\t\t\tconst newDst = tryGetFromNestedMap(overSrcToDst, src.revision, src.localId);\n\t\t\trebasedMoves.push([src, newDst ?? dst]);\n\t\t}\n\n\t\tconst overChildChangesBySrc = new RegisterMap<NodeId>();\n\t\tfor (const [id, childChange] of overChange.childChanges) {\n\t\t\toverChildChangesBySrc.set(id, childChange);\n\t\t}\n\n\t\tconst rebasedChildChanges: ChildChange[] = [];\n\t\tfor (const [id, childChange] of childChanges) {\n\t\t\tconst overChildChange = overChildChangesBySrc.get(id);\n\t\t\tif (overChildChange !== undefined) {\n\t\t\t\toverChildChangesBySrc.delete(id);\n\t\t\t}\n\n\t\t\tconst rebasedId = forwardMap.get(id) ?? id;\n\t\t\tconst rebasedChildChange = rebaseChild(\n\t\t\t\tchildChange,\n\t\t\t\toverChildChange,\n\t\t\t\trebasedId === \"self\" ? NodeAttachState.Attached : NodeAttachState.Detached,\n\t\t\t);\n\t\t\tif (rebasedChildChange !== undefined) {\n\t\t\t\trebasedChildChanges.push([rebasedId, rebasedChildChange]);\n\t\t\t}\n\t\t}\n\n\t\tfor (const [id, overChildChange] of overChildChangesBySrc.entries()) {\n\t\t\tconst rebasedId = forwardMap.get(id) ?? id;\n\t\t\tconst rebasedChildChange = rebaseChild(\n\t\t\t\tundefined,\n\t\t\t\toverChildChange,\n\t\t\t\trebasedId === \"self\" ? NodeAttachState.Attached : NodeAttachState.Detached,\n\t\t\t);\n\t\t\tif (rebasedChildChange !== undefined) {\n\t\t\t\trebasedChildChanges.push([rebasedId, rebasedChildChange]);\n\t\t\t}\n\t\t}\n\n\t\tconst rebased: Mutable<OptionalChangeset> = {\n\t\t\tmoves: rebasedMoves,\n\t\t\tchildChanges: rebasedChildChanges,\n\t\t};\n\n\t\tif (field !== undefined) {\n\t\t\tconst replace: Mutable<Replace> = {\n\t\t\t\tisEmpty:\n\t\t\t\t\toverChange.valueReplace === undefined\n\t\t\t\t\t\t? field.isEmpty\n\t\t\t\t\t\t: overChange.valueReplace.src === undefined,\n\t\t\t\tdst: field.dst,\n\t\t\t};\n\t\t\tif (field.src !== undefined) {\n\t\t\t\treplace.src = forwardMap.get(field.src) ?? field.src;\n\t\t\t}\n\t\t\trebased.valueReplace = replace;\n\t\t}\n\n\t\treturn rebased;\n\t},\n\n\tprune: (change: OptionalChangeset, pruneChild: NodeChangePruner): OptionalChangeset => {\n\t\tconst childChanges: ChildChange[] = [];\n\t\tconst prunedChange: Mutable<OptionalChangeset> = {\n\t\t\tmoves: change.moves,\n\t\t\tchildChanges,\n\t\t};\n\t\tif (change.valueReplace !== undefined) {\n\t\t\tprunedChange.valueReplace = change.valueReplace;\n\t\t}\n\n\t\tfor (const [id, childChange] of change.childChanges) {\n\t\t\tconst prunedChildChange = pruneChild(childChange);\n\t\t\tif (prunedChildChange !== undefined) {\n\t\t\t\tchildChanges.push([id, prunedChildChange]);\n\t\t\t}\n\t\t}\n\n\t\treturn prunedChange;\n\t},\n\n\treplaceRevisions: (\n\t\tchange: OptionalChangeset,\n\t\toldRevisions: Set<RevisionTag | undefined>,\n\t\tnewRevision: RevisionTag | undefined,\n\t): OptionalChangeset => {\n\t\tconst valueReplace = replaceReplaceRevisions(\n\t\t\tchange.valueReplace,\n\t\t\toldRevisions,\n\t\t\tnewRevision,\n\t\t);\n\n\t\tconst childChanges: ChildChange[] = [];\n\t\tfor (const [id, childChange] of change.childChanges) {\n\t\t\tchildChanges.push([\n\t\t\t\treplaceRegisterRevisions(id, oldRevisions, newRevision),\n\t\t\t\treplaceAtomRevisions(childChange, oldRevisions, newRevision),\n\t\t\t]);\n\t\t}\n\n\t\tconst moves: Move[] = [];\n\t\tfor (const [src, dst] of change.moves) {\n\t\t\tmoves.push([\n\t\t\t\treplaceAtomRevisions(src, oldRevisions, newRevision),\n\t\t\t\treplaceAtomRevisions(dst, oldRevisions, newRevision),\n\t\t\t]);\n\t\t}\n\n\t\tconst updated: Mutable<OptionalChangeset> = { childChanges, moves };\n\t\tif (valueReplace !== undefined) {\n\t\t\tupdated.valueReplace = valueReplace;\n\t\t}\n\n\t\treturn updated;\n\t},\n};\n\nfunction replaceReplaceRevisions(\n\treplace: Replace | undefined,\n\toldRevisions: Set<RevisionTag | undefined>,\n\tnewRevision: RevisionTag | undefined,\n): Replace | undefined {\n\tif (replace === undefined) {\n\t\treturn undefined;\n\t}\n\n\tconst updated: Mutable<Replace> = {\n\t\t...replace,\n\t\tdst: replaceAtomRevisions(replace.dst, oldRevisions, newRevision),\n\t};\n\n\tif (replace.src !== undefined) {\n\t\tupdated.src = replaceRegisterRevisions(replace.src, oldRevisions, newRevision);\n\t}\n\n\treturn updated;\n}\n\nfunction replaceRegisterRevisions(\n\tregister: RegisterId,\n\toldRevisions: Set<RevisionTag | undefined>,\n\tnewRevision: RevisionTag | undefined,\n): RegisterId {\n\treturn register === \"self\"\n\t\t? register\n\t\t: replaceAtomRevisions(register, oldRevisions, newRevision);\n}\n\nfunction getComposedReplaceDst(\n\tchange1: Replace | undefined,\n\tchange2: OptionalChangeset,\n): ChangeAtomId {\n\tconst dst1 = change1?.dst;\n\tif (change2.valueReplace === undefined) {\n\t\tassert(dst1 !== undefined, 0x8ce /* Both replace replaces should not be undefined */);\n\t\treturn getIdAfterMoves(dst1, change2.moves);\n\t}\n\n\tif (\n\t\tdst1 === undefined ||\n\t\tchange1?.src === \"self\" ||\n\t\t(change2.valueReplace.src !== undefined &&\n\t\t\tareEqualRegisterIds(change2.valueReplace.src, dst1))\n\t) {\n\t\tassert(\n\t\t\tchange2.valueReplace !== undefined,\n\t\t\t0x8cf /* Both replace replaces should not be undefined */,\n\t\t);\n\t\treturn change2.valueReplace.dst;\n\t} else {\n\t\treturn getIdAfterMoves(dst1, change2.moves);\n\t}\n}\n\nfunction getIdAfterMoves(id: ChangeAtomId, moves: readonly Move[]): ChangeAtomId {\n\tfor (const [src, dst] of moves) {\n\t\tif (areEqualChangeAtomIds(id, src)) {\n\t\t\treturn dst;\n\t\t}\n\t}\n\treturn id;\n}\n\nfunction areEqualRegisterIds(id1: RegisterId, id2: RegisterId): boolean {\n\treturn id1 === \"self\" || id2 === \"self\" ? id1 === id2 : areEqualChangeAtomIds(id1, id2);\n}\n\nfunction getBidirectionalMaps(moves: OptionalChangeset[\"moves\"]): {\n\tsrcToDst: ChangeAtomIdMap<ChangeAtomId>;\n\tdstToSrc: ChangeAtomIdMap<ChangeAtomId>;\n} {\n\tconst srcToDst: ChangeAtomIdMap<ChangeAtomId> = new Map();\n\tconst dstToSrc: ChangeAtomIdMap<ChangeAtomId> = new Map();\n\tfor (const [src, dst] of moves) {\n\t\tsetInNestedMap(srcToDst, src.revision, src.localId, dst);\n\t\tsetInNestedMap(dstToSrc, dst.revision, dst.localId, src);\n\t}\n\treturn { srcToDst, dstToSrc };\n}\n\ntype EffectfulReplace =\n\t| {\n\t\t\tisEmpty: true;\n\t\t\tsrc?: ChangeAtomId;\n\t\t\tdst: ChangeAtomId;\n\t }\n\t| {\n\t\t\tisEmpty: boolean;\n\t\t\tsrc: ChangeAtomId;\n\t\t\tdst: ChangeAtomId;\n\t };\n\nfunction isReplaceEffectful(replace: Replace): replace is EffectfulReplace {\n\tif (replace.src === \"self\") {\n\t\treturn false;\n\t}\n\treturn !replace.isEmpty || replace.src !== undefined;\n}\n\nfunction getEffectfulDst(replace: Replace | undefined): ChangeAtomId | undefined {\n\treturn replace === undefined || replace.isEmpty || replace.src === \"self\"\n\t\t? undefined\n\t\t: replace.dst;\n}\n\nexport function taggedRegister(id: RegisterId, revision: RevisionTag | undefined): RegisterId {\n\tif (id === \"self\") {\n\t\treturn id;\n\t}\n\n\treturn taggedAtomId(id, revision);\n}\n\nexport interface OptionalFieldEditor extends FieldEditor<OptionalChangeset> {\n\t/**\n\t * Creates a change which replaces the field with `newContent`\n\t * @param newContent - the new content for the field\n\t * @param wasEmpty - whether the field is empty when creating this change\n\t * @param changeId - the ID associated with the replacement of the current content.\n\t * @param buildId - the ID associated with the creation of the `newContent`.\n\t */\n\tset(\n\t\twasEmpty: boolean,\n\t\tids: {\n\t\t\tfill: ChangesetLocalId;\n\t\t\tdetach: ChangesetLocalId;\n\t\t},\n\t): OptionalChangeset;\n\n\t/**\n\t * Creates a change which clears the field's contents (if any).\n\t * @param wasEmpty - whether the field is empty when creating this change\n\t * @param changeId - the ID associated with the detach.\n\t */\n\tclear(wasEmpty: boolean, id: ChangesetLocalId): OptionalChangeset;\n}\n\nexport const optionalFieldEditor: OptionalFieldEditor = {\n\tset: (\n\t\twasEmpty: boolean,\n\t\tids: {\n\t\t\tfill: ChangesetLocalId;\n\t\t\t// Should be interpreted as a set of an empty field if undefined.\n\t\t\tdetach: ChangesetLocalId;\n\t\t},\n\t): OptionalChangeset => ({\n\t\tmoves: [],\n\t\tchildChanges: [],\n\t\tvalueReplace: {\n\t\t\tisEmpty: wasEmpty,\n\t\t\tsrc: { localId: ids.fill },\n\t\t\tdst: { localId: ids.detach },\n\t\t},\n\t}),\n\n\tclear: (wasEmpty: boolean, detachId: ChangesetLocalId): OptionalChangeset => ({\n\t\tmoves: [],\n\t\tchildChanges: [],\n\t\tvalueReplace: {\n\t\t\tisEmpty: wasEmpty,\n\t\t\tdst: { localId: detachId },\n\t\t},\n\t}),\n\n\tbuildChildChange: (index: number, childChange: NodeId): OptionalChangeset => {\n\t\tassert(index === 0, 0x404 /* Optional fields only support a single child node */);\n\t\treturn {\n\t\t\tmoves: [],\n\t\t\tchildChanges: [[\"self\", childChange]],\n\t\t};\n\t},\n};\n\nexport function optionalFieldIntoDelta(\n\tchange: OptionalChangeset,\n\tdeltaFromChild: ToDelta,\n): DeltaFieldChanges {\n\tconst delta: Mutable<DeltaFieldChanges> = {};\n\n\tlet markIsANoop = true;\n\tconst mark: Mutable<DeltaMark> = { count: 1 };\n\n\tif (change.valueReplace !== undefined && isReplaceEffectful(change.valueReplace)) {\n\t\tif (!change.valueReplace.isEmpty) {\n\t\t\tmark.detach = nodeIdFromChangeAtom(change.valueReplace.dst);\n\t\t}\n\t\tif (change.valueReplace.src !== undefined) {\n\t\t\tmark.attach = nodeIdFromChangeAtom(change.valueReplace.src);\n\t\t}\n\t\tmarkIsANoop = false;\n\t}\n\n\tif (change.moves.length > 0) {\n\t\tdelta.rename = change.moves.map(([src, dst]) => ({\n\t\t\tcount: 1,\n\t\t\toldId: nodeIdFromChangeAtom(src),\n\t\t\tnewId: nodeIdFromChangeAtom(dst),\n\t\t}));\n\t}\n\n\tif (change.childChanges.length > 0) {\n\t\tconst globals: DeltaDetachedNodeChanges[] = [];\n\t\tfor (const [id, childChange] of change.childChanges) {\n\t\t\tconst childDelta = deltaFromChild(childChange);\n\t\t\tif (id !== \"self\") {\n\t\t\t\tconst fields = childDelta;\n\t\t\t\tglobals.push({\n\t\t\t\t\tid: { major: id.revision, minor: id.localId },\n\t\t\t\t\tfields,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tmark.fields = childDelta;\n\t\t\t\tmarkIsANoop = false;\n\t\t\t}\n\t\t}\n\n\t\tif (globals.length > 0) {\n\t\t\tdelta.global = globals;\n\t\t}\n\t}\n\n\tif (!markIsANoop) {\n\t\tdelta.local = [mark];\n\t}\n\n\treturn delta;\n}\n\nexport const optionalChangeHandler: FieldChangeHandler<\n\tOptionalChangeset,\n\tOptionalFieldEditor\n> = {\n\trebaser: optionalChangeRebaser,\n\tcodecsFactory: makeOptionalFieldCodecFamily,\n\teditor: optionalFieldEditor,\n\n\tintoDelta: optionalFieldIntoDelta,\n\trelevantRemovedRoots,\n\n\tisEmpty: (change: OptionalChangeset) =>\n\t\tchange.childChanges.length === 0 &&\n\t\tchange.moves.length === 0 &&\n\t\tchange.valueReplace === undefined,\n\n\tgetNestedChanges,\n\n\tcreateEmpty: () => ({ moves: [], childChanges: [] }),\n\tgetCrossFieldKeys: (_change) => [],\n};\n\nfunction getNestedChanges(change: OptionalChangeset): [NodeId, number | undefined][] {\n\treturn change.childChanges.map(([register, nodeId]) => [\n\t\tnodeId,\n\t\tregister === \"self\" ? 0 : undefined,\n\t]);\n}\n\nfunction* relevantRemovedRoots(\n\tchange: OptionalChangeset,\n\trelevantRemovedRootsFromChild: RelevantRemovedRootsFromChild,\n): Iterable<DeltaDetachedNodeId> {\n\tconst alreadyYielded = new RegisterMap<boolean>();\n\n\tfor (const [src] of change.moves) {\n\t\tif (!alreadyYielded.has(src)) {\n\t\t\talreadyYielded.set(src, true);\n\t\t\tyield nodeIdFromChangeAtom(src);\n\t\t}\n\t}\n\n\tfor (const [id, childChange] of change.childChanges) {\n\t\t// Child changes make the tree they apply to relevant unless that tree existed in the starting context of\n\t\t// of this change.\n\t\tif (id !== \"self\" && !alreadyYielded.has(id)) {\n\t\t\talreadyYielded.set(id, true);\n\t\t\tyield nodeIdFromChangeAtom(id);\n\t\t}\n\t\tyield* relevantRemovedRootsFromChild(childChange);\n\t}\n\n\tconst selfSrc = change.valueReplace?.src;\n\tif (selfSrc !== undefined && selfSrc !== \"self\" && !alreadyYielded.has(selfSrc)) {\n\t\tyield nodeIdFromChangeAtom(selfSrc);\n\t}\n}\n"]}
|
|
@@ -13,7 +13,7 @@ export { MarkListFactory } from "./markListFactory.js";
|
|
|
13
13
|
export { rebase } from "./rebase.js";
|
|
14
14
|
export { invert } from "./invert.js";
|
|
15
15
|
export { compose } from "./compose.js";
|
|
16
|
-
export { getInputLength, isDetach,
|
|
16
|
+
export { getInputLength, isDetach, cloneMark, extractMarkEffect, } from "./utils.js";
|
|
17
17
|
export { isMoveMark, type MoveMark, type MoveEffectTable, type MoveEffect, } from "./moveEffectTable.js";
|
|
18
18
|
export { relevantRemovedRoots } from "./relevantRemovedRoots.js";
|
|
19
19
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/sequence-field/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EACX,SAAS,EACT,MAAM,EACN,MAAM,EACN,SAAS,EACT,cAAc,EACd,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,OAAO,EACP,SAAS,IAAI,SAAS,EACtB,MAAM,EACN,MAAM,EACN,QAAQ,EACR,MAAM,EACN,aAAa,EACb,QAAQ,EACR,eAAe,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EACN,KAAK,0BAA0B,EAC/B,0BAA0B,GAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACN,KAAK,qBAAqB,EAC1B,0BAA0B,GAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,KAAK,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EACN,cAAc,EACd,QAAQ,EACR,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/sequence-field/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EACX,SAAS,EACT,MAAM,EACN,MAAM,EACN,SAAS,EACT,cAAc,EACd,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,OAAO,EACP,SAAS,IAAI,SAAS,EACtB,MAAM,EACN,MAAM,EACN,QAAQ,EACR,MAAM,EACN,aAAa,EACb,QAAQ,EACR,eAAe,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EACN,KAAK,0BAA0B,EAC/B,0BAA0B,GAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACN,KAAK,qBAAqB,EAC1B,0BAA0B,GAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,KAAK,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EACN,cAAc,EACd,QAAQ,EACR,SAAS,EACT,iBAAiB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EACN,UAAU,EACV,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,UAAU,GACf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -12,7 +12,7 @@ export { MarkListFactory } from "./markListFactory.js";
|
|
|
12
12
|
export { rebase } from "./rebase.js";
|
|
13
13
|
export { invert } from "./invert.js";
|
|
14
14
|
export { compose } from "./compose.js";
|
|
15
|
-
export { getInputLength, isDetach,
|
|
15
|
+
export { getInputLength, isDetach, cloneMark, extractMarkEffect, } from "./utils.js";
|
|
16
16
|
export { isMoveMark, } from "./moveEffectTable.js";
|
|
17
17
|
export { relevantRemovedRoots } from "./relevantRemovedRoots.js";
|
|
18
18
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/feature-libraries/sequence-field/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAsBH,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAEN,0BAA0B,GAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAEN,0BAA0B,GAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAA4B,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EACN,cAAc,EACd,QAAQ,EACR,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/feature-libraries/sequence-field/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAsBH,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAEN,0BAA0B,GAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAEN,0BAA0B,GAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAA4B,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EACN,cAAc,EACd,QAAQ,EACR,SAAS,EACT,iBAAiB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EACN,UAAU,GAIV,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport type {\n\tChangeset,\n\tRemove,\n\tDetach,\n\tHasMoveId,\n\tHasRevisionTag,\n\tInsert,\n\tMark,\n\tMarkList,\n\tMoveIn,\n\tMoveOut,\n\tCellCount as NodeCount,\n\tMoveId,\n\tAttach,\n\tNoopMark,\n\tCellId,\n\tHasMarkFields,\n\tCellMark,\n\tAttachAndDetach,\n} from \"./types.js\";\nexport { DetachIdOverrideType } from \"./formatV1.js\";\nexport {\n\ttype SequenceFieldChangeHandler,\n\tsequenceFieldChangeHandler,\n} from \"./sequenceFieldChangeHandler.js\";\nexport {\n\ttype SequenceChangeRebaser,\n\tsequenceFieldChangeRebaser,\n} from \"./sequenceFieldChangeRebaser.js\";\nexport { sequenceFieldChangeCodecFactory } from \"./sequenceFieldCodecs.js\";\nexport { sequenceFieldToDelta } from \"./sequenceFieldToDelta.js\";\nexport { type SequenceFieldEditor, sequenceFieldEditor } from \"./sequenceFieldEditor.js\";\nexport { MarkListFactory } from \"./markListFactory.js\";\nexport { rebase } from \"./rebase.js\";\nexport { invert } from \"./invert.js\";\nexport { compose } from \"./compose.js\";\nexport {\n\tgetInputLength,\n\tisDetach,\n\tcloneMark,\n\textractMarkEffect,\n} from \"./utils.js\";\nexport {\n\tisMoveMark,\n\ttype MoveMark,\n\ttype MoveEffectTable,\n\ttype MoveEffect,\n} from \"./moveEffectTable.js\";\n\nexport { relevantRemovedRoots } from \"./relevantRemovedRoots.js\";\n"]}
|
|
@@ -129,7 +129,6 @@ function invertMark(mark, isRollback, crossFieldManager) {
|
|
|
129
129
|
return applyMovedChanges(invertedMark, mark.revision, crossFieldManager);
|
|
130
130
|
}
|
|
131
131
|
case "AttachAndDetach": {
|
|
132
|
-
// Which should get the child change? Don't want to invert twice
|
|
133
132
|
const attach = {
|
|
134
133
|
count: mark.count,
|
|
135
134
|
cellId: mark.cellId,
|
|
@@ -202,6 +201,7 @@ function applyMovedChanges(mark, revision, manager) {
|
|
|
202
201
|
return [mark1WithChanges, ...applyMovedChanges(mark2, revision, manager)];
|
|
203
202
|
}
|
|
204
203
|
if (entry.value !== undefined) {
|
|
204
|
+
manager.onMoveIn(entry.value);
|
|
205
205
|
return [withNodeChange(mark, entry.value)];
|
|
206
206
|
}
|
|
207
207
|
return [mark];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invert.js","sourceRoot":"","sources":["../../../src/feature-libraries/sequence-field/invert.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert, unreachableCase } from \"@fluidframework/core-utils/internal\";\n\nimport type { RevisionTag } from \"../../core/index.js\";\nimport { type IdAllocator, type Mutable, fail } from \"../../util/index.js\";\nimport {\n\ttype CrossFieldManager,\n\tCrossFieldTarget,\n\ttype NodeId,\n} from \"../modular-schema/index.js\";\n\nimport { MarkListFactory } from \"./markListFactory.js\";\nimport {\n\ttype CellId,\n\ttype CellMark,\n\ttype Changeset,\n\ttype Detach,\n\ttype Mark,\n\ttype MarkEffect,\n\ttype MarkList,\n\ttype MoveIn,\n\ttype MoveOut,\n\ttype NoopMark,\n\tNoopMarkType,\n\ttype Remove,\n} from \"./types.js\";\nimport {\n\textractMarkEffect,\n\tgetDetachOutputCellId,\n\tgetEndpoint,\n\tgetInputCellId,\n\tgetOutputCellId,\n\tisAttach,\n\tisDetach,\n\tisImpactful,\n\tnormalizeCellRename,\n\tsplitMark,\n\twithNodeChange,\n} from \"./utils.js\";\n\n/**\n * Inverts a given changeset.\n * @param change - The changeset to produce the inverse of.\n * @returns The inverse of the given `change` such that the inverse can be applied after `change`.\n *\n * WARNING! This implementation is incomplete:\n * - Support for slices is not implemented.\n */\nexport function invert(\n\tchange: Changeset,\n\tisRollback: boolean,\n\tgenId: IdAllocator,\n\tcrossFieldManager: CrossFieldManager,\n): Changeset {\n\treturn invertMarkList(change, isRollback, crossFieldManager as CrossFieldManager<NodeId>);\n}\n\nfunction invertMarkList(\n\tmarkList: MarkList,\n\tisRollback: boolean,\n\tcrossFieldManager: CrossFieldManager<NodeId>,\n): MarkList {\n\tconst inverseMarkList = new MarkListFactory();\n\n\tfor (const mark of markList) {\n\t\tconst inverseMarks = invertMark(mark, isRollback, crossFieldManager);\n\t\tinverseMarkList.push(...inverseMarks);\n\t}\n\n\treturn inverseMarkList.list;\n}\n\nfunction invertMark(\n\tmark: Mark,\n\tisRollback: boolean,\n\tcrossFieldManager: CrossFieldManager<NodeId>,\n): Mark[] {\n\tif (!isImpactful(mark)) {\n\t\tconst inputId = getInputCellId(mark);\n\t\treturn [invertNodeChangeOrSkip(mark.count, mark.changes, inputId)];\n\t}\n\tconst type = mark.type;\n\tswitch (type) {\n\t\tcase NoopMarkType: {\n\t\t\treturn [mark];\n\t\t}\n\t\tcase \"Remove\": {\n\t\t\tassert(mark.revision !== undefined, 0x5a1 /* Unable to revert to undefined revision */);\n\t\t\tconst outputId = getOutputCellId(mark);\n\t\t\tconst inputId = getInputCellId(mark);\n\t\t\tlet inverse: Mutable<Mark>;\n\t\t\tif (inputId === undefined) {\n\t\t\t\tinverse = {\n\t\t\t\t\ttype: \"Insert\",\n\t\t\t\t\tid: mark.id,\n\t\t\t\t\tcellId: outputId,\n\t\t\t\t\tcount: mark.count,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tinverse = {\n\t\t\t\t\ttype: \"Remove\",\n\t\t\t\t\tid: mark.id,\n\t\t\t\t\tcellId: outputId,\n\t\t\t\t\tcount: mark.count,\n\t\t\t\t};\n\t\t\t\tif (isRollback) {\n\t\t\t\t\tinverse.idOverride = inputId;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn [withNodeChange(inverse, mark.changes)];\n\t\t}\n\t\tcase \"Insert\": {\n\t\t\tconst inputId = getInputCellId(mark);\n\t\t\tassert(inputId !== undefined, 0x80c /* Active inserts should target empty cells */);\n\t\t\tconst removeMark: Mutable<CellMark<Remove>> = {\n\t\t\t\ttype: \"Remove\",\n\t\t\t\tcount: mark.count,\n\t\t\t\tid: inputId.localId,\n\t\t\t};\n\n\t\t\tif (isRollback) {\n\t\t\t\tremoveMark.idOverride = inputId;\n\t\t\t}\n\n\t\t\tconst inverse = withNodeChange(removeMark, mark.changes);\n\t\t\treturn [inverse];\n\t\t}\n\t\tcase \"MoveOut\": {\n\t\t\tif (mark.changes !== undefined) {\n\t\t\t\tassert(mark.count === 1, 0x6ed /* Mark with changes can only target a single cell */);\n\n\t\t\t\tconst endpoint = getEndpoint(mark);\n\t\t\t\tcrossFieldManager.set(\n\t\t\t\t\tCrossFieldTarget.Destination,\n\t\t\t\t\tendpoint.revision,\n\t\t\t\t\tendpoint.localId,\n\t\t\t\t\tmark.count,\n\t\t\t\t\tmark.changes,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst cellId = getDetachOutputCellId(mark) ?? {\n\t\t\t\trevision: mark.revision ?? fail(\"Revision must be defined\"),\n\t\t\t\tlocalId: mark.id,\n\t\t\t};\n\n\t\t\tconst moveIn: MoveIn = {\n\t\t\t\ttype: \"MoveIn\",\n\t\t\t\tid: mark.id,\n\t\t\t};\n\n\t\t\tif (mark.finalEndpoint !== undefined) {\n\t\t\t\tmoveIn.finalEndpoint = { localId: mark.finalEndpoint.localId };\n\t\t\t}\n\t\t\tlet effect: MarkEffect = moveIn;\n\t\t\tconst inputId = getInputCellId(mark);\n\t\t\tif (inputId !== undefined) {\n\t\t\t\tconst detach: Mutable<Detach> = {\n\t\t\t\t\ttype: \"Remove\",\n\t\t\t\t\tid: mark.id,\n\t\t\t\t};\n\t\t\t\tif (isRollback) {\n\t\t\t\t\tdetach.idOverride = inputId;\n\t\t\t\t}\n\t\t\t\teffect = {\n\t\t\t\t\ttype: \"AttachAndDetach\",\n\t\t\t\t\tattach: moveIn,\n\t\t\t\t\tdetach,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn [{ ...effect, count: mark.count, cellId }];\n\t\t}\n\t\tcase \"MoveIn\": {\n\t\t\tconst inputId = getInputCellId(mark);\n\t\t\tassert(inputId !== undefined, 0x89e /* Active move-ins should target empty cells */);\n\t\t\tconst invertedMark: Mutable<CellMark<MoveOut>> = {\n\t\t\t\ttype: \"MoveOut\",\n\t\t\t\tid: mark.id,\n\t\t\t\tcount: mark.count,\n\t\t\t};\n\n\t\t\tif (isRollback) {\n\t\t\t\tinvertedMark.idOverride = inputId;\n\t\t\t}\n\n\t\t\tif (mark.finalEndpoint) {\n\t\t\t\tinvertedMark.finalEndpoint = { localId: mark.finalEndpoint.localId };\n\t\t\t}\n\t\t\treturn applyMovedChanges(invertedMark, mark.revision, crossFieldManager);\n\t\t}\n\t\tcase \"AttachAndDetach\": {\n\t\t\t// Which should get the child change? Don't want to invert twice\n\t\t\tconst attach: Mark = {\n\t\t\t\tcount: mark.count,\n\t\t\t\tcellId: mark.cellId,\n\t\t\t\t...mark.attach,\n\t\t\t};\n\t\t\tconst idAfterAttach = getOutputCellId(attach);\n\n\t\t\t// We put `mark.changes` on the detach so that if it is a move source\n\t\t\t// the changes can be sent to the endpoint.\n\t\t\tconst detach: Mark = {\n\t\t\t\tcount: mark.count,\n\t\t\t\tcellId: idAfterAttach,\n\t\t\t\tchanges: mark.changes,\n\t\t\t\t...mark.detach,\n\t\t\t};\n\t\t\tconst attachInverses = invertMark(attach, isRollback, crossFieldManager);\n\t\t\tconst detachInverses = invertMark(detach, isRollback, crossFieldManager);\n\n\t\t\tif (detachInverses.length === 0) {\n\t\t\t\treturn attachInverses;\n\t\t\t}\n\n\t\t\tassert(\n\t\t\t\tdetachInverses.length === 1,\n\t\t\t\t0x80d /* Only expected MoveIn marks to be split when inverting */,\n\t\t\t);\n\n\t\t\tlet detachInverse = detachInverses[0];\n\t\t\tassert(isAttach(detachInverse), 0x80e /* Inverse of a detach should be an attach */);\n\n\t\t\tconst inverses: Mark[] = [];\n\t\t\tfor (const attachInverse of attachInverses) {\n\t\t\t\tlet detachInverseCurr: Mark = detachInverse;\n\t\t\t\tif (attachInverse.count !== detachInverse.count) {\n\t\t\t\t\t[detachInverseCurr, detachInverse] = splitMark(detachInverse, attachInverse.count);\n\t\t\t\t}\n\n\t\t\t\tif (attachInverse.type === NoopMarkType) {\n\t\t\t\t\tif (attachInverse.changes !== undefined) {\n\t\t\t\t\t\tassert(\n\t\t\t\t\t\t\tdetachInverseCurr.changes === undefined,\n\t\t\t\t\t\t\t0x80f /* Unexpected node changes */,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdetachInverseCurr.changes = attachInverse.changes;\n\t\t\t\t\t}\n\t\t\t\t\tinverses.push(detachInverseCurr);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tassert(isDetach(attachInverse), 0x810 /* Inverse of an attach should be a detach */);\n\n\t\t\t\tconst inverted: Mark = {\n\t\t\t\t\ttype: \"AttachAndDetach\",\n\t\t\t\t\tcount: attachInverse.count,\n\t\t\t\t\tattach: extractMarkEffect(detachInverseCurr),\n\t\t\t\t\tdetach: extractMarkEffect(attachInverse),\n\t\t\t\t};\n\n\t\t\t\tif (detachInverseCurr.cellId !== undefined) {\n\t\t\t\t\tinverted.cellId = detachInverseCurr.cellId;\n\t\t\t\t}\n\n\t\t\t\tif (detachInverseCurr.changes !== undefined) {\n\t\t\t\t\tinverted.changes = detachInverseCurr.changes;\n\t\t\t\t}\n\n\t\t\t\tif (attachInverse.changes !== undefined) {\n\t\t\t\t\tassert(inverted.changes === undefined, 0x811 /* Unexpected node changes */);\n\t\t\t\t\tinverted.changes = attachInverse.changes;\n\t\t\t\t}\n\n\t\t\t\tinverses.push(normalizeCellRename(inverted));\n\t\t\t}\n\n\t\t\treturn inverses;\n\t\t}\n\t\tdefault:\n\t\t\tunreachableCase(type);\n\t}\n}\n\nfunction applyMovedChanges(\n\tmark: CellMark<MoveOut>,\n\trevision: RevisionTag | undefined,\n\tmanager: CrossFieldManager<NodeId>,\n): Mark[] {\n\t// Although this is a source mark, we query the destination because this was a destination mark during the original invert pass.\n\tconst entry = manager.get(CrossFieldTarget.Destination, revision, mark.id, mark.count, true);\n\n\tif (entry.length < mark.count) {\n\t\tconst [mark1, mark2] = splitMark(mark, entry.length);\n\t\tconst mark1WithChanges =\n\t\t\tentry.value !== undefined\n\t\t\t\t? withNodeChange<CellMark<MoveOut>, MoveOut>(mark1, entry.value)\n\t\t\t\t: mark1;\n\n\t\treturn [mark1WithChanges, ...applyMovedChanges(mark2, revision, manager)];\n\t}\n\n\tif (entry.value !== undefined) {\n\t\treturn [withNodeChange<CellMark<MoveOut>, MoveOut>(mark, entry.value)];\n\t}\n\n\treturn [mark];\n}\n\nfunction invertNodeChangeOrSkip(\n\tcount: number,\n\tchanges: NodeId | undefined,\n\tcellId?: CellId,\n): Mark {\n\tif (changes !== undefined) {\n\t\tassert(count === 1, 0x66c /* A modify mark must have length equal to one */);\n\t\tconst noop: CellMark<NoopMark> = {\n\t\t\tcount,\n\t\t\tchanges,\n\t\t};\n\t\tif (cellId !== undefined) {\n\t\t\tnoop.cellId = cellId;\n\t\t}\n\t\treturn noop;\n\t}\n\n\tif (cellId !== undefined) {\n\t\treturn { count, cellId };\n\t}\n\treturn { count };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"invert.js","sourceRoot":"","sources":["../../../src/feature-libraries/sequence-field/invert.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAG9E,OAAO,EAAkC,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAEN,gBAAgB,GAEhB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAWN,YAAY,GAEZ,MAAM,YAAY,CAAC;AACpB,OAAO,EACN,iBAAiB,EACjB,qBAAqB,EACrB,WAAW,EACX,cAAc,EACd,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,mBAAmB,EACnB,SAAS,EACT,cAAc,GACd,MAAM,YAAY,CAAC;AAEpB;;;;;;;GAOG;AACH,MAAM,UAAU,MAAM,CACrB,MAAiB,EACjB,UAAmB,EACnB,KAAkB,EAClB,iBAAoC;IAEpC,OAAO,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,iBAA8C,CAAC,CAAC;AAC3F,CAAC;AAED,SAAS,cAAc,CACtB,QAAkB,EAClB,UAAmB,EACnB,iBAA4C;IAE5C,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAE9C,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC7B,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;QACrE,eAAe,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,eAAe,CAAC,IAAI,CAAC;AAC7B,CAAC;AAED,SAAS,UAAU,CAClB,IAAU,EACV,UAAmB,EACnB,iBAA4C;IAE5C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QACrC,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACvB,QAAQ,IAAI,EAAE,CAAC;QACd,KAAK,YAAY,CAAC,CAAC,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,CAAC;QACf,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,KAAK,CAAC,4CAA4C,CAAC,CAAC;YACxF,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,OAAsB,CAAC;YAC3B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC3B,OAAO,GAAG;oBACT,IAAI,EAAE,QAAQ;oBACd,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,MAAM,EAAE,QAAQ;oBAChB,KAAK,EAAE,IAAI,CAAC,KAAK;iBACjB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACP,OAAO,GAAG;oBACT,IAAI,EAAE,QAAQ;oBACd,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,MAAM,EAAE,QAAQ;oBAChB,KAAK,EAAE,IAAI,CAAC,KAAK;iBACjB,CAAC;gBACF,IAAI,UAAU,EAAE,CAAC;oBAChB,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC;gBAC9B,CAAC;YACF,CAAC;YACD,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAChD,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,KAAK,CAAC,8CAA8C,CAAC,CAAC;YACpF,MAAM,UAAU,GAA8B;gBAC7C,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,EAAE,EAAE,OAAO,CAAC,OAAO;aACnB,CAAC;YAEF,IAAI,UAAU,EAAE,CAAC;gBAChB,UAAU,CAAC,UAAU,GAAG,OAAO,CAAC;YACjC,CAAC;YAED,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACzD,OAAO,CAAC,OAAO,CAAC,CAAC;QAClB,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YAChB,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE,KAAK,CAAC,qDAAqD,CAAC,CAAC;gBAEtF,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;gBACnC,iBAAiB,CAAC,GAAG,CACpB,gBAAgB,CAAC,WAAW,EAC5B,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,OAAO,EAChB,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,EACZ,IAAI,CACJ,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI;gBAC7C,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,0BAA0B,CAAC;gBAC3D,OAAO,EAAE,IAAI,CAAC,EAAE;aAChB,CAAC;YAEF,MAAM,MAAM,GAAW;gBACtB,IAAI,EAAE,QAAQ;gBACd,EAAE,EAAE,IAAI,CAAC,EAAE;aACX,CAAC;YAEF,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;gBACtC,MAAM,CAAC,aAAa,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;YAChE,CAAC;YACD,IAAI,MAAM,GAAe,MAAM,CAAC;YAChC,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC3B,MAAM,MAAM,GAAoB;oBAC/B,IAAI,EAAE,QAAQ;oBACd,EAAE,EAAE,IAAI,CAAC,EAAE;iBACX,CAAC;gBACF,IAAI,UAAU,EAAE,CAAC;oBAChB,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC;gBAC7B,CAAC;gBACD,MAAM,GAAG;oBACR,IAAI,EAAE,iBAAiB;oBACvB,MAAM,EAAE,MAAM;oBACd,MAAM;iBACN,CAAC;YACH,CAAC;YACD,OAAO,CAAC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,KAAK,CAAC,+CAA+C,CAAC,CAAC;YACrF,MAAM,YAAY,GAA+B;gBAChD,IAAI,EAAE,SAAS;gBACf,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;aACjB,CAAC;YAEF,IAAI,UAAU,EAAE,CAAC;gBAChB,YAAY,CAAC,UAAU,GAAG,OAAO,CAAC;YACnC,CAAC;YAED,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACxB,YAAY,CAAC,aAAa,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;YACtE,CAAC;YACD,OAAO,iBAAiB,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QAC1E,CAAC;QACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACxB,MAAM,MAAM,GAAS;gBACpB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,GAAG,IAAI,CAAC,MAAM;aACd,CAAC;YACF,MAAM,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YAE9C,qEAAqE;YACrE,2CAA2C;YAC3C,MAAM,MAAM,GAAS;gBACpB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,aAAa;gBACrB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,GAAG,IAAI,CAAC,MAAM;aACd,CAAC;YACF,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;YACzE,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;YAEzE,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjC,OAAO,cAAc,CAAC;YACvB,CAAC;YAED,MAAM,CACL,cAAc,CAAC,MAAM,KAAK,CAAC,EAC3B,KAAK,CAAC,2DAA2D,CACjE,CAAC;YAEF,IAAI,aAAa,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAErF,MAAM,QAAQ,GAAW,EAAE,CAAC;YAC5B,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;gBAC5C,IAAI,iBAAiB,GAAS,aAAa,CAAC;gBAC5C,IAAI,aAAa,CAAC,KAAK,KAAK,aAAa,CAAC,KAAK,EAAE,CAAC;oBACjD,CAAC,iBAAiB,EAAE,aAAa,CAAC,GAAG,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;gBACpF,CAAC;gBAED,IAAI,aAAa,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBACzC,IAAI,aAAa,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;wBACzC,MAAM,CACL,iBAAiB,CAAC,OAAO,KAAK,SAAS,EACvC,KAAK,CAAC,6BAA6B,CACnC,CAAC;wBACF,iBAAiB,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC;oBACnD,CAAC;oBACD,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;oBACjC,SAAS;gBACV,CAAC;gBACD,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,6CAA6C,CAAC,CAAC;gBAErF,MAAM,QAAQ,GAAS;oBACtB,IAAI,EAAE,iBAAiB;oBACvB,KAAK,EAAE,aAAa,CAAC,KAAK;oBAC1B,MAAM,EAAE,iBAAiB,CAAC,iBAAiB,CAAC;oBAC5C,MAAM,EAAE,iBAAiB,CAAC,aAAa,CAAC;iBACxC,CAAC;gBAEF,IAAI,iBAAiB,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAC5C,QAAQ,CAAC,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC;gBAC5C,CAAC;gBAED,IAAI,iBAAiB,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC7C,QAAQ,CAAC,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC;gBAC9C,CAAC;gBAED,IAAI,aAAa,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;oBACzC,MAAM,CAAC,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE,KAAK,CAAC,6BAA6B,CAAC,CAAC;oBAC5E,QAAQ,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC;gBAC1C,CAAC;gBAED,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC9C,CAAC;YAED,OAAO,QAAQ,CAAC;QACjB,CAAC;QACD;YACC,eAAe,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;AACF,CAAC;AAED,SAAS,iBAAiB,CACzB,IAAuB,EACvB,QAAiC,EACjC,OAAkC;IAElC,gIAAgI;IAChI,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAE7F,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC/B,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACrD,MAAM,gBAAgB,GACrB,KAAK,CAAC,KAAK,KAAK,SAAS;YACxB,CAAC,CAAC,cAAc,CAA6B,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;YAChE,CAAC,CAAC,KAAK,CAAC;QAEV,OAAO,CAAC,gBAAgB,EAAE,GAAG,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9B,OAAO,CAAC,cAAc,CAA6B,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,sBAAsB,CAC9B,KAAa,EACb,OAA2B,EAC3B,MAAe;IAEf,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,KAAK,CAAC,EAAE,KAAK,CAAC,iDAAiD,CAAC,CAAC;QAC7E,MAAM,IAAI,GAAuB;YAChC,KAAK;YACL,OAAO;SACP,CAAC;QACF,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACtB,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,CAAC;AAClB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert, unreachableCase } from \"@fluidframework/core-utils/internal\";\n\nimport type { RevisionTag } from \"../../core/index.js\";\nimport { type IdAllocator, type Mutable, fail } from \"../../util/index.js\";\nimport {\n\ttype CrossFieldManager,\n\tCrossFieldTarget,\n\ttype NodeId,\n} from \"../modular-schema/index.js\";\n\nimport { MarkListFactory } from \"./markListFactory.js\";\nimport {\n\ttype CellId,\n\ttype CellMark,\n\ttype Changeset,\n\ttype Detach,\n\ttype Mark,\n\ttype MarkEffect,\n\ttype MarkList,\n\ttype MoveIn,\n\ttype MoveOut,\n\ttype NoopMark,\n\tNoopMarkType,\n\ttype Remove,\n} from \"./types.js\";\nimport {\n\textractMarkEffect,\n\tgetDetachOutputCellId,\n\tgetEndpoint,\n\tgetInputCellId,\n\tgetOutputCellId,\n\tisAttach,\n\tisDetach,\n\tisImpactful,\n\tnormalizeCellRename,\n\tsplitMark,\n\twithNodeChange,\n} from \"./utils.js\";\n\n/**\n * Inverts a given changeset.\n * @param change - The changeset to produce the inverse of.\n * @returns The inverse of the given `change` such that the inverse can be applied after `change`.\n *\n * WARNING! This implementation is incomplete:\n * - Support for slices is not implemented.\n */\nexport function invert(\n\tchange: Changeset,\n\tisRollback: boolean,\n\tgenId: IdAllocator,\n\tcrossFieldManager: CrossFieldManager,\n): Changeset {\n\treturn invertMarkList(change, isRollback, crossFieldManager as CrossFieldManager<NodeId>);\n}\n\nfunction invertMarkList(\n\tmarkList: MarkList,\n\tisRollback: boolean,\n\tcrossFieldManager: CrossFieldManager<NodeId>,\n): MarkList {\n\tconst inverseMarkList = new MarkListFactory();\n\n\tfor (const mark of markList) {\n\t\tconst inverseMarks = invertMark(mark, isRollback, crossFieldManager);\n\t\tinverseMarkList.push(...inverseMarks);\n\t}\n\n\treturn inverseMarkList.list;\n}\n\nfunction invertMark(\n\tmark: Mark,\n\tisRollback: boolean,\n\tcrossFieldManager: CrossFieldManager<NodeId>,\n): Mark[] {\n\tif (!isImpactful(mark)) {\n\t\tconst inputId = getInputCellId(mark);\n\t\treturn [invertNodeChangeOrSkip(mark.count, mark.changes, inputId)];\n\t}\n\tconst type = mark.type;\n\tswitch (type) {\n\t\tcase NoopMarkType: {\n\t\t\treturn [mark];\n\t\t}\n\t\tcase \"Remove\": {\n\t\t\tassert(mark.revision !== undefined, 0x5a1 /* Unable to revert to undefined revision */);\n\t\t\tconst outputId = getOutputCellId(mark);\n\t\t\tconst inputId = getInputCellId(mark);\n\t\t\tlet inverse: Mutable<Mark>;\n\t\t\tif (inputId === undefined) {\n\t\t\t\tinverse = {\n\t\t\t\t\ttype: \"Insert\",\n\t\t\t\t\tid: mark.id,\n\t\t\t\t\tcellId: outputId,\n\t\t\t\t\tcount: mark.count,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tinverse = {\n\t\t\t\t\ttype: \"Remove\",\n\t\t\t\t\tid: mark.id,\n\t\t\t\t\tcellId: outputId,\n\t\t\t\t\tcount: mark.count,\n\t\t\t\t};\n\t\t\t\tif (isRollback) {\n\t\t\t\t\tinverse.idOverride = inputId;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn [withNodeChange(inverse, mark.changes)];\n\t\t}\n\t\tcase \"Insert\": {\n\t\t\tconst inputId = getInputCellId(mark);\n\t\t\tassert(inputId !== undefined, 0x80c /* Active inserts should target empty cells */);\n\t\t\tconst removeMark: Mutable<CellMark<Remove>> = {\n\t\t\t\ttype: \"Remove\",\n\t\t\t\tcount: mark.count,\n\t\t\t\tid: inputId.localId,\n\t\t\t};\n\n\t\t\tif (isRollback) {\n\t\t\t\tremoveMark.idOverride = inputId;\n\t\t\t}\n\n\t\t\tconst inverse = withNodeChange(removeMark, mark.changes);\n\t\t\treturn [inverse];\n\t\t}\n\t\tcase \"MoveOut\": {\n\t\t\tif (mark.changes !== undefined) {\n\t\t\t\tassert(mark.count === 1, 0x6ed /* Mark with changes can only target a single cell */);\n\n\t\t\t\tconst endpoint = getEndpoint(mark);\n\t\t\t\tcrossFieldManager.set(\n\t\t\t\t\tCrossFieldTarget.Destination,\n\t\t\t\t\tendpoint.revision,\n\t\t\t\t\tendpoint.localId,\n\t\t\t\t\tmark.count,\n\t\t\t\t\tmark.changes,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst cellId = getDetachOutputCellId(mark) ?? {\n\t\t\t\trevision: mark.revision ?? fail(\"Revision must be defined\"),\n\t\t\t\tlocalId: mark.id,\n\t\t\t};\n\n\t\t\tconst moveIn: MoveIn = {\n\t\t\t\ttype: \"MoveIn\",\n\t\t\t\tid: mark.id,\n\t\t\t};\n\n\t\t\tif (mark.finalEndpoint !== undefined) {\n\t\t\t\tmoveIn.finalEndpoint = { localId: mark.finalEndpoint.localId };\n\t\t\t}\n\t\t\tlet effect: MarkEffect = moveIn;\n\t\t\tconst inputId = getInputCellId(mark);\n\t\t\tif (inputId !== undefined) {\n\t\t\t\tconst detach: Mutable<Detach> = {\n\t\t\t\t\ttype: \"Remove\",\n\t\t\t\t\tid: mark.id,\n\t\t\t\t};\n\t\t\t\tif (isRollback) {\n\t\t\t\t\tdetach.idOverride = inputId;\n\t\t\t\t}\n\t\t\t\teffect = {\n\t\t\t\t\ttype: \"AttachAndDetach\",\n\t\t\t\t\tattach: moveIn,\n\t\t\t\t\tdetach,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn [{ ...effect, count: mark.count, cellId }];\n\t\t}\n\t\tcase \"MoveIn\": {\n\t\t\tconst inputId = getInputCellId(mark);\n\t\t\tassert(inputId !== undefined, 0x89e /* Active move-ins should target empty cells */);\n\t\t\tconst invertedMark: Mutable<CellMark<MoveOut>> = {\n\t\t\t\ttype: \"MoveOut\",\n\t\t\t\tid: mark.id,\n\t\t\t\tcount: mark.count,\n\t\t\t};\n\n\t\t\tif (isRollback) {\n\t\t\t\tinvertedMark.idOverride = inputId;\n\t\t\t}\n\n\t\t\tif (mark.finalEndpoint) {\n\t\t\t\tinvertedMark.finalEndpoint = { localId: mark.finalEndpoint.localId };\n\t\t\t}\n\t\t\treturn applyMovedChanges(invertedMark, mark.revision, crossFieldManager);\n\t\t}\n\t\tcase \"AttachAndDetach\": {\n\t\t\tconst attach: Mark = {\n\t\t\t\tcount: mark.count,\n\t\t\t\tcellId: mark.cellId,\n\t\t\t\t...mark.attach,\n\t\t\t};\n\t\t\tconst idAfterAttach = getOutputCellId(attach);\n\n\t\t\t// We put `mark.changes` on the detach so that if it is a move source\n\t\t\t// the changes can be sent to the endpoint.\n\t\t\tconst detach: Mark = {\n\t\t\t\tcount: mark.count,\n\t\t\t\tcellId: idAfterAttach,\n\t\t\t\tchanges: mark.changes,\n\t\t\t\t...mark.detach,\n\t\t\t};\n\t\t\tconst attachInverses = invertMark(attach, isRollback, crossFieldManager);\n\t\t\tconst detachInverses = invertMark(detach, isRollback, crossFieldManager);\n\n\t\t\tif (detachInverses.length === 0) {\n\t\t\t\treturn attachInverses;\n\t\t\t}\n\n\t\t\tassert(\n\t\t\t\tdetachInverses.length === 1,\n\t\t\t\t0x80d /* Only expected MoveIn marks to be split when inverting */,\n\t\t\t);\n\n\t\t\tlet detachInverse = detachInverses[0];\n\t\t\tassert(isAttach(detachInverse), 0x80e /* Inverse of a detach should be an attach */);\n\n\t\t\tconst inverses: Mark[] = [];\n\t\t\tfor (const attachInverse of attachInverses) {\n\t\t\t\tlet detachInverseCurr: Mark = detachInverse;\n\t\t\t\tif (attachInverse.count !== detachInverse.count) {\n\t\t\t\t\t[detachInverseCurr, detachInverse] = splitMark(detachInverse, attachInverse.count);\n\t\t\t\t}\n\n\t\t\t\tif (attachInverse.type === NoopMarkType) {\n\t\t\t\t\tif (attachInverse.changes !== undefined) {\n\t\t\t\t\t\tassert(\n\t\t\t\t\t\t\tdetachInverseCurr.changes === undefined,\n\t\t\t\t\t\t\t0x80f /* Unexpected node changes */,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdetachInverseCurr.changes = attachInverse.changes;\n\t\t\t\t\t}\n\t\t\t\t\tinverses.push(detachInverseCurr);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tassert(isDetach(attachInverse), 0x810 /* Inverse of an attach should be a detach */);\n\n\t\t\t\tconst inverted: Mark = {\n\t\t\t\t\ttype: \"AttachAndDetach\",\n\t\t\t\t\tcount: attachInverse.count,\n\t\t\t\t\tattach: extractMarkEffect(detachInverseCurr),\n\t\t\t\t\tdetach: extractMarkEffect(attachInverse),\n\t\t\t\t};\n\n\t\t\t\tif (detachInverseCurr.cellId !== undefined) {\n\t\t\t\t\tinverted.cellId = detachInverseCurr.cellId;\n\t\t\t\t}\n\n\t\t\t\tif (detachInverseCurr.changes !== undefined) {\n\t\t\t\t\tinverted.changes = detachInverseCurr.changes;\n\t\t\t\t}\n\n\t\t\t\tif (attachInverse.changes !== undefined) {\n\t\t\t\t\tassert(inverted.changes === undefined, 0x811 /* Unexpected node changes */);\n\t\t\t\t\tinverted.changes = attachInverse.changes;\n\t\t\t\t}\n\n\t\t\t\tinverses.push(normalizeCellRename(inverted));\n\t\t\t}\n\n\t\t\treturn inverses;\n\t\t}\n\t\tdefault:\n\t\t\tunreachableCase(type);\n\t}\n}\n\nfunction applyMovedChanges(\n\tmark: CellMark<MoveOut>,\n\trevision: RevisionTag | undefined,\n\tmanager: CrossFieldManager<NodeId>,\n): Mark[] {\n\t// Although this is a source mark, we query the destination because this was a destination mark during the original invert pass.\n\tconst entry = manager.get(CrossFieldTarget.Destination, revision, mark.id, mark.count, true);\n\n\tif (entry.length < mark.count) {\n\t\tconst [mark1, mark2] = splitMark(mark, entry.length);\n\t\tconst mark1WithChanges =\n\t\t\tentry.value !== undefined\n\t\t\t\t? withNodeChange<CellMark<MoveOut>, MoveOut>(mark1, entry.value)\n\t\t\t\t: mark1;\n\n\t\treturn [mark1WithChanges, ...applyMovedChanges(mark2, revision, manager)];\n\t}\n\n\tif (entry.value !== undefined) {\n\t\tmanager.onMoveIn(entry.value);\n\t\treturn [withNodeChange<CellMark<MoveOut>, MoveOut>(mark, entry.value)];\n\t}\n\n\treturn [mark];\n}\n\nfunction invertNodeChangeOrSkip(\n\tcount: number,\n\tchanges: NodeId | undefined,\n\tcellId?: CellId,\n): Mark {\n\tif (changes !== undefined) {\n\t\tassert(count === 1, 0x66c /* A modify mark must have length equal to one */);\n\t\tconst noop: CellMark<NoopMark> = {\n\t\t\tcount,\n\t\t\tchanges,\n\t\t};\n\t\tif (cellId !== undefined) {\n\t\t\tnoop.cellId = cellId;\n\t\t}\n\t\treturn noop;\n\t}\n\n\tif (cellId !== undefined) {\n\t\treturn { count, cellId };\n\t}\n\treturn { count };\n}\n"]}
|
|
@@ -146,6 +146,7 @@ function rebaseMark(currMark, baseMark, rebaseChild, moveEffects) {
|
|
|
146
146
|
if (movedNodeChanges !== undefined) {
|
|
147
147
|
assert(rebasedMark.changes === undefined, 0x8dc /* Unexpected collision of new node changes */);
|
|
148
148
|
rebasedMark.changes = movedNodeChanges;
|
|
149
|
+
moveEffects.onMoveIn(movedNodeChanges);
|
|
149
150
|
}
|
|
150
151
|
return rebaseMarkIgnoreChild(rebasedMark, baseMark, moveEffects);
|
|
151
152
|
}
|
|
@@ -303,7 +304,11 @@ function getMovedEffectFromBaseMark(moveEffects, baseMark) {
|
|
|
303
304
|
function getMovedEffect(moveEffects, revision, id, count) {
|
|
304
305
|
const effect = getMoveEffect(moveEffects, CrossFieldTarget.Destination, revision, id, count);
|
|
305
306
|
assert(effect.length === count, 0x6f3 /* Expected effect to cover entire mark */);
|
|
306
|
-
|
|
307
|
+
const movedEffect = effect.value?.movedEffect;
|
|
308
|
+
if (movedEffect !== undefined && movedEffect.type === "MoveOut") {
|
|
309
|
+
moveEffects.moveKey(CrossFieldTarget.Source, movedEffect.revision, movedEffect.id, count);
|
|
310
|
+
}
|
|
311
|
+
return movedEffect;
|
|
307
312
|
}
|
|
308
313
|
function getMovedChangesFromBaseMark(moveEffects, baseMark) {
|
|
309
314
|
if (isMoveIn(baseMark)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rebase.js","sourceRoot":"","sources":["../../../src/feature-libraries/sequence-field/rebase.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAG9E,OAAO,EAAoB,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAEN,gBAAgB,EAEhB,eAAe,GAGf,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAGN,aAAa,EACb,QAAQ,EACR,UAAU,EACV,SAAS,EACT,aAAa,GACb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAWN,YAAY,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EACN,SAAS,EACT,kBAAkB,EAClB,oBAAoB,EACpB,WAAW,EACX,SAAS,EACT,mCAAmC,EACnC,iBAAiB,EACjB,qBAAqB,EACrB,WAAW,EACX,cAAc,EACd,uBAAuB,EACvB,QAAQ,EACR,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,cAAc,GACd,MAAM,YAAY,CAAC;AAEpB;;;;;GAKG;AACH,MAAM,UAAU,MAAM,CACrB,MAAiB,EACjB,IAAe,EACf,WAA8B,EAC9B,KAAkB,EAClB,OAA0B,EAC1B,gBAAwC;IAExC,OAAO,cAAc,CACpB,MAAM,EACN,IAAI,EACJ,gBAAgB,EAChB,WAAW,EACX,KAAK,EACL,OAA0B,CAC1B,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CACtB,YAAsB,EACtB,YAAsB,EACtB,QAAgC,EAChC,WAA8B,EAC9B,KAAkB,EAClB,WAA0C;IAE1C,MAAM,OAAO,GAAG,IAAI,eAAe,EAAE,CAAC;IACtC,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAEjF,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QACzB,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QACpD,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAC7E,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,OAAO,CAAC,IAAI,CAAC;AACrB,CAAC;AAED;;;;;GAKG;AACH,SAAS,sBAAsB,CAAC,IAAU;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;IAC1B,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC7E,CAAC;AAED,MAAM,WAAW;IAMhB,YACC,SAAoB,EACpB,QAAmB,EACF,QAAgC,EAChC,WAA4B;QAD5B,aAAQ,GAAR,QAAQ,CAAwB;QAChC,gBAAW,GAAX,WAAW,CAAiB;QAE7C,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACvD,IAAI,CAAC,QAAQ,GAAG,IAAI,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACrD,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QAC5E,IAAI,CAAC,mBAAmB,GAAG,oBAAoB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAC3E,CAAC;IAEM,OAAO;QACb,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IAC5D,CAAC;IAEM,GAAG;QACT,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrC,MAAM,CACL,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,CAAC,EAClD,KAAK,CAAC,iCAAiC,CACvC,CAAC;QAEF,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YAChD,OAAO;gBACN,QAAQ,EAAE,sBAAsB,CAAC,eAAe,CAAC;gBACjD,OAAO,EAAE,eAAe;aACxB,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;QAC3B,CAAC;aAAM,IAAI,kBAAkB,CAAC,QAAQ,CAAC,IAAI,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;YACxE,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;YACxC,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;YACtC,MAAM,CACL,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,EAC3C,KAAK,CAAC,qCAAqC,CAC3C,CAAC;YACF,MAAM,UAAU,GAAG,mCAAmC,CACrD,MAAM,EACN,KAAK,EACL,IAAI,CAAC,oBAAoB,EACzB,IAAI,CAAC,mBAAmB,EACxB,IAAI,CAAC,QAAQ,CACb,CAAC;YACF,QAAQ,UAAU,EAAE,CAAC;gBACpB,KAAK,SAAS,CAAC,QAAQ;oBACtB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC3B,KAAK,SAAS,CAAC,UAAU;oBACxB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC3B,KAAK,SAAS,CAAC,UAAU;oBACxB,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC1B;oBACC,eAAe,CAAC,UAAU,CAAC,CAAC;YAC9B,CAAC;QACF,CAAC;aAAM,IAAI,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;aAAM,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;QAC3B,CAAC;aAAM,CAAC;YACP,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;QAC3B,CAAC;IACF,CAAC;IAEO,WAAW,CAAC,MAAe;QAClC,MAAM,QAAQ,GACb,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAEtF,IAAI,OAAO,GAAS,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QAErD,MAAM,WAAW,GAAG,0BAA0B,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAE3E,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,GAAG,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACpD,CAAC;QAED,OAAO;YACN,QAAQ;YACR,OAAO;SACP,CAAC;IACH,CAAC;IAEO,UAAU;QACjB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACxC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/D,CAAC;IAEO,WAAW;QAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrC,MAAM,CACL,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAC/C,KAAK,CAAC,+DAA+D,CACrE,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QACvD,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACzD,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,SAAS,GAAG,0BAA0B,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QAC9E,OAAO;YACN,QAAQ,EAAE,aAAa;YACvB,OAAO,EACN,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,YAAY,EAAE,SAAS,CAAC;SACrF,CAAC;IACH,CAAC;CACD;AAED;;;;;GAKG;AACH,SAAS,kBAAkB,CAAC,IAAU,EAAE,MAAkB;IACzD,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QACzC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACpC,CAAC;SAAM,IAAI,uBAAuB,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QACxF,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IAC9C,CAAC;SAAM,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAC/B,CAAC;IACD,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,sEAAsE,CAAC,CAAC;AAC7F,CAAC;AAWD,SAAS,UAAU,CAClB,QAAc,EACd,QAAc,EACd,WAA8B,EAC9B,WAA4B;IAE5B,MAAM,WAAW,GAAG,gBAAgB,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IACjF,MAAM,gBAAgB,GAAG,2BAA2B,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC5E,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACpC,MAAM,CACL,WAAW,CAAC,OAAO,KAAK,SAAS,EACjC,KAAK,CAAC,8CAA8C,CACpD,CAAC;QACF,WAAW,CAAC,OAAO,GAAG,gBAAgB,CAAC;IACxC,CAAC;IAED,OAAO,qBAAqB,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,qBAAqB,CAC7B,QAAc,EACd,QAAc,EACd,WAA4B;IAE5B,IAAI,WAAiB,CAAC;IACtB,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxB,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACnC,0DAA0D;YAC1D,OAAO,QAAQ,CAAC,MAAM,CAAC;QACxB,CAAC;QACD,MAAM,CACL,CAAC,WAAW,CAAC,QAAQ,CAAC,EACtB,KAAK,CAAC,oEAAoE,CAC1E,CAAC;QACF,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAEnD,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACxE,MAAM,CACL,CAAC,WAAW,CAAC,QAAQ,CAAC,EACtB,KAAK,CAAC,mDAAmD,CACzD,CAAC;YACF,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,sBAAsB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;YACjF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC3B,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC/E,CAAC;YAED,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBACpC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC1E,CAAC;YACD,WAAW,GAAG,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC7D,CAAC;aAAM,CAAC;YACP,WAAW,GAAG,QAAQ,CAAC;QACxB,CAAC;QACD,WAAW,GAAG,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;IACtE,CAAC;SAAM,IAAI,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrC,WAAW,GAAG,uBAAuB,CAAC,QAAQ,CAAC;YAC9C,CAAC,CAAC,cAAc,CAAC,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC;YACjF,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACpC,CAAC;SAAM,IAAI,uBAAuB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9C,MAAM,CACL,QAAQ,CAAC,MAAM,KAAK,SAAS,EAC7B,KAAK,CAAC,sDAAsD,CAC5D,CAAC;QACF,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7D,+CAA+C;YAC/C,OAAO,UAAU,CAAC,QAAQ,EAAE,qBAAqB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,eAAe,GAAG,qBAAqB,CAC5C,QAAQ,EACR,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,EACnF,WAAW,CACX,CAAC;QACF,WAAW,GAAG,qBAAqB,CAClC,eAAe,EACf,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,EAC7C,WAAW,CACX,CAAC;IACH,CAAC;SAAM,CAAC;QACP,WAAW,GAAG,QAAQ,CAAC;IACxB,CAAC;IACD,OAAO,WAAW,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,SAAS,sBAAsB,CAAC,IAAgB;IAI/C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACvB,QAAQ,IAAI,EAAE,CAAC;QACd,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS;YACb,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC1B,KAAK,iBAAiB;YACrB,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QACvD,KAAK,QAAQ;YACZ,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC1B,KAAK,YAAY;YAChB,OAAO,EAAE,CAAC;QACX,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,MAAM,OAAO,GAAY;gBACxB,IAAI,EAAE,SAAS;gBACf,EAAE,EAAE,IAAI,CAAC,EAAE;aACX,CAAC;YACF,MAAM,OAAO,GAAW;gBACvB,IAAI,EAAE,QAAQ;gBACd,EAAE,EAAE,IAAI,CAAC,EAAE;aACX,CAAC;YACF,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACjC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;gBACjC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAClC,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;QAC7B,CAAC;QACD;YACC,eAAe,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;AACF,CAAC;AAED,yEAAyE;AACzE,SAAS,gBAAgB,CACxB,UAAsB,EACtB,WAA4B,EAC5B,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAgB,EACvC,KAAa;IAEb,MAAM,MAAM,GAAG,aAAa,CAC3B,WAAW,EACX,gBAAgB,CAAC,WAAW,EAC5B,QAAQ,EACR,EAAE,EACF,KAAK,EACL,KAAK,CACL,CAAC;IACF,IAAI,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;QAC3B,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,GAAG,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9E,MAAM,SAAS,GACd,MAAM,CAAC,KAAK,KAAK,SAAS;YACzB,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE;YAC7C,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;QAC/B,aAAa,CACZ,WAAW,EACX,gBAAgB,CAAC,WAAW,EAC5B,QAAQ,EACR,EAAE,EACF,MAAM,CAAC,MAAM,EACb,SAAS,CACT,CAAC;QACF,gBAAgB,CACf,WAAW,EACX,WAAW,EACX,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAChD,KAAK,GAAG,MAAM,CAAC,MAAM,CACrB,CAAC;IACH,CAAC;SAAM,CAAC;QACP,MAAM,SAAS,GACd,MAAM,CAAC,KAAK,KAAK,SAAS;YACzB,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE;YAC9C,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;QAChC,aAAa,CAAC,WAAW,EAAE,gBAAgB,CAAC,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAC1F,CAAC;AACF,CAAC;AAED,SAAS,kBAAkB,CAC1B,UAAkB,EAClB,WAA4B,EAC5B,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAgB;IAEvC,MAAM,MAAM,GAAG,aAAa,CAC3B,WAAW,EACX,gBAAgB,CAAC,WAAW,EAC5B,QAAQ,EACR,EAAE,EACF,CAAC,EACD,KAAK,CACL,CAAC,KAAK,CAAC;IAER,MAAM,SAAS,GACd,MAAM,KAAK,SAAS;QACnB,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE;QAC3C,CAAC,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC;IAEnC,aAAa,CAAC,WAAW,EAAE,gBAAgB,CAAC,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;AACtF,CAAC;AAED,SAAS,gBAAgB,CACxB,QAAc,EACd,QAAc,EACd,WAA8B;IAE9B,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC;IACpC,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC;IAEpC,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC1D,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,MAAM,SAAS,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC/C,OAAO,cAAc,CAAC,QAAQ,EAAE,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAU;IACrC,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,OAAO,eAAe,CAAC,QAAQ,CAAC;IACjC,CAAC;SAAM,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,OAAO,eAAe,CAAC,QAAQ,CAAC;IACjC,CAAC;SAAM,CAAC;QACP,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC;IACxF,CAAC;AACF,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAU,EAAE,MAAoB;IACzD,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAC5E,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC;AAED,SAAS,UAAU,CAAqB,IAAW,EAAE,MAA0B;IAC9E,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC;IACpC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,OAAO,CAAC,MAAM,CAAC;IACvB,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,SAAS,0BAA0B,CAClC,WAA4B,EAC5B,QAAc;IAEd,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxB,OAAO,cAAc,CAAC,WAAW,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpF,CAAC;SAAM,IAAI,uBAAuB,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,OAAO,cAAc,CACpB,WAAW,EACX,QAAQ,CAAC,MAAM,CAAC,QAAQ,EACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,EAClB,QAAQ,CAAC,KAAK,CACd,CAAC;IACH,CAAC;SAAM,CAAC;QACP,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC;AAED,wFAAwF;AACxF,gHAAgH;AAChH,wCAAwC;AACxC,yEAAyE;AACzE,SAAS,cAAc,CACtB,WAA4B,EAC5B,QAAiC,EACjC,EAAU,EACV,KAAa;IAEb,MAAM,MAAM,GAAG,aAAa,CAAC,WAAW,EAAE,gBAAgB,CAAC,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;IAC7F,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAClF,OAAO,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC;AAClC,CAAC;AAED,SAAS,2BAA2B,CACnC,WAA4B,EAC5B,QAAc;IAEd,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxB,OAAO,mBAAmB,CAAC,WAAW,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;SAAM,IAAI,uBAAuB,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,OAAO,mBAAmB,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACvF,CAAC;SAAM,CAAC;QACP,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC;AAED,SAAS,mBAAmB,CAC3B,WAA4B,EAC5B,QAAiC,EACjC,EAAU;IAEV,OAAO,aAAa,CAAC,WAAW,EAAE,gBAAgB,CAAC,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK;QACrF,EAAE,cAAc,CAAC;AACnB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert, unreachableCase } from \"@fluidframework/core-utils/internal\";\n\nimport type { ChangeAtomId, RevisionMetadataSource, RevisionTag } from \"../../core/index.js\";\nimport { type IdAllocator, brand } from \"../../util/index.js\";\nimport {\n\ttype CrossFieldManager,\n\tCrossFieldTarget,\n\ttype NodeChangeRebaser,\n\tNodeAttachState,\n\ttype NodeId,\n\ttype RebaseRevisionMetadata,\n} from \"../modular-schema/index.js\";\n\nimport { MarkListFactory } from \"./markListFactory.js\";\nimport { MarkQueue } from \"./markQueue.js\";\nimport {\n\ttype MoveEffect,\n\ttype MoveEffectTable,\n\tgetMoveEffect,\n\tisMoveIn,\n\tisMoveMark,\n\tisMoveOut,\n\tsetMoveEffect,\n} from \"./moveEffectTable.js\";\nimport {\n\ttype CellId,\n\ttype CellMark,\n\ttype Changeset,\n\ttype Mark,\n\ttype MarkEffect,\n\ttype MarkList,\n\ttype MoveId,\n\ttype MoveIn,\n\ttype MoveOut,\n\ttype NoopMark,\n\tNoopMarkType,\n} from \"./types.js\";\nimport {\n\tCellOrder,\n\tareInputCellsEmpty,\n\tcellSourcesFromMarks,\n\tcloneCellId,\n\tcloneMark,\n\tcompareCellPositionsUsingTombstones,\n\textractMarkEffect,\n\tgetDetachOutputCellId,\n\tgetEndpoint,\n\tgetInputCellId,\n\tisAttachAndDetachEffect,\n\tisDetach,\n\tisNewAttach,\n\tisTombstone,\n\tmarkEmptiesCells,\n\tmarkFillsCells,\n\tsplitMarkEffect,\n\twithNodeChange,\n} from \"./utils.js\";\n\n/**\n * Rebases `change` over `base` assuming they both apply to the same initial state.\n * @param change - The changeset to rebase.\n * @param base - The changeset to rebase over.\n * @returns A changeset that performs the changes in `change` but does so assuming `base` has been applied first.\n */\nexport function rebase(\n\tchange: Changeset,\n\tbase: Changeset,\n\trebaseChild: NodeChangeRebaser,\n\tgenId: IdAllocator,\n\tmanager: CrossFieldManager,\n\trevisionMetadata: RebaseRevisionMetadata,\n): Changeset {\n\treturn rebaseMarkList(\n\t\tchange,\n\t\tbase,\n\t\trevisionMetadata,\n\t\trebaseChild,\n\t\tgenId,\n\t\tmanager as MoveEffectTable,\n\t);\n}\n\nfunction rebaseMarkList(\n\tcurrMarkList: MarkList,\n\tbaseMarkList: MarkList,\n\tmetadata: RebaseRevisionMetadata,\n\trebaseChild: NodeChangeRebaser,\n\tgenId: IdAllocator,\n\tmoveEffects: CrossFieldManager<MoveEffect>,\n): MarkList {\n\tconst factory = new MarkListFactory();\n\tconst queue = new RebaseQueue(baseMarkList, currMarkList, metadata, moveEffects);\n\n\twhile (!queue.isEmpty()) {\n\t\tconst { baseMark, newMark: currMark } = queue.pop();\n\t\tconst rebasedMark = rebaseMark(currMark, baseMark, rebaseChild, moveEffects);\n\t\tfactory.push(rebasedMark);\n\t}\n\n\treturn factory.list;\n}\n\n/**\n * Generates a NoOp mark that targets the same cells as the input mark.\n * @param mark - The mark the NoOp should target.\n * @param revision - The revision, if available.\n * @returns A NoOp mark that targets the same cells as the input mark.\n */\nfunction generateNoOpWithCellId(mark: Mark): CellMark<NoopMark> {\n\tconst length = mark.count;\n\tconst cellId = getInputCellId(mark);\n\treturn cellId === undefined ? { count: length } : { count: length, cellId };\n}\n\nclass RebaseQueue {\n\tprivate readonly baseMarks: MarkQueue;\n\tprivate readonly newMarks: MarkQueue;\n\tprivate readonly baseMarksCellSources: ReadonlySet<RevisionTag | undefined>;\n\tprivate readonly newMarksCellSources: ReadonlySet<RevisionTag | undefined>;\n\n\tpublic constructor(\n\t\tbaseMarks: Changeset,\n\t\tnewMarks: Changeset,\n\t\tprivate readonly metadata: RevisionMetadataSource,\n\t\tprivate readonly moveEffects: MoveEffectTable,\n\t) {\n\t\tthis.baseMarks = new MarkQueue(baseMarks, moveEffects);\n\t\tthis.newMarks = new MarkQueue(newMarks, moveEffects);\n\t\tthis.baseMarksCellSources = cellSourcesFromMarks(baseMarks, getInputCellId);\n\t\tthis.newMarksCellSources = cellSourcesFromMarks(newMarks, getInputCellId);\n\t}\n\n\tpublic isEmpty(): boolean {\n\t\treturn this.baseMarks.isEmpty() && this.newMarks.isEmpty();\n\t}\n\n\tpublic pop(): RebaseMarks {\n\t\tconst baseMark = this.baseMarks.peek();\n\t\tconst newMark = this.newMarks.peek();\n\t\tassert(\n\t\t\t!(baseMark === undefined && newMark === undefined),\n\t\t\t0x722 /* Cannot pop from empty queue */,\n\t\t);\n\n\t\tif (baseMark === undefined) {\n\t\t\tconst dequeuedNewMark = this.newMarks.dequeue();\n\t\t\treturn {\n\t\t\t\tbaseMark: generateNoOpWithCellId(dequeuedNewMark),\n\t\t\t\tnewMark: dequeuedNewMark,\n\t\t\t};\n\t\t} else if (newMark === undefined) {\n\t\t\treturn this.dequeueBase();\n\t\t} else if (areInputCellsEmpty(baseMark) && areInputCellsEmpty(newMark)) {\n\t\t\tconst baseId = getInputCellId(baseMark);\n\t\t\tconst newId = getInputCellId(newMark);\n\t\t\tassert(\n\t\t\t\tbaseId !== undefined && newId !== undefined,\n\t\t\t\t0x89f /* Both marks should have cell IDs */,\n\t\t\t);\n\t\t\tconst comparison = compareCellPositionsUsingTombstones(\n\t\t\t\tbaseId,\n\t\t\t\tnewId,\n\t\t\t\tthis.baseMarksCellSources,\n\t\t\t\tthis.newMarksCellSources,\n\t\t\t\tthis.metadata,\n\t\t\t);\n\t\t\tswitch (comparison) {\n\t\t\t\tcase CellOrder.SameCell:\n\t\t\t\t\treturn this.dequeueBoth();\n\t\t\t\tcase CellOrder.OldThenNew:\n\t\t\t\t\treturn this.dequeueBase();\n\t\t\t\tcase CellOrder.NewThenOld:\n\t\t\t\t\treturn this.dequeueNew();\n\t\t\t\tdefault:\n\t\t\t\t\tunreachableCase(comparison);\n\t\t\t}\n\t\t} else if (areInputCellsEmpty(newMark)) {\n\t\t\treturn this.dequeueNew();\n\t\t} else if (areInputCellsEmpty(baseMark)) {\n\t\t\treturn this.dequeueBase();\n\t\t} else {\n\t\t\treturn this.dequeueBoth();\n\t\t}\n\t}\n\n\tprivate dequeueBase(length?: number): RebaseMarks {\n\t\tconst baseMark =\n\t\t\tlength !== undefined ? this.baseMarks.dequeueUpTo(length) : this.baseMarks.dequeue();\n\n\t\tlet newMark: Mark = generateNoOpWithCellId(baseMark);\n\n\t\tconst movedEffect = getMovedEffectFromBaseMark(this.moveEffects, baseMark);\n\n\t\tif (movedEffect !== undefined) {\n\t\t\tnewMark = addMovedMarkEffect(newMark, movedEffect);\n\t\t}\n\n\t\treturn {\n\t\t\tbaseMark,\n\t\t\tnewMark,\n\t\t};\n\t}\n\n\tprivate dequeueNew(): RebaseMarks {\n\t\tconst newMark = this.newMarks.dequeue();\n\t\treturn { newMark, baseMark: generateNoOpWithCellId(newMark) };\n\t}\n\n\tprivate dequeueBoth(): RebaseMarks {\n\t\tconst baseMark = this.baseMarks.peek();\n\t\tconst newMark = this.newMarks.peek();\n\t\tassert(\n\t\t\tbaseMark !== undefined && newMark !== undefined,\n\t\t\t0x69c /* Cannot dequeue both unless both mark queues are non-empty */,\n\t\t);\n\t\tconst length = Math.min(newMark.count, baseMark.count);\n\t\tconst sizedBaseMark = this.baseMarks.dequeueUpTo(length);\n\t\tconst sizedNewMark = this.newMarks.dequeueUpTo(length);\n\t\tconst movedMark = getMovedEffectFromBaseMark(this.moveEffects, sizedBaseMark);\n\t\treturn {\n\t\t\tbaseMark: sizedBaseMark,\n\t\t\tnewMark:\n\t\t\t\tmovedMark === undefined ? sizedNewMark : addMovedMarkEffect(sizedNewMark, movedMark),\n\t\t};\n\t}\n}\n\n/**\n * Combines `mark` and `effect` into a single mark.\n * This function is only intended to handle cases where `mark` is part of a changeset being rebased\n * and `effect` is an effect from the same changeset whose target has been moved by the base changeset.\n * @returns a mark which has the composite effect of `mark` and `effect`.\n */\nfunction addMovedMarkEffect(mark: Mark, effect: MarkEffect): Mark {\n\tif (isMoveIn(mark) && isMoveOut(effect)) {\n\t\treturn { ...mark, type: \"Insert\" };\n\t} else if (isAttachAndDetachEffect(mark) && isMoveIn(mark.attach) && isMoveOut(effect)) {\n\t\treturn { ...mark.detach, count: mark.count };\n\t} else if (isTombstone(mark)) {\n\t\treturn { ...mark, ...effect };\n\t}\n\tassert(false, 0x818 /* Unexpected combination of mark effects at source and destination */);\n}\n\n/**\n * Represents the marks rebasing should process next.\n * If `baseMark` and `newMark` are both defined, then they are `SizedMark`s covering the same range of nodes.\n */\ninterface RebaseMarks {\n\tbaseMark: Mark;\n\tnewMark: Mark;\n}\n\nfunction rebaseMark(\n\tcurrMark: Mark,\n\tbaseMark: Mark,\n\trebaseChild: NodeChangeRebaser,\n\tmoveEffects: MoveEffectTable,\n): Mark {\n\tconst rebasedMark = rebaseNodeChange(cloneMark(currMark), baseMark, rebaseChild);\n\tconst movedNodeChanges = getMovedChangesFromBaseMark(moveEffects, baseMark);\n\tif (movedNodeChanges !== undefined) {\n\t\tassert(\n\t\t\trebasedMark.changes === undefined,\n\t\t\t0x8dc /* Unexpected collision of new node changes */,\n\t\t);\n\t\trebasedMark.changes = movedNodeChanges;\n\t}\n\n\treturn rebaseMarkIgnoreChild(rebasedMark, baseMark, moveEffects);\n}\n\nfunction rebaseMarkIgnoreChild(\n\tcurrMark: Mark,\n\tbaseMark: Mark,\n\tmoveEffects: MoveEffectTable,\n): Mark {\n\tlet rebasedMark: Mark;\n\tif (isDetach(baseMark)) {\n\t\tif (baseMark.cellId !== undefined) {\n\t\t\t// Detaches on empty cells have an implicit revive effect.\n\t\t\tdelete currMark.cellId;\n\t\t}\n\t\tassert(\n\t\t\t!isNewAttach(currMark),\n\t\t\t0x69d /* A new attach should not be rebased over its cell being emptied */,\n\t\t);\n\t\tconst baseCellId = getDetachOutputCellId(baseMark);\n\n\t\tif (isMoveOut(baseMark)) {\n\t\t\tassert(isMoveMark(baseMark), 0x6f0 /* Only move marks have move IDs */);\n\t\t\tassert(\n\t\t\t\t!isNewAttach(currMark),\n\t\t\t\t0x819 /* New attaches should not be rebased over moves */,\n\t\t\t);\n\t\t\tconst { remains, follows } = separateEffectsForMove(extractMarkEffect(currMark));\n\t\t\tif (follows !== undefined) {\n\t\t\t\tsendEffectToDest(follows, moveEffects, getEndpoint(baseMark), baseMark.count);\n\t\t\t}\n\n\t\t\tif (currMark.changes !== undefined) {\n\t\t\t\tmoveRebasedChanges(currMark.changes, moveEffects, getEndpoint(baseMark));\n\t\t\t}\n\t\t\trebasedMark = { ...(remains ?? {}), count: baseMark.count };\n\t\t} else {\n\t\t\trebasedMark = currMark;\n\t\t}\n\t\trebasedMark = makeDetachedMark(rebasedMark, cloneCellId(baseCellId));\n\t} else if (markFillsCells(baseMark)) {\n\t\trebasedMark = isAttachAndDetachEffect(currMark)\n\t\t\t? withNodeChange({ ...currMark.detach, count: currMark.count }, currMark.changes)\n\t\t\t: withCellId(currMark, undefined);\n\t} else if (isAttachAndDetachEffect(baseMark)) {\n\t\tassert(\n\t\t\tbaseMark.cellId !== undefined,\n\t\t\t0x81a /* AttachAndDetach mark should target an empty cell */,\n\t\t);\n\t\tif (isMoveIn(baseMark.attach) && isMoveOut(baseMark.detach)) {\n\t\t\t// Orphaned moves are effectively cell renames.\n\t\t\treturn withCellId(currMark, getDetachOutputCellId(baseMark.detach));\n\t\t}\n\t\tconst halfRebasedMark = rebaseMarkIgnoreChild(\n\t\t\tcurrMark,\n\t\t\t{ ...baseMark.attach, cellId: cloneCellId(baseMark.cellId), count: baseMark.count },\n\t\t\tmoveEffects,\n\t\t);\n\t\trebasedMark = rebaseMarkIgnoreChild(\n\t\t\thalfRebasedMark,\n\t\t\t{ ...baseMark.detach, count: baseMark.count },\n\t\t\tmoveEffects,\n\t\t);\n\t} else {\n\t\trebasedMark = currMark;\n\t}\n\treturn rebasedMark;\n}\n\n/**\n * @returns A pair of marks that represent the effects which should remain in place in the face of concurrent move,\n * and the effects that should be sent to the move destination.\n */\nfunction separateEffectsForMove(mark: MarkEffect): {\n\tremains?: MarkEffect;\n\tfollows?: MarkEffect;\n} {\n\tconst type = mark.type;\n\tswitch (type) {\n\t\tcase \"Remove\":\n\t\tcase \"MoveOut\":\n\t\t\treturn { follows: mark };\n\t\tcase \"AttachAndDetach\":\n\t\t\treturn { follows: mark.detach, remains: mark.attach };\n\t\tcase \"MoveIn\":\n\t\t\treturn { remains: mark };\n\t\tcase NoopMarkType:\n\t\t\treturn {};\n\t\tcase \"Insert\": {\n\t\t\tconst follows: MoveOut = {\n\t\t\t\ttype: \"MoveOut\",\n\t\t\t\tid: mark.id,\n\t\t\t};\n\t\t\tconst remains: MoveIn = {\n\t\t\t\ttype: \"MoveIn\",\n\t\t\t\tid: mark.id,\n\t\t\t};\n\t\t\tif (mark.revision !== undefined) {\n\t\t\t\tfollows.revision = mark.revision;\n\t\t\t\tremains.revision = mark.revision;\n\t\t\t}\n\t\t\treturn { remains, follows };\n\t\t}\n\t\tdefault:\n\t\t\tunreachableCase(type);\n\t}\n}\n\n// TODO: Reduce the duplication between this and other MoveEffect helpers\nfunction sendEffectToDest(\n\tmarkEffect: MarkEffect,\n\tmoveEffects: MoveEffectTable,\n\t{ revision, localId: id }: ChangeAtomId,\n\tcount: number,\n): void {\n\tconst effect = getMoveEffect(\n\t\tmoveEffects,\n\t\tCrossFieldTarget.Destination,\n\t\trevision,\n\t\tid,\n\t\tcount,\n\t\tfalse,\n\t);\n\tif (effect.length < count) {\n\t\tconst [markEffect1, markEffect2] = splitMarkEffect(markEffect, effect.length);\n\t\tconst newEffect =\n\t\t\teffect.value !== undefined\n\t\t\t\t? { ...effect.value, movedMark: markEffect1 }\n\t\t\t\t: { movedMark: markEffect1 };\n\t\tsetMoveEffect(\n\t\t\tmoveEffects,\n\t\t\tCrossFieldTarget.Destination,\n\t\t\trevision,\n\t\t\tid,\n\t\t\teffect.length,\n\t\t\tnewEffect,\n\t\t);\n\t\tsendEffectToDest(\n\t\t\tmarkEffect2,\n\t\t\tmoveEffects,\n\t\t\t{ revision, localId: brand(id + effect.length) },\n\t\t\tcount - effect.length,\n\t\t);\n\t} else {\n\t\tconst newEffect: MoveEffect =\n\t\t\teffect.value !== undefined\n\t\t\t\t? { ...effect.value, movedEffect: markEffect }\n\t\t\t\t: { movedEffect: markEffect };\n\t\tsetMoveEffect(moveEffects, CrossFieldTarget.Destination, revision, id, count, newEffect);\n\t}\n}\n\nfunction moveRebasedChanges(\n\tnodeChange: NodeId,\n\tmoveEffects: MoveEffectTable,\n\t{ revision, localId: id }: ChangeAtomId,\n): void {\n\tconst effect = getMoveEffect(\n\t\tmoveEffects,\n\t\tCrossFieldTarget.Destination,\n\t\trevision,\n\t\tid,\n\t\t1,\n\t\tfalse,\n\t).value;\n\n\tconst newEffect =\n\t\teffect !== undefined\n\t\t\t? { ...effect, rebasedChanges: nodeChange }\n\t\t\t: { rebasedChanges: nodeChange };\n\n\tsetMoveEffect(moveEffects, CrossFieldTarget.Destination, revision, id, 1, newEffect);\n}\n\nfunction rebaseNodeChange(\n\tcurrMark: Mark,\n\tbaseMark: Mark,\n\tnodeRebaser: NodeChangeRebaser,\n): Mark {\n\tconst baseChange = baseMark.changes;\n\tconst currChange = currMark.changes;\n\n\tif (baseChange === undefined && currChange === undefined) {\n\t\treturn currMark;\n\t}\n\n\tconst nodeState = nodeStateAfterMark(baseMark);\n\treturn withNodeChange(currMark, nodeRebaser(currChange, baseChange, nodeState));\n}\n\nfunction nodeStateAfterMark(mark: Mark): NodeAttachState {\n\tif (markEmptiesCells(mark)) {\n\t\treturn NodeAttachState.Detached;\n\t} else if (markFillsCells(mark)) {\n\t\treturn NodeAttachState.Attached;\n\t} else {\n\t\treturn mark.cellId === undefined ? NodeAttachState.Attached : NodeAttachState.Detached;\n\t}\n}\n\nfunction makeDetachedMark(mark: Mark, cellId: ChangeAtomId): Mark {\n\tassert(mark.cellId === undefined, 0x69f /* Expected mark to be attached */);\n\treturn { ...mark, cellId };\n}\n\nfunction withCellId<TMark extends Mark>(mark: TMark, cellId: CellId | undefined): TMark {\n\tconst newMark = { ...mark, cellId };\n\tif (cellId === undefined) {\n\t\tdelete newMark.cellId;\n\t}\n\treturn newMark;\n}\n\nfunction getMovedEffectFromBaseMark(\n\tmoveEffects: MoveEffectTable,\n\tbaseMark: Mark,\n): MarkEffect | undefined {\n\tif (isMoveIn(baseMark)) {\n\t\treturn getMovedEffect(moveEffects, baseMark.revision, baseMark.id, baseMark.count);\n\t} else if (isAttachAndDetachEffect(baseMark) && isMoveIn(baseMark.attach)) {\n\t\treturn getMovedEffect(\n\t\t\tmoveEffects,\n\t\t\tbaseMark.attach.revision,\n\t\t\tbaseMark.attach.id,\n\t\t\tbaseMark.count,\n\t\t);\n\t} else {\n\t\treturn undefined;\n\t}\n}\n\n// It is expected that the range from `id` to `id + count - 1` has the same move effect.\n// The call sites to this function are making queries about a mark which has already been split by a `MarkQueue`\n// to match the ranges in `moveEffects`.\n// TODO: Reduce the duplication between this and other MoveEffect helpers\nfunction getMovedEffect(\n\tmoveEffects: MoveEffectTable,\n\trevision: RevisionTag | undefined,\n\tid: MoveId,\n\tcount: number,\n): MarkEffect | undefined {\n\tconst effect = getMoveEffect(moveEffects, CrossFieldTarget.Destination, revision, id, count);\n\tassert(effect.length === count, 0x6f3 /* Expected effect to cover entire mark */);\n\treturn effect.value?.movedEffect;\n}\n\nfunction getMovedChangesFromBaseMark(\n\tmoveEffects: MoveEffectTable,\n\tbaseMark: Mark,\n): NodeId | undefined {\n\tif (isMoveIn(baseMark)) {\n\t\treturn getMovedNodeChanges(moveEffects, baseMark.revision, baseMark.id);\n\t} else if (isAttachAndDetachEffect(baseMark) && isMoveIn(baseMark.attach)) {\n\t\treturn getMovedNodeChanges(moveEffects, baseMark.attach.revision, baseMark.attach.id);\n\t} else {\n\t\treturn undefined;\n\t}\n}\n\nfunction getMovedNodeChanges(\n\tmoveEffects: MoveEffectTable,\n\trevision: RevisionTag | undefined,\n\tid: MoveId,\n): NodeId | undefined {\n\treturn getMoveEffect(moveEffects, CrossFieldTarget.Destination, revision, id, 1).value\n\t\t?.rebasedChanges;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"rebase.js","sourceRoot":"","sources":["../../../src/feature-libraries/sequence-field/rebase.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert, unreachableCase } from \"@fluidframework/core-utils/internal\";\n\nimport type { ChangeAtomId, RevisionMetadataSource, RevisionTag } from \"../../core/index.js\";\nimport { type IdAllocator, brand } from \"../../util/index.js\";\nimport {\n\ttype CrossFieldManager,\n\tCrossFieldTarget,\n\ttype NodeChangeRebaser,\n\tNodeAttachState,\n\ttype NodeId,\n\ttype RebaseRevisionMetadata,\n} from \"../modular-schema/index.js\";\n\nimport { MarkListFactory } from \"./markListFactory.js\";\nimport { MarkQueue } from \"./markQueue.js\";\nimport {\n\ttype MoveEffect,\n\ttype MoveEffectTable,\n\tgetMoveEffect,\n\tisMoveIn,\n\tisMoveMark,\n\tisMoveOut,\n\tsetMoveEffect,\n} from \"./moveEffectTable.js\";\nimport {\n\ttype CellId,\n\ttype CellMark,\n\ttype Changeset,\n\ttype Mark,\n\ttype MarkEffect,\n\ttype MarkList,\n\ttype MoveId,\n\ttype MoveIn,\n\ttype MoveOut,\n\ttype NoopMark,\n\tNoopMarkType,\n} from \"./types.js\";\nimport {\n\tCellOrder,\n\tareInputCellsEmpty,\n\tcellSourcesFromMarks,\n\tcloneCellId,\n\tcloneMark,\n\tcompareCellPositionsUsingTombstones,\n\textractMarkEffect,\n\tgetDetachOutputCellId,\n\tgetEndpoint,\n\tgetInputCellId,\n\tisAttachAndDetachEffect,\n\tisDetach,\n\tisNewAttach,\n\tisTombstone,\n\tmarkEmptiesCells,\n\tmarkFillsCells,\n\tsplitMarkEffect,\n\twithNodeChange,\n} from \"./utils.js\";\n\n/**\n * Rebases `change` over `base` assuming they both apply to the same initial state.\n * @param change - The changeset to rebase.\n * @param base - The changeset to rebase over.\n * @returns A changeset that performs the changes in `change` but does so assuming `base` has been applied first.\n */\nexport function rebase(\n\tchange: Changeset,\n\tbase: Changeset,\n\trebaseChild: NodeChangeRebaser,\n\tgenId: IdAllocator,\n\tmanager: CrossFieldManager,\n\trevisionMetadata: RebaseRevisionMetadata,\n): Changeset {\n\treturn rebaseMarkList(\n\t\tchange,\n\t\tbase,\n\t\trevisionMetadata,\n\t\trebaseChild,\n\t\tgenId,\n\t\tmanager as MoveEffectTable,\n\t);\n}\n\nfunction rebaseMarkList(\n\tcurrMarkList: MarkList,\n\tbaseMarkList: MarkList,\n\tmetadata: RebaseRevisionMetadata,\n\trebaseChild: NodeChangeRebaser,\n\tgenId: IdAllocator,\n\tmoveEffects: CrossFieldManager<MoveEffect>,\n): MarkList {\n\tconst factory = new MarkListFactory();\n\tconst queue = new RebaseQueue(baseMarkList, currMarkList, metadata, moveEffects);\n\n\twhile (!queue.isEmpty()) {\n\t\tconst { baseMark, newMark: currMark } = queue.pop();\n\t\tconst rebasedMark = rebaseMark(currMark, baseMark, rebaseChild, moveEffects);\n\t\tfactory.push(rebasedMark);\n\t}\n\n\treturn factory.list;\n}\n\n/**\n * Generates a NoOp mark that targets the same cells as the input mark.\n * @param mark - The mark the NoOp should target.\n * @param revision - The revision, if available.\n * @returns A NoOp mark that targets the same cells as the input mark.\n */\nfunction generateNoOpWithCellId(mark: Mark): CellMark<NoopMark> {\n\tconst length = mark.count;\n\tconst cellId = getInputCellId(mark);\n\treturn cellId === undefined ? { count: length } : { count: length, cellId };\n}\n\nclass RebaseQueue {\n\tprivate readonly baseMarks: MarkQueue;\n\tprivate readonly newMarks: MarkQueue;\n\tprivate readonly baseMarksCellSources: ReadonlySet<RevisionTag | undefined>;\n\tprivate readonly newMarksCellSources: ReadonlySet<RevisionTag | undefined>;\n\n\tpublic constructor(\n\t\tbaseMarks: Changeset,\n\t\tnewMarks: Changeset,\n\t\tprivate readonly metadata: RevisionMetadataSource,\n\t\tprivate readonly moveEffects: MoveEffectTable,\n\t) {\n\t\tthis.baseMarks = new MarkQueue(baseMarks, moveEffects);\n\t\tthis.newMarks = new MarkQueue(newMarks, moveEffects);\n\t\tthis.baseMarksCellSources = cellSourcesFromMarks(baseMarks, getInputCellId);\n\t\tthis.newMarksCellSources = cellSourcesFromMarks(newMarks, getInputCellId);\n\t}\n\n\tpublic isEmpty(): boolean {\n\t\treturn this.baseMarks.isEmpty() && this.newMarks.isEmpty();\n\t}\n\n\tpublic pop(): RebaseMarks {\n\t\tconst baseMark = this.baseMarks.peek();\n\t\tconst newMark = this.newMarks.peek();\n\t\tassert(\n\t\t\t!(baseMark === undefined && newMark === undefined),\n\t\t\t0x722 /* Cannot pop from empty queue */,\n\t\t);\n\n\t\tif (baseMark === undefined) {\n\t\t\tconst dequeuedNewMark = this.newMarks.dequeue();\n\t\t\treturn {\n\t\t\t\tbaseMark: generateNoOpWithCellId(dequeuedNewMark),\n\t\t\t\tnewMark: dequeuedNewMark,\n\t\t\t};\n\t\t} else if (newMark === undefined) {\n\t\t\treturn this.dequeueBase();\n\t\t} else if (areInputCellsEmpty(baseMark) && areInputCellsEmpty(newMark)) {\n\t\t\tconst baseId = getInputCellId(baseMark);\n\t\t\tconst newId = getInputCellId(newMark);\n\t\t\tassert(\n\t\t\t\tbaseId !== undefined && newId !== undefined,\n\t\t\t\t0x89f /* Both marks should have cell IDs */,\n\t\t\t);\n\t\t\tconst comparison = compareCellPositionsUsingTombstones(\n\t\t\t\tbaseId,\n\t\t\t\tnewId,\n\t\t\t\tthis.baseMarksCellSources,\n\t\t\t\tthis.newMarksCellSources,\n\t\t\t\tthis.metadata,\n\t\t\t);\n\t\t\tswitch (comparison) {\n\t\t\t\tcase CellOrder.SameCell:\n\t\t\t\t\treturn this.dequeueBoth();\n\t\t\t\tcase CellOrder.OldThenNew:\n\t\t\t\t\treturn this.dequeueBase();\n\t\t\t\tcase CellOrder.NewThenOld:\n\t\t\t\t\treturn this.dequeueNew();\n\t\t\t\tdefault:\n\t\t\t\t\tunreachableCase(comparison);\n\t\t\t}\n\t\t} else if (areInputCellsEmpty(newMark)) {\n\t\t\treturn this.dequeueNew();\n\t\t} else if (areInputCellsEmpty(baseMark)) {\n\t\t\treturn this.dequeueBase();\n\t\t} else {\n\t\t\treturn this.dequeueBoth();\n\t\t}\n\t}\n\n\tprivate dequeueBase(length?: number): RebaseMarks {\n\t\tconst baseMark =\n\t\t\tlength !== undefined ? this.baseMarks.dequeueUpTo(length) : this.baseMarks.dequeue();\n\n\t\tlet newMark: Mark = generateNoOpWithCellId(baseMark);\n\n\t\tconst movedEffect = getMovedEffectFromBaseMark(this.moveEffects, baseMark);\n\n\t\tif (movedEffect !== undefined) {\n\t\t\tnewMark = addMovedMarkEffect(newMark, movedEffect);\n\t\t}\n\n\t\treturn {\n\t\t\tbaseMark,\n\t\t\tnewMark,\n\t\t};\n\t}\n\n\tprivate dequeueNew(): RebaseMarks {\n\t\tconst newMark = this.newMarks.dequeue();\n\t\treturn { newMark, baseMark: generateNoOpWithCellId(newMark) };\n\t}\n\n\tprivate dequeueBoth(): RebaseMarks {\n\t\tconst baseMark = this.baseMarks.peek();\n\t\tconst newMark = this.newMarks.peek();\n\t\tassert(\n\t\t\tbaseMark !== undefined && newMark !== undefined,\n\t\t\t0x69c /* Cannot dequeue both unless both mark queues are non-empty */,\n\t\t);\n\t\tconst length = Math.min(newMark.count, baseMark.count);\n\t\tconst sizedBaseMark = this.baseMarks.dequeueUpTo(length);\n\t\tconst sizedNewMark = this.newMarks.dequeueUpTo(length);\n\t\tconst movedMark = getMovedEffectFromBaseMark(this.moveEffects, sizedBaseMark);\n\t\treturn {\n\t\t\tbaseMark: sizedBaseMark,\n\t\t\tnewMark:\n\t\t\t\tmovedMark === undefined ? sizedNewMark : addMovedMarkEffect(sizedNewMark, movedMark),\n\t\t};\n\t}\n}\n\n/**\n * Combines `mark` and `effect` into a single mark.\n * This function is only intended to handle cases where `mark` is part of a changeset being rebased\n * and `effect` is an effect from the same changeset whose target has been moved by the base changeset.\n * @returns a mark which has the composite effect of `mark` and `effect`.\n */\nfunction addMovedMarkEffect(mark: Mark, effect: MarkEffect): Mark {\n\tif (isMoveIn(mark) && isMoveOut(effect)) {\n\t\treturn { ...mark, type: \"Insert\" };\n\t} else if (isAttachAndDetachEffect(mark) && isMoveIn(mark.attach) && isMoveOut(effect)) {\n\t\treturn { ...mark.detach, count: mark.count };\n\t} else if (isTombstone(mark)) {\n\t\treturn { ...mark, ...effect };\n\t}\n\tassert(false, 0x818 /* Unexpected combination of mark effects at source and destination */);\n}\n\n/**\n * Represents the marks rebasing should process next.\n * If `baseMark` and `newMark` are both defined, then they are `SizedMark`s covering the same range of nodes.\n */\ninterface RebaseMarks {\n\tbaseMark: Mark;\n\tnewMark: Mark;\n}\n\nfunction rebaseMark(\n\tcurrMark: Mark,\n\tbaseMark: Mark,\n\trebaseChild: NodeChangeRebaser,\n\tmoveEffects: MoveEffectTable,\n): Mark {\n\tconst rebasedMark = rebaseNodeChange(cloneMark(currMark), baseMark, rebaseChild);\n\tconst movedNodeChanges = getMovedChangesFromBaseMark(moveEffects, baseMark);\n\tif (movedNodeChanges !== undefined) {\n\t\tassert(\n\t\t\trebasedMark.changes === undefined,\n\t\t\t0x8dc /* Unexpected collision of new node changes */,\n\t\t);\n\t\trebasedMark.changes = movedNodeChanges;\n\t\tmoveEffects.onMoveIn(movedNodeChanges);\n\t}\n\n\treturn rebaseMarkIgnoreChild(rebasedMark, baseMark, moveEffects);\n}\n\nfunction rebaseMarkIgnoreChild(\n\tcurrMark: Mark,\n\tbaseMark: Mark,\n\tmoveEffects: MoveEffectTable,\n): Mark {\n\tlet rebasedMark: Mark;\n\tif (isDetach(baseMark)) {\n\t\tif (baseMark.cellId !== undefined) {\n\t\t\t// Detaches on empty cells have an implicit revive effect.\n\t\t\tdelete currMark.cellId;\n\t\t}\n\t\tassert(\n\t\t\t!isNewAttach(currMark),\n\t\t\t0x69d /* A new attach should not be rebased over its cell being emptied */,\n\t\t);\n\t\tconst baseCellId = getDetachOutputCellId(baseMark);\n\n\t\tif (isMoveOut(baseMark)) {\n\t\t\tassert(isMoveMark(baseMark), 0x6f0 /* Only move marks have move IDs */);\n\t\t\tassert(\n\t\t\t\t!isNewAttach(currMark),\n\t\t\t\t0x819 /* New attaches should not be rebased over moves */,\n\t\t\t);\n\t\t\tconst { remains, follows } = separateEffectsForMove(extractMarkEffect(currMark));\n\t\t\tif (follows !== undefined) {\n\t\t\t\tsendEffectToDest(follows, moveEffects, getEndpoint(baseMark), baseMark.count);\n\t\t\t}\n\n\t\t\tif (currMark.changes !== undefined) {\n\t\t\t\tmoveRebasedChanges(currMark.changes, moveEffects, getEndpoint(baseMark));\n\t\t\t}\n\t\t\trebasedMark = { ...(remains ?? {}), count: baseMark.count };\n\t\t} else {\n\t\t\trebasedMark = currMark;\n\t\t}\n\t\trebasedMark = makeDetachedMark(rebasedMark, cloneCellId(baseCellId));\n\t} else if (markFillsCells(baseMark)) {\n\t\trebasedMark = isAttachAndDetachEffect(currMark)\n\t\t\t? withNodeChange({ ...currMark.detach, count: currMark.count }, currMark.changes)\n\t\t\t: withCellId(currMark, undefined);\n\t} else if (isAttachAndDetachEffect(baseMark)) {\n\t\tassert(\n\t\t\tbaseMark.cellId !== undefined,\n\t\t\t0x81a /* AttachAndDetach mark should target an empty cell */,\n\t\t);\n\t\tif (isMoveIn(baseMark.attach) && isMoveOut(baseMark.detach)) {\n\t\t\t// Orphaned moves are effectively cell renames.\n\t\t\treturn withCellId(currMark, getDetachOutputCellId(baseMark.detach));\n\t\t}\n\t\tconst halfRebasedMark = rebaseMarkIgnoreChild(\n\t\t\tcurrMark,\n\t\t\t{ ...baseMark.attach, cellId: cloneCellId(baseMark.cellId), count: baseMark.count },\n\t\t\tmoveEffects,\n\t\t);\n\t\trebasedMark = rebaseMarkIgnoreChild(\n\t\t\thalfRebasedMark,\n\t\t\t{ ...baseMark.detach, count: baseMark.count },\n\t\t\tmoveEffects,\n\t\t);\n\t} else {\n\t\trebasedMark = currMark;\n\t}\n\treturn rebasedMark;\n}\n\n/**\n * @returns A pair of marks that represent the effects which should remain in place in the face of concurrent move,\n * and the effects that should be sent to the move destination.\n */\nfunction separateEffectsForMove(mark: MarkEffect): {\n\tremains?: MarkEffect;\n\tfollows?: MarkEffect;\n} {\n\tconst type = mark.type;\n\tswitch (type) {\n\t\tcase \"Remove\":\n\t\tcase \"MoveOut\":\n\t\t\treturn { follows: mark };\n\t\tcase \"AttachAndDetach\":\n\t\t\treturn { follows: mark.detach, remains: mark.attach };\n\t\tcase \"MoveIn\":\n\t\t\treturn { remains: mark };\n\t\tcase NoopMarkType:\n\t\t\treturn {};\n\t\tcase \"Insert\": {\n\t\t\tconst follows: MoveOut = {\n\t\t\t\ttype: \"MoveOut\",\n\t\t\t\tid: mark.id,\n\t\t\t};\n\t\t\tconst remains: MoveIn = {\n\t\t\t\ttype: \"MoveIn\",\n\t\t\t\tid: mark.id,\n\t\t\t};\n\t\t\tif (mark.revision !== undefined) {\n\t\t\t\tfollows.revision = mark.revision;\n\t\t\t\tremains.revision = mark.revision;\n\t\t\t}\n\t\t\treturn { remains, follows };\n\t\t}\n\t\tdefault:\n\t\t\tunreachableCase(type);\n\t}\n}\n\n// TODO: Reduce the duplication between this and other MoveEffect helpers\nfunction sendEffectToDest(\n\tmarkEffect: MarkEffect,\n\tmoveEffects: MoveEffectTable,\n\t{ revision, localId: id }: ChangeAtomId,\n\tcount: number,\n): void {\n\tconst effect = getMoveEffect(\n\t\tmoveEffects,\n\t\tCrossFieldTarget.Destination,\n\t\trevision,\n\t\tid,\n\t\tcount,\n\t\tfalse,\n\t);\n\tif (effect.length < count) {\n\t\tconst [markEffect1, markEffect2] = splitMarkEffect(markEffect, effect.length);\n\t\tconst newEffect =\n\t\t\teffect.value !== undefined\n\t\t\t\t? { ...effect.value, movedMark: markEffect1 }\n\t\t\t\t: { movedMark: markEffect1 };\n\t\tsetMoveEffect(\n\t\t\tmoveEffects,\n\t\t\tCrossFieldTarget.Destination,\n\t\t\trevision,\n\t\t\tid,\n\t\t\teffect.length,\n\t\t\tnewEffect,\n\t\t);\n\t\tsendEffectToDest(\n\t\t\tmarkEffect2,\n\t\t\tmoveEffects,\n\t\t\t{ revision, localId: brand(id + effect.length) },\n\t\t\tcount - effect.length,\n\t\t);\n\t} else {\n\t\tconst newEffect: MoveEffect =\n\t\t\teffect.value !== undefined\n\t\t\t\t? { ...effect.value, movedEffect: markEffect }\n\t\t\t\t: { movedEffect: markEffect };\n\t\tsetMoveEffect(moveEffects, CrossFieldTarget.Destination, revision, id, count, newEffect);\n\t}\n}\n\nfunction moveRebasedChanges(\n\tnodeChange: NodeId,\n\tmoveEffects: MoveEffectTable,\n\t{ revision, localId: id }: ChangeAtomId,\n): void {\n\tconst effect = getMoveEffect(\n\t\tmoveEffects,\n\t\tCrossFieldTarget.Destination,\n\t\trevision,\n\t\tid,\n\t\t1,\n\t\tfalse,\n\t).value;\n\n\tconst newEffect =\n\t\teffect !== undefined\n\t\t\t? { ...effect, rebasedChanges: nodeChange }\n\t\t\t: { rebasedChanges: nodeChange };\n\n\tsetMoveEffect(moveEffects, CrossFieldTarget.Destination, revision, id, 1, newEffect);\n}\n\nfunction rebaseNodeChange(\n\tcurrMark: Mark,\n\tbaseMark: Mark,\n\tnodeRebaser: NodeChangeRebaser,\n): Mark {\n\tconst baseChange = baseMark.changes;\n\tconst currChange = currMark.changes;\n\n\tif (baseChange === undefined && currChange === undefined) {\n\t\treturn currMark;\n\t}\n\n\tconst nodeState = nodeStateAfterMark(baseMark);\n\treturn withNodeChange(currMark, nodeRebaser(currChange, baseChange, nodeState));\n}\n\nfunction nodeStateAfterMark(mark: Mark): NodeAttachState {\n\tif (markEmptiesCells(mark)) {\n\t\treturn NodeAttachState.Detached;\n\t} else if (markFillsCells(mark)) {\n\t\treturn NodeAttachState.Attached;\n\t} else {\n\t\treturn mark.cellId === undefined ? NodeAttachState.Attached : NodeAttachState.Detached;\n\t}\n}\n\nfunction makeDetachedMark(mark: Mark, cellId: ChangeAtomId): Mark {\n\tassert(mark.cellId === undefined, 0x69f /* Expected mark to be attached */);\n\treturn { ...mark, cellId };\n}\n\nfunction withCellId<TMark extends Mark>(mark: TMark, cellId: CellId | undefined): TMark {\n\tconst newMark = { ...mark, cellId };\n\tif (cellId === undefined) {\n\t\tdelete newMark.cellId;\n\t}\n\treturn newMark;\n}\n\nfunction getMovedEffectFromBaseMark(\n\tmoveEffects: MoveEffectTable,\n\tbaseMark: Mark,\n): MarkEffect | undefined {\n\tif (isMoveIn(baseMark)) {\n\t\treturn getMovedEffect(moveEffects, baseMark.revision, baseMark.id, baseMark.count);\n\t} else if (isAttachAndDetachEffect(baseMark) && isMoveIn(baseMark.attach)) {\n\t\treturn getMovedEffect(\n\t\t\tmoveEffects,\n\t\t\tbaseMark.attach.revision,\n\t\t\tbaseMark.attach.id,\n\t\t\tbaseMark.count,\n\t\t);\n\t} else {\n\t\treturn undefined;\n\t}\n}\n\n// It is expected that the range from `id` to `id + count - 1` has the same move effect.\n// The call sites to this function are making queries about a mark which has already been split by a `MarkQueue`\n// to match the ranges in `moveEffects`.\n// TODO: Reduce the duplication between this and other MoveEffect helpers\nfunction getMovedEffect(\n\tmoveEffects: MoveEffectTable,\n\trevision: RevisionTag | undefined,\n\tid: MoveId,\n\tcount: number,\n): MarkEffect | undefined {\n\tconst effect = getMoveEffect(moveEffects, CrossFieldTarget.Destination, revision, id, count);\n\tassert(effect.length === count, 0x6f3 /* Expected effect to cover entire mark */);\n\tconst movedEffect = effect.value?.movedEffect;\n\tif (movedEffect !== undefined && movedEffect.type === \"MoveOut\") {\n\t\tmoveEffects.moveKey(CrossFieldTarget.Source, movedEffect.revision, movedEffect.id, count);\n\t}\n\n\treturn movedEffect;\n}\n\nfunction getMovedChangesFromBaseMark(\n\tmoveEffects: MoveEffectTable,\n\tbaseMark: Mark,\n): NodeId | undefined {\n\tif (isMoveIn(baseMark)) {\n\t\treturn getMovedNodeChanges(moveEffects, baseMark.revision, baseMark.id);\n\t} else if (isAttachAndDetachEffect(baseMark) && isMoveIn(baseMark.attach)) {\n\t\treturn getMovedNodeChanges(moveEffects, baseMark.attach.revision, baseMark.attach.id);\n\t} else {\n\t\treturn undefined;\n\t}\n}\n\nfunction getMovedNodeChanges(\n\tmoveEffects: MoveEffectTable,\n\trevision: RevisionTag | undefined,\n\tid: MoveId,\n): NodeId | undefined {\n\treturn getMoveEffect(moveEffects, CrossFieldTarget.Destination, revision, id, 1).value\n\t\t?.rebasedChanges;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequenceFieldChangeHandler.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/sequence-field/sequenceFieldChangeHandler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAKrE,OAAO,EAAE,KAAK,mBAAmB,EAAuB,MAAM,0BAA0B,CAAC;AAEzF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,MAAM,MAAM,0BAA0B,GAAG,kBAAkB,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;AAE5F,eAAO,MAAM,0BAA0B,EAAE,
|
|
1
|
+
{"version":3,"file":"sequenceFieldChangeHandler.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/sequence-field/sequenceFieldChangeHandler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAKrE,OAAO,EAAE,KAAK,mBAAmB,EAAuB,MAAM,0BAA0B,CAAC;AAEzF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,MAAM,MAAM,0BAA0B,GAAG,kBAAkB,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;AAE5F,eAAO,MAAM,0BAA0B,EAAE,0BAUxC,CAAC"}
|
|
@@ -7,7 +7,7 @@ import { sequenceFieldChangeRebaser } from "./sequenceFieldChangeRebaser.js";
|
|
|
7
7
|
import { sequenceFieldChangeCodecFactory } from "./sequenceFieldCodecs.js";
|
|
8
8
|
import { sequenceFieldEditor } from "./sequenceFieldEditor.js";
|
|
9
9
|
import { sequenceFieldToDelta } from "./sequenceFieldToDelta.js";
|
|
10
|
-
import { createEmpty, getNestedChanges, isEmpty } from "./utils.js";
|
|
10
|
+
import { createEmpty, getCrossFieldKeys, getNestedChanges, isEmpty } from "./utils.js";
|
|
11
11
|
export const sequenceFieldChangeHandler = {
|
|
12
12
|
rebaser: sequenceFieldChangeRebaser,
|
|
13
13
|
codecsFactory: sequenceFieldChangeCodecFactory,
|
|
@@ -17,5 +17,6 @@ export const sequenceFieldChangeHandler = {
|
|
|
17
17
|
isEmpty,
|
|
18
18
|
getNestedChanges,
|
|
19
19
|
createEmpty,
|
|
20
|
+
getCrossFieldKeys,
|
|
20
21
|
};
|
|
21
22
|
//# sourceMappingURL=sequenceFieldChangeHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequenceFieldChangeHandler.js","sourceRoot":"","sources":["../../../src/feature-libraries/sequence-field/sequenceFieldChangeHandler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAA4B,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"sequenceFieldChangeHandler.js","sourceRoot":"","sources":["../../../src/feature-libraries/sequence-field/sequenceFieldChangeHandler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAA4B,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAIvF,MAAM,CAAC,MAAM,0BAA0B,GAA+B;IACrE,OAAO,EAAE,0BAA0B;IACnC,aAAa,EAAE,+BAA+B;IAC9C,MAAM,EAAE,mBAAmB;IAC3B,SAAS,EAAE,oBAAoB;IAC/B,oBAAoB;IACpB,OAAO;IACP,gBAAgB;IAChB,WAAW;IACX,iBAAiB;CACjB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type { FieldChangeHandler } from \"../modular-schema/index.js\";\n\nimport { relevantRemovedRoots } from \"./relevantRemovedRoots.js\";\nimport { sequenceFieldChangeRebaser } from \"./sequenceFieldChangeRebaser.js\";\nimport { sequenceFieldChangeCodecFactory } from \"./sequenceFieldCodecs.js\";\nimport { type SequenceFieldEditor, sequenceFieldEditor } from \"./sequenceFieldEditor.js\";\nimport { sequenceFieldToDelta } from \"./sequenceFieldToDelta.js\";\nimport type { Changeset } from \"./types.js\";\nimport { createEmpty, getCrossFieldKeys, getNestedChanges, isEmpty } from \"./utils.js\";\n\nexport type SequenceFieldChangeHandler = FieldChangeHandler<Changeset, SequenceFieldEditor>;\n\nexport const sequenceFieldChangeHandler: SequenceFieldChangeHandler = {\n\trebaser: sequenceFieldChangeRebaser,\n\tcodecsFactory: sequenceFieldChangeCodecFactory,\n\teditor: sequenceFieldEditor,\n\tintoDelta: sequenceFieldToDelta,\n\trelevantRemovedRoots,\n\tisEmpty,\n\tgetNestedChanges,\n\tcreateEmpty,\n\tgetCrossFieldKeys,\n};\n"]}
|
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
import { type ChangeAtomId, type ChangesetLocalId, type RevisionMetadataSource, type RevisionTag } from "../../core/index.js";
|
|
6
|
-
import { type
|
|
7
|
-
import { type CrossFieldManager, type CrossFieldQuerySet, type NodeId } from "../modular-schema/index.js";
|
|
6
|
+
import { type NodeId, type CrossFieldKeyRange } from "../modular-schema/index.js";
|
|
8
7
|
import type { CellRename, DetachOfRemovedNodes, EmptyInputCellMark, MoveMarkEffect } from "./helperTypes.js";
|
|
9
8
|
import { type Attach, type AttachAndDetach, type CellId, type CellMark, type Changeset, type Detach, type Insert, type Mark, type MarkEffect, type NoopMark, type Remove } from "./types.js";
|
|
10
9
|
export declare function isEmpty(change: Changeset): boolean;
|
|
@@ -121,21 +120,6 @@ export declare function isRemoveMark(mark: Mark | undefined): mark is CellMark<R
|
|
|
121
120
|
* When `undefined` is returned, `lhs` is left untouched.
|
|
122
121
|
*/
|
|
123
122
|
export declare function tryMergeMarks(lhs: Mark, rhs: Readonly<Mark>): Mark | undefined;
|
|
124
|
-
/**
|
|
125
|
-
* @internal
|
|
126
|
-
*/
|
|
127
|
-
export interface CrossFieldTable<T = unknown> extends CrossFieldManager<T> {
|
|
128
|
-
srcQueries: CrossFieldQuerySet;
|
|
129
|
-
dstQueries: CrossFieldQuerySet;
|
|
130
|
-
isInvalidated: boolean;
|
|
131
|
-
mapSrc: Map<RevisionTag | undefined, RangeMap<T>>;
|
|
132
|
-
mapDst: Map<RevisionTag | undefined, RangeMap<T>>;
|
|
133
|
-
reset: () => void;
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* @internal
|
|
137
|
-
*/
|
|
138
|
-
export declare function newCrossFieldTable<T = unknown>(): CrossFieldTable<T>;
|
|
139
123
|
/**
|
|
140
124
|
* Splits the `mark` into two marks such that the first returned mark has length `length`.
|
|
141
125
|
* @param mark - The mark to split.
|
|
@@ -155,4 +139,5 @@ export declare function omitMarkEffect(mark: CellMark<unknown>): CellMark<NoopMa
|
|
|
155
139
|
export declare function withNodeChange<TMark extends CellMark<TKind>, TKind extends MarkEffect>(mark: TMark, changes: NodeId | undefined): TMark;
|
|
156
140
|
export declare function withRevision<TMark extends Mark>(mark: TMark, revision: RevisionTag | undefined): TMark;
|
|
157
141
|
export declare function getEndpoint(effect: MoveMarkEffect): ChangeAtomId;
|
|
142
|
+
export declare function getCrossFieldKeys(change: Changeset): CrossFieldKeyRange[];
|
|
158
143
|
//# sourceMappingURL=utils.d.ts.map
|