UNPKG

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

Version:
110 lines (109 loc) 4.01 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createRequestPayload = createRequestPayload; exports.parseQueryParamsString = parseQueryParamsString; const constants_1 = require("./constants"); __exportStar(require("./types"), exports); const helpers_1 = require("./helpers"); function createRequestPayload(params) { const result = params || {}; function toObject() { return (0, helpers_1.removeEmptyValuesFromObject)(result); } function toString({ encode } = { encode: true }) { return (0, helpers_1.stringifyRequestParams)(toObject(), { encode }); } if (params !== undefined) { return { toObject, toString, }; } return { filter(params) { if (!result.filter) { result.filter = []; } result.filter.push(params); return this; }, ordering(params) { if (!result.ordering) { result.ordering = []; } result.ordering.push(params); return this; }, pagination(params) { result.pagination = params; return this; }, search(value) { result.search = value; return this; }, toObject, toString, }; } function parseQueryParamsString(params) { if (!params.length) return undefined; const paramsArray = decodeURIComponent(params).split('&'); const result = paramsArray.reduce((acc, cur) => { const [param, value] = cur.split('='); if ((0, helpers_1.isValueNotEmpty)(value)) { if (param === constants_1.PARAM_KEYS.ordering) { const arrayValue = value.replace(/[[\]]/g, '').split(','); if (arrayValue.length) { acc[param] = arrayValue.map(ordering => { const direction = ordering.startsWith('-') ? '-' : '+'; const field = ordering.replace(direction, ''); return { field, direction: direction, }; }); } return acc; } if (param === constants_1.PARAM_KEYS.filter) { const matches = Array.from(value.matchAll(constants_1.EXTRACT_VALUES_REG), ([, f, c, v]) => [f, c, v]); if (matches.length) { acc[param] = matches .map(([field, condition, value]) => ({ field, condition: condition, value: (0, helpers_1.parseStringToValue)(value), })) .filter(({ value }) => value !== undefined); } return acc; } if ((0, helpers_1.isPaginationKey)(param)) { if (!acc.pagination) { acc.pagination = {}; } acc.pagination[param] = (0, helpers_1.parseStringToValue)(value); return acc; } acc[param] = (0, helpers_1.parseStringToValue)(value); } return acc; }, {}); return result; }