export function encode()

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);
}