tsoa
This commit is contained in:
241
node_modules/@tsoa/cli/dist/utils/validatorUtils.js
generated
vendored
Normal file
241
node_modules/@tsoa/cli/dist/utils/validatorUtils.js
generated
vendored
Normal file
@@ -0,0 +1,241 @@
|
||||
"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
|
||||
Reference in New Issue
Block a user