import { getContentTypeMime } from '../utils/getContentTypeMimeType'; type UnionToIntersection = ( U extends unknown ? (k: U) => void : never ) extends (k: infer I) => void ? I : never; type LastOf = UnionToIntersection< T extends unknown ? () => T : never > extends () => infer R ? R : never; type Push = [...T, V]; export type UnionToTuple> = [T] extends [never] ? [] : Push>, L>; export const getContentType = (request: XMLHttpRequest): string => { const responseHeaders = request.responseHeaders; const responseType = request.responseType; const contentType = getContentTypeMime(responseHeaders || {}); if (contentType) { return contentType; } switch (responseType) { case 'arraybuffer': case 'blob': return 'application/octet-stream'; case 'text': case '': return 'text/plain'; case 'json': return 'application/json'; case 'document': return 'text/html'; } };