@cloud-ru/ft-request-payload-transform
Version:
100 lines (99 loc) • 3.73 kB
JavaScript
;
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.isValueNotEmpty = isValueNotEmpty;
exports.stringifyRequestParams = stringifyRequestParams;
exports.isPaginationKey = isPaginationKey;
exports.parseStringToValue = parseStringToValue;
exports.removeEmptyValuesFromObject = removeEmptyValuesFromObject;
const constants_1 = require("./constants");
function isStringArray(str) {
return constants_1.ARRAY_REG.test(str);
}
function stringifySortParams(sortParams) {
return sortParams.reduce((acc, cur, ind) => {
const delimiter = ind !== 0 && ind !== sortParams.length ? constants_1.DELIMITER : '';
const { field, direction } = cur;
return `${acc}${delimiter}${field}[${direction}]`;
}, '');
}
function stringifyFilterParams(filters) {
return filters.reduce((acc, cur, ind) => {
const delimiter = ind !== 0 && ind !== filters.length ? constants_1.DELIMITER : '';
const { field, condition, value } = cur;
let formattedValue = value;
if (constants_1.MULTI_VALUE_CONDITIONS.includes(condition) && Array.isArray(value)) {
formattedValue = `[${value.join(',')}]`;
}
return `${acc}${delimiter}${field}[${condition}]${formattedValue}`;
}, '');
}
function isValueNotEmpty(value) {
if (typeof value === 'number') {
return !isNaN(value);
}
if (typeof value === 'string' || Array.isArray(value)) {
return value.length !== 0;
}
return value !== undefined;
}
function isObject(value) {
return value !== null && typeof value === 'object' && !Array.isArray(value);
}
function stringifyRequestParams(params) {
var _a, _b;
const { pagination } = params, restParams = __rest(params, ["pagination"]);
const result = Object.assign(Object.assign({}, pagination), restParams);
if ((_a = params.filter) === null || _a === void 0 ? void 0 : _a.length) {
result.filter = stringifyFilterParams(params.filter);
}
if ((_b = params.sort) === null || _b === void 0 ? void 0 : _b.length) {
result.sort = stringifySortParams(params.sort);
}
const returnString = Object.entries(result).reduce((acc, [key, value]) => {
const delimiter = acc.length ? '&' : '';
return `${acc}${delimiter}${key}=${value}`;
}, '');
return encodeURIComponent(returnString);
}
function isPaginationKey(key) {
return Object.values(constants_1.PAGINATION_KEYS).includes(key);
}
function parseStringToValue(value) {
if (isStringArray(value)) {
try {
return JSON.parse(value);
}
catch (_a) {
return value
.replace(/[[\]]/g, '')
.split(',')
.map(v => v.trim());
}
}
const valueAsNumber = Number(value);
return !isNaN(valueAsNumber) ? valueAsNumber : value;
}
function removeEmptyValuesFromObject(obj) {
return Object.keys(obj).reduce((acc, cur) => {
const key = cur;
let value = obj[key];
if (isValueNotEmpty(value)) {
if (isObject(value)) {
value = removeEmptyValuesFromObject(value);
}
acc[key] = value;
}
return acc;
}, {});
}