f50438e76f
* ui: Split up client/http and replace $.ajax This splits the client/http service more in the following ways: 1. Connections are now split out into its own service 2. The transport is now split out into its own service that returns a listener based http transport 3. Various string parsing/stringifying functions are now split out into utils * Remove jQuery from our production build * Move the coverage serving to the server.js file * Self review amends * Add X-Requested-With header * Move some files around, externalize some functions * Move connection tracking to use native Set * Ensure HTTP parsing doesn't encode headers In the future this will change to deal with all HTTP parsing in one place, hence the commented out METHOD_PARSING etc * Start to fix up integration tests to use requestParams
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('&');
|
|
};
|
|
}
|