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
JavaScript
// 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}`);
}
}
};