@rewiko/crud-request
Version:
NestJs CRUD for RESTful APIs - request query builder
99 lines • 4.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.validateUUID = exports.validateParamOption = exports.validateNumeric = exports.validateSort = exports.validateJoin = exports.validateComparisonOperator = exports.validateCondition = exports.validateFields = exports.sortOrdersList = exports.comparisonOperatorsList = exports.deprecatedComparisonOperatorsList = void 0;
const util_1 = require("@rewiko/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',
];
exports.comparisonOperatorsList = [
...exports.deprecatedComparisonOperatorsList,
...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 (!util_1.isArrayStrings(fields)) {
throw new exceptions_1.RequestQueryException('Invalid fields. Array of strings expected');
}
}
exports.validateFields = validateFields;
function validateCondition(val, cond, customOperators) {
if (!util_1.isObject(val) || !util_1.isStringFull(val.field)) {
throw new exceptions_1.RequestQueryException(`Invalid field type in ${cond} condition. String expected`);
}
validateComparisonOperator(val.operator, customOperators);
}
exports.validateCondition = validateCondition;
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`);
}
}
exports.validateComparisonOperator = validateComparisonOperator;
function validateJoin(join) {
if (!util_1.isObject(join) || !util_1.isStringFull(join.field)) {
throw new exceptions_1.RequestQueryException('Invalid join field. String expected');
}
if (!util_1.isUndefined(join.select) && !util_1.isArrayStrings(join.select)) {
throw new exceptions_1.RequestQueryException('Invalid join select. Array of strings expected');
}
}
exports.validateJoin = validateJoin;
function validateSort(sort) {
if (!util_1.isObject(sort) || !util_1.isStringFull(sort.field)) {
throw new exceptions_1.RequestQueryException('Invalid sort field. String expected');
}
if (!util_1.isEqual(sort.order, exports.sortOrdersList[0]) &&
!util_1.isEqual(sort.order, exports.sortOrdersList[1])) {
throw new exceptions_1.RequestQueryException(`Invalid sort order. ${sortOrdersListStr} expected`);
}
}
exports.validateSort = validateSort;
function validateNumeric(val, num) {
if (!util_1.isNumber(val)) {
throw new exceptions_1.RequestQueryException(`Invalid ${num}. Number expected`);
}
}
exports.validateNumeric = validateNumeric;
function validateParamOption(options, name) {
if (!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 (!util_1.isObject(option) || util_1.isNil(option.field) || util_1.isNil(option.type)) {
throw new exceptions_1.RequestQueryException(`Invalid param option in Crud`);
}
}
exports.validateParamOption = validateParamOption;
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`);
}
}
exports.validateUUID = validateUUID;
//# sourceMappingURL=request-query.validator.js.map