UNPKG

thingy-schema-validate

Version:

JSON schema validation for the thingy ecosystem - more primitive and simple than real JSON schemas.

302 lines (258 loc) 6.8 kB
// Generated by CoffeeScript 2.7.0 //########################################################### // types Enumeration var assertionFunctions, c, hexChars, hexMap, j, len; export var NUMBER = 0; export var STRING = 1; export var STRINGHEX = 2; export var STRINGHEX32 = 3; export var STRINGHEX64 = 4; export var STRINGHEX128 = 5; export var BOOLEAN = 6; export var ARRAY = 7; export var OBJECT = 8; export var NONNULLOBJECT = 9; export var NUMBERORNULL = 10; export var STRINGORNULL = 11; export var STRINGHEXORNULL = 12; export var STRINGHEX32ORNULL = 13; export var STRINGHEX64ORNULL = 14; export var STRINGHEX128ORNULL = 15; export var BOOLEANORNULL = 16; export var ARRAYORNULL = 17; //########################################################### assertionFunctions = new Array(18); //########################################################### //region hexHelpers hexChars = "0123456789abcdefABCDEF"; hexMap = {}; for (j = 0, len = hexChars.length; j < len; j++) { c = hexChars[j]; hexMap[c] = true; } //endregion //########################################################### //region all Assertion Functions assertionFunctions[NUMBER] = function(arg) { if (typeof arg !== "number") { throw new Error("Not a number!"); } }; assertionFunctions[STRING] = function(arg) { if (typeof arg !== "string") { throw new Error("Not a string!"); } }; assertionFunctions[STRINGHEX] = function(arg) { var k, len1; if (typeof arg !== "string") { throw new Error("Not a string!"); } for (k = 0, len1 = arg.length; k < len1; k++) { c = arg[k]; if (hexMap[c] == null) { throw new Error("Not a HexString!"); } } }; assertionFunctions[STRINGHEX32] = function(arg) { var k, len1; if (typeof arg !== "string") { throw new Error("Not a string!"); } for (k = 0, len1 = arg.length; k < len1; k++) { c = arg[k]; if (hexMap[c] == null) { throw new Error("Not a HexString!"); } } if (arg.length !== 32) { throw new Error("HexString length was not 32 characters!"); } }; assertionFunctions[STRINGHEX64] = function(arg) { var k, len1; if (typeof arg !== "string") { throw new Error("Not a string!"); } for (k = 0, len1 = arg.length; k < len1; k++) { c = arg[k]; if (hexMap[c] == null) { throw new Error("Not a HexString!"); } } if (arg.length !== 64) { throw new Error("HexString length was not 64 characters!"); } }; assertionFunctions[STRINGHEX128] = function(arg) { var k, len1; if (typeof arg !== "string") { throw new Error("Not a string!"); } for (k = 0, len1 = arg.length; k < len1; k++) { c = arg[k]; if (hexMap[c] == null) { throw new Error("Not a HexString!"); } } if (arg.length !== 128) { throw new Error("HexString length was not 128 characters!"); } }; assertionFunctions[BOOLEAN] = function(arg) { if (typeof arg !== "boolean") { throw new Error("Not a boolean!"); } }; assertionFunctions[ARRAY] = function(arg) { if (!Array.isArray(arg)) { throw new Error("Not an array!"); } }; assertionFunctions[OBJECT] = function(arg) { if (typeof arg !== "object") { throw new Error("Not an Object!"); } }; assertionFunctions[NONNULLOBJECT] = function(arg) { if (arg === null) { throw new Error("Is null!"); } if (typeof arg !== "object") { throw new Error("Not an Object!"); } }; assertionFunctions[NUMBERORNULL] = function(arg) { if (arg === null) { return; } if (typeof arg !== "number") { throw new Error("Neither a number nor null!"); } }; assertionFunctions[STRINGORNULL] = function(arg) { if (arg === null) { return; } if (typeof arg !== "string") { throw new Error("Not a string!"); } }; assertionFunctions[STRINGHEXORNULL] = function(arg) { var k, len1; if (arg === null) { return; } if (typeof arg !== "string") { throw new Error("Not a string!"); } for (k = 0, len1 = arg.length; k < len1; k++) { c = arg[k]; if (hexMap[c] == null) { throw new Error("Not a HexString!"); } } }; assertionFunctions[STRINGHEX32ORNULL] = function(arg) { var k, len1; if (arg === null) { return; } if (typeof arg !== "string") { throw new Error("Not a string!"); } for (k = 0, len1 = arg.length; k < len1; k++) { c = arg[k]; if (hexMap[c] == null) { throw new Error("Not a HexString!"); } } if (arg.length !== 32) { throw new Error("HexString length was not 32 characters!"); } }; assertionFunctions[STRINGHEX64ORNULL] = function(arg) { var k, len1; if (arg === null) { return; } if (typeof arg !== "string") { throw new Error("Not a string!"); } for (k = 0, len1 = arg.length; k < len1; k++) { c = arg[k]; if (hexMap[c] == null) { throw new Error("Not a HexString!"); } } if (arg.length !== 64) { throw new Error("HexString length was not 64 characters!"); } }; assertionFunctions[STRINGHEX128ORNULL] = function(arg) { var k, len1; if (arg === null) { return; } if (typeof arg !== "string") { throw new Error("Not a string!"); } for (k = 0, len1 = arg.length; k < len1; k++) { c = arg[k]; if (hexMap[c] == null) { throw new Error("Not a HexString!"); } } if (arg.length !== 128) { throw new Error("HexString length was not 128 characters!"); } }; assertionFunctions[BOOLEANORNULL] = function(arg) { if (arg === null) { return; } if (typeof arg !== "boolean") { throw new Error("Not a boolean!"); } }; assertionFunctions[ARRAYORNULL] = function(arg) { if (arg === null) { return; } if (!Array.isArray(arg)) { throw new Error("Not an array!"); } }; //endregion //########################################################### export var validate = function(obj, schema) { var arg, argKeys, err, i, k, key, label, len1, objKeys, type; if (schema == null) { throw new Error("No schema provided!"); } if (obj == null) { throw new Error("No Object to validate!"); } objKeys = Object.keys(obj); argKeys = Object.keys(schema); if (objKeys.length !== argKeys.length) { throw new Error(`The Number of parameters in the obj, did not match the expected number. Expected: ${argKeys.length} Present: ${objKeys.length} `); } for (i = k = 0, len1 = objKeys.length; k < len1; i = ++k) { key = objKeys[i]; if (key !== argKeys[i]) { throw new Error(`Parameter @ index: ${i} had wrong key! expected: '${argKeys[i]}' detected: '${key}'`); } } for (label in obj) { arg = obj[label]; type = schema[label]; try { assertionFunctions[type](arg); } catch (error) { err = error; throw new Error(`Unexpected format of parameter '${label}'! ${err.message}`); } } };