fst-yup-to-json-schema
v1.0.10
Published
Library to convert Yup to JSON Schema with support condtional templates
Downloads
55
Maintainers
Readme
fst-yup-to-json-schema
Yup is a library to validate the JSON input
JSON-Schema is a schema specification for JSON
This library converts Yup
schema to JSON-Schema
Since the original repository does not support conditional formatting we have prepared a fork of the repository https://github.com/sodaru/yup-to-json-schema.git
Installation
npm i fst-yup-to-json-schema
Example usage in dev repository
Run npm run example
Usage
import yupToJsonSchema from "fst-yup-to-json-schema"
// see Yup Specification for more options to create yupSchema
import { object, string } from "yup";
import yupToJsonSchema, { initYupToJson } from "fst-yup-to-json-schema";
initYupToJson();
export const yupSchema = object({
personType: string().required().oneOf(["person", "foreigner", "proxy", "foreignerProxy"]),
atr: string().required().oneOf(["AA", "BB"]),
name: string().required(),
//@ts-ignore
birthDate: string().when("personType", {
is: () => "foreignerProxy" || "foreigner",
key: 'birthDate',
then: (schema) => schema.required(),
}),
//@ts-ignore
birthNumber: string().when("personType", {
is: () => "person" || "proxy",
key: 'birthNumber',
then: (schema) => schema.required(),
}),
//@ts-ignore
aa: string().when("atr", {
is: "AA",
key: 'aa',
then: (schema) => schema.required(),
}),
//@ts-ignore
bb: string().when("atr", {
is: "BB",
key: 'bb',
then: (schema) => schema.required(),
}),
})
const jsonSchema = yupToJsonSchema(yupSchema);
The sample will generate the following JSON
{
"type": "object",
"properties": {
"personType": {
"type": "string",
"enum": [
"person",
"foreigner",
"proxy",
"foreignerProxy"
]
},
"atr": {
"type": "string",
"enum": [
"AA",
"BB"
]
},
"name": {
"type": "string"
},
"birthDate": {
"type": "string"
},
"birthNumber": {
"type": "string"
},
"aa": {
"type": "string"
},
"bb": {
"type": "string"
}
},
"required": [
"personType",
"atr",
"name"
],
"allOf": [
{
"anyOf": [
{
"properties": {
"personType": {
"const": "foreignerProxy"
}
},
"required": [
"birthDate"
]
},
{
"properties": {
"personType": {
"const": "foreigner"
}
},
"required": [
"birthDate"
]
},
{
"properties": {
"personType": {
"const": "person"
}
},
"required": [
"birthNumber"
]
},
{
"properties": {
"personType": {
"const": "proxy"
}
},
"required": [
"birthNumber"
]
}
]
},
{
"anyOf": [
{
"properties": {
"atr": {
"const": "AA"
}
},
"required": [
"aa"
]
},
{
"properties": {
"atr": {
"const": "BB"
}
},
"required": [
"bb"
]
}
]
}
]
}