UNPKG

@n4it/crud-request

Version:

NestJs CRUD for RESTful APIs - request query builder

104 lines 4.36 kB
"use strict"; 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