{"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"}