@fluidframework/tree 2.43.0 → 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/api-report/tree.alpha.api.md +73 -16
- package/api-report/tree.beta.api.md +9 -3
- package/api-report/tree.legacy.alpha.api.md +8 -2
- package/api-report/tree.legacy.public.api.md +8 -2
- package/api-report/tree.public.api.md +8 -2
- package/dist/alpha.d.ts +9 -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 +0 -2
- 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.d.ts.map +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
- package/dist/shared-tree/treeAlpha.js +3 -1
- package/dist/shared-tree/treeAlpha.js.map +1 -1
- package/dist/simple-tree/api/configuration.d.ts.map +1 -1
- package/dist/simple-tree/api/configuration.js +49 -17
- 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 +2 -2
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- 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.js +1 -1
- 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/index.d.ts +1 -1
- package/dist/simple-tree/core/index.d.ts.map +1 -1
- package/dist/simple-tree/core/index.js +2 -1
- package/dist/simple-tree/core/index.js.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.d.ts +5 -1
- package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.js +4 -0
- package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/dist/simple-tree/index.d.ts +3 -3
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +3 -1
- package/dist/simple-tree/index.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/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.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/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.map +1 -1
- package/dist/simple-tree/toStoredSchema.js +4 -2
- package/dist/simple-tree/toStoredSchema.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/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 +9 -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 +0 -2
- 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.d.ts.map +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
- package/lib/shared-tree/treeAlpha.js +3 -1
- package/lib/shared-tree/treeAlpha.js.map +1 -1
- package/lib/simple-tree/api/configuration.d.ts.map +1 -1
- package/lib/simple-tree/api/configuration.js +51 -19
- 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 +2 -2
- package/lib/simple-tree/api/index.d.ts.map +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.js +2 -2
- 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/index.d.ts +1 -1
- package/lib/simple-tree/core/index.d.ts.map +1 -1
- package/lib/simple-tree/core/index.js +1 -1
- package/lib/simple-tree/core/index.js.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.d.ts +5 -1
- package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.js +4 -0
- package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/lib/simple-tree/index.d.ts +3 -3
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +1 -1
- package/lib/simple-tree/index.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/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.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/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.map +1 -1
- package/lib/simple-tree/toStoredSchema.js +4 -2
- package/lib/simple-tree/toStoredSchema.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/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 +34 -22
- 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 +0 -2
- 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 +9 -0
- package/src/jsonDomainSchema.ts +3 -3
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/treeAlpha.ts +3 -1
- package/src/simple-tree/api/configuration.ts +73 -19
- package/src/simple-tree/api/customTree.ts +3 -3
- package/src/simple-tree/api/index.ts +3 -0
- 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 +2 -2
- package/src/simple-tree/api/typesUnsafe.ts +15 -0
- package/src/simple-tree/api/viewSchemaToSimpleSchema.ts +14 -6
- package/src/simple-tree/core/index.ts +1 -0
- package/src/simple-tree/core/treeNodeSchema.ts +8 -4
- package/src/simple-tree/index.ts +11 -0
- package/src/simple-tree/node-kinds/index.ts +11 -0
- package/src/simple-tree/node-kinds/object/index.ts +5 -1
- package/src/simple-tree/node-kinds/object/objectNode.ts +3 -2
- 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/simpleSchema.ts +19 -1
- package/src/simple-tree/toStoredSchema.ts +4 -2
- package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +83 -40
- package/src/tableSchema.ts +27 -8
- package/src/util/brandedMap.ts +0 -2
|
@@ -185,8 +185,6 @@ export const storedEmptyFieldSchema: TreeFieldStoredSchema = {
|
|
|
185
185
|
*/
|
|
186
186
|
export const identifierFieldKindIdentifier = "Identifier";
|
|
187
187
|
|
|
188
|
-
/**
|
|
189
|
-
*/
|
|
190
188
|
export abstract class TreeNodeStoredSchema {
|
|
191
189
|
protected _typeCheck!: MakeNominal;
|
|
192
190
|
|
|
@@ -213,8 +211,6 @@ export abstract class TreeNodeStoredSchema {
|
|
|
213
211
|
public abstract getFieldSchema(field: FieldKey): TreeFieldStoredSchema;
|
|
214
212
|
}
|
|
215
213
|
|
|
216
|
-
/**
|
|
217
|
-
*/
|
|
218
214
|
export class ObjectNodeStoredSchema extends TreeNodeStoredSchema {
|
|
219
215
|
/**
|
|
220
216
|
* @param objectNodeFields -
|
|
@@ -272,8 +268,6 @@ export class ObjectNodeStoredSchema extends TreeNodeStoredSchema {
|
|
|
272
268
|
}
|
|
273
269
|
}
|
|
274
270
|
|
|
275
|
-
/**
|
|
276
|
-
*/
|
|
277
271
|
export class MapNodeStoredSchema extends TreeNodeStoredSchema {
|
|
278
272
|
/**
|
|
279
273
|
* @param mapFields -
|
|
@@ -306,8 +300,6 @@ export class MapNodeStoredSchema extends TreeNodeStoredSchema {
|
|
|
306
300
|
}
|
|
307
301
|
}
|
|
308
302
|
|
|
309
|
-
/**
|
|
310
|
-
*/
|
|
311
303
|
export class LeafNodeStoredSchema extends TreeNodeStoredSchema {
|
|
312
304
|
/**
|
|
313
305
|
* @param leafValue -
|
|
@@ -9,8 +9,6 @@ import type { TreeNodeSchemaIdentifier, TreeStoredSchema } from "../schema-store
|
|
|
9
9
|
* APIs for applying `view schema` to documents.
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
/**
|
|
13
|
-
*/
|
|
14
12
|
export interface TreeAdapter {
|
|
15
13
|
readonly output: TreeNodeSchemaIdentifier;
|
|
16
14
|
readonly input: TreeNodeSchemaIdentifier;
|
package/src/core/tree/cursor.ts
CHANGED
package/src/core/tree/delta.ts
CHANGED
package/src/core/tree/types.ts
CHANGED
|
@@ -18,8 +18,6 @@ import type {
|
|
|
18
18
|
ValueSchema,
|
|
19
19
|
} from "../schema-stored/index.js";
|
|
20
20
|
|
|
21
|
-
/**
|
|
22
|
-
*/
|
|
23
21
|
export type TreeType = TreeNodeSchemaIdentifier;
|
|
24
22
|
|
|
25
23
|
/**
|
|
@@ -43,8 +41,6 @@ export const EmptyKey: FieldKey = brand("");
|
|
|
43
41
|
*/
|
|
44
42
|
export const rootFieldKey: FieldKey = brand("rootFieldKey");
|
|
45
43
|
|
|
46
|
-
/**
|
|
47
|
-
*/
|
|
48
44
|
export const rootField = keyAsDetachedField(rootFieldKey);
|
|
49
45
|
|
|
50
46
|
/**
|
|
@@ -410,8 +410,6 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
|
|
|
410
410
|
}
|
|
411
411
|
}
|
|
412
412
|
|
|
413
|
-
/**
|
|
414
|
-
*/
|
|
415
413
|
export interface ValueFieldEditBuilder<TContent> {
|
|
416
414
|
/**
|
|
417
415
|
* Issues a change which replaces the current newContent of the field with `newContent`.
|
|
@@ -421,8 +419,6 @@ export interface ValueFieldEditBuilder<TContent> {
|
|
|
421
419
|
set(newContent: TContent): void;
|
|
422
420
|
}
|
|
423
421
|
|
|
424
|
-
/**
|
|
425
|
-
*/
|
|
426
422
|
export interface OptionalFieldEditBuilder<TContent> {
|
|
427
423
|
/**
|
|
428
424
|
* Issues a change which replaces the current newContent of the field with `newContent`
|
|
@@ -257,20 +257,10 @@ export const fieldKinds: ReadonlyMap<FieldKindIdentifier, FieldKindWithEditor> =
|
|
|
257
257
|
// TODO: Find a way to make docs like {@inheritDoc required} work in vscode.
|
|
258
258
|
// TODO: ensure thy work in generated docs.
|
|
259
259
|
// TODO: add these comments to the rest of the cases below.
|
|
260
|
-
/**
|
|
261
|
-
*/
|
|
262
260
|
export interface Required extends FlexFieldKind<"Value", Multiplicity.Single> {}
|
|
263
|
-
/**
|
|
264
|
-
*/
|
|
265
261
|
export interface Optional extends FlexFieldKind<"Optional", Multiplicity.Optional> {}
|
|
266
|
-
/**
|
|
267
|
-
*/
|
|
268
262
|
export interface Sequence extends FlexFieldKind<"Sequence", Multiplicity.Sequence> {}
|
|
269
|
-
/**
|
|
270
|
-
*/
|
|
271
263
|
export interface Identifier extends FlexFieldKind<"Identifier", Multiplicity.Single> {}
|
|
272
|
-
/**
|
|
273
|
-
*/
|
|
274
264
|
export interface Forbidden
|
|
275
265
|
extends FlexFieldKind<typeof forbiddenFieldKindIdentifier, Multiplicity.Forbidden> {}
|
|
276
266
|
|
|
@@ -216,19 +216,13 @@ export interface FieldEditor<TChangeset> {
|
|
|
216
216
|
*/
|
|
217
217
|
export type ToDelta = (child: NodeId) => DeltaFieldMap;
|
|
218
218
|
|
|
219
|
-
/**
|
|
220
|
-
*/
|
|
221
219
|
export type NodeChangeInverter = (change: NodeId) => NodeId;
|
|
222
220
|
|
|
223
|
-
/**
|
|
224
|
-
*/
|
|
225
221
|
export enum NodeAttachState {
|
|
226
222
|
Attached,
|
|
227
223
|
Detached,
|
|
228
224
|
}
|
|
229
225
|
|
|
230
|
-
/**
|
|
231
|
-
*/
|
|
232
226
|
export type NodeChangeRebaser = (
|
|
233
227
|
change: NodeId | undefined,
|
|
234
228
|
baseChange: NodeId | undefined,
|
|
@@ -239,15 +233,11 @@ export type NodeChangeRebaser = (
|
|
|
239
233
|
state?: NodeAttachState,
|
|
240
234
|
) => NodeId | undefined;
|
|
241
235
|
|
|
242
|
-
/**
|
|
243
|
-
*/
|
|
244
236
|
export type NodeChangeComposer = (
|
|
245
237
|
change1: NodeId | undefined,
|
|
246
238
|
change2: NodeId | undefined,
|
|
247
239
|
) => NodeId;
|
|
248
240
|
|
|
249
|
-
/**
|
|
250
|
-
*/
|
|
251
241
|
export type NodeChangePruner = (change: NodeId) => NodeId | undefined;
|
|
252
242
|
|
|
253
243
|
/**
|
|
@@ -2285,8 +2285,6 @@ function newCrossFieldTable<T>(): CrossFieldTable<T> {
|
|
|
2285
2285
|
};
|
|
2286
2286
|
}
|
|
2287
2287
|
|
|
2288
|
-
/**
|
|
2289
|
-
*/
|
|
2290
2288
|
interface ConstraintState {
|
|
2291
2289
|
violationCount: number;
|
|
2292
2290
|
}
|
|
@@ -2913,8 +2911,6 @@ function buildModularChangesetFromNode(props: {
|
|
|
2913
2911
|
});
|
|
2914
2912
|
}
|
|
2915
2913
|
|
|
2916
|
-
/**
|
|
2917
|
-
*/
|
|
2918
2914
|
export interface FieldEditDescription {
|
|
2919
2915
|
type: "field";
|
|
2920
2916
|
field: FieldUpPath;
|
|
@@ -2923,16 +2919,12 @@ export interface FieldEditDescription {
|
|
|
2923
2919
|
revision: RevisionTag;
|
|
2924
2920
|
}
|
|
2925
2921
|
|
|
2926
|
-
/**
|
|
2927
|
-
*/
|
|
2928
2922
|
export interface GlobalEditDescription {
|
|
2929
2923
|
type: "global";
|
|
2930
2924
|
revision: RevisionTag;
|
|
2931
2925
|
builds?: ChangeAtomIdBTree<TreeChunk>;
|
|
2932
2926
|
}
|
|
2933
2927
|
|
|
2934
|
-
/**
|
|
2935
|
-
*/
|
|
2936
2928
|
export type EditDescription = FieldEditDescription | GlobalEditDescription;
|
|
2937
2929
|
|
|
2938
2930
|
function getRevInfoFromTaggedChanges(changes: TaggedChange<ModularChangeset>[]): {
|
|
@@ -17,8 +17,6 @@ import type { TreeChunk } from "../chunked-forest/index.js";
|
|
|
17
17
|
|
|
18
18
|
import type { CrossFieldTarget } from "./crossFieldQueries.js";
|
|
19
19
|
|
|
20
|
-
/**
|
|
21
|
-
*/
|
|
22
20
|
export interface ModularChangeset extends HasFieldChanges {
|
|
23
21
|
/**
|
|
24
22
|
* The numerically highest `ChangesetLocalId` used in this changeset.
|
|
@@ -110,8 +108,6 @@ export interface FieldId {
|
|
|
110
108
|
readonly field: FieldKey;
|
|
111
109
|
}
|
|
112
110
|
|
|
113
|
-
/**
|
|
114
|
-
*/
|
|
115
111
|
export interface NodeExistsConstraint {
|
|
116
112
|
violated: boolean;
|
|
117
113
|
}
|
|
@@ -128,23 +124,15 @@ export interface NodeChangeset extends HasFieldChanges {
|
|
|
128
124
|
|
|
129
125
|
export type NodeId = ChangeAtomId;
|
|
130
126
|
|
|
131
|
-
/**
|
|
132
|
-
*/
|
|
133
127
|
export interface HasFieldChanges {
|
|
134
128
|
fieldChanges?: FieldChangeMap;
|
|
135
129
|
}
|
|
136
130
|
|
|
137
|
-
/**
|
|
138
|
-
*/
|
|
139
131
|
export type FieldChangeMap = Map<FieldKey, FieldChange>;
|
|
140
132
|
|
|
141
|
-
/**
|
|
142
|
-
*/
|
|
143
133
|
export interface FieldChange {
|
|
144
134
|
fieldKind: FieldKindIdentifier;
|
|
145
135
|
change: FieldChangeset;
|
|
146
136
|
}
|
|
147
137
|
|
|
148
|
-
/**
|
|
149
|
-
*/
|
|
150
138
|
export type FieldChangeset = Brand<unknown, "FieldChangeset">;
|
package/src/index.ts
CHANGED
|
@@ -130,6 +130,7 @@ export {
|
|
|
130
130
|
type FieldSchemaAlphaUnsafe,
|
|
131
131
|
type ArrayNodeCustomizableSchemaUnsafe,
|
|
132
132
|
type MapNodeCustomizableSchemaUnsafe,
|
|
133
|
+
type TreeRecordNodeUnsafe,
|
|
133
134
|
// System types (not in Internal types for various reasons, like doc links or cannot be named errors).
|
|
134
135
|
type typeSchemaSymbol,
|
|
135
136
|
type TreeNodeSchemaNonClass,
|
|
@@ -196,6 +197,8 @@ export {
|
|
|
196
197
|
type JsonRefPath,
|
|
197
198
|
type JsonSchemaType,
|
|
198
199
|
type JsonLeafSchemaType,
|
|
200
|
+
type JsonRecordNodeSchema,
|
|
201
|
+
type JsonStringKeyPatternProperties,
|
|
199
202
|
getJsonSchema,
|
|
200
203
|
type LazyItem,
|
|
201
204
|
type Unenforced,
|
|
@@ -209,6 +212,7 @@ export {
|
|
|
209
212
|
type SimpleArrayNodeSchema,
|
|
210
213
|
type SimpleObjectNodeSchema,
|
|
211
214
|
type SimpleObjectFieldSchema,
|
|
215
|
+
type SimpleRecordNodeSchema,
|
|
212
216
|
normalizeAllowedTypes,
|
|
213
217
|
getSimpleSchema,
|
|
214
218
|
type ReadonlyArrayNode,
|
|
@@ -249,6 +253,11 @@ export {
|
|
|
249
253
|
type ObjectFromSchemaRecord,
|
|
250
254
|
type ValidateRecursiveSchemaTemplate,
|
|
251
255
|
type FixRecursiveRecursionLimit,
|
|
256
|
+
RecordNodeSchema,
|
|
257
|
+
type RecordNodeCustomizableSchema,
|
|
258
|
+
type RecordNodeInsertableData,
|
|
259
|
+
type RecordNodePojoEmulationSchema,
|
|
260
|
+
type TreeRecordNode,
|
|
252
261
|
} from "./simple-tree/index.js";
|
|
253
262
|
export {
|
|
254
263
|
SharedTree,
|
package/src/jsonDomainSchema.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { SchemaFactory } from "./simple-tree/index.js";
|
|
6
|
+
import { SchemaFactory, SchemaFactoryAlpha } from "./simple-tree/index.js";
|
|
7
7
|
import type {
|
|
8
8
|
AllowedTypes,
|
|
9
9
|
FixRecursiveArraySchema,
|
|
@@ -22,7 +22,7 @@ import type {
|
|
|
22
22
|
// #endregion
|
|
23
23
|
} from "./simple-tree/index.js";
|
|
24
24
|
|
|
25
|
-
const sf = new
|
|
25
|
+
const sf = new SchemaFactoryAlpha("com.fluidframework.json");
|
|
26
26
|
|
|
27
27
|
/**
|
|
28
28
|
* Utilities for storing JSON data in {@link TreeNode}s.
|
|
@@ -80,7 +80,7 @@ export namespace JsonAsTree {
|
|
|
80
80
|
* Do not use. Exists only as a workaround for {@link https://github.com/microsoft/TypeScript/issues/59550} and {@link https://github.com/microsoft/rushstack/issues/4429}.
|
|
81
81
|
* @system @alpha
|
|
82
82
|
*/
|
|
83
|
-
export const _APIExtractorWorkaroundObjectBase = sf.
|
|
83
|
+
export const _APIExtractorWorkaroundObjectBase = sf.recordRecursive("object", Tree);
|
|
84
84
|
|
|
85
85
|
/**
|
|
86
86
|
* Arbitrary JSON object as a {@link TreeNode}.
|
package/src/packageVersion.ts
CHANGED
|
@@ -592,6 +592,7 @@ export const TreeAlpha: TreeAlpha = {
|
|
|
592
592
|
return undefined;
|
|
593
593
|
}
|
|
594
594
|
// Fall through
|
|
595
|
+
case NodeKind.Record:
|
|
595
596
|
case NodeKind.Object: {
|
|
596
597
|
let storedKey: string | number = propertyKey;
|
|
597
598
|
if (isObjectNodeSchema(schema)) {
|
|
@@ -643,7 +644,8 @@ export const TreeAlpha: TreeAlpha = {
|
|
|
643
644
|
}
|
|
644
645
|
break;
|
|
645
646
|
}
|
|
646
|
-
case NodeKind.Map:
|
|
647
|
+
case NodeKind.Map:
|
|
648
|
+
case NodeKind.Record: {
|
|
647
649
|
for (const [key, flexField] of flexNode.fields) {
|
|
648
650
|
const childTreeNode = tryGetTreeNodeForField(flexField);
|
|
649
651
|
if (childTreeNode !== undefined) {
|
|
@@ -3,7 +3,13 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
assert,
|
|
8
|
+
debugAssert,
|
|
9
|
+
fail,
|
|
10
|
+
oob,
|
|
11
|
+
unreachableCase,
|
|
12
|
+
} from "@fluidframework/core-utils/internal";
|
|
7
13
|
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
8
14
|
|
|
9
15
|
import {
|
|
@@ -17,8 +23,16 @@ import {
|
|
|
17
23
|
} from "../schemaTypes.js";
|
|
18
24
|
import { NodeKind, type TreeNodeSchema } from "../core/index.js";
|
|
19
25
|
import { toStoredSchema } from "../toStoredSchema.js";
|
|
20
|
-
import {
|
|
21
|
-
|
|
26
|
+
import {
|
|
27
|
+
isArrayNodeSchema,
|
|
28
|
+
isMapNodeSchema,
|
|
29
|
+
isObjectNodeSchema,
|
|
30
|
+
isRecordNodeSchema,
|
|
31
|
+
type ArrayNodeSchema,
|
|
32
|
+
type MapNodeSchema,
|
|
33
|
+
type ObjectNodeSchema,
|
|
34
|
+
type RecordNodeSchema,
|
|
35
|
+
} from "../node-kinds/index.js";
|
|
22
36
|
import { getOrCreate } from "../../util/index.js";
|
|
23
37
|
import type { MakeNominal } from "../../util/index.js";
|
|
24
38
|
import { walkFieldSchema } from "../walkFieldSchema.js";
|
|
@@ -293,10 +307,11 @@ export function checkUnion(
|
|
|
293
307
|
ambiguityErrors: string[],
|
|
294
308
|
): void {
|
|
295
309
|
const checked: Set<TreeNodeSchema> = new Set();
|
|
296
|
-
const maps:
|
|
297
|
-
const arrays:
|
|
298
|
-
|
|
310
|
+
const maps: MapNodeSchema[] = [];
|
|
311
|
+
const arrays: ArrayNodeSchema[] = [];
|
|
312
|
+
const records: RecordNodeSchema[] = [];
|
|
299
313
|
const objects: ObjectNodeSchema[] = [];
|
|
314
|
+
|
|
300
315
|
// Map from key to schema using that key
|
|
301
316
|
const allObjectKeys: Map<string, Set<TreeNodeSchema>> = new Map();
|
|
302
317
|
|
|
@@ -306,18 +321,37 @@ export function checkUnion(
|
|
|
306
321
|
}
|
|
307
322
|
checked.add(schema);
|
|
308
323
|
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
324
|
+
switch (schema.kind) {
|
|
325
|
+
case NodeKind.Leaf: {
|
|
326
|
+
// nothing to do
|
|
327
|
+
break;
|
|
328
|
+
}
|
|
329
|
+
case NodeKind.Object: {
|
|
330
|
+
assert(isObjectNodeSchema(schema), "Expected object schema.");
|
|
331
|
+
objects.push(schema);
|
|
332
|
+
for (const key of schema.fields.keys()) {
|
|
333
|
+
getOrCreate(allObjectKeys, key, () => new Set()).add(schema);
|
|
334
|
+
}
|
|
335
|
+
break;
|
|
336
|
+
}
|
|
337
|
+
case NodeKind.Array: {
|
|
338
|
+
assert(isArrayNodeSchema(schema), "Expected array schema.");
|
|
339
|
+
arrays.push(schema);
|
|
340
|
+
break;
|
|
341
|
+
}
|
|
342
|
+
case NodeKind.Map: {
|
|
343
|
+
assert(isMapNodeSchema(schema), "Expected map schema.");
|
|
344
|
+
maps.push(schema);
|
|
345
|
+
break;
|
|
346
|
+
}
|
|
347
|
+
case NodeKind.Record: {
|
|
348
|
+
assert(isRecordNodeSchema(schema), "Expected record schema.");
|
|
349
|
+
records.push(schema);
|
|
350
|
+
break;
|
|
351
|
+
}
|
|
352
|
+
default: {
|
|
353
|
+
unreachableCase(schema.kind);
|
|
315
354
|
}
|
|
316
|
-
} else if (schema.kind === NodeKind.Array) {
|
|
317
|
-
arrays.push(schema);
|
|
318
|
-
} else {
|
|
319
|
-
assert(schema.kind === NodeKind.Map, 0x9e7 /* invalid schema */);
|
|
320
|
-
maps.push(schema);
|
|
321
355
|
}
|
|
322
356
|
}
|
|
323
357
|
|
|
@@ -338,15 +372,35 @@ export function checkUnion(
|
|
|
338
372
|
);
|
|
339
373
|
}
|
|
340
374
|
|
|
375
|
+
if (records.length > 1) {
|
|
376
|
+
ambiguityErrors.push(
|
|
377
|
+
`More than one kind of record allowed within union (${formatTypes(records)}). This would require type disambiguation which is not supported by records during import or export.`,
|
|
378
|
+
);
|
|
379
|
+
}
|
|
380
|
+
|
|
341
381
|
if (maps.length > 0 && arrays.length > 0) {
|
|
342
382
|
ambiguityErrors.push(
|
|
343
383
|
`Both a map and an array allowed within union (${formatTypes([...arrays, ...maps])}). Both can be implicitly constructed from iterables like arrays, which are ambiguous when the array is empty.`,
|
|
344
384
|
);
|
|
345
385
|
}
|
|
346
386
|
|
|
347
|
-
|
|
387
|
+
const nodeKindListEntries = [];
|
|
388
|
+
if (objects.length > 0) {
|
|
389
|
+
nodeKindListEntries.push("objects");
|
|
390
|
+
}
|
|
391
|
+
if (maps.length > 0) {
|
|
392
|
+
nodeKindListEntries.push("maps");
|
|
393
|
+
}
|
|
394
|
+
if (records.length > 0) {
|
|
395
|
+
nodeKindListEntries.push("records");
|
|
396
|
+
}
|
|
397
|
+
if (nodeKindListEntries.length > 1) {
|
|
398
|
+
const nodeKindListString =
|
|
399
|
+
nodeKindListEntries.length === 2
|
|
400
|
+
? `${nodeKindListEntries[0] ?? oob()} and ${nodeKindListEntries[1] ?? oob()}`
|
|
401
|
+
: `${nodeKindListEntries.slice(0, -1).join(", ")}, and ${nodeKindListEntries[nodeKindListEntries.length - 1]}`;
|
|
348
402
|
ambiguityErrors.push(
|
|
349
|
-
`
|
|
403
|
+
`A combination of ${nodeKindListString} is allowed within union (${formatTypes([...objects, ...maps, ...records])}). These can be constructed from objects and can be ambiguous.`,
|
|
350
404
|
);
|
|
351
405
|
}
|
|
352
406
|
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
} from "../../core/index.js";
|
|
23
23
|
import { FieldKinds, valueSchemaAllows } from "../../feature-libraries/index.js";
|
|
24
24
|
import { cloneWithReplacements } from "../../util/index.js";
|
|
25
|
-
import {
|
|
25
|
+
import type { TreeNodeSchema } from "../core/index.js";
|
|
26
26
|
import {
|
|
27
27
|
booleanSchema,
|
|
28
28
|
handleSchema,
|
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
numberSchema,
|
|
31
31
|
stringSchema,
|
|
32
32
|
} from "../leafNodeSchema.js";
|
|
33
|
-
import { isObjectNodeSchema } from "../node-kinds/index.js";
|
|
33
|
+
import { isArrayNodeSchema, isObjectNodeSchema } from "../node-kinds/index.js";
|
|
34
34
|
import type { TreeLeafValue } from "../schemaTypes.js";
|
|
35
35
|
|
|
36
36
|
/**
|
|
@@ -106,7 +106,7 @@ export function customFromCursor<TChild>(
|
|
|
106
106
|
return reader.value;
|
|
107
107
|
default: {
|
|
108
108
|
assert(reader.value === undefined, 0xa54 /* out of schema: unexpected value */);
|
|
109
|
-
if (nodeSchema
|
|
109
|
+
if (isArrayNodeSchema(nodeSchema)) {
|
|
110
110
|
const fields = inCursorField(reader, EmptyKey, () =>
|
|
111
111
|
mapCursorField(reader, () => childHandler(reader, options, schema)),
|
|
112
112
|
);
|
|
@@ -67,6 +67,8 @@ export {
|
|
|
67
67
|
type JsonTreeSchema,
|
|
68
68
|
type JsonFieldSchema,
|
|
69
69
|
type JsonLeafSchemaType,
|
|
70
|
+
type JsonRecordNodeSchema,
|
|
71
|
+
type JsonStringKeyPatternProperties,
|
|
70
72
|
} from "./jsonSchema.js";
|
|
71
73
|
export type { TreeSchemaEncodingOptions } from "./getJsonSchema.js";
|
|
72
74
|
export { getJsonSchema } from "./getJsonSchema.js";
|
|
@@ -78,6 +80,7 @@ export type {
|
|
|
78
80
|
ArrayNodeCustomizableSchemaUnsafe,
|
|
79
81
|
MapNodeCustomizableSchemaUnsafe,
|
|
80
82
|
System_Unsafe,
|
|
83
|
+
TreeRecordNodeUnsafe,
|
|
81
84
|
} from "./typesUnsafe.js";
|
|
82
85
|
|
|
83
86
|
export {
|
|
@@ -116,6 +116,22 @@ export interface JsonArrayNodeSchema extends JsonNodeSchemaBase<NodeKind.Array,
|
|
|
116
116
|
readonly items: JsonFieldSchema;
|
|
117
117
|
}
|
|
118
118
|
|
|
119
|
+
/**
|
|
120
|
+
* Types allowed in map / record nodes.
|
|
121
|
+
*
|
|
122
|
+
* @see {@link https://json-schema.org/draft/2020-12/json-schema-core#name-patternproperties}.
|
|
123
|
+
*
|
|
124
|
+
* @sealed
|
|
125
|
+
* @alpha
|
|
126
|
+
*/
|
|
127
|
+
export interface JsonStringKeyPatternProperties {
|
|
128
|
+
/**
|
|
129
|
+
* This format allows for any string key that can appear in tree schema in a way that is JSON schema compatible,
|
|
130
|
+
* but restricts the value to the specified allowed types of the value to only those specified.
|
|
131
|
+
*/
|
|
132
|
+
"^.*$": JsonFieldSchema;
|
|
133
|
+
}
|
|
134
|
+
|
|
119
135
|
/**
|
|
120
136
|
* JSON Schema for a map node.
|
|
121
137
|
*
|
|
@@ -131,13 +147,23 @@ export interface JsonMapNodeSchema extends JsonNodeSchemaBase<NodeKind.Map, "obj
|
|
|
131
147
|
* Used to control the types of properties that can appear in the "object" representation of the map.
|
|
132
148
|
* @see {@link https://json-schema.org/draft/2020-12/json-schema-core#name-patternproperties}.
|
|
133
149
|
*/
|
|
134
|
-
readonly patternProperties:
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
150
|
+
readonly patternProperties: JsonStringKeyPatternProperties;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* JSON Schema for a record node.
|
|
155
|
+
*
|
|
156
|
+
* @see {@link https://json-schema.org/draft/2020-12/json-schema-core#name-instance-data-model}.
|
|
157
|
+
*
|
|
158
|
+
* @sealed
|
|
159
|
+
* @alpha
|
|
160
|
+
*/
|
|
161
|
+
export interface JsonRecordNodeSchema extends JsonNodeSchemaBase<NodeKind.Record, "object"> {
|
|
162
|
+
/**
|
|
163
|
+
* Used to control the types of properties that can appear in the "object" representation of the record.
|
|
164
|
+
* @see {@link https://json-schema.org/draft/2020-12/json-schema-core#name-patternproperties}.
|
|
165
|
+
*/
|
|
166
|
+
readonly patternProperties: JsonStringKeyPatternProperties;
|
|
141
167
|
}
|
|
142
168
|
|
|
143
169
|
/**
|
|
@@ -182,7 +208,8 @@ export type JsonNodeSchema =
|
|
|
182
208
|
| JsonLeafNodeSchema
|
|
183
209
|
| JsonMapNodeSchema
|
|
184
210
|
| JsonArrayNodeSchema
|
|
185
|
-
| JsonObjectNodeSchema
|
|
211
|
+
| JsonObjectNodeSchema
|
|
212
|
+
| JsonRecordNodeSchema;
|
|
186
213
|
|
|
187
214
|
/**
|
|
188
215
|
*{@link https://json-schema.org/draft/2020-12/json-schema-core | JSON Schema} representation of a {@link FieldSchema}.
|
|
@@ -776,16 +776,8 @@ export class SchemaFactory<
|
|
|
776
776
|
if (allowedTypes === undefined) {
|
|
777
777
|
const types = nameOrAllowedTypes as (T & TreeNodeSchema) | readonly TreeNodeSchema[];
|
|
778
778
|
const fullName = structuralName("Map", types);
|
|
779
|
-
return this.getStructuralType(
|
|
780
|
-
fullName,
|
|
781
|
-
types,
|
|
782
|
-
() =>
|
|
783
|
-
this.namedMap(
|
|
784
|
-
fullName as TName,
|
|
785
|
-
nameOrAllowedTypes as T,
|
|
786
|
-
false,
|
|
787
|
-
true,
|
|
788
|
-
) as TreeNodeSchema,
|
|
779
|
+
return this.getStructuralType(fullName, types, () =>
|
|
780
|
+
this.namedMap(fullName, nameOrAllowedTypes as T, false, true),
|
|
789
781
|
) as TreeNodeSchemaBoth<
|
|
790
782
|
string,
|
|
791
783
|
NodeKind.Map,
|
|
@@ -796,7 +788,7 @@ export class SchemaFactory<
|
|
|
796
788
|
undefined
|
|
797
789
|
>;
|
|
798
790
|
}
|
|
799
|
-
// To actually have type safety, assign to the type this method should return before implicitly
|
|
791
|
+
// To actually have type safety, assign to the type this method should return before implicitly up-casting when returning.
|
|
800
792
|
const out: TreeNodeSchemaBoth<
|
|
801
793
|
string,
|
|
802
794
|
NodeKind.Map,
|
|
@@ -895,7 +887,7 @@ export class SchemaFactory<
|
|
|
895
887
|
* ```
|
|
896
888
|
* @privateRemarks
|
|
897
889
|
* The name produced at the type level here is not as specific as it could be, however doing type level sorting and escaping is a real mess.
|
|
898
|
-
* There are cases where not having this full type provided will be less than ideal since TypeScript's structural types.
|
|
890
|
+
* There are cases where not having this full type provided will be less than ideal, since TypeScript's structural types will allow assignment between runtime incompatible types at compile time.
|
|
899
891
|
* For example attempts to narrow unions of structural arrays by name won't work.
|
|
900
892
|
* Planned future changes to move to a class based schema system as well as factor function based node construction should mostly avoid these issues,
|
|
901
893
|
* though there may still be some problematic cases even after that work is done.
|
|
@@ -997,7 +989,7 @@ export class SchemaFactory<
|
|
|
997
989
|
* @returns The structural {@link TreeNodeSchema} associated with the given name and types.
|
|
998
990
|
* @throws `UsageError` if a schema structurally named schema with the same name is cached in `structuralTypes` but had different input types.
|
|
999
991
|
*/
|
|
1000
|
-
|
|
992
|
+
protected getStructuralType(
|
|
1001
993
|
fullName: string,
|
|
1002
994
|
types: TreeNodeSchema | readonly TreeNodeSchema[],
|
|
1003
995
|
builder: () => TreeNodeSchema,
|