@cloud-ru/ft-request-payload-transform
Version:
105 lines (104 loc) • 3.66 kB
JavaScript
;
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() {
return (0, helpers_1.stringifyRequestParams)(toObject());
}
if (params !== undefined) {
return {
toObject,
toString,
};
}
return {
filter(params) {
if (!result.filter) {
result.filter = [];
}
result.filter.push(params);
return this;
},
sort(params) {
if (!result.sort) {
result.sort = [];
}
result.sort.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)) {
const matches = Array.from(value.matchAll(constants_1.EXTRACT_VALUES_REG), ([, f, c, v]) => [f, c, v]);
if (param === constants_1.PARAM_KEYS.sort) {
if (matches.length) {
acc[param] = matches.map(([field, direction]) => ({
field,
direction: direction,
}));
}
return acc;
}
if (param === constants_1.PARAM_KEYS.filter) {
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;
}