function serialize(value) {
const type = typeof value;
const json = JSON.stringify;
if(type === 'function') {
return value.toString();
}
if(type === 'object') {
if(value === null) {
return json(value);
}
if(value instanceof RegExp) {
return value.toString();
}
if(Array.isArray(value)) {
return '[' + value.map(serialize).join(',') + ']';
}
const body = Object.keys(value).map(name => json(name) + ':' + serialize(value[name]));
return '{' + body.join(',') + '}';
}
if(type === 'undefined') {
return type;
}
return json(value);
}