tsoa-custom-decorators
Version:
Build swagger-compliant REST APIs using TypeScript and Node
149 lines • 5.38 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var moment = require("moment");
var validator = require("validator");
var models = null;
function ValidateParam(schema, value, generatedModels, name) {
if (name === void 0) { name = ''; }
models = generatedModels;
if (value === undefined || value === null) {
if (schema.required) {
throw new InvalidRequestException("'" + name + "' is a required " + schema.in + " parameter.");
}
else {
return undefined;
}
}
switch (schema.typeName) {
case 'string':
return validateString(value, name);
case 'boolean':
return validateBool(value, name);
case 'integer':
case 'long':
return validateInt(value, name);
case 'float':
case 'double':
return validateFloat(value, name);
case 'enum':
return validateEnum(value, name, schema.enumMembers);
case 'array':
return validateArray(value, name, schema.array);
case 'date':
return validateDate(value, name);
case 'datetime':
return validateDateTime(value, name);
case 'buffer':
return validateBuffer(value, name);
default:
return validateModel(value, schema.typeName);
}
}
exports.ValidateParam = ValidateParam;
function validateInt(numberValue, name) {
if (!validator.isInt(numberValue + '')) {
throw new InvalidRequestException(name + ' should be a valid integer.');
}
return validator.toInt(numberValue + '', 10);
}
function validateFloat(numberValue, name) {
if (!validator.isFloat(numberValue + '')) {
throw new InvalidRequestException(name + ' should be a valid float.');
}
return validator.toFloat(numberValue + '');
}
function validateEnum(enumValue, name, members) {
if (!members) {
throw new InvalidRequestException(name + ' no member.');
}
var existValue = members.filter(function (m) { return m === enumValue; });
if (!existValue || !enumValue.length || !existValue.length) {
throw new InvalidRequestException(name + ' should be one of the following; ' + members.join(', '));
}
return existValue[0];
}
function validateDate(dateValue, name) {
var regEx = /^\d{4}-\d{2}-\d{2}$/;
if (!dateValue.match(regEx)) {
throw new InvalidRequestException(name + ' should be a valid date, i.e. YYYY-MM-DD');
}
return new Date(dateValue);
}
function validateDateTime(datetimeValue, name) {
var validatedDate = moment(datetimeValue, moment.ISO_8601, true);
if (!validatedDate.isValid()) {
throw new InvalidRequestException(name + ' should be a valid ISO 8601 date, i.e. YYYY-MM-DDTHH:mm:ss');
}
return validatedDate.toDate();
}
function validateString(stringValue, name) {
if (typeof stringValue !== 'string') {
throw new InvalidRequestException(name + ' should be a valid string.');
}
return stringValue.toString();
}
function validateBool(boolValue, typeName) {
if (boolValue === true || boolValue === false) {
return boolValue;
}
if (boolValue.toLowerCase() === 'true') {
return true;
}
if (boolValue.toLowerCase() === 'false') {
return false;
}
throw new InvalidRequestException(name + ' should be valid boolean value.');
}
function validateModel(modelValue, typeName) {
var modelDefinition = models[typeName];
if (modelDefinition) {
if (modelDefinition.properties) {
Object.keys(modelDefinition.properties).forEach(function (key) {
var property = modelDefinition.properties[key];
modelValue[key] = ValidateParam(property, modelValue[key], models, key);
});
}
if (modelDefinition.additionalProperties) {
Object.keys(modelValue).forEach(function (key) {
var validatedValue = null;
for (var _i = 0, _a = modelDefinition.additionalProperties; _i < _a.length; _i++) {
var additionalProperty = _a[_i];
try {
validatedValue = ValidateParam(additionalProperty, modelValue[key], models, key);
break;
}
catch (err) {
continue;
}
}
if (validatedValue) {
modelValue[key] = validatedValue;
}
else {
throw new Error("No matching model found in additionalProperties to validate " + key);
}
});
}
}
return modelValue;
}
function validateArray(arrayValue, name, schema) {
if (!schema) {
throw new InvalidRequestException(name + ' array invalid.');
}
return arrayValue.map(function (value) {
return ValidateParam(schema, value, models, undefined);
});
}
function validateBuffer(value, name) {
return new Buffer(value);
}
var InvalidRequestException = (function () {
function InvalidRequestException(message) {
this.message = message;
this.status = 400;
this.name = 'Invalid Request';
}
return InvalidRequestException;
}());
//# sourceMappingURL=templateHelpers.js.map