Json-Joi is a powerfull TypeScript module that builds on top of Joi module. Converts Joi objects to json and vice versa, makes Joi objects from json.
From Joi description: "The most powerful schema description language and data validator for JavaScript."
See Joi API for documentation and api.
Json-Joi supports almost entire Joi API!
npm install json-joi-converter
import Joi, {fromJson, toJson, Schema} from 'json-joi-converter';
const json: Schema = {
type: "object",
properties: {
a: {
type: "number",
min: 100,
max: 1000,
required: true
}
}
};
// fromJson(json) is equal to following
const joi = Joi.object({
a: Joi.number().min(100).max(1000).required()
});
// VALID
assert.deepEqual(toJson(joi), toJson(fromJson(json)));
{
a: {
type: "number"
},
b: {
type: "number",
min: {
$ref: "a",
adjust: "value => value + 1"
}
}
}
// where adjust is a stringed function
// is equal to
Joi.object({
a: Joi.number(),
b: Joi.number.min(Joi.ref("a", {
adjust: value => value + 1
}))
})
let json: ObjectSchema = {
type: "object",
properties: {
a: {
type: "string",
pattern: "/a/"
},
b: {
type: "string",
regex: {$regex: "/a/", flags: "i"}
},
c: {
type: "string",
regex: {pattern: {$regex: "/a/"}}
}
}
};
const converted = (toJson(fromJson(json)) as any);
assert.equal(converted.properties?.a?.pattern?.regex?.$regex, '\\/a\\/');
assert.equal(converted.properties?.b?.pattern?.regex?.$regex, '\\/a\\/');
assert.equal(converted.properties?.b?.pattern?.regex?.flags, 'i');
assert.equal(converted.properties?.c?.pattern?.regex?.$regex, '\\/a\\/');
{
type: "string",
replace: {find: {$regex: "a", flags: "gi"}, replace: "b"}
}
// is equal to
Joi.string().replace(/a/gi, "b")
{
type: "string",
replace: [
{find: {$regex: "a", flags: "gi"}, replace: "b"},
{find: "a", replace: "b"}
]
}
// is equal to
Joi.string().replace(/a/gi, "b").replace("a", "b")