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