@n4it/crud-request
Version:
NestJs CRUD for RESTful APIs - request query builder
104 lines • 4.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.sortOrdersList = exports.comparisonOperatorsList = exports.deprecatedComparisonOperatorsList = void 0;
exports.validateFields = validateFields;
exports.validateCondition = validateCondition;
exports.validateComparisonOperator = validateComparisonOperator;
exports.validateJoin = validateJoin;
exports.validateSort = validateSort;
exports.validateNumeric = validateNumeric;
exports.validateParamOption = validateParamOption;
exports.validateUUID = validateUUID;
const crud_util_1 = require("@n4it/crud-util");
const exceptions_1 = require("./exceptions");
const types_1 = require("./types");
exports.deprecatedComparisonOperatorsList = [
'eq',
'ne',
'gt',
'lt',
'gte',
'lte',
'starts',
'ends',
'cont',
'excl',
'in',
'notin',
'isnull',
'notnull',
'between',
'contArr',
'intersectsArr',
];
exports.comparisonOperatorsList = [
...exports.deprecatedComparisonOperatorsList,
...(0, crud_util_1.objKeys)(types_1.CondOperator).map((n) => types_1.CondOperator[n]),
];
exports.sortOrdersList = ['ASC', 'DESC'];
const sortOrdersListStr = exports.sortOrdersList.join();
function validateFields(fields) {
if (!(0, crud_util_1.isArrayStrings)(fields)) {
throw new exceptions_1.RequestQueryException('Invalid fields. Array of strings expected');
}
}
function validateCondition(val, cond, customOperators) {
if (!(0, crud_util_1.isObject)(val) || !(0, crud_util_1.isStringFull)(val.field)) {
throw new exceptions_1.RequestQueryException(`Invalid field type in ${cond} condition. String expected`);
}
validateComparisonOperator(val.operator, customOperators);
}
function validateComparisonOperator(operator, customOperators = {}) {
const extendedComparisonOperatorsList = [
...exports.comparisonOperatorsList,
...Object.keys(customOperators),
];
if (!extendedComparisonOperatorsList.includes(operator)) {
throw new exceptions_1.RequestQueryException(`Invalid comparison operator. ${extendedComparisonOperatorsList.join()} expected`);
}
}
function validateJoin(join) {
if (!(0, crud_util_1.isObject)(join) || !(0, crud_util_1.isStringFull)(join.field)) {
throw new exceptions_1.RequestQueryException('Invalid join field. String expected');
}
if (!(0, crud_util_1.isUndefined)(join.select) && !(0, crud_util_1.isArrayStrings)(join.select)) {
throw new exceptions_1.RequestQueryException('Invalid join select. Array of strings expected');
}
if (!(0, crud_util_1.isUndefined)(join.on) && !(0, crud_util_1.isArrayFull)(join.on)) {
join.on.map((condition) => validateCondition(condition, 'filter', {}));
}
}
function validateSort(sort) {
if (!(0, crud_util_1.isObject)(sort) || !(0, crud_util_1.isStringFull)(sort.field)) {
throw new exceptions_1.RequestQueryException('Invalid sort field. String expected');
}
if (!(0, crud_util_1.isEqual)(sort.order, exports.sortOrdersList[0]) &&
!(0, crud_util_1.isEqual)(sort.order, exports.sortOrdersList[1])) {
throw new exceptions_1.RequestQueryException(`Invalid sort order. ${sortOrdersListStr} expected`);
}
}
function validateNumeric(val, num) {
if (!(0, crud_util_1.isNumber)(val)) {
throw new exceptions_1.RequestQueryException(`Invalid ${num}. Number expected`);
}
}
function validateParamOption(options, name) {
if (!(0, crud_util_1.isObject)(options)) {
throw new exceptions_1.RequestQueryException(`Invalid param ${name}. Invalid crud options`);
}
const option = options[name];
if (option && option.disabled) {
return;
}
if (!(0, crud_util_1.isObject)(option) || (0, crud_util_1.isNil)(option.field) || (0, crud_util_1.isNil)(option.type)) {
throw new exceptions_1.RequestQueryException(`Invalid param option in Crud`);
}
}
function validateUUID(str, name) {
const uuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
const uuidV4 = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
if (!uuidV4.test(str) && !uuid.test(str)) {
throw new exceptions_1.RequestQueryException(`Invalid param ${name}. UUID string expected`);
}
}
//# sourceMappingURL=request-query.validator.js.map