UNPKG

fetch-http-message

Version:

Generate an http message string using the fetch API

1 lines 5.07 kB
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/http/fetch-http-message/src/index.ts"],"sourcesContent":["import blobToString from './blobToString';\n\nexport interface HeadersObject {\n [key: string]: string;\n}\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 // @ts-ignore\n for (const pair of (headers as Headers).entries()) lines.push(`${pair[0]}: ${pair[1]}`);\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":["fetchHttpMessage","hasHeaders","Headers","hasBlob","Blob","hasBuffer","Buffer","hasURLSearchParams","URLSearchParams","isRequest","object","input","init","undefined","Error","url","method","toUpperCase","lines","headers","entries","pair","push","key","body","indexOf","blobToString","String","toString","join"],"mappings":";;;;+BAmCA;;;;;;CAMC,GACD;;;eAAwBA;;;mEA1CC;;;;;;;;;;;;;;;;;AAQzB,IAAMC,aAAa,OAAOC,YAAY;AAGtC,IAAMC,UAAU,OAAOC,SAAS;AAChC,IAAMC,YAAY,OAAOC,WAAW;AACpC,IAAMC,qBAAqB,OAAOC,oBAAoB;AAkBtD,SAASC,UAAUC,MAAM;IACvB,OAAO,CAAA,OAAOA,uCAAP,SAAOA,OAAK,MAAM;AAC3B;AASe,SAASV,iBAAiBW,KAAkB,EAAEC,IAAkB;IAC7E,IAAID,UAAUE,WAAW,MAAM,IAAIC,MAAM;IACzC,IAAIF,SAASC,WAAWD,OAAO,CAAC;IAEhC,IAAIG;IACJ,IAAIN,UAAUE,QAAQI,MAAM,AAACJ,MAAkBI,GAAG;SAC7C;QACHA,MAAMJ;QACNA,QAAQ,CAAC;IACX;IAEA,IAAIK,SAASJ,KAAKI,MAAM,IAAI,AAACL,MAAkBK,MAAM,IAAI;IACzDA,SAASA,OAAOC,WAAW;IAC3B,IAAMC,QAAQ;QAAE,GAAYH,OAAVC,QAAO,KAAO,OAAJD,KAAI;KAAW;IAE3C,IAAMI,UAAUP,KAAKO,OAAO,IAAI,AAACR,MAAkBQ,OAAO;IAC1D,IAAIA,YAAYN,WAAW;QACzB,mBAAmB,GACnB,IAAIZ,cAAckB,AAAO,YAAPA,SAAmBjB,UAAS;gBAEvC,kCAAA,2BAAA;;gBADL,aAAa;gBACb,QAAK,YAAc,AAACiB,QAAoBC,OAAO,uBAA1C,SAAA,6BAAA,QAAA,yBAAA;oBAAA,IAAMC,OAAN;oBAA8CH,MAAMI,IAAI,CAAC,AAAC,GAAcD,OAAZA,IAAI,CAAC,EAAE,EAAC,MAAY,OAARA,IAAI,CAAC,EAAE;;;gBAA/E;gBAAA;;;yBAAA,6BAAA;wBAAA;;;wBAAA;8BAAA;;;;QACP,OAAO;YACL,kBAAkB,GAClB,IAAK,IAAME,OAAOJ,QAA0BD,MAAMI,IAAI,CAAC,AAAC,GAAUH,OAARI,KAAI,MAAiB,OAAbJ,OAAO,CAACI,IAAI;QAChF;IACF;IAEA,IAAMC,OAAOZ,KAAKY,IAAI;IACtB,IAAIA,SAASX,WAAW;QACtB,IAAI,CAAC;YAAC;YAAO;SAAO,CAACY,OAAO,CAACT,SAAS,MAAM,IAAIF,MAAM,AAAC,qCAA2C,OAAPE;QAC3F,mBAAmB,GACnB,IAAIb,WAAWqB,AAAI,YAAJA,MAAgBpB,OAAM;YACnCc,MAAMI,IAAI,CAAC;YACXJ,MAAMI,IAAI,CAACI,IAAAA,qBAAY,EAACF;QAC1B,OAAO,IACL,kBAAkB,GAClB,OAAOA,SAAS,YAChBA,AAAI,YAAJA,MAAgBG,WAChB,mBAAmB,GAClBtB,aAAamB,AAAI,YAAJA,MAAgBlB,WAC7BC,sBAAsBiB,AAAI,YAAJA,MAAgBhB,kBAEvC;YACAU,MAAMI,IAAI,CAAC;YACXJ,MAAMI,IAAI,CAACE,KAAKI,QAAQ;QAC1B,OAAO,MAAM,IAAId,MAAM;IACzB;IACA,OAAOI,MAAMW,IAAI,CAAC;AACpB"}