diff --git a/src/api/validator.ts b/src/api/validator.ts new file mode 100644 index 000000000..d75fe6420 --- /dev/null +++ b/src/api/validator.ts @@ -0,0 +1,53 @@ +import * as mongo from 'mongodb'; + +type Type = 'id' | 'string' | 'number' | 'boolean' | 'array' | 'object'; + +export default (value: any, isRequired: boolean, type: Type): [T, string] => { + if (value === undefined || value === null) { + if (isRequired) { + return [null, 'is-required'] + } else { + return [null, null] + } + } + + switch (type) { + case 'id': + if (typeof value != 'string' || !mongo.ObjectID.isValid(value)) { + return [null, 'incorrect-id']; + } + break; + + case 'string': + if (typeof value != 'string') { + return [null, 'must-be-a-string']; + } + break; + + case 'number': + if (!Number.isFinite(value)) { + return [null, 'must-be-a-number']; + } + break; + + case 'boolean': + if (typeof value != 'boolean') { + return [null, 'must-be-an-boolean']; + } + break; + + case 'array': + if (!Array.isArray(value)) { + return [null, 'must-be-an-array']; + } + break; + + case 'object': + if (typeof value != 'object') { + return [null, 'must-be-an-onject']; + } + break; + } + + return [value, null]; +};