@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
|
@@ -98,9 +98,12 @@ export function getExplicitStoredKey(fieldSchema: ImplicitFieldSchema): string |
|
|
|
98
98
|
/**
|
|
99
99
|
* Additional information to provide to a {@link FieldSchema}.
|
|
100
100
|
*
|
|
101
|
+
* @typeParam TCustomMetadata - Custom metadata properties to associate with the field.
|
|
102
|
+
* See {@link FieldSchemaMetadata.custom}.
|
|
103
|
+
*
|
|
101
104
|
* @public
|
|
102
105
|
*/
|
|
103
|
-
export interface FieldProps {
|
|
106
|
+
export interface FieldProps<TCustomMetadata = unknown> {
|
|
104
107
|
/**
|
|
105
108
|
* The unique identifier of a field, used in the persisted form of the tree.
|
|
106
109
|
*
|
|
@@ -152,12 +155,19 @@ export interface FieldProps {
|
|
|
152
155
|
* @defaultValue If not specified, the key that is persisted is the property key that was specified in the schema.
|
|
153
156
|
*/
|
|
154
157
|
readonly key?: string;
|
|
158
|
+
|
|
155
159
|
/**
|
|
156
160
|
* A default provider used for fields which were not provided any values.
|
|
157
161
|
* @privateRemarks
|
|
158
162
|
* We are using an erased type here, as we want to expose this API but `InsertableContent` and `NodeKeyManager` are not public.
|
|
159
163
|
*/
|
|
160
164
|
readonly defaultProvider?: DefaultProvider;
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Optional metadata to associate with the field.
|
|
168
|
+
* @remarks Note: this metadata is not persisted in the document.
|
|
169
|
+
*/
|
|
170
|
+
readonly metadata?: FieldSchemaMetadata<TCustomMetadata>;
|
|
161
171
|
}
|
|
162
172
|
|
|
163
173
|
/**
|
|
@@ -199,17 +209,44 @@ export function getDefaultProvider(input: FieldProvider): DefaultProvider {
|
|
|
199
209
|
return input as unknown as DefaultProvider;
|
|
200
210
|
}
|
|
201
211
|
|
|
212
|
+
/**
|
|
213
|
+
* Metadata associated with a {@link FieldSchema}.
|
|
214
|
+
*
|
|
215
|
+
* @remarks Specified via {@link FieldProps.metadata}.
|
|
216
|
+
*
|
|
217
|
+
* @sealed
|
|
218
|
+
* @public
|
|
219
|
+
*/
|
|
220
|
+
export interface FieldSchemaMetadata<TCustomMetadata = unknown> {
|
|
221
|
+
/**
|
|
222
|
+
* User-defined metadata.
|
|
223
|
+
*/
|
|
224
|
+
readonly custom?: TCustomMetadata;
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* The description of the field.
|
|
228
|
+
*
|
|
229
|
+
* @remarks
|
|
230
|
+
*
|
|
231
|
+
* If provided, will be used by the system in scenarios where a description of the field is useful.
|
|
232
|
+
* E.g., when converting a field schema to {@link https://json-schema.org/ | JSON Schema}, this description will be
|
|
233
|
+
* used as the `description` field.
|
|
234
|
+
*/
|
|
235
|
+
readonly description?: string | undefined;
|
|
236
|
+
}
|
|
237
|
+
|
|
202
238
|
/**
|
|
203
239
|
* Package internal construction API.
|
|
204
240
|
*/
|
|
205
241
|
export let createFieldSchema: <
|
|
206
242
|
Kind extends FieldKind = FieldKind,
|
|
207
243
|
Types extends ImplicitAllowedTypes = ImplicitAllowedTypes,
|
|
244
|
+
TCustomMetadata = unknown,
|
|
208
245
|
>(
|
|
209
246
|
kind: Kind,
|
|
210
247
|
allowedTypes: Types,
|
|
211
|
-
props?: FieldProps
|
|
212
|
-
) => FieldSchema<Kind, Types>;
|
|
248
|
+
props?: FieldProps<TCustomMetadata>,
|
|
249
|
+
) => FieldSchema<Kind, Types, TCustomMetadata>;
|
|
213
250
|
|
|
214
251
|
/**
|
|
215
252
|
* All policy for a specific field,
|
|
@@ -220,20 +257,26 @@ export let createFieldSchema: <
|
|
|
220
257
|
* @privateRemarks
|
|
221
258
|
* Public access to the constructor is removed to prevent creating expressible but unsupported (or not stable) configurations.
|
|
222
259
|
* {@link createFieldSchema} can be used internally to create instances.
|
|
260
|
+
*
|
|
261
|
+
* @typeParam TCustomMetadata - Custom metadata properties to associate with the field.
|
|
262
|
+
* See {@link FieldSchemaMetadata.custom}.
|
|
263
|
+
*
|
|
223
264
|
* @sealed @public
|
|
224
265
|
*/
|
|
225
266
|
export class FieldSchema<
|
|
226
267
|
out Kind extends FieldKind = FieldKind,
|
|
227
268
|
out Types extends ImplicitAllowedTypes = ImplicitAllowedTypes,
|
|
269
|
+
out TCustomMetadata = unknown,
|
|
228
270
|
> {
|
|
229
271
|
static {
|
|
230
272
|
createFieldSchema = <
|
|
231
273
|
Kind2 extends FieldKind = FieldKind,
|
|
232
274
|
Types2 extends ImplicitAllowedTypes = ImplicitAllowedTypes,
|
|
275
|
+
TCustomMetadata2 = unknown,
|
|
233
276
|
>(
|
|
234
277
|
kind: Kind2,
|
|
235
278
|
allowedTypes: Types2,
|
|
236
|
-
props?: FieldProps
|
|
279
|
+
props?: FieldProps<TCustomMetadata2>,
|
|
237
280
|
) => new FieldSchema(kind, allowedTypes, props);
|
|
238
281
|
}
|
|
239
282
|
/**
|
|
@@ -257,6 +300,13 @@ export class FieldSchema<
|
|
|
257
300
|
*/
|
|
258
301
|
public readonly requiresValue: boolean;
|
|
259
302
|
|
|
303
|
+
/**
|
|
304
|
+
* {@inheritDoc FieldProps.metadata}
|
|
305
|
+
*/
|
|
306
|
+
public get metadata(): FieldSchemaMetadata<TCustomMetadata> | undefined {
|
|
307
|
+
return this.props?.metadata;
|
|
308
|
+
}
|
|
309
|
+
|
|
260
310
|
private constructor(
|
|
261
311
|
/**
|
|
262
312
|
* The {@link https://en.wikipedia.org/wiki/Kind_(type_theory) | kind } of this field.
|
|
@@ -270,7 +320,7 @@ export class FieldSchema<
|
|
|
270
320
|
/**
|
|
271
321
|
* Optional properties associated with the field.
|
|
272
322
|
*/
|
|
273
|
-
public readonly props?: FieldProps
|
|
323
|
+
public readonly props?: FieldProps<TCustomMetadata>,
|
|
274
324
|
) {
|
|
275
325
|
this.lazyTypes = new Lazy(() => normalizeAllowedTypes(this.allowedTypes));
|
|
276
326
|
// TODO: optional fields should (by default) get a default provider that returns undefined, removing the need to special case them here:
|
|
@@ -8,131 +8,73 @@ import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
|
8
8
|
|
|
9
9
|
import {
|
|
10
10
|
EmptyKey,
|
|
11
|
+
LeafNodeStoredSchema,
|
|
12
|
+
MapNodeStoredSchema,
|
|
13
|
+
ObjectNodeStoredSchema,
|
|
14
|
+
type FieldKey,
|
|
15
|
+
type FieldKindIdentifier,
|
|
16
|
+
type TreeFieldStoredSchema,
|
|
11
17
|
type TreeNodeSchemaIdentifier,
|
|
12
18
|
type TreeNodeStoredSchema,
|
|
13
19
|
type TreeStoredSchema,
|
|
20
|
+
type TreeTypeSet,
|
|
14
21
|
} from "../core/index.js";
|
|
15
|
-
import {
|
|
16
|
-
FieldKinds,
|
|
17
|
-
type FlexAllowedTypes,
|
|
18
|
-
type FlexFieldKind,
|
|
19
|
-
FlexFieldSchema,
|
|
20
|
-
FlexMapNodeSchema,
|
|
21
|
-
FlexObjectNodeSchema,
|
|
22
|
-
type FlexTreeNodeSchema,
|
|
23
|
-
type FlexTreeSchema,
|
|
24
|
-
TreeNodeSchemaBase,
|
|
25
|
-
defaultSchemaPolicy,
|
|
26
|
-
intoStoredSchemaCollection,
|
|
27
|
-
schemaIsLeaf,
|
|
28
|
-
} from "../feature-libraries/index.js";
|
|
22
|
+
import { FieldKinds, type FlexFieldKind } from "../feature-libraries/index.js";
|
|
29
23
|
// TODO: once flex schema is gone, this code can move into simple-tree
|
|
30
24
|
// eslint-disable-next-line import/no-internal-modules
|
|
31
25
|
import { normalizeFlexListEager } from "../feature-libraries/typed-schema/index.js";
|
|
32
|
-
import { brand, fail, isReadonlyArray
|
|
33
|
-
import {
|
|
34
|
-
cachedFlexSchemaFromClassSchema,
|
|
35
|
-
setFlexSchemaFromClassSchema,
|
|
36
|
-
tryGetSimpleNodeSchema,
|
|
37
|
-
NodeKind,
|
|
38
|
-
type TreeNodeSchema,
|
|
39
|
-
} from "./core/index.js";
|
|
26
|
+
import { brand, fail, isReadonlyArray } from "../util/index.js";
|
|
27
|
+
import { NodeKind, type TreeNodeSchema } from "./core/index.js";
|
|
40
28
|
import {
|
|
41
29
|
FieldKind,
|
|
42
30
|
FieldSchema,
|
|
43
31
|
type ImplicitAllowedTypes,
|
|
44
32
|
type ImplicitFieldSchema,
|
|
45
|
-
getStoredKey,
|
|
46
33
|
} from "./schemaTypes.js";
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
readonly original: TreeNodeSchema;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
type SchemaMap = Map<TreeNodeSchemaIdentifier, SchemaInfo>;
|
|
34
|
+
import { walkFieldSchema } from "./walkFieldSchema.js";
|
|
35
|
+
import { LeafNodeSchema } from "./leafNodeSchema.js";
|
|
36
|
+
import { isObjectNodeSchema } from "./objectNodeTypes.js";
|
|
54
37
|
|
|
55
38
|
/**
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
* This also has the side effect of populating the cached view schema on the class-based schema.
|
|
39
|
+
* Converts a {@link ImplicitFieldSchema} into a {@link TreeStoredSchema}.
|
|
59
40
|
*/
|
|
60
|
-
export function
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
assert(
|
|
71
|
-
cachedFlexSchemaFromClassSchema(classSchema) === schema,
|
|
72
|
-
0x83f /* mismatched schema */,
|
|
41
|
+
export function toStoredSchema(root: ImplicitFieldSchema): TreeStoredSchema {
|
|
42
|
+
const nodeSchema: Map<TreeNodeSchemaIdentifier, TreeNodeStoredSchema> = new Map();
|
|
43
|
+
walkFieldSchema(root, {
|
|
44
|
+
node(schema) {
|
|
45
|
+
if (nodeSchema.has(brand(schema.identifier))) {
|
|
46
|
+
// Use JSON.stringify to quote and escape identifier string.
|
|
47
|
+
throw new UsageError(
|
|
48
|
+
`Multiple schema encountered with the identifier ${JSON.stringify(
|
|
49
|
+
schema.identifier,
|
|
50
|
+
)}. Remove or rename them to avoid the collision.`,
|
|
73
51
|
);
|
|
74
52
|
}
|
|
75
|
-
|
|
76
|
-
}
|
|
77
|
-
);
|
|
53
|
+
nodeSchema.set(brand(schema.identifier), getStoredSchema(schema));
|
|
54
|
+
},
|
|
55
|
+
});
|
|
78
56
|
|
|
79
|
-
const typed: FlexTreeSchema = {
|
|
80
|
-
nodeSchema,
|
|
81
|
-
adapters: {},
|
|
82
|
-
rootFieldSchema: field,
|
|
83
|
-
policy: defaultSchemaPolicy,
|
|
84
|
-
};
|
|
85
|
-
return typed;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Converts a {@link ImplicitFieldSchema} into a {@link TreeStoredSchema}.
|
|
90
|
-
*/
|
|
91
|
-
export function toStoredSchema(root: ImplicitFieldSchema): TreeStoredSchema {
|
|
92
|
-
const flex = toFlexSchema(root);
|
|
93
57
|
return {
|
|
94
|
-
|
|
95
|
-
|
|
58
|
+
nodeSchema,
|
|
59
|
+
rootFieldSchema: convertField(root),
|
|
96
60
|
};
|
|
97
61
|
}
|
|
98
62
|
|
|
99
|
-
/**
|
|
100
|
-
* Return a flex schema for the provided class schema.
|
|
101
|
-
*
|
|
102
|
-
* This also has the side effect of populating the cached view schema on the class based schema.
|
|
103
|
-
*/
|
|
104
|
-
export function getFlexSchema(root: TreeNodeSchema): FlexTreeNodeSchema {
|
|
105
|
-
const treeSchema = toFlexSchema(root);
|
|
106
|
-
return treeSchema.rootFieldSchema.monomorphicChildType ?? fail("root should be monomorphic");
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* Return a stored schema for the provided class schema.
|
|
111
|
-
*
|
|
112
|
-
* This also has the side effect of populating the cached view schema on the class based schema.
|
|
113
|
-
*/
|
|
114
|
-
export function getStoredSchema(root: TreeNodeSchema): TreeNodeStoredSchema {
|
|
115
|
-
return getFlexSchema(root).stored;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
63
|
/**
|
|
119
64
|
* Normalizes an {@link ImplicitFieldSchema} into a {@link TreeFieldSchema}.
|
|
120
65
|
*/
|
|
121
|
-
export function convertField(
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
): FlexFieldSchema {
|
|
125
|
-
let kind: FlexFieldKind;
|
|
126
|
-
let types: ImplicitAllowedTypes;
|
|
66
|
+
export function convertField(schema: ImplicitFieldSchema): TreeFieldStoredSchema {
|
|
67
|
+
let kind: FieldKindIdentifier;
|
|
68
|
+
let allowedTypes: ImplicitAllowedTypes;
|
|
127
69
|
if (schema instanceof FieldSchema) {
|
|
128
|
-
kind = convertFieldKind.get(schema.kind) ?? fail("Invalid field kind");
|
|
129
|
-
|
|
70
|
+
kind = convertFieldKind.get(schema.kind)?.identifier ?? fail("Invalid field kind");
|
|
71
|
+
allowedTypes = schema.allowedTypes;
|
|
130
72
|
} else {
|
|
131
|
-
kind = FieldKinds.required;
|
|
132
|
-
|
|
73
|
+
kind = FieldKinds.required.identifier;
|
|
74
|
+
allowedTypes = schema;
|
|
133
75
|
}
|
|
134
|
-
const
|
|
135
|
-
return
|
|
76
|
+
const types = convertAllowedTypes(allowedTypes);
|
|
77
|
+
return { kind, types };
|
|
136
78
|
}
|
|
137
79
|
|
|
138
80
|
const convertFieldKind = new Map<FieldKind, FlexFieldKind>([
|
|
@@ -142,123 +84,48 @@ const convertFieldKind = new Map<FieldKind, FlexFieldKind>([
|
|
|
142
84
|
]);
|
|
143
85
|
|
|
144
86
|
/**
|
|
145
|
-
* Normalizes an {@link ImplicitAllowedTypes} into an {@link
|
|
87
|
+
* Normalizes an {@link ImplicitAllowedTypes} into an {@link TreeTypeSet}.
|
|
146
88
|
*/
|
|
147
|
-
export function convertAllowedTypes(
|
|
148
|
-
schemaMap: SchemaMap,
|
|
149
|
-
schema: ImplicitAllowedTypes,
|
|
150
|
-
): FlexAllowedTypes {
|
|
89
|
+
export function convertAllowedTypes(schema: ImplicitAllowedTypes): TreeTypeSet {
|
|
151
90
|
if (isReadonlyArray(schema)) {
|
|
152
|
-
return normalizeFlexListEager(schema).map((item) =>
|
|
91
|
+
return new Set(normalizeFlexListEager(schema).map((item) => brand(item.identifier)));
|
|
153
92
|
}
|
|
154
|
-
return [
|
|
93
|
+
return new Set([brand(schema.identifier)]);
|
|
155
94
|
}
|
|
156
95
|
|
|
157
|
-
const builder = { name: "simple schema" };
|
|
158
|
-
|
|
159
96
|
/**
|
|
160
|
-
* Converts a {@link TreeNodeSchema} into a {@link
|
|
161
|
-
* Ensures all types reachable from `schema` are included in `schemaMap`.
|
|
162
|
-
*
|
|
163
|
-
* Return value (and entries in map) are lazy to allow recursive types to work.
|
|
164
|
-
* This laziness does NOT extend to adding entries to `schemaMap`:
|
|
165
|
-
* all referenced types are added to it before this function returns.
|
|
97
|
+
* Converts a {@link TreeNodeSchema} into a {@link TreeNodeStoredSchema}.
|
|
166
98
|
*/
|
|
167
|
-
export function
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
if (fromMap.original !== schema) {
|
|
174
|
-
// Use JSON.stringify to quote and escape identifier string.
|
|
175
|
-
throw new UsageError(
|
|
176
|
-
`Multiple schema encountered with the identifier ${JSON.stringify(
|
|
177
|
-
schema.identifier,
|
|
178
|
-
)}. Remove or rename them to avoid the collision.`,
|
|
179
|
-
);
|
|
99
|
+
export function getStoredSchema(schema: TreeNodeSchema): TreeNodeStoredSchema {
|
|
100
|
+
const kind = schema.kind;
|
|
101
|
+
switch (kind) {
|
|
102
|
+
case NodeKind.Leaf: {
|
|
103
|
+
assert(schema instanceof LeafNodeSchema, "invalid kind");
|
|
104
|
+
return new LeafNodeStoredSchema(schema.info);
|
|
180
105
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
let out: FlexTreeNodeSchema;
|
|
186
|
-
const kind = schema.kind;
|
|
187
|
-
switch (kind) {
|
|
188
|
-
case NodeKind.Leaf: {
|
|
189
|
-
const cached =
|
|
190
|
-
cachedFlexSchemaFromClassSchema(schema) ?? fail("leaf schema should be pre-cached");
|
|
191
|
-
assert(schemaIsLeaf(cached), 0x840 /* expected leaf */);
|
|
192
|
-
return cached;
|
|
193
|
-
}
|
|
194
|
-
case NodeKind.Map: {
|
|
195
|
-
const fieldInfo = schema.info as ImplicitAllowedTypes;
|
|
196
|
-
const field = FlexFieldSchema.create(
|
|
197
|
-
FieldKinds.optional,
|
|
198
|
-
convertAllowedTypes(schemaMap, fieldInfo),
|
|
199
|
-
);
|
|
200
|
-
// Lookup of cached schema is done here instead of before since walking the schema recursively to populate schemaMap is still required.
|
|
201
|
-
const cached = cachedFlexSchemaFromClassSchema(schema);
|
|
202
|
-
out =
|
|
203
|
-
cached ??
|
|
204
|
-
FlexMapNodeSchema.create(
|
|
205
|
-
builder,
|
|
206
|
-
brand<TreeNodeSchemaIdentifier>(schema.identifier),
|
|
207
|
-
field,
|
|
208
|
-
);
|
|
209
|
-
break;
|
|
210
|
-
}
|
|
211
|
-
case NodeKind.Array: {
|
|
212
|
-
const fieldInfo = schema.info as ImplicitAllowedTypes;
|
|
213
|
-
const field = FlexFieldSchema.create(
|
|
214
|
-
FieldKinds.sequence,
|
|
215
|
-
convertAllowedTypes(schemaMap, fieldInfo),
|
|
216
|
-
);
|
|
217
|
-
const cached = cachedFlexSchemaFromClassSchema(schema);
|
|
218
|
-
out =
|
|
219
|
-
cached ??
|
|
220
|
-
FlexObjectNodeSchema.create(builder, brand(schema.identifier), {
|
|
221
|
-
[EmptyKey]: field,
|
|
222
|
-
});
|
|
223
|
-
break;
|
|
224
|
-
}
|
|
225
|
-
case NodeKind.Object: {
|
|
226
|
-
const info = schema.info as Record<string, ImplicitFieldSchema>;
|
|
227
|
-
const fields: Record<string, FlexFieldSchema> = Object.create(null);
|
|
228
|
-
for (const [propertyKey, implicitFieldSchema] of Object.entries(info)) {
|
|
229
|
-
// If a `stored key` was provided, use it as the key in the flex schema.
|
|
230
|
-
// Otherwise, use the property key.
|
|
231
|
-
const flexKey = getStoredKey(propertyKey, implicitFieldSchema);
|
|
232
|
-
|
|
233
|
-
// This code has to be careful to avoid assigning to __proto__ or similar built-in fields.
|
|
234
|
-
Object.defineProperty(fields, flexKey, {
|
|
235
|
-
enumerable: true,
|
|
236
|
-
configurable: false,
|
|
237
|
-
writable: false,
|
|
238
|
-
value: convertField(schemaMap, implicitFieldSchema),
|
|
239
|
-
});
|
|
240
|
-
}
|
|
241
|
-
const cached = cachedFlexSchemaFromClassSchema(schema);
|
|
242
|
-
out = cached ?? FlexObjectNodeSchema.create(builder, brand(schema.identifier), fields);
|
|
243
|
-
break;
|
|
244
|
-
}
|
|
245
|
-
default:
|
|
246
|
-
unreachableCase(kind);
|
|
106
|
+
case NodeKind.Map: {
|
|
107
|
+
const fieldInfo = schema.info as ImplicitAllowedTypes;
|
|
108
|
+
const types = convertAllowedTypes(fieldInfo);
|
|
109
|
+
return new MapNodeStoredSchema({ kind: FieldKinds.optional.identifier, types });
|
|
247
110
|
}
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
const
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
111
|
+
case NodeKind.Array: {
|
|
112
|
+
const fieldInfo = schema.info as ImplicitAllowedTypes;
|
|
113
|
+
const field = {
|
|
114
|
+
kind: FieldKinds.sequence.identifier,
|
|
115
|
+
types: convertAllowedTypes(fieldInfo),
|
|
116
|
+
};
|
|
117
|
+
const fields = new Map([[EmptyKey, field]]);
|
|
118
|
+
return new ObjectNodeStoredSchema(fields);
|
|
119
|
+
}
|
|
120
|
+
case NodeKind.Object: {
|
|
121
|
+
assert(isObjectNodeSchema(schema), "invalid kind");
|
|
122
|
+
const fields: Map<FieldKey, TreeFieldStoredSchema> = new Map();
|
|
123
|
+
for (const field of schema.flexKeyMap.values()) {
|
|
124
|
+
fields.set(field.storedKey, convertField(field.schema));
|
|
258
125
|
}
|
|
126
|
+
return new ObjectNodeStoredSchema(fields);
|
|
259
127
|
}
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
return toFlex;
|
|
128
|
+
default:
|
|
129
|
+
unreachableCase(kind);
|
|
130
|
+
}
|
|
264
131
|
}
|
|
@@ -20,7 +20,6 @@ import {
|
|
|
20
20
|
isTreeValue,
|
|
21
21
|
valueSchemaAllows,
|
|
22
22
|
type NodeKeyManager,
|
|
23
|
-
isMapTreeNode,
|
|
24
23
|
} from "../feature-libraries/index.js";
|
|
25
24
|
import { brand, fail, isReadonlyArray, find } from "../util/index.js";
|
|
26
25
|
|
|
@@ -39,13 +38,14 @@ import {
|
|
|
39
38
|
} from "./schemaTypes.js";
|
|
40
39
|
import {
|
|
41
40
|
getKernel,
|
|
42
|
-
|
|
41
|
+
getSimpleNodeSchemaFromInnerNode,
|
|
43
42
|
isTreeNode,
|
|
44
43
|
NodeKind,
|
|
45
44
|
type InnerNode,
|
|
46
45
|
type TreeNode,
|
|
47
46
|
type TreeNodeSchema,
|
|
48
47
|
type Unhydrated,
|
|
48
|
+
UnhydratedFlexTreeNode,
|
|
49
49
|
} from "./core/index.js";
|
|
50
50
|
import { SchemaValidationErrors, isNodeInSchema } from "../feature-libraries/index.js";
|
|
51
51
|
import { isObjectNodeSchema } from "./objectNodeTypes.js";
|
|
@@ -161,8 +161,8 @@ function nodeDataToMapTree(
|
|
|
161
161
|
// They already have the mapTree, so there is no need to recompute it.
|
|
162
162
|
const innerNode = tryGetInnerNode(data);
|
|
163
163
|
if (innerNode !== undefined) {
|
|
164
|
-
if (
|
|
165
|
-
if (!allowedTypes.has(
|
|
164
|
+
if (innerNode instanceof UnhydratedFlexTreeNode) {
|
|
165
|
+
if (!allowedTypes.has(getSimpleNodeSchemaFromInnerNode(innerNode))) {
|
|
166
166
|
throw new UsageError("Invalid schema for this context.");
|
|
167
167
|
}
|
|
168
168
|
// TODO: mapTreeFromNodeData modifies the trees it gets to add defaults.
|
|
@@ -170,7 +170,7 @@ function nodeDataToMapTree(
|
|
|
170
170
|
// This is unnecessary and inefficient, but should be a no-op if all calls provide the same context (which they might not).
|
|
171
171
|
// A cleaner design (avoiding this cast) might be to apply defaults eagerly if they don't need a context, and lazily (when hydrating) if they do.
|
|
172
172
|
// This could avoid having to mutate the map tree to apply defaults, removing the need for this cast.
|
|
173
|
-
return innerNode.mapTree
|
|
173
|
+
return innerNode.mapTree;
|
|
174
174
|
} else {
|
|
175
175
|
// The node is already hydrated, meaning that it already got inserted into the tree previously
|
|
176
176
|
throw new UsageError("A node may not be inserted into the tree more than once");
|
|
@@ -8,7 +8,6 @@ import { assert } from "@fluidframework/core-utils/internal";
|
|
|
8
8
|
import {
|
|
9
9
|
type TreeNodeSchema,
|
|
10
10
|
NodeKind,
|
|
11
|
-
tryGetSimpleNodeSchema,
|
|
12
11
|
isTreeNode,
|
|
13
12
|
TreeNodeKernel,
|
|
14
13
|
privateToken,
|
|
@@ -16,17 +15,14 @@ import {
|
|
|
16
15
|
type InternalTreeNode,
|
|
17
16
|
typeSchemaSymbol,
|
|
18
17
|
type InnerNode,
|
|
18
|
+
type Context,
|
|
19
|
+
type UnhydratedFlexTreeNode,
|
|
19
20
|
} from "./core/index.js";
|
|
20
|
-
import {
|
|
21
|
-
type FlexTreeNode,
|
|
22
|
-
type MapTreeNode,
|
|
23
|
-
isFlexTreeNode,
|
|
24
|
-
markEager,
|
|
25
|
-
} from "../feature-libraries/index.js";
|
|
21
|
+
import { type FlexTreeNode, isFlexTreeNode, markEager } from "../feature-libraries/index.js";
|
|
26
22
|
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
27
23
|
import { fail } from "../util/index.js";
|
|
28
24
|
|
|
29
|
-
import {
|
|
25
|
+
import { getSimpleNodeSchemaFromInnerNode } from "./core/index.js";
|
|
30
26
|
|
|
31
27
|
/**
|
|
32
28
|
* Class which all {@link TreeNode}s must extend.
|
|
@@ -60,7 +56,7 @@ export abstract class TreeNodeValid<TInput> extends TreeNode {
|
|
|
60
56
|
this: typeof TreeNodeValid<T>,
|
|
61
57
|
instance: TreeNodeValid<T>,
|
|
62
58
|
input: T,
|
|
63
|
-
):
|
|
59
|
+
): UnhydratedFlexTreeNode {
|
|
64
60
|
return fail("Schema must override buildRawNode");
|
|
65
61
|
}
|
|
66
62
|
|
|
@@ -68,7 +64,9 @@ export abstract class TreeNodeValid<TInput> extends TreeNode {
|
|
|
68
64
|
* Schema classes can override to provide a callback that is called once when the first node is constructed.
|
|
69
65
|
* This is a good place to perform extra validation and cache schema derived data needed for the implementation of the node.
|
|
70
66
|
*/
|
|
71
|
-
protected static oneTimeSetup<T>(this: typeof TreeNodeValid<T>):
|
|
67
|
+
protected static oneTimeSetup<T>(this: typeof TreeNodeValid<T>): Context {
|
|
68
|
+
fail("Missing oneTimeSetup");
|
|
69
|
+
}
|
|
72
70
|
|
|
73
71
|
/**
|
|
74
72
|
* The most derived constructor (the one invoked with the `new` operator, not a parent class constructor invoked with as `super`) used to construct an instance of this type.
|
|
@@ -110,7 +108,7 @@ export abstract class TreeNodeValid<TInput> extends TreeNode {
|
|
|
110
108
|
schemaBase = Reflect.getPrototypeOf(schemaBase) as typeof TreeNodeValid;
|
|
111
109
|
}
|
|
112
110
|
assert(schemaBase.constructorCached === undefined, 0x962 /* overwriting wrong cache */);
|
|
113
|
-
schemaBase.constructorCached = { constructor: this, oneTimeInitialized:
|
|
111
|
+
schemaBase.constructorCached = { constructor: this, oneTimeInitialized: undefined };
|
|
114
112
|
assert(
|
|
115
113
|
this.constructorCached === schemaBase.constructorCached,
|
|
116
114
|
0x9b5 /* Inheritance should work */,
|
|
@@ -129,18 +127,26 @@ export abstract class TreeNodeValid<TInput> extends TreeNode {
|
|
|
129
127
|
);
|
|
130
128
|
}
|
|
131
129
|
|
|
130
|
+
/**
|
|
131
|
+
* Node creation function for implementing the TreeNodeSchemaNonClass half of TreeNodeSchemaBoth.
|
|
132
|
+
* @remarks
|
|
133
|
+
* When used as TreeNodeSchemaNonClass and subclassed,
|
|
134
|
+
* does not actually have the correct compile time type for the return value due to TypeScript limitations.
|
|
135
|
+
* This is why this is not exposed as part of TreeNodeSchemaCLass where subclassing is allowed.
|
|
136
|
+
*/
|
|
137
|
+
public static create<TInput, TOut, TThis extends new (args: TInput) => TOut>(
|
|
138
|
+
this: TThis,
|
|
139
|
+
input: TInput,
|
|
140
|
+
): TOut {
|
|
141
|
+
return new this(input);
|
|
142
|
+
}
|
|
143
|
+
|
|
132
144
|
public constructor(input: TInput | InternalTreeNode) {
|
|
133
145
|
super(privateToken);
|
|
134
146
|
const schema = this.constructor as typeof TreeNodeValid & TreeNodeSchema;
|
|
135
147
|
const cache = schema.markMostDerived();
|
|
136
|
-
if (
|
|
137
|
-
|
|
138
|
-
assert(
|
|
139
|
-
tryGetSimpleNodeSchema(flexSchema) === schema,
|
|
140
|
-
0x961 /* Schema class not properly configured */,
|
|
141
|
-
);
|
|
142
|
-
schema.oneTimeSetup();
|
|
143
|
-
cache.oneTimeInitialized = true;
|
|
148
|
+
if (cache.oneTimeInitialized === undefined) {
|
|
149
|
+
cache.oneTimeInitialized = schema.oneTimeSetup();
|
|
144
150
|
}
|
|
145
151
|
|
|
146
152
|
if (isTreeNode(input)) {
|
|
@@ -152,7 +158,7 @@ export abstract class TreeNodeValid<TInput> extends TreeNode {
|
|
|
152
158
|
|
|
153
159
|
const node: InnerNode = isFlexTreeNode(input) ? input : schema.buildRawNode(this, input);
|
|
154
160
|
assert(
|
|
155
|
-
|
|
161
|
+
getSimpleNodeSchemaFromInnerNode(node) === schema,
|
|
156
162
|
0x83b /* building node with wrong schema */,
|
|
157
163
|
);
|
|
158
164
|
|
|
@@ -160,7 +166,7 @@ export abstract class TreeNodeValid<TInput> extends TreeNode {
|
|
|
160
166
|
// The TreeNodeKernel associates itself the TreeNode (result here, not node) so it can be looked up later via getKernel.
|
|
161
167
|
// If desired this could be put in a non-enumerable symbol property for lookup instead, but that gets messy going through proxies,
|
|
162
168
|
// so just relying on the WeakMap seems like the cleanest approach.
|
|
163
|
-
new TreeNodeKernel(result, schema, node);
|
|
169
|
+
new TreeNodeKernel(result, schema, node, cache.oneTimeInitialized);
|
|
164
170
|
|
|
165
171
|
return result;
|
|
166
172
|
}
|
|
@@ -181,7 +187,7 @@ markEager(TreeNodeValid);
|
|
|
181
187
|
*/
|
|
182
188
|
export interface MostDerivedData {
|
|
183
189
|
readonly constructor: typeof TreeNodeValid & TreeNodeSchema;
|
|
184
|
-
oneTimeInitialized
|
|
190
|
+
oneTimeInitialized?: Context;
|
|
185
191
|
}
|
|
186
192
|
|
|
187
193
|
// #region NodeJS custom inspect for TreeNodes.
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import type { FlexListToUnion, Unenforced } from "../feature-libraries/index.js";
|
|
7
|
-
import type {
|
|
7
|
+
import type { RestrictiveStringRecord, _InlineTrick } from "../util/index.js";
|
|
8
8
|
|
|
9
9
|
import type {
|
|
10
10
|
AllowedTypes,
|
|
@@ -44,7 +44,7 @@ import type { TreeArrayNodeBase, TreeArrayNode } from "./arrayNode.js";
|
|
|
44
44
|
* @system @public
|
|
45
45
|
*/
|
|
46
46
|
export type ObjectFromSchemaRecordUnsafe<
|
|
47
|
-
T extends Unenforced<
|
|
47
|
+
T extends Unenforced<RestrictiveStringRecord<ImplicitFieldSchema>>,
|
|
48
48
|
> = {
|
|
49
49
|
-readonly [Property in keyof T]: TreeFieldFromImplicitFieldUnsafe<T[Property]>;
|
|
50
50
|
};
|
|
@@ -56,7 +56,7 @@ export type ObjectFromSchemaRecordUnsafe<
|
|
|
56
56
|
* @system @public
|
|
57
57
|
*/
|
|
58
58
|
export type TreeObjectNodeUnsafe<
|
|
59
|
-
T extends Unenforced<
|
|
59
|
+
T extends Unenforced<RestrictiveStringRecord<ImplicitFieldSchema>>,
|
|
60
60
|
TypeName extends string = string,
|
|
61
61
|
> = TreeNode & ObjectFromSchemaRecordUnsafe<T> & WithType<TypeName, NodeKind.Object>;
|
|
62
62
|
|
|
@@ -230,7 +230,7 @@ export type FieldHasDefaultUnsafe<T extends Unenforced<ImplicitFieldSchema>> =
|
|
|
230
230
|
* @system @public
|
|
231
231
|
*/
|
|
232
232
|
export type InsertableObjectFromSchemaRecordUnsafe<
|
|
233
|
-
T extends Unenforced<
|
|
233
|
+
T extends Unenforced<RestrictiveStringRecord<ImplicitFieldSchema>>,
|
|
234
234
|
> = {
|
|
235
235
|
// Field might not have a default, so make it required:
|
|
236
236
|
readonly [Property in keyof T as FieldHasDefaultUnsafe<T[Property]> extends false
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { type TreeNodeSchema, walkAllowedTypes, type SchemaVisitor } from "./core/index.js";
|
|
7
|
+
|
|
8
|
+
import { type ImplicitFieldSchema, normalizeFieldSchema } from "./schemaTypes.js";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Traverses all {@link TreeNodeSchema} schema reachable from `schema`, applying the visitor pattern.
|
|
12
|
+
*/
|
|
13
|
+
export function walkFieldSchema(
|
|
14
|
+
schema: ImplicitFieldSchema,
|
|
15
|
+
visitor: SchemaVisitor,
|
|
16
|
+
visitedSet: Set<TreeNodeSchema> = new Set(),
|
|
17
|
+
): void {
|
|
18
|
+
walkAllowedTypes(normalizeFieldSchema(schema).allowedTypeSet, visitor, visitedSet);
|
|
19
|
+
}
|