apeman-app-rest
Version:
apeman app to handle restful endpoint.
66 lines (58 loc) • 1.53 kB
JavaScript
/**
* @function validateDataType
* @returns {?Object} - Error if failed
*/
const apemanerror = require('apemanerror')
const ApErrorCodes = apemanerror.ApErrorCodes
const trigger = 'RestHandler'
/** @lends validateDataType */
function validateDataType (data, type) {
type = [].concat(type || [])
if (!data) {
return null
}
if (!data.type) {
return validateDataType.missingError('/data/type', type)
}
let valid = !!~type.indexOf(data.type)
if (valid) {
return null
} else {
return validateDataType.invalidError('/data/type', data.type, type)
}
}
Object.assign(validateDataType, {
bulk (data, type) {
type = [].concat(type || [])
let errors = data.map((data, i) =>
validateDataType(data, type)
).map((error, i) =>
error ? Object.assign(error, {
source: { pointer: `data/${i}/type` }
}) : null
).filter((error) => !!error)
return errors.length > 0 ? errors : null
},
missingError (pointer, available) {
let code = ApErrorCodes.RESOURCE_TYPE_MISSING_ERROR
return Object.assign(
apemanerror.newError(code, pointer, {
trigger,
scope: { available }
}),
{ status: '400' }
)
},
invalidError (pointer, given, allowed) {
let code = ApErrorCodes.RESOURCE_TYPE_INVALID_ERROR
return Object.assign(
apemanerror.newError(code, pointer, {
trigger,
scope: { given, allowed }
}),
{ status: '400' }
)
}
})
module.exports = validateDataType