@fluidframework/tree 2.3.1 → 2.4.0-297027
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api-report/tree.alpha.api.md +77 -38
- package/api-report/tree.beta.api.md +50 -30
- package/api-report/tree.legacy.alpha.api.md +50 -30
- package/api-report/tree.legacy.public.api.md +50 -30
- package/api-report/tree.public.api.md +50 -30
- package/dist/alpha.d.ts +7 -0
- package/dist/beta.d.ts +4 -0
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +2 -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 +2 -1
- package/dist/core/rebase/index.js.map +1 -1
- package/dist/core/rebase/types.d.ts +1 -0
- package/dist/core/rebase/types.d.ts.map +1 -1
- package/dist/core/rebase/types.js +8 -1
- package/dist/core/rebase/types.js.map +1 -1
- package/dist/core/schema-stored/schema.d.ts +7 -0
- package/dist/core/schema-stored/schema.d.ts.map +1 -1
- package/dist/core/schema-stored/schema.js +9 -0
- package/dist/core/schema-stored/schema.js.map +1 -1
- package/dist/core/tree/anchorSet.d.ts +1 -2
- package/dist/core/tree/anchorSet.d.ts.map +1 -1
- package/dist/core/tree/anchorSet.js +2 -2
- package/dist/core/tree/anchorSet.js.map +1 -1
- package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndex.js +13 -2
- package/dist/core/tree/detachedFieldIndex.js.map +1 -1
- package/dist/core/tree/detachedFieldIndexTypes.d.ts +1 -1
- package/dist/core/tree/detachedFieldIndexTypes.js.map +1 -1
- package/dist/feature-libraries/editableTreeBinder.d.ts +3 -230
- package/dist/feature-libraries/editableTreeBinder.d.ts.map +1 -1
- package/dist/feature-libraries/editableTreeBinder.js +1 -539
- package/dist/feature-libraries/editableTreeBinder.js.map +1 -1
- package/dist/feature-libraries/flex-tree/context.d.ts +7 -14
- package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/context.js +3 -3
- package/dist/feature-libraries/flex-tree/context.js.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +2 -16
- 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/lazyEntity.d.ts +2 -3
- package/dist/feature-libraries/flex-tree/lazyEntity.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyEntity.js +1 -2
- package/dist/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.d.ts +10 -15
- package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.js +18 -20
- package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyNode.d.ts +4 -5
- package/dist/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyNode.js +13 -23
- package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
- package/dist/feature-libraries/flex-tree/utilities.js +1 -1
- package/dist/feature-libraries/flex-tree/utilities.js.map +1 -1
- package/dist/feature-libraries/index.d.ts +4 -7
- package/dist/feature-libraries/index.d.ts.map +1 -1
- package/dist/feature-libraries/index.js +5 -31
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +7 -0
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js +61 -17
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/dist/feature-libraries/sequence-field/compose.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/compose.js +3 -0
- package/dist/feature-libraries/sequence-field/compose.js.map +1 -1
- package/dist/feature-libraries/sequence-field/formatV1.d.ts +18 -18
- package/dist/feature-libraries/sequence-field/formatV2.d.ts +18 -18
- package/dist/feature-libraries/sequence-field/formatV3.d.ts +27 -27
- package/dist/feature-libraries/sequence-field/utils.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/utils.js +1 -4
- package/dist/feature-libraries/sequence-field/utils.js.map +1 -1
- package/dist/feature-libraries/typed-schema/flexList.d.ts +1 -46
- package/dist/feature-libraries/typed-schema/flexList.d.ts.map +1 -1
- package/dist/feature-libraries/typed-schema/flexList.js +1 -13
- package/dist/feature-libraries/typed-schema/flexList.js.map +1 -1
- package/dist/feature-libraries/typed-schema/index.d.ts +2 -4
- package/dist/feature-libraries/typed-schema/index.d.ts.map +1 -1
- package/dist/feature-libraries/typed-schema/index.js +1 -19
- package/dist/feature-libraries/typed-schema/index.js.map +1 -1
- package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts +0 -212
- package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +1 -1
- package/dist/feature-libraries/typed-schema/typedTreeSchema.js +0 -266
- package/dist/feature-libraries/typed-schema/typedTreeSchema.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/internalTypes.d.ts +1 -1
- package/dist/internalTypes.d.ts.map +1 -1
- package/dist/internalTypes.js.map +1 -1
- package/dist/legacy.d.ts +4 -0
- 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 +4 -0
- package/dist/shared-tree/checkoutFlexTreeView.d.ts +3 -3
- package/dist/shared-tree/checkoutFlexTreeView.d.ts.map +1 -1
- package/dist/shared-tree/checkoutFlexTreeView.js +1 -1
- package/dist/shared-tree/checkoutFlexTreeView.js.map +1 -1
- package/dist/shared-tree/index.d.ts +3 -3
- package/dist/shared-tree/index.d.ts.map +1 -1
- package/dist/shared-tree/index.js +2 -3
- package/dist/shared-tree/index.js.map +1 -1
- package/dist/shared-tree/schematizeTree.d.ts +1 -40
- package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
- package/dist/shared-tree/schematizeTree.js +2 -11
- package/dist/shared-tree/schematizeTree.js.map +1 -1
- package/dist/shared-tree/schematizingTreeView.d.ts +9 -7
- package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +19 -8
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree/sharedTree.d.ts +19 -2
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +10 -2
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/treeCheckout.d.ts +71 -41
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +116 -84
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree-core/branch.d.ts +8 -11
- package/dist/shared-tree-core/branch.d.ts.map +1 -1
- package/dist/shared-tree-core/branch.js +12 -15
- package/dist/shared-tree-core/branch.js.map +1 -1
- package/dist/simple-tree/api/create.d.ts +1 -1
- package/dist/simple-tree/api/create.d.ts.map +1 -1
- package/dist/simple-tree/api/create.js +11 -13
- package/dist/simple-tree/api/create.js.map +1 -1
- package/dist/simple-tree/api/getJsonSchema.d.ts +3 -3
- package/dist/simple-tree/api/getJsonSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/getJsonSchema.js +1 -1
- package/dist/simple-tree/api/getJsonSchema.js.map +1 -1
- package/dist/simple-tree/api/getSimpleSchema.d.ts +2 -2
- package/dist/simple-tree/api/getSimpleSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/getSimpleSchema.js.map +1 -1
- package/dist/simple-tree/api/index.d.ts +2 -1
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js +3 -1
- package/dist/simple-tree/api/index.js.map +1 -1
- package/dist/simple-tree/api/jsonSchema.d.ts +13 -14
- package/dist/simple-tree/api/jsonSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/jsonSchema.js.map +1 -1
- package/dist/simple-tree/api/schemaFactory.d.ts +14 -8
- package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactory.js +21 -2
- package/dist/simple-tree/api/schemaFactory.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +3 -3
- package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
- package/dist/simple-tree/api/simpleSchema.d.ts +18 -10
- package/dist/simple-tree/api/simpleSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/simpleSchema.js.map +1 -1
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.js +30 -17
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
- package/dist/simple-tree/api/tree.d.ts +16 -6
- package/dist/simple-tree/api/tree.d.ts.map +1 -1
- package/dist/simple-tree/api/tree.js +4 -4
- package/dist/simple-tree/api/tree.js.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.js +8 -6
- 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 +6 -10
- package/dist/simple-tree/api/verboseTree.js.map +1 -1
- package/{lib/feature-libraries/typed-schema → dist/simple-tree/api}/view.d.ts +4 -11
- package/dist/simple-tree/api/view.d.ts.map +1 -0
- package/dist/{feature-libraries/typed-schema → simple-tree/api}/view.js +9 -9
- package/dist/simple-tree/api/view.js.map +1 -0
- package/dist/simple-tree/api/viewSchemaToSimpleSchema.d.ts +2 -2
- package/dist/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/viewSchemaToSimpleSchema.js +11 -1
- package/dist/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
- package/dist/simple-tree/arrayNode.d.ts +147 -14
- package/dist/simple-tree/arrayNode.d.ts.map +1 -1
- package/dist/simple-tree/arrayNode.js +32 -20
- package/dist/simple-tree/arrayNode.js.map +1 -1
- package/dist/simple-tree/core/context.d.ts +55 -0
- package/dist/simple-tree/core/context.d.ts.map +1 -0
- package/dist/simple-tree/core/context.js +60 -0
- package/dist/simple-tree/core/context.js.map +1 -0
- package/dist/simple-tree/core/getOrCreateNode.d.ts +15 -0
- package/dist/simple-tree/core/getOrCreateNode.d.ts.map +1 -0
- package/dist/simple-tree/core/getOrCreateNode.js +36 -0
- package/dist/simple-tree/core/getOrCreateNode.js.map +1 -0
- package/dist/simple-tree/core/index.d.ts +7 -3
- package/dist/simple-tree/core/index.d.ts.map +1 -1
- package/dist/simple-tree/core/index.js +16 -7
- package/dist/simple-tree/core/index.js.map +1 -1
- package/dist/simple-tree/core/schemaCaching.d.ts +5 -13
- package/dist/simple-tree/core/schemaCaching.d.ts.map +1 -1
- package/dist/simple-tree/core/schemaCaching.js +16 -45
- package/dist/simple-tree/core/schemaCaching.js.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.d.ts +29 -7
- package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js +94 -58
- package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.d.ts +24 -0
- package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/dist/simple-tree/core/types.d.ts +0 -5
- package/dist/simple-tree/core/types.d.ts.map +1 -1
- package/dist/simple-tree/core/types.js.map +1 -1
- package/dist/simple-tree/core/unhydratedFlexTree.d.ts +139 -0
- package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -0
- package/dist/{feature-libraries/flex-map-tree/mapTreeNode.js → simple-tree/core/unhydratedFlexTree.js} +112 -132
- package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -0
- package/dist/simple-tree/{walkSchema.d.ts → core/walkSchema.d.ts} +8 -4
- package/dist/simple-tree/core/walkSchema.d.ts.map +1 -0
- package/dist/simple-tree/core/walkSchema.js +34 -0
- package/dist/simple-tree/core/walkSchema.js.map +1 -0
- package/dist/simple-tree/createContext.d.ts +11 -0
- package/dist/simple-tree/createContext.d.ts.map +1 -0
- package/dist/simple-tree/createContext.js +25 -0
- package/dist/simple-tree/createContext.js.map +1 -0
- package/dist/simple-tree/index.d.ts +4 -5
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +7 -7
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/leafNodeSchema.d.ts +1 -0
- package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/leafNodeSchema.js +1 -2
- package/dist/simple-tree/leafNodeSchema.js.map +1 -1
- package/dist/simple-tree/mapNode.d.ts +4 -4
- package/dist/simple-tree/mapNode.d.ts.map +1 -1
- package/dist/simple-tree/mapNode.js +9 -5
- package/dist/simple-tree/mapNode.js.map +1 -1
- package/dist/simple-tree/objectNode.d.ts +8 -8
- package/dist/simple-tree/objectNode.d.ts.map +1 -1
- package/dist/simple-tree/objectNode.js +33 -14
- package/dist/simple-tree/objectNode.js.map +1 -1
- package/dist/simple-tree/objectNodeTypes.d.ts +7 -3
- package/dist/simple-tree/objectNodeTypes.d.ts.map +1 -1
- package/dist/simple-tree/objectNodeTypes.js.map +1 -1
- package/dist/simple-tree/proxies.d.ts +1 -2
- package/dist/simple-tree/proxies.d.ts.map +1 -1
- package/dist/simple-tree/proxies.js +6 -22
- package/dist/simple-tree/proxies.js.map +1 -1
- package/dist/simple-tree/schemaTypes.d.ts +44 -4
- package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
- package/dist/simple-tree/schemaTypes.js +10 -0
- package/dist/simple-tree/schemaTypes.js.map +1 -1
- package/dist/simple-tree/toFlexSchema.d.ts +6 -36
- package/dist/simple-tree/toFlexSchema.d.ts.map +1 -1
- package/dist/simple-tree/toFlexSchema.js +58 -142
- package/dist/simple-tree/toFlexSchema.js.map +1 -1
- package/dist/simple-tree/toMapTree.d.ts.map +1 -1
- package/dist/simple-tree/toMapTree.js +2 -2
- package/dist/simple-tree/toMapTree.js.map +1 -1
- package/dist/simple-tree/treeNodeValid.d.ts +13 -5
- package/dist/simple-tree/treeNodeValid.d.ts.map +1 -1
- package/dist/simple-tree/treeNodeValid.js +19 -10
- package/dist/simple-tree/treeNodeValid.js.map +1 -1
- package/dist/simple-tree/typesUnsafe.d.ts +4 -4
- package/dist/simple-tree/typesUnsafe.d.ts.map +1 -1
- package/dist/simple-tree/typesUnsafe.js.map +1 -1
- package/dist/simple-tree/walkFieldSchema.d.ts +11 -0
- package/dist/simple-tree/walkFieldSchema.d.ts.map +1 -0
- package/dist/simple-tree/walkFieldSchema.js +17 -0
- package/dist/simple-tree/walkFieldSchema.js.map +1 -0
- package/dist/util/index.d.ts +1 -1
- package/dist/util/index.d.ts.map +1 -1
- package/dist/util/index.js.map +1 -1
- package/dist/util/typeUtils.d.ts +14 -45
- package/dist/util/typeUtils.d.ts.map +1 -1
- package/dist/util/typeUtils.js.map +1 -1
- package/lib/alpha.d.ts +7 -0
- package/lib/beta.d.ts +4 -0
- 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 +1 -0
- package/lib/core/rebase/types.d.ts.map +1 -1
- package/lib/core/rebase/types.js +6 -0
- package/lib/core/rebase/types.js.map +1 -1
- package/lib/core/schema-stored/schema.d.ts +7 -0
- package/lib/core/schema-stored/schema.d.ts.map +1 -1
- package/lib/core/schema-stored/schema.js +9 -0
- package/lib/core/schema-stored/schema.js.map +1 -1
- package/lib/core/tree/anchorSet.d.ts +1 -2
- package/lib/core/tree/anchorSet.d.ts.map +1 -1
- package/lib/core/tree/anchorSet.js +2 -2
- package/lib/core/tree/anchorSet.js.map +1 -1
- package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndex.js +13 -2
- package/lib/core/tree/detachedFieldIndex.js.map +1 -1
- package/lib/core/tree/detachedFieldIndexTypes.d.ts +1 -1
- package/lib/core/tree/detachedFieldIndexTypes.js.map +1 -1
- package/lib/feature-libraries/editableTreeBinder.d.ts +3 -230
- package/lib/feature-libraries/editableTreeBinder.d.ts.map +1 -1
- package/lib/feature-libraries/editableTreeBinder.js +1 -532
- package/lib/feature-libraries/editableTreeBinder.js.map +1 -1
- package/lib/feature-libraries/flex-tree/context.d.ts +7 -14
- package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/context.js +3 -3
- package/lib/feature-libraries/flex-tree/context.js.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +2 -16
- 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/lazyEntity.d.ts +2 -3
- package/lib/feature-libraries/flex-tree/lazyEntity.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyEntity.js +1 -2
- package/lib/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.d.ts +10 -15
- package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.js +18 -20
- package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyNode.d.ts +4 -5
- package/lib/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyNode.js +13 -23
- package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
- package/lib/feature-libraries/flex-tree/utilities.js +1 -1
- package/lib/feature-libraries/flex-tree/utilities.js.map +1 -1
- package/lib/feature-libraries/index.d.ts +4 -7
- package/lib/feature-libraries/index.d.ts.map +1 -1
- package/lib/feature-libraries/index.js +4 -6
- package/lib/feature-libraries/index.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +7 -0
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js +62 -18
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/lib/feature-libraries/sequence-field/compose.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/compose.js +3 -0
- package/lib/feature-libraries/sequence-field/compose.js.map +1 -1
- package/lib/feature-libraries/sequence-field/formatV1.d.ts +18 -18
- package/lib/feature-libraries/sequence-field/formatV2.d.ts +18 -18
- package/lib/feature-libraries/sequence-field/formatV3.d.ts +27 -27
- package/lib/feature-libraries/sequence-field/utils.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/utils.js +2 -5
- package/lib/feature-libraries/sequence-field/utils.js.map +1 -1
- package/lib/feature-libraries/typed-schema/flexList.d.ts +1 -46
- package/lib/feature-libraries/typed-schema/flexList.d.ts.map +1 -1
- package/lib/feature-libraries/typed-schema/flexList.js +0 -11
- package/lib/feature-libraries/typed-schema/flexList.js.map +1 -1
- package/lib/feature-libraries/typed-schema/index.d.ts +2 -4
- package/lib/feature-libraries/typed-schema/index.d.ts.map +1 -1
- package/lib/feature-libraries/typed-schema/index.js +0 -3
- package/lib/feature-libraries/typed-schema/index.js.map +1 -1
- package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts +0 -212
- package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +1 -1
- package/lib/feature-libraries/typed-schema/typedTreeSchema.js +1 -253
- package/lib/feature-libraries/typed-schema/typedTreeSchema.js.map +1 -1
- package/lib/index.d.ts +3 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/internalTypes.d.ts +1 -1
- package/lib/internalTypes.d.ts.map +1 -1
- package/lib/internalTypes.js.map +1 -1
- package/lib/legacy.d.ts +4 -0
- 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 +4 -0
- package/lib/shared-tree/checkoutFlexTreeView.d.ts +3 -3
- package/lib/shared-tree/checkoutFlexTreeView.d.ts.map +1 -1
- package/lib/shared-tree/checkoutFlexTreeView.js +1 -1
- package/lib/shared-tree/checkoutFlexTreeView.js.map +1 -1
- package/lib/shared-tree/index.d.ts +3 -3
- package/lib/shared-tree/index.d.ts.map +1 -1
- package/lib/shared-tree/index.js +1 -2
- package/lib/shared-tree/index.js.map +1 -1
- package/lib/shared-tree/schematizeTree.d.ts +1 -40
- package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
- package/lib/shared-tree/schematizeTree.js +1 -9
- package/lib/shared-tree/schematizeTree.js.map +1 -1
- package/lib/shared-tree/schematizingTreeView.d.ts +9 -7
- package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +22 -11
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/shared-tree/sharedTree.d.ts +19 -2
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +10 -3
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/treeCheckout.d.ts +71 -41
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +118 -86
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree-core/branch.d.ts +8 -11
- package/lib/shared-tree-core/branch.d.ts.map +1 -1
- package/lib/shared-tree-core/branch.js +12 -15
- package/lib/shared-tree-core/branch.js.map +1 -1
- package/lib/simple-tree/api/create.d.ts +1 -1
- package/lib/simple-tree/api/create.d.ts.map +1 -1
- package/lib/simple-tree/api/create.js +14 -16
- package/lib/simple-tree/api/create.js.map +1 -1
- package/lib/simple-tree/api/getJsonSchema.d.ts +3 -3
- package/lib/simple-tree/api/getJsonSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/getJsonSchema.js +1 -1
- package/lib/simple-tree/api/getJsonSchema.js.map +1 -1
- package/lib/simple-tree/api/getSimpleSchema.d.ts +2 -2
- package/lib/simple-tree/api/getSimpleSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/getSimpleSchema.js.map +1 -1
- package/lib/simple-tree/api/index.d.ts +2 -1
- package/lib/simple-tree/api/index.d.ts.map +1 -1
- package/lib/simple-tree/api/index.js +1 -0
- package/lib/simple-tree/api/index.js.map +1 -1
- package/lib/simple-tree/api/jsonSchema.d.ts +13 -14
- package/lib/simple-tree/api/jsonSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/jsonSchema.js.map +1 -1
- package/lib/simple-tree/api/schemaFactory.d.ts +14 -8
- package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactory.js +21 -2
- package/lib/simple-tree/api/schemaFactory.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +3 -3
- package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
- package/lib/simple-tree/api/simpleSchema.d.ts +18 -10
- package/lib/simple-tree/api/simpleSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/simpleSchema.js.map +1 -1
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.js +31 -18
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
- package/lib/simple-tree/api/tree.d.ts +16 -6
- package/lib/simple-tree/api/tree.d.ts.map +1 -1
- package/lib/simple-tree/api/tree.js +4 -4
- package/lib/simple-tree/api/tree.js.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.js +10 -8
- 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 +6 -10
- package/lib/simple-tree/api/verboseTree.js.map +1 -1
- package/{dist/feature-libraries/typed-schema → lib/simple-tree/api}/view.d.ts +4 -11
- package/lib/simple-tree/api/view.d.ts.map +1 -0
- package/lib/{feature-libraries/typed-schema → simple-tree/api}/view.js +9 -9
- package/lib/simple-tree/api/view.js.map +1 -0
- package/lib/simple-tree/api/viewSchemaToSimpleSchema.d.ts +2 -2
- package/lib/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/viewSchemaToSimpleSchema.js +11 -1
- package/lib/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
- package/lib/simple-tree/arrayNode.d.ts +147 -14
- package/lib/simple-tree/arrayNode.d.ts.map +1 -1
- package/lib/simple-tree/arrayNode.js +37 -25
- package/lib/simple-tree/arrayNode.js.map +1 -1
- package/lib/simple-tree/core/context.d.ts +55 -0
- package/lib/simple-tree/core/context.d.ts.map +1 -0
- package/lib/simple-tree/core/context.js +55 -0
- package/lib/simple-tree/core/context.js.map +1 -0
- package/lib/simple-tree/core/getOrCreateNode.d.ts +15 -0
- package/lib/simple-tree/core/getOrCreateNode.d.ts.map +1 -0
- package/lib/simple-tree/core/getOrCreateNode.js +32 -0
- package/lib/simple-tree/core/getOrCreateNode.js.map +1 -0
- package/lib/simple-tree/core/index.d.ts +7 -3
- package/lib/simple-tree/core/index.d.ts.map +1 -1
- package/lib/simple-tree/core/index.js +6 -2
- package/lib/simple-tree/core/index.js.map +1 -1
- package/lib/simple-tree/core/schemaCaching.d.ts +5 -13
- package/lib/simple-tree/core/schemaCaching.d.ts.map +1 -1
- package/lib/simple-tree/core/schemaCaching.js +13 -39
- package/lib/simple-tree/core/schemaCaching.js.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.d.ts +29 -7
- package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js +89 -54
- package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.d.ts +24 -0
- package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/lib/simple-tree/core/types.d.ts +0 -5
- package/lib/simple-tree/core/types.d.ts.map +1 -1
- package/lib/simple-tree/core/types.js.map +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.d.ts +139 -0
- package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -0
- package/lib/{feature-libraries/flex-map-tree/mapTreeNode.js → simple-tree/core/unhydratedFlexTree.js} +110 -128
- package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -0
- package/lib/simple-tree/{walkSchema.d.ts → core/walkSchema.d.ts} +8 -4
- package/lib/simple-tree/core/walkSchema.d.ts.map +1 -0
- package/lib/simple-tree/core/walkSchema.js +29 -0
- package/lib/simple-tree/core/walkSchema.js.map +1 -0
- package/lib/simple-tree/createContext.d.ts +11 -0
- package/lib/simple-tree/createContext.d.ts.map +1 -0
- package/lib/simple-tree/createContext.js +21 -0
- package/lib/simple-tree/createContext.js.map +1 -0
- package/lib/simple-tree/index.d.ts +4 -5
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +3 -4
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/leafNodeSchema.d.ts +1 -0
- package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/leafNodeSchema.js +3 -4
- package/lib/simple-tree/leafNodeSchema.js.map +1 -1
- package/lib/simple-tree/mapNode.d.ts +4 -4
- package/lib/simple-tree/mapNode.d.ts.map +1 -1
- package/lib/simple-tree/mapNode.js +12 -8
- package/lib/simple-tree/mapNode.js.map +1 -1
- package/lib/simple-tree/objectNode.d.ts +8 -8
- package/lib/simple-tree/objectNode.d.ts.map +1 -1
- package/lib/simple-tree/objectNode.js +36 -17
- package/lib/simple-tree/objectNode.js.map +1 -1
- package/lib/simple-tree/objectNodeTypes.d.ts +7 -3
- package/lib/simple-tree/objectNodeTypes.d.ts.map +1 -1
- package/lib/simple-tree/objectNodeTypes.js.map +1 -1
- package/lib/simple-tree/proxies.d.ts +1 -2
- package/lib/simple-tree/proxies.d.ts.map +1 -1
- package/lib/simple-tree/proxies.js +7 -22
- package/lib/simple-tree/proxies.js.map +1 -1
- package/lib/simple-tree/schemaTypes.d.ts +44 -4
- package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
- package/lib/simple-tree/schemaTypes.js +10 -0
- package/lib/simple-tree/schemaTypes.js.map +1 -1
- package/lib/simple-tree/toFlexSchema.d.ts +6 -36
- package/lib/simple-tree/toFlexSchema.d.ts.map +1 -1
- package/lib/simple-tree/toFlexSchema.js +61 -142
- package/lib/simple-tree/toFlexSchema.js.map +1 -1
- package/lib/simple-tree/toMapTree.d.ts.map +1 -1
- package/lib/simple-tree/toMapTree.js +4 -4
- package/lib/simple-tree/toMapTree.js.map +1 -1
- package/lib/simple-tree/treeNodeValid.d.ts +13 -5
- package/lib/simple-tree/treeNodeValid.d.ts.map +1 -1
- package/lib/simple-tree/treeNodeValid.js +21 -12
- package/lib/simple-tree/treeNodeValid.js.map +1 -1
- package/lib/simple-tree/typesUnsafe.d.ts +4 -4
- package/lib/simple-tree/typesUnsafe.d.ts.map +1 -1
- package/lib/simple-tree/typesUnsafe.js.map +1 -1
- package/lib/simple-tree/walkFieldSchema.d.ts +11 -0
- package/lib/simple-tree/walkFieldSchema.d.ts.map +1 -0
- package/lib/simple-tree/walkFieldSchema.js +13 -0
- package/lib/simple-tree/walkFieldSchema.js.map +1 -0
- package/lib/util/index.d.ts +1 -1
- package/lib/util/index.d.ts.map +1 -1
- package/lib/util/index.js.map +1 -1
- package/lib/util/typeUtils.d.ts +14 -45
- package/lib/util/typeUtils.d.ts.map +1 -1
- package/lib/util/typeUtils.js.map +1 -1
- package/package.json +41 -22
- package/src/core/index.ts +1 -0
- package/src/core/rebase/index.ts +1 -0
- package/src/core/rebase/types.ts +11 -0
- package/src/core/schema-stored/schema.ts +18 -0
- package/src/core/tree/anchorSet.ts +3 -4
- package/src/core/tree/detachedFieldIndex.ts +14 -3
- package/src/core/tree/detachedFieldIndexTypes.ts +1 -1
- package/src/feature-libraries/editableTreeBinder.ts +2 -915
- package/src/feature-libraries/flex-tree/context.ts +7 -20
- package/src/feature-libraries/flex-tree/flexTreeTypes.ts +2 -18
- package/src/feature-libraries/flex-tree/lazyEntity.ts +1 -4
- package/src/feature-libraries/flex-tree/lazyField.ts +22 -78
- package/src/feature-libraries/flex-tree/lazyNode.ts +24 -39
- package/src/feature-libraries/flex-tree/utilities.ts +1 -1
- package/src/feature-libraries/index.ts +3 -71
- package/src/feature-libraries/modular-schema/modularChangeFamily.ts +97 -10
- package/src/feature-libraries/sequence-field/compose.ts +3 -0
- package/src/feature-libraries/sequence-field/utils.ts +2 -4
- package/src/feature-libraries/typed-schema/flexList.ts +3 -84
- package/src/feature-libraries/typed-schema/index.ts +1 -33
- package/src/feature-libraries/typed-schema/typedTreeSchema.ts +0 -458
- package/src/index.ts +7 -0
- package/src/internalTypes.ts +0 -1
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/checkoutFlexTreeView.ts +3 -3
- package/src/shared-tree/index.ts +4 -8
- package/src/shared-tree/schematizeTree.ts +2 -56
- package/src/shared-tree/schematizingTreeView.ts +38 -15
- package/src/shared-tree/sharedTree.ts +36 -8
- package/src/shared-tree/treeCheckout.ts +225 -128
- package/src/shared-tree-core/branch.ts +15 -26
- package/src/simple-tree/api/create.ts +18 -20
- package/src/simple-tree/api/getJsonSchema.ts +3 -3
- package/src/simple-tree/api/getSimpleSchema.ts +2 -2
- package/src/simple-tree/api/index.ts +2 -0
- package/src/simple-tree/api/jsonSchema.ts +19 -17
- package/src/simple-tree/api/schemaFactory.ts +53 -18
- package/src/simple-tree/api/schemaFactoryRecursive.ts +3 -6
- package/src/simple-tree/api/simpleSchema.ts +20 -10
- package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +40 -19
- package/src/simple-tree/api/tree.ts +20 -9
- package/src/simple-tree/api/treeNodeApi.ts +12 -10
- package/src/simple-tree/api/verboseTree.ts +6 -12
- package/src/{feature-libraries/typed-schema → simple-tree/api}/view.ts +9 -22
- package/src/simple-tree/api/viewSchemaToSimpleSchema.ts +18 -4
- package/src/simple-tree/arrayNode.ts +202 -53
- package/src/simple-tree/core/context.ts +78 -0
- package/src/simple-tree/core/getOrCreateNode.ts +38 -0
- package/src/simple-tree/core/index.ts +11 -7
- package/src/simple-tree/core/schemaCaching.ts +13 -50
- package/src/simple-tree/core/treeNodeKernel.ts +117 -78
- package/src/simple-tree/core/treeNodeSchema.ts +35 -1
- package/src/simple-tree/core/types.ts +0 -5
- package/src/{feature-libraries/flex-map-tree/mapTreeNode.ts → simple-tree/core/unhydratedFlexTree.ts} +167 -210
- package/src/simple-tree/{walkSchema.ts → core/walkSchema.ts} +12 -34
- package/src/simple-tree/createContext.ts +24 -0
- package/src/simple-tree/index.ts +6 -2
- package/src/simple-tree/leafNodeSchema.ts +3 -9
- package/src/simple-tree/mapNode.ts +20 -17
- package/src/simple-tree/objectNode.ts +63 -38
- package/src/simple-tree/objectNodeTypes.ts +8 -5
- package/src/simple-tree/proxies.ts +8 -26
- package/src/simple-tree/schemaTypes.ts +55 -5
- package/src/simple-tree/toFlexSchema.ts +71 -204
- package/src/simple-tree/toMapTree.ts +5 -5
- package/src/simple-tree/treeNodeValid.ts +28 -22
- package/src/simple-tree/typesUnsafe.ts +4 -4
- package/src/simple-tree/walkFieldSchema.ts +19 -0
- package/src/util/index.ts +1 -5
- package/src/util/typeUtils.ts +14 -56
- package/dist/feature-libraries/fieldGenerator.d.ts +0 -43
- package/dist/feature-libraries/fieldGenerator.d.ts.map +0 -1
- package/dist/feature-libraries/fieldGenerator.js +0 -13
- package/dist/feature-libraries/fieldGenerator.js.map +0 -1
- package/dist/feature-libraries/flex-map-tree/index.d.ts +0 -6
- package/dist/feature-libraries/flex-map-tree/index.d.ts.map +0 -1
- package/dist/feature-libraries/flex-map-tree/index.js +0 -14
- package/dist/feature-libraries/flex-map-tree/index.js.map +0 -1
- package/dist/feature-libraries/flex-map-tree/mapTreeNode.d.ts +0 -157
- package/dist/feature-libraries/flex-map-tree/mapTreeNode.d.ts.map +0 -1
- package/dist/feature-libraries/flex-map-tree/mapTreeNode.js.map +0 -1
- package/dist/feature-libraries/storedToViewSchema.d.ts +0 -17
- package/dist/feature-libraries/storedToViewSchema.d.ts.map +0 -1
- package/dist/feature-libraries/storedToViewSchema.js +0 -67
- package/dist/feature-libraries/storedToViewSchema.js.map +0 -1
- package/dist/feature-libraries/typed-schema/schemaCollection.d.ts +0 -58
- package/dist/feature-libraries/typed-schema/schemaCollection.d.ts.map +0 -1
- package/dist/feature-libraries/typed-schema/schemaCollection.js +0 -160
- package/dist/feature-libraries/typed-schema/schemaCollection.js.map +0 -1
- package/dist/feature-libraries/typed-schema/typeUtils.d.ts +0 -15
- package/dist/feature-libraries/typed-schema/typeUtils.d.ts.map +0 -1
- package/dist/feature-libraries/typed-schema/typeUtils.js +0 -14
- package/dist/feature-libraries/typed-schema/typeUtils.js.map +0 -1
- package/dist/feature-libraries/typed-schema/view.d.ts.map +0 -1
- package/dist/feature-libraries/typed-schema/view.js.map +0 -1
- package/dist/simple-tree/getSimpleFieldSchema.d.ts +0 -14
- package/dist/simple-tree/getSimpleFieldSchema.d.ts.map +0 -1
- package/dist/simple-tree/getSimpleFieldSchema.js +0 -29
- package/dist/simple-tree/getSimpleFieldSchema.js.map +0 -1
- package/dist/simple-tree/walkSchema.d.ts.map +0 -1
- package/dist/simple-tree/walkSchema.js +0 -49
- package/dist/simple-tree/walkSchema.js.map +0 -1
- package/lib/feature-libraries/fieldGenerator.d.ts +0 -43
- package/lib/feature-libraries/fieldGenerator.d.ts.map +0 -1
- package/lib/feature-libraries/fieldGenerator.js +0 -12
- package/lib/feature-libraries/fieldGenerator.js.map +0 -1
- package/lib/feature-libraries/flex-map-tree/index.d.ts +0 -6
- package/lib/feature-libraries/flex-map-tree/index.d.ts.map +0 -1
- package/lib/feature-libraries/flex-map-tree/index.js +0 -6
- package/lib/feature-libraries/flex-map-tree/index.js.map +0 -1
- package/lib/feature-libraries/flex-map-tree/mapTreeNode.d.ts +0 -157
- package/lib/feature-libraries/flex-map-tree/mapTreeNode.d.ts.map +0 -1
- package/lib/feature-libraries/flex-map-tree/mapTreeNode.js.map +0 -1
- package/lib/feature-libraries/storedToViewSchema.d.ts +0 -17
- package/lib/feature-libraries/storedToViewSchema.d.ts.map +0 -1
- package/lib/feature-libraries/storedToViewSchema.js +0 -62
- package/lib/feature-libraries/storedToViewSchema.js.map +0 -1
- package/lib/feature-libraries/typed-schema/schemaCollection.d.ts +0 -58
- package/lib/feature-libraries/typed-schema/schemaCollection.d.ts.map +0 -1
- package/lib/feature-libraries/typed-schema/schemaCollection.js +0 -153
- package/lib/feature-libraries/typed-schema/schemaCollection.js.map +0 -1
- package/lib/feature-libraries/typed-schema/typeUtils.d.ts +0 -15
- package/lib/feature-libraries/typed-schema/typeUtils.d.ts.map +0 -1
- package/lib/feature-libraries/typed-schema/typeUtils.js +0 -10
- package/lib/feature-libraries/typed-schema/typeUtils.js.map +0 -1
- package/lib/feature-libraries/typed-schema/view.d.ts.map +0 -1
- package/lib/feature-libraries/typed-schema/view.js.map +0 -1
- package/lib/simple-tree/getSimpleFieldSchema.d.ts +0 -14
- package/lib/simple-tree/getSimpleFieldSchema.d.ts.map +0 -1
- package/lib/simple-tree/getSimpleFieldSchema.js +0 -25
- package/lib/simple-tree/getSimpleFieldSchema.js.map +0 -1
- package/lib/simple-tree/walkSchema.d.ts.map +0 -1
- package/lib/simple-tree/walkSchema.js +0 -43
- package/lib/simple-tree/walkSchema.js.map +0 -1
- package/src/feature-libraries/fieldGenerator.ts +0 -47
- package/src/feature-libraries/flex-map-tree/index.ts +0 -14
- package/src/feature-libraries/storedToViewSchema.ts +0 -100
- package/src/feature-libraries/typed-schema/schemaCollection.ts +0 -254
- package/src/feature-libraries/typed-schema/typeUtils.ts +0 -29
- package/src/simple-tree/getSimpleFieldSchema.ts +0 -36
|
@@ -5,68 +5,31 @@
|
|
|
5
5
|
|
|
6
6
|
import { assert } from "@fluidframework/core-utils/internal";
|
|
7
7
|
|
|
8
|
-
import type { FlexTreeNodeSchema, TreeNodeSchemaBase } from "../../feature-libraries/index.js";
|
|
9
8
|
import { fail } from "../../util/index.js";
|
|
10
9
|
|
|
11
10
|
import type { TreeNodeSchema } from "./treeNodeSchema.js";
|
|
12
11
|
import type { InnerNode } from "./treeNodeKernel.js";
|
|
12
|
+
import { UnhydratedFlexTreeNode } from "./unhydratedFlexTree.js";
|
|
13
|
+
import { SimpleContextSlot, type Context } from "./context.js";
|
|
13
14
|
|
|
14
15
|
/**
|
|
15
|
-
*
|
|
16
|
-
* Eagerly set on leaves, and lazily set for other cases.
|
|
17
|
-
*/
|
|
18
|
-
const flexSchemaSymbol: unique symbol = Symbol(`flexSchema`);
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* A symbol for storing TreeNodeSchema on FlexTreeNode's schema.
|
|
16
|
+
* Gets the {@link TreeNodeSchema} for the {@link InnerNode}.
|
|
22
17
|
*/
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
schema: TreeNodeSchema,
|
|
27
|
-
): TreeNodeSchemaBase | undefined {
|
|
28
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
29
|
-
return (schema as any)[flexSchemaSymbol] as TreeNodeSchemaBase | undefined;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export function setFlexSchemaFromClassSchema(
|
|
33
|
-
simple: TreeNodeSchema,
|
|
34
|
-
flex: TreeNodeSchemaBase,
|
|
35
|
-
): void {
|
|
36
|
-
assert(!(flexSchemaSymbol in simple), 0x91f /* simple schema already marked */);
|
|
37
|
-
assert(!(simpleNodeSchemaSymbol in flex), 0x920 /* flex schema already marked */);
|
|
38
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
39
|
-
(simple as any)[flexSchemaSymbol] = flex;
|
|
40
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
41
|
-
(flex as any)[simpleNodeSchemaSymbol] = simple;
|
|
18
|
+
export function getSimpleNodeSchemaFromInnerNode(innerNode: InnerNode): TreeNodeSchema {
|
|
19
|
+
const context: Context = getSimpleContextFromInnerNode(innerNode);
|
|
20
|
+
return context.schema.get(innerNode.schema) ?? fail("missing schema from context");
|
|
42
21
|
}
|
|
43
22
|
|
|
44
23
|
/**
|
|
45
|
-
* Gets the {@link
|
|
46
|
-
* Returns `undefined` if no cached value is found.
|
|
24
|
+
* Gets the {@link Context} for the {@link InnerNode}.
|
|
47
25
|
*/
|
|
48
|
-
export function
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
if (simpleNodeSchemaSymbol in flexSchema) {
|
|
52
|
-
return flexSchema[simpleNodeSchemaSymbol] as TreeNodeSchema;
|
|
26
|
+
export function getSimpleContextFromInnerNode(innerNode: InnerNode): Context {
|
|
27
|
+
if (innerNode instanceof UnhydratedFlexTreeNode) {
|
|
28
|
+
return innerNode.simpleContext;
|
|
53
29
|
}
|
|
54
|
-
return undefined;
|
|
55
|
-
}
|
|
56
30
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
* Fails if no cached value is found.
|
|
60
|
-
*/
|
|
61
|
-
export function getSimpleNodeSchema(flexSchema: FlexTreeNodeSchema): TreeNodeSchema {
|
|
62
|
-
return tryGetSimpleNodeSchema(flexSchema) ?? fail("missing simple schema");
|
|
63
|
-
}
|
|
31
|
+
const context = innerNode.anchorNode.anchorSet.slots.get(SimpleContextSlot);
|
|
32
|
+
assert(context !== undefined, "missing simple tree context");
|
|
64
33
|
|
|
65
|
-
|
|
66
|
-
* Gets the {@link TreeNodeSchema} for the {@link InnerNode}.
|
|
67
|
-
*/
|
|
68
|
-
export function getSimpleNodeSchemaFromNode(innerNode: InnerNode): TreeNodeSchema {
|
|
69
|
-
// TODO: to make this work without depending on flex tree schema, a new caching/lookup mechanism will be required, likely leveraging the FlexTreeContext:
|
|
70
|
-
// A SimpleTreeContext could be defined and associated with the FlexTreeContext, and used to look up simple-tree schema by identifier.
|
|
71
|
-
return getSimpleNodeSchema(innerNode.flexSchema);
|
|
34
|
+
return context;
|
|
72
35
|
}
|
|
@@ -3,14 +3,8 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { assert } from "@fluidframework/core-utils/internal";
|
|
7
|
-
import {
|
|
8
|
-
createEmitter,
|
|
9
|
-
type HasListeners,
|
|
10
|
-
type IEmitter,
|
|
11
|
-
type Listenable,
|
|
12
|
-
type Off,
|
|
13
|
-
} from "../../events/index.js";
|
|
6
|
+
import { assert, Lazy } from "@fluidframework/core-utils/internal";
|
|
7
|
+
import { createEmitter, type Listenable, type Off } from "../../events/index.js";
|
|
14
8
|
import type { TreeNode, Unhydrated } from "./types.js";
|
|
15
9
|
import {
|
|
16
10
|
anchorSlot,
|
|
@@ -25,18 +19,18 @@ import {
|
|
|
25
19
|
flexTreeSlot,
|
|
26
20
|
isFlexTreeNode,
|
|
27
21
|
isFreedSymbol,
|
|
28
|
-
isMapTreeNode,
|
|
29
22
|
LazyEntity,
|
|
30
23
|
TreeStatus,
|
|
31
24
|
treeStatusFromAnchorCache,
|
|
32
25
|
type FlexTreeNode,
|
|
33
|
-
type MapTreeNode,
|
|
34
26
|
} from "../../feature-libraries/index.js";
|
|
35
27
|
import type { TreeNodeSchema } from "./treeNodeSchema.js";
|
|
36
28
|
import { fail } from "../../util/index.js";
|
|
37
29
|
// TODO: decide how to deal with dependencies on flex-tree implementation.
|
|
38
30
|
// eslint-disable-next-line import/no-internal-modules
|
|
39
31
|
import { makeTree } from "../../feature-libraries/flex-tree/lazyNode.js";
|
|
32
|
+
import { SimpleContextSlot, type Context } from "./context.js";
|
|
33
|
+
import { UnhydratedFlexTreeNode } from "./unhydratedFlexTree.js";
|
|
40
34
|
|
|
41
35
|
const treeNodeToKernel = new WeakMap<TreeNode, TreeNodeKernel>();
|
|
42
36
|
|
|
@@ -76,6 +70,25 @@ export function tryGetTreeNodeSchema(value: unknown): undefined | TreeNodeSchema
|
|
|
76
70
|
return kernel?.schema;
|
|
77
71
|
}
|
|
78
72
|
|
|
73
|
+
/** The {@link HydrationState} of a {@link TreeNodeKernel} before the kernel is hydrated */
|
|
74
|
+
type UnhydratedState = Off;
|
|
75
|
+
|
|
76
|
+
/** The {@link HydrationState} of a {@link TreeNodeKernel} after the kernel is hydrated */
|
|
77
|
+
interface HydratedState {
|
|
78
|
+
/** The {@link AnchorNode} that this node is associated with. */
|
|
79
|
+
anchorNode: AnchorNode;
|
|
80
|
+
/** All {@link Off | event deregistration functions} that should be run when the kernel is disposed. */
|
|
81
|
+
offAnchorNode: Set<Off>;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/** State within a {@link TreeNodeKernel} that is related to the hydration process */
|
|
85
|
+
type HydrationState = UnhydratedState | HydratedState;
|
|
86
|
+
|
|
87
|
+
/** True if and only if the given {@link HydrationState} is post-hydration */
|
|
88
|
+
function isHydrated(state: HydrationState): state is HydratedState {
|
|
89
|
+
return typeof state === "object";
|
|
90
|
+
}
|
|
91
|
+
|
|
79
92
|
/**
|
|
80
93
|
* Contains state and an internal API for managing {@link TreeNode}s.
|
|
81
94
|
* @remarks All {@link TreeNode}s have an associated kernel object.
|
|
@@ -97,43 +110,22 @@ export class TreeNodeKernel implements Listenable<KernelEvents> {
|
|
|
97
110
|
*/
|
|
98
111
|
public generationNumber: number = 0;
|
|
99
112
|
|
|
100
|
-
#
|
|
101
|
-
anchorNode: AnchorNode;
|
|
102
|
-
offAnchorNode: Set<Off>;
|
|
103
|
-
};
|
|
113
|
+
#hydrationState: HydrationState = () => {};
|
|
104
114
|
|
|
105
115
|
/**
|
|
106
116
|
* Events registered before hydration.
|
|
107
117
|
* @remarks
|
|
108
|
-
*
|
|
109
|
-
|
|
110
|
-
#preHydrationEvents?: Listenable<KernelEvents> &
|
|
111
|
-
IEmitter<KernelEvents> &
|
|
112
|
-
HasListeners<KernelEvents>;
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* Get the listener.
|
|
116
|
-
* @remarks
|
|
117
|
-
* If before hydration, allocates and uses `#preHydrationEvents`, otherwise the anchorNode.
|
|
118
|
-
* This design avoids allocating `#preHydrationEvents` if unneeded.
|
|
119
|
-
*
|
|
120
|
-
* This design also avoids extra forwarding overhead for events from anchorNode and also
|
|
121
|
-
* avoids registering for events that are unneeded.
|
|
118
|
+
* Since these are usually not used, they are allocated lazily as an optimization.
|
|
119
|
+
* The laziness also avoids extra forwarding overhead for events from this kernel's anchor node and also avoids registering for events that are unneeded.
|
|
122
120
|
* This means optimizations like skipping processing data in subtrees where no subtreeChanged events are subscribed to would be able to work,
|
|
123
|
-
* since
|
|
121
|
+
* since the kernel does not unconditionally subscribe to those events (like a design which simply forwards all events would).
|
|
124
122
|
*/
|
|
125
|
-
|
|
126
|
-
if (this.#hydrated === undefined) {
|
|
127
|
-
this.#preHydrationEvents ??= createEmitter<KernelEvents>();
|
|
128
|
-
return this.#preHydrationEvents;
|
|
129
|
-
} else {
|
|
130
|
-
return this.#hydrated.anchorNode;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
123
|
+
readonly #unhydratedEvents = new Lazy(createEmitter<KernelEvents>);
|
|
133
124
|
|
|
134
125
|
/**
|
|
135
126
|
* Create a TreeNodeKernel which can be looked up with {@link getKernel}.
|
|
136
127
|
*
|
|
128
|
+
* @param initialContext - context from when this node was originally crated.
|
|
137
129
|
* @param innerNode - When unhydrated/raw or marinated the MapTreeNode. FlexTreeNode when cooked.
|
|
138
130
|
* @remarks
|
|
139
131
|
* Exactly one kernel per TreeNode should be created.
|
|
@@ -142,13 +134,35 @@ export class TreeNodeKernel implements Listenable<KernelEvents> {
|
|
|
142
134
|
public readonly node: TreeNode,
|
|
143
135
|
public readonly schema: TreeNodeSchema,
|
|
144
136
|
private innerNode: InnerNode,
|
|
137
|
+
private readonly initialContext: Context,
|
|
145
138
|
) {
|
|
146
139
|
assert(!treeNodeToKernel.has(node), 0xa1a /* only one kernel per node can be made */);
|
|
147
140
|
treeNodeToKernel.set(node, this);
|
|
148
141
|
|
|
149
|
-
if (
|
|
142
|
+
if (innerNode instanceof UnhydratedFlexTreeNode) {
|
|
150
143
|
// Unhydrated case
|
|
151
144
|
mapTreeNodeToProxy.set(innerNode, node);
|
|
145
|
+
// Register for change events from the unhydrated flex node.
|
|
146
|
+
// These will be fired if the unhydrated node is edited, and will also be forwarded later to the hydrated node.
|
|
147
|
+
this.#hydrationState = innerNode.events.on(
|
|
148
|
+
"childrenChangedAfterBatch",
|
|
149
|
+
({ changedFields }) => {
|
|
150
|
+
this.#unhydratedEvents.value.emit("childrenChangedAfterBatch", {
|
|
151
|
+
changedFields,
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
let n: UnhydratedFlexTreeNode | undefined = innerNode;
|
|
155
|
+
while (n !== undefined) {
|
|
156
|
+
const treeNode = mapTreeNodeToProxy.get(n);
|
|
157
|
+
if (treeNode !== undefined) {
|
|
158
|
+
const kernel = getKernel(treeNode);
|
|
159
|
+
kernel.#unhydratedEvents.value.emit("subtreeChangedAfterBatch");
|
|
160
|
+
}
|
|
161
|
+
// This cast is safe because the parent (if it exists) of an unhydrated flex node is always another unhydrated flex node.
|
|
162
|
+
n = n.parentField.parent.parent as UnhydratedFlexTreeNode | undefined;
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
);
|
|
152
166
|
} else {
|
|
153
167
|
// Hydrated case
|
|
154
168
|
assert(
|
|
@@ -159,26 +173,36 @@ export class TreeNodeKernel implements Listenable<KernelEvents> {
|
|
|
159
173
|
}
|
|
160
174
|
}
|
|
161
175
|
|
|
176
|
+
public get context(): Context {
|
|
177
|
+
if (isHydrated(this.#hydrationState)) {
|
|
178
|
+
// This can't be cached on this.#hydrated during hydration since initial tree is hydrated before the context is cached on the anchorSet.
|
|
179
|
+
return (
|
|
180
|
+
this.#hydrationState?.anchorNode.anchorSet.slots.get(SimpleContextSlot) ??
|
|
181
|
+
fail("missing simple-tree context")
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
return this.initialContext;
|
|
185
|
+
}
|
|
186
|
+
|
|
162
187
|
/**
|
|
163
188
|
* Transition from {@link Unhydrated} to hydrated.
|
|
164
189
|
* Bi-directionally associates the given hydrated TreeNode to the given anchor node.
|
|
165
190
|
* @remarks
|
|
166
191
|
* Happens at most once for any given node.
|
|
167
|
-
* Cleans up mappings to {@link
|
|
192
|
+
* Cleans up mappings to {@link UnhydratedFlexTreeNode} - it is assumed that they are no longer needed once the proxy has an anchor node.
|
|
168
193
|
*/
|
|
169
194
|
public hydrate(anchorNode: AnchorNode): void {
|
|
170
195
|
assert(!this.disposed, 0xa2a /* cannot hydrate a disposed node */);
|
|
171
|
-
assert(this.#
|
|
196
|
+
assert(!isHydrated(this.#hydrationState), 0xa2b /* hydration should only happen once */);
|
|
172
197
|
|
|
173
198
|
// If the this node is raw and thus has a MapTreeNode, forget it:
|
|
174
|
-
if (
|
|
199
|
+
if (this.innerNode instanceof UnhydratedFlexTreeNode) {
|
|
175
200
|
mapTreeNodeToProxy.delete(this.innerNode);
|
|
176
201
|
}
|
|
177
202
|
|
|
178
203
|
// However, it's fine for an anchor node to rotate through different proxies when the content at that place in the tree is replaced.
|
|
179
204
|
anchorNode.slots.set(proxySlot, this.node);
|
|
180
|
-
|
|
181
|
-
this.#hydrated = {
|
|
205
|
+
this.#hydrationState = {
|
|
182
206
|
anchorNode,
|
|
183
207
|
offAnchorNode: new Set([
|
|
184
208
|
anchorNode.on("afterDestroy", () => this.dispose()),
|
|
@@ -190,36 +214,30 @@ export class TreeNodeKernel implements Listenable<KernelEvents> {
|
|
|
190
214
|
};
|
|
191
215
|
|
|
192
216
|
// If needed, register forwarding emitters for events from before hydration
|
|
193
|
-
if (this.#
|
|
217
|
+
if (this.#unhydratedEvents.evaluated) {
|
|
218
|
+
const events = this.#unhydratedEvents.value;
|
|
194
219
|
for (const eventName of kernelEvents) {
|
|
195
|
-
if (
|
|
196
|
-
this.#
|
|
220
|
+
if (events.hasListeners(eventName)) {
|
|
221
|
+
this.#hydrationState.offAnchorNode.add(
|
|
197
222
|
// Argument is forwarded between matching events, so the type should be correct.
|
|
198
223
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
199
|
-
anchorNode.on(eventName, (arg: any) =>
|
|
200
|
-
this.#preHydrationEvents?.emit(eventName, arg),
|
|
201
|
-
),
|
|
224
|
+
anchorNode.on(eventName, (arg: any) => events.emit(eventName, arg)),
|
|
202
225
|
);
|
|
203
226
|
}
|
|
204
227
|
}
|
|
205
228
|
}
|
|
206
229
|
}
|
|
207
230
|
|
|
208
|
-
public isHydrated(): boolean {
|
|
209
|
-
assert(!this.disposed, 0xa2c /* cannot use a disposed node */);
|
|
210
|
-
return this.#hydrated !== undefined;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
231
|
public getStatus(): TreeStatus {
|
|
214
232
|
if (this.disposed) {
|
|
215
233
|
return TreeStatus.Deleted;
|
|
216
234
|
}
|
|
217
|
-
if (this.#
|
|
235
|
+
if (!isHydrated(this.#hydrationState)) {
|
|
218
236
|
return TreeStatus.New;
|
|
219
237
|
}
|
|
220
238
|
|
|
221
239
|
// TODO: Replace this check with the proper check against the cursor state when the cursor becomes part of the kernel
|
|
222
|
-
const flex = this.#
|
|
240
|
+
const flex = this.#hydrationState.anchorNode.slots.get(flexTreeSlot);
|
|
223
241
|
if (flex !== undefined) {
|
|
224
242
|
assert(flex instanceof LazyEntity, 0x9b4 /* Unexpected flex node implementation */);
|
|
225
243
|
if (flex[isFreedSymbol]()) {
|
|
@@ -227,17 +245,24 @@ export class TreeNodeKernel implements Listenable<KernelEvents> {
|
|
|
227
245
|
}
|
|
228
246
|
}
|
|
229
247
|
|
|
230
|
-
return treeStatusFromAnchorCache(this.#
|
|
248
|
+
return treeStatusFromAnchorCache(this.#hydrationState.anchorNode);
|
|
231
249
|
}
|
|
232
250
|
|
|
233
251
|
public on<K extends keyof KernelEvents>(eventName: K, listener: KernelEvents[K]): Off {
|
|
234
|
-
|
|
252
|
+
// Retrieve the correct events object based on whether this node is pre or post hydration.
|
|
253
|
+
const events: Listenable<KernelEvents> = isHydrated(this.#hydrationState)
|
|
254
|
+
? this.#hydrationState.anchorNode
|
|
255
|
+
: this.#unhydratedEvents.value;
|
|
256
|
+
|
|
257
|
+
return events.on(eventName, listener);
|
|
235
258
|
}
|
|
236
259
|
|
|
237
260
|
public dispose(): void {
|
|
238
261
|
this.disposed = true;
|
|
239
|
-
|
|
240
|
-
off
|
|
262
|
+
if (isHydrated(this.#hydrationState)) {
|
|
263
|
+
for (const off of this.#hydrationState.offAnchorNode) {
|
|
264
|
+
off();
|
|
265
|
+
}
|
|
241
266
|
}
|
|
242
267
|
// TODO: go to the context and remove myself from withAnchors
|
|
243
268
|
}
|
|
@@ -251,18 +276,17 @@ export class TreeNodeKernel implements Listenable<KernelEvents> {
|
|
|
251
276
|
* Note that for "marinated" nodes, this FlexTreeNode exists and returns it: it does not return the MapTreeNode which is the current InnerNode.
|
|
252
277
|
*/
|
|
253
278
|
public getOrCreateInnerNode(allowFreed = false): InnerNode {
|
|
254
|
-
if (!
|
|
279
|
+
if (!(this.innerNode instanceof UnhydratedFlexTreeNode)) {
|
|
255
280
|
// Cooked case
|
|
256
281
|
return this.innerNode;
|
|
257
282
|
}
|
|
258
283
|
|
|
259
|
-
if (this.#
|
|
260
|
-
// Unhydrated case
|
|
284
|
+
if (!isHydrated(this.#hydrationState)) {
|
|
261
285
|
return this.innerNode;
|
|
262
286
|
}
|
|
263
287
|
|
|
264
288
|
// Marinated case -> cooked
|
|
265
|
-
const anchorNode = this.#
|
|
289
|
+
const anchorNode = this.#hydrationState.anchorNode;
|
|
266
290
|
// The proxy is bound to an anchor node, but it may or may not have an actual flex node yet
|
|
267
291
|
const flexNode = anchorNode.slots.get(flexTreeSlot);
|
|
268
292
|
if (flexNode !== undefined) {
|
|
@@ -324,13 +348,12 @@ export class TreeNodeKernel implements Listenable<KernelEvents> {
|
|
|
324
348
|
return this.innerNode;
|
|
325
349
|
}
|
|
326
350
|
|
|
327
|
-
if (this.#
|
|
328
|
-
// Unhydrated case
|
|
351
|
+
if (!isHydrated(this.#hydrationState)) {
|
|
329
352
|
return this.innerNode;
|
|
330
353
|
}
|
|
331
354
|
|
|
332
355
|
// Marinated case -> cooked
|
|
333
|
-
const anchorNode = this.#
|
|
356
|
+
const anchorNode = this.#hydrationState.anchorNode;
|
|
334
357
|
// The proxy is bound to an anchor node, but it may or may not have an actual flex node yet
|
|
335
358
|
return anchorNode.slots.get(flexTreeSlot);
|
|
336
359
|
}
|
|
@@ -357,12 +380,12 @@ type KernelEvents = Pick<AnchorEvents, (typeof kernelEvents)[number]>;
|
|
|
357
380
|
* TODO: The inconsistent handling of "marinated" cases should be cleaned up.
|
|
358
381
|
* Maybe getOrCreateInnerNode should cook marinated nodes so they have a proper InnerNode?
|
|
359
382
|
*/
|
|
360
|
-
export type InnerNode = FlexTreeNode |
|
|
383
|
+
export type InnerNode = FlexTreeNode | UnhydratedFlexTreeNode;
|
|
361
384
|
|
|
362
385
|
/**
|
|
363
386
|
* {@inheritdoc proxyToMapTreeNode}
|
|
364
387
|
*/
|
|
365
|
-
const mapTreeNodeToProxy = new WeakMap<
|
|
388
|
+
export const mapTreeNodeToProxy = new WeakMap<UnhydratedFlexTreeNode, TreeNode>();
|
|
366
389
|
|
|
367
390
|
/**
|
|
368
391
|
* An anchor slot which associates an anchor with its corresponding TreeNode, if there is one.
|
|
@@ -370,18 +393,15 @@ const mapTreeNodeToProxy = new WeakMap<MapTreeNode, TreeNode>();
|
|
|
370
393
|
* For this to work, we have to require that there is at most a single view using a given AnchorSet.
|
|
371
394
|
* FlexTree already has this assumption, and we also assume there is a single simple-tree per FlexTree, so this is valid.
|
|
372
395
|
*/
|
|
373
|
-
const proxySlot = anchorSlot<TreeNode>();
|
|
396
|
+
export const proxySlot = anchorSlot<TreeNode>();
|
|
374
397
|
|
|
375
398
|
/**
|
|
376
|
-
* Retrieves the
|
|
399
|
+
* Retrieves the node associated with the given MapTreeNode node if any.
|
|
377
400
|
*/
|
|
378
|
-
export function
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
}
|
|
383
|
-
// Hydrated case
|
|
384
|
-
return flexNode.anchorNode.slots.get(proxySlot);
|
|
401
|
+
export function tryGetTreeNodeFromMapNode(
|
|
402
|
+
flexNode: UnhydratedFlexTreeNode,
|
|
403
|
+
): TreeNode | undefined {
|
|
404
|
+
return mapTreeNodeToProxy.get(flexNode);
|
|
385
405
|
}
|
|
386
406
|
|
|
387
407
|
export function tryDisposeTreeNode(anchorNode: AnchorNode): void {
|
|
@@ -391,3 +411,22 @@ export function tryDisposeTreeNode(anchorNode: AnchorNode): void {
|
|
|
391
411
|
kernel.dispose();
|
|
392
412
|
}
|
|
393
413
|
}
|
|
414
|
+
|
|
415
|
+
/**
|
|
416
|
+
* Lookup a TreeNodeSchema from a Hydrated FlexTreeNode.
|
|
417
|
+
* @privateRemarks
|
|
418
|
+
* This provides a way to access simple tree schema from the flex tree without depending on {@link FlexTreeSchema} which is in the process of being removed.
|
|
419
|
+
* This is currently limited to hydrated nodes: this limitation will have to be fixed before {@link FlexTreeSchema} can be fully removed.
|
|
420
|
+
*/
|
|
421
|
+
export function getTreeNodeSchemaFromHydratedFlexNode(flexNode: FlexTreeNode): TreeNodeSchema {
|
|
422
|
+
assert(
|
|
423
|
+
flexNode.context.isHydrated(),
|
|
424
|
+
"getTreeNodeSchemaFromHydratedFlexNode only allows hydrated flex tree nodes",
|
|
425
|
+
);
|
|
426
|
+
|
|
427
|
+
const context =
|
|
428
|
+
flexNode.anchorNode.anchorSet.slots.get(SimpleContextSlot) ??
|
|
429
|
+
fail("Missing SimpleContextSlot");
|
|
430
|
+
|
|
431
|
+
return context.schema.get(flexNode.schema) ?? fail("Missing schema");
|
|
432
|
+
}
|
|
@@ -108,13 +108,26 @@ export interface TreeNodeSchemaClass<
|
|
|
108
108
|
*/
|
|
109
109
|
new (data: TInsertable | InternalTreeNode): Unhydrated<TNode>;
|
|
110
110
|
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Internal helper for utilities that return schema which can be used in class and non class formats depending on the API exposing it.
|
|
114
|
+
*/
|
|
115
|
+
export type TreeNodeSchemaBoth<
|
|
116
|
+
Name extends string = string,
|
|
117
|
+
Kind extends NodeKind = NodeKind,
|
|
118
|
+
TNode = unknown,
|
|
119
|
+
TInsertable = never,
|
|
120
|
+
ImplicitlyConstructable extends boolean = boolean,
|
|
121
|
+
Info = unknown,
|
|
122
|
+
> = TreeNodeSchemaClass<Name, Kind, TNode, TInsertable, ImplicitlyConstructable, Info> &
|
|
123
|
+
TreeNodeSchemaNonClass<Name, Kind, TNode, TInsertable, ImplicitlyConstructable, Info>;
|
|
124
|
+
|
|
111
125
|
/**
|
|
112
126
|
* Data common to all tree node schema.
|
|
113
127
|
* @remarks
|
|
114
128
|
* Implementation detail of {@link TreeNodeSchema} which should be accessed instead of referring to this type directly.
|
|
115
129
|
* @sealed @public
|
|
116
130
|
*/
|
|
117
|
-
|
|
118
131
|
export interface TreeNodeSchemaCore<
|
|
119
132
|
out Name extends string,
|
|
120
133
|
out Kind extends NodeKind,
|
|
@@ -154,6 +167,27 @@ export interface TreeNodeSchemaCore<
|
|
|
154
167
|
* Setting this to false adjusts the insertable types to disallow cases which could be impacted by these inconsistencies.
|
|
155
168
|
*/
|
|
156
169
|
readonly implicitlyConstructable: ImplicitlyConstructable;
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* All possible schema that a direct child of a node with this schema could have.
|
|
173
|
+
*
|
|
174
|
+
* Equivalently, this is also all schema directly referenced when defining this schema's allowed child types,
|
|
175
|
+
* which is also the same as the set of schema referenced directly by the `Info` type parameter and the `info` property.
|
|
176
|
+
* This property is simply re-exposing that information in an easier to traverse format consistent across all node kinds.
|
|
177
|
+
* @remarks
|
|
178
|
+
* Some kinds of nodes may have additional restrictions on children:
|
|
179
|
+
* this set simply enumerates all directly referenced schema, and can be use to walk over all referenced schema types.
|
|
180
|
+
*
|
|
181
|
+
* This set cannot be used before the schema in it have been defined:
|
|
182
|
+
* more specifically, when using lazy schema references (for example to make foreword references to schema which have not yet been defined),
|
|
183
|
+
* users must wait until after the schema are defined to access this set.
|
|
184
|
+
* @privateRemarks
|
|
185
|
+
* Currently there isn't much use for this in the public API,
|
|
186
|
+
* and it's possible this will want to be tweaked or renamed as part of a larger schema reflection API surface that might be added later.
|
|
187
|
+
* To keep options option, this is marked `@system` for now.
|
|
188
|
+
* @system
|
|
189
|
+
*/
|
|
190
|
+
readonly childTypes: ReadonlySet<TreeNodeSchema>;
|
|
157
191
|
}
|
|
158
192
|
|
|
159
193
|
/**
|
|
@@ -32,11 +32,6 @@ export type Unhydrated<T> = T;
|
|
|
32
32
|
/**
|
|
33
33
|
* A collection of events that can be emitted by a {@link TreeNode}.
|
|
34
34
|
*
|
|
35
|
-
* @remarks
|
|
36
|
-
* Currently, events can be subscribed to for {@link Unhydrated} nodes, however no events will be triggered for the nodes until after they are hydrated.
|
|
37
|
-
* This is considered a known issue, and should be fixed in future versions.
|
|
38
|
-
* Do not rely on the fact that editing unhydrated nodes does not trigger their events.
|
|
39
|
-
*
|
|
40
35
|
* @privateRemarks
|
|
41
36
|
* TODO: add a way to subscribe to a specific field (for nodeChanged and treeChanged).
|
|
42
37
|
* Probably have object node and map node specific APIs for this.
|