@fluidframework/tree 2.43.0-343119 → 2.50.0-345060
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/CHANGELOG.md +189 -0
- package/api-report/tree.alpha.api.md +86 -20
- package/api-report/tree.beta.api.md +10 -3
- package/api-report/tree.legacy.alpha.api.md +9 -2
- package/api-report/tree.legacy.public.api.md +9 -2
- package/api-report/tree.public.api.md +9 -2
- package/dist/alpha.d.ts +10 -0
- package/dist/core/forest/editableForest.d.ts +0 -2
- package/dist/core/forest/editableForest.d.ts.map +1 -1
- package/dist/core/forest/editableForest.js.map +1 -1
- package/dist/core/forest/forest.d.ts +0 -4
- package/dist/core/forest/forest.d.ts.map +1 -1
- package/dist/core/forest/forest.js +0 -4
- package/dist/core/forest/forest.js.map +1 -1
- package/dist/core/rebase/changeRebaser.d.ts +0 -6
- package/dist/core/rebase/changeRebaser.d.ts.map +1 -1
- package/dist/core/rebase/changeRebaser.js.map +1 -1
- package/dist/core/rebase/types.d.ts +0 -2
- package/dist/core/rebase/types.d.ts.map +1 -1
- package/dist/core/rebase/types.js.map +1 -1
- package/dist/core/schema-stored/schema.d.ts +0 -8
- package/dist/core/schema-stored/schema.d.ts.map +1 -1
- package/dist/core/schema-stored/schema.js +0 -8
- package/dist/core/schema-stored/schema.js.map +1 -1
- package/dist/core/schema-view/view.d.ts +0 -2
- package/dist/core/schema-view/view.d.ts.map +1 -1
- package/dist/core/schema-view/view.js.map +1 -1
- package/dist/core/tree/cursor.d.ts +0 -2
- package/dist/core/tree/cursor.d.ts.map +1 -1
- package/dist/core/tree/cursor.js +0 -2
- package/dist/core/tree/cursor.js.map +1 -1
- package/dist/core/tree/delta.d.ts +0 -2
- package/dist/core/tree/delta.d.ts.map +1 -1
- package/dist/core/tree/delta.js.map +1 -1
- package/dist/core/tree/types.d.ts +0 -4
- package/dist/core/tree/types.d.ts.map +1 -1
- package/dist/core/tree/types.js +0 -2
- package/dist/core/tree/types.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +0 -4
- package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +0 -10
- package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +1 -3
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.js +0 -2
- package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts +0 -2
- package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/crossFieldQueries.js +0 -2
- package/dist/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +0 -10
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.js +0 -2
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +0 -6
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts +0 -12
- package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
- package/dist/feature-libraries/sequence-field/types.d.ts +0 -2
- package/dist/feature-libraries/sequence-field/types.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/types.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/jsonDomainSchema.d.ts +2 -6
- package/dist/jsonDomainSchema.d.ts.map +1 -1
- package/dist/jsonDomainSchema.js +2 -2
- package/dist/jsonDomainSchema.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +3 -3
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree/treeAlpha.d.ts +38 -0
- package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
- package/dist/shared-tree/treeAlpha.js +116 -9
- package/dist/shared-tree/treeAlpha.js.map +1 -1
- package/dist/simple-tree/api/configuration.d.ts +15 -3
- package/dist/simple-tree/api/configuration.d.ts.map +1 -1
- package/dist/simple-tree/api/configuration.js +88 -38
- package/dist/simple-tree/api/configuration.js.map +1 -1
- package/dist/simple-tree/api/customTree.d.ts +1 -1
- package/dist/simple-tree/api/customTree.d.ts.map +1 -1
- package/dist/simple-tree/api/customTree.js +3 -4
- package/dist/simple-tree/api/customTree.js.map +1 -1
- package/dist/simple-tree/api/index.d.ts +3 -3
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js +4 -4
- package/dist/simple-tree/api/index.js.map +1 -1
- package/dist/simple-tree/api/jsonSchema.d.ts +32 -8
- 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 +2 -2
- package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactory.js +1 -1
- package/dist/simple-tree/api/schemaFactory.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +97 -3
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.js +75 -0
- package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +5 -1
- 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/schemaFromSimple.js +2 -0
- package/dist/simple-tree/api/schemaFromSimple.js.map +1 -1
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.js +4 -4
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
- package/dist/simple-tree/api/treeBeta.d.ts +1 -1
- package/dist/simple-tree/api/treeBeta.d.ts.map +1 -1
- package/dist/simple-tree/api/treeBeta.js.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.d.ts +3 -0
- package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.js +2 -2
- package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
- package/dist/simple-tree/api/typesUnsafe.d.ts +12 -0
- package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -1
- package/dist/simple-tree/api/typesUnsafe.js.map +1 -1
- package/dist/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/viewSchemaToSimpleSchema.js +5 -3
- package/dist/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
- package/dist/simple-tree/core/context.d.ts +3 -3
- package/dist/simple-tree/core/context.d.ts.map +1 -1
- package/dist/simple-tree/core/context.js.map +1 -1
- package/dist/simple-tree/core/getOrCreateNode.d.ts +9 -0
- package/dist/simple-tree/core/getOrCreateNode.d.ts.map +1 -1
- package/dist/simple-tree/core/getOrCreateNode.js +12 -1
- package/dist/simple-tree/core/getOrCreateNode.js.map +1 -1
- package/dist/simple-tree/core/index.d.ts +3 -3
- package/dist/simple-tree/core/index.d.ts.map +1 -1
- package/dist/simple-tree/core/index.js +4 -1
- package/dist/simple-tree/core/index.js.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.d.ts +73 -2
- package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.js +28 -1
- package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/dist/simple-tree/core/walkSchema.d.ts +3 -3
- package/dist/simple-tree/core/walkSchema.d.ts.map +1 -1
- package/dist/simple-tree/core/walkSchema.js +9 -5
- package/dist/simple-tree/core/walkSchema.js.map +1 -1
- package/dist/simple-tree/createContext.js +1 -1
- package/dist/simple-tree/createContext.js.map +1 -1
- package/dist/simple-tree/getTreeNodeForField.d.ts +1 -1
- package/dist/simple-tree/getTreeNodeForField.d.ts.map +1 -1
- package/dist/simple-tree/getTreeNodeForField.js +3 -3
- package/dist/simple-tree/getTreeNodeForField.js.map +1 -1
- package/dist/simple-tree/index.d.ts +6 -6
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +10 -5
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/leafNodeSchema.d.ts +2 -1
- package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/leafNodeSchema.js +1 -0
- package/dist/simple-tree/leafNodeSchema.js.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.js +18 -15
- package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/index.d.ts +2 -1
- package/dist/simple-tree/node-kinds/index.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/index.js +5 -1
- package/dist/simple-tree/node-kinds/index.js.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.js +7 -3
- package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/index.d.ts +1 -1
- package/dist/simple-tree/node-kinds/object/index.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/index.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.js +9 -6
- package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNodeTypes.d.ts +5 -1
- package/dist/simple-tree/node-kinds/object/objectNodeTypes.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNodeTypes.js.map +1 -1
- package/dist/simple-tree/node-kinds/record/index.d.ts +7 -0
- package/dist/simple-tree/node-kinds/record/index.d.ts.map +1 -0
- package/dist/simple-tree/node-kinds/record/index.js +13 -0
- package/dist/simple-tree/node-kinds/record/index.js.map +1 -0
- package/dist/simple-tree/node-kinds/record/recordNode.d.ts +39 -0
- package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -0
- package/dist/simple-tree/node-kinds/record/recordNode.js +234 -0
- package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -0
- package/dist/simple-tree/node-kinds/record/recordNodeTypes.d.ts +70 -0
- package/dist/simple-tree/node-kinds/record/recordNodeTypes.d.ts.map +1 -0
- package/dist/simple-tree/node-kinds/record/recordNodeTypes.js +30 -0
- package/dist/simple-tree/node-kinds/record/recordNodeTypes.js.map +1 -0
- package/dist/simple-tree/schemaTypes.d.ts +13 -27
- package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
- package/dist/simple-tree/schemaTypes.js +45 -39
- package/dist/simple-tree/schemaTypes.js.map +1 -1
- package/dist/simple-tree/simpleSchema.d.ts +16 -1
- package/dist/simple-tree/simpleSchema.d.ts.map +1 -1
- package/dist/simple-tree/simpleSchema.js.map +1 -1
- package/dist/simple-tree/toStoredSchema.d.ts +2 -0
- package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
- package/dist/simple-tree/toStoredSchema.js +6 -2
- package/dist/simple-tree/toStoredSchema.js.map +1 -1
- package/dist/simple-tree/treeNodeValid.d.ts.map +1 -1
- package/dist/simple-tree/treeNodeValid.js +1 -2
- package/dist/simple-tree/treeNodeValid.js.map +1 -1
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +1 -1
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js +56 -32
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
- package/dist/simple-tree/walkFieldSchema.d.ts.map +1 -1
- package/dist/simple-tree/walkFieldSchema.js +1 -1
- package/dist/simple-tree/walkFieldSchema.js.map +1 -1
- package/dist/tableSchema.d.ts +7 -2
- package/dist/tableSchema.d.ts.map +1 -1
- package/dist/tableSchema.js +21 -7
- package/dist/tableSchema.js.map +1 -1
- package/dist/util/brandedMap.d.ts +0 -2
- package/dist/util/brandedMap.d.ts.map +1 -1
- package/dist/util/brandedMap.js.map +1 -1
- package/docs/main/compatibility.md +15 -1
- package/lib/alpha.d.ts +10 -0
- package/lib/core/forest/editableForest.d.ts +0 -2
- package/lib/core/forest/editableForest.d.ts.map +1 -1
- package/lib/core/forest/editableForest.js.map +1 -1
- package/lib/core/forest/forest.d.ts +0 -4
- package/lib/core/forest/forest.d.ts.map +1 -1
- package/lib/core/forest/forest.js +0 -4
- package/lib/core/forest/forest.js.map +1 -1
- package/lib/core/rebase/changeRebaser.d.ts +0 -6
- package/lib/core/rebase/changeRebaser.d.ts.map +1 -1
- package/lib/core/rebase/changeRebaser.js.map +1 -1
- package/lib/core/rebase/types.d.ts +0 -2
- package/lib/core/rebase/types.d.ts.map +1 -1
- package/lib/core/rebase/types.js.map +1 -1
- package/lib/core/schema-stored/schema.d.ts +0 -8
- package/lib/core/schema-stored/schema.d.ts.map +1 -1
- package/lib/core/schema-stored/schema.js +0 -8
- package/lib/core/schema-stored/schema.js.map +1 -1
- package/lib/core/schema-view/view.d.ts +0 -2
- package/lib/core/schema-view/view.d.ts.map +1 -1
- package/lib/core/schema-view/view.js.map +1 -1
- package/lib/core/tree/cursor.d.ts +0 -2
- package/lib/core/tree/cursor.d.ts.map +1 -1
- package/lib/core/tree/cursor.js +0 -2
- package/lib/core/tree/cursor.js.map +1 -1
- package/lib/core/tree/delta.d.ts +0 -2
- package/lib/core/tree/delta.d.ts.map +1 -1
- package/lib/core/tree/delta.js.map +1 -1
- package/lib/core/tree/types.d.ts +0 -4
- package/lib/core/tree/types.d.ts.map +1 -1
- package/lib/core/tree/types.js +0 -2
- package/lib/core/tree/types.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +0 -4
- package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +0 -10
- package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +1 -3
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.js +0 -2
- package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts +0 -2
- package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/crossFieldQueries.js +0 -2
- package/lib/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +0 -10
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.js +0 -2
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +0 -6
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts +0 -12
- package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
- package/lib/feature-libraries/sequence-field/types.d.ts +0 -2
- package/lib/feature-libraries/sequence-field/types.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/types.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/jsonDomainSchema.d.ts +2 -6
- package/lib/jsonDomainSchema.d.ts.map +1 -1
- package/lib/jsonDomainSchema.js +3 -3
- package/lib/jsonDomainSchema.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +4 -4
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/shared-tree/treeAlpha.d.ts +38 -0
- package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
- package/lib/shared-tree/treeAlpha.js +110 -3
- package/lib/shared-tree/treeAlpha.js.map +1 -1
- package/lib/simple-tree/api/configuration.d.ts +15 -3
- package/lib/simple-tree/api/configuration.d.ts.map +1 -1
- package/lib/simple-tree/api/configuration.js +91 -41
- package/lib/simple-tree/api/configuration.js.map +1 -1
- package/lib/simple-tree/api/customTree.d.ts +1 -1
- package/lib/simple-tree/api/customTree.d.ts.map +1 -1
- package/lib/simple-tree/api/customTree.js +2 -3
- package/lib/simple-tree/api/customTree.js.map +1 -1
- package/lib/simple-tree/api/index.d.ts +3 -3
- package/lib/simple-tree/api/index.d.ts.map +1 -1
- package/lib/simple-tree/api/index.js +1 -1
- package/lib/simple-tree/api/index.js.map +1 -1
- package/lib/simple-tree/api/jsonSchema.d.ts +32 -8
- 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 +2 -2
- package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactory.js +1 -1
- package/lib/simple-tree/api/schemaFactory.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +97 -3
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.js +77 -2
- package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +5 -1
- 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/schemaFromSimple.js +2 -0
- package/lib/simple-tree/api/schemaFromSimple.js.map +1 -1
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.js +5 -5
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
- package/lib/simple-tree/api/treeBeta.d.ts +1 -1
- package/lib/simple-tree/api/treeBeta.d.ts.map +1 -1
- package/lib/simple-tree/api/treeBeta.js.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.d.ts +3 -0
- package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.js +4 -4
- package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
- package/lib/simple-tree/api/typesUnsafe.d.ts +12 -0
- package/lib/simple-tree/api/typesUnsafe.d.ts.map +1 -1
- package/lib/simple-tree/api/typesUnsafe.js.map +1 -1
- package/lib/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/viewSchemaToSimpleSchema.js +6 -4
- package/lib/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
- package/lib/simple-tree/core/context.d.ts +3 -3
- package/lib/simple-tree/core/context.d.ts.map +1 -1
- package/lib/simple-tree/core/context.js.map +1 -1
- package/lib/simple-tree/core/getOrCreateNode.d.ts +9 -0
- package/lib/simple-tree/core/getOrCreateNode.d.ts.map +1 -1
- package/lib/simple-tree/core/getOrCreateNode.js +10 -0
- package/lib/simple-tree/core/getOrCreateNode.js.map +1 -1
- package/lib/simple-tree/core/index.d.ts +3 -3
- package/lib/simple-tree/core/index.d.ts.map +1 -1
- package/lib/simple-tree/core/index.js +3 -3
- package/lib/simple-tree/core/index.js.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.d.ts +73 -2
- package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.js +25 -0
- package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/lib/simple-tree/core/walkSchema.d.ts +3 -3
- package/lib/simple-tree/core/walkSchema.d.ts.map +1 -1
- package/lib/simple-tree/core/walkSchema.js +9 -5
- package/lib/simple-tree/core/walkSchema.js.map +1 -1
- package/lib/simple-tree/createContext.js +1 -1
- package/lib/simple-tree/createContext.js.map +1 -1
- package/lib/simple-tree/getTreeNodeForField.d.ts +1 -1
- package/lib/simple-tree/getTreeNodeForField.d.ts.map +1 -1
- package/lib/simple-tree/getTreeNodeForField.js +1 -1
- package/lib/simple-tree/getTreeNodeForField.js.map +1 -1
- package/lib/simple-tree/index.d.ts +6 -6
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +4 -4
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/leafNodeSchema.d.ts +2 -1
- package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/leafNodeSchema.js +2 -1
- package/lib/simple-tree/leafNodeSchema.js.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.js +10 -7
- package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/index.d.ts +2 -1
- package/lib/simple-tree/node-kinds/index.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/index.js +1 -0
- package/lib/simple-tree/node-kinds/index.js.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.js +9 -5
- package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/index.d.ts +1 -1
- package/lib/simple-tree/node-kinds/object/index.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/index.js +1 -1
- package/lib/simple-tree/node-kinds/object/index.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.js +11 -8
- package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNodeTypes.d.ts +5 -1
- package/lib/simple-tree/node-kinds/object/objectNodeTypes.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNodeTypes.js.map +1 -1
- package/lib/simple-tree/node-kinds/record/index.d.ts +7 -0
- package/lib/simple-tree/node-kinds/record/index.d.ts.map +1 -0
- package/lib/simple-tree/node-kinds/record/index.js +7 -0
- package/lib/simple-tree/node-kinds/record/index.js.map +1 -0
- package/lib/simple-tree/node-kinds/record/recordNode.d.ts +39 -0
- package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -0
- package/lib/simple-tree/node-kinds/record/recordNode.js +232 -0
- package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -0
- package/lib/simple-tree/node-kinds/record/recordNodeTypes.d.ts +70 -0
- package/lib/simple-tree/node-kinds/record/recordNodeTypes.d.ts.map +1 -0
- package/lib/simple-tree/node-kinds/record/recordNodeTypes.js +26 -0
- package/lib/simple-tree/node-kinds/record/recordNodeTypes.js.map +1 -0
- package/lib/simple-tree/schemaTypes.d.ts +13 -27
- package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
- package/lib/simple-tree/schemaTypes.js +42 -35
- package/lib/simple-tree/schemaTypes.js.map +1 -1
- package/lib/simple-tree/simpleSchema.d.ts +16 -1
- package/lib/simple-tree/simpleSchema.d.ts.map +1 -1
- package/lib/simple-tree/simpleSchema.js.map +1 -1
- package/lib/simple-tree/toStoredSchema.d.ts +2 -0
- package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
- package/lib/simple-tree/toStoredSchema.js +6 -2
- package/lib/simple-tree/toStoredSchema.js.map +1 -1
- package/lib/simple-tree/treeNodeValid.d.ts.map +1 -1
- package/lib/simple-tree/treeNodeValid.js +1 -2
- package/lib/simple-tree/treeNodeValid.js.map +1 -1
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +1 -1
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +58 -34
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
- package/lib/simple-tree/walkFieldSchema.d.ts.map +1 -1
- package/lib/simple-tree/walkFieldSchema.js +1 -1
- package/lib/simple-tree/walkFieldSchema.js.map +1 -1
- package/lib/tableSchema.d.ts +7 -2
- package/lib/tableSchema.d.ts.map +1 -1
- package/lib/tableSchema.js +22 -8
- package/lib/tableSchema.js.map +1 -1
- package/lib/util/brandedMap.d.ts +0 -2
- package/lib/util/brandedMap.d.ts.map +1 -1
- package/lib/util/brandedMap.js.map +1 -1
- package/package.json +36 -24
- package/src/core/forest/editableForest.ts +0 -2
- package/src/core/forest/forest.ts +0 -4
- package/src/core/rebase/changeRebaser.ts +0 -6
- package/src/core/rebase/types.ts +0 -2
- package/src/core/schema-stored/schema.ts +0 -8
- package/src/core/schema-view/view.ts +0 -2
- package/src/core/tree/cursor.ts +0 -2
- package/src/core/tree/delta.ts +0 -2
- package/src/core/tree/types.ts +0 -4
- package/src/feature-libraries/default-schema/defaultEditBuilder.ts +0 -4
- package/src/feature-libraries/default-schema/defaultFieldKinds.ts +0 -10
- package/src/feature-libraries/flex-tree/flexTreeTypes.ts +1 -3
- package/src/feature-libraries/modular-schema/crossFieldQueries.ts +0 -2
- package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +0 -10
- package/src/feature-libraries/modular-schema/modularChangeFamily.ts +0 -8
- package/src/feature-libraries/modular-schema/modularChangeTypes.ts +0 -12
- package/src/feature-libraries/sequence-field/types.ts +0 -2
- package/src/index.ts +10 -0
- package/src/jsonDomainSchema.ts +3 -3
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/schematizingTreeView.ts +8 -5
- package/src/shared-tree/treeAlpha.ts +190 -3
- package/src/simple-tree/api/configuration.ts +131 -45
- package/src/simple-tree/api/customTree.ts +3 -3
- package/src/simple-tree/api/index.ts +6 -3
- package/src/simple-tree/api/jsonSchema.ts +35 -8
- package/src/simple-tree/api/schemaFactory.ts +5 -13
- package/src/simple-tree/api/schemaFactoryAlpha.ts +268 -1
- package/src/simple-tree/api/schemaFactoryRecursive.ts +5 -1
- package/src/simple-tree/api/schemaFromSimple.ts +6 -0
- package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +16 -7
- package/src/simple-tree/api/treeBeta.ts +2 -2
- package/src/simple-tree/api/treeNodeApi.ts +7 -4
- package/src/simple-tree/api/typesUnsafe.ts +15 -0
- package/src/simple-tree/api/viewSchemaToSimpleSchema.ts +14 -6
- package/src/simple-tree/core/context.ts +3 -3
- package/src/simple-tree/core/getOrCreateNode.ts +14 -0
- package/src/simple-tree/core/index.ts +8 -1
- package/src/simple-tree/core/treeNodeKernel.ts +1 -1
- package/src/simple-tree/core/treeNodeSchema.ts +121 -5
- package/src/simple-tree/core/walkSchema.ts +16 -7
- package/src/simple-tree/createContext.ts +1 -1
- package/src/simple-tree/getTreeNodeForField.ts +3 -1
- package/src/simple-tree/index.ts +20 -5
- package/src/simple-tree/leafNodeSchema.ts +7 -1
- package/src/simple-tree/node-kinds/array/arrayNode.ts +15 -9
- package/src/simple-tree/node-kinds/index.ts +11 -0
- package/src/simple-tree/node-kinds/map/mapNode.ts +10 -4
- package/src/simple-tree/node-kinds/object/index.ts +5 -1
- package/src/simple-tree/node-kinds/object/objectNode.ts +23 -13
- package/src/simple-tree/node-kinds/object/objectNodeTypes.ts +6 -3
- package/src/simple-tree/node-kinds/record/index.ts +14 -0
- package/src/simple-tree/node-kinds/record/recordNode.ts +410 -0
- package/src/simple-tree/node-kinds/record/recordNodeTypes.ts +136 -0
- package/src/simple-tree/schemaTypes.ts +55 -64
- package/src/simple-tree/simpleSchema.ts +19 -1
- package/src/simple-tree/toStoredSchema.ts +6 -2
- package/src/simple-tree/treeNodeValid.ts +1 -1
- package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +83 -40
- package/src/simple-tree/walkFieldSchema.ts +5 -1
- package/src/tableSchema.ts +27 -8
- package/src/util/brandedMap.ts +0 -2
|
@@ -32,8 +32,10 @@ import type {
|
|
|
32
32
|
TreeNodeSchemaCore,
|
|
33
33
|
TreeNodeSchemaNonClass,
|
|
34
34
|
UnhydratedFlexTreeNode,
|
|
35
|
+
AnnotatedAllowedType,
|
|
36
|
+
NormalizedAnnotatedAllowedTypes,
|
|
35
37
|
} from "./core/index.js";
|
|
36
|
-
import { inPrototypeChain } from "./core/index.js";
|
|
38
|
+
import { inPrototypeChain, isAnnotatedAllowedTypes } from "./core/index.js";
|
|
37
39
|
import { isLazy, type FlexListToUnion, type LazyItem } from "./flexList.js";
|
|
38
40
|
import { LeafNodeSchema } from "./leafNodeSchema.js";
|
|
39
41
|
import type { SimpleFieldSchema, SimpleObjectFieldSchema } from "./simpleSchema.js";
|
|
@@ -106,17 +108,6 @@ export interface AnnotatedAllowedTypes {
|
|
|
106
108
|
readonly types: readonly (AnnotatedAllowedType | LazyItem<TreeNodeSchema>)[];
|
|
107
109
|
}
|
|
108
110
|
|
|
109
|
-
/**
|
|
110
|
-
* Checks if the input is an {@link AnnotatedAllowedTypes}.
|
|
111
|
-
*/
|
|
112
|
-
export function isAnnotatedAllowedTypes(
|
|
113
|
-
allowedTypes: ImplicitAnnotatedAllowedTypes,
|
|
114
|
-
): allowedTypes is AnnotatedAllowedTypes {
|
|
115
|
-
return (
|
|
116
|
-
typeof allowedTypes === "object" && "metadata" in allowedTypes && "types" in allowedTypes
|
|
117
|
-
);
|
|
118
|
-
}
|
|
119
|
-
|
|
120
111
|
/**
|
|
121
112
|
* Annotations that apply to a set of allowed types.
|
|
122
113
|
* @remarks
|
|
@@ -130,21 +121,6 @@ export interface AllowedTypesMetadata {
|
|
|
130
121
|
readonly custom?: unknown;
|
|
131
122
|
}
|
|
132
123
|
|
|
133
|
-
/**
|
|
134
|
-
* Stores annotations for an individual allowed type.
|
|
135
|
-
* @alpha
|
|
136
|
-
*/
|
|
137
|
-
export interface AnnotatedAllowedType<T extends TreeNodeSchema = TreeNodeSchema> {
|
|
138
|
-
/**
|
|
139
|
-
* Annotations for the allowed type.
|
|
140
|
-
*/
|
|
141
|
-
readonly metadata: AllowedTypeMetadata;
|
|
142
|
-
/**
|
|
143
|
-
* The allowed type the annotations apply to in a particular schema.
|
|
144
|
-
*/
|
|
145
|
-
readonly type: LazyItem<T>;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
124
|
/**
|
|
149
125
|
* Checks if the given allowed type is annotated with {@link AllowedTypeMetadata}.
|
|
150
126
|
*/
|
|
@@ -207,7 +183,10 @@ export enum FieldKind {
|
|
|
207
183
|
* If an explicit stored key was specified in the schema, it will be used.
|
|
208
184
|
* Otherwise, the stored key is the same as the property key.
|
|
209
185
|
*/
|
|
210
|
-
export function getStoredKey(
|
|
186
|
+
export function getStoredKey(
|
|
187
|
+
propertyKey: string,
|
|
188
|
+
fieldSchema: ImplicitAnnotatedFieldSchema,
|
|
189
|
+
): FieldKey {
|
|
211
190
|
return brand(getExplicitStoredKey(fieldSchema) ?? propertyKey);
|
|
212
191
|
}
|
|
213
192
|
|
|
@@ -215,7 +194,9 @@ export function getStoredKey(propertyKey: string, fieldSchema: ImplicitFieldSche
|
|
|
215
194
|
* Gets the {@link FieldProps.key | stored key} specified by the schema, if one was explicitly specified.
|
|
216
195
|
* Otherwise, returns undefined.
|
|
217
196
|
*/
|
|
218
|
-
export function getExplicitStoredKey(
|
|
197
|
+
export function getExplicitStoredKey(
|
|
198
|
+
fieldSchema: ImplicitAnnotatedFieldSchema,
|
|
199
|
+
): string | undefined {
|
|
219
200
|
return fieldSchema instanceof FieldSchema ? fieldSchema.props?.key : undefined;
|
|
220
201
|
}
|
|
221
202
|
|
|
@@ -541,7 +522,7 @@ export class FieldSchemaAlpha<
|
|
|
541
522
|
implements SimpleFieldSchema
|
|
542
523
|
{
|
|
543
524
|
private readonly lazyIdentifiers: Lazy<ReadonlySet<string>>;
|
|
544
|
-
private readonly lazyAnnotatedTypes: Lazy<
|
|
525
|
+
private readonly lazyAnnotatedTypes: Lazy<NormalizedAnnotatedAllowedTypes>;
|
|
545
526
|
private readonly propsAlpha: FieldPropsAlpha<TCustomMetadata> | undefined;
|
|
546
527
|
|
|
547
528
|
/**
|
|
@@ -586,7 +567,7 @@ export class FieldSchemaAlpha<
|
|
|
586
567
|
? annotatedAllowedTypes.metadata
|
|
587
568
|
: {};
|
|
588
569
|
this.lazyAnnotatedTypes = new Lazy(() =>
|
|
589
|
-
|
|
570
|
+
normalizeAnnotatedAllowedTypes(annotatedAllowedTypes),
|
|
590
571
|
);
|
|
591
572
|
this.lazyIdentifiers = new Lazy(
|
|
592
573
|
() => new Set([...this.allowedTypeSet].map((t) => t.identifier)),
|
|
@@ -602,7 +583,7 @@ export class FieldSchemaAlpha<
|
|
|
602
583
|
* What types of tree nodes are allowed in this field and their annotations.
|
|
603
584
|
* @remarks Counterpart to {@link FieldSchemaAlpha.annotatedAllowedTypes}, with any lazy definitions evaluated.
|
|
604
585
|
*/
|
|
605
|
-
public get
|
|
586
|
+
public get annotatedAllowedTypesNormalized(): NormalizedAnnotatedAllowedTypes {
|
|
606
587
|
return this.lazyAnnotatedTypes.value;
|
|
607
588
|
}
|
|
608
589
|
}
|
|
@@ -671,8 +652,8 @@ export function normalizeAllowedTypes(
|
|
|
671
652
|
* Normalizes an allowed type to an {@link AnnotatedAllowedType}, by adding empty annotations if they don't already exist.
|
|
672
653
|
*/
|
|
673
654
|
export function normalizeToAnnotatedAllowedType<T extends TreeNodeSchema>(
|
|
674
|
-
type: T | AnnotatedAllowedType<T
|
|
675
|
-
): AnnotatedAllowedType<T> {
|
|
655
|
+
type: T | AnnotatedAllowedType<T> | AnnotatedAllowedType<LazyItem<T>>,
|
|
656
|
+
): AnnotatedAllowedType<T> | AnnotatedAllowedType<LazyItem<T>> {
|
|
676
657
|
return isAnnotatedAllowedType(type)
|
|
677
658
|
? type
|
|
678
659
|
: {
|
|
@@ -681,6 +662,46 @@ export function normalizeToAnnotatedAllowedType<T extends TreeNodeSchema>(
|
|
|
681
662
|
};
|
|
682
663
|
}
|
|
683
664
|
|
|
665
|
+
/**
|
|
666
|
+
* Normalizes a {@link ImplicitAnnotatedAllowedTypes} to a set of {@link AnnotatedAllowedSchema}s, by eagerly evaluating any
|
|
667
|
+
* lazy schema declarations and adding empty metadata if it doesn't already exist.
|
|
668
|
+
*
|
|
669
|
+
* @remarks Note: this must only be called after all required schemas have been declared, otherwise evaluation of
|
|
670
|
+
* recursive schemas may fail.
|
|
671
|
+
*/
|
|
672
|
+
export function normalizeAnnotatedAllowedTypes(
|
|
673
|
+
types: ImplicitAnnotatedAllowedTypes,
|
|
674
|
+
): NormalizedAnnotatedAllowedTypes {
|
|
675
|
+
const typesWithoutAnnotation = isAnnotatedAllowedTypes(types) ? types.types : types;
|
|
676
|
+
const annotatedTypes: AnnotatedAllowedType<TreeNodeSchema>[] = [];
|
|
677
|
+
if (isReadonlyArray(typesWithoutAnnotation)) {
|
|
678
|
+
for (const annotatedType of typesWithoutAnnotation) {
|
|
679
|
+
if (isAnnotatedAllowedType(annotatedType)) {
|
|
680
|
+
annotatedTypes.push({
|
|
681
|
+
type: evaluateLazySchema(annotatedType.type),
|
|
682
|
+
metadata: annotatedType.metadata,
|
|
683
|
+
});
|
|
684
|
+
} else {
|
|
685
|
+
annotatedTypes.push({ type: evaluateLazySchema(annotatedType), metadata: {} });
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
} else {
|
|
689
|
+
if (isAnnotatedAllowedType(typesWithoutAnnotation)) {
|
|
690
|
+
annotatedTypes.push({
|
|
691
|
+
type: evaluateLazySchema(typesWithoutAnnotation.type),
|
|
692
|
+
metadata: typesWithoutAnnotation.metadata,
|
|
693
|
+
});
|
|
694
|
+
} else {
|
|
695
|
+
annotatedTypes.push({ type: evaluateLazySchema(typesWithoutAnnotation), metadata: {} });
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
return {
|
|
700
|
+
metadata: isAnnotatedAllowedTypes(types) ? types.metadata : {},
|
|
701
|
+
types: annotatedTypes,
|
|
702
|
+
};
|
|
703
|
+
}
|
|
704
|
+
|
|
684
705
|
/**
|
|
685
706
|
* Converts an {@link ImplicitAnnotatedAllowedTypes} to an {@link ImplicitAllowedTypes}s, by removing
|
|
686
707
|
* any annotations.
|
|
@@ -719,36 +740,6 @@ export function unannotateSchemaRecord<
|
|
|
719
740
|
) as UnannotateSchemaRecord<Schema>;
|
|
720
741
|
}
|
|
721
742
|
|
|
722
|
-
/**
|
|
723
|
-
* Converts annotated allowed types into a mapping between the type schema and their associated annotations.
|
|
724
|
-
*/
|
|
725
|
-
export function extractAnnotationsFromAllowedTypes(
|
|
726
|
-
types: ImplicitAnnotatedAllowedTypes,
|
|
727
|
-
): ReadonlyMap<TreeNodeSchema, AllowedTypeMetadata> {
|
|
728
|
-
const typesWithoutAnnotation = isAnnotatedAllowedTypes(types) ? types.types : types;
|
|
729
|
-
const annotations = new Map<TreeNodeSchema, AllowedTypeMetadata>();
|
|
730
|
-
if (isReadonlyArray(typesWithoutAnnotation)) {
|
|
731
|
-
for (const annotatedType of typesWithoutAnnotation) {
|
|
732
|
-
if (isAnnotatedAllowedType(annotatedType)) {
|
|
733
|
-
annotations.set(evaluateLazySchema(annotatedType.type), annotatedType.metadata);
|
|
734
|
-
} else {
|
|
735
|
-
annotations.set(evaluateLazySchema(annotatedType), {});
|
|
736
|
-
}
|
|
737
|
-
}
|
|
738
|
-
} else {
|
|
739
|
-
if (isAnnotatedAllowedType(typesWithoutAnnotation)) {
|
|
740
|
-
annotations.set(
|
|
741
|
-
evaluateLazySchema(typesWithoutAnnotation.type),
|
|
742
|
-
typesWithoutAnnotation.metadata,
|
|
743
|
-
);
|
|
744
|
-
} else {
|
|
745
|
-
annotations.set(evaluateLazySchema(typesWithoutAnnotation), {});
|
|
746
|
-
}
|
|
747
|
-
}
|
|
748
|
-
|
|
749
|
-
return annotations;
|
|
750
|
-
}
|
|
751
|
-
|
|
752
743
|
/**
|
|
753
744
|
* Returns true if the given {@link ImplicitFieldSchema} are equivalent, otherwise false.
|
|
754
745
|
* @remarks Two ImplicitFieldSchema are considered equivalent if all of the following are true:
|
|
@@ -126,6 +126,23 @@ export interface SimpleMapNodeSchema<out TCustomMetadata = unknown>
|
|
|
126
126
|
readonly allowedTypesIdentifiers: ReadonlySet<string>;
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
+
/**
|
|
130
|
+
* A {@link SimpleNodeSchema} for a map node.
|
|
131
|
+
*
|
|
132
|
+
* @alpha
|
|
133
|
+
* @sealed
|
|
134
|
+
*/
|
|
135
|
+
export interface SimpleRecordNodeSchema<out TCustomMetadata = unknown>
|
|
136
|
+
extends SimpleNodeSchemaBaseAlpha<NodeKind.Record, TCustomMetadata> {
|
|
137
|
+
/**
|
|
138
|
+
* The types allowed as values in the record.
|
|
139
|
+
*
|
|
140
|
+
* @remarks Refers to the types by identifier.
|
|
141
|
+
* A {@link SimpleTreeSchema} is needed to resolve these identifiers to their schema {@link SimpleTreeSchema.definitions}.
|
|
142
|
+
*/
|
|
143
|
+
readonly allowedTypesIdentifiers: ReadonlySet<string>;
|
|
144
|
+
}
|
|
145
|
+
|
|
129
146
|
/**
|
|
130
147
|
* A {@link SimpleNodeSchema} for a leaf node.
|
|
131
148
|
*
|
|
@@ -157,7 +174,8 @@ export type SimpleNodeSchema =
|
|
|
157
174
|
| SimpleLeafNodeSchema
|
|
158
175
|
| SimpleMapNodeSchema
|
|
159
176
|
| SimpleArrayNodeSchema
|
|
160
|
-
| SimpleObjectNodeSchema
|
|
177
|
+
| SimpleObjectNodeSchema
|
|
178
|
+
| SimpleRecordNodeSchema;
|
|
161
179
|
|
|
162
180
|
/**
|
|
163
181
|
* A simple, shallow representation of a schema for a field.
|
|
@@ -37,6 +37,8 @@ const viewToStoredCache = new WeakMap<ImplicitFieldSchema, TreeStoredSchema>();
|
|
|
37
37
|
|
|
38
38
|
/**
|
|
39
39
|
* Converts a {@link ImplicitFieldSchema} into a {@link TreeStoredSchema}.
|
|
40
|
+
* @throws
|
|
41
|
+
* Throws a `UsageError` if multiple schemas are encountered with the same identifier.
|
|
40
42
|
*/
|
|
41
43
|
export function toStoredSchema(root: ImplicitFieldSchema): TreeStoredSchema {
|
|
42
44
|
return getOrCreate(viewToStoredCache, root, () => {
|
|
@@ -117,7 +119,8 @@ export function getStoredSchema(schema: SimpleNodeSchema): TreeNodeStoredSchema
|
|
|
117
119
|
assert(schema instanceof LeafNodeSchema, 0xa4a /* invalid kind */);
|
|
118
120
|
return new LeafNodeStoredSchema(schema.leafKind);
|
|
119
121
|
}
|
|
120
|
-
case NodeKind.Map:
|
|
122
|
+
case NodeKind.Map:
|
|
123
|
+
case NodeKind.Record: {
|
|
121
124
|
const types = schema.allowedTypesIdentifiers as TreeTypeSet;
|
|
122
125
|
return new MapNodeStoredSchema(
|
|
123
126
|
{
|
|
@@ -146,7 +149,8 @@ export function getStoredSchema(schema: SimpleNodeSchema): TreeNodeStoredSchema
|
|
|
146
149
|
}
|
|
147
150
|
return new ObjectNodeStoredSchema(fields, schema.persistedMetadata);
|
|
148
151
|
}
|
|
149
|
-
default:
|
|
152
|
+
default: {
|
|
150
153
|
unreachableCase(kind);
|
|
154
|
+
}
|
|
151
155
|
}
|
|
152
156
|
}
|
|
@@ -20,8 +20,8 @@ import {
|
|
|
20
20
|
type InnerNode,
|
|
21
21
|
type Context,
|
|
22
22
|
type UnhydratedFlexTreeNode,
|
|
23
|
+
getSimpleNodeSchemaFromInnerNode,
|
|
23
24
|
} from "./core/index.js";
|
|
24
|
-
import { getSimpleNodeSchemaFromInnerNode } from "./core/index.js";
|
|
25
25
|
import { markEager } from "./flexList.js";
|
|
26
26
|
|
|
27
27
|
/**
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
+
import type { IFluidHandle } from "@fluidframework/core-interfaces";
|
|
6
7
|
import { assert, fail, unreachableCase } from "@fluidframework/core-utils/internal";
|
|
7
8
|
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
8
9
|
import { isFluidHandle } from "@fluidframework/runtime-utils/internal";
|
|
@@ -28,28 +29,39 @@ import {
|
|
|
28
29
|
type TreeLeafValue,
|
|
29
30
|
extractFieldProvider,
|
|
30
31
|
type ContextualFieldProvider,
|
|
32
|
+
unannotateImplicitAllowedTypes,
|
|
31
33
|
} from "./schemaTypes.js";
|
|
32
34
|
import {
|
|
35
|
+
createField,
|
|
33
36
|
getKernel,
|
|
34
37
|
isTreeNode,
|
|
35
38
|
NodeKind,
|
|
36
39
|
type TreeNode,
|
|
37
40
|
type TreeNodeSchema,
|
|
38
41
|
type Unhydrated,
|
|
42
|
+
type UnhydratedFlexTreeField,
|
|
39
43
|
UnhydratedFlexTreeNode,
|
|
40
44
|
UnhydratedSequenceField,
|
|
41
45
|
} from "./core/index.js";
|
|
46
|
+
import { getUnhydratedContext } from "./createContext.js";
|
|
47
|
+
import { convertFieldKind } from "./toStoredSchema.js";
|
|
48
|
+
|
|
42
49
|
// Required to prevent the introduction of new circular dependencies
|
|
43
50
|
// TODO: Having the schema provide their own policy functions for compatibility which
|
|
44
|
-
// unhydratedFlexTreeFromInsertable invokes instead of manually handling each kind would remove this bad
|
|
51
|
+
// `unhydratedFlexTreeFromInsertable` invokes instead of manually handling each kind would remove this bad
|
|
45
52
|
// dependency, and reduce coupling.
|
|
46
|
-
|
|
47
|
-
import {
|
|
48
|
-
import type
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
+
/* eslint-disable import/no-internal-modules */
|
|
54
|
+
import { isArrayNodeSchema, type ArrayNodeSchema } from "./node-kinds/array/arrayNodeTypes.js";
|
|
55
|
+
import { isMapNodeSchema, type MapNodeSchema } from "./node-kinds/map/mapNodeTypes.js";
|
|
56
|
+
import {
|
|
57
|
+
isObjectNodeSchema,
|
|
58
|
+
type ObjectNodeSchemaPrivate,
|
|
59
|
+
} from "./node-kinds/object/objectNodeTypes.js";
|
|
60
|
+
import {
|
|
61
|
+
isRecordNodeSchema,
|
|
62
|
+
type RecordNodeSchema,
|
|
63
|
+
} from "./node-kinds/record/recordNodeTypes.js";
|
|
64
|
+
/* eslint-enable import/no-internal-modules */
|
|
53
65
|
|
|
54
66
|
/**
|
|
55
67
|
* Module notes:
|
|
@@ -139,14 +151,21 @@ function unhydratedFlexTreeFromInsertableNode(
|
|
|
139
151
|
result = leafToFlexContent(data, schema, allowedTypes);
|
|
140
152
|
break;
|
|
141
153
|
case NodeKind.Array:
|
|
154
|
+
assert(isArrayNodeSchema(schema), 0x922 /* Expected an array schema. */);
|
|
142
155
|
result = arrayToFlexContent(data, schema);
|
|
143
156
|
break;
|
|
144
157
|
case NodeKind.Map:
|
|
158
|
+
assert(isMapNodeSchema(schema), 0x923 /* Expected a Map schema. */);
|
|
145
159
|
result = mapToFlexContent(data, schema);
|
|
146
160
|
break;
|
|
147
161
|
case NodeKind.Object:
|
|
162
|
+
assert(isObjectNodeSchema(schema), 0x924 /* Expected an Object schema. */);
|
|
148
163
|
result = objectToFlexContent(data, schema);
|
|
149
164
|
break;
|
|
165
|
+
case NodeKind.Record:
|
|
166
|
+
assert(isRecordNodeSchema(schema), "Expected a Record schema.");
|
|
167
|
+
result = recordToFlexContent(data, schema);
|
|
168
|
+
break;
|
|
150
169
|
default:
|
|
151
170
|
unreachableCase(schema.kind);
|
|
152
171
|
}
|
|
@@ -265,8 +284,7 @@ function arrayChildToFlexTree(
|
|
|
265
284
|
* @param data - The tree data to be transformed. Must be an iterable.
|
|
266
285
|
* @param schema - The schema associated with the value.
|
|
267
286
|
*/
|
|
268
|
-
function arrayToFlexContent(data: FactoryContent, schema:
|
|
269
|
-
assert(schema.kind === NodeKind.Array, 0x922 /* Expected an array schema. */);
|
|
287
|
+
function arrayToFlexContent(data: FactoryContent, schema: ArrayNodeSchema): FlexContent {
|
|
270
288
|
if (!(typeof data === "object" && data !== null && Symbol.iterator in data)) {
|
|
271
289
|
throw new UsageError(`Input data is incompatible with Array schema: ${data}`);
|
|
272
290
|
}
|
|
@@ -308,14 +326,11 @@ function arrayToFlexContent(data: FactoryContent, schema: TreeNodeSchema): FlexC
|
|
|
308
326
|
* @param data - The tree data to be transformed. Must be an iterable.
|
|
309
327
|
* @param schema - The schema associated with the value.
|
|
310
328
|
*/
|
|
311
|
-
function mapToFlexContent(data: FactoryContent, schema:
|
|
312
|
-
assert(schema.kind === NodeKind.Map, 0x923 /* Expected a Map schema. */);
|
|
329
|
+
function mapToFlexContent(data: FactoryContent, schema: MapNodeSchema): FlexContent {
|
|
313
330
|
if (!(typeof data === "object" && data !== null)) {
|
|
314
331
|
throw new UsageError(`Input data is incompatible with Map schema: ${data}`);
|
|
315
332
|
}
|
|
316
333
|
|
|
317
|
-
const allowedChildTypes = normalizeAllowedTypes(schema.info as ImplicitAllowedTypes);
|
|
318
|
-
|
|
319
334
|
const fieldsIterator = (
|
|
320
335
|
Symbol.iterator in data
|
|
321
336
|
? // Support iterables of key value pairs (including Map objects)
|
|
@@ -324,30 +339,7 @@ function mapToFlexContent(data: FactoryContent, schema: TreeNodeSchema): FlexCon
|
|
|
324
339
|
Object.entries(data)
|
|
325
340
|
) as Iterable<readonly [string, InsertableContent]>;
|
|
326
341
|
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
const transformedFields = new Map<FieldKey, UnhydratedFlexTreeField>();
|
|
330
|
-
for (const item of fieldsIterator) {
|
|
331
|
-
if (!isReadonlyArray(item) || item.length !== 2 || typeof item[0] !== "string") {
|
|
332
|
-
throw new UsageError(`Input data is incompatible with map entry: ${item}`);
|
|
333
|
-
}
|
|
334
|
-
const [key, value] = item;
|
|
335
|
-
assert(!transformedFields.has(brand(key)), 0x84c /* Keys should not be duplicated */);
|
|
336
|
-
|
|
337
|
-
// Omit undefined values - an entry with an undefined value is equivalent to one that has been removed or omitted
|
|
338
|
-
if (value !== undefined) {
|
|
339
|
-
const child = unhydratedFlexTreeFromInsertableNode(value, allowedChildTypes);
|
|
340
|
-
const field = createField(context, FieldKinds.optional.identifier, brand(key), [child]);
|
|
341
|
-
transformedFields.set(brand(key), field);
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
return [
|
|
346
|
-
{
|
|
347
|
-
type: brand(schema.identifier),
|
|
348
|
-
},
|
|
349
|
-
transformedFields,
|
|
350
|
-
];
|
|
342
|
+
return recordLikeDataToFlexContent(fieldsIterator, schema);
|
|
351
343
|
}
|
|
352
344
|
|
|
353
345
|
/**
|
|
@@ -355,8 +347,10 @@ function mapToFlexContent(data: FactoryContent, schema: TreeNodeSchema): FlexCon
|
|
|
355
347
|
* @param data - The tree data to be transformed. Must be a Record-like object.
|
|
356
348
|
* @param schema - The schema associated with the value.
|
|
357
349
|
*/
|
|
358
|
-
function objectToFlexContent(
|
|
359
|
-
|
|
350
|
+
function objectToFlexContent(
|
|
351
|
+
data: FactoryContent,
|
|
352
|
+
schema: ObjectNodeSchemaPrivate,
|
|
353
|
+
): FlexContent {
|
|
360
354
|
if (
|
|
361
355
|
typeof data !== "object" ||
|
|
362
356
|
data === null ||
|
|
@@ -396,6 +390,51 @@ function objectToFlexContent(data: FactoryContent, schema: TreeNodeSchema): Flex
|
|
|
396
390
|
return [{ type: brand(schema.identifier) }, fields];
|
|
397
391
|
}
|
|
398
392
|
|
|
393
|
+
/**
|
|
394
|
+
* Transforms data under an Object schema.
|
|
395
|
+
* @param data - The tree data to be transformed. Must be a Record-like object.
|
|
396
|
+
* @param schema - The schema associated with the value.
|
|
397
|
+
*/
|
|
398
|
+
function recordToFlexContent(data: FactoryContent, schema: RecordNodeSchema): FlexContent {
|
|
399
|
+
if (!(typeof data === "object" && data !== null)) {
|
|
400
|
+
throw new UsageError(`Input data is incompatible with Record schema: ${data}`);
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
const fieldsIterator: Iterable<readonly [string, InsertableContent]> = Object.entries(data);
|
|
404
|
+
return recordLikeDataToFlexContent(fieldsIterator, schema);
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
* Converts record-like data to a FlexContent representation for map/record schema.
|
|
409
|
+
*/
|
|
410
|
+
function recordLikeDataToFlexContent(
|
|
411
|
+
fieldsIterator: Iterable<readonly [string, InsertableContent]>,
|
|
412
|
+
schema: MapNodeSchema | RecordNodeSchema,
|
|
413
|
+
): FlexContent {
|
|
414
|
+
const allowedChildTypes = normalizeAllowedTypes(unannotateImplicitAllowedTypes(schema.info));
|
|
415
|
+
const context = getUnhydratedContext(schema).flexContext;
|
|
416
|
+
|
|
417
|
+
const transformedFields = new Map<FieldKey, UnhydratedFlexTreeField>();
|
|
418
|
+
for (const item of fieldsIterator) {
|
|
419
|
+
const [key, value] = item;
|
|
420
|
+
assert(!transformedFields.has(brand(key)), 0x84c /* Keys should not be duplicated */);
|
|
421
|
+
|
|
422
|
+
// Omit undefined values - an entry with an undefined value is equivalent to one that has been removed or omitted
|
|
423
|
+
if (value !== undefined) {
|
|
424
|
+
const child = unhydratedFlexTreeFromInsertableNode(value, allowedChildTypes);
|
|
425
|
+
const field = createField(context, FieldKinds.optional.identifier, brand(key), [child]);
|
|
426
|
+
transformedFields.set(brand(key), field);
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
return [
|
|
431
|
+
{
|
|
432
|
+
type: brand(schema.identifier),
|
|
433
|
+
},
|
|
434
|
+
transformedFields,
|
|
435
|
+
];
|
|
436
|
+
}
|
|
437
|
+
|
|
399
438
|
/**
|
|
400
439
|
* Check {@link FactoryContentObject} for a property which could be store a field.
|
|
401
440
|
*
|
|
@@ -550,6 +589,10 @@ function shallowCompatibilityTest(
|
|
|
550
589
|
|
|
551
590
|
// At this point, it is assumed data is a record-like object since all the other cases have been eliminated.
|
|
552
591
|
|
|
592
|
+
if (schema.kind === NodeKind.Record) {
|
|
593
|
+
return CompatibilityLevel.Normal;
|
|
594
|
+
}
|
|
595
|
+
|
|
553
596
|
if (schema.kind === NodeKind.Array) {
|
|
554
597
|
return CompatibilityLevel.None;
|
|
555
598
|
}
|
|
@@ -14,5 +14,9 @@ export function walkFieldSchema(
|
|
|
14
14
|
visitor: SchemaVisitor,
|
|
15
15
|
visitedSet: Set<TreeNodeSchema> = new Set(),
|
|
16
16
|
): void {
|
|
17
|
-
walkAllowedTypes(
|
|
17
|
+
walkAllowedTypes(
|
|
18
|
+
normalizeFieldSchema(schema).annotatedAllowedTypesNormalized,
|
|
19
|
+
visitor,
|
|
20
|
+
visitedSet,
|
|
21
|
+
);
|
|
18
22
|
}
|
package/src/tableSchema.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import { oob } from "@fluidframework/core-utils/internal";
|
|
7
7
|
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
8
8
|
|
|
9
|
-
import { Tree } from "./shared-tree/index.js";
|
|
9
|
+
import { Tree, TreeAlpha } from "./shared-tree/index.js";
|
|
10
10
|
import {
|
|
11
11
|
type FieldHasDefault,
|
|
12
12
|
type ImplicitAllowedTypes,
|
|
@@ -28,6 +28,7 @@ import {
|
|
|
28
28
|
type ImplicitAnnotatedFieldSchema,
|
|
29
29
|
type UnannotateImplicitFieldSchema,
|
|
30
30
|
isArrayNodeSchema,
|
|
31
|
+
type InsertableField,
|
|
31
32
|
} from "./simple-tree/index.js";
|
|
32
33
|
|
|
33
34
|
// Future improvement TODOs:
|
|
@@ -352,7 +353,12 @@ export namespace System_TableSchema {
|
|
|
352
353
|
// See definition of `RowInsertableType` below.
|
|
353
354
|
const rowFieldsBuiltInParts = {
|
|
354
355
|
id: schemaFactory.identifier,
|
|
355
|
-
|
|
356
|
+
/**
|
|
357
|
+
* The cells of the table row, keyed by column ID.
|
|
358
|
+
* @remarks
|
|
359
|
+
* The table row models its cells as a record, where each key is the ID of the column it belongs to. The choice of record (as opposed to a map) is intended to make interop with common table rendering libraries in TypeScript/JavaScript easier.
|
|
360
|
+
*/
|
|
361
|
+
cells: schemaFactory.required(schemaFactory.record("Row.cells", cellSchema), {
|
|
356
362
|
metadata: {
|
|
357
363
|
description: "The cells of the table row, keyed by column ID.",
|
|
358
364
|
},
|
|
@@ -389,7 +395,8 @@ export namespace System_TableSchema {
|
|
|
389
395
|
columnOrId: TableSchema.Column<TCellSchema> | string,
|
|
390
396
|
): CellValueType | undefined {
|
|
391
397
|
const columnId = typeof columnOrId === "string" ? columnOrId : columnOrId.id;
|
|
392
|
-
|
|
398
|
+
// Unlike most objects, RecordNodes don't have the default inherited object properties, so this is safe
|
|
399
|
+
return this.cells[columnId];
|
|
393
400
|
}
|
|
394
401
|
|
|
395
402
|
public setCell(
|
|
@@ -398,8 +405,18 @@ export namespace System_TableSchema {
|
|
|
398
405
|
): void {
|
|
399
406
|
// TODO: throw if column does not exist in the owning table.
|
|
400
407
|
|
|
401
|
-
|
|
402
|
-
|
|
408
|
+
if (value === undefined) {
|
|
409
|
+
this.removeCell(columnOrId);
|
|
410
|
+
} else {
|
|
411
|
+
const columnId = typeof columnOrId === "string" ? columnOrId : columnOrId.id;
|
|
412
|
+
|
|
413
|
+
// TypeScript is unable to narrow the types correctly here, hence the casts.
|
|
414
|
+
// See: https://github.com/microsoft/TypeScript/issues/52144
|
|
415
|
+
this.cells[columnId] = TreeAlpha.create(
|
|
416
|
+
cellSchema,
|
|
417
|
+
value as InsertableField<TCellSchema>,
|
|
418
|
+
) as CellValueType;
|
|
419
|
+
}
|
|
403
420
|
}
|
|
404
421
|
|
|
405
422
|
public removeCell(
|
|
@@ -409,12 +426,14 @@ export namespace System_TableSchema {
|
|
|
409
426
|
|
|
410
427
|
const columnId = typeof columnOrId === "string" ? columnOrId : columnOrId.id;
|
|
411
428
|
|
|
412
|
-
const cell: CellValueType | undefined = this.
|
|
429
|
+
const cell: CellValueType | undefined = this.getCell(columnId);
|
|
413
430
|
if (cell === undefined) {
|
|
414
431
|
return undefined;
|
|
415
432
|
}
|
|
416
433
|
|
|
417
|
-
|
|
434
|
+
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete -- The record's values are non-optional, so setting `undefined` as a means to remove the cell is not supported.
|
|
435
|
+
delete this.cells[columnId];
|
|
436
|
+
|
|
418
437
|
return cell;
|
|
419
438
|
}
|
|
420
439
|
|
|
@@ -423,7 +442,7 @@ export namespace System_TableSchema {
|
|
|
423
442
|
cell: CellValueType;
|
|
424
443
|
}[] {
|
|
425
444
|
const result = [];
|
|
426
|
-
for (const [columnId, cell] of this.cells
|
|
445
|
+
for (const [columnId, cell] of Object.entries(this.cells)) {
|
|
427
446
|
if (cell !== undefined) {
|
|
428
447
|
result.push({
|
|
429
448
|
columnId,
|
package/src/util/brandedMap.ts
CHANGED
|
@@ -16,8 +16,6 @@ import { getOrCreate } from "./utils.js";
|
|
|
16
16
|
*/
|
|
17
17
|
export type BrandedKey<TKey, TContent> = TKey & Invariant<TContent>;
|
|
18
18
|
|
|
19
|
-
/**
|
|
20
|
-
*/
|
|
21
19
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
22
20
|
export type BrandedKeyContent<TKey extends BrandedKey<unknown, any>> = TKey extends BrandedKey<
|
|
23
21
|
unknown,
|