UNPKG

fetch-http-message

Version:

Generate an http message string using the fetch API

1 lines 6.39 kB
{"version":3,"file":"fetch-http-message.cjs","sources":["../../src/blobToString.ts","../../src/index.ts"],"sourcesContent":["// 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","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) => {\n lines.push(`${key}: ${value}`);\n });\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"],"names":["blobToString","b","u","URL","createObjectURL","x","XMLHttpRequest","open","send","revokeObjectURL","responseText","hasHeaders","Headers","hasBlob","Blob","hasBuffer","Buffer","hasURLSearchParams","URLSearchParams","isRequest","object","fetchHttpMessage","input","init","undefined","Error","url","method","toUpperCase","lines","headers","forEach","value","key","push","body","indexOf","String","toString","join"],"mappings":";;;;;;EAAA;EACA,sBACe,SAASA,YAAAA,CAAaC,CAAO,EAAA;MAC1C,IAAMC,CAAAA,GAAIC,GAAAA,CAAIC,eAAe,CAACH,CAAAA,CAAAA;EAC9B,IAAA,IAAMI,IAAI,IAAIC,cAAAA,EAAAA;MACdD,CAAAA,CAAEE,IAAI,CAAC,KAAA,EAAOL,CAAAA,EAAG,KAAA,CAAA;EACjBG,IAAAA,CAAAA,CAAEG,IAAI,EAAA;EACNL,IAAAA,GAAAA,CAAIM,eAAe,CAACP,CAAAA,CAAAA;EACpB,IAAA,OAAOG,EAAEK,YAAY;EACvB,CAAA;;;;;;;;;;;;;ECHA,IAAMC,UAAAA,GAAa,OAAOC,OAAAA,KAAY,WAAA;EAGtC,IAAMC,OAAAA,GAAU,OAAOC,IAAAA,KAAS,WAAA;EAChC,IAAMC,SAAAA,GAAY,OAAOC,MAAAA,KAAW,WAAA;EACpC,IAAMC,kBAAAA,GAAqB,OAAOC,eAAAA,KAAoB,WAAA;EAkBtD,SAASC,UAAUC,MAAM,EAAA;EACvB,IAAA,OAAO,CAAA,OAAOA,MAAAA,KAAAA,WAAAA,GAAAA,WAAAA,GAAP,QAAA,CAAOA,OAAK,MAAM,QAAA;EAC3B;EAEA;;;;;;EAMC,IACc,SAASC,gBAAAA,CAAiBC,KAAkB,EAAEC,IAAkB,EAAA;EAC7E,IAAA,IAAID,KAAAA,KAAUE,SAAAA,EAAW,MAAM,IAAIC,KAAAA,CAAM,mBAAA,CAAA;MACzC,IAAIF,IAAAA,KAASC,SAAAA,EAAWD,IAAAA,GAAO,EAAC;MAEhC,IAAIG,GAAAA;EACJ,IAAA,IAAIP,SAAAA,CAAUG,KAAAA,CAAAA,EAAQI,GAAAA,GAAOJ,MAAkBI,GAAG;EAC7C,SAAA;UACHA,GAAAA,GAAMJ,KAAAA;EACNA,QAAAA,KAAAA,GAAQ,EAAC;EACX,IAAA;EAEA,IAAA,IAAIK,SAASJ,IAAAA,CAAKI,MAAM,IAAI,KAACL,CAAkBK,MAAM,IAAI,KAAA;EACzDA,IAAAA,MAAAA,GAASA,OAAOC,WAAW,EAAA;EAC3B,IAAA,IAAMC,KAAAA,GAAQ;EAAE,QAAA,EAAA,CAAYH,MAAAA,CAAVC,MAAAA,EAAO,GAAA,CAAA,CAAO,MAAA,CAAJD,GAAAA,EAAI,WAAA;EAAW,KAAA;EAE3C,IAAA,IAAMI,UAAUP,IAAAA,CAAKO,OAAO,IAAKR,MAAkBQ,OAAO;EAC1D,IAAA,IAAIA,YAAYN,SAAAA,EAAW;EACzB,8BACA,IAAIb,UAAAA,IAAcmB,WAAO,CAAPA,SAAmBlB,OAAAA,CAAAA,EAAS;cAC3CkB,OAAAA,CAAoBC,OAAO,CAAC,SAACC,KAAAA,EAAOC,GAAAA,EAAAA;EACnCJ,gBAAAA,KAAAA,CAAMK,IAAI,CAAE,GAAUF,MAAAA,CAARC,GAAAA,EAAI,MAAU,MAAA,CAAND,KAAAA,CAAAA,CAAAA;EACxB,YAAA,CAAA,CAAA;UACF,CAAA,MAAO;EACL,iCACA,IAAK,IAAMC,GAAAA,IAAOH,OAAAA,CAA0BD,MAAMK,IAAI,CAAC,EAAC,CAAUJ,OAARG,GAAAA,EAAI,IAAA,CAAA,CAAiB,MAAA,CAAbH,OAAO,CAACG,GAAAA,CAAI,CAAA,CAAA;EAChF,QAAA;EACF,IAAA;MAEA,IAAME,IAAAA,GAAOZ,KAAKY,IAAI;EACtB,IAAA,IAAIA,SAASX,SAAAA,EAAW;EACtB,QAAA,IAAI,CAAC;EAAC,YAAA,KAAA;EAAO,YAAA;WAAO,CAACY,OAAO,CAACT,MAAAA,CAAAA,EAAS,MAAM,IAAIF,KAAAA,CAAO,qCAA2C,MAAA,CAAPE,MAAAA,CAAAA,CAAAA;EAC3F,8BACA,IAAId,OAAAA,IAAWsB,WAAI,CAAJA,MAAgBrB,IAAAA,CAAAA,EAAM;EACnCe,YAAAA,KAAAA,CAAMK,IAAI,CAAC,EAAA,CAAA;cACXL,KAAAA,CAAMK,IAAI,CAAClC,YAAAA,CAAamC,IAAAA,CAAAA,CAAAA;UAC1B,CAAA,MAAO,yBAEL,OAAOA,SAAS,QAAA,IACZ,YAAJA,IAAAA,EAAgBE,MAAAA,CAAAA,0BAEftB,SAAAA,IAAaoB,WAAI,CAAJA,IAAAA,EAAgBnB,WAC7BC,kBAAAA,IAA0B,WAAA,CAAJkB,IAAAA,EAAgBjB,eAAAA,CAAAA,EAEvC;EACAW,YAAAA,KAAAA,CAAMK,IAAI,CAAC,EAAA,CAAA;cACXL,KAAAA,CAAMK,IAAI,CAACC,IAAAA,CAAKG,QAAQ,EAAA,CAAA;UAC1B,CAAA,MAAO,MAAM,IAAIb,KAAAA,CAAM,+CAAA,CAAA;EACzB,IAAA;MACA,OAAOI,KAAAA,CAAMU,IAAI,CAAC,MAAA,CAAA;EACpB;;;;;;;;"}