@fluidframework/tree 2.41.0 → 2.42.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/.vscode/settings.json +1 -0
- package/CHANGELOG.md +33 -0
- package/api-report/tree.alpha.api.md +11 -7
- package/dist/alpha.d.ts +1 -0
- package/dist/codec/codec.d.ts +23 -3
- package/dist/codec/codec.d.ts.map +1 -1
- package/dist/codec/codec.js.map +1 -1
- package/dist/codec/index.d.ts +1 -1
- package/dist/codec/index.d.ts.map +1 -1
- package/dist/codec/index.js.map +1 -1
- package/dist/codec/versioned/codec.d.ts +35 -2
- package/dist/codec/versioned/codec.d.ts.map +1 -1
- package/dist/codec/versioned/codec.js +38 -3
- package/dist/codec/versioned/codec.js.map +1 -1
- package/dist/core/tree/detachedFieldIndex.d.ts +2 -2
- package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndex.js +5 -1
- package/dist/core/tree/detachedFieldIndex.js.map +1 -1
- package/dist/core/tree/mapTree.d.ts +2 -1
- package/dist/core/tree/mapTree.d.ts.map +1 -1
- package/dist/core/tree/mapTree.js +11 -5
- package/dist/core/tree/mapTree.js.map +1 -1
- package/dist/core/tree/visitorUtils.d.ts +2 -2
- package/dist/core/tree/visitorUtils.d.ts.map +1 -1
- package/dist/core/tree/visitorUtils.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +3 -2
- package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/dist/feature-libraries/default-schema/schemaChecker.d.ts +4 -3
- package/dist/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/schemaChecker.js +4 -3
- package/dist/feature-libraries/default-schema/schemaChecker.js.map +1 -1
- package/dist/feature-libraries/flex-tree/context.d.ts +14 -6
- package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/context.js.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +34 -14
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.js +4 -0
- package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/dist/feature-libraries/flex-tree/index.d.ts +2 -2
- 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 +6 -6
- package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyNode.d.ts +3 -2
- package/dist/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyNode.js +3 -0
- package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts +2 -2
- package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.js +7 -7
- package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/dist/feature-libraries/index.d.ts +2 -2
- package/dist/feature-libraries/index.d.ts.map +1 -1
- package/dist/feature-libraries/index.js +4 -2
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/mapTreeCursor.d.ts +39 -3
- package/dist/feature-libraries/mapTreeCursor.d.ts.map +1 -1
- package/dist/feature-libraries/mapTreeCursor.js +45 -7
- package/dist/feature-libraries/mapTreeCursor.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +5 -5
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
- package/dist/feature-libraries/treeCursorUtils.d.ts +5 -1
- package/dist/feature-libraries/treeCursorUtils.d.ts.map +1 -1
- package/dist/feature-libraries/treeCursorUtils.js +8 -2
- package/dist/feature-libraries/treeCursorUtils.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/shared-tree/schematizingTreeView.d.ts +11 -1
- package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +36 -22
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree/sharedTree.d.ts +3 -3
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +1 -0
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/tree.d.ts.map +1 -1
- package/dist/shared-tree/tree.js +8 -24
- package/dist/shared-tree/tree.js.map +1 -1
- package/dist/shared-tree/treeAlpha.d.ts +2 -3
- package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
- package/dist/shared-tree/treeAlpha.js +13 -15
- package/dist/shared-tree/treeAlpha.js.map +1 -1
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +5 -2
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/simple-tree/api/configuration.d.ts +2 -2
- package/dist/simple-tree/api/configuration.js +1 -1
- package/dist/simple-tree/api/configuration.js.map +1 -1
- package/dist/simple-tree/api/create.d.ts +9 -4
- package/dist/simple-tree/api/create.d.ts.map +1 -1
- package/dist/simple-tree/api/create.js +29 -16
- package/dist/simple-tree/api/create.js.map +1 -1
- package/dist/simple-tree/api/customTree.d.ts +4 -0
- package/dist/simple-tree/api/customTree.d.ts.map +1 -1
- package/dist/simple-tree/api/customTree.js +9 -1
- package/dist/simple-tree/api/customTree.js.map +1 -1
- package/dist/simple-tree/api/index.d.ts +1 -1
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js +1 -2
- package/dist/simple-tree/api/index.js.map +1 -1
- package/dist/simple-tree/api/schemaFactory.d.ts +10 -2
- package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactory.js +38 -9
- package/dist/simple-tree/api/schemaFactory.js.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.d.ts +14 -3
- package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.js +32 -17
- package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
- package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
- package/dist/simple-tree/api/verboseTree.js +12 -9
- package/dist/simple-tree/api/verboseTree.js.map +1 -1
- package/dist/simple-tree/core/getOrCreateNode.d.ts.map +1 -1
- package/dist/simple-tree/core/getOrCreateNode.js +2 -1
- package/dist/simple-tree/core/getOrCreateNode.js.map +1 -1
- package/dist/simple-tree/core/index.d.ts +2 -2
- package/dist/simple-tree/core/index.d.ts.map +1 -1
- package/dist/simple-tree/core/index.js +3 -4
- package/dist/simple-tree/core/index.js.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.d.ts +15 -25
- package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js +26 -33
- package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/dist/simple-tree/core/unhydratedFlexTree.d.ts +128 -59
- package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
- package/dist/simple-tree/core/unhydratedFlexTree.js +169 -182
- package/dist/simple-tree/core/unhydratedFlexTree.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 +5 -5
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.js +5 -6
- package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/index.d.ts +1 -1
- package/dist/simple-tree/node-kinds/index.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/index.js +1 -2
- package/dist/simple-tree/node-kinds/index.js.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.js +2 -2
- package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/index.d.ts +1 -1
- package/dist/simple-tree/node-kinds/object/index.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/index.js +1 -2
- package/dist/simple-tree/node-kinds/object/index.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.d.ts +3 -14
- package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.js +12 -43
- package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/dist/simple-tree/prepareForInsertion.d.ts +20 -6
- package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
- package/dist/simple-tree/prepareForInsertion.js +26 -19
- package/dist/simple-tree/prepareForInsertion.js.map +1 -1
- package/dist/simple-tree/schemaTypes.d.ts +8 -8
- package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
- package/dist/simple-tree/schemaTypes.js.map +1 -1
- package/dist/simple-tree/toStoredSchema.d.ts +6 -1
- package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
- package/dist/simple-tree/toStoredSchema.js +6 -3
- package/dist/simple-tree/toStoredSchema.js.map +1 -1
- package/dist/simple-tree/{toMapTree.d.ts → unhydratedFlexTreeFromInsertable.d.ts} +12 -23
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -0
- package/dist/simple-tree/{toMapTree.js → unhydratedFlexTreeFromInsertable.js} +103 -185
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -0
- package/dist/treeFactory.d.ts.map +1 -1
- package/dist/treeFactory.js +6 -1
- package/dist/treeFactory.js.map +1 -1
- package/dist/util/index.d.ts +1 -1
- package/dist/util/index.d.ts.map +1 -1
- package/dist/util/index.js +2 -1
- package/dist/util/index.js.map +1 -1
- package/dist/util/utils.d.ts +4 -0
- package/dist/util/utils.d.ts.map +1 -1
- package/dist/util/utils.js +8 -1
- package/dist/util/utils.js.map +1 -1
- package/docs/user-facing/schema-evolution.md +1 -1
- package/lib/alpha.d.ts +1 -0
- package/lib/codec/codec.d.ts +23 -3
- package/lib/codec/codec.d.ts.map +1 -1
- package/lib/codec/codec.js.map +1 -1
- package/lib/codec/index.d.ts +1 -1
- package/lib/codec/index.d.ts.map +1 -1
- package/lib/codec/index.js.map +1 -1
- package/lib/codec/versioned/codec.d.ts +35 -2
- package/lib/codec/versioned/codec.d.ts.map +1 -1
- package/lib/codec/versioned/codec.js +36 -2
- package/lib/codec/versioned/codec.js.map +1 -1
- package/lib/core/tree/detachedFieldIndex.d.ts +2 -2
- package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndex.js +6 -2
- package/lib/core/tree/detachedFieldIndex.js.map +1 -1
- package/lib/core/tree/mapTree.d.ts +2 -1
- package/lib/core/tree/mapTree.d.ts.map +1 -1
- package/lib/core/tree/mapTree.js +11 -5
- package/lib/core/tree/mapTree.js.map +1 -1
- package/lib/core/tree/visitorUtils.d.ts +2 -2
- package/lib/core/tree/visitorUtils.d.ts.map +1 -1
- package/lib/core/tree/visitorUtils.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +3 -2
- package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/lib/feature-libraries/default-schema/schemaChecker.d.ts +4 -3
- package/lib/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/schemaChecker.js +4 -3
- package/lib/feature-libraries/default-schema/schemaChecker.js.map +1 -1
- package/lib/feature-libraries/flex-tree/context.d.ts +14 -6
- package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/context.js.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +34 -14
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.js +4 -0
- package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/lib/feature-libraries/flex-tree/index.d.ts +2 -2
- 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 +6 -6
- package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyNode.d.ts +3 -2
- package/lib/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyNode.js +3 -0
- package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts +2 -2
- package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.js +2 -2
- package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/lib/feature-libraries/index.d.ts +2 -2
- package/lib/feature-libraries/index.d.ts.map +1 -1
- package/lib/feature-libraries/index.js +1 -1
- package/lib/feature-libraries/index.js.map +1 -1
- package/lib/feature-libraries/mapTreeCursor.d.ts +39 -3
- package/lib/feature-libraries/mapTreeCursor.d.ts.map +1 -1
- package/lib/feature-libraries/mapTreeCursor.js +43 -7
- package/lib/feature-libraries/mapTreeCursor.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +5 -5
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
- package/lib/feature-libraries/treeCursorUtils.d.ts +5 -1
- package/lib/feature-libraries/treeCursorUtils.d.ts.map +1 -1
- package/lib/feature-libraries/treeCursorUtils.js +8 -2
- package/lib/feature-libraries/treeCursorUtils.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/shared-tree/schematizingTreeView.d.ts +11 -1
- package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +34 -21
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/shared-tree/sharedTree.d.ts +3 -3
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +2 -1
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/tree.d.ts.map +1 -1
- package/lib/shared-tree/tree.js +2 -18
- package/lib/shared-tree/tree.js.map +1 -1
- package/lib/shared-tree/treeAlpha.d.ts +2 -3
- package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
- package/lib/shared-tree/treeAlpha.js +4 -6
- package/lib/shared-tree/treeAlpha.js.map +1 -1
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +6 -3
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/simple-tree/api/configuration.d.ts +2 -2
- package/lib/simple-tree/api/configuration.js +1 -1
- package/lib/simple-tree/api/configuration.js.map +1 -1
- package/lib/simple-tree/api/create.d.ts +9 -4
- package/lib/simple-tree/api/create.d.ts.map +1 -1
- package/lib/simple-tree/api/create.js +22 -9
- package/lib/simple-tree/api/create.js.map +1 -1
- package/lib/simple-tree/api/customTree.d.ts +4 -0
- package/lib/simple-tree/api/customTree.d.ts.map +1 -1
- package/lib/simple-tree/api/customTree.js +7 -0
- package/lib/simple-tree/api/customTree.js.map +1 -1
- package/lib/simple-tree/api/index.d.ts +1 -1
- package/lib/simple-tree/api/index.d.ts.map +1 -1
- package/lib/simple-tree/api/index.js +1 -1
- package/lib/simple-tree/api/index.js.map +1 -1
- package/lib/simple-tree/api/schemaFactory.d.ts +10 -2
- package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactory.js +40 -11
- package/lib/simple-tree/api/schemaFactory.js.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.d.ts +14 -3
- package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.js +35 -20
- package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
- package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
- package/lib/simple-tree/api/verboseTree.js +13 -10
- package/lib/simple-tree/api/verboseTree.js.map +1 -1
- package/lib/simple-tree/core/getOrCreateNode.d.ts.map +1 -1
- package/lib/simple-tree/core/getOrCreateNode.js +3 -2
- package/lib/simple-tree/core/getOrCreateNode.js.map +1 -1
- package/lib/simple-tree/core/index.d.ts +2 -2
- package/lib/simple-tree/core/index.d.ts.map +1 -1
- package/lib/simple-tree/core/index.js +2 -2
- package/lib/simple-tree/core/index.js.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.d.ts +15 -25
- package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js +24 -32
- package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.d.ts +128 -59
- package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.js +166 -181
- package/lib/simple-tree/core/unhydratedFlexTree.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 +3 -3
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.js +4 -5
- package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/index.d.ts +1 -1
- package/lib/simple-tree/node-kinds/index.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/index.js +1 -1
- package/lib/simple-tree/node-kinds/index.js.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.js +3 -3
- package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/index.d.ts +1 -1
- package/lib/simple-tree/node-kinds/object/index.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/index.js +1 -1
- package/lib/simple-tree/node-kinds/object/index.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.d.ts +3 -14
- package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.js +3 -33
- package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/lib/simple-tree/prepareForInsertion.d.ts +20 -6
- package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
- package/lib/simple-tree/prepareForInsertion.js +25 -19
- package/lib/simple-tree/prepareForInsertion.js.map +1 -1
- package/lib/simple-tree/schemaTypes.d.ts +8 -8
- package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
- package/lib/simple-tree/schemaTypes.js.map +1 -1
- package/lib/simple-tree/toStoredSchema.d.ts +6 -1
- package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
- package/lib/simple-tree/toStoredSchema.js +4 -1
- package/lib/simple-tree/toStoredSchema.js.map +1 -1
- package/lib/simple-tree/{toMapTree.d.ts → unhydratedFlexTreeFromInsertable.d.ts} +12 -23
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -0
- package/lib/simple-tree/{toMapTree.js → unhydratedFlexTreeFromInsertable.js} +105 -186
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -0
- package/lib/treeFactory.d.ts.map +1 -1
- package/lib/treeFactory.js +6 -1
- package/lib/treeFactory.js.map +1 -1
- package/lib/util/index.d.ts +1 -1
- package/lib/util/index.d.ts.map +1 -1
- package/lib/util/index.js +1 -1
- package/lib/util/index.js.map +1 -1
- package/lib/util/utils.d.ts +4 -0
- package/lib/util/utils.d.ts.map +1 -1
- package/lib/util/utils.js +6 -0
- package/lib/util/utils.js.map +1 -1
- package/package.json +21 -21
- package/src/codec/codec.ts +24 -3
- package/src/codec/index.ts +1 -0
- package/src/codec/versioned/codec.ts +42 -5
- package/src/core/tree/detachedFieldIndex.ts +13 -4
- package/src/core/tree/mapTree.ts +22 -7
- package/src/core/tree/visitorUtils.ts +2 -2
- package/src/feature-libraries/default-schema/defaultEditBuilder.ts +3 -2
- package/src/feature-libraries/default-schema/schemaChecker.ts +7 -6
- package/src/feature-libraries/flex-tree/context.ts +17 -7
- package/src/feature-libraries/flex-tree/flexTreeTypes.ts +36 -15
- package/src/feature-libraries/flex-tree/index.ts +4 -0
- package/src/feature-libraries/flex-tree/lazyField.ts +8 -6
- package/src/feature-libraries/flex-tree/lazyNode.ts +6 -2
- package/src/feature-libraries/forest-summary/forestSummarizer.ts +3 -2
- package/src/feature-libraries/index.ts +9 -0
- package/src/feature-libraries/mapTreeCursor.ts +103 -16
- package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +9 -5
- package/src/feature-libraries/treeCursorUtils.ts +21 -10
- package/src/index.ts +1 -0
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/schematizingTreeView.ts +40 -22
- package/src/shared-tree/sharedTree.ts +9 -3
- package/src/shared-tree/tree.ts +5 -20
- package/src/shared-tree/treeAlpha.ts +17 -11
- package/src/shared-tree/treeCheckout.ts +6 -3
- package/src/simple-tree/api/configuration.ts +3 -3
- package/src/simple-tree/api/create.ts +49 -19
- package/src/simple-tree/api/customTree.ts +10 -0
- package/src/simple-tree/api/index.ts +1 -4
- package/src/simple-tree/api/schemaFactory.ts +62 -13
- package/src/simple-tree/api/treeNodeApi.ts +48 -27
- package/src/simple-tree/api/verboseTree.ts +15 -12
- package/src/simple-tree/core/getOrCreateNode.ts +4 -2
- package/src/simple-tree/core/index.ts +2 -3
- package/src/simple-tree/core/treeNodeKernel.ts +37 -54
- package/src/simple-tree/core/unhydratedFlexTree.ts +222 -261
- package/src/simple-tree/index.ts +3 -3
- package/src/simple-tree/node-kinds/array/arrayNode.ts +12 -13
- package/src/simple-tree/node-kinds/index.ts +0 -1
- package/src/simple-tree/node-kinds/map/mapNode.ts +6 -9
- package/src/simple-tree/node-kinds/object/index.ts +0 -1
- package/src/simple-tree/node-kinds/object/objectNode.ts +7 -49
- package/src/simple-tree/prepareForInsertion.ts +49 -42
- package/src/simple-tree/schemaTypes.ts +9 -8
- package/src/simple-tree/toStoredSchema.ts +7 -1
- package/src/simple-tree/{toMapTree.ts → unhydratedFlexTreeFromInsertable.ts} +134 -226
- package/src/treeFactory.ts +6 -1
- package/src/util/index.ts +1 -0
- package/src/util/utils.ts +7 -0
- package/dist/simple-tree/toMapTree.d.ts.map +0 -1
- package/dist/simple-tree/toMapTree.js.map +0 -1
- package/lib/simple-tree/toMapTree.d.ts.map +0 -1
- package/lib/simple-tree/toMapTree.js.map +0 -1
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { assert, oob, fail } from "@fluidframework/core-utils/internal";
|
|
6
|
+
import { assert, oob, fail, unreachableCase } from "@fluidframework/core-utils/internal";
|
|
7
7
|
|
|
8
8
|
import { EmptyKey, rootFieldKey } from "../../core/index.js";
|
|
9
9
|
import { type TreeStatus, isTreeValue, FieldKinds } from "../../feature-libraries/index.js";
|
|
@@ -34,17 +34,23 @@ import {
|
|
|
34
34
|
type TreeNode,
|
|
35
35
|
tryGetTreeNodeSchema,
|
|
36
36
|
getOrCreateNodeFromInnerNode,
|
|
37
|
-
UnhydratedFlexTreeNode,
|
|
38
37
|
typeSchemaSymbol,
|
|
39
38
|
getOrCreateInnerNode,
|
|
40
39
|
} from "../core/index.js";
|
|
41
40
|
import type { TreeChangeEvents } from "./treeChangeEvents.js";
|
|
42
|
-
import {
|
|
41
|
+
import { isObjectNodeSchema } from "../node-kinds/index.js";
|
|
42
|
+
import { getTreeNodeForField } from "../getTreeNodeForField.js";
|
|
43
43
|
|
|
44
44
|
/**
|
|
45
45
|
* Provides various functions for analyzing {@link TreeNode}s.
|
|
46
|
-
*
|
|
47
|
-
*
|
|
46
|
+
*
|
|
47
|
+
* @remarks
|
|
48
|
+
* With the exception of {@link TreeNodeApi.status}, these functions should not be called with nodes that have
|
|
49
|
+
* been {@link TreeStatus.Deleted | deleted}.
|
|
50
|
+
* To verify whether or not a node already has been deleted, use the {@link TreeNodeApi.status} function.
|
|
51
|
+
*
|
|
52
|
+
* This type should only be used via the public {@link (Tree:variable)} export.
|
|
53
|
+
*
|
|
48
54
|
* @privateRemarks
|
|
49
55
|
* Due to limitations of API-Extractor link resolution, this type can't be moved into internalTypes but should be considered just an implementation detail of the `Tree` export.
|
|
50
56
|
*
|
|
@@ -75,14 +81,19 @@ export interface TreeNodeApi {
|
|
|
75
81
|
|
|
76
82
|
/**
|
|
77
83
|
* Return the node under which this node resides in the tree (or undefined if this is a root node of the tree).
|
|
84
|
+
*
|
|
85
|
+
* @throws A {@link @fluidframework/telemetry-utils#UsageError} if the node has been {@link TreeStatus.Deleted | deleted}.
|
|
78
86
|
*/
|
|
79
87
|
parent(node: TreeNode): TreeNode | undefined;
|
|
80
88
|
|
|
81
89
|
/**
|
|
82
90
|
* The key of the given node under its parent.
|
|
91
|
+
*
|
|
83
92
|
* @remarks
|
|
84
93
|
* If `node` is an element in a {@link (TreeArrayNode:interface)}, this returns the index of `node` in the array node (a `number`).
|
|
85
94
|
* Otherwise, this returns the key of the field that it is under (a `string`).
|
|
95
|
+
*
|
|
96
|
+
* @throws A {@link @fluidframework/telemetry-utils#UsageError} if the node has been {@link TreeStatus.Deleted | deleted}.
|
|
86
97
|
*/
|
|
87
98
|
key(node: TreeNode): string | number;
|
|
88
99
|
|
|
@@ -126,7 +137,7 @@ export interface TreeNodeApi {
|
|
|
126
137
|
}
|
|
127
138
|
|
|
128
139
|
/**
|
|
129
|
-
*
|
|
140
|
+
* {@inheritDoc TreeNodeApi}
|
|
130
141
|
*/
|
|
131
142
|
export const treeNodeApi: TreeNodeApi = {
|
|
132
143
|
parent(node: TreeNode): TreeNode | undefined {
|
|
@@ -303,29 +314,39 @@ export function getIdentifierFromNode(
|
|
|
303
314
|
return undefined;
|
|
304
315
|
case 1: {
|
|
305
316
|
const key = identifierFieldKeys[0] ?? oob();
|
|
306
|
-
const
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
}
|
|
311
|
-
return identifier.value as string;
|
|
312
|
-
}
|
|
313
|
-
assert(
|
|
314
|
-
identifier?.context.isHydrated() === true,
|
|
315
|
-
0xa27 /* Expected hydrated identifier */,
|
|
316
|
-
);
|
|
317
|
-
const identifierValue = identifier.value as string;
|
|
317
|
+
const identifierField = flexNode.tryGetField(key);
|
|
318
|
+
assert(identifierField !== undefined, 0xbb5 /* missing identifier field */);
|
|
319
|
+
const identifierValue = getTreeNodeForField(identifierField);
|
|
320
|
+
assert(typeof identifierValue === "string", 0xbb6 /* identifier not a string */);
|
|
318
321
|
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
322
|
+
const context = flexNode.context;
|
|
323
|
+
switch (compression) {
|
|
324
|
+
case "preferCompressed": {
|
|
325
|
+
if (context.isHydrated()) {
|
|
326
|
+
const localNodeKey =
|
|
327
|
+
context.nodeKeyManager.tryLocalizeNodeIdentifier(identifierValue);
|
|
328
|
+
return localNodeKey !== undefined
|
|
329
|
+
? extractFromOpaque(localNodeKey)
|
|
330
|
+
: identifierValue;
|
|
331
|
+
} else {
|
|
332
|
+
return identifierValue;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
case "compressed": {
|
|
336
|
+
if (context.isHydrated()) {
|
|
337
|
+
const localNodeKey =
|
|
338
|
+
context.nodeKeyManager.tryLocalizeNodeIdentifier(identifierValue);
|
|
339
|
+
return localNodeKey !== undefined ? extractFromOpaque(localNodeKey) : undefined;
|
|
340
|
+
} else {
|
|
341
|
+
return undefined;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
case "uncompressed": {
|
|
345
|
+
return identifierValue;
|
|
346
|
+
}
|
|
347
|
+
default:
|
|
348
|
+
unreachableCase(compression);
|
|
327
349
|
}
|
|
328
|
-
return identifierValue;
|
|
329
350
|
}
|
|
330
351
|
default:
|
|
331
352
|
throw new UsageError(
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import type { IFluidHandle } from "@fluidframework/core-interfaces";
|
|
7
7
|
import { isFluidHandle } from "@fluidframework/runtime-utils/internal";
|
|
8
8
|
import { assert, fail } from "@fluidframework/core-utils/internal";
|
|
9
|
+
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
9
10
|
|
|
10
11
|
import {
|
|
11
12
|
aboveRootPlaceholder,
|
|
@@ -14,7 +15,6 @@ import {
|
|
|
14
15
|
type FieldKey,
|
|
15
16
|
type ITreeCursor,
|
|
16
17
|
type ITreeCursorSynchronous,
|
|
17
|
-
type TreeNodeSchemaIdentifier,
|
|
18
18
|
} from "../../core/index.js";
|
|
19
19
|
import { brand } from "../../util/index.js";
|
|
20
20
|
import type {
|
|
@@ -40,6 +40,7 @@ import { isObjectNodeSchema } from "../node-kinds/index.js";
|
|
|
40
40
|
import {
|
|
41
41
|
customFromCursor,
|
|
42
42
|
replaceHandles,
|
|
43
|
+
unknownTypeError,
|
|
43
44
|
type CustomTreeNode,
|
|
44
45
|
type HandleConverter,
|
|
45
46
|
type SchemalessParseOptions,
|
|
@@ -153,12 +154,14 @@ export function applySchemaToParserOptions(
|
|
|
153
154
|
return key;
|
|
154
155
|
},
|
|
155
156
|
parse: (type, inputKey): FieldKey => {
|
|
156
|
-
const simpleNodeSchema =
|
|
157
|
-
context.schema.get(brand(type)) ?? fail(0xb3a /* missing schema */);
|
|
157
|
+
const simpleNodeSchema = context.schema.get(brand(type)) ?? unknownTypeError(type);
|
|
158
158
|
if (isObjectNodeSchema(simpleNodeSchema)) {
|
|
159
|
-
const info =
|
|
160
|
-
|
|
161
|
-
|
|
159
|
+
const info = simpleNodeSchema.flexKeyMap.get(inputKey);
|
|
160
|
+
if (info === undefined) {
|
|
161
|
+
throw new UsageError(
|
|
162
|
+
`Failed to parse VerboseTree due to unexpected key ${JSON.stringify(inputKey)} on type ${JSON.stringify(type)}.`,
|
|
163
|
+
);
|
|
164
|
+
}
|
|
162
165
|
return info.storedKey;
|
|
163
166
|
}
|
|
164
167
|
return brand(inputKey);
|
|
@@ -203,19 +206,19 @@ function verboseTreeAdapter(options: SchemalessParseOptions): CursorAdapter<Verb
|
|
|
203
206
|
type: (node: VerboseTree) => {
|
|
204
207
|
switch (typeof node) {
|
|
205
208
|
case "number":
|
|
206
|
-
return numberSchema.identifier
|
|
209
|
+
return brand(numberSchema.identifier);
|
|
207
210
|
case "string":
|
|
208
|
-
return stringSchema.identifier
|
|
211
|
+
return brand(stringSchema.identifier);
|
|
209
212
|
case "boolean":
|
|
210
|
-
return booleanSchema.identifier
|
|
213
|
+
return brand(booleanSchema.identifier);
|
|
211
214
|
default:
|
|
212
215
|
if (node === null) {
|
|
213
|
-
return nullSchema.identifier
|
|
216
|
+
return brand(nullSchema.identifier);
|
|
214
217
|
}
|
|
215
218
|
if (isFluidHandle(node)) {
|
|
216
|
-
return handleSchema.identifier
|
|
219
|
+
return brand(handleSchema.identifier);
|
|
217
220
|
}
|
|
218
|
-
return node.type
|
|
221
|
+
return brand(node.type);
|
|
219
222
|
}
|
|
220
223
|
},
|
|
221
224
|
keysFromNode: (node: VerboseTree): readonly FieldKey[] => {
|
|
@@ -8,9 +8,9 @@ import type { TreeValue } from "../../core/index.js";
|
|
|
8
8
|
import type { TreeNode } from "./treeNode.js";
|
|
9
9
|
import {
|
|
10
10
|
type InnerNode,
|
|
11
|
-
unhydratedFlexTreeNodeToTreeNode,
|
|
12
11
|
simpleTreeNodeSlot,
|
|
13
12
|
createTreeNodeFromInner,
|
|
13
|
+
splitInnerNodeType,
|
|
14
14
|
} from "./treeNodeKernel.js";
|
|
15
15
|
import { UnhydratedFlexTreeNode } from "./unhydratedFlexTree.js";
|
|
16
16
|
|
|
@@ -21,9 +21,11 @@ import { UnhydratedFlexTreeNode } from "./unhydratedFlexTree.js";
|
|
|
21
21
|
* This supports both hydrated and unhydrated nodes.
|
|
22
22
|
*/
|
|
23
23
|
export function getOrCreateNodeFromInnerNode(flexNode: InnerNode): TreeNode | TreeValue {
|
|
24
|
+
splitInnerNodeType(flexNode);
|
|
25
|
+
|
|
24
26
|
const cached =
|
|
25
27
|
flexNode instanceof UnhydratedFlexTreeNode
|
|
26
|
-
?
|
|
28
|
+
? flexNode.treeNode
|
|
27
29
|
: flexNode.anchorNode.slots.get(simpleTreeNodeSlot);
|
|
28
30
|
|
|
29
31
|
if (cached !== undefined) {
|
|
@@ -10,7 +10,6 @@ export {
|
|
|
10
10
|
tryGetTreeNodeSchema,
|
|
11
11
|
type InnerNode,
|
|
12
12
|
tryDisposeTreeNode,
|
|
13
|
-
unhydratedFlexTreeNodeToTreeNode,
|
|
14
13
|
getOrCreateInnerNode,
|
|
15
14
|
treeNodeFromAnchor,
|
|
16
15
|
getSimpleNodeSchemaFromInnerNode,
|
|
@@ -38,7 +37,7 @@ export { Context, HydratedContext, SimpleContextSlot } from "./context.js";
|
|
|
38
37
|
export { getOrCreateNodeFromInnerNode } from "./getOrCreateNode.js";
|
|
39
38
|
export {
|
|
40
39
|
UnhydratedFlexTreeNode,
|
|
41
|
-
|
|
42
|
-
tryUnhydratedFlexTreeNode,
|
|
40
|
+
UnhydratedSequenceField,
|
|
43
41
|
UnhydratedContext,
|
|
42
|
+
createField,
|
|
44
43
|
} from "./unhydratedFlexTree.js";
|
|
@@ -27,6 +27,7 @@ import {
|
|
|
27
27
|
TreeStatus,
|
|
28
28
|
treeStatusFromAnchorCache,
|
|
29
29
|
type FlexTreeNode,
|
|
30
|
+
type HydratedFlexTreeNode,
|
|
30
31
|
} from "../../feature-libraries/index.js";
|
|
31
32
|
|
|
32
33
|
import { SimpleContextSlot, type Context, type HydratedContext } from "./context.js";
|
|
@@ -143,12 +144,15 @@ export class TreeNodeKernel {
|
|
|
143
144
|
innerNode: InnerNode,
|
|
144
145
|
private readonly initialContext: Context,
|
|
145
146
|
) {
|
|
147
|
+
splitInnerNodeType(innerNode);
|
|
148
|
+
|
|
146
149
|
assert(!treeNodeToKernel.has(node), 0xa1a /* only one kernel per node can be made */);
|
|
147
150
|
treeNodeToKernel.set(node, this);
|
|
148
151
|
|
|
149
152
|
if (innerNode instanceof UnhydratedFlexTreeNode) {
|
|
150
153
|
// Unhydrated case
|
|
151
|
-
|
|
154
|
+
debugAssert(() => innerNode.treeNode === undefined);
|
|
155
|
+
innerNode.treeNode = node;
|
|
152
156
|
// Register for change events from the unhydrated flex node.
|
|
153
157
|
// These will be fired if the unhydrated node is edited, and will also be forwarded later to the hydrated node.
|
|
154
158
|
this.#hydrationState = {
|
|
@@ -160,7 +164,7 @@ export class TreeNodeKernel {
|
|
|
160
164
|
|
|
161
165
|
let unhydratedNode: UnhydratedFlexTreeNode | undefined = innerNode;
|
|
162
166
|
while (unhydratedNode !== undefined) {
|
|
163
|
-
const treeNode =
|
|
167
|
+
const treeNode = unhydratedNode.treeNode;
|
|
164
168
|
if (treeNode !== undefined) {
|
|
165
169
|
const kernel = getKernel(treeNode);
|
|
166
170
|
kernel.#unhydratedEvents.value.emit("subtreeChangedAfterBatch");
|
|
@@ -178,6 +182,7 @@ export class TreeNodeKernel {
|
|
|
178
182
|
} else {
|
|
179
183
|
// Hydrated case
|
|
180
184
|
this.#hydrationState = this.createHydratedState(innerNode.anchorNode);
|
|
185
|
+
this.#hydrationState.innerNode = innerNode;
|
|
181
186
|
}
|
|
182
187
|
}
|
|
183
188
|
|
|
@@ -202,7 +207,6 @@ export class TreeNodeKernel {
|
|
|
202
207
|
public hydrate(anchors: AnchorSet, path: UpPath): void {
|
|
203
208
|
assert(!this.disposed, 0xa2a /* cannot hydrate a disposed node */);
|
|
204
209
|
assert(!isHydrated(this.#hydrationState), 0xa2b /* hydration should only happen once */);
|
|
205
|
-
unhydratedFlexTreeNodeToTreeNodeInternal.delete(this.#hydrationState.innerNode);
|
|
206
210
|
|
|
207
211
|
const anchor = anchors.track(path);
|
|
208
212
|
const anchorNode =
|
|
@@ -291,16 +295,16 @@ export class TreeNodeKernel {
|
|
|
291
295
|
}
|
|
292
296
|
|
|
293
297
|
/**
|
|
294
|
-
* Retrieves the flex node associated with the given target
|
|
298
|
+
* Retrieves the flex node associated with the given target.
|
|
295
299
|
* @remarks
|
|
296
300
|
* For {@link Unhydrated} nodes, this returns the MapTreeNode.
|
|
297
301
|
*
|
|
298
302
|
* For hydrated nodes it returns a FlexTreeNode backed by the forest.
|
|
299
303
|
* Note that for "marinated" nodes, this FlexTreeNode exists and returns it: it does not return the MapTreeNode which is the current InnerNode.
|
|
300
304
|
*
|
|
301
|
-
*
|
|
305
|
+
* @throws A {@link @fluidframework/telemetry-utils#UsageError} if the node has been deleted.
|
|
302
306
|
*/
|
|
303
|
-
public getOrCreateInnerNode(
|
|
307
|
+
public getOrCreateInnerNode(): InnerNode {
|
|
304
308
|
if (!isHydrated(this.#hydrationState)) {
|
|
305
309
|
debugAssert(
|
|
306
310
|
() =>
|
|
@@ -310,6 +314,10 @@ export class TreeNodeKernel {
|
|
|
310
314
|
return this.#hydrationState.innerNode; // Unhydrated case
|
|
311
315
|
}
|
|
312
316
|
|
|
317
|
+
if (this.disposed) {
|
|
318
|
+
throw new UsageError("Cannot access a deleted node.");
|
|
319
|
+
}
|
|
320
|
+
|
|
313
321
|
if (this.#hydrationState.innerNode === undefined) {
|
|
314
322
|
// Marinated case -> cooked
|
|
315
323
|
const anchorNode = this.#hydrationState.anchorNode;
|
|
@@ -326,15 +334,7 @@ export class TreeNodeKernel {
|
|
|
326
334
|
context.checkout.forest.moveCursorToPath(anchorNode, cursor);
|
|
327
335
|
this.#hydrationState.innerNode = makeTree(context, cursor);
|
|
328
336
|
cursor.free();
|
|
329
|
-
|
|
330
|
-
assertFlexTreeEntityNotFreed(this.#hydrationState.innerNode);
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
if (!allowDeleted) {
|
|
336
|
-
if (this.#hydrationState.innerNode.context.isDisposed()) {
|
|
337
|
-
throw new UsageError("Cannot access a Deleted node.");
|
|
337
|
+
assertFlexTreeEntityNotFreed(this.#hydrationState.innerNode);
|
|
338
338
|
}
|
|
339
339
|
}
|
|
340
340
|
|
|
@@ -342,20 +342,12 @@ export class TreeNodeKernel {
|
|
|
342
342
|
}
|
|
343
343
|
|
|
344
344
|
/**
|
|
345
|
-
* Retrieves the
|
|
346
|
-
* @remarks
|
|
347
|
-
* If `target` is an unhydrated node, returns its UnhydratedFlexTreeNode.
|
|
348
|
-
* If `target` is a cooked node (or marinated but a FlexTreeNode exists) returns the FlexTreeNode.
|
|
349
|
-
* If the target is a marinated node with no FlexTreeNode for its anchor, returns undefined.
|
|
345
|
+
* Retrieves the {@link UnhydratedFlexTreeNode} if unhydrated. otherwise undefined.
|
|
350
346
|
*/
|
|
351
|
-
public
|
|
347
|
+
public getInnerNodeIfUnhydrated(): UnhydratedFlexTreeNode | undefined {
|
|
352
348
|
if (isHydrated(this.#hydrationState)) {
|
|
353
|
-
return
|
|
354
|
-
this.#hydrationState.innerNode ??
|
|
355
|
-
this.#hydrationState.anchorNode.slots.get(flexTreeSlot)
|
|
356
|
-
);
|
|
349
|
+
return undefined;
|
|
357
350
|
}
|
|
358
|
-
|
|
359
351
|
return this.#hydrationState.innerNode;
|
|
360
352
|
}
|
|
361
353
|
}
|
|
@@ -365,34 +357,24 @@ const kernelEvents = ["childrenChangedAfterBatch", "subtreeChangedAfterBatch"] a
|
|
|
365
357
|
type KernelEvents = Pick<AnchorEvents, (typeof kernelEvents)[number]>;
|
|
366
358
|
|
|
367
359
|
/**
|
|
368
|
-
* For "cooked" nodes this is a
|
|
369
|
-
* For {@link Unhydrated} nodes this is a
|
|
370
|
-
* For "marinated" nodes, some code (ex: getOrCreateInnerNode) returns the FlexTreeNode thats a projection of forest content, and some code (ex: tryGetInnerNode) returns undefined.
|
|
371
|
-
*
|
|
372
|
-
* @remarks
|
|
373
|
-
* Currently MapTreeNode extends FlexTreeNode, and most code which can work with either just uses FlexTreeNode.
|
|
374
|
-
* TODO: Code should be migrating toward using this type to distinguish to two use-cases.
|
|
360
|
+
* For "cooked" nodes this is a HydratedFlexTreeNode thats a projection of forest content.
|
|
361
|
+
* For {@link Unhydrated} nodes this is a UnhydratedFlexTreeNode.
|
|
375
362
|
*
|
|
376
|
-
*
|
|
377
|
-
* Maybe getOrCreateInnerNode should cook marinated nodes so they have a proper InnerNode?
|
|
363
|
+
* For "marinated" nodes, some code (ex: getOrCreateInnerNode) returns the FlexTreeNode thats a projection of forest content, and some code (ex: tryGetInnerNode) returns undefined.
|
|
378
364
|
*/
|
|
379
|
-
export type InnerNode = FlexTreeNode
|
|
365
|
+
export type InnerNode = FlexTreeNode;
|
|
380
366
|
|
|
381
367
|
/**
|
|
382
|
-
*
|
|
383
|
-
*/
|
|
384
|
-
const unhydratedFlexTreeNodeToTreeNodeInternal = new WeakMap<
|
|
385
|
-
UnhydratedFlexTreeNode,
|
|
386
|
-
TreeNode
|
|
387
|
-
>();
|
|
388
|
-
/**
|
|
389
|
-
* Retrieves the {@link TreeNode} associated with the given {@link UnhydratedFlexTreeNode} if any.
|
|
368
|
+
* Narrows innerNode to either {@link UnhydratedFlexTreeNode} or {@link HydratedFlexTreeNode}.
|
|
390
369
|
*/
|
|
391
|
-
export
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
370
|
+
export function splitInnerNodeType(
|
|
371
|
+
innerNode: InnerNode,
|
|
372
|
+
): asserts innerNode is UnhydratedFlexTreeNode | HydratedFlexTreeNode {
|
|
373
|
+
assert(
|
|
374
|
+
innerNode instanceof UnhydratedFlexTreeNode || innerNode.isHydrated(),
|
|
375
|
+
"Invalid inner node type",
|
|
376
|
+
);
|
|
377
|
+
}
|
|
396
378
|
|
|
397
379
|
/**
|
|
398
380
|
* An anchor slot which associates an anchor with its corresponding {@link TreeNode}, if there is one.
|
|
@@ -426,6 +408,7 @@ export function getSimpleNodeSchemaFromInnerNode(innerNode: InnerNode): TreeNode
|
|
|
426
408
|
* Gets the {@link Context} for the {@link InnerNode}.
|
|
427
409
|
*/
|
|
428
410
|
export function getSimpleContextFromInnerNode(innerNode: InnerNode): Context {
|
|
411
|
+
splitInnerNodeType(innerNode);
|
|
429
412
|
if (innerNode instanceof UnhydratedFlexTreeNode) {
|
|
430
413
|
return innerNode.simpleContext;
|
|
431
414
|
}
|
|
@@ -437,24 +420,24 @@ export function getSimpleContextFromInnerNode(innerNode: InnerNode): Context {
|
|
|
437
420
|
}
|
|
438
421
|
|
|
439
422
|
/**
|
|
440
|
-
* Retrieves the flex node associated with the given target
|
|
423
|
+
* Retrieves the flex node associated with the given target.
|
|
441
424
|
* @remarks
|
|
442
425
|
* For {@link Unhydrated} nodes, this returns the MapTreeNode.
|
|
443
426
|
*
|
|
444
427
|
* For hydrated nodes it returns a FlexTreeNode backed by the forest.
|
|
445
428
|
* Note that for "marinated" nodes, this FlexTreeNode exists and returns it: it does not return the MapTreeNode which is the current InnerNode.
|
|
446
429
|
*
|
|
447
|
-
*
|
|
430
|
+
* @throws A {@link @fluidframework/telemetry-utils#UsageError} if the node has been deleted.
|
|
448
431
|
*/
|
|
449
|
-
export function getOrCreateInnerNode(treeNode: TreeNode
|
|
432
|
+
export function getOrCreateInnerNode(treeNode: TreeNode): InnerNode {
|
|
450
433
|
const kernel = getKernel(treeNode);
|
|
451
|
-
return kernel.getOrCreateInnerNode(
|
|
434
|
+
return kernel.getOrCreateInnerNode();
|
|
452
435
|
}
|
|
453
436
|
|
|
454
437
|
/**
|
|
455
438
|
* Gets a flex node from an anchor node
|
|
456
439
|
*/
|
|
457
|
-
function flexNodeFromAnchor(anchorNode: AnchorNode):
|
|
440
|
+
function flexNodeFromAnchor(anchorNode: AnchorNode): HydratedFlexTreeNode {
|
|
458
441
|
const flexNode = anchorNode.slots.get(flexTreeSlot);
|
|
459
442
|
if (flexNode !== undefined) {
|
|
460
443
|
return flexNode; // If it does have a flex node, return it...
|