UNPKG

@cloudcome/utils-core

Version:
48 lines (47 loc) 1.41 kB
import { o as objectEach } from "./each.mjs"; import { isNullish, isArray, isString, isNumber, isBoolean, isDate } from "./type.mjs"; function qsParse(queryString, parser) { const sp = new globalThis.URLSearchParams(queryString.replace(/^.*\?/, "")); const qsObject = {}; for (const [key, val] of sp.entries()) { const valFinal = parser ? parser(val, key, qsObject) : val; if (isNullish(valFinal)) continue; if (Object.hasOwn(qsObject, key)) { if (!isArray(qsObject[key])) qsObject[key] = [qsObject[key]]; qsObject[key].push(val); } else { qsObject[key] = valFinal; } } return qsObject; } const defaultWriter = (val) => { if (isString(val)) return val; if (isNumber(val)) return String(val); if (isBoolean(val)) return val ? "true" : "false"; if (isDate(val)) return val.toISOString(); return null; }; function qsStringify(qsObject, stringify = defaultWriter) { const sp = new globalThis.URLSearchParams(); const pushPairs = (val, key) => { const valFinal = stringify(val, String(key), qsObject); if (isNullish(valFinal)) return; sp.append(key, valFinal); }; objectEach(qsObject, (val, key) => { if (isArray(val)) { for (const it of val) { pushPairs(it, key); } } else { pushPairs(val, key); } }); return sp.toString(); } export { qsParse, qsStringify }; //# sourceMappingURL=qs.mjs.map