@cloudcome/utils-core
Version:
cloudcome core utils
48 lines (47 loc) • 1.41 kB
JavaScript
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