28 lines
872 B
JavaScript
28 lines
872 B
JavaScript
export default function(encode) {
|
|
return function stringify(obj, parent) {
|
|
return Object.entries(obj)
|
|
.reduce(function(prev, [key, value], i) {
|
|
// if the value is undefined do nothing
|
|
if (typeof value === 'undefined') {
|
|
return prev;
|
|
}
|
|
let prop = encode(key);
|
|
// if we have a parent, prefix the property with that
|
|
if (typeof parent !== 'undefined') {
|
|
prop = `${parent}[${prop}]`;
|
|
}
|
|
// if the value is null just print the prop
|
|
if (value === null) {
|
|
return prev.concat(prop);
|
|
}
|
|
// anything nested, recur
|
|
if (typeof value === 'object') {
|
|
return prev.concat(stringify(value, prop));
|
|
}
|
|
// anything else print prop=value
|
|
return prev.concat(`${prop}=${encode(value)}`);
|
|
}, [])
|
|
.join('&');
|
|
};
|
|
}
|