@fluidframework/tree 2.4.0-294316 → 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 +58 -28
- package/api-report/tree.beta.api.md +38 -27
- package/api-report/tree.legacy.alpha.api.md +38 -27
- package/api-report/tree.legacy.public.api.md +38 -27
- package/api-report/tree.public.api.md +38 -27
- package/dist/alpha.d.ts +6 -0
- package/dist/beta.d.ts +3 -0
- 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/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/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 +3 -0
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/public.d.ts +3 -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 +8 -7
- package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +16 -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/schemaFactory.d.ts +6 -6
- package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactory.js +15 -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 +14 -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/tree.d.ts +12 -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 +7 -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 +3 -4
- 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 +2 -2
- package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
- package/dist/simple-tree/schemaTypes.js.map +1 -1
- package/dist/simple-tree/toFlexSchema.d.ts +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 +6 -0
- package/lib/beta.d.ts +3 -0
- 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/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/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 +3 -0
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/public.d.ts +3 -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 +8 -7
- package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +19 -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/schemaFactory.d.ts +6 -6
- package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactory.js +15 -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 +14 -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/tree.d.ts +12 -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 +7 -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 +3 -4
- 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 +2 -2
- package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
- package/lib/simple-tree/schemaTypes.js.map +1 -1
- package/lib/simple-tree/toFlexSchema.d.ts +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 +29 -20
- package/src/core/schema-stored/schema.ts +17 -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/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 +6 -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 +34 -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/schemaFactory.ts +41 -12
- package/src/simple-tree/api/schemaFactoryRecursive.ts +3 -6
- package/src/simple-tree/api/simpleSchema.ts +15 -10
- package/src/simple-tree/api/tree.ts +15 -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 +11 -2
- 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 +5 -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 +2 -2
- 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
|
@@ -221,7 +221,7 @@ export interface FieldSchemaMetadata<TCustomMetadata = unknown> {
|
|
|
221
221
|
/**
|
|
222
222
|
* User-defined metadata.
|
|
223
223
|
*/
|
|
224
|
-
custom?: TCustomMetadata;
|
|
224
|
+
readonly custom?: TCustomMetadata;
|
|
225
225
|
|
|
226
226
|
/**
|
|
227
227
|
* The description of the field.
|
|
@@ -232,7 +232,7 @@ export interface FieldSchemaMetadata<TCustomMetadata = unknown> {
|
|
|
232
232
|
* E.g., when converting a field schema to {@link https://json-schema.org/ | JSON Schema}, this description will be
|
|
233
233
|
* used as the `description` field.
|
|
234
234
|
*/
|
|
235
|
-
description?: string | undefined;
|
|
235
|
+
readonly description?: string | undefined;
|
|
236
236
|
}
|
|
237
237
|
|
|
238
238
|
/**
|
|
@@ -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
|
+
}
|
package/src/util/index.ts
CHANGED
|
@@ -94,13 +94,9 @@ export {
|
|
|
94
94
|
export { ReferenceCountedBase, type ReferenceCounted } from "./referenceCounting.js";
|
|
95
95
|
|
|
96
96
|
export type {
|
|
97
|
-
AllowOptional,
|
|
98
|
-
RequiredFields,
|
|
99
|
-
OptionalFields,
|
|
100
97
|
_RecursiveTrick,
|
|
101
|
-
AllowOptionalNotFlattened,
|
|
102
98
|
RestrictiveReadonlyRecord,
|
|
103
|
-
|
|
99
|
+
RestrictiveStringRecord,
|
|
104
100
|
_InlineTrick,
|
|
105
101
|
FlattenKeys,
|
|
106
102
|
} from "./typeUtils.js";
|
package/src/util/typeUtils.ts
CHANGED
|
@@ -14,52 +14,6 @@
|
|
|
14
14
|
*/
|
|
15
15
|
export type FlattenKeys<T> = [{ [Property in keyof T]: T[Property] }][_InlineTrick];
|
|
16
16
|
|
|
17
|
-
/**
|
|
18
|
-
* Remove all fields which permit undefined from `T`.
|
|
19
|
-
*/
|
|
20
|
-
export type RequiredFields<T> = [
|
|
21
|
-
{
|
|
22
|
-
[P in keyof T as undefined extends T[P] ? never : P]: T[P];
|
|
23
|
-
},
|
|
24
|
-
][_InlineTrick];
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Extract fields which permit undefined but can also hold other types.
|
|
28
|
-
*/
|
|
29
|
-
export type OptionalFields<T> = [
|
|
30
|
-
{
|
|
31
|
-
[P in keyof T as undefined extends T[P]
|
|
32
|
-
? T[P] extends undefined
|
|
33
|
-
? never
|
|
34
|
-
: P
|
|
35
|
-
: never]?: T[P];
|
|
36
|
-
},
|
|
37
|
-
][_InlineTrick];
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Converts properties of an object which permit undefined into optional properties.
|
|
41
|
-
* Removes fields which only allow undefined.
|
|
42
|
-
*
|
|
43
|
-
* @remarks
|
|
44
|
-
* This version does not flatten the resulting type.
|
|
45
|
-
* This version exists because some cases recursive types need to avoid this
|
|
46
|
-
* flattening since it causes complication issues.
|
|
47
|
-
*
|
|
48
|
-
* See also `AllowOptional`.
|
|
49
|
-
*/
|
|
50
|
-
// export type AllowOptionalNotFlattened<T> = [RequiredFields<T> & OptionalFields<T>][_InlineTrick];
|
|
51
|
-
export type AllowOptionalNotFlattened<T> = [
|
|
52
|
-
RequiredFields<T> & OptionalFields<T>,
|
|
53
|
-
][_InlineTrick];
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Converts properties of an object which permit undefined into optional properties.
|
|
57
|
-
* Removes fields which only allow undefined.
|
|
58
|
-
*/
|
|
59
|
-
export type AllowOptional<T> = [
|
|
60
|
-
FlattenKeys<RequiredFields<T> & OptionalFields<T>>,
|
|
61
|
-
][_InlineTrick];
|
|
62
|
-
|
|
63
17
|
/**
|
|
64
18
|
* Use for trick to "inline" generic types.
|
|
65
19
|
*
|
|
@@ -157,9 +111,15 @@ export type _RecursiveTrick = never;
|
|
|
157
111
|
* Alternative to the built in Record type which does not permit unexpected members,
|
|
158
112
|
* and is readonly.
|
|
159
113
|
*
|
|
114
|
+
* @remarks
|
|
115
|
+
* This does not work correctly when `K` is more specific than `string` or `symbol`.
|
|
116
|
+
* For example `{a: 5}` is not assignable to `RestrictiveReadonlyRecord<"a",: number>`
|
|
117
|
+
*
|
|
160
118
|
* @privateRemarks
|
|
161
119
|
* `number` is not allowed as a key here since doing so causes the compiler to reject recursive schema.
|
|
162
120
|
* The cause for this is unclear, but empirically it was the case when this comment was written.
|
|
121
|
+
*
|
|
122
|
+
* @deprecated Use a more robust / specific type instead. This type never worked as intended.
|
|
163
123
|
* @public
|
|
164
124
|
*/
|
|
165
125
|
export type RestrictiveReadonlyRecord<K extends symbol | string, T> = {
|
|
@@ -167,15 +127,13 @@ export type RestrictiveReadonlyRecord<K extends symbol | string, T> = {
|
|
|
167
127
|
};
|
|
168
128
|
|
|
169
129
|
/**
|
|
170
|
-
*
|
|
171
|
-
*
|
|
130
|
+
* Alternative to the built-in `Record<string, T>` type which is readonly and does not permit symbols.
|
|
172
131
|
* @remarks
|
|
173
|
-
*
|
|
174
|
-
*
|
|
175
|
-
* In these cases `TInput` can be replaced with `Assume<TInput, TAssumeToBe>` to allow compilation of the generic code.
|
|
176
|
-
* When the generic code is parameterized with a concrete type, if that type actually does extend `TAssumeToBe`,
|
|
177
|
-
* it will behave like `TInput` was used directly.
|
|
132
|
+
* It would be nice if `keyof RestrictiveStringRecord<T>` returned string, but it does not: use `keyof RestrictiveStringRecord<T> & string` instead.
|
|
133
|
+
* @system @public
|
|
178
134
|
*/
|
|
179
|
-
export type
|
|
180
|
-
|
|
181
|
-
|
|
135
|
+
export type RestrictiveStringRecord<T> = {
|
|
136
|
+
readonly [P in string]: T;
|
|
137
|
+
} & {
|
|
138
|
+
readonly [P in symbol]?: never;
|
|
139
|
+
};
|