json-joi-converter
    TypeScript icon, indicating that this package has built-in type declarations

    17.2.1-f • Public • Published

    Json Joi

    Build Status Node version required Latest Stable Version

    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!

    Installation

    npm install json-joi-converter

    Usage

    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)));
    

    Joi Reference & Functions

    {
      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
      }))
    })

    Joi RegExp

    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\\/');

    Joi Replace

    {
      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")

    Install

    npm i json-joi-converter

    DownloadsWeekly Downloads

    57

    Version

    17.2.1-f

    License

    MIT

    Unpacked Size

    95 kB

    Total Files

    31

    Last publish

    Collaborators

    • siavashg87