UNPKG

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
"use strict"; 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; }