UNPKG

@cloudcome/utils-core

Version:
48 lines (47 loc) 1.51 kB
"use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const each = require("./each.cjs"); const type = require("./type.cjs"); 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 (type.isNullish(valFinal)) continue; if (Object.hasOwn(qsObject, key)) { if (!type.isArray(qsObject[key])) qsObject[key] = [qsObject[key]]; qsObject[key].push(val); } else { qsObject[key] = valFinal; } } return qsObject; } const defaultWriter = (val) => { if (type.isString(val)) return val; if (type.isNumber(val)) return String(val); if (type.isBoolean(val)) return val ? "true" : "false"; if (type.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 (type.isNullish(valFinal)) return; sp.append(key, valFinal); }; each.objectEach(qsObject, (val, key) => { if (type.isArray(val)) { for (const it of val) { pushPairs(it, key); } } else { pushPairs(val, key); } }); return sp.toString(); } exports.qsParse = qsParse; exports.qsStringify = qsStringify; //# sourceMappingURL=qs.cjs.map