Catalog npm
Back to packageRELEASE DETAILS

1.0.2

npm

5no-schema

JSON Schema Filter/Validator

filterfilteringjsonjson-schemajson-schema-filterjson-schema-filteringjson-schema-validationjson-schema-validatorjsonschemaschemavalidationvalidator
Published23 Nov 2018
Direct dependencies15
Transitive dependenciesNot calculated

README

Current package documentation

5no LogoSchema

JSON Schema Filter/Validator

This package has moved to @5no/schema

Install

@5no/schema requires Node version 8 or above.

npm install --save @5no/schema

Doc


const schemaJson = {
    [name]: {
      type: Number, // Number, String, Boolean, Date, Array, Object
      schema: {}, // Can describe object schema
      prefilled: false, // This value is optionally, indicate filling or not by default field
      defaultValue: null, // This value is optionally
      format: null, // This value only for Date and Number types
      required: true, // true or false
      filters: [], // Can be 'trim', 'upperCase', 'lowerCase' or custom functions
      validators: [], // Can be custom functions
    }
}

const customFilertOrValidator = ({name, type, value, defaultValue, previousResult, allValues, options}) {
  //name - name of field
  //type - type of field
  //value - current value
  //defaultValue - default value of field
  //previousResult - result previous validator
  //allValues - all data
  //options custom data
}
   

Examples

const Schema = require('@5no/schema')

const schemaJson = {
    id: {
      type: Number,
      defaultValue: null,
      required: true,
      format: '0',
      filters: [
                    ({value}) => {
                        return value + 1000
                    },
                    {
                        fn: ({value, options}) => {
                            return value + options.step
                        },
                        options: {
                            step: 100
                        }
                    }
                ],
        validators: [
                    ({value, previousResult}) => {
                        if (previousResult === true) {
                          if (value > 100) {
                            return 'Test Custom Error'
                          }
                          return true
                        }
                    },
                    async ({value}) => {
                        if (value > 100) {
                            return 'async Test Custom Error'
                        }
                        return true
                    },
                    {
                        fn: ({value, options}) => {
                            if (value > 100) {
                                return options.message
                            }
                            return true
                        },
                        options: {
                            message: 'Test Custom Error Options'
                        }
                    }
                ]
    },
    email: {
      type: String,
      defaultValue: null,
      required: true,
      filters: [
        'trim',
        'lowerCase'
      ]
    },
    active: {
      type: Boolean,
      prefilled: true,
      defaultValue: false
    },
    createdAt: {
      type: Date,
      defaultValue: null
    },
    updatedAt: {
      type: Date,
      defaultValue: null,
      format: 'YYYY-MM-DD'
    },
    informations: {
      type: Object,
      schema: {
        firstName: {
          type: String,
          required: true
        },
        lastName: {
          type: String,
          required: true
        }
      }
    },
    parameters: {
      type: Array,
      required: true,
      defaultValue: [],
      schema: {
        name: {
          type: String,
          required: true,
          filters: [
            'lowerCase',
          ],
        },
        value: {
          type: String,
          required: true,
        },
      },
    },
    address: {
      type: Object,
      defaultValue: null,
    },
    roles: {
      type: Array,
      defaultValue: null
    }
    status: {
      type: String,
      defaultValue: 'active',
      allowedValues: [
        'active',
        'banned'
      ],
    }
}

const schemaJsonData = {
    id: 123,
    email: 'test@test.test',
    active: true,
    createdAt: '2018-12-12 12:12:12',
    updatedAt: '2018-12-12 12:12:12',
    informations: {
        firstName: 'FirstName',
        lastName: 'LastNname'
    },
    parameters: [
      {
        name: 'FirstName',
        value: 'LastNname',
      },
      {
        name: 'FirstName1',
        value: 'LastNname1',
      },
    ],
    roles: [
      'customer',
      'admin'
    ],
    status: 'active'
}

const SchemaData = new Schema(schemaJson, false) // prefilledSchema - prefill object by default values of schema

const SchemaDataFiltered = await SchemaData.filter(schemaJsonData)

/*
{ 
  id: 1223,
  email: 'test@test.test',
  active: true,
  createdAt: 2018-12-12T10:12:12.000Z,
  updatedAt: '2018-12-12',
  informations: {
    firstName: 'FirstName',
    lastName: 'LastNname',
  },
  parameters: [
    {
      name: 'firstname',
      value: 'LastNname',
    },
    {
      name: 'firstname1',
      value: 'LastNname1',
    },
  ],
  roles: [ 'customer', 'admin' ],
  status: 'active'
}
*/

SchemaData.validate(SchemaDataFiltered).then(function(data) {
    //data = SchemaDataFiltered
    console.log(data)
}).catch(function(errors) {
    //errors = The object consist of fields which have errors

    /*
    { 
      email: [ 'email is required' ],
      informations:
      { 
        firstName: [ 'firstName is required' ],
        lastName: [ 'lastName is required' ] 
      },
      parameters: [
          'parameters is required',
        ],
    }
    */

    Object.keys(errors).forEach((name) => {
        for (let error of errors[name]) {
            console.log(error)
        }
    })
})


//prefilledSchema = true
const schemaJsonData = {
    id: 123,
    email: 'test@test.test',
    createdAt: '2018-12-12 12:12:12',
    updatedAt: '2018-12-12 12:12:12',
    informations: {
        firstName: 'FirstName',
        lastName: 'LastNname'
    },
    parameters: [
      {
        name: 'FirstName',
        value: 'LastNname',
      },
      {
        name: 'FirstName1',
        value: 'LastNname1',
      },
    ],
    roles: [
      'customer',
      'admin'
    ],
    status: 'active'
}

const SchemaData = new Schema(schemaJson, true) // prefilledSchema - prefill object by default values of schema

const SchemaDataFiltered = await SchemaData.filter(schemaJsonData)

/*
{ 
  id: 1223,
  email: 'test@test.test',
  active: false,
  createdAt: 2018-12-12T10:12:12.000Z,
  updatedAt: '2018-12-12',
  address: null,
  informations: { 
    firstName: 'FirstName', 
    lastName: 'LastNname' 
  },
  parameters: [
    {
      name: 'firstname',
      value: 'LastNname',
    },
    {
      name: 'firstname1',
      value: 'LastNname1',
    },
  ],
  roles: [ 'customer', 'admin' ],
  status: 'active'
}
*/


const SchemaDataJsonOptions = SchemaData.json()

/*
{
    id: {
      type: "number",
      defaultValue: null,
      required: true
    },
    email: {
      type: "string",
      defaultValue: null,
      required: true
    },
    active: {
      type: "boolean",
      defaultValue: false,
      required: false
    },
    createdAt: {
      type: "date",
      defaultValue: null,
      required: false
    },
    updatedAt: {
      type: "date",
      defaultValue: null,
      format: "YYYY-MM-DD",
      required: false
    },
    informations: {
      type: "object",
      required: false,
      schema: {
        firstName: {
          type: "string",
          required: true
        },
        lastName: {
          type: "string",
          required: true
        }
      }
    },
    parameters: {
      type: 'array',
      defaultValue: [],
      required: true,
      schema: {
        name: {
          type: 'string',
          required: true,
        },
        value: {
          type: 'string',
          required: true,
        },
      },
    },
    address: {
      type: "object",
      defaultValue: null,
      required: false
    },
    roles: {
      type: "array",
      defaultValue: null,
      required: false
    },
    status: {
      type: "string",
      defaultValue: null,
      required: false,
      allowedValues: [
        'active',
        'banned'
      ]
    }
}
*/
   

License

MIT Licensed, Copyright (c) 2018 Aleksandr Sokol

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 15

Native requirements
15 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
babel-cli
Environment
{
  "local_name": "babel-cli",
  "alias": false,
  "peer_metadata": null
}
^6.26.0development
babel-core
Environment
{
  "local_name": "babel-core",
  "alias": false,
  "peer_metadata": null
}
^6.26.0development
babel-eslint
Environment
{
  "local_name": "babel-eslint",
  "alias": false,
  "peer_metadata": null
}
^10.0.1development
babel-plugin-transform-runtime
Environment
{
  "local_name": "babel-plugin-transform-runtime",
  "alias": false,
  "peer_metadata": null
}
^6.23.0development
babel-polyfill
Environment
{
  "local_name": "babel-polyfill",
  "alias": false,
  "peer_metadata": null
}
^6.26.0development
babel-preset-es2015
Environment
{
  "local_name": "babel-preset-es2015",
  "alias": false,
  "peer_metadata": null
}
^6.24.1development
babel-preset-stage-0
Environment
{
  "local_name": "babel-preset-stage-0",
  "alias": false,
  "peer_metadata": null
}
^6.24.1development
chai
Environment
{
  "local_name": "chai",
  "alias": false,
  "peer_metadata": null
}
^4.2.0development
eslint
Environment
{
  "local_name": "eslint",
  "alias": false,
  "peer_metadata": null
}
^4.0.0development
eslint-config-standard
Environment
{
  "local_name": "eslint-config-standard",
  "alias": false,
  "peer_metadata": null
}
^11.0.0development
eslint-plugin-import
Environment
{
  "local_name": "eslint-plugin-import",
  "alias": false,
  "peer_metadata": null
}
^2.8.0development
eslint-plugin-node
Environment
{
  "local_name": "eslint-plugin-node",
  "alias": false,
  "peer_metadata": null
}
^7.0.1development
eslint-plugin-promise
Environment
{
  "local_name": "eslint-plugin-promise",
  "alias": false,
  "peer_metadata": null
}
^4.0.0development
eslint-plugin-standard
Environment
{
  "local_name": "eslint-plugin-standard",
  "alias": false,
  "peer_metadata": null
}
^3.0.0development
mocha
Environment
{
  "local_name": "mocha",
  "alias": false,
  "peer_metadata": null
}
^5.2.0development

Distribution files

1 collected
Distribution 1

Source distribution

Source file
Checksums from source
{
  "integrity": "sha512-HEUs/QNjeW4/k8fYoWk5+qQWmCxE+naDDHPS/mHlPz6v3hE3nerq7FrDjDacND26Z1Yy2nSZuv4yKRo+ndrEwQ==",
  "shasum": "b7a1958b60baf541bfa02f34208dc8557f2fb5d7",
  "tarball": "https://registry.npmjs.org/5no-schema/-/5no-schema-1.0.2.tgz",
  "fileCount": 37,
  "unpackedSize": 180624,
  "npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb9/X8CRA9TVsSAnZWagAACYYP/RzPP2f3qi/i1CB0/N21\nI7mi2Ec7Jb8sUuZpAeDK93l5TxDp0M550LjjW6A9SKEPnWS5PUYK95+IChcf\ns/4ccI6SLYCqGjiYcw9K7W55WJ2j5g/O+bSYPd6/LoEOjQTqw4Zbkeuz7WDa\ntutnvftx6hn1vS+K8ZBAjq3iE9uIWJLSRIIysscu0fAvQfitg4WYCJtVu2lW\nKUfn5/sH0410i36qMN9Eg8QEUZcMOTjMS0Kkm+bYuWFqiNzWoGBiNGmIbQML\nzvL+1R+Iy1cMInEtO+NXpae+e8ZmK7ZhoqTeWlQ1WmS/+Xd2edrQ9PeBiJGF\nZjDX6QMTTF6HAi+xZVm2mWHMEbXCkctMLSbVuY0gx7sww2ASD0AwDvmHC9L0\nqfKlpA10MWVoyR9tQjWHsOUTzwXDvXvCMiF5MmjBk0oMPTFxQ93Wvw1AJauV\n2qS6w8Dwrscud81ihxdjhpDC/zw0cjNOiXx2jbmtBw0WAaJ19Pi9RjkBsA0D\nHLl6Xn0VmXb3HCGSoHGgTWw7Pva30qdJ8v4DFsF0WUOOZN+YzSP4bsH6zzsf\nd/Pop0XmNsZEBqsZQhBPS2qCH2hPpZRroikUVhly8zyF+OHpz6ah4SlrhwhO\nXrd0+g6Sacv8ADS+Vz6wUkdz6rZxIMOTA53ncPatAA2l+QiY4vnKHkdicHq+\n5P8z\r\n=e1QK\r\n-----END PGP SIGNATURE-----\r\n",
  "signatures": [
    {
      "keyid": "SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA",
      "sig": "MEQCIDfgtz+0ksZKr2SNvo5YmPkaXkMHrmXtQZNr8ObldrZwAiBBYyb9CB0bEcOeY9Nk4blotViViGh238twV27ZvrIBag=="
    }
  ]
}

Repository

PENDING
reb2020/5no-schema

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 20:37 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:c9f04536b2d9ff78311bf0cf25844dd8a9fc0a352cdfd53e6ce271ddd9a969a5

Other collected versions

1.2.32 Jan1.2.219 Dec1.2.122 Nov1.2.029 Aug1.1.931 Jul1.1.831 JulView all collected versions →