UNPKG

@cloud-ru/ft-request-payload-transform

Version:
100 lines (99 loc) 3.73 kB
"use strict"; 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; }, {}); }