Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

fst-yup-to-json-schema

sodaru17MIT License1.0.10TypeScript support: included

Library to convert Yup to JSON Schema with support condtional templates

yup, json, yup-schema, json-schema, opensource, library

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"
                    ]
                }
            ]
        }
    ]
}