@fluidframework/tree 2.1.0-276326 → 2.1.0-281041
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 +7 -1
- package/README.md +134 -29
- package/api-report/tree.alpha.api.md +1 -0
- package/api-report/tree.beta.api.md +1 -0
- package/api-report/tree.public.api.md +1 -0
- 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 +14 -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/visitDelta.d.ts.map +1 -1
- package/dist/core/tree/visitDelta.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/flex-map-tree/mapTreeNode.d.ts +0 -2
- package/dist/feature-libraries/flex-map-tree/mapTreeNode.d.ts.map +1 -1
- package/dist/feature-libraries/flex-map-tree/mapTreeNode.js +0 -20
- package/dist/feature-libraries/flex-map-tree/mapTreeNode.js.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +0 -38
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/dist/feature-libraries/flex-tree/index.d.ts +1 -1
- package/dist/feature-libraries/flex-tree/index.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/index.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.d.ts +0 -4
- package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.js +1 -14
- package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyNode.d.ts +0 -1
- package/dist/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyNode.js +0 -3
- package/dist/feature-libraries/flex-tree/lazyNode.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 +2 -2
- 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 +830 -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/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.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 +3 -2
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +150 -90
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +2 -1
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree-core/branch.d.ts.map +1 -1
- package/dist/shared-tree-core/branch.js +1 -0
- package/dist/shared-tree-core/branch.js.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.d.ts +4 -6
- package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.js +265 -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/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 +2 -4
- package/dist/simple-tree/proxies.js.map +1 -1
- package/dist/simple-tree/schemaFactory.d.ts +24 -1
- package/dist/simple-tree/schemaFactory.d.ts.map +1 -1
- package/dist/simple-tree/schemaFactory.js +40 -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.map +1 -1
- package/dist/simple-tree/treeNodeApi.js +10 -10
- package/dist/simple-tree/treeNodeApi.js.map +1 -1
- package/dist/simple-tree/types.d.ts +22 -3
- package/dist/simple-tree/types.d.ts.map +1 -1
- package/dist/simple-tree/types.js +32 -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 +23 -3
- package/dist/util/nestedMap.d.ts.map +1 -1
- package/dist/util/nestedMap.js +38 -7
- 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/docs/README.md +1 -1
- package/docs/main/compatibility.md +1 -1
- package/docs/main/stored-and-view-schema.md +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 +15 -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/visitDelta.d.ts.map +1 -1
- package/lib/core/tree/visitDelta.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/flex-map-tree/mapTreeNode.d.ts +0 -2
- package/lib/feature-libraries/flex-map-tree/mapTreeNode.d.ts.map +1 -1
- package/lib/feature-libraries/flex-map-tree/mapTreeNode.js +0 -20
- package/lib/feature-libraries/flex-map-tree/mapTreeNode.js.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +0 -38
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/lib/feature-libraries/flex-tree/index.d.ts +1 -1
- package/lib/feature-libraries/flex-tree/index.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/index.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.d.ts +0 -4
- package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.js +1 -14
- package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyNode.d.ts +0 -1
- package/lib/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyNode.js +0 -3
- package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
- package/lib/feature-libraries/index.d.ts +3 -3
- package/lib/feature-libraries/index.d.ts.map +1 -1
- package/lib/feature-libraries/index.js +2 -2
- package/lib/feature-libraries/index.js.map +1 -1
- package/lib/feature-libraries/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 +829 -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/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.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 +3 -2
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +151 -90
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +2 -1
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree-core/branch.d.ts.map +1 -1
- package/lib/shared-tree-core/branch.js +1 -0
- package/lib/shared-tree-core/branch.js.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.d.ts +4 -6
- package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.js +267 -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 +38 -21
- package/lib/simple-tree/arrayNode.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 +2 -4
- package/lib/simple-tree/proxies.js.map +1 -1
- package/lib/simple-tree/schemaFactory.d.ts +24 -1
- package/lib/simple-tree/schemaFactory.d.ts.map +1 -1
- package/lib/simple-tree/schemaFactory.js +38 -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.map +1 -1
- package/lib/simple-tree/treeNodeApi.js +11 -11
- package/lib/simple-tree/treeNodeApi.js.map +1 -1
- package/lib/simple-tree/types.d.ts +22 -3
- package/lib/simple-tree/types.d.ts.map +1 -1
- package/lib/simple-tree/types.js +32 -21
- 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 +23 -3
- package/lib/util/nestedMap.d.ts.map +1 -1
- package/lib/util/nestedMap.js +36 -6
- 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 +17 -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/visitDelta.ts +1 -0
- 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/flex-map-tree/mapTreeNode.ts +0 -30
- package/src/feature-libraries/flex-tree/flexTreeTypes.ts +0 -43
- package/src/feature-libraries/flex-tree/index.ts +0 -1
- package/src/feature-libraries/flex-tree/lazyField.ts +1 -21
- package/src/feature-libraries/flex-tree/lazyNode.ts +0 -6
- package/src/feature-libraries/index.ts +1 -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 +1529 -454
- 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/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 +5 -2
- package/src/shared-tree/treeCheckout.ts +6 -2
- package/src/shared-tree-core/branch.ts +1 -0
- package/src/shared-tree-core/sharedTreeCore.ts +18 -6
- package/src/simple-tree/arrayNode.ts +49 -22
- 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 +2 -4
- package/src/simple-tree/schemaFactory.ts +45 -2
- package/src/simple-tree/schemaTypes.ts +36 -1
- package/src/simple-tree/toFlexSchema.ts +5 -4
- package/src/simple-tree/tree.ts +65 -4
- package/src/simple-tree/treeNodeApi.ts +15 -15
- package/src/simple-tree/types.ts +60 -30
- package/src/util/breakable.ts +214 -0
- package/src/util/index.ts +10 -0
- package/src/util/nestedMap.ts +49 -11
- 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
|
@@ -130,6 +130,8 @@ export const EncodedModularChangeset = Type.Object(
|
|
|
130
130
|
maxId: Type.Optional(ChangesetLocalIdSchema),
|
|
131
131
|
changes: EncodedFieldChangeMap,
|
|
132
132
|
revisions: Type.ReadonlyOptional(Type.Array(EncodedRevisionInfo)),
|
|
133
|
+
// TODO#8574: separating `builds` and `refreshers` here means that we encode their `EncodedBuilds.trees` separately.
|
|
134
|
+
// This can lead to a less efficient wire representation because of duplicated schema/shape information.
|
|
133
135
|
builds: Type.Optional(EncodedBuilds),
|
|
134
136
|
refreshers: Type.Optional(EncodedBuilds),
|
|
135
137
|
/**
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
+
import type { BTree } from "@tylerbu/sorted-btree-es6";
|
|
6
7
|
import type {
|
|
7
8
|
ChangeAtomId,
|
|
8
9
|
ChangeAtomIdMap,
|
|
@@ -10,9 +11,11 @@ import type {
|
|
|
10
11
|
FieldKey,
|
|
11
12
|
FieldKindIdentifier,
|
|
12
13
|
RevisionInfo,
|
|
14
|
+
RevisionTag,
|
|
13
15
|
} from "../../core/index.js";
|
|
14
16
|
import type { Brand } from "../../util/index.js";
|
|
15
17
|
import type { TreeChunk } from "../chunked-forest/index.js";
|
|
18
|
+
import type { CrossFieldTarget } from "./crossFieldQueries.js";
|
|
16
19
|
|
|
17
20
|
/**
|
|
18
21
|
* @internal
|
|
@@ -30,13 +33,61 @@ export interface ModularChangeset extends HasFieldChanges {
|
|
|
30
33
|
*/
|
|
31
34
|
readonly revisions?: readonly RevisionInfo[];
|
|
32
35
|
readonly fieldChanges: FieldChangeMap;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Maps from this changeset's canonical ID for a node (see comment on node aliases) to the changes for that node.
|
|
39
|
+
*/
|
|
33
40
|
readonly nodeChanges: ChangeAtomIdMap<NodeChangeset>;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Maps from this changeset's canonical ID for a node to the ID for the field which contains that node.
|
|
44
|
+
*/
|
|
45
|
+
// TODO: Should this be merged with `nodeChanges`?
|
|
46
|
+
readonly nodeToParent: ChangeAtomIdMap<FieldId>;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Maps from a node ID to another ID for the same node.
|
|
50
|
+
* If a node ID used in this changeset has no entry in this table, then it is the canonical ID for that node.
|
|
51
|
+
* The aliases form a set of trees, where the root of each tree is a canonical ID.
|
|
52
|
+
*
|
|
53
|
+
* When composing changesets with different canonical IDs for the same node,
|
|
54
|
+
* one of those IDs becomes the canonical ID for the composition, while the other is added to this table as an alias.
|
|
55
|
+
*
|
|
56
|
+
* Node aliases are preserved when composing changesets so we can avoid having to find and update all changed node IDs
|
|
57
|
+
* in the field IDs in nodeToParent and crossFieldKeys.
|
|
58
|
+
*/
|
|
59
|
+
readonly nodeAliases: ChangeAtomIdMap<NodeId>;
|
|
60
|
+
readonly crossFieldKeys: CrossFieldKeyTable;
|
|
34
61
|
readonly constraintViolationCount?: number;
|
|
35
62
|
readonly builds?: ChangeAtomIdMap<TreeChunk>;
|
|
36
63
|
readonly destroys?: ChangeAtomIdMap<number>;
|
|
37
64
|
readonly refreshers?: ChangeAtomIdMap<TreeChunk>;
|
|
38
65
|
}
|
|
39
66
|
|
|
67
|
+
export type TupleBTree<K, V> = Brand<BTree<K, V>, "TupleBTree">;
|
|
68
|
+
export type CrossFieldKeyTable = TupleBTree<CrossFieldKeyRange, FieldId>;
|
|
69
|
+
export type CrossFieldKeyRange = readonly [
|
|
70
|
+
CrossFieldTarget,
|
|
71
|
+
RevisionTag | undefined,
|
|
72
|
+
ChangesetLocalId,
|
|
73
|
+
/**
|
|
74
|
+
* The length of this range.
|
|
75
|
+
* TODO: This does not need to be part of the key and could be part of the value instead.
|
|
76
|
+
*/
|
|
77
|
+
number,
|
|
78
|
+
];
|
|
79
|
+
|
|
80
|
+
export type CrossFieldKey = readonly [
|
|
81
|
+
CrossFieldTarget,
|
|
82
|
+
RevisionTag | undefined,
|
|
83
|
+
ChangesetLocalId,
|
|
84
|
+
];
|
|
85
|
+
|
|
86
|
+
export interface FieldId {
|
|
87
|
+
readonly nodeId: NodeId | undefined;
|
|
88
|
+
readonly field: FieldKey;
|
|
89
|
+
}
|
|
90
|
+
|
|
40
91
|
/**
|
|
41
92
|
* @internal
|
|
42
93
|
*/
|
|
@@ -713,6 +713,7 @@ export const optionalChangeHandler: FieldChangeHandler<
|
|
|
713
713
|
getNestedChanges,
|
|
714
714
|
|
|
715
715
|
createEmpty: () => ({ moves: [], childChanges: [] }),
|
|
716
|
+
getCrossFieldKeys: (_change) => [],
|
|
716
717
|
};
|
|
717
718
|
|
|
718
719
|
function getNestedChanges(change: OptionalChangeset): [NodeId, number | undefined][] {
|
|
@@ -194,7 +194,6 @@ function invertMark(
|
|
|
194
194
|
return applyMovedChanges(invertedMark, mark.revision, crossFieldManager);
|
|
195
195
|
}
|
|
196
196
|
case "AttachAndDetach": {
|
|
197
|
-
// Which should get the child change? Don't want to invert twice
|
|
198
197
|
const attach: Mark = {
|
|
199
198
|
count: mark.count,
|
|
200
199
|
cellId: mark.cellId,
|
|
@@ -294,6 +293,7 @@ function applyMovedChanges(
|
|
|
294
293
|
}
|
|
295
294
|
|
|
296
295
|
if (entry.value !== undefined) {
|
|
296
|
+
manager.onMoveIn(entry.value);
|
|
297
297
|
return [withNodeChange<CellMark<MoveOut>, MoveOut>(mark, entry.value)];
|
|
298
298
|
}
|
|
299
299
|
|
|
@@ -270,6 +270,7 @@ function rebaseMark(
|
|
|
270
270
|
0x8dc /* Unexpected collision of new node changes */,
|
|
271
271
|
);
|
|
272
272
|
rebasedMark.changes = movedNodeChanges;
|
|
273
|
+
moveEffects.onMoveIn(movedNodeChanges);
|
|
273
274
|
}
|
|
274
275
|
|
|
275
276
|
return rebaseMarkIgnoreChild(rebasedMark, baseMark, moveEffects);
|
|
@@ -514,7 +515,12 @@ function getMovedEffect(
|
|
|
514
515
|
): MarkEffect | undefined {
|
|
515
516
|
const effect = getMoveEffect(moveEffects, CrossFieldTarget.Destination, revision, id, count);
|
|
516
517
|
assert(effect.length === count, 0x6f3 /* Expected effect to cover entire mark */);
|
|
517
|
-
|
|
518
|
+
const movedEffect = effect.value?.movedEffect;
|
|
519
|
+
if (movedEffect !== undefined && movedEffect.type === "MoveOut") {
|
|
520
|
+
moveEffects.moveKey(CrossFieldTarget.Source, movedEffect.revision, movedEffect.id, count);
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
return movedEffect;
|
|
518
524
|
}
|
|
519
525
|
|
|
520
526
|
function getMovedChangesFromBaseMark(
|
|
@@ -11,7 +11,7 @@ import { sequenceFieldChangeCodecFactory } from "./sequenceFieldCodecs.js";
|
|
|
11
11
|
import { type SequenceFieldEditor, sequenceFieldEditor } from "./sequenceFieldEditor.js";
|
|
12
12
|
import { sequenceFieldToDelta } from "./sequenceFieldToDelta.js";
|
|
13
13
|
import type { Changeset } from "./types.js";
|
|
14
|
-
import { createEmpty, getNestedChanges, isEmpty } from "./utils.js";
|
|
14
|
+
import { createEmpty, getCrossFieldKeys, getNestedChanges, isEmpty } from "./utils.js";
|
|
15
15
|
|
|
16
16
|
export type SequenceFieldChangeHandler = FieldChangeHandler<Changeset, SequenceFieldEditor>;
|
|
17
17
|
|
|
@@ -24,4 +24,5 @@ export const sequenceFieldChangeHandler: SequenceFieldChangeHandler = {
|
|
|
24
24
|
isEmpty,
|
|
25
25
|
getNestedChanges,
|
|
26
26
|
createEmpty,
|
|
27
|
+
getCrossFieldKeys,
|
|
27
28
|
};
|
|
@@ -13,20 +13,11 @@ import {
|
|
|
13
13
|
areEqualChangeAtomIds,
|
|
14
14
|
makeChangeAtomId,
|
|
15
15
|
} from "../../core/index.js";
|
|
16
|
+
import { type Mutable, brand, fail } from "../../util/index.js";
|
|
16
17
|
import {
|
|
17
|
-
type Mutable,
|
|
18
|
-
type RangeMap,
|
|
19
|
-
brand,
|
|
20
|
-
fail,
|
|
21
|
-
getFromRangeMap,
|
|
22
|
-
} from "../../util/index.js";
|
|
23
|
-
import {
|
|
24
|
-
type CrossFieldManager,
|
|
25
|
-
type CrossFieldQuerySet,
|
|
26
18
|
CrossFieldTarget,
|
|
27
19
|
type NodeId,
|
|
28
|
-
|
|
29
|
-
setInCrossFieldMap,
|
|
20
|
+
type CrossFieldKeyRange,
|
|
30
21
|
} from "../modular-schema/index.js";
|
|
31
22
|
|
|
32
23
|
import type {
|
|
@@ -47,7 +38,6 @@ import {
|
|
|
47
38
|
type Insert,
|
|
48
39
|
type Mark,
|
|
49
40
|
type MarkEffect,
|
|
50
|
-
type MoveId,
|
|
51
41
|
type MoveIn,
|
|
52
42
|
type MoveOut,
|
|
53
43
|
type NoopMark,
|
|
@@ -708,79 +698,6 @@ function tryMergeEffects(
|
|
|
708
698
|
return undefined;
|
|
709
699
|
}
|
|
710
700
|
|
|
711
|
-
/**
|
|
712
|
-
* @internal
|
|
713
|
-
*/
|
|
714
|
-
export interface CrossFieldTable<T = unknown> extends CrossFieldManager<T> {
|
|
715
|
-
srcQueries: CrossFieldQuerySet;
|
|
716
|
-
dstQueries: CrossFieldQuerySet;
|
|
717
|
-
isInvalidated: boolean;
|
|
718
|
-
mapSrc: Map<RevisionTag | undefined, RangeMap<T>>;
|
|
719
|
-
mapDst: Map<RevisionTag | undefined, RangeMap<T>>;
|
|
720
|
-
reset: () => void;
|
|
721
|
-
}
|
|
722
|
-
|
|
723
|
-
/**
|
|
724
|
-
* @internal
|
|
725
|
-
*/
|
|
726
|
-
export function newCrossFieldTable<T = unknown>(): CrossFieldTable<T> {
|
|
727
|
-
const srcQueries: CrossFieldQuerySet = new Map();
|
|
728
|
-
const dstQueries: CrossFieldQuerySet = new Map();
|
|
729
|
-
const mapSrc: Map<RevisionTag | undefined, RangeMap<T>> = new Map();
|
|
730
|
-
const mapDst: Map<RevisionTag | undefined, RangeMap<T>> = new Map();
|
|
731
|
-
|
|
732
|
-
const getMap = (target: CrossFieldTarget): Map<RevisionTag | undefined, RangeMap<T>> =>
|
|
733
|
-
target === CrossFieldTarget.Source ? mapSrc : mapDst;
|
|
734
|
-
|
|
735
|
-
const getQueries = (target: CrossFieldTarget): CrossFieldQuerySet =>
|
|
736
|
-
target === CrossFieldTarget.Source ? srcQueries : dstQueries;
|
|
737
|
-
|
|
738
|
-
const table = {
|
|
739
|
-
srcQueries,
|
|
740
|
-
dstQueries,
|
|
741
|
-
isInvalidated: false,
|
|
742
|
-
mapSrc,
|
|
743
|
-
mapDst,
|
|
744
|
-
|
|
745
|
-
get: (
|
|
746
|
-
target: CrossFieldTarget,
|
|
747
|
-
revision: RevisionTag | undefined,
|
|
748
|
-
id: MoveId,
|
|
749
|
-
count: number,
|
|
750
|
-
addDependency: boolean,
|
|
751
|
-
) => {
|
|
752
|
-
if (addDependency) {
|
|
753
|
-
addCrossFieldQuery(getQueries(target), revision, id, count);
|
|
754
|
-
}
|
|
755
|
-
return getFromRangeMap(getMap(target).get(revision) ?? [], id, count);
|
|
756
|
-
},
|
|
757
|
-
set: (
|
|
758
|
-
target: CrossFieldTarget,
|
|
759
|
-
revision: RevisionTag | undefined,
|
|
760
|
-
id: MoveId,
|
|
761
|
-
count: number,
|
|
762
|
-
value: T,
|
|
763
|
-
invalidateDependents: boolean,
|
|
764
|
-
) => {
|
|
765
|
-
if (
|
|
766
|
-
invalidateDependents &&
|
|
767
|
-
getFromRangeMap(getQueries(target).get(revision) ?? [], id, count) !== undefined
|
|
768
|
-
) {
|
|
769
|
-
table.isInvalidated = true;
|
|
770
|
-
}
|
|
771
|
-
setInCrossFieldMap(getMap(target), revision, id, count, value);
|
|
772
|
-
},
|
|
773
|
-
|
|
774
|
-
reset: () => {
|
|
775
|
-
table.isInvalidated = false;
|
|
776
|
-
table.srcQueries.clear();
|
|
777
|
-
table.dstQueries.clear();
|
|
778
|
-
},
|
|
779
|
-
};
|
|
780
|
-
|
|
781
|
-
return table;
|
|
782
|
-
}
|
|
783
|
-
|
|
784
701
|
/**
|
|
785
702
|
* Splits the `mark` into two marks such that the first returned mark has length `length`.
|
|
786
703
|
* @param mark - The mark to split.
|
|
@@ -969,3 +886,38 @@ export function getEndpoint(effect: MoveMarkEffect): ChangeAtomId {
|
|
|
969
886
|
}
|
|
970
887
|
: { revision: effect.revision, localId: effect.id };
|
|
971
888
|
}
|
|
889
|
+
|
|
890
|
+
export function getCrossFieldKeys(change: Changeset): CrossFieldKeyRange[] {
|
|
891
|
+
const keys: CrossFieldKeyRange[] = [];
|
|
892
|
+
for (const mark of change) {
|
|
893
|
+
keys.push(...getCrossFieldKeysForMarkEffect(mark, mark.count));
|
|
894
|
+
}
|
|
895
|
+
|
|
896
|
+
return keys;
|
|
897
|
+
}
|
|
898
|
+
|
|
899
|
+
function getCrossFieldKeysForMarkEffect(
|
|
900
|
+
effect: MarkEffect,
|
|
901
|
+
count: number,
|
|
902
|
+
): CrossFieldKeyRange[] {
|
|
903
|
+
switch (effect.type) {
|
|
904
|
+
case "Insert":
|
|
905
|
+
// An insert behaves like a move where the source and destination are at the same location.
|
|
906
|
+
// An insert can become a move when after rebasing.
|
|
907
|
+
return [
|
|
908
|
+
[CrossFieldTarget.Source, effect.revision, effect.id, count],
|
|
909
|
+
[CrossFieldTarget.Destination, effect.revision, effect.id, count],
|
|
910
|
+
];
|
|
911
|
+
case "MoveOut":
|
|
912
|
+
return [[CrossFieldTarget.Source, effect.revision, effect.id, count]];
|
|
913
|
+
case "MoveIn":
|
|
914
|
+
return [[CrossFieldTarget.Destination, effect.revision, effect.id, count]];
|
|
915
|
+
case "AttachAndDetach":
|
|
916
|
+
return [
|
|
917
|
+
...getCrossFieldKeysForMarkEffect(effect.attach, count),
|
|
918
|
+
...getCrossFieldKeysForMarkEffect(effect.detach, count),
|
|
919
|
+
];
|
|
920
|
+
default:
|
|
921
|
+
return [];
|
|
922
|
+
}
|
|
923
|
+
}
|
|
@@ -19,6 +19,7 @@ import {
|
|
|
19
19
|
type TreeStoredSchema,
|
|
20
20
|
type TreeTypeSet,
|
|
21
21
|
type ValueSchema,
|
|
22
|
+
identifierFieldKindIdentifier,
|
|
22
23
|
} from "../../core/index.js";
|
|
23
24
|
import {
|
|
24
25
|
type Assume,
|
|
@@ -28,6 +29,7 @@ import {
|
|
|
28
29
|
mapIterable,
|
|
29
30
|
oneFromSet,
|
|
30
31
|
type requireAssignableTo,
|
|
32
|
+
filterIterable,
|
|
31
33
|
} from "../../util/index.js";
|
|
32
34
|
import { FieldKinds } from "../default-schema/index.js";
|
|
33
35
|
import type { FlexFieldKind, FullSchemaPolicy } from "../modular-schema/index.js";
|
|
@@ -154,6 +156,7 @@ export class FlexObjectNodeSchema<
|
|
|
154
156
|
const out Specification extends Unenforced<FlexObjectNodeFields> = FlexObjectNodeFields,
|
|
155
157
|
> extends TreeNodeSchemaBase<Name, Specification> {
|
|
156
158
|
protected _typeCheck2?: MakeNominal;
|
|
159
|
+
public readonly identifierFieldKeys: readonly FieldKey[] = [];
|
|
157
160
|
|
|
158
161
|
public static create<
|
|
159
162
|
const Name extends string,
|
|
@@ -192,6 +195,13 @@ export class FlexObjectNodeSchema<
|
|
|
192
195
|
) {
|
|
193
196
|
const fields = mapIterable(objectNodeFields, ([k, v]) => [k, v.stored] as const);
|
|
194
197
|
super(builder, name, info, new ObjectNodeStoredSchema(new Map(fields)));
|
|
198
|
+
this.identifierFieldKeys = Array.from(
|
|
199
|
+
filterIterable(
|
|
200
|
+
objectNodeFields.entries(),
|
|
201
|
+
([k, f]) => f.kind.identifier === identifierFieldKindIdentifier,
|
|
202
|
+
),
|
|
203
|
+
([k]) => k,
|
|
204
|
+
);
|
|
195
205
|
}
|
|
196
206
|
|
|
197
207
|
public override getFieldSchema(field: FieldKey): FlexFieldSchema {
|
package/src/index.ts
CHANGED
package/src/packageVersion.ts
CHANGED
|
@@ -39,7 +39,7 @@ import {
|
|
|
39
39
|
mapTreeFromNodeData,
|
|
40
40
|
prepareContentForHydration,
|
|
41
41
|
} from "../simple-tree/index.js";
|
|
42
|
-
import { disposeSymbol } from "../util/index.js";
|
|
42
|
+
import { Breakable, breakingClass, disposeSymbol, type WithBreakable } from "../util/index.js";
|
|
43
43
|
|
|
44
44
|
import { canInitialize, ensureSchema, initialize } from "./schematizeTree.js";
|
|
45
45
|
import type { TreeCheckout } from "./treeCheckout.js";
|
|
@@ -48,8 +48,9 @@ import { CheckoutFlexTreeView } from "./treeView.js";
|
|
|
48
48
|
/**
|
|
49
49
|
* Implementation of TreeView wrapping a FlexTreeView.
|
|
50
50
|
*/
|
|
51
|
+
@breakingClass
|
|
51
52
|
export class SchematizingSimpleTreeView<in out TRootSchema extends ImplicitFieldSchema>
|
|
52
|
-
implements TreeView<TRootSchema
|
|
53
|
+
implements TreeView<TRootSchema>, WithBreakable
|
|
53
54
|
{
|
|
54
55
|
/**
|
|
55
56
|
* The view is set to undefined when this object is disposed or the view schema does not support viewing the document's stored schema.
|
|
@@ -86,6 +87,7 @@ export class SchematizingSimpleTreeView<in out TRootSchema extends ImplicitField
|
|
|
86
87
|
public readonly checkout: TreeCheckout,
|
|
87
88
|
public readonly config: TreeViewConfiguration<TRootSchema>,
|
|
88
89
|
public readonly nodeKeyManager: NodeKeyManager,
|
|
90
|
+
public readonly breaker: Breakable = new Breakable("SchematizingSimpleTreeView"),
|
|
89
91
|
) {
|
|
90
92
|
const policy = {
|
|
91
93
|
...defaultSchemaPolicy,
|
|
@@ -306,6 +308,7 @@ export class SchematizingSimpleTreeView<in out TRootSchema extends ImplicitField
|
|
|
306
308
|
}
|
|
307
309
|
|
|
308
310
|
public get root(): TreeFieldFromImplicitField<TRootSchema> {
|
|
311
|
+
this.breaker.use();
|
|
309
312
|
if (!this.compatibility.canView) {
|
|
310
313
|
throw new UsageError(
|
|
311
314
|
"Document is out of schema. Check TreeView.compatibility before accessing TreeView.root.",
|
|
@@ -316,6 +319,7 @@ export class SchematizingSimpleTreeView<in out TRootSchema extends ImplicitField
|
|
|
316
319
|
}
|
|
317
320
|
|
|
318
321
|
public set root(newRoot: InsertableTreeFieldFromImplicitField<TRootSchema>) {
|
|
322
|
+
this.breaker.use();
|
|
319
323
|
if (!this.compatibility.canView) {
|
|
320
324
|
throw new UsageError(
|
|
321
325
|
"Document is out of schema. Check TreeView.compatibility before accessing TreeView.root.",
|
|
@@ -53,7 +53,6 @@ import {
|
|
|
53
53
|
import type {
|
|
54
54
|
ITree,
|
|
55
55
|
ImplicitFieldSchema,
|
|
56
|
-
TreeView,
|
|
57
56
|
TreeViewConfiguration,
|
|
58
57
|
} from "../simple-tree/index.js";
|
|
59
58
|
|
|
@@ -65,6 +64,7 @@ import type { SharedTreeChange } from "./sharedTreeChangeTypes.js";
|
|
|
65
64
|
import type { SharedTreeEditBuilder } from "./sharedTreeEditBuilder.js";
|
|
66
65
|
import { type CheckoutEvents, type TreeCheckout, createTreeCheckout } from "./treeCheckout.js";
|
|
67
66
|
import type { CheckoutFlexTreeView, FlexTreeView } from "./treeView.js";
|
|
67
|
+
import { breakingClass, throwIfBroken } from "../util/index.js";
|
|
68
68
|
|
|
69
69
|
/**
|
|
70
70
|
* Copy of data from an {@link ISharedTree} at some point in time.
|
|
@@ -163,6 +163,7 @@ function getCodecVersions(formatVersion: number): ExplicitCodecVersions {
|
|
|
163
163
|
*
|
|
164
164
|
* TODO: detail compatibility requirements.
|
|
165
165
|
*/
|
|
166
|
+
@breakingClass
|
|
166
167
|
export class SharedTree
|
|
167
168
|
extends SharedTreeCore<SharedTreeEditBuilder, SharedTreeChange>
|
|
168
169
|
implements ISharedTree
|
|
@@ -289,6 +290,7 @@ export class SharedTree
|
|
|
289
290
|
);
|
|
290
291
|
}
|
|
291
292
|
|
|
293
|
+
@throwIfBroken
|
|
292
294
|
public contentSnapshot(): SharedTreeContentSnapshot {
|
|
293
295
|
const cursor = this.checkout.forest.allocateCursor("contentSnapshot");
|
|
294
296
|
try {
|
|
@@ -322,11 +324,12 @@ export class SharedTree
|
|
|
322
324
|
|
|
323
325
|
public viewWith<TRoot extends ImplicitFieldSchema>(
|
|
324
326
|
config: TreeViewConfiguration<TRoot>,
|
|
325
|
-
):
|
|
327
|
+
): SchematizingSimpleTreeView<TRoot> {
|
|
326
328
|
return new SchematizingSimpleTreeView(
|
|
327
329
|
this.checkout,
|
|
328
330
|
config,
|
|
329
331
|
createNodeKeyManager(this.runtime.idCompressor),
|
|
332
|
+
this.breaker,
|
|
330
333
|
);
|
|
331
334
|
}
|
|
332
335
|
|
|
@@ -572,6 +572,10 @@ export class TreeCheckout implements ITreeCheckoutFork {
|
|
|
572
572
|
|
|
573
573
|
public rebase(view: TreeCheckout): void {
|
|
574
574
|
this.checkNotDisposed();
|
|
575
|
+
assert(
|
|
576
|
+
!view.transaction.inProgress(),
|
|
577
|
+
"A view cannot be rebased while it has a pending transaction",
|
|
578
|
+
);
|
|
575
579
|
view.branch.rebaseOnto(this.branch);
|
|
576
580
|
}
|
|
577
581
|
|
|
@@ -585,8 +589,8 @@ export class TreeCheckout implements ITreeCheckoutFork {
|
|
|
585
589
|
public merge(view: TreeCheckout, disposeView = true): void {
|
|
586
590
|
this.checkNotDisposed();
|
|
587
591
|
assert(
|
|
588
|
-
!this.transaction.inProgress()
|
|
589
|
-
|
|
592
|
+
!this.transaction.inProgress(),
|
|
593
|
+
"Views cannot be merged into a view while it has a pending transaction",
|
|
590
594
|
);
|
|
591
595
|
while (view.transaction.inProgress()) {
|
|
592
596
|
view.transaction.commit();
|
|
@@ -244,6 +244,7 @@ export class SharedTreeBranch<
|
|
|
244
244
|
): [change: TChange, newCommit: GraphCommit<TChange>] {
|
|
245
245
|
this.assertNotDisposed();
|
|
246
246
|
|
|
247
|
+
// TODO: This should not be necessary when receiving changes from other clients.
|
|
247
248
|
const changeWithRevision = this.changeFamily.rebaser.changeRevision(change, revision);
|
|
248
249
|
|
|
249
250
|
const newHead = mintCommit(this.head, {
|
|
@@ -34,7 +34,14 @@ import {
|
|
|
34
34
|
type SchemaPolicy,
|
|
35
35
|
type TreeStoredSchemaRepository,
|
|
36
36
|
} from "../core/index.js";
|
|
37
|
-
import {
|
|
37
|
+
import {
|
|
38
|
+
type JsonCompatibleReadOnly,
|
|
39
|
+
brand,
|
|
40
|
+
Breakable,
|
|
41
|
+
type WithBreakable,
|
|
42
|
+
throwIfBroken,
|
|
43
|
+
breakingClass,
|
|
44
|
+
} from "../util/index.js";
|
|
38
45
|
|
|
39
46
|
import { type SharedTreeBranch, getChangeReplaceType } from "./branch.js";
|
|
40
47
|
import { EditManager, minimumPossibleSequenceNumber } from "./editManager.js";
|
|
@@ -62,12 +69,15 @@ export interface ClonableSchemaAndPolicy extends SchemaAndPolicy {
|
|
|
62
69
|
}
|
|
63
70
|
|
|
64
71
|
/**
|
|
65
|
-
* Generic shared tree, which needs to be configured with indexes, field kinds and
|
|
66
|
-
*
|
|
67
|
-
* TODO: actually implement
|
|
68
|
-
* TODO: is history policy a detail of what indexes are used, or is there something else to it?
|
|
72
|
+
* Generic shared tree, which needs to be configured with indexes, field kinds and other configuration.
|
|
69
73
|
*/
|
|
70
|
-
|
|
74
|
+
@breakingClass
|
|
75
|
+
export class SharedTreeCore<TEditor extends ChangeFamilyEditor, TChange>
|
|
76
|
+
extends SharedObject
|
|
77
|
+
implements WithBreakable
|
|
78
|
+
{
|
|
79
|
+
public readonly breaker: Breakable = new Breakable("Shared Tree");
|
|
80
|
+
|
|
71
81
|
private readonly editManager: EditManager<TEditor, TChange, ChangeFamily<TEditor, TChange>>;
|
|
72
82
|
private readonly summarizables: readonly Summarizable[];
|
|
73
83
|
/**
|
|
@@ -262,6 +272,7 @@ export class SharedTreeCore<TEditor extends ChangeFamilyEditor, TChange> extends
|
|
|
262
272
|
|
|
263
273
|
// TODO: SharedObject's merging of the two summary methods into summarizeCore is not what we want here:
|
|
264
274
|
// We might want to not subclass it, or override/reimplement most of its functionality.
|
|
275
|
+
@throwIfBroken
|
|
265
276
|
protected summarizeCore(
|
|
266
277
|
serializer: IFluidSerializer,
|
|
267
278
|
telemetryContext?: ITelemetryContext,
|
|
@@ -304,6 +315,7 @@ export class SharedTreeCore<TEditor extends ChangeFamilyEditor, TChange> extends
|
|
|
304
315
|
* @returns the submitted commit. This is undefined if the underlying `SharedObject` is not attached,
|
|
305
316
|
* and may differ from `commit` due to enrichments like detached tree refreshers.
|
|
306
317
|
*/
|
|
318
|
+
|
|
307
319
|
private submitCommit(
|
|
308
320
|
commit: GraphCommit<TChange>,
|
|
309
321
|
schemaAndPolicy: ClonableSchemaAndPolicy,
|