@lytejs/query-string
Version:
A Query String Parser that actually works
52 lines (42 loc) • 1.42 kB
JavaScript
var stringify = function stringify(params) {
return Object.keys(params).map(function (k) {
var current = params[k];
if (current === undefined) return k + "=";
if (Array.isArray(current)) {
if (current.length === 0) return k + "=";
return current.map(function (param) {
return k + "[]=" + encodeURIComponent(typeof param === 'object' ? JSON.stringify(param) : param);
}).join('&');
}
return k + "=" + encodeURIComponent(typeof current === 'object' ? JSON.stringify(current) : current);
}).join('&');
};
var parse = function parse(query) {
if (query === void 0) {
query = '';
}
var trimQuery = query.replace(/^\?/, '');
var queries = trimQuery.split('&').map(function (query) {
return query.split('=');
});
var initial = {};
if (!trimQuery) return initial;
return queries.reduce(function (acc, query) {
if (!query[1] || !query[0]) return acc;
var decoded = decodeURIComponent(query[1]);
var finalValue = decoded;
if (decoded[0] === '{' || decoded[0] === '[') {
try {
finalValue = JSON.parse(decoded);
} catch (e) {}
}
if (query[0].endsWith('[]')) {
var _key = query[0].slice(0, -2);
acc[_key] = acc[_key] || [];
acc[_key].push(finalValue);
} else acc[query[0]] = finalValue;
return acc;
}, initial);
};
export { parse, stringify };
//# sourceMappingURL=index.js.map