UNPKG

fetch-http-message

Version:

Generate an http message string using the fetch API

1 lines 5.03 kB
{"version":3,"file":"fetch-http-message.min.cjs","sources":["../../src/index.ts","../../src/blobToString.ts"],"sourcesContent":["import blobToString from './blobToString.ts';\n\nexport type HeadersObject = Record<string, string>;\n\n// https://github.com/node-fetch/node-fetch/blob/main/%40types/index.d.ts\nexport type HeadersInit = Headers | HeadersObject | Record<string, string> | Iterable<readonly [string, string]> | Iterable<Iterable<string>>;\nconst hasHeaders = typeof Headers !== 'undefined';\n\nexport type BodyInit = Blob | Buffer | URLSearchParams | string;\nconst hasBlob = typeof Blob !== 'undefined';\nconst hasBuffer = typeof Buffer !== 'undefined';\nconst hasURLSearchParams = typeof URLSearchParams !== 'undefined';\n\n// export type RequestRedirect = 'error' | 'follow' | 'manual';\nexport interface RequestInit {\n body?: BodyInit | null;\n headers?: HeadersInit;\n method?: string;\n // redirect?: RequestRedirect;\n}\n\nexport type RequestInfo = string | Request;\nexport interface Request {\n readonly headers: Headers | HeadersObject;\n readonly method: string;\n // readonly redirect: RequestRedirect;\n readonly url: string;\n}\n\nfunction isRequest(object) {\n return typeof object === 'object';\n}\n\n/**\n * Generate an http message string using the fetch API\n *\n * @param input Fetch input\n * @param init Fetch init\n * @returns The http message string\n */\nexport default function fetchHttpMessage(input: RequestInfo, init?: RequestInit): string {\n if (input === undefined) throw new Error('Input is expected');\n if (init === undefined) init = {};\n\n let url: string;\n if (isRequest(input)) url = (input as Request).url;\n else {\n url = input as string;\n input = {} as Request;\n }\n\n let method = init.method || (input as Request).method || 'GET';\n method = method.toUpperCase();\n const lines = [`${method} ${url} HTTP/1.1`];\n\n const headers = init.headers || (input as Request).headers;\n if (headers !== undefined) {\n /* c8 ignore start */\n if (hasHeaders && headers instanceof Headers) {\n (headers as Headers).forEach((value, key) => lines.push(`${key}: ${value}`));\n } else {\n /* c8 ignore stop */\n for (const key in headers as HeadersObject) lines.push(`${key}: ${headers[key]}`);\n }\n }\n\n const body = init.body;\n if (body !== undefined) {\n if (~['GET', 'HEAD'].indexOf(method)) throw new Error(`Option body not valid with method ${method}`);\n /* c8 ignore start */\n if (hasBlob && body instanceof Blob) {\n lines.push('');\n lines.push(blobToString(body));\n } else if (\n /* c8 ignore stop */\n typeof body === 'string' ||\n body instanceof String ||\n /* c8 ignore start */\n (hasBuffer && body instanceof Buffer) ||\n (hasURLSearchParams && body instanceof URLSearchParams)\n /* c8 ignore stop */\n ) {\n lines.push('');\n lines.push(body.toString());\n } else throw new Error('Option body should be convertible to a string');\n }\n return lines.join('\\r\\n');\n}\n","// https://stackoverflow.com/a/23024613/3150390\n/* c8 ignore start */\nexport default function blobToString(b: Blob): string {\n const u = URL.createObjectURL(b);\n const x = new XMLHttpRequest();\n x.open('GET', u, false);\n x.send();\n URL.revokeObjectURL(u);\n return x.responseText;\n}\n/* c8 ignore stop */\n"],"names":["hasHeaders","Headers","hasBlob","Blob","hasBuffer","Buffer","hasURLSearchParams","URLSearchParams","isRequest","object","input","init","undefined","Error","url","method","toUpperCase","lines","concat","headers","forEach","value","key","push","b","u","x","body","indexOf","URL","createObjectURL","XMLHttpRequest","open","send","revokeObjectURL","responseText","_instanceof","String","toString","join"],"mappings":"4WAMA,IAAMA,EAAgC,oBAAZC,QAGpBC,EAA0B,oBAATC,KACjBC,EAA8B,oBAAXC,OACnBC,EAAgD,oBAApBC,gBAkBlC,SAASC,EAAUC,GACjB,MAAyB,gBAAXA,IAAAA,EAAAA,eAAAA,+EAChB,QASe,SAA0BC,EAAoBC,GAC3D,QAAcC,IAAVF,EAAqB,MAAM,IAAIG,MAAM,qBAGzC,IAAIC,OAFSF,IAATD,IAAoBA,EAAO,CAAA,GAG3BH,EAAUE,GAAQI,EAAOJ,EAAkBI,KAE7CA,EAAMJ,EACNA,EAAQ,CAAA,GAGV,IAAIK,EAASJ,EAAKI,QAAUL,EAAmBK,QAAU,MACzDA,EAASA,EAAOC,cAChB,IAAMC,EAAQ,CAAE,GAAYH,OAAVC,EAAO,KAAOG,OAAJJ,EAAI,cAE1BK,EAAUR,EAAKQ,SAAYT,EAAkBS,QACnD,QAAgBP,IAAZO,EAEF,GAAInB,GAAcmB,EAAAA,EAAmBlB,SAClCkB,EAAoBC,QAAQ,SAACC,EAAOC,GAAQL,OAAAA,EAAMM,KAAM,GAAUF,OAARC,EAAI,MAAUJ,OAANG,WAGnE,IAAK,IAAMC,KAAOH,EAA0BF,EAAMM,KAAK,GAAWJ,OAARG,EAAI,MAAiBJ,OAAbC,EAAQG,KAI9E,IChEmCE,EAC7BC,EACAC,ED8DAC,EAAOhB,EAAKgB,KAClB,QAAaf,IAATe,EAAoB,CACtB,IAAK,CAAC,MAAO,QAAQC,QAAQb,GAAS,MAAM,IAAIF,MAAO,qCAA2CK,OAAPH,IAE3F,GAAIb,GAAWyB,EAAAA,EAAgBxB,MAC7Bc,EAAMM,KAAK,IACXN,EAAMM,MCtEyBC,EDsEPG,ECrEtBF,EAAII,IAAIC,gBAAgBN,IACxBE,EAAI,IAAIK,gBACZC,KAAK,MAAOP,GAAG,GACjBC,EAAEO,OACFJ,IAAIK,gBAAgBT,GACbC,EAAES,mBDiEA,MAEW,iBAATR,GACHS,EAAJT,EAAgBU,SAEfjC,GAAauB,EAAAA,EAAgBtB,SAC7BC,GAA0B8B,EAAJT,EAAgBpB,kBAKlC,MAAM,IAAIM,MAAM,iDAFrBI,EAAMM,KAAK,IACXN,EAAMM,KAAKI,EAAKW,WACK,CACzB,CACA,OAAOrB,EAAMsB,KAAK,OACpB"}