nhb-toolbox
Version:
A versatile collection of smart, efficient, and reusable utility functions, classes and types for everyday development needs.
62 lines (61 loc) • 2.64 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateQueryParams = generateQueryParams;
exports.getQueryParams = getQueryParams;
exports.updateQueryParam = updateQueryParam;
exports.parseQueryString = parseQueryString;
exports.parseQueryStringLiteral = parseQueryStringLiteral;
const primitives_1 = require("../guards/primitives");
const objectify_1 = require("../object/objectify");
const sanitize_1 = require("../object/sanitize");
const index_1 = require("../utils/index");
function generateQueryParams(params = {}) {
const flattenedParams = (0, objectify_1.flattenObjectKeyValue)(params);
const queryParams = Object.entries(flattenedParams)
?.filter(([_, value]) => value != null && !((0, primitives_1.isString)(value) && value?.trim() === ''))
?.flatMap(([key, value]) => Array.isArray(value)
? value
?.filter((v) => v != null && !((0, primitives_1.isString)(v) && v.trim() === ''))
?.map((v) => `${encodeURIComponent(key)}=${encodeURIComponent(String(v))}`)
: `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`)
.join('&');
return queryParams ? `?${queryParams}` : '';
}
function getQueryParams() {
return Object.fromEntries(new URLSearchParams(window?.location?.search));
}
function updateQueryParam(key, value) {
const url = new URL(window.location.href);
url.searchParams.set(key, value);
window.history.replaceState({}, '', url?.toString());
}
function parseQueryString(query, parsePrimitives = true) {
const params = new URLSearchParams(query.startsWith('?') ? query.slice(1) : query);
const entries = {};
for (const [key, value] of params.entries()) {
if (key in entries) {
const current = entries[key];
const array = Array.isArray(current) ? [...current, value] : [current, value];
entries[key] = parsePrimitives ? (0, index_1.deepParsePrimitives)(array) : array;
}
else {
entries[key] = value;
}
}
return (parsePrimitives ? (0, sanitize_1.parseObjectValues)(entries) : entries);
}
function parseQueryStringLiteral(query) {
const params = new URLSearchParams(query.startsWith('?') ? query.slice(1) : query);
const entries = {};
for (const [key, value] of params.entries()) {
if (key in entries) {
const current = entries[key];
const array = Array.isArray(current) ? [...current, value] : [current, value];
entries[key] = array;
}
else {
entries[key] = value;
}
}
return entries;
}