Current collected state Current
Observed since 20 Oct, 20:37 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
5no-schema
JSON Schema Filter/Validator
SchemaJSON Schema Filter/Validator
This package has moved to @5no/schema
@5no/schema requires Node version 8 or above.
npm install --save @5no/schema
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
}
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'
]
}
}
*/
MIT Licensed, Copyright (c) 2018 Aleksandr Sokol
Download counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
momentEnvironment{
"local_name": "moment",
"alias": false,
"peer_metadata": null
} | ^2.22.2 | runtime |
babel-cliEnvironment{
"local_name": "babel-cli",
"alias": false,
"peer_metadata": null
} | ^6.26.0 | development |
babel-coreEnvironment{
"local_name": "babel-core",
"alias": false,
"peer_metadata": null
} | ^6.26.0 | development |
babel-eslintEnvironment{
"local_name": "babel-eslint",
"alias": false,
"peer_metadata": null
} | ^10.0.1 | development |
babel-plugin-transform-runtimeEnvironment{
"local_name": "babel-plugin-transform-runtime",
"alias": false,
"peer_metadata": null
} | ^6.23.0 | development |
babel-polyfillEnvironment{
"local_name": "babel-polyfill",
"alias": false,
"peer_metadata": null
} | ^6.26.0 | development |
babel-preset-es2015Environment{
"local_name": "babel-preset-es2015",
"alias": false,
"peer_metadata": null
} | ^6.24.1 | development |
babel-preset-stage-0Environment{
"local_name": "babel-preset-stage-0",
"alias": false,
"peer_metadata": null
} | ^6.24.1 | development |
chaiEnvironment{
"local_name": "chai",
"alias": false,
"peer_metadata": null
} | ^4.2.0 | development |
eslintEnvironment{
"local_name": "eslint",
"alias": false,
"peer_metadata": null
} | ^4.0.0 | development |
eslint-config-standardEnvironment{
"local_name": "eslint-config-standard",
"alias": false,
"peer_metadata": null
} | ^11.0.0 | development |
eslint-plugin-importEnvironment{
"local_name": "eslint-plugin-import",
"alias": false,
"peer_metadata": null
} | ^2.8.0 | development |
eslint-plugin-nodeEnvironment{
"local_name": "eslint-plugin-node",
"alias": false,
"peer_metadata": null
} | ^7.0.1 | development |
eslint-plugin-promiseEnvironment{
"local_name": "eslint-plugin-promise",
"alias": false,
"peer_metadata": null
} | ^4.0.0 | development |
eslint-plugin-standardEnvironment{
"local_name": "eslint-plugin-standard",
"alias": false,
"peer_metadata": null
} | ^3.0.0 | development |
mochaEnvironment{
"local_name": "mocha",
"alias": false,
"peer_metadata": null
} | ^5.2.0 | development |
Source distribution
{
"integrity": "sha512-SXNSzEonuLlvDH+u5Mcn5XRRQ0QY3BWaQtZk4JXO4T2bEH1VRHdTagAiAmcRjxZzjE7Emmn3clgC3O4fpdoBqw==",
"shasum": "c07f9fd414507a123f90e190dafe11689e0dedfd",
"tarball": "https://registry.npmjs.org/5no-schema/-/5no-schema-1.0.5.tgz",
"fileCount": 41,
"unpackedSize": 156171,
"npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcsxtuCRA9TVsSAnZWagAALAAQAKSyrVYVnvSNCPISM2MB\n/CHoRtmSfenYuR09k0W4g9q+teHCso/nOq++Ohv0JqLaRa8qSP6uc8sSBdez\noQp0BYYm95b+pz62cif5BJelrmw6Bo9dTYAuMTwV5Uh4BIssgK2dJh8+21x7\nANUANxk4DWrJS9VgSb3f1n8r+d3JA3W2jrcrbp/s0SWw+s/sBNhGl0VjxtbN\nUZ+MFh370tuaRyEYs5pTemN+5WnKYTR2Aenu6ZlutvuWwYyvD9Plm6yfHeh5\n4oKp3iRal4slzXtIGLpTsVwZSD3uLiPLTL9VWNInkX8o7gZ+/Py33x256Tn4\ne5I2fxRy5ZeZzZdBgKIzI/yu8RA5Z3ClMdXJ9M+nAoeu4X8ZP8G3g0vPqpCO\nIUDzOexOx/VSZh6yT8OVVU9BAkOhDwZKfoCWbVFtkEoI2lk3bVmXBWe2G7+L\n0wprHY58Bspp2wAXL6dwG+vLj2w1P5mSl0+Cuqzv/JksqZWSE8fwQsE2qHA0\nPDOFTlmJ0bi1+D6dnqIjTWvw5foU1SlfK73/JdyTFePx8ibDV3gBG9FhISkB\np/Q6k0KPgwOWaFBM3FBE4GOVRVLnRGxpdVmK9/+VrtKldHWo1vpkpR7mlUEh\nqgEQp1NwHrhB0v5m/NkiL+IPc0jPRjYIXmeK+Z40n/Jv2sxpyriJxhgXacja\nagPs\r\n=prem\r\n-----END PGP SIGNATURE-----\r\n",
"signatures": [
{
"keyid": "SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA",
"sig": "MEUCIQCMpO462w54y+hiS7fcyq+pPInG0vVmzBmK+TsHt+DozQIgN9A6ciLqqnuELTkdjedDBXLSJ8Km8LDET8tNNajLT/8="
}
]
}Observed since 20 Oct, 20:37 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:db29491b6f2cd2b4516b107ca820f50a023eb15580c3536741a9baf2202dca39