Cygni_backend/node_modules/@tsoa/cli/dist/utils/validatorUtils.js

241 lines
8.4 KiB
JavaScript

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getParameterValidators = getParameterValidators;
exports.getPropertyValidators = getPropertyValidators;
exports.shouldIncludeValidatorInSchema = shouldIncludeValidatorInSchema;
const validator_1 = __importDefault(require("validator"));
const exceptions_1 = require("./../metadataGeneration/exceptions");
const jsDocUtils_1 = require("./jsDocUtils");
function getParameterValidators(parameter, parameterName) {
if (!parameter.parent) {
return {};
}
const getCommentValue = (comment) => comment && comment.split(' ')[0];
const tags = (0, jsDocUtils_1.getJSDocTags)(parameter.parent, tag => {
const { comment } = tag;
return getParameterTagSupport().some(value => !!(0, jsDocUtils_1.commentToString)(comment) && value === tag.tagName.text && getCommentValue((0, jsDocUtils_1.commentToString)(comment)) === parameterName);
});
function getErrorMsg(comment, isValue = true) {
if (!comment) {
return;
}
if (isValue) {
const indexOf = comment.indexOf(' ');
if (indexOf > 0) {
return comment.substr(indexOf + 1);
}
else {
return undefined;
}
}
else {
return comment;
}
}
return tags.reduce((validateObj, tag) => {
if (!tag.comment) {
return validateObj;
}
const name = tag.tagName.text;
const comment = (0, jsDocUtils_1.commentToString)(tag.comment)
?.substring(((0, jsDocUtils_1.commentToString)(tag.comment)?.indexOf(' ') || -1) + 1)
.trim();
const value = getCommentValue(comment);
switch (name) {
case 'uniqueItems':
validateObj[name] = {
errorMsg: getErrorMsg(comment, false),
value: undefined,
};
break;
case 'minimum':
case 'maximum':
case 'minItems':
case 'maxItems':
case 'minLength':
case 'maxLength':
if (isNaN(value)) {
throw new exceptions_1.GenerateMetadataError(`${name} parameter use number.`);
}
validateObj[name] = {
errorMsg: getErrorMsg(comment),
value: Number(value),
};
break;
case 'minDate':
case 'maxDate':
if (!validator_1.default.isISO8601(String(value), { strict: true })) {
throw new exceptions_1.GenerateMetadataError(`${name} parameter use date format ISO 8601 ex. 2017-05-14, 2017-05-14T05:18Z`);
}
validateObj[name] = {
errorMsg: getErrorMsg(comment),
value,
};
break;
case 'pattern':
if (typeof value !== 'string') {
throw new exceptions_1.GenerateMetadataError(`${name} parameter use string.`);
}
validateObj[name] = {
errorMsg: getErrorMsg(comment),
value: removeSurroundingQuotes(value),
};
break;
default:
if (name.startsWith('is')) {
const errorMsg = getErrorMsg(comment, false);
if (errorMsg) {
validateObj[name] = {
errorMsg,
value: undefined,
};
}
}
break;
}
return validateObj;
}, {});
}
function getPropertyValidators(property) {
const tags = (0, jsDocUtils_1.getJSDocTags)(property, tag => {
return getParameterTagSupport().some(value => value === tag.tagName.text);
});
function getValue(comment) {
if (!comment) {
return;
}
return comment.split(' ')[0];
}
function getFullValue(comment) {
if (!comment) {
return;
}
if (comment.includes('\n')) {
return comment.split('\n')[0];
}
return comment;
}
function getErrorMsg(comment, isValue = true) {
if (!comment) {
return;
}
if (isValue) {
const indexOf = comment.indexOf(' ');
if (indexOf > 0) {
return comment.substr(indexOf + 1);
}
else {
return undefined;
}
}
else {
return comment;
}
}
return tags.reduce((validateObj, tag) => {
const name = tag.tagName.text;
const comment = tag.comment;
const value = getValue((0, jsDocUtils_1.commentToString)(comment));
switch (name) {
case 'uniqueItems':
validateObj[name] = {
errorMsg: getErrorMsg((0, jsDocUtils_1.commentToString)(comment), false),
value: undefined,
};
break;
case 'minimum':
case 'maximum':
case 'minItems':
case 'maxItems':
case 'minLength':
case 'maxLength':
if (isNaN(value)) {
throw new exceptions_1.GenerateMetadataError(`${name} parameter use number.`);
}
validateObj[name] = {
errorMsg: getErrorMsg((0, jsDocUtils_1.commentToString)(comment)),
value: Number(value),
};
break;
case 'minDate':
case 'maxDate':
if (!validator_1.default.isISO8601(String(value), { strict: true })) {
throw new exceptions_1.GenerateMetadataError(`${name} parameter use date format ISO 8601 ex. 2017-05-14, 2017-05-14T05:18Z`);
}
validateObj[name] = {
errorMsg: getErrorMsg((0, jsDocUtils_1.commentToString)(comment)),
value,
};
break;
case 'pattern':
if (typeof value !== 'string') {
throw new exceptions_1.GenerateMetadataError(`${name} parameter use string.`);
}
validateObj[name] = {
errorMsg: getErrorMsg((0, jsDocUtils_1.commentToString)(comment)),
value: removeSurroundingQuotes(value),
};
break;
case 'title':
if (typeof value !== 'string') {
throw new exceptions_1.GenerateMetadataError(`${name} parameter use string.`);
}
validateObj[name] = {
errorMsg: getErrorMsg((0, jsDocUtils_1.commentToString)(comment)),
value: getFullValue((0, jsDocUtils_1.commentToString)(comment)),
};
break;
default:
if (name.startsWith('is')) {
const errorMsg = getErrorMsg((0, jsDocUtils_1.commentToString)(comment), false);
if (errorMsg) {
validateObj[name] = {
errorMsg,
value: undefined,
};
}
}
break;
}
return validateObj;
}, {});
}
function getParameterTagSupport() {
return [
'isString',
'isBoolean',
'isInt',
'isLong',
'isFloat',
'isDouble',
'isDate',
'isDateTime',
'minItems',
'maxItems',
'uniqueItems',
'minLength',
'maxLength',
'pattern',
'minimum',
'maximum',
'minDate',
'maxDate',
'title',
];
}
function removeSurroundingQuotes(str) {
if (str.startsWith('`') && str.endsWith('`')) {
return str.substring(1, str.length - 1);
}
if (str.startsWith('```') && str.endsWith('```')) {
return str.substring(3, str.length - 3);
}
return str;
}
function shouldIncludeValidatorInSchema(key) {
return !key.startsWith('is') && key !== 'minDate' && key !== 'maxDate';
}
//# sourceMappingURL=validatorUtils.js.map