@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
|
@@ -2,11 +2,49 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
6
|
+
var useValue = arguments.length > 2;
|
|
7
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
8
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
9
|
+
}
|
|
10
|
+
return useValue ? value : void 0;
|
|
11
|
+
};
|
|
12
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
13
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
14
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
15
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
16
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
17
|
+
var _, done = false;
|
|
18
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
19
|
+
var context = {};
|
|
20
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
21
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
22
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
23
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
24
|
+
if (kind === "accessor") {
|
|
25
|
+
if (result === void 0) continue;
|
|
26
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
27
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
28
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
29
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
30
|
+
}
|
|
31
|
+
else if (_ = accept(result)) {
|
|
32
|
+
if (kind === "field") initializers.unshift(_);
|
|
33
|
+
else descriptor[key] = _;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
37
|
+
done = true;
|
|
38
|
+
};
|
|
39
|
+
var __setFunctionName = (this && this.__setFunctionName) || function (f, name, prefix) {
|
|
40
|
+
if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
|
|
41
|
+
return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
|
|
42
|
+
};
|
|
5
43
|
import { assert } from "@fluidframework/core-utils/internal";
|
|
6
44
|
import { SummaryTreeBuilder } from "@fluidframework/runtime-utils/internal";
|
|
7
45
|
import { SharedObject, } from "@fluidframework/shared-object-base/internal";
|
|
8
46
|
import { RevisionTagCodec, } from "../core/index.js";
|
|
9
|
-
import { brand } from "../util/index.js";
|
|
47
|
+
import { brand, Breakable, throwIfBroken, breakingClass, } from "../util/index.js";
|
|
10
48
|
import { getChangeReplaceType } from "./branch.js";
|
|
11
49
|
import { EditManager, minimumPossibleSequenceNumber } from "./editManager.js";
|
|
12
50
|
import { makeEditManagerCodec } from "./editManagerCodecs.js";
|
|
@@ -19,234 +57,259 @@ import { createChildLogger } from "@fluidframework/telemetry-utils/internal";
|
|
|
19
57
|
// TODO: Organize this to be adjacent to persisted types.
|
|
20
58
|
const summarizablesTreeKey = "indexes";
|
|
21
59
|
/**
|
|
22
|
-
* Generic shared tree, which needs to be configured with indexes, field kinds and
|
|
23
|
-
*
|
|
24
|
-
* TODO: actually implement
|
|
25
|
-
* TODO: is history policy a detail of what indexes are used, or is there something else to it?
|
|
60
|
+
* Generic shared tree, which needs to be configured with indexes, field kinds and other configuration.
|
|
26
61
|
*/
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
* @param summarizables - Summarizers for all indexes used by this tree
|
|
37
|
-
* @param changeFamily - The change family
|
|
38
|
-
* @param editManager - The edit manager
|
|
39
|
-
* @param id - The id of the shared object
|
|
40
|
-
* @param runtime - The IFluidDataStoreRuntime which contains the shared object
|
|
41
|
-
* @param attributes - Attributes of the shared object
|
|
42
|
-
* @param telemetryContextPrefix - The property prefix for telemetry pertaining to this object. See {@link ITelemetryContext}
|
|
43
|
-
*/
|
|
44
|
-
constructor(summarizables, changeFamily, options, formatOptions,
|
|
45
|
-
// Base class arguments
|
|
46
|
-
id, runtime, attributes, telemetryContextPrefix, schema, schemaPolicy, resubmitMachine, enricher) {
|
|
47
|
-
super(id, runtime, attributes, telemetryContextPrefix);
|
|
62
|
+
let SharedTreeCore = (() => {
|
|
63
|
+
let _classDecorators = [breakingClass];
|
|
64
|
+
let _classDescriptor;
|
|
65
|
+
let _classExtraInitializers = [];
|
|
66
|
+
let _classThis;
|
|
67
|
+
let _classSuper = SharedObject;
|
|
68
|
+
let _instanceExtraInitializers = [];
|
|
69
|
+
let _summarizeCore_decorators;
|
|
70
|
+
var SharedTreeCore = _classThis = class extends _classSuper {
|
|
48
71
|
/**
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
* Is `undefined` after (and only after) this instance is attached.
|
|
72
|
+
* Used to edit the state of the tree. Edits will be immediately applied locally to the tree.
|
|
73
|
+
* If there is no transaction currently ongoing, then the edits will be submitted to Fluid immediately as well.
|
|
52
74
|
*/
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
policy: schemaPolicy,
|
|
57
|
-
};
|
|
58
|
-
const rebaseLogger = createChildLogger({
|
|
59
|
-
logger: this.logger,
|
|
60
|
-
namespace: "Rebase",
|
|
61
|
-
});
|
|
62
|
-
assert(runtime.idCompressor !== undefined, 0x886 /* IdCompressor must be enabled to use SharedTree */);
|
|
63
|
-
this.idCompressor = runtime.idCompressor;
|
|
64
|
-
this.mintRevisionTag = () => this.idCompressor.generateCompressedId();
|
|
75
|
+
get editor() {
|
|
76
|
+
return this.getLocalBranch().editor;
|
|
77
|
+
}
|
|
65
78
|
/**
|
|
66
|
-
*
|
|
67
|
-
* This is sent alongside every op to identify which client the op originated from.
|
|
68
|
-
* This is used rather than the Fluid client ID because the Fluid client ID is not stable across reconnections.
|
|
79
|
+
* Gets the revision at the head of the trunk.
|
|
69
80
|
*/
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
81
|
+
get trunkHeadRevision() {
|
|
82
|
+
return this.editManager.getTrunkHead().revision;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* @param summarizables - Summarizers for all indexes used by this tree
|
|
86
|
+
* @param changeFamily - The change family
|
|
87
|
+
* @param editManager - The edit manager
|
|
88
|
+
* @param id - The id of the shared object
|
|
89
|
+
* @param runtime - The IFluidDataStoreRuntime which contains the shared object
|
|
90
|
+
* @param attributes - Attributes of the shared object
|
|
91
|
+
* @param telemetryContextPrefix - The property prefix for telemetry pertaining to this object. See {@link ITelemetryContext}
|
|
92
|
+
*/
|
|
93
|
+
constructor(summarizables, changeFamily, options, formatOptions,
|
|
94
|
+
// Base class arguments
|
|
95
|
+
id, runtime, attributes, telemetryContextPrefix, schema, schemaPolicy, resubmitMachine, enricher) {
|
|
96
|
+
super(id, runtime, attributes, telemetryContextPrefix);
|
|
97
|
+
this.breaker = (__runInitializers(this, _instanceExtraInitializers), new Breakable("Shared Tree"));
|
|
98
|
+
/**
|
|
99
|
+
* The sequence number that this instance is at.
|
|
100
|
+
* This number is artificial in that it is made up by this instance as opposed to being provided by the runtime.
|
|
101
|
+
* Is `undefined` after (and only after) this instance is attached.
|
|
102
|
+
*/
|
|
103
|
+
this.detachedRevision = minimumPossibleSequenceNumber;
|
|
104
|
+
this.schemaAndPolicy = {
|
|
105
|
+
schema,
|
|
106
|
+
policy: schemaPolicy,
|
|
107
|
+
};
|
|
108
|
+
const rebaseLogger = createChildLogger({
|
|
109
|
+
logger: this.logger,
|
|
110
|
+
namespace: "Rebase",
|
|
111
|
+
});
|
|
112
|
+
assert(runtime.idCompressor !== undefined, 0x886 /* IdCompressor must be enabled to use SharedTree */);
|
|
113
|
+
this.idCompressor = runtime.idCompressor;
|
|
114
|
+
this.mintRevisionTag = () => this.idCompressor.generateCompressedId();
|
|
115
|
+
/**
|
|
116
|
+
* A random ID that uniquely identifies this client in the collab session.
|
|
117
|
+
* This is sent alongside every op to identify which client the op originated from.
|
|
118
|
+
* This is used rather than the Fluid client ID because the Fluid client ID is not stable across reconnections.
|
|
119
|
+
*/
|
|
120
|
+
const localSessionId = runtime.idCompressor.localSessionId;
|
|
121
|
+
this.editManager = new EditManager(changeFamily, localSessionId, this.mintRevisionTag, rebaseLogger);
|
|
122
|
+
this.editManager.localBranch.on("transactionStarted", () => {
|
|
123
|
+
this.commitEnricher.startNewTransaction();
|
|
124
|
+
});
|
|
125
|
+
this.editManager.localBranch.on("transactionAborted", () => {
|
|
126
|
+
this.commitEnricher.abortCurrentTransaction();
|
|
127
|
+
});
|
|
128
|
+
this.editManager.localBranch.on("transactionCommitted", () => {
|
|
129
|
+
this.commitEnricher.commitCurrentTransaction();
|
|
130
|
+
});
|
|
131
|
+
this.editManager.localBranch.on("beforeChange", (change) => {
|
|
132
|
+
// Ensure that any previously prepared commits that have not been sent are purged.
|
|
133
|
+
this.commitEnricher.purgePreparedCommits();
|
|
134
|
+
if (this.detachedRevision !== undefined) {
|
|
135
|
+
// Edits submitted before the first attach do not need enrichment because they will not be applied by peers.
|
|
92
136
|
}
|
|
93
|
-
else {
|
|
94
|
-
|
|
95
|
-
|
|
137
|
+
else if (change.type === "append") {
|
|
138
|
+
if (this.getLocalBranch().isTransacting()) {
|
|
139
|
+
for (const newCommit of change.newCommits) {
|
|
140
|
+
this.commitEnricher.ingestTransactionCommit(newCommit);
|
|
141
|
+
}
|
|
96
142
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
!this.getLocalBranch().isTransacting()) {
|
|
102
|
-
assert(change.newCommits.length === 1, 0x983 /* Unexpected number of commits when committing transaction */);
|
|
103
|
-
this.commitEnricher.prepareCommit(change.newCommits[0], true);
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
this.editManager.localBranch.on("afterChange", (change) => {
|
|
107
|
-
if (this.getLocalBranch().isTransacting()) {
|
|
108
|
-
// We do not submit ops for changes that are part of a transaction.
|
|
109
|
-
return;
|
|
110
|
-
}
|
|
111
|
-
if (change.type === "append" ||
|
|
112
|
-
(change.type === "replace" && getChangeReplaceType(change) === "transactionCommit")) {
|
|
113
|
-
if (this.detachedRevision !== undefined) {
|
|
114
|
-
for (const newCommit of change.newCommits) {
|
|
115
|
-
this.submitCommit(newCommit, this.schemaAndPolicy);
|
|
143
|
+
else {
|
|
144
|
+
for (const newCommit of change.newCommits) {
|
|
145
|
+
this.commitEnricher.prepareCommit(newCommit, false);
|
|
146
|
+
}
|
|
116
147
|
}
|
|
117
148
|
}
|
|
118
|
-
else
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
149
|
+
else if (change.type === "replace" &&
|
|
150
|
+
getChangeReplaceType(change) === "transactionCommit" &&
|
|
151
|
+
!this.getLocalBranch().isTransacting()) {
|
|
152
|
+
assert(change.newCommits.length === 1, 0x983 /* Unexpected number of commits when committing transaction */);
|
|
153
|
+
this.commitEnricher.prepareCommit(change.newCommits[0], true);
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
this.editManager.localBranch.on("afterChange", (change) => {
|
|
157
|
+
if (this.getLocalBranch().isTransacting()) {
|
|
158
|
+
// We do not submit ops for changes that are part of a transaction.
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
if (change.type === "append" ||
|
|
162
|
+
(change.type === "replace" && getChangeReplaceType(change) === "transactionCommit")) {
|
|
163
|
+
if (this.detachedRevision !== undefined) {
|
|
164
|
+
for (const newCommit of change.newCommits) {
|
|
165
|
+
this.submitCommit(newCommit, this.schemaAndPolicy);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
for (const newCommit of change.newCommits) {
|
|
170
|
+
const prepared = this.commitEnricher.getPreparedCommit(newCommit);
|
|
171
|
+
this.submitCommit(prepared, this.schemaAndPolicy);
|
|
172
|
+
}
|
|
122
173
|
}
|
|
123
174
|
}
|
|
175
|
+
});
|
|
176
|
+
const revisionTagCodec = new RevisionTagCodec(runtime.idCompressor);
|
|
177
|
+
const editManagerCodec = makeEditManagerCodec(this.editManager.changeFamily.codecs, revisionTagCodec, options, formatOptions.editManager);
|
|
178
|
+
this.summarizables = [
|
|
179
|
+
new EditManagerSummarizer(this.editManager, editManagerCodec, this.idCompressor, this.schemaAndPolicy),
|
|
180
|
+
...summarizables,
|
|
181
|
+
];
|
|
182
|
+
assert(new Set(this.summarizables.map((e) => e.key)).size === this.summarizables.length, 0x350 /* Index summary element keys must be unique */);
|
|
183
|
+
this.messageCodec = makeMessageCodec(changeFamily.codecs, new RevisionTagCodec(runtime.idCompressor), options, formatOptions.message);
|
|
184
|
+
const changeEnricher = enricher ?? new NoOpChangeEnricher();
|
|
185
|
+
this.resubmitMachine =
|
|
186
|
+
resubmitMachine ??
|
|
187
|
+
new DefaultResubmitMachine(changeFamily.rebaser.invert.bind(changeFamily.rebaser), changeEnricher);
|
|
188
|
+
this.commitEnricher = new BranchCommitEnricher(changeFamily.rebaser, changeEnricher);
|
|
189
|
+
}
|
|
190
|
+
// TODO: SharedObject's merging of the two summary methods into summarizeCore is not what we want here:
|
|
191
|
+
// We might want to not subclass it, or override/reimplement most of its functionality.
|
|
192
|
+
summarizeCore(serializer, telemetryContext, incrementalSummaryContext) {
|
|
193
|
+
const builder = new SummaryTreeBuilder();
|
|
194
|
+
const summarizableBuilder = new SummaryTreeBuilder();
|
|
195
|
+
// Merge the summaries of all summarizables together under a single ISummaryTree
|
|
196
|
+
for (const s of this.summarizables) {
|
|
197
|
+
summarizableBuilder.addWithStats(s.key, s.getAttachSummary((contents) => serializer.stringify(contents, this.handle), undefined, undefined, telemetryContext, incrementalSummaryContext));
|
|
124
198
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
const editManagerCodec = makeEditManagerCodec(this.editManager.changeFamily.codecs, revisionTagCodec, options, formatOptions.editManager);
|
|
128
|
-
this.summarizables = [
|
|
129
|
-
new EditManagerSummarizer(this.editManager, editManagerCodec, this.idCompressor, this.schemaAndPolicy),
|
|
130
|
-
...summarizables,
|
|
131
|
-
];
|
|
132
|
-
assert(new Set(this.summarizables.map((e) => e.key)).size === this.summarizables.length, 0x350 /* Index summary element keys must be unique */);
|
|
133
|
-
this.messageCodec = makeMessageCodec(changeFamily.codecs, new RevisionTagCodec(runtime.idCompressor), options, formatOptions.message);
|
|
134
|
-
const changeEnricher = enricher ?? new NoOpChangeEnricher();
|
|
135
|
-
this.resubmitMachine =
|
|
136
|
-
resubmitMachine ??
|
|
137
|
-
new DefaultResubmitMachine(changeFamily.rebaser.invert.bind(changeFamily.rebaser), changeEnricher);
|
|
138
|
-
this.commitEnricher = new BranchCommitEnricher(changeFamily.rebaser, changeEnricher);
|
|
139
|
-
}
|
|
140
|
-
// TODO: SharedObject's merging of the two summary methods into summarizeCore is not what we want here:
|
|
141
|
-
// We might want to not subclass it, or override/reimplement most of its functionality.
|
|
142
|
-
summarizeCore(serializer, telemetryContext, incrementalSummaryContext) {
|
|
143
|
-
const builder = new SummaryTreeBuilder();
|
|
144
|
-
const summarizableBuilder = new SummaryTreeBuilder();
|
|
145
|
-
// Merge the summaries of all summarizables together under a single ISummaryTree
|
|
146
|
-
for (const s of this.summarizables) {
|
|
147
|
-
summarizableBuilder.addWithStats(s.key, s.getAttachSummary((contents) => serializer.stringify(contents, this.handle), undefined, undefined, telemetryContext, incrementalSummaryContext));
|
|
199
|
+
builder.addWithStats(summarizablesTreeKey, summarizableBuilder.getSummaryTree());
|
|
200
|
+
return builder.getSummaryTree();
|
|
148
201
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
async loadCore(services) {
|
|
153
|
-
const loadSummaries = this.summarizables.map(async (summaryElement) => summaryElement.load(scopeStorageService(services, summarizablesTreeKey, summaryElement.key), (contents) => this.serializer.parse(contents)));
|
|
154
|
-
await Promise.all(loadSummaries);
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Submits an op to the Fluid runtime containing the given commit
|
|
158
|
-
* @param commit - the commit to submit
|
|
159
|
-
* @returns the submitted commit. This is undefined if the underlying `SharedObject` is not attached,
|
|
160
|
-
* and may differ from `commit` due to enrichments like detached tree refreshers.
|
|
161
|
-
*/
|
|
162
|
-
submitCommit(commit, schemaAndPolicy, isResubmit = false) {
|
|
163
|
-
assert(
|
|
164
|
-
// Edits should not be submitted until all transactions finish
|
|
165
|
-
!this.getLocalBranch().isTransacting() || isResubmit, 0x68b /* Unexpected edit submitted during transaction */);
|
|
166
|
-
assert(this.isAttached() === (this.detachedRevision === undefined), 0x95a /* Detached revision should only be set when not attached */);
|
|
167
|
-
// Edits submitted before the first attach are treated as sequenced because they will be included
|
|
168
|
-
// in the attach summary that is uploaded to the service.
|
|
169
|
-
// Until this attach workflow happens, this instance essentially behaves as a centralized data structure.
|
|
170
|
-
if (this.detachedRevision !== undefined) {
|
|
171
|
-
const newRevision = brand(this.detachedRevision + 1);
|
|
172
|
-
this.detachedRevision = newRevision;
|
|
173
|
-
this.editManager.addSequencedChange({ ...commit, sessionId: this.editManager.localSessionId }, newRevision, this.detachedRevision);
|
|
174
|
-
this.editManager.advanceMinimumSequenceNumber(newRevision);
|
|
175
|
-
return undefined;
|
|
202
|
+
async loadCore(services) {
|
|
203
|
+
const loadSummaries = this.summarizables.map(async (summaryElement) => summaryElement.load(scopeStorageService(services, summarizablesTreeKey, summaryElement.key), (contents) => this.serializer.parse(contents)));
|
|
204
|
+
await Promise.all(loadSummaries);
|
|
176
205
|
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
//
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
206
|
+
/**
|
|
207
|
+
* Submits an op to the Fluid runtime containing the given commit
|
|
208
|
+
* @param commit - the commit to submit
|
|
209
|
+
* @returns the submitted commit. This is undefined if the underlying `SharedObject` is not attached,
|
|
210
|
+
* and may differ from `commit` due to enrichments like detached tree refreshers.
|
|
211
|
+
*/
|
|
212
|
+
submitCommit(commit, schemaAndPolicy, isResubmit = false) {
|
|
213
|
+
assert(
|
|
214
|
+
// Edits should not be submitted until all transactions finish
|
|
215
|
+
!this.getLocalBranch().isTransacting() || isResubmit, 0x68b /* Unexpected edit submitted during transaction */);
|
|
216
|
+
assert(this.isAttached() === (this.detachedRevision === undefined), 0x95a /* Detached revision should only be set when not attached */);
|
|
217
|
+
// Edits submitted before the first attach are treated as sequenced because they will be included
|
|
218
|
+
// in the attach summary that is uploaded to the service.
|
|
219
|
+
// Until this attach workflow happens, this instance essentially behaves as a centralized data structure.
|
|
220
|
+
if (this.detachedRevision !== undefined) {
|
|
221
|
+
const newRevision = brand(this.detachedRevision + 1);
|
|
222
|
+
this.detachedRevision = newRevision;
|
|
223
|
+
this.editManager.addSequencedChange({ ...commit, sessionId: this.editManager.localSessionId }, newRevision, this.detachedRevision);
|
|
224
|
+
this.editManager.advanceMinimumSequenceNumber(newRevision);
|
|
225
|
+
return undefined;
|
|
226
|
+
}
|
|
227
|
+
const message = this.messageCodec.encode({
|
|
228
|
+
commit,
|
|
229
|
+
sessionId: this.editManager.localSessionId,
|
|
230
|
+
}, {
|
|
231
|
+
idCompressor: this.idCompressor,
|
|
232
|
+
schema: schemaAndPolicy,
|
|
233
|
+
});
|
|
234
|
+
this.submitLocalMessage(message, {
|
|
235
|
+
// Clone the schema to ensure that during resubmit the schema has not been mutated by later changes
|
|
236
|
+
schema: schemaAndPolicy.schema.clone(),
|
|
237
|
+
policy: schemaAndPolicy.policy,
|
|
238
|
+
});
|
|
239
|
+
this.resubmitMachine.onCommitSubmitted(commit);
|
|
210
240
|
}
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
if (this.resubmitMachine.isInResubmitPhase === false) {
|
|
220
|
-
const toResubmit = this.editManager.getLocalCommits();
|
|
221
|
-
assert(commit === toResubmit[0], 0x95d /* Resubmit phase should start with the oldest local commit */);
|
|
222
|
-
this.resubmitMachine.prepareForResubmit(toResubmit);
|
|
241
|
+
processCore(message, local, localOpMetadata) {
|
|
242
|
+
// Empty context object is passed in, as our decode function is schema-agnostic.
|
|
243
|
+
const { commit, sessionId } = this.messageCodec.decode(message.contents, {
|
|
244
|
+
idCompressor: this.idCompressor,
|
|
245
|
+
});
|
|
246
|
+
this.editManager.addSequencedChange({ ...commit, sessionId }, brand(message.sequenceNumber), brand(message.referenceSequenceNumber));
|
|
247
|
+
this.resubmitMachine.onSequencedCommitApplied(local);
|
|
248
|
+
this.editManager.advanceMinimumSequenceNumber(brand(message.minimumSequenceNumber));
|
|
223
249
|
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
250
|
+
/**
|
|
251
|
+
* @returns the head commit of the root local branch
|
|
252
|
+
*/
|
|
253
|
+
getLocalBranch() {
|
|
254
|
+
return this.editManager.localBranch;
|
|
255
|
+
}
|
|
256
|
+
onDisconnect() { }
|
|
257
|
+
didAttach() {
|
|
258
|
+
if (this.detachedRevision !== undefined) {
|
|
259
|
+
this.detachedRevision = undefined;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
reSubmitCore(content, localOpMetadata) {
|
|
263
|
+
// Empty context object is passed in, as our decode function is schema-agnostic.
|
|
264
|
+
const { commit: { revision }, } = this.messageCodec.decode(this.serializer.decode(content), {
|
|
265
|
+
idCompressor: this.idCompressor,
|
|
266
|
+
});
|
|
267
|
+
const [commit] = this.editManager.findLocalCommit(revision);
|
|
268
|
+
// If a resubmit phase is not already in progress, then this must be the first commit of a new resubmit phase.
|
|
269
|
+
if (this.resubmitMachine.isInResubmitPhase === false) {
|
|
270
|
+
const toResubmit = this.editManager.getLocalCommits();
|
|
271
|
+
assert(commit === toResubmit[0], 0x95d /* Resubmit phase should start with the oldest local commit */);
|
|
272
|
+
this.resubmitMachine.prepareForResubmit(toResubmit);
|
|
273
|
+
}
|
|
274
|
+
assert(isClonableSchemaPolicy(localOpMetadata), 0x95e /* Local metadata must contain schema and policy. */);
|
|
275
|
+
assert(this.resubmitMachine.isInResubmitPhase !== false, 0x984 /* Invalid resubmit outside of resubmit phase */);
|
|
276
|
+
const enrichedCommit = this.resubmitMachine.peekNextCommit();
|
|
277
|
+
this.submitCommit(enrichedCommit, localOpMetadata, true);
|
|
278
|
+
}
|
|
279
|
+
applyStashedOp(content) {
|
|
280
|
+
assert(!this.getLocalBranch().isTransacting(), 0x674 /* Unexpected transaction is open while applying stashed ops */);
|
|
281
|
+
// Empty context object is passed in, as our decode function is schema-agnostic.
|
|
282
|
+
const { commit: { revision, change }, } = this.messageCodec.decode(content, { idCompressor: this.idCompressor });
|
|
283
|
+
this.editManager.localBranch.apply(change, revision);
|
|
284
|
+
}
|
|
285
|
+
getGCData(fullGC) {
|
|
286
|
+
const gcNodes = super.getGCData(fullGC).gcNodes;
|
|
287
|
+
for (const s of this.summarizables) {
|
|
288
|
+
for (const [id, routes] of Object.entries(s.getGCData(fullGC).gcNodes)) {
|
|
289
|
+
gcNodes[id] ?? (gcNodes[id] = []);
|
|
290
|
+
for (const route of routes) {
|
|
291
|
+
gcNodes[id].push(route);
|
|
292
|
+
}
|
|
242
293
|
}
|
|
243
294
|
}
|
|
295
|
+
return {
|
|
296
|
+
gcNodes,
|
|
297
|
+
};
|
|
244
298
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
299
|
+
};
|
|
300
|
+
__setFunctionName(_classThis, "SharedTreeCore");
|
|
301
|
+
(() => {
|
|
302
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
303
|
+
_summarizeCore_decorators = [throwIfBroken];
|
|
304
|
+
__esDecorate(_classThis, null, _summarizeCore_decorators, { kind: "method", name: "summarizeCore", static: false, private: false, access: { has: obj => "summarizeCore" in obj, get: obj => obj.summarizeCore }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
305
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
306
|
+
SharedTreeCore = _classThis = _classDescriptor.value;
|
|
307
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
308
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
309
|
+
})();
|
|
310
|
+
return SharedTreeCore = _classThis;
|
|
311
|
+
})();
|
|
312
|
+
export { SharedTreeCore };
|
|
250
313
|
function isClonableSchemaPolicy(maybeSchemaPolicy) {
|
|
251
314
|
const schemaAndPolicy = maybeSchemaPolicy;
|
|
252
315
|
return schemaAndPolicy.schema !== undefined && schemaAndPolicy.policy !== undefined;
|