in src/common/providers/https.ts [474:507]
export function encode(data: any): any {
if (data === null || typeof data === 'undefined') {
return null;
}
if (data instanceof Number) {
data = data.valueOf();
}
if (Number.isFinite(data)) {
// Any number in JS is safe to put directly in JSON and parse as a double
// without any loss of precision.
return data;
}
if (typeof data === 'boolean') {
return data;
}
if (typeof data === 'string') {
return data;
}
if (Array.isArray(data)) {
return data.map(encode);
}
if (typeof data === 'object' || typeof data === 'function') {
// Sadly we don't have Object.fromEntries in Node 10, so we can't use a single
// list comprehension
const obj: Record<string, any> = {};
for (const [k, v] of Object.entries(data)) {
obj[k] = encode(v);
}
return obj;
}
// If we got this far, the data is not encodable.
logger.error('Data cannot be encoded in JSON.', data);
throw new Error('Data cannot be encoded in JSON: ' + data);
}