// From github.com/domchristie/humps/issues/51#issuecomment-425113505 /* eslint-disable complexity */ /* eslint-disable max-statements */ import { camelize, decamelize } from ‘humps’;

export type objectToConvert = File | FormData | Blob | Record<string, unknown> | Array<objectToConvert>;

function convertKeys(

object: objectToConvert,
conversion: 'camelize' | 'decamelize',

): objectToConvert {

const converter = {
  camelize,
  decamelize,
};
if (object && !(object instanceof File) && !(object instanceof Blob)) {
  if (object instanceof Array) {
    return object.map((item: objectToConvert) => convertKeys(item, conversion));
  }
  if (object instanceof FormData) {
    const formData = new FormData();
    for (const [key, value] of object.entries()) {
      formData.append(converter[conversion](key), value);
    }

    return formData;
  }
  if (typeof object === 'object') {
    return Object.keys(object).reduce((acc, next) => ({
      ...acc,
      [converter[conversion](next)]: convertKeys(object[next] as objectToConvert, conversion),
    }), {});
  }
}

return object;

}

export { convertKeys };