fst-yup-to-json-schema
TypeScript icon, indicating that this package has built-in type declarations

1.0.10 • Public • Published

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

Package Sidebar

Install

npm i fst-yup-to-json-schema

Weekly Downloads

4

Version

1.0.10

License

MIT License

Unpacked Size

55.1 kB

Total Files

47

Last publish

Collaborators

  • tajsn