UNPKG

tame-validator

Version:

Validator module for tame schema

76 lines (69 loc) 2.07 kB
'use strict' let mandatory = ['name']; let optional = ['Reference', 'widget', 'type', 'fields', 'schema', 'dependsOn', 'value']; let values = { dependsOn: /string/, fields: /object/, name: /string/, Reference: /string/, schema: /object/, type: /string/, value: /string|number/, }; let corelation = { fields: (schema, value) => { if(schema.hasOwnProperty('schema')) return 'keys "fields" and "schema" cannot exist at same level' for (let i = 0; i < schema.fields.length; i++) { let temp = validate(schema.fields[i]) if(temp) return temp } return false }, schema: (schema, value) => { if(schema.hasOwnProperty('fields')) return 'keys "fields" and "schema" cannot exist at same level' return validate(schema.schema) }, type: (schema, value) => { switch (value) { case 'Reference': if(!schema.hasOwnProperty('Reference')) return 'type Reference requires a key "Reference"' break; case undefined: if(!schema.hasOwnProperty('fields')) return 'type Reference requires a key "Reference"' break; } return false }, }; function validateKeys(schema) { let message = false mandatory.forEach((key) => { if (!schema.hasOwnProperty(key)) message = `manditory Key "${key}" is not defined` }) // all maditory have been defined Object.keys(schema).forEach((key) => { if(!(optional.indexOf(key) > -1 || mandatory.indexOf(key) > -1)) message = `Key name: "${key}" is not recognized` if (values[key] && !values[key].test(typeof(schema[key]))) message = `expected value for key "${key}" is "${values[key]}" but given ${typeof(schema[key])}` if(corelation[key]) message = corelation[key](schema, schema[key]) }) // all keys are valid and corelation satisfied return message } function validate(schema) { if(typeof(schema) === 'object') return validateKeys(schema) else return `expected schema object found ${typeof(schema)}` } module.exports = { validate };