{"version":3,"sources":["../src/index.ts","../src/helpers/headers.ts","../src/helpers/reducer.ts","../src/helpers/code-builder.ts","../src/helpers/escape.ts","../src/targets/c/libcurl/client.ts","../src/targets/c/target.ts","../src/targets/clojure/clj_http/client.ts","../src/targets/clojure/target.ts","../src/targets/csharp/httpclient/client.ts","../src/targets/csharp/restsharp/client.ts","../src/targets/csharp/target.ts","../src/targets/go/native/client.ts","../src/targets/go/target.ts","../src/targets/http/http1.1/client.ts","../src/targets/http/target.ts","../src/targets/java/asynchttp/client.ts","../src/targets/java/nethttp/client.ts","../src/targets/java/okhttp/client.ts","../src/targets/java/unirest/client.ts","../src/targets/java/target.ts","../src/targets/javascript/axios/client.ts","../src/targets/javascript/fetch/client.ts","../src/targets/javascript/jquery/client.ts","../src/targets/javascript/xhr/client.ts","../src/targets/javascript/target.ts","../src/targets/json/native/client.ts","../src/targets/json/target.ts","../src/targets/kotlin/okhttp/client.ts","../src/targets/kotlin/target.ts","../src/targets/node/axios/client.ts","../src/targets/node/fetch/client.ts","../src/targets/node/native/client.ts","../src/targets/node/request/client.ts","../src/targets/node/unirest/client.ts","../src/targets/node/target.ts","../src/targets/objc/helpers.ts","../src/targets/objc/nsurlsession/client.ts","../src/targets/objc/target.ts","../src/targets/ocaml/cohttp/client.ts","../src/targets/ocaml/target.ts","../src/targets/php/helpers.ts","../src/targets/php/curl/client.ts","../src/targets/php/guzzle/client.ts","../src/targets/php/http1/client.ts","../src/targets/php/http2/client.ts","../src/targets/php/target.ts","../src/targets/powershell/common.ts","../src/targets/powershell/restmethod/client.ts","../src/targets/powershell/webrequest/client.ts","../src/targets/powershell/target.ts","../src/targets/python/helpers.ts","../src/targets/python/requests/client.ts","../src/targets/python/target.ts","../src/targets/r/httr/client.ts","../src/targets/r/target.ts","../src/targets/ruby/native/client.ts","../src/targets/ruby/target.ts","../src/helpers/shell.ts","../src/targets/shell/curl/client.ts","../src/targets/shell/httpie/client.ts","../src/targets/shell/wget/client.ts","../src/targets/shell/target.ts","../src/targets/swift/helpers.ts","../src/targets/swift/urlsession/client.ts","../src/targets/swift/target.ts","../src/targets/index.ts","../src/helpers/utils.ts"],"names":["c","params","supportedMethods","stringifyObject","native","okhttp","axios","fetch","unirest","escape","literalRepresentation","request","curl"],"mappings":"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","sourcesContent":["// eslint-disable-next-line import/order\nimport type { Request as NpmHarRequest, Param, PostDataCommon } from 'har-format';\nimport type { ReducedHelperObject } from './helpers/reducer.js';\nimport type { ClientId, TargetId } from './targets/index.js';\n// eslint-disable-next-line unicorn/prefer-node-protocol\nimport type { UrlWithParsedQuery } from 'url';\n\n// eslint-disable-next-line unicorn/prefer-node-protocol, node/no-deprecated-api\nimport { format as urlFormat, parse as urlParse } from 'url';\n\nimport { stringify as queryStringify } from 'qs';\n\nimport { getHeaderName } from './helpers/headers.js';\nimport { reducer } from './helpers/reducer.js';\nimport { targets } from './targets/index.js';\n\nexport { availableTargets, extname } from './helpers/utils.js';\nexport { addClientPlugin, addTarget, addTargetClient } from './targets/index.js';\n\n/** is this wrong?  yes.  according to the spec (http://www.softwareishard.com/blog/har-12-spec/#postData) it's technically wrong since `params` and `text` are (by the spec) mutually exclusive.  However, in practice, this is not what is often the case.\n *\n * In general, this library takes a _descriptive_ rather than _perscriptive_ approach (see https://amyrey.web.unc.edu/classes/ling-101-online/tutorials/understanding-prescriptive-vs-descriptive-grammar/).\n *\n * Then, in addition to that, it really adds to complexity with TypeScript (TypeScript takes this constraint very very seriously) in a way that's not actually super useful.  So, we treat this object as though it could have both or either of `params` and/or `text`.\n */\ntype PostDataBase = PostDataCommon & {\n  params?: Param[];\n  text?: string;\n};\n\nexport type HarRequest = Omit<NpmHarRequest, 'postData'> & { postData: PostDataBase };\n\nexport interface RequestExtras {\n  allHeaders: ReducedHelperObject;\n  cookiesObj: ReducedHelperObject;\n  fullUrl: string;\n  headersObj: ReducedHelperObject;\n  postData: PostDataBase & {\n    boundary?: string;\n    jsonObj?: ReducedHelperObject;\n    paramsObj?: ReducedHelperObject;\n  };\n  queryObj: ReducedHelperObject;\n  uriObj: UrlWithParsedQuery;\n}\n\nexport type Request = HarRequest & RequestExtras;\n\ninterface Entry {\n  request: Partial<HarRequest>;\n}\n\ninterface HarEntry {\n  log: {\n    creator: {\n      name: string;\n      version: string;\n    };\n    entries: Entry[];\n    version: string;\n  };\n}\n\nexport interface HTTPSnippetOptions {\n  harIsAlreadyEncoded?: boolean;\n}\n\nconst isHarEntry = (value: any): value is HarEntry =>\n  typeof value === 'object' &&\n  'log' in value &&\n  typeof value.log === 'object' &&\n  'entries' in value.log &&\n  Array.isArray(value.log.entries);\n\nexport class HTTPSnippet {\n  initCalled = false;\n\n  entries: Entry[] = [];\n\n  requests: Request[] = [];\n\n  options: HTTPSnippetOptions = {};\n\n  constructor(input: HarEntry | HarRequest, opts: HTTPSnippetOptions = {}) {\n    this.options = {\n      harIsAlreadyEncoded: false,\n      ...opts,\n    };\n\n    // prep the main container\n    this.requests = [];\n\n    // is it har?\n    if (isHarEntry(input)) {\n      this.entries = input.log.entries;\n    } else {\n      this.entries = [\n        {\n          request: input,\n        },\n      ];\n    }\n  }\n\n  init() {\n    this.initCalled = true;\n\n    this.requests = this.entries.map(({ request }) => {\n      // add optional properties to make validation successful\n      const req = {\n        bodySize: 0,\n        headersSize: 0,\n        headers: [],\n        cookies: [],\n        httpVersion: 'HTTP/1.1',\n        queryString: [],\n        postData: {\n          mimeType: request.postData?.mimeType || 'application/octet-stream',\n        },\n        ...request,\n      };\n\n      // Per the HAR spec `mimeType` needs to always be present if we have a `postData` object.\n      if (req.postData && !req.postData.mimeType) {\n        req.postData.mimeType = 'application/octet-stream';\n      }\n\n      return this.prepare(req as HarRequest, this.options);\n    });\n\n    return this;\n  }\n\n  prepare(harRequest: HarRequest, options: HTTPSnippetOptions) {\n    const request: Request = {\n      ...harRequest,\n      fullUrl: '',\n      uriObj: {} as UrlWithParsedQuery,\n      queryObj: {},\n      headersObj: {},\n      cookiesObj: {},\n      allHeaders: {},\n    };\n\n    // construct query objects\n    if (request.queryString && request.queryString.length) {\n      request.queryObj = request.queryString.reduce(reducer, {});\n    }\n\n    // construct headers objects\n    if (request.headers && request.headers.length) {\n      const http2VersionRegex = /^HTTP\\/2/;\n      request.headersObj = request.headers.reduce((accumulator, { name, value }) => {\n        const headerName = http2VersionRegex.exec(request.httpVersion) ? name.toLocaleLowerCase() : name;\n        return {\n          ...accumulator,\n          [headerName]: value,\n        };\n      }, {});\n    }\n\n    // construct headers objects\n    if (request.cookies && request.cookies.length) {\n      request.cookiesObj = request.cookies.reduceRight(\n        (accumulator, { name, value }) => ({\n          ...accumulator,\n          [name]: value,\n        }),\n        {},\n      );\n    }\n\n    // construct Cookie header\n    const cookies = request.cookies?.map(({ name, value }) => {\n      if (options.harIsAlreadyEncoded) {\n        return `${name}=${value}`;\n      }\n\n      return `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;\n    });\n\n    if (cookies?.length) {\n      request.allHeaders.cookie = cookies.join('; ');\n    }\n\n    switch (request.postData.mimeType) {\n      case 'multipart/mixed':\n      case 'multipart/related':\n      case 'multipart/form-data':\n      case 'multipart/alternative':\n        // reset values\n        request.postData.text = '';\n        request.postData.mimeType = 'multipart/form-data';\n\n        if (request.postData?.params) {\n          const boundary = '---011000010111000001101001'; // this is binary for \"api\" (easter egg)\n          const carriage = `${boundary}--`;\n          const rn = '\\r\\n';\n\n          /*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */\n          const escape = (str: string) => str.replace(/\\n/g, '%0A').replace(/\\r/g, '%0D').replace(/\"/g, '%22');\n          const normalizeLinefeeds = (value: string) => value.replace(/\\r?\\n|\\r/g, '\\r\\n');\n\n          const payload = [`--${boundary}`];\n          request.postData?.params.forEach((param, i) => {\n            const name = param.name;\n            const value = param.value || '';\n            const filename = param.fileName || null;\n            const contentType = param.contentType || 'application/octet-stream';\n\n            if (filename) {\n              payload.push(\n                `Content-Disposition: form-data; name=\"${escape(normalizeLinefeeds(name))}\"; filename=\"${filename}\"`,\n              );\n              payload.push(`Content-Type: ${contentType}`);\n            } else {\n              payload.push(`Content-Disposition: form-data; name=\"${escape(normalizeLinefeeds(name))}\"`);\n            }\n\n            payload.push('');\n            payload.push(normalizeLinefeeds(value));\n\n            if (i !== (request.postData.params as Param[]).length - 1) {\n              payload.push(`--${boundary}`);\n            }\n          });\n\n          payload.push(`--${carriage}`);\n\n          request.postData.boundary = boundary;\n          request.postData.text = payload.join(rn);\n\n          // Since headers are case-sensitive we need to see if there's an existing `Content-Type` header that we can override.\n          const contentTypeHeader = getHeaderName(request.headersObj, 'content-type') || 'content-type';\n\n          request.headersObj[contentTypeHeader] = `multipart/form-data; boundary=${boundary}`;\n        }\n        break;\n\n      case 'application/x-www-form-urlencoded':\n        if (!request.postData.params) {\n          request.postData.text = '';\n        } else {\n          // @ts-expect-error the `har-format` types make this challenging\n          request.postData.paramsObj = request.postData.params.reduce(reducer, {});\n\n          // always overwrite\n          request.postData.text = queryStringify(request.postData.paramsObj);\n        }\n        break;\n\n      case 'text/json':\n      case 'text/x-json':\n      case 'application/json':\n      case 'application/x-json':\n        request.postData.mimeType = 'application/json';\n\n        if (request.postData.text) {\n          try {\n            request.postData.jsonObj = JSON.parse(request.postData.text);\n          } catch (e) {\n            // force back to `text/plain` if headers have proper content-type value, then this should also work\n            request.postData.mimeType = 'text/plain';\n          }\n        }\n        break;\n    }\n\n    // create allHeaders object\n    const allHeaders = {\n      ...request.allHeaders,\n      ...request.headersObj,\n    };\n\n    const urlWithParsedQuery = urlParse(request.url, true, true); //?\n\n    // query string key/value pairs in with literal querystrings containd within the url\n    request.queryObj = {\n      ...request.queryObj,\n      ...(urlWithParsedQuery.query as ReducedHelperObject),\n    }; //?\n\n    // reset uriObj values for a clean url\n    let search;\n    if (options.harIsAlreadyEncoded) {\n      search = queryStringify(request.queryObj, {\n        encode: false,\n        indices: false,\n      });\n    } else {\n      search = queryStringify(request.queryObj, {\n        indices: false,\n      });\n    }\n\n    const uriObj = {\n      ...urlWithParsedQuery,\n      query: request.queryObj,\n      search,\n      path: search ? `${urlWithParsedQuery.pathname}?${search}` : urlWithParsedQuery.pathname,\n    };\n\n    // keep the base url clean of queryString\n    const url = urlFormat({\n      ...urlWithParsedQuery,\n      query: null,\n      search: null,\n    }); //?\n\n    const fullUrl = urlFormat({\n      ...urlWithParsedQuery,\n      ...uriObj,\n    }); //?\n\n    return {\n      ...request,\n      allHeaders,\n      fullUrl,\n      url,\n      uriObj,\n    };\n  }\n\n  convert(targetId: TargetId, clientId?: ClientId, options?: any) {\n    if (!this.initCalled) {\n      this.init();\n    }\n\n    if (!options && clientId) {\n      options = clientId;\n    }\n\n    const target = targets[targetId];\n    if (!target) {\n      return false;\n    }\n\n    const { convert } = target.clientsById[clientId || target.info.default];\n    const results = this.requests.map(request => convert(request, options));\n    return results;\n  }\n}\n","type Headers<T> = Record<string, T>;\n\n/**\n * Given a headers object retrieve a specific header out of it via a case-insensitive key.\n */\nexport const getHeaderName = <T>(headers: Headers<T>, name: string) =>\n  Object.keys(headers).find(header => header.toLowerCase() === name.toLowerCase());\n\n/**\n * Given a headers object retrieve the contents of a header out of it via a case-insensitive key.\n */\nexport const getHeader = <T>(headers: Headers<T>, name: string) => {\n  const headerName = getHeaderName(headers, name);\n  if (!headerName) {\n    return undefined;\n  }\n  return headers[headerName];\n};\n\n/**\n * Determine if a given case-insensitive header exists within a header object.\n */\nexport const hasHeader = <T>(headers: Headers<T>, name: string) => Boolean(getHeaderName(headers, name));\n\n/**\n * Determines if a given MIME type is JSON, or a variant of such.\n */\nexport const isMimeTypeJSON = (mimeType: string) =>\n  ['application/json', 'application/x-json', 'text/json', 'text/x-json', '+json'].some(\n    type => mimeType.indexOf(type) > -1,\n  );\n","export type ReducedHelperObject = Record<string, string[] | string>;\n\nexport const reducer = <T extends { name: string; value: string }>(accumulator: ReducedHelperObject, pair: T) => {\n  const currentValue = accumulator[pair.name];\n  if (currentValue === undefined) {\n    accumulator[pair.name] = pair.value;\n    return accumulator;\n  }\n\n  // If we already have it as array just push the value\n  if (Array.isArray(currentValue)) {\n    currentValue.push(pair.value);\n    return accumulator;\n  }\n\n  // convert to array since now we have more than one value for this key\n  accumulator[pair.name] = [currentValue, pair.value];\n  return accumulator;\n};\n","const DEFAULT_INDENTATION_CHARACTER = '';\nconst DEFAULT_LINE_JOIN = '\\n';\n\nexport type PostProcessor = (unreplacedCode: string) => string;\n\nexport interface CodeBuilderOptions {\n  /**\n   * Desired indentation character for aggregated lines of code\n   * @default ''\n   */\n  indent?: string;\n\n  /**\n   * Desired character to join each line of code\n   * @default \\n\n   */\n  join?: string;\n}\n\nexport class CodeBuilder {\n  postProcessors: PostProcessor[] = [];\n\n  code: string[] = [];\n\n  indentationCharacter: string = DEFAULT_INDENTATION_CHARACTER;\n\n  lineJoin = DEFAULT_LINE_JOIN;\n\n  /**\n   * Helper object to format and aggragate lines of code.\n   * Lines are aggregated in a `code` array, and need to be joined to obtain a proper code snippet.\n   */\n  constructor({ indent, join }: CodeBuilderOptions = {}) {\n    this.indentationCharacter = indent || DEFAULT_INDENTATION_CHARACTER;\n    this.lineJoin = join ?? DEFAULT_LINE_JOIN;\n  }\n\n  /**\n   * Add given indentation level to given line of code\n   */\n  indentLine = (line: string, indentationLevel = 0) => {\n    const indent = this.indentationCharacter.repeat(indentationLevel);\n    return `${indent}${line}`;\n  };\n\n  /**\n   * Add the line at the beginning of the current lines\n   */\n  unshift = (line: string, indentationLevel?: number) => {\n    const newLine = this.indentLine(line, indentationLevel);\n    this.code.unshift(newLine);\n  };\n\n  /**\n   * Add the line at the end of the current lines\n   */\n  push = (line: string, indentationLevel?: number) => {\n    const newLine = this.indentLine(line, indentationLevel);\n    this.code.push(newLine);\n  };\n\n  /**\n   * Add an empty line at the end of current lines\n   */\n  blank = () => {\n    this.code.push('');\n  };\n\n  /**\n   * Concatenate all current lines using the given lineJoin, then apply any replacers that may have been added\n   */\n  join = () => {\n    const unreplacedCode = this.code.join(this.lineJoin);\n    const replacedOutput = this.postProcessors.reduce((accumulator, replacer) => replacer(accumulator), unreplacedCode);\n    return replacedOutput;\n  };\n\n  /**\n   * Often when writing modules you may wish to add a literal tag or bit of metadata that you wish to transform after other processing as a final step.\n   * To do so, you can provide a PostProcessor function and it will be run automatically for you when you call `join()` later on.\n   */\n  addPostProcessor = (postProcessor: PostProcessor) => {\n    this.postProcessors = [...this.postProcessors, postProcessor];\n  };\n}\n","export interface EscapeOptions {\n  /**\n   * The delimiter that will be used to wrap the string (and so must be escaped\n   * when used within the string).\n   * Defaults to \"\n   */\n  delimiter?: string;\n\n  /**\n   * The char to use to escape the delimiter and other special characters.\n   * Defaults to \\\n   */\n  escapeChar?: string;\n\n  /**\n   * Whether newlines (\\n and \\r) should be escaped within the string.\n   * Defaults to true.\n   */\n  escapeNewlines?: boolean;\n}\n\n/**\n * Escape characters within a value to make it safe to insert directly into a\n * snippet. Takes options which define the escape requirements.\n *\n * This is closely based on the JSON-stringify string serialization algorithm,\n * but generalized for other string delimiters (e.g. \" or ') and different escape\n * characters (e.g. Powershell uses `)\n *\n * See https://tc39.es/ecma262/multipage/structured-data.html#sec-quotejsonstring\n * for the complete original algorithm.\n */\nexport function escapeString(rawValue: any, options: EscapeOptions = {}) {\n  const { delimiter = '\"', escapeChar = '\\\\', escapeNewlines = true } = options;\n\n  const stringValue = rawValue.toString();\n\n  return [...stringValue]\n    .map(c => {\n      if (c === '\\b') {\n        return `${escapeChar}b`;\n      } else if (c === '\\t') {\n        return `${escapeChar}t`;\n      } else if (c === '\\n') {\n        if (escapeNewlines) {\n          return `${escapeChar}n`;\n        }\n\n        return c; // Don't just continue, or this is caught by < \\u0020\n      } else if (c === '\\f') {\n        return `${escapeChar}f`;\n      } else if (c === '\\r') {\n        if (escapeNewlines) {\n          return `${escapeChar}r`;\n        }\n\n        return c; // Don't just continue, or this is caught by < \\u0020\n      } else if (c === escapeChar) {\n        return escapeChar + escapeChar;\n      } else if (c === delimiter) {\n        return escapeChar + delimiter;\n      } else if (c < '\\u0020' || c > '\\u007E') {\n        // Delegate the trickier non-ASCII cases to the normal algorithm. Some of these\n        // are escaped as \\uXXXX, whilst others are represented literally. Since we're\n        // using this primarily for header values that are generally (though not 100%\n        // strictly?) ASCII-only, this should almost never happen.\n        return JSON.stringify(c).slice(1, -1);\n      }\n\n      return c;\n    })\n    .join('');\n}\n\n/**\n * Make a string value safe to insert literally into a snippet within single quotes,\n * by escaping problematic characters, including single quotes inside the string,\n * backslashes, newlines, and other special characters.\n *\n * If value is not a string, it will be stringified with .toString() first.\n */\nexport const escapeForSingleQuotes = (value: any) => escapeString(value, { delimiter: \"'\" });\n\n/**\n * Make a string value safe to insert literally into a snippet within double quotes,\n * by escaping problematic characters, including double quotes inside the string,\n * backslashes, newlines, and other special characters.\n *\n * If value is not a string, it will be stringified with .toString() first.\n */\nexport const escapeForDoubleQuotes = (value: any) => escapeString(value, { delimiter: '\"' });\n","import type { Client } from '../../index.js';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\nimport { escapeForDoubleQuotes } from '../../../helpers/escape.js';\n\nexport const libcurl: Client = {\n  info: {\n    key: 'libcurl',\n    title: 'Libcurl',\n    link: 'http://curl.haxx.se/libcurl',\n    description: 'Simple REST and HTTP API Client for C',\n    extname: '.c',\n  },\n  convert: ({ method, fullUrl, headersObj, allHeaders, postData }) => {\n    const { push, blank, join } = new CodeBuilder();\n\n    push('CURL *hnd = curl_easy_init();');\n    blank();\n    push(`curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, \"${method.toUpperCase()}\");`);\n    push('curl_easy_setopt(hnd, CURLOPT_WRITEDATA, stdout);');\n    push(`curl_easy_setopt(hnd, CURLOPT_URL, \"${fullUrl}\");`);\n\n    // Add headers, including the cookies\n    const headers = Object.keys(headersObj);\n\n    // construct headers\n    if (headers.length) {\n      blank();\n      push('struct curl_slist *headers = NULL;');\n\n      headers.forEach(header => {\n        push(`headers = curl_slist_append(headers, \"${header}: ${escapeForDoubleQuotes(headersObj[header])}\");`);\n      });\n\n      push('curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);');\n    }\n\n    // construct cookies\n    if (allHeaders.cookie) {\n      blank();\n      push(`curl_easy_setopt(hnd, CURLOPT_COOKIE, \"${allHeaders.cookie}\");`);\n    }\n\n    if (postData.text) {\n      blank();\n      push(`curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, ${JSON.stringify(postData.text)});`);\n    }\n\n    blank();\n    push('CURLcode ret = curl_easy_perform(hnd);');\n\n    return join();\n  },\n};\n","import type { Target } from '../index.js';\n\nimport { libcurl } from './libcurl/client.js';\n\nexport const c: Target = {\n  info: {\n    key: 'c',\n    title: 'C',\n    default: 'libcurl',\n    cli: 'c',\n  },\n  clientsById: {\n    libcurl,\n  },\n};\n","/**\n * @description\n * HTTP code snippet generator for Clojure using clj-http.\n *\n * @author\n * @tggreene\n *\n * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author.\n */\nimport type { Client } from '../../index.js';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\nimport { getHeader, getHeaderName } from '../../../helpers/headers.js';\n\nclass Keyword {\n  name = '';\n\n  constructor(name: string) {\n    this.name = name;\n  }\n\n  toString = () => `:${this.name}`;\n}\n\nclass File {\n  path = '';\n\n  constructor(path: string) {\n    this.path = path;\n  }\n\n  toString = () => `(clojure.java.io/file \"${this.path}\")`;\n}\n\nconst jsType = (input?: any) => {\n  if (input === undefined) {\n    return null;\n  }\n\n  if (input === null) {\n    return 'null';\n  }\n\n  return input.constructor.name.toLowerCase();\n};\n\nconst objEmpty = (input?: any) => {\n  if (input === undefined) {\n    return true;\n  } else if (jsType(input) === 'object') {\n    return Object.keys(input).length === 0;\n  }\n  return false;\n};\n\nconst filterEmpty = (input: Record<string, any>) => {\n  Object.keys(input)\n    .filter(x => objEmpty(input[x]))\n    .forEach(x => {\n      delete input[x];\n    });\n  return input;\n};\n\nconst padBlock = (padSize: number, input: string) => {\n  const padding = ' '.repeat(padSize);\n  return input.replace(/\\n/g, `\\n${padding}`);\n};\n\nconst jsToEdn = (js: any) => {\n  switch (jsType(js)) {\n    case 'string':\n      return `\"${js.replace(/\"/g, '\\\\\"')}\"`;\n\n    case 'file':\n      return js.toString();\n\n    case 'keyword':\n      return js.toString();\n\n    case 'null':\n      return 'nil';\n\n    case 'regexp':\n      return `#\"${js.source}\"`;\n\n    case 'object': {\n      // simple vertical format\n      const obj = Object.keys(js)\n        .reduce((accumulator, key) => {\n          const val = padBlock(key.length + 2, jsToEdn(js[key]));\n          return `${accumulator}:${key} ${val}\\n `;\n        }, '')\n        .trim();\n      return `{${padBlock(1, obj)}}`;\n    }\n\n    case 'array': {\n      // simple horizontal format\n      const arr = js.reduce((accumulator: string, value: string) => `${accumulator} ${jsToEdn(value)}`, '').trim();\n      return `[${padBlock(1, arr)}]`;\n    }\n\n    default: // 'number' 'boolean'\n      return js.toString();\n  }\n};\n\nexport const clj_http: Client = {\n  info: {\n    key: 'clj_http',\n    title: 'clj-http',\n    link: 'https://github.com/dakrone/clj-http',\n    description: 'An idiomatic clojure http client wrapping the apache client.',\n    extname: '.clj',\n  },\n  convert: ({ queryObj, method, postData, url, allHeaders }, options) => {\n    const { push, join } = new CodeBuilder({ indent: options?.indent });\n    const methods = ['get', 'post', 'put', 'delete', 'patch', 'head', 'options'];\n    method = method.toLowerCase();\n\n    if (!methods.includes(method)) {\n      push('Method not supported');\n      return join();\n    }\n\n    const params: Record<string, any> = {\n      headers: allHeaders,\n      'query-params': queryObj,\n    };\n\n    switch (postData.mimeType) {\n      case 'application/json':\n        {\n          params['content-type'] = new Keyword('json');\n          params['form-params'] = postData.jsonObj;\n          const header = getHeaderName(params.headers, 'content-type');\n          if (header) {\n            delete params.headers[header];\n          }\n        }\n        break;\n\n      case 'application/x-www-form-urlencoded':\n        {\n          params['form-params'] = postData.paramsObj;\n          const header = getHeaderName(params.headers, 'content-type');\n          if (header) {\n            delete params.headers[header];\n          }\n        }\n        break;\n\n      case 'text/plain':\n        {\n          params.body = postData.text;\n          const header = getHeaderName(params.headers, 'content-type');\n          if (header) {\n            delete params.headers[header];\n          }\n        }\n        break;\n\n      case 'multipart/form-data': {\n        if (postData.params) {\n          params.multipart = postData.params.map(param => {\n            if (param.fileName && !param.value) {\n              return {\n                name: param.name,\n                content: new File(param.fileName),\n              };\n            }\n            return {\n              name: param.name,\n              content: param.value,\n            };\n          });\n\n          const header = getHeaderName(params.headers, 'content-type');\n          if (header) {\n            delete params.headers[header];\n          }\n        }\n        break;\n      }\n    }\n\n    switch (getHeader(params.headers, 'accept')) {\n      case 'application/json':\n        {\n          params.accept = new Keyword('json');\n\n          const header = getHeaderName(params.headers, 'accept');\n          if (header) {\n            delete params.headers[header];\n          }\n        }\n        break;\n    }\n\n    push(\"(require '[clj-http.client :as client])\\n\");\n\n    if (objEmpty(filterEmpty(params))) {\n      push(`(client/${method} \"${url}\")`);\n    } else {\n      const padding = 11 + method.length + url.length;\n      const formattedParams = padBlock(padding, jsToEdn(filterEmpty(params)));\n      push(`(client/${method} \"${url}\" ${formattedParams})`);\n    }\n\n    return join();\n  },\n};\n","import type { Target } from '../index.js';\n\nimport { clj_http } from './clj_http/client.js';\n\nexport const clojure: Target = {\n  info: {\n    key: 'clojure',\n    title: 'Clojure',\n    default: 'clj_http',\n  },\n  clientsById: {\n    clj_http,\n  },\n};\n","import type { Request } from '../../../index.js';\nimport type { Client } from '../../index.js';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\nimport { escapeForDoubleQuotes } from '../../../helpers/escape.js';\nimport { getHeader } from '../../../helpers/headers.js';\n\nconst getDecompressionMethods = (allHeaders: Request['allHeaders']) => {\n  let acceptEncodings = getHeader(allHeaders, 'accept-encoding');\n  if (!acceptEncodings) {\n    return []; // no decompression\n  }\n\n  const supportedMethods: Record<string, string> = {\n    gzip: 'DecompressionMethods.GZip',\n    deflate: 'DecompressionMethods.Deflate',\n  };\n\n  const methods: string[] = [];\n  if (typeof acceptEncodings === 'string') {\n    acceptEncodings = [acceptEncodings];\n  }\n  acceptEncodings.forEach(acceptEncoding => {\n    acceptEncoding.split(',').forEach(encoding => {\n      const match = /\\s*([^;\\s]+)/.exec(encoding);\n      if (match) {\n        const method = supportedMethods[match[1]];\n        if (method) {\n          methods.push(method);\n        }\n      }\n    });\n  });\n\n  return methods;\n};\n\nexport const httpclient: Client = {\n  info: {\n    key: 'httpclient',\n    title: 'HttpClient',\n    link: 'https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient',\n    description: '.NET Standard HTTP Client',\n    extname: '.cs',\n  },\n  convert: ({ allHeaders, postData, method, fullUrl }, options) => {\n    const opts = {\n      indent: '    ',\n      ...options,\n    };\n\n    const { push, join } = new CodeBuilder({ indent: opts.indent });\n\n    push('using System.Net.Http.Headers;');\n    let clienthandler = '';\n    const cookies = Boolean(allHeaders.cookie);\n    const decompressionMethods = getDecompressionMethods(allHeaders);\n    if (cookies || decompressionMethods.length) {\n      clienthandler = 'clientHandler';\n      push('var clientHandler = new HttpClientHandler');\n      push('{');\n      if (cookies) {\n        // enable setting the cookie header\n        push('UseCookies = false,', 1);\n      }\n      if (decompressionMethods.length) {\n        // enable decompression for supported methods\n        push(`AutomaticDecompression = ${decompressionMethods.join(' | ')},`, 1);\n      }\n      push('};');\n    }\n\n    push(`var client = new HttpClient(${clienthandler});`);\n\n    push('var request = new HttpRequestMessage');\n    push('{');\n\n    const methods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS', 'TRACE'];\n    method = method.toUpperCase();\n    if (method && methods.includes(method)) {\n      // buildin method\n      method = `HttpMethod.${method[0]}${method.substring(1).toLowerCase()}`;\n    } else {\n      // custom method\n      method = `new HttpMethod(\"${method}\")`;\n    }\n    push(`Method = ${method},`, 1);\n\n    push(`RequestUri = new Uri(\"${fullUrl}\"),`, 1);\n\n    const headers: (keyof typeof allHeaders)[] = Object.keys(allHeaders).filter(header => {\n      switch (header.toLowerCase()) {\n        case 'content-type':\n        case 'content-length':\n        case 'accept-encoding':\n          // skip these headers\n          return false;\n\n        default:\n          return true;\n      }\n    });\n\n    if (headers.length) {\n      push('Headers =', 1);\n      push('{', 1);\n      headers.forEach(key => {\n        push(`{ \"${key}\", \"${escapeForDoubleQuotes(allHeaders[key])}\" },`, 2);\n      });\n      push('},', 1);\n    }\n\n    if (postData.text) {\n      const contentType = postData.mimeType;\n      switch (contentType) {\n        case 'application/x-www-form-urlencoded':\n          push('Content = new FormUrlEncodedContent(new Dictionary<string, string>', 1);\n          push('{', 1);\n          postData.params?.forEach(param => {\n            push(`{ \"${param.name}\", \"${param.value}\" },`, 2);\n          });\n          push('}),', 1);\n          break;\n\n        case 'multipart/form-data':\n          push('Content = new MultipartFormDataContent', 1);\n          push('{', 1);\n          postData.params?.forEach(param => {\n            push(`new StringContent(${JSON.stringify(param.value || '')})`, 2);\n            push('{', 2);\n            push('Headers =', 3);\n            push('{', 3);\n            if (param.contentType) {\n              push(`ContentType = new MediaTypeHeaderValue(\"${param.contentType}\"),`, 4);\n            }\n            push('ContentDisposition = new ContentDispositionHeaderValue(\"form-data\")', 4);\n            push('{', 4);\n            push(`Name = \"${param.name}\",`, 5);\n            if (param.fileName) {\n              push(`FileName = \"${param.fileName}\",`, 5);\n            }\n            push('}', 4);\n            push('}', 3);\n            push('},', 2);\n          });\n\n          push('},', 1);\n          break;\n\n        default:\n          push(`Content = new StringContent(${JSON.stringify(postData.text || '')})`, 1);\n          push('{', 1);\n          push('Headers =', 2);\n          push('{', 2);\n          push(`ContentType = new MediaTypeHeaderValue(\"${contentType}\")`, 3);\n          push('}', 2);\n          push('}', 1);\n          break;\n      }\n    }\n    push('};');\n\n    // send and read response\n    push('using (var response = await client.SendAsync(request))');\n    push('{');\n    push('response.EnsureSuccessStatusCode();', 1);\n    push('var body = await response.Content.ReadAsStringAsync();', 1);\n    push('Console.WriteLine(body);', 1);\n    push('}');\n\n    return join();\n  },\n};\n","import type { Client } from '../../index.js';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\nimport { escapeForDoubleQuotes } from '../../../helpers/escape.js';\n\nfunction title(s: string): string {\n  return s[0].toUpperCase() + s.slice(1).toLowerCase();\n}\n\nexport const restsharp: Client = {\n  info: {\n    key: 'restsharp',\n    title: 'RestSharp',\n    link: 'http://restsharp.org/',\n    description: 'Simple REST and HTTP API Client for .NET',\n    extname: '.cs',\n    installation: 'dotnet add package RestSharp',\n  },\n  convert: ({ method, fullUrl, headersObj, cookies, postData, uriObj }) => {\n    const { push, join } = new CodeBuilder();\n    const isSupportedMethod = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS'].includes(\n      method.toUpperCase(),\n    );\n\n    if (!isSupportedMethod) {\n      return 'Method not supported';\n    }\n\n    push('using RestSharp;\\n\\n');\n    push(`var options = new RestClientOptions(\"${fullUrl}\");`);\n    push('var client = new RestClient(options);');\n\n    // The first argument is the sub-path to the base URL, given as the\n    // constructor to RestClient; for our purposes we're just giving the entire\n    // URL as the base path so it can be an empty string\n    push('var request = new RestRequest(\"\");');\n\n    // If we have multipart form data, set this value. Setting the content-type header manually and then trying to add a mutlipart file parameter\n    const isMultipart = postData.mimeType && postData.mimeType === 'multipart/form-data';\n    if (isMultipart) {\n      push('request.AlwaysMultipartFormData = true;');\n    }\n\n    // Add headers, including the cookies\n    Object.keys(headersObj).forEach(key => {\n      // if we have post data, restsharp really wants to set the contentType\n      // itself; do not add a content-type header or you end up with failures\n      // which manifest as unhandled exceptions.\n      //\n      // The only case where we _do_ want to add it is if there's no postData\n      // text, in which case there will be no `AddJsonBody` call, and restsharp\n      // won't know to set the content type\n      if (postData.mimeType && key.toLowerCase() === 'content-type' && postData.text) {\n        if (isMultipart && postData.boundary) {\n          push(`request.FormBoundary = \"${postData.boundary}\";`);\n        }\n        return;\n      }\n      push(`request.AddHeader(\"${key}\", \"${escapeForDoubleQuotes(headersObj[key])}\");`);\n    });\n\n    cookies.forEach(({ name, value }) => {\n      push(`request.AddCookie(\"${name}\", \"${escapeForDoubleQuotes(value)}\", \"${uriObj.pathname}\", \"${uriObj.host}\");`);\n    });\n\n    switch (postData.mimeType) {\n      case 'multipart/form-data':\n        if (!postData.params) break;\n        postData.params.forEach(param => {\n          if (param.fileName) {\n            push(`request.AddFile(\"${param.name}\", \"${param.fileName}\");`);\n          } else {\n            push(`request.AddParameter(\"${param.name}\", \"${param.value}\");`);\n          }\n        });\n        break;\n      case 'application/x-www-form-urlencoded':\n        if (!postData.params) break;\n        postData.params.forEach(param => {\n          push(`request.AddParameter(\"${param.name}\", \"${param.value}\");`);\n        });\n        break;\n      case 'application/json': {\n        if (!postData.text) break;\n        const text = JSON.stringify(postData.text);\n        push(`request.AddJsonBody(${text}, false);`);\n        break;\n      }\n      default:\n        if (!postData.text) break;\n        push(`request.AddStringBody(\"${postData.text}\", \"${postData.mimeType}\");`);\n    }\n\n    push(`var response = await client.${title(method)}Async(request);\\n`);\n\n    push('Console.WriteLine(\"{0}\", response.Content);\\n');\n\n    return join();\n  },\n};\n","import type { Target } from '../index.js';\n\nimport { httpclient } from './httpclient/client.js';\nimport { restsharp } from './restsharp/client.js';\n\nexport const csharp: Target = {\n  info: {\n    key: 'csharp',\n    title: 'C#',\n    default: 'restsharp',\n    cli: 'dotnet',\n  },\n\n  clientsById: {\n    httpclient,\n    restsharp,\n  },\n};\n","/**\n * @description\n * HTTP code snippet generator for native Go.\n *\n * @author\n * @montanaflynn\n *\n * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author.\n */\nimport type { Client } from '../../index.js';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\nimport { escapeForDoubleQuotes } from '../../../helpers/escape.js';\n\nexport interface GoNativeOptions {\n  checkErrors?: boolean;\n  printBody?: boolean;\n  showBoilerplate?: boolean;\n  timeout?: number;\n}\n\nexport const native: Client<GoNativeOptions> = {\n  info: {\n    key: 'native',\n    title: 'NewRequest',\n    link: 'http://golang.org/pkg/net/http/#NewRequest',\n    description: 'Golang HTTP client request',\n    extname: '.go',\n  },\n  convert: ({ postData, method, allHeaders, fullUrl }, options = {}) => {\n    const { blank, push, join } = new CodeBuilder({ indent: '\\t' });\n\n    const { showBoilerplate = true, checkErrors = false, printBody = true, timeout = -1 } = options;\n\n    const errorPlaceholder = checkErrors ? 'err' : '_';\n\n    const indent = showBoilerplate ? 1 : 0;\n\n    const errorCheck = () => {\n      if (checkErrors) {\n        push('if err != nil {', indent);\n        push('panic(err)', indent + 1);\n        push('}', indent);\n      }\n    };\n\n    // Create boilerplate\n    if (showBoilerplate) {\n      push('package main');\n      blank();\n      push('import (');\n      push('\"fmt\"', indent);\n\n      if (timeout > 0) {\n        push('\"time\"', indent);\n      }\n\n      if (postData.text) {\n        push('\"strings\"', indent);\n      }\n\n      push('\"net/http\"', indent);\n\n      if (printBody) {\n        push('\"io\"', indent);\n      }\n\n      push(')');\n      blank();\n      push('func main() {');\n      blank();\n    }\n\n    // Create client\n    const hasTimeout = timeout > 0;\n    const hasClient = hasTimeout;\n    const client = hasClient ? 'client' : 'http.DefaultClient';\n\n    if (hasClient) {\n      push('client := http.Client{', indent);\n\n      if (hasTimeout) {\n        push(`Timeout: time.Duration(${timeout} * time.Second),`, indent + 1);\n      }\n\n      push('}', indent);\n      blank();\n    }\n\n    push(`url := \"${fullUrl}\"`, indent);\n    blank();\n\n    // If we have body content or not create the var and reader or nil\n    if (postData.text) {\n      push(`payload := strings.NewReader(${JSON.stringify(postData.text)})`, indent);\n      blank();\n      push(`req, ${errorPlaceholder} := http.NewRequest(\"${method}\", url, payload)`, indent);\n      blank();\n    } else {\n      push(`req, ${errorPlaceholder} := http.NewRequest(\"${method}\", url, nil)`, indent);\n      blank();\n    }\n\n    errorCheck();\n\n    // Add headers\n    if (Object.keys(allHeaders).length) {\n      Object.keys(allHeaders).forEach(key => {\n        push(`req.Header.Add(\"${key}\", \"${escapeForDoubleQuotes(allHeaders[key])}\")`, indent);\n      });\n\n      blank();\n    }\n\n    // Make request\n    push(`res, ${errorPlaceholder} := ${client}.Do(req)`, indent);\n    errorCheck();\n\n    // Get Body\n    if (printBody) {\n      blank();\n      push('defer res.Body.Close()', indent);\n      push(`body, ${errorPlaceholder} := io.ReadAll(res.Body)`, indent);\n      errorCheck();\n    }\n\n    // Print it\n    blank();\n\n    if (printBody) {\n      push('fmt.Println(string(body))', indent);\n    }\n\n    // End main block\n    if (showBoilerplate) {\n      blank();\n      push('}');\n    }\n\n    return join();\n  },\n};\n","import type { Target } from '../index.js';\n\nimport { native } from './native/client.js';\n\nexport const go: Target = {\n  info: {\n    key: 'go',\n    title: 'Go',\n    default: 'native',\n    cli: 'go',\n  },\n  clientsById: {\n    native,\n  },\n};\n","/**\n * @description\n * HTTP code snippet generator to generate raw HTTP/1.1 request strings,\n * in accordance to the RFC 7230 (and RFC 7231) specifications.\n *\n * @author\n * @irvinlim\n *\n * For any questions or issues regarding the generated code snippet, please open an issue mentioning the author.\n */\nimport type { Client } from '../../index.js';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\n\nconst CRLF = '\\r\\n';\n\ninterface Http11Options {\n  absoluteURI?: boolean;\n  autoContentLength?: boolean;\n  autoHost?: boolean;\n}\n\n/**\n * Request follows the request message format in accordance to RFC 7230, Section 3.\n * Each section is prepended with the RFC and section number.\n * See more at https://tools.ietf.org/html/rfc7230#section-3.\n */\nexport const http11: Client<Http11Options> = {\n  info: {\n    key: 'http1.1',\n    title: 'HTTP/1.1',\n    link: 'https://tools.ietf.org/html/rfc7230',\n    description: 'HTTP/1.1 request string in accordance with RFC 7230',\n    extname: null,\n  },\n  convert: ({ method, fullUrl, uriObj, httpVersion, allHeaders, postData }, options) => {\n    const opts = {\n      absoluteURI: false,\n      autoContentLength: true,\n      autoHost: true,\n      ...options,\n    };\n\n    // RFC 7230 Section 3. Message Format\n    // All lines have no indentation, and should be terminated with CRLF.\n    const { blank, push, join } = new CodeBuilder({ indent: '', join: CRLF });\n\n    // RFC 7230 Section 5.3. Request Target\n    // Determines if the Request-Line should use 'absolute-form' or 'origin-form'.\n    // Basically it means whether the \"http://domain.com\" will prepend the full url.\n    const requestUrl = opts.absoluteURI ? fullUrl : uriObj.path;\n\n    // RFC 7230 Section 3.1.1. Request-Line\n    push(`${method} ${requestUrl} ${httpVersion}`);\n\n    const headerKeys = Object.keys(allHeaders);\n    // RFC 7231 Section 5. Header Fields\n    headerKeys.forEach(key => {\n      // Capitalize header keys, even though it's not required by the spec.\n      const keyCapitalized = key.toLowerCase().replace(/(^|-)(\\w)/g, input => input.toUpperCase());\n      push(`${keyCapitalized}: ${allHeaders[key]}`);\n    });\n\n    // RFC 7230 Section 5.4. Host\n    // Automatically set Host header if option is on and on header already exists.\n    if (opts.autoHost && !headerKeys.includes('host')) {\n      push(`Host: ${uriObj.host}`);\n    }\n\n    // RFC 7230 Section 3.3.3. Message Body Length\n    // Automatically set Content-Length header if option is on, postData is present and no header already exists.\n    if (opts.autoContentLength && postData.text && !headerKeys.includes('content-length')) {\n      const encoder = new TextEncoder();\n      const length = encoder.encode(postData.text).length.toString();\n      push(`Content-Length: ${length}`);\n    }\n\n    // Add extra line after header section.\n    blank();\n\n    // Separate header section and message body section.\n    const headerSection = join();\n\n    // RFC 7230 Section 3.3. Message Body\n    const messageBody = postData.text || '';\n\n    // RFC 7230 Section 3. Message Format\n    // Extra CRLF separating the headers from the body.\n    return `${headerSection}${CRLF}${messageBody}`;\n  },\n};\n","import type { Target } from '../index.js';\n\nimport { http11 } from './http1.1/client.js';\n\nexport const http: Target = {\n  info: {\n    key: 'http',\n    title: 'HTTP',\n    default: 'http1.1',\n  },\n  clientsById: {\n    'http1.1': http11,\n  },\n};\n","/**\n * @description\n * Asynchronous Http and WebSocket Client library for Java\n *\n * @author\n * @windard\n *\n * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author.\n */\nimport type { Client } from '../../index.js';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\nimport { escapeForDoubleQuotes } from '../../../helpers/escape.js';\n\nexport const asynchttp: Client = {\n  info: {\n    key: 'asynchttp',\n    title: 'AsyncHttp',\n    link: 'https://github.com/AsyncHttpClient/async-http-client',\n    description: 'Asynchronous Http and WebSocket Client library for Java',\n    extname: '.java',\n  },\n  convert: ({ method, allHeaders, postData, fullUrl }, options) => {\n    const opts = {\n      indent: '  ',\n      ...options,\n    };\n    const { blank, push, join } = new CodeBuilder({ indent: opts.indent });\n\n    push('AsyncHttpClient client = new DefaultAsyncHttpClient();');\n\n    push(`client.prepare(\"${method.toUpperCase()}\", \"${fullUrl}\")`);\n\n    // Add headers, including the cookies\n    Object.keys(allHeaders).forEach(key => {\n      push(`.setHeader(\"${key}\", \"${escapeForDoubleQuotes(allHeaders[key])}\")`, 1);\n    });\n\n    if (postData.text) {\n      push(`.setBody(${JSON.stringify(postData.text)})`, 1);\n    }\n\n    push('.execute()', 1);\n    push('.toCompletableFuture()', 1);\n    push('.thenAccept(System.out::println)', 1);\n    push('.join();', 1);\n    blank();\n    push('client.close();');\n\n    return join();\n  },\n};\n","/**\n * @description\n * HTTP code snippet generator for Java using java.net.http.\n *\n * @author\n * @wtetsu\n *\n * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author.\n */\nimport type { Client } from '../../index.js';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\nimport { escapeForDoubleQuotes } from '../../../helpers/escape.js';\n\nexport interface NetHttpOptions {\n  indent?: string;\n}\n\nexport const nethttp: Client = {\n  info: {\n    key: 'nethttp',\n    title: 'java.net.http',\n    link: 'https://openjdk.java.net/groups/net/httpclient/intro.html',\n    description: 'Java Standardized HTTP Client API',\n    extname: '.java',\n  },\n  convert: ({ allHeaders, fullUrl, method, postData }, options) => {\n    const opts = {\n      indent: '  ',\n      ...options,\n    };\n\n    const { push, join } = new CodeBuilder({ indent: opts.indent });\n\n    push('HttpRequest request = HttpRequest.newBuilder()');\n    push(`.uri(URI.create(\"${fullUrl}\"))`, 2);\n\n    Object.keys(allHeaders).forEach(key => {\n      push(`.header(\"${key}\", \"${escapeForDoubleQuotes(allHeaders[key])}\")`, 2);\n    });\n\n    if (postData.text) {\n      push(\n        `.method(\"${method.toUpperCase()}\", HttpRequest.BodyPublishers.ofString(${JSON.stringify(postData.text)}))`,\n        2,\n      );\n    } else {\n      push(`.method(\"${method.toUpperCase()}\", HttpRequest.BodyPublishers.noBody())`, 2);\n    }\n\n    push('.build();', 2);\n\n    push(\n      'HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());',\n    );\n    push('System.out.println(response.body());');\n\n    return join();\n  },\n};\n","/**\n * @description\n * HTTP code snippet generator for Java using OkHttp.\n *\n * @author\n * @shashiranjan84\n *\n * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author.\n */\nimport type { Client } from '../../index.js';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\nimport { escapeForDoubleQuotes } from '../../../helpers/escape.js';\n\nexport const okhttp: Client = {\n  info: {\n    key: 'okhttp',\n    title: 'OkHttp',\n    link: 'http://square.github.io/okhttp/',\n    description: 'An HTTP Request Client Library',\n    extname: '.java',\n  },\n  convert: ({ postData, method, fullUrl, allHeaders }, options) => {\n    const opts = {\n      indent: '  ',\n      ...options,\n    };\n    const { push, blank, join } = new CodeBuilder({ indent: opts.indent });\n\n    const methods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD'];\n    const methodsWithBody = ['POST', 'PUT', 'DELETE', 'PATCH'];\n\n    push('OkHttpClient client = new OkHttpClient();');\n    blank();\n\n    if (postData.text) {\n      if (postData.boundary) {\n        push(`MediaType mediaType = MediaType.parse(\"${postData.mimeType}; boundary=${postData.boundary}\");`);\n      } else {\n        push(`MediaType mediaType = MediaType.parse(\"${postData.mimeType}\");`);\n      }\n      push(`RequestBody body = RequestBody.create(mediaType, ${JSON.stringify(postData.text)});`);\n    }\n\n    push('Request request = new Request.Builder()');\n    push(`.url(\"${fullUrl}\")`, 1);\n    if (!methods.includes(method.toUpperCase())) {\n      if (postData.text) {\n        push(`.method(\"${method.toUpperCase()}\", body)`, 1);\n      } else {\n        push(`.method(\"${method.toUpperCase()}\", null)`, 1);\n      }\n    } else if (methodsWithBody.includes(method.toUpperCase())) {\n      if (postData.text) {\n        push(`.${method.toLowerCase()}(body)`, 1);\n      } else {\n        push(`.${method.toLowerCase()}(null)`, 1);\n      }\n    } else {\n      push(`.${method.toLowerCase()}()`, 1);\n    }\n\n    // Add headers, including the cookies\n    Object.keys(allHeaders).forEach(key => {\n      push(`.addHeader(\"${key}\", \"${escapeForDoubleQuotes(allHeaders[key])}\")`, 1);\n    });\n\n    push('.build();', 1);\n    blank();\n    push('Response response = client.newCall(request).execute();');\n\n    return join();\n  },\n};\n","/**\n * @description\n * HTTP code snippet generator for Java using Unirest.\n *\n * @author\n * @shashiranjan84\n *\n * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author.\n */\nimport type { Client } from '../../index.js';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\nimport { escapeForDoubleQuotes } from '../../../helpers/escape.js';\n\nexport const unirest: Client = {\n  info: {\n    key: 'unirest',\n    title: 'Unirest',\n    link: 'http://unirest.io/java.html',\n    description: 'Lightweight HTTP Request Client Library',\n    extname: '.java',\n  },\n  convert: ({ method, allHeaders, postData, fullUrl }, options) => {\n    const opts = {\n      indent: '  ',\n      ...options,\n    };\n\n    const { join, push } = new CodeBuilder({ indent: opts.indent });\n\n    const methods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS'];\n\n    if (!methods.includes(method.toUpperCase())) {\n      push(`HttpResponse<String> response = Unirest.customMethod(\"${method.toUpperCase()}\",\"${fullUrl}\")`);\n    } else {\n      push(`HttpResponse<String> response = Unirest.${method.toLowerCase()}(\"${fullUrl}\")`);\n    }\n\n    // Add headers, including the cookies\n    Object.keys(allHeaders).forEach(key => {\n      push(`.header(\"${key}\", \"${escapeForDoubleQuotes(allHeaders[key])}\")`, 1);\n    });\n\n    if (postData.text) {\n      push(`.body(${JSON.stringify(postData.text)})`, 1);\n    }\n\n    push('.asString();', 1);\n\n    return join();\n  },\n};\n","import type { Target } from '../index.js';\n\nimport { asynchttp } from './asynchttp/client.js';\nimport { nethttp } from './nethttp/client.js';\nimport { okhttp } from './okhttp/client.js';\nimport { unirest } from './unirest/client.js';\n\nexport const java: Target = {\n  info: {\n    key: 'java',\n    title: 'Java',\n    default: 'unirest',\n  },\n\n  clientsById: {\n    asynchttp,\n    nethttp,\n    okhttp,\n    unirest,\n  },\n};\n","/**\n * @description\n * HTTP code snippet generator for Javascript & Node.js using Axios.\n *\n * @author\n * @rohit-gohri\n *\n * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author.\n */\nimport type { Client } from '../../index.js';\n\nimport stringifyObject from 'stringify-object';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\n\nexport const axios: Client = {\n  info: {\n    key: 'axios',\n    title: 'Axios',\n    link: 'https://github.com/axios/axios',\n    description: 'Promise based HTTP client for the browser and node.js',\n    extname: '.js',\n    installation: 'npm install axios --save',\n  },\n  convert: ({ allHeaders, method, url, queryObj, postData }, options) => {\n    const opts = {\n      indent: '  ',\n      ...options,\n    };\n\n    const { blank, push, join, addPostProcessor } = new CodeBuilder({ indent: opts.indent });\n\n    push(\"import axios from 'axios';\");\n    blank();\n\n    const requestOptions: Record<string, any> = {\n      method,\n      url,\n    };\n\n    if (Object.keys(queryObj).length) {\n      requestOptions.params = queryObj;\n    }\n\n    if (Object.keys(allHeaders).length) {\n      requestOptions.headers = allHeaders;\n    }\n\n    switch (postData.mimeType) {\n      case 'application/x-www-form-urlencoded':\n        if (postData.params) {\n          push('const encodedParams = new URLSearchParams();');\n          postData.params.forEach(param => {\n            push(`encodedParams.set('${param.name}', '${param.value}');`);\n          });\n\n          blank();\n\n          requestOptions.data = 'encodedParams,';\n          addPostProcessor(code => code.replace(/'encodedParams,'/, 'encodedParams,'));\n        }\n\n        break;\n\n      case 'application/json':\n        if (postData.jsonObj) {\n          requestOptions.data = postData.jsonObj;\n        }\n        break;\n\n      case 'multipart/form-data':\n        if (!postData.params) {\n          break;\n        }\n\n        push('const form = new FormData();');\n\n        postData.params.forEach(param => {\n          push(`form.append('${param.name}', '${param.value || param.fileName || ''}');`);\n        });\n\n        blank();\n\n        requestOptions.data = '[form]';\n        break;\n\n      default:\n        if (postData.text) {\n          requestOptions.data = postData.text;\n        }\n    }\n\n    const optionString = stringifyObject(requestOptions, {\n      indent: '  ',\n      inlineCharacterLimit: 80,\n    }).replace('\"[form]\"', 'form');\n    push(`const options = ${optionString};`);\n    blank();\n\n    push('axios');\n    push('.request(options)', 1);\n    push('.then(function (response) {', 1);\n    push('console.log(response.data);', 2);\n    push('})', 1);\n    push('.catch(function (error) {', 1);\n    push('console.error(error);', 2);\n    push('});', 1);\n\n    return join();\n  },\n};\n","/**\n * @description\n * HTTP code snippet generator for fetch\n *\n * @author\n * @pmdroid\n *\n * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author.\n */\nimport type { Client } from '../../index.js';\n\nimport stringifyObject from 'stringify-object';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\nimport { getHeaderName } from '../../../helpers/headers.js';\n\ninterface FetchOptions {\n  credentials?: Record<string, string> | null;\n}\n\nexport const fetch: Client<FetchOptions> = {\n  info: {\n    key: 'fetch',\n    title: 'fetch',\n    link: 'https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch',\n    description: 'Perform asynchronous HTTP requests with the Fetch API',\n    extname: '.js',\n  },\n  convert: ({ method, allHeaders, postData, fullUrl }, inputOpts) => {\n    const opts = {\n      indent: '  ',\n      credentials: null,\n      ...inputOpts,\n    };\n\n    const { blank, join, push } = new CodeBuilder({ indent: opts.indent });\n\n    const options: Record<string, any> = {\n      method,\n    };\n\n    if (Object.keys(allHeaders).length) {\n      options.headers = allHeaders;\n    }\n\n    if (opts.credentials !== null) {\n      options.credentials = opts.credentials;\n    }\n\n    switch (postData.mimeType) {\n      case 'application/x-www-form-urlencoded':\n        options.body = postData.paramsObj ? postData.paramsObj : postData.text;\n        break;\n\n      case 'application/json':\n        if (postData.jsonObj) {\n          // Though `fetch` doesn't accept JSON objects in the `body` option we're going to\n          // stringify it when we add this into the snippet further down.\n          options.body = postData.jsonObj;\n        }\n        break;\n\n      case 'multipart/form-data':\n        if (!postData.params) {\n          break;\n        }\n\n        // The FormData API automatically adds a `Content-Type` header for `multipart/form-data` content and if we add our own here data won't be correctly transmitted.\n        // eslint-disable-next-line no-case-declarations -- We're only using `contentTypeHeader` within this block.\n        const contentTypeHeader = getHeaderName(allHeaders, 'content-type');\n        if (contentTypeHeader) {\n          delete allHeaders[contentTypeHeader];\n        }\n\n        push('const form = new FormData();');\n\n        postData.params.forEach(param => {\n          push(`form.append('${param.name}', '${param.value || param.fileName || ''}');`);\n        });\n\n        blank();\n        break;\n\n      default:\n        if (postData.text) {\n          options.body = postData.text;\n        }\n    }\n\n    // If we ultimately don't have any headers to send then we shouldn't add an empty object into the request options.\n    if (options.headers && !Object.keys(options.headers).length) {\n      delete options.headers;\n    }\n\n    push(\n      `const options = ${stringifyObject(options, {\n        indent: opts.indent,\n        inlineCharacterLimit: 80,\n\n        // The Fetch API body only accepts string parameters, but stringified JSON can be difficult\n        // to read, so we keep the object as a literal and use this transform function to wrap the\n        // literal in a `JSON.stringify` call.\n        transform: (object, property, originalResult) => {\n          if (property === 'body') {\n            if (postData.mimeType === 'application/x-www-form-urlencoded') {\n              return `new URLSearchParams(${originalResult})`;\n            } else if (postData.mimeType === 'application/json') {\n              return `JSON.stringify(${originalResult})`;\n            }\n          }\n\n          return originalResult;\n        },\n      })};`,\n    );\n    blank();\n\n    if (postData.params && postData.mimeType === 'multipart/form-data') {\n      push('options.body = form;');\n      blank();\n    }\n\n    push(`fetch('${fullUrl}', options)`);\n    push('.then(response => response.json())', 1);\n    push('.then(response => console.log(response))', 1);\n    push('.catch(err => console.error(err));', 1);\n\n    return join();\n  },\n};\n","/**\n * @description\n * HTTP code snippet generator for native XMLHttpRequest\n *\n * @author\n * @AhmadNassri\n *\n * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author.\n */\nimport type { Client } from '../../index.js';\n\nimport stringifyObject from 'stringify-object';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\nimport { getHeader, getHeaderName, hasHeader } from '../../../helpers/headers.js';\n\nexport const jquery: Client = {\n  info: {\n    key: 'jquery',\n    title: 'jQuery',\n    link: 'http://api.jquery.com/jquery.ajax/',\n    description: 'Perform an asynchronous HTTP (Ajax) requests with jQuery',\n    extname: '.js',\n  },\n  convert: ({ fullUrl, method, allHeaders, postData }, options) => {\n    const opts = {\n      indent: '  ',\n      ...options,\n    };\n\n    const { blank, push, join } = new CodeBuilder({ indent: opts.indent });\n\n    const settings: Record<string, any> = {\n      async: true,\n      crossDomain: true,\n      url: fullUrl,\n      method,\n      headers: allHeaders,\n    };\n\n    switch (postData.mimeType) {\n      case 'application/x-www-form-urlencoded':\n        settings.data = postData.paramsObj ? postData.paramsObj : postData.text;\n        break;\n\n      case 'application/json':\n        settings.processData = false;\n        settings.data = postData.text;\n        break;\n\n      case 'multipart/form-data':\n        if (!postData.params) {\n          break;\n        }\n\n        push('const form = new FormData();');\n\n        postData.params.forEach(param => {\n          push(`form.append('${param.name}', '${param.value || param.fileName || ''}');`);\n        });\n\n        settings.processData = false;\n        settings.contentType = false;\n        settings.mimeType = 'multipart/form-data';\n        settings.data = '[form]';\n\n        // remove the contentType header\n        if (hasHeader(allHeaders, 'content-type')) {\n          if (getHeader(allHeaders, 'content-type')?.includes('boundary')) {\n            const headerName = getHeaderName(allHeaders, 'content-type');\n            if (headerName) {\n              delete settings.headers[headerName];\n            }\n          }\n        }\n\n        blank();\n        break;\n\n      default:\n        if (postData.text) {\n          settings.data = postData.text;\n        }\n    }\n\n    const stringifiedSettings = stringifyObject(settings, { indent: opts.indent }).replace(\"'[form]'\", 'form');\n\n    push(`const settings = ${stringifiedSettings};`);\n    blank();\n    push('$.ajax(settings).done(function (response) {');\n    push('console.log(response);', 1);\n    push('});');\n\n    return join();\n  },\n};\n","/**\n * @description\n * HTTP code snippet generator for native XMLHttpRequest\n *\n * @author\n * @AhmadNassri\n *\n * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author.\n */\nimport type { Client } from '../../index.js';\n\nimport stringifyObject from 'stringify-object';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\nimport { escapeForSingleQuotes } from '../../../helpers/escape.js';\nimport { getHeader, getHeaderName, hasHeader } from '../../../helpers/headers.js';\n\nexport interface XhrOptions {\n  cors?: boolean;\n}\n\nexport const xhr: Client = {\n  info: {\n    key: 'xhr',\n    title: 'XMLHttpRequest',\n    link: 'https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest',\n    description: 'W3C Standard API that provides scripted client functionality',\n    extname: '.js',\n  },\n  convert: ({ postData, allHeaders, method, fullUrl }, options) => {\n    const opts = {\n      indent: '  ',\n      cors: true,\n      ...options,\n    };\n\n    const { blank, push, join } = new CodeBuilder({ indent: opts.indent });\n\n    switch (postData.mimeType) {\n      case 'application/json':\n        push(\n          `const data = JSON.stringify(${stringifyObject(postData.jsonObj, {\n            indent: opts.indent,\n          })});`,\n        );\n        blank();\n        break;\n\n      case 'multipart/form-data':\n        if (!postData.params) {\n          break;\n        }\n\n        push('const data = new FormData();');\n\n        postData.params.forEach(param => {\n          push(`data.append('${param.name}', '${param.value || param.fileName || ''}');`);\n        });\n\n        // remove the contentType header\n        if (hasHeader(allHeaders, 'content-type')) {\n          if (getHeader(allHeaders, 'content-type')?.includes('boundary')) {\n            const headerName = getHeaderName(allHeaders, 'content-type');\n            if (headerName) {\n              delete allHeaders[headerName];\n            }\n          }\n        }\n\n        blank();\n        break;\n\n      default:\n        push(`const data = ${postData.text ? `'${postData.text}'` : 'null'};`);\n        blank();\n    }\n\n    push('const xhr = new XMLHttpRequest();');\n\n    if (opts.cors) {\n      push('xhr.withCredentials = true;');\n    }\n\n    blank();\n    push(\"xhr.addEventListener('readystatechange', function () {\");\n    push('if (this.readyState === this.DONE) {', 1);\n    push('console.log(this.responseText);', 2);\n    push('}', 1);\n    push('});');\n    blank();\n    push(`xhr.open('${method}', '${fullUrl}');`);\n\n    Object.keys(allHeaders).forEach(key => {\n      push(`xhr.setRequestHeader('${key}', '${escapeForSingleQuotes(allHeaders[key])}');`);\n    });\n\n    blank();\n    push('xhr.send(data);');\n\n    return join();\n  },\n};\n","import type { Target } from '../index.js';\n\nimport { axios } from './axios/client.js';\nimport { fetch } from './fetch/client.js';\nimport { jquery } from './jquery/client.js';\nimport { xhr } from './xhr/client.js';\n\nexport const javascript: Target = {\n  info: {\n    key: 'javascript',\n    title: 'JavaScript',\n    default: 'xhr',\n  },\n\n  clientsById: {\n    xhr,\n    axios,\n    fetch,\n    jquery,\n  },\n};\n","/**\n * @description\n * HTTP code snippet generator to generate raw JSON payload objects.\n *\n * @author\n * @erunion\n *\n * For any questions or issues regarding the generated code snippet, please open an issue mentioning the author.\n */\nimport type { ReducedHelperObject } from '../../../helpers/reducer.js';\nimport type { Client } from '../../index.js';\n\nexport const native: Client = {\n  info: {\n    key: 'native',\n    title: 'Native JSON',\n    link: 'https://www.json.org/json-en.html',\n    description: 'A JSON represetation of any HAR payload.',\n    extname: '.json',\n  },\n  convert: ({ postData }, inputOpts) => {\n    const opts = {\n      indent: '  ',\n      ...inputOpts,\n    };\n\n    let payload: ReducedHelperObject | string | undefined = '';\n\n    switch (postData.mimeType) {\n      case 'application/x-www-form-urlencoded':\n        payload = postData.paramsObj ? postData.paramsObj : postData.text;\n        break;\n\n      case 'application/json':\n        if (postData.jsonObj) {\n          payload = postData.jsonObj;\n        }\n        break;\n\n      case 'multipart/form-data':\n        if (!postData.params) {\n          break;\n        }\n\n        // eslint-disable-next-line no-case-declarations\n        const multipartPayload: Record<string, any> = {};\n        postData.params.forEach(param => {\n          multipartPayload[param.name] = param.value;\n        });\n\n        payload = multipartPayload;\n        break;\n\n      default:\n        if (postData.text) {\n          payload = postData.text;\n        }\n    }\n\n    if (typeof payload === 'undefined' || payload === '') {\n      return 'No JSON body';\n    }\n\n    return JSON.stringify(payload, null, opts.indent);\n  },\n};\n","import type { Target } from '../index.js';\n\nimport { native } from './native/client.js';\n\nexport const json: Target = {\n  info: {\n    key: 'json',\n    title: 'JSON',\n    default: 'native',\n  },\n  clientsById: {\n    native,\n  },\n};\n","/**\n * @description\n * HTTP code snippet generator for Kotlin using OkHttp.\n *\n * @author\n * @seanghay\n *\n * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author.\n */\nimport type { Client } from '../../index.js';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\nimport { escapeForDoubleQuotes } from '../../../helpers/escape.js';\n\nexport const okhttp: Client = {\n  info: {\n    key: 'okhttp',\n    title: 'OkHttp',\n    link: 'http://square.github.io/okhttp/',\n    description: 'An HTTP Request Client Library',\n    extname: '.kt',\n  },\n  convert: ({ postData, fullUrl, method, allHeaders }, options) => {\n    const opts = {\n      indent: '  ',\n      ...options,\n    };\n    const { blank, join, push } = new CodeBuilder({ indent: opts.indent });\n\n    const methods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD'];\n\n    const methodsWithBody = ['POST', 'PUT', 'DELETE', 'PATCH'];\n\n    push('val client = OkHttpClient()');\n    blank();\n\n    if (postData.text) {\n      if (postData.boundary) {\n        push(`val mediaType = MediaType.parse(\"${postData.mimeType}; boundary=${postData.boundary}\")`);\n      } else {\n        push(`val mediaType = MediaType.parse(\"${postData.mimeType}\")`);\n      }\n      push(`val body = RequestBody.create(mediaType, ${JSON.stringify(postData.text)})`);\n    }\n\n    push('val request = Request.Builder()');\n    push(`.url(\"${fullUrl}\")`, 1);\n    if (!methods.includes(method.toUpperCase())) {\n      if (postData.text) {\n        push(`.method(\"${method.toUpperCase()}\", body)`, 1);\n      } else {\n        push(`.method(\"${method.toUpperCase()}\", null)`, 1);\n      }\n    } else if (methodsWithBody.includes(method.toUpperCase())) {\n      if (postData.text) {\n        push(`.${method.toLowerCase()}(body)`, 1);\n      } else {\n        push(`.${method.toLowerCase()}(null)`, 1);\n      }\n    } else {\n      push(`.${method.toLowerCase()}()`, 1);\n    }\n\n    // Add headers, including the cookies\n    Object.keys(allHeaders).forEach(key => {\n      push(`.addHeader(\"${key}\", \"${escapeForDoubleQuotes(allHeaders[key])}\")`, 1);\n    });\n\n    push('.build()', 1);\n    blank();\n    push('val response = client.newCall(request).execute()');\n\n    return join();\n  },\n};\n","import type { Target } from '../index.js';\n\nimport { okhttp } from './okhttp/client.js';\n\nexport const kotlin: Target = {\n  info: {\n    key: 'kotlin',\n    title: 'Kotlin',\n    default: 'okhttp',\n  },\n  clientsById: {\n    okhttp,\n  },\n};\n","/**\n * @description\n * HTTP code snippet generator for Javascript & Node.js using Axios.\n *\n * @author\n * @rohit-gohri\n *\n * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author.\n */\nimport type { Client } from '../../index.js';\n\nimport stringifyObject from 'stringify-object';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\n\nexport const axios: Client = {\n  info: {\n    key: 'axios',\n    title: 'Axios',\n    link: 'https://github.com/axios/axios',\n    description: 'Promise based HTTP client for the browser and node.js',\n    extname: '.cjs',\n    installation: 'npm install axios --save',\n  },\n  convert: ({ method, fullUrl, allHeaders, postData }, options) => {\n    const opts = {\n      indent: '  ',\n      ...options,\n    };\n    const { blank, join, push, addPostProcessor } = new CodeBuilder({ indent: opts.indent });\n\n    push(\"const axios = require('axios');\");\n\n    const reqOpts: Record<string, any> = {\n      method,\n      url: fullUrl,\n    };\n\n    if (Object.keys(allHeaders).length) {\n      reqOpts.headers = allHeaders;\n    }\n\n    switch (postData.mimeType) {\n      case 'application/x-www-form-urlencoded':\n        if (postData.params) {\n          push(\"const { URLSearchParams } = require('url');\");\n          blank();\n\n          push('const encodedParams = new URLSearchParams();');\n          postData.params.forEach(param => {\n            push(`encodedParams.set('${param.name}', '${param.value}');`);\n          });\n\n          blank();\n\n          reqOpts.data = 'encodedParams,';\n          addPostProcessor(code => code.replace(/'encodedParams,'/, 'encodedParams,'));\n        }\n\n        break;\n\n      case 'application/json':\n        blank();\n        if (postData.jsonObj) {\n          reqOpts.data = postData.jsonObj;\n        }\n        break;\n\n      default:\n        blank();\n        if (postData.text) {\n          reqOpts.data = postData.text;\n        }\n    }\n\n    const stringifiedOptions = stringifyObject(reqOpts, { indent: '  ', inlineCharacterLimit: 80 });\n    push(`const options = ${stringifiedOptions};`);\n    blank();\n\n    push('axios');\n    push('.request(options)', 1);\n    push('.then(function (response) {', 1);\n    push('console.log(response.data);', 2);\n    push('})', 1);\n    push('.catch(function (error) {', 1);\n    push('console.error(error);', 2);\n    push('});', 1);\n\n    return join();\n  },\n};\n","/**\n * @description\n * HTTP code snippet generator for Node.js using node-fetch.\n *\n * @author\n * @hirenoble\n *\n * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author.\n */\nimport type { Client } from '../../index.js';\n\nimport stringifyObject from 'stringify-object';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\nimport { getHeaderName } from '../../../helpers/headers.js';\n\nexport const fetch: Client = {\n  info: {\n    key: 'fetch',\n    title: 'Fetch',\n    link: 'https://github.com/bitinn/node-fetch',\n    description: 'Simplified HTTP node-fetch client',\n    extname: '.cjs',\n    installation: 'npm install node-fetch@2 --save',\n  },\n  convert: ({ method, fullUrl, postData, headersObj, cookies }, options) => {\n    const opts = {\n      indent: '  ',\n      ...options,\n    };\n\n    let includeFS = false;\n    const { blank, push, join, unshift } = new CodeBuilder({ indent: opts.indent });\n\n    push(\"const fetch = require('node-fetch');\");\n    const url = fullUrl;\n    const reqOpts: Record<string, any> = {\n      method,\n    };\n\n    if (Object.keys(headersObj).length) {\n      reqOpts.headers = headersObj;\n    }\n\n    switch (postData.mimeType) {\n      case 'application/x-www-form-urlencoded':\n        unshift(\"const { URLSearchParams } = require('url');\");\n        push('const encodedParams = new URLSearchParams();');\n        blank();\n\n        postData.params?.forEach(param => {\n          push(`encodedParams.set('${param.name}', '${param.value}');`);\n        });\n\n        reqOpts.body = 'encodedParams';\n        break;\n\n      case 'application/json':\n        if (postData.jsonObj) {\n          // Though `fetch` doesn't accept JSON objects in the `body` option we're going to\n          // stringify it when we add this into the snippet further down.\n          reqOpts.body = postData.jsonObj;\n        }\n        break;\n\n      case 'multipart/form-data':\n        if (!postData.params) {\n          break;\n        }\n\n        // The `form-data` module automatically adds a `Content-Type` header for `multipart/form-data` content and if we add our own here data won't be correctly transmitted.\n        // eslint-disable-next-line no-case-declarations -- We're only using `contentTypeHeader` within this block.\n        const contentTypeHeader = getHeaderName(headersObj, 'content-type');\n        if (contentTypeHeader) {\n          delete headersObj[contentTypeHeader];\n        }\n\n        unshift(\"const FormData = require('form-data');\");\n        push('const formData = new FormData();');\n        blank();\n\n        postData.params.forEach(param => {\n          if (!param.fileName && !param.fileName && !param.contentType) {\n            push(`formData.append('${param.name}', '${param.value}');`);\n            return;\n          }\n\n          if (param.fileName) {\n            includeFS = true;\n            push(`formData.append('${param.name}', fs.createReadStream('${param.fileName}'));`);\n          }\n        });\n        break;\n\n      default:\n        if (postData.text) {\n          reqOpts.body = postData.text;\n        }\n    }\n\n    // construct cookies argument\n    if (cookies.length) {\n      const cookiesString = cookies\n        .map(({ name, value }) => `${encodeURIComponent(name)}=${encodeURIComponent(value)}`)\n        .join('; ');\n      if (reqOpts.headers) {\n        reqOpts.headers.cookie = cookiesString;\n      } else {\n        reqOpts.headers = {};\n        reqOpts.headers.cookie = cookiesString;\n      }\n    }\n    blank();\n    push(`const url = '${url}';`);\n\n    // If we ultimately don't have any headers to send then we shouldn't add an empty object into the request options.\n    if (reqOpts.headers && !Object.keys(reqOpts.headers).length) {\n      delete reqOpts.headers;\n    }\n\n    const stringifiedOptions = stringifyObject(reqOpts, {\n      indent: '  ',\n      inlineCharacterLimit: 80,\n\n      // The Fetch API body only accepts string parameters, but stringified JSON can be difficult to\n      // read, so we keep the object as a literal and use this transform function to wrap the literal\n      // in a `JSON.stringify` call.\n      transform: (object, property, originalResult) => {\n        if (property === 'body' && postData.mimeType === 'application/json') {\n          return `JSON.stringify(${originalResult})`;\n        }\n\n        return originalResult;\n      },\n    });\n    push(`const options = ${stringifiedOptions};`);\n    blank();\n\n    if (includeFS) {\n      unshift(\"const fs = require('fs');\");\n    }\n    if (postData.params && postData.mimeType === 'multipart/form-data') {\n      push('options.body = formData;');\n      blank();\n    }\n    push('fetch(url, options)');\n    push('.then(res => res.json())', 1);\n    push('.then(json => console.log(json))', 1);\n    push(\".catch(err => console.error('error:' + err));\", 1);\n\n    return join()\n      .replace(/'encodedParams'/, 'encodedParams')\n      .replace(/\"fs\\.createReadStream\\(\\\\\"(.+)\\\\\"\\)\"/, 'fs.createReadStream(\"$1\")');\n  },\n};\n","/**\n * @description\n * HTTP code snippet generator for native Node.js.\n *\n * @author\n * @AhmadNassri\n *\n * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author.\n */\nimport type { Client } from '../../index.js';\n\nimport stringifyObject from 'stringify-object';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\n\nexport const native: Client = {\n  info: {\n    key: 'native',\n    title: 'HTTP',\n    link: 'http://nodejs.org/api/http.html#http_http_request_options_callback',\n    description: 'Node.js native HTTP interface',\n    extname: '.cjs',\n  },\n  convert: ({ uriObj, method, allHeaders, postData }, options = {}) => {\n    const { indent = '  ' } = options;\n    const { blank, join, push, unshift } = new CodeBuilder({ indent });\n\n    const reqOpts = {\n      method,\n      hostname: uriObj.hostname,\n      port: uriObj.port,\n      path: uriObj.path,\n      headers: allHeaders,\n    };\n\n    push(`const http = require('${uriObj.protocol?.replace(':', '')}');`);\n\n    blank();\n    push(`const options = ${stringifyObject(reqOpts, { indent })};`);\n    blank();\n    push('const req = http.request(options, function (res) {');\n    push('const chunks = [];', 1);\n    blank();\n    push(\"res.on('data', function (chunk) {\", 1);\n    push('chunks.push(chunk);', 2);\n    push('});', 1);\n    blank();\n    push(\"res.on('end', function () {\", 1);\n    push('const body = Buffer.concat(chunks);', 2);\n    push('console.log(body.toString());', 2);\n    push('});', 1);\n    push('});');\n    blank();\n\n    switch (postData.mimeType) {\n      case 'application/x-www-form-urlencoded':\n        if (postData.paramsObj) {\n          unshift(\"const qs = require('querystring');\");\n          push(\n            `req.write(qs.stringify(${stringifyObject(postData.paramsObj, {\n              indent: '  ',\n              inlineCharacterLimit: 80,\n            })}));`,\n          );\n        }\n        break;\n\n      case 'application/json':\n        if (postData.jsonObj) {\n          push(\n            `req.write(JSON.stringify(${stringifyObject(postData.jsonObj, {\n              indent: '  ',\n              inlineCharacterLimit: 80,\n            })}));`,\n          );\n        }\n        break;\n\n      default:\n        if (postData.text) {\n          push(`req.write(${stringifyObject(postData.text, { indent })});`);\n        }\n    }\n\n    push('req.end();');\n\n    return join();\n  },\n};\n","/**\n * @description\n * HTTP code snippet generator for Node.js using Request.\n *\n * @author\n * @AhmadNassri\n *\n * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author.\n */\nimport type { Client } from '../../index.js';\n\nimport stringifyObject from 'stringify-object';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\n\nexport const request: Client = {\n  info: {\n    key: 'request',\n    title: 'Request',\n    link: 'https://github.com/request/request',\n    description: 'Simplified HTTP request client',\n    extname: '.cjs',\n    installation: 'npm install request --save',\n  },\n  convert: ({ method, url, fullUrl, postData, headersObj, cookies }, options) => {\n    const opts = {\n      indent: '  ',\n      ...options,\n    };\n\n    let includeFS = false;\n    const { push, blank, join, unshift, addPostProcessor } = new CodeBuilder({ indent: opts.indent });\n\n    push(\"const request = require('request');\");\n    blank();\n\n    const reqOpts: Record<string, any> = {\n      method,\n      url: fullUrl,\n    };\n\n    if (Object.keys(headersObj).length) {\n      reqOpts.headers = headersObj;\n    }\n\n    switch (postData.mimeType) {\n      case 'application/x-www-form-urlencoded':\n        reqOpts.form = postData.paramsObj;\n        break;\n\n      case 'application/json':\n        if (postData.jsonObj) {\n          reqOpts.body = postData.jsonObj;\n          reqOpts.json = true;\n        }\n        break;\n\n      case 'multipart/form-data':\n        if (!postData.params) {\n          break;\n        }\n\n        reqOpts.formData = {};\n\n        postData.params.forEach(param => {\n          if (!param.fileName && !param.fileName && !param.contentType) {\n            reqOpts.formData[param.name] = param.value;\n            return;\n          }\n\n          let attachment: {\n            options?: {\n              contentType: string | null;\n              filename: string;\n            };\n            value?: string;\n          } = {};\n\n          if (param.fileName) {\n            includeFS = true;\n            attachment = {\n              value: `fs.createReadStream(${param.fileName})`,\n              options: {\n                filename: param.fileName,\n                contentType: param.contentType ? param.contentType : null,\n              },\n            };\n          } else if (param.value) {\n            attachment.value = param.value;\n          }\n\n          reqOpts.formData[param.name] = attachment;\n        });\n\n        addPostProcessor(code => code.replace(/'fs\\.createReadStream\\((.*)\\)'/, \"fs.createReadStream('$1')\"));\n        break;\n\n      default:\n        if (postData.text) {\n          reqOpts.body = postData.text;\n        }\n    }\n\n    // construct cookies argument\n    if (cookies.length) {\n      reqOpts.jar = 'JAR';\n\n      push('const jar = request.jar();');\n\n      cookies.forEach(({ name, value }) => {\n        push(`jar.setCookie(request.cookie('${encodeURIComponent(name)}=${encodeURIComponent(value)}'), '${url}');`);\n      });\n      blank();\n      addPostProcessor(code => code.replace(/'JAR'/, 'jar'));\n    }\n\n    if (includeFS) {\n      unshift(\"const fs = require('fs');\");\n    }\n\n    push(`const options = ${stringifyObject(reqOpts, { indent: '  ', inlineCharacterLimit: 80 })};`);\n    blank();\n\n    push('request(options, function (error, response, body) {');\n    push('if (error) throw new Error(error);', 1);\n    blank();\n    push('console.log(body);', 1);\n    push('});');\n\n    return join();\n  },\n};\n","/**\n * @description\n * HTTP code snippet generator for Node.js using Unirest.\n *\n * @author\n * @AhmadNassri\n *\n * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author.\n */\nimport type { Client } from '../../index.js';\n\nimport stringifyObject from 'stringify-object';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\n\nexport const unirest: Client = {\n  info: {\n    key: 'unirest',\n    title: 'Unirest',\n    link: 'http://unirest.io/nodejs.html',\n    description: 'Lightweight HTTP Request Client Library',\n    extname: '.cjs',\n  },\n  convert: ({ method, url, cookies, queryObj, postData, headersObj }, options) => {\n    const opts = {\n      indent: '  ',\n      ...options,\n    };\n\n    let includeFS = false;\n    const { addPostProcessor, blank, join, push, unshift } = new CodeBuilder({\n      indent: opts.indent,\n    });\n\n    push(\"const unirest = require('unirest');\");\n    blank();\n    push(`const req = unirest('${method}', '${url}');`);\n    blank();\n\n    if (cookies.length) {\n      push('const CookieJar = unirest.jar();');\n\n      cookies.forEach(cookie => {\n        push(`CookieJar.add('${encodeURIComponent(cookie.name)}=${encodeURIComponent(cookie.value)}', '${url}');`);\n      });\n\n      push('req.jar(CookieJar);');\n      blank();\n    }\n\n    if (Object.keys(queryObj).length) {\n      push(`req.query(${stringifyObject(queryObj, { indent: opts.indent })});`);\n      blank();\n    }\n\n    if (Object.keys(headersObj).length) {\n      push(`req.headers(${stringifyObject(headersObj, { indent: opts.indent })});`);\n      blank();\n    }\n\n    switch (postData.mimeType) {\n      case 'application/x-www-form-urlencoded':\n        if (postData.paramsObj) {\n          push(`req.form(${stringifyObject(postData.paramsObj, { indent: opts.indent })});`);\n          blank();\n        }\n        break;\n\n      case 'application/json':\n        if (postData.jsonObj) {\n          push(\"req.type('json');\");\n          push(`req.send(${stringifyObject(postData.jsonObj, { indent: opts.indent })});`);\n          blank();\n        }\n        break;\n\n      case 'multipart/form-data': {\n        if (!postData.params) {\n          break;\n        }\n\n        const multipart: Record<string, string>[] = [];\n\n        postData.params.forEach(param => {\n          const part: Record<string, string> = {};\n\n          if (param.fileName && !param.value) {\n            includeFS = true;\n\n            part.body = `fs.createReadStream('${param.fileName}')`;\n            addPostProcessor(code => code.replace(/'fs\\.createReadStream\\(\\\\'(.+)\\\\'\\)'/, \"fs.createReadStream('$1')\"));\n          } else if (param.value) {\n            part.body = param.value;\n          }\n\n          if (part.body) {\n            if (param.contentType) {\n              part['content-type'] = param.contentType;\n            }\n\n            multipart.push(part);\n          }\n        });\n\n        push(`req.multipart(${stringifyObject(multipart, { indent: opts.indent })});`);\n        blank();\n        break;\n      }\n\n      default:\n        if (postData.text) {\n          push(`req.send(${stringifyObject(postData.text, { indent: opts.indent })});`);\n          blank();\n        }\n    }\n\n    if (includeFS) {\n      unshift(\"const fs = require('fs');\");\n    }\n\n    push('req.end(function (res) {');\n    push('if (res.error) throw new Error(res.error);', 1);\n    blank();\n\n    push('console.log(res.body);', 1);\n    push('});');\n\n    return join();\n  },\n};\n","import type { Target } from '../index.js';\n\nimport { axios } from './axios/client.js';\nimport { fetch } from './fetch/client.js';\nimport { native } from './native/client.js';\nimport { request } from './request/client.js';\nimport { unirest } from './unirest/client.js';\n\nexport const node: Target = {\n  info: {\n    key: 'node',\n    title: 'Node.js',\n    default: 'native',\n    cli: 'node %s',\n  },\n  clientsById: {\n    native,\n    request,\n    unirest,\n    axios,\n    fetch,\n  },\n};\n","/**\n * Create a string corresponding to a valid declaration and initialization of an Objective-C object literal.\n *\n * @param nsClass Class of the litteral\n * @param name Desired name of the instance\n * @param parameters Key-value object of parameters to translate to an Objective-C object litearal\n * @param indent If true, will declare the litteral by indenting each new key/value pair.\n * @return A valid Objective-C declaration and initialization of an Objective-C object litteral.\n *\n * @example\n *   nsDeclaration('NSDictionary', 'params', {a: 'b', c: 'd'}, true)\n *   // returns:\n *   NSDictionary *params = @{ @\"a\": @\"b\",\n *                             @\"c\": @\"d\" };\n *\n *   nsDeclaration('NSDictionary', 'params', {a: 'b', c: 'd'})\n *   // returns:\n *   NSDictionary *params = @{ @\"a\": @\"b\", @\"c\": @\"d\" };\n */\nexport const nsDeclaration = (nsClass: string, name: string, parameters: Record<string, any>, indent?: boolean) => {\n  const opening = `${nsClass} *${name} = `;\n  const literal = literalRepresentation(parameters, indent ? opening.length : undefined);\n  return `${opening}${literal};`;\n};\n\n/**\n * Create a valid Objective-C string of a literal value according to its type.\n *\n * @param value Any JavaScript literal\n */\nexport const literalRepresentation = (value: any, indentation?: number): string => {\n  const join = indentation === undefined ? ', ' : `,\\n   ${' '.repeat(indentation)}`;\n\n  switch (Object.prototype.toString.call(value)) {\n    case '[object Number]':\n      return `@${value}`;\n\n    case '[object Array]': {\n      const valuesRepresentation = value.map((val: any) => literalRepresentation(val));\n      return `@[ ${valuesRepresentation.join(join)} ]`;\n    }\n\n    case '[object Object]': {\n      const keyValuePairs: string[] = [];\n      Object.keys(value).forEach(key => {\n        keyValuePairs.push(`@\"${key}\": ${literalRepresentation(value[key])}`);\n      });\n      return `@{ ${keyValuePairs.join(join)} }`;\n    }\n\n    case '[object Boolean]':\n      return value ? '@YES' : '@NO';\n\n    default:\n      if (value === null || value === undefined) {\n        return '';\n      }\n      return `@\"${value.toString().replace(/\"/g, '\\\\\"')}\"`;\n  }\n};\n","/**\n * @description\n * HTTP code snippet generator for Objective-C using NSURLSession.\n *\n * @author\n * @thibaultCha\n *\n * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author.\n */\nimport type { Client } from '../../index.js';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\nimport { nsDeclaration } from '../helpers.js';\n\nexport interface NsurlsessionOptions {\n  pretty?: boolean;\n  timeout?: number;\n}\n\nexport const nsurlsession: Client<NsurlsessionOptions> = {\n  info: {\n    key: 'nsurlsession',\n    title: 'NSURLSession',\n    link: 'https://developer.apple.com/library/mac/documentation/Foundation/Reference/NSURLSession_class/index.html',\n    description: \"Foundation's NSURLSession request\",\n    extname: '.m',\n  },\n  convert: ({ allHeaders, postData, method, fullUrl }, options) => {\n    const opts = {\n      indent: '    ',\n      pretty: true,\n      timeout: 10,\n      ...options,\n    };\n\n    const { push, join, blank } = new CodeBuilder({ indent: opts.indent });\n    // Markers for headers to be created as literal objects and later be set on the NSURLRequest if exist\n    const req = {\n      hasHeaders: false,\n      hasBody: false,\n    };\n\n    // We just want to make sure people understand that is the only dependency\n    push('#import <Foundation/Foundation.h>');\n\n    if (Object.keys(allHeaders).length) {\n      req.hasHeaders = true;\n      blank();\n      push(nsDeclaration('NSDictionary', 'headers', allHeaders, opts.pretty));\n    }\n\n    if (postData.text || postData.jsonObj || postData.params) {\n      req.hasBody = true;\n\n      switch (postData.mimeType) {\n        case 'application/x-www-form-urlencoded':\n          if (postData.params?.length) {\n            // By appending parameters one by one in the resulting snippet,\n            // we make it easier for the user to edit it according to his or her needs after pasting.\n            // The user can just add/remove lines adding/removing body parameters.\n            blank();\n\n            const [head, ...tail] = postData.params;\n            push(\n              `NSMutableData *postData = [[NSMutableData alloc] initWithData:[@\"${head.name}=${head.value}\" dataUsingEncoding:NSUTF8StringEncoding]];`,\n            );\n\n            tail.forEach(({ name, value }) => {\n              push(`[postData appendData:[@\"&${name}=${value}\" dataUsingEncoding:NSUTF8StringEncoding]];`);\n            });\n          } else {\n            req.hasBody = false;\n          }\n          break;\n\n        case 'application/json':\n          if (postData.jsonObj) {\n            push(nsDeclaration('NSDictionary', 'parameters', postData.jsonObj, opts.pretty));\n            blank();\n            push('NSData *postData = [NSJSONSerialization dataWithJSONObject:parameters options:0 error:nil];');\n          }\n          break;\n\n        case 'multipart/form-data':\n          // By appending multipart parameters one by one in the resulting snippet,\n          // we make it easier for the user to edit it according to his or her needs after pasting.\n          // The user can just edit the parameters NSDictionary or put this part of a snippet in a multipart builder method.\n          push(nsDeclaration('NSArray', 'parameters', postData.params || [], opts.pretty));\n          push(`NSString *boundary = @\"${postData.boundary}\";`);\n          blank();\n          push('NSError *error;');\n          push('NSMutableString *body = [NSMutableString string];');\n          push('for (NSDictionary *param in parameters) {');\n          push('[body appendFormat:@\"--%@\\\\r\\\\n\", boundary];', 1);\n          push('if (param[@\"fileName\"]) {', 1);\n          push(\n            '[body appendFormat:@\"Content-Disposition:form-data; name=\\\\\"%@\\\\\"; filename=\\\\\"%@\\\\\"\\\\r\\\\n\", param[@\"name\"], param[@\"fileName\"]];',\n            2,\n          );\n          push('[body appendFormat:@\"Content-Type: %@\\\\r\\\\n\\\\r\\\\n\", param[@\"contentType\"]];', 2);\n          push(\n            '[body appendFormat:@\"%@\", [NSString stringWithContentsOfFile:param[@\"fileName\"] encoding:NSUTF8StringEncoding error:&error]];',\n            2,\n          );\n          push('if (error) {', 2);\n          push('NSLog(@\"%@\", error);', 3);\n          push('}', 2);\n          push('} else {', 1);\n          push('[body appendFormat:@\"Content-Disposition:form-data; name=\\\\\"%@\\\\\"\\\\r\\\\n\\\\r\\\\n\", param[@\"name\"]];', 2);\n          push('[body appendFormat:@\"%@\", param[@\"value\"]];', 2);\n          push('}', 1);\n          push('}');\n          push('[body appendFormat:@\"\\\\r\\\\n--%@--\\\\r\\\\n\", boundary];');\n          push('NSData *postData = [body dataUsingEncoding:NSUTF8StringEncoding];');\n          break;\n\n        default:\n          blank();\n          push(\n            `NSData *postData = [[NSData alloc] initWithData:[@\"${postData.text}\" dataUsingEncoding:NSUTF8StringEncoding]];`,\n          );\n      }\n    }\n\n    blank();\n    push(`NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@\"${fullUrl}\"]`);\n\n    // NSURLRequestUseProtocolCachePolicy is the default policy, let's just always set it to avoid confusion.\n    push('                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy');\n    push(`                                                   timeoutInterval:${opts.timeout.toFixed(1)}];`);\n    push(`[request setHTTPMethod:@\"${method}\"];`);\n\n    if (req.hasHeaders) {\n      push('[request setAllHTTPHeaderFields:headers];');\n    }\n\n    if (req.hasBody) {\n      push('[request setHTTPBody:postData];');\n    }\n\n    blank();\n\n    // Retrieving the shared session will be less verbose than creating a new one.\n    push('NSURLSession *session = [NSURLSession sharedSession];');\n    push('NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request');\n    push(\n      '                                            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {',\n    );\n    push('                                            if (error) {', 1);\n    push('                                            NSLog(@\"%@\", error);', 2);\n    push('                                            } else {', 1);\n\n    // Casting the NSURLResponse to NSHTTPURLResponse so the user can see the status     .\n    push(\n      '                                            NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;',\n      2,\n    );\n    push('                                            NSLog(@\"%@\", httpResponse);', 2);\n    push('                                            }', 1);\n    push('                                            }];');\n    push('[dataTask resume];');\n\n    return join();\n  },\n};\n","import type { Target } from '../index.js';\n\nimport { nsurlsession } from './nsurlsession/client.js';\n\nexport const objc: Target = {\n  info: {\n    key: 'objc',\n    title: 'Objective-C',\n    default: 'nsurlsession',\n  },\n  clientsById: {\n    nsurlsession,\n  },\n};\n","/**\n * @description\n * HTTP code snippet generator for OCaml using CoHTTP.\n *\n * @author\n * @SGrondin\n *\n * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author.\n */\nimport type { Client } from '../../index.js';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\nimport { escapeForDoubleQuotes } from '../../../helpers/escape.js';\n\nexport const cohttp: Client = {\n  info: {\n    key: 'cohttp',\n    title: 'CoHTTP',\n    link: 'https://github.com/mirage/ocaml-cohttp',\n    description: 'Cohttp is a very lightweight HTTP server using Lwt or Async for OCaml',\n    extname: '.ml',\n    installation: 'opam install cohttp-lwt-unix cohttp-async',\n  },\n  convert: ({ fullUrl, allHeaders, postData, method }, options) => {\n    const opts = {\n      indent: '  ',\n      ...options,\n    };\n\n    const methods = ['get', 'post', 'head', 'delete', 'patch', 'put', 'options'];\n    const { push, blank, join } = new CodeBuilder({ indent: opts.indent });\n\n    push('open Cohttp_lwt_unix');\n    push('open Cohttp');\n    push('open Lwt');\n    blank();\n    push(`let uri = Uri.of_string \"${fullUrl}\" in`);\n\n    // Add headers, including the cookies\n    const headers = Object.keys(allHeaders);\n\n    if (headers.length === 1) {\n      push(\n        `let headers = Header.add (Header.init ()) \"${headers[0]}\" \"${escapeForDoubleQuotes(\n          allHeaders[headers[0]],\n        )}\" in`,\n      );\n    } else if (headers.length > 1) {\n      push('let headers = Header.add_list (Header.init ()) [');\n      headers.forEach(key => {\n        push(`(\"${key}\", \"${escapeForDoubleQuotes(allHeaders[key])}\");`, 1);\n      });\n      push('] in');\n    }\n\n    // Add body\n    if (postData.text) {\n      // Just text\n      push(`let body = Cohttp_lwt_body.of_string ${JSON.stringify(postData.text)} in`);\n    }\n\n    // Do the request\n    blank();\n\n    const h = headers.length ? '~headers ' : '';\n    const b = postData.text ? '~body ' : '';\n    const m = methods.includes(method.toLowerCase())\n      ? `\\`${method.toUpperCase()}`\n      : `(Code.method_of_string \"${method}\")`;\n\n    push(`Client.call ${h}${b}${m} uri`);\n\n    // Catch result\n    push('>>= fun (res, body_stream) ->');\n    push('(* Do stuff with the result *)', 1);\n\n    return join();\n  },\n};\n","import type { Target } from '../index.js';\n\nimport { cohttp } from './cohttp/client.js';\n\nexport const ocaml: Target = {\n  info: {\n    key: 'ocaml',\n    title: 'OCaml',\n    default: 'cohttp',\n  },\n  clientsById: {\n    cohttp,\n  },\n};\n","import { escapeString } from '../../helpers/escape.js';\n\nexport const convertType = (obj: any[] | any, indent?: string, lastIndent?: string) => {\n  lastIndent = lastIndent || '';\n  indent = indent || '';\n\n  switch (Object.prototype.toString.call(obj)) {\n    case '[object Boolean]':\n      return obj;\n\n    case '[object Null]':\n      return 'null';\n\n    case '[object Undefined]':\n      return 'null';\n\n    case '[object String]':\n      return `'${escapeString(obj, { delimiter: \"'\", escapeNewlines: false })}'`;\n\n    case '[object Number]':\n      return obj.toString();\n\n    case '[object Array]': {\n      const contents = obj.map((item: any) => convertType(item, `${indent}${indent}`, indent)).join(`,\\n${indent}`);\n      return `[\\n${indent}${contents}\\n${lastIndent}]`;\n    }\n\n    case '[object Object]': {\n      const result: string[] = [];\n      // eslint-disable-next-line no-restricted-syntax\n      for (const i in obj) {\n        if (Object.prototype.hasOwnProperty.call(obj, i)) {\n          result.push(`${convertType(i, indent)} => ${convertType(obj[i], `${indent}${indent}`, indent)}`);\n        }\n      }\n      return `[\\n${indent}${result.join(`,\\n${indent}`)}\\n${lastIndent}]`;\n    }\n\n    default:\n      return 'null';\n  }\n};\n\nexport const supportedMethods = [\n  'ACL',\n  'BASELINE_CONTROL',\n  'CHECKIN',\n  'CHECKOUT',\n  'CONNECT',\n  'COPY',\n  'DELETE',\n  'GET',\n  'HEAD',\n  'LABEL',\n  'LOCK',\n  'MERGE',\n  'MKACTIVITY',\n  'MKCOL',\n  'MKWORKSPACE',\n  'MOVE',\n  'OPTIONS',\n  'POST',\n  'PROPFIND',\n  'PROPPATCH',\n  'PUT',\n  'REPORT',\n  'TRACE',\n  'UNCHECKOUT',\n  'UNLOCK',\n  'UPDATE',\n  'VERSION_CONTROL',\n];\n","/**\n * @description\n * HTTP code snippet generator for PHP using curl-ext.\n *\n * @author\n * @AhmadNassri\n *\n * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author.\n */\nimport type { Client } from '../../index.js';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\nimport { escapeForDoubleQuotes } from '../../../helpers/escape.js';\nimport { convertType } from '../helpers.js';\n\nexport interface CurlOptions {\n  closingTag?: boolean;\n  maxRedirects?: number;\n  namedErrors?: boolean;\n  noTags?: boolean;\n  shortTags?: boolean;\n  timeout?: number;\n}\n\nexport const curl: Client<CurlOptions> = {\n  info: {\n    key: 'curl',\n    title: 'cURL',\n    link: 'http://php.net/manual/en/book.curl.php',\n    description: 'PHP with ext-curl',\n    extname: '.php',\n  },\n  convert: ({ uriObj, postData, fullUrl, method, httpVersion, cookies, headersObj }, options = {}) => {\n    const {\n      closingTag = false,\n      indent = '  ',\n      maxRedirects = 10,\n      namedErrors = false,\n      noTags = false,\n      shortTags = false,\n      timeout = 30,\n    } = options;\n\n    const { push, blank, join } = new CodeBuilder({ indent });\n\n    if (!noTags) {\n      push(shortTags ? '<?' : '<?php');\n      blank();\n    }\n\n    push('$curl = curl_init();');\n    blank();\n\n    const curlOptions = [\n      {\n        escape: true,\n        name: 'CURLOPT_PORT',\n        value: uriObj.port,\n      },\n      {\n        escape: true,\n        name: 'CURLOPT_URL',\n        value: fullUrl,\n      },\n      {\n        escape: false,\n        name: 'CURLOPT_RETURNTRANSFER',\n        value: 'true',\n      },\n      {\n        escape: true,\n        name: 'CURLOPT_ENCODING',\n        value: '',\n      },\n      {\n        escape: false,\n        name: 'CURLOPT_MAXREDIRS',\n        value: maxRedirects,\n      },\n      {\n        escape: false,\n        name: 'CURLOPT_TIMEOUT',\n        value: timeout,\n      },\n      {\n        escape: false,\n        name: 'CURLOPT_HTTP_VERSION',\n        value: httpVersion === 'HTTP/1.0' ? 'CURL_HTTP_VERSION_1_0' : 'CURL_HTTP_VERSION_1_1',\n      },\n      {\n        escape: true,\n        name: 'CURLOPT_CUSTOMREQUEST',\n        value: method,\n      },\n      {\n        escape: !postData.jsonObj,\n        name: 'CURLOPT_POSTFIELDS',\n        value: postData\n          ? postData.jsonObj\n            ? `json_encode(${convertType(postData.jsonObj, indent.repeat(2), indent)})`\n            : postData.text\n          : undefined,\n      },\n    ];\n\n    push('curl_setopt_array($curl, [');\n\n    const curlopts = new CodeBuilder({ indent, join: `\\n${indent}` });\n\n    curlOptions.forEach(({ value, name, escape }) => {\n      if (value !== null && value !== undefined) {\n        curlopts.push(`${name} => ${escape ? JSON.stringify(value) : value},`);\n      }\n    });\n\n    // construct cookies\n    const curlCookies = cookies.map(cookie => `${encodeURIComponent(cookie.name)}=${encodeURIComponent(cookie.value)}`);\n    if (curlCookies.length) {\n      curlopts.push(`CURLOPT_COOKIE => \"${curlCookies.join('; ')}\",`);\n    }\n\n    // construct cookies\n    const headers = Object.keys(headersObj)\n      .sort()\n      .map(key => `\"${key}: ${escapeForDoubleQuotes(headersObj[key])}\"`);\n\n    if (headers.length) {\n      curlopts.push('CURLOPT_HTTPHEADER => [');\n      curlopts.push(headers.join(`,\\n${indent}${indent}`), 1);\n      curlopts.push('],');\n    }\n\n    push(curlopts.join(), 1);\n    push(']);');\n    blank();\n    push('$response = curl_exec($curl);');\n    push('$err = curl_error($curl);');\n    blank();\n    push('curl_close($curl);');\n    blank();\n    push('if ($err) {');\n\n    if (namedErrors) {\n      push('echo array_flip(get_defined_constants(true)[\"curl\"])[$err];', 1);\n    } else {\n      push('echo \"cURL Error #:\" . $err;', 1);\n    }\n\n    push('} else {');\n    push('echo $response;', 1);\n    push('}');\n\n    if (!noTags && closingTag) {\n      blank();\n      push('?>');\n    }\n\n    return join();\n  },\n};\n","/**\n * @description\n * HTTP code snippet generator for PHP using Guzzle.\n *\n * @author @RobertoArruda\n * @author @erunion\n *\n * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author.\n */\nimport type { Client } from '../../index.js';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\nimport { escapeForSingleQuotes } from '../../../helpers/escape.js';\nimport { getHeader, getHeaderName, hasHeader } from '../../../helpers/headers.js';\nimport { convertType } from '../helpers.js';\n\nexport interface GuzzleOptions {\n  closingTag?: boolean;\n  indent?: string;\n  noTags?: boolean;\n  shortTags?: boolean;\n}\n\nexport const guzzle: Client<GuzzleOptions> = {\n  info: {\n    key: 'guzzle',\n    title: 'Guzzle',\n    link: 'http://docs.guzzlephp.org/en/stable/',\n    description: 'PHP with Guzzle',\n    extname: '.php',\n    installation: 'composer require guzzlehttp/guzzle',\n  },\n  convert: ({ postData, fullUrl, method, cookies, headersObj }, options) => {\n    const opts = {\n      closingTag: false,\n      indent: '  ',\n      noTags: false,\n      shortTags: false,\n      ...options,\n    };\n\n    const { push, blank, join } = new CodeBuilder({ indent: opts.indent });\n    const { code: requestCode, push: requestPush, join: requestJoin } = new CodeBuilder({ indent: opts.indent });\n\n    if (!opts.noTags) {\n      push(opts.shortTags ? '<?' : '<?php');\n    }\n\n    push(\"require_once('vendor/autoload.php');\");\n    blank();\n\n    switch (postData.mimeType) {\n      case 'application/x-www-form-urlencoded':\n        requestPush(`'form_params' => ${convertType(postData.paramsObj, opts.indent + opts.indent, opts.indent)},`, 1);\n        break;\n\n      case 'multipart/form-data': {\n        interface MultipartField {\n          contents: string | undefined;\n          filename?: string;\n          headers?: Record<string, string>;\n          name: string;\n        }\n\n        const fields: MultipartField[] = [];\n\n        if (postData.params) {\n          postData.params.forEach(param => {\n            if (param.fileName) {\n              const field: MultipartField = {\n                name: param.name,\n                filename: param.fileName,\n                contents: param.value,\n              };\n\n              if (param.contentType) {\n                field.headers = { 'Content-Type': param.contentType };\n              }\n\n              fields.push(field);\n            } else if (param.value) {\n              fields.push({\n                name: param.name,\n                contents: param.value,\n              });\n            }\n          });\n        }\n\n        if (fields.length) {\n          requestPush(`'multipart' => ${convertType(fields, opts.indent + opts.indent, opts.indent)}`, 1);\n\n          // Guzzle adds its own boundary for multipart requests.\n          if (hasHeader(headersObj, 'content-type')) {\n            if (getHeader(headersObj, 'content-type')?.indexOf('boundary')) {\n              const headerName = getHeaderName(headersObj, 'content-type');\n              if (headerName) {\n                delete headersObj[headerName];\n              }\n            }\n          }\n        }\n        break;\n      }\n\n      default:\n        if (postData.text) {\n          requestPush(`'body' => ${convertType(postData.text)},`, 1);\n        }\n    }\n\n    // construct headers\n    const headers = Object.keys(headersObj)\n      .sort()\n      .map(function (key) {\n        return `${opts.indent}${opts.indent}'${key}' => '${escapeForSingleQuotes(headersObj[key])}',`;\n      });\n\n    // construct cookies\n    const cookieString = cookies\n      .map(cookie => `${encodeURIComponent(cookie.name)}=${encodeURIComponent(cookie.value)}`)\n      .join('; ');\n    if (cookieString.length) {\n      headers.push(`${opts.indent}${opts.indent}'cookie' => '${escapeForSingleQuotes(cookieString)}',`);\n    }\n\n    if (headers.length) {\n      requestPush(\"'headers' => [\", 1);\n      requestPush(headers.join('\\n'));\n      requestPush('],', 1);\n    }\n\n    push('$client = new \\\\GuzzleHttp\\\\Client();');\n    blank();\n\n    if (requestCode.length) {\n      push(`$response = $client->request('${method}', '${fullUrl}', [`);\n      push(requestJoin());\n      push(']);');\n    } else {\n      push(`$response = $client->request('${method}', '${fullUrl}');`);\n    }\n\n    blank();\n    push('echo $response->getBody();');\n\n    if (!opts.noTags && opts.closingTag) {\n      blank();\n      push('?>');\n    }\n\n    return join();\n  },\n};\n","/**\n * @description\n * HTTP code snippet generator for PHP using curl-ext.\n *\n * @author\n * @AhmadNassri\n *\n * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author.\n */\nimport type { Client } from '../../index.js';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\nimport { convertType, supportedMethods } from '../helpers.js';\n\nexport interface Http1Options {\n  closingTag?: boolean;\n  noTags?: boolean;\n  shortTags?: boolean;\n}\n\nexport const http1: Client<Http1Options> = {\n  info: {\n    key: 'http1',\n    title: 'HTTP v1',\n    link: 'http://php.net/manual/en/book.http.php',\n    description: 'PHP with pecl/http v1',\n    extname: '.php',\n  },\n  convert: ({ method, url, postData, queryObj, headersObj, cookiesObj }, options = {}) => {\n    const { closingTag = false, indent = '  ', noTags = false, shortTags = false } = options;\n\n    const { push, blank, join } = new CodeBuilder({ indent });\n\n    if (!noTags) {\n      push(shortTags ? '<?' : '<?php');\n      blank();\n    }\n\n    if (!supportedMethods.includes(method.toUpperCase())) {\n      push(`HttpRequest::methodRegister('${method}');`);\n    }\n\n    push('$request = new HttpRequest();');\n    push(`$request->setUrl(${convertType(url)});`);\n\n    if (supportedMethods.includes(method.toUpperCase())) {\n      push(`$request->setMethod(HTTP_METH_${method.toUpperCase()});`);\n    } else {\n      push(`$request->setMethod(HttpRequest::HTTP_METH_${method.toUpperCase()});`);\n    }\n\n    blank();\n\n    if (Object.keys(queryObj).length) {\n      push(`$request->setQueryData(${convertType(queryObj, indent)});`);\n      blank();\n    }\n\n    if (Object.keys(headersObj).length) {\n      push(`$request->setHeaders(${convertType(headersObj, indent)});`);\n      blank();\n    }\n\n    if (Object.keys(cookiesObj).length) {\n      push(`$request->setCookies(${convertType(cookiesObj, indent)});`);\n      blank();\n    }\n\n    switch (postData.mimeType) {\n      case 'application/x-www-form-urlencoded':\n        push(`$request->setContentType(${convertType(postData.mimeType)});`);\n        push(`$request->setPostFields(${convertType(postData.paramsObj, indent)});`);\n        blank();\n        break;\n\n      case 'application/json':\n        push(`$request->setContentType(${convertType(postData.mimeType)});`);\n        push(`$request->setBody(json_encode(${convertType(postData.jsonObj, indent)}));`);\n        blank();\n        break;\n\n      default:\n        if (postData.text) {\n          push(`$request->setBody(${convertType(postData.text)});`);\n          blank();\n        }\n    }\n\n    push('try {');\n    push('$response = $request->send();', 1);\n    blank();\n    push('echo $response->getBody();', 1);\n    push('} catch (HttpException $ex) {');\n    push('echo $ex;', 1);\n    push('}');\n\n    if (!noTags && closingTag) {\n      blank();\n      push('?>');\n    }\n\n    return join();\n  },\n};\n","/**\n * @description\n * HTTP code snippet generator for PHP using curl-ext.\n *\n * @author\n * @AhmadNassri\n *\n * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author.\n */\nimport type { Client } from '../../index.js';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\nimport { getHeader, getHeaderName, hasHeader } from '../../../helpers/headers.js';\nimport { convertType } from '../helpers.js';\n\nexport interface Http2Options {\n  closingTag?: boolean;\n  noTags?: boolean;\n  shortTags?: boolean;\n}\n\nexport const http2: Client<Http2Options> = {\n  info: {\n    key: 'http2',\n    title: 'HTTP v2',\n    link: 'http://devel-m6w6.rhcloud.com/mdref/http',\n    description: 'PHP with pecl/http v2',\n    extname: '.php',\n  },\n  convert: ({ postData, headersObj, method, queryObj, cookiesObj, url }, options = {}) => {\n    const { closingTag = false, indent = '  ', noTags = false, shortTags = false } = options;\n\n    const { push, blank, join } = new CodeBuilder({ indent });\n    let hasBody = false;\n\n    if (!noTags) {\n      push(shortTags ? '<?' : '<?php');\n      blank();\n    }\n\n    push('$client = new http\\\\Client;');\n    push('$request = new http\\\\Client\\\\Request;');\n    blank();\n\n    switch (postData.mimeType) {\n      case 'application/x-www-form-urlencoded':\n        push('$body = new http\\\\Message\\\\Body;');\n        push(`$body->append(new http\\\\QueryString(${convertType(postData.paramsObj, indent)}));`);\n        blank();\n        hasBody = true;\n        break;\n\n      case 'multipart/form-data': {\n        if (!postData.params) {\n          break;\n        }\n\n        const files: {\n          [anything: string]: string | undefined;\n          data: string | undefined;\n          file: string;\n          name: string;\n          type: string | undefined;\n        }[] = [];\n        const fields: Record<string, any> = {};\n        postData.params.forEach(({ name, fileName, value, contentType }) => {\n          if (fileName) {\n            files.push({\n              name,\n              type: contentType,\n              file: fileName,\n              data: value,\n            });\n            return;\n          }\n          if (value) {\n            fields[name] = value;\n          }\n        });\n\n        const field = Object.keys(fields).length ? convertType(fields, indent) : 'null';\n        const formValue = files.length ? convertType(files, indent) : 'null';\n\n        push('$body = new http\\\\Message\\\\Body;');\n        push(`$body->addForm(${field}, ${formValue});`);\n\n        // remove the contentType header\n        if (hasHeader(headersObj, 'content-type')) {\n          if (getHeader(headersObj, 'content-type')?.indexOf('boundary')) {\n            const headerName = getHeaderName(headersObj, 'content-type');\n            if (headerName) {\n              delete headersObj[headerName];\n            }\n          }\n        }\n\n        blank();\n\n        hasBody = true;\n        break;\n      }\n\n      case 'application/json':\n        push('$body = new http\\\\Message\\\\Body;');\n        push(`$body->append(json_encode(${convertType(postData.jsonObj, indent)}));`);\n        hasBody = true;\n        break;\n\n      default:\n        if (postData.text) {\n          push('$body = new http\\\\Message\\\\Body;');\n          push(`$body->append(${convertType(postData.text)});`);\n          blank();\n          hasBody = true;\n        }\n    }\n\n    push(`$request->setRequestUrl(${convertType(url)});`);\n    push(`$request->setRequestMethod(${convertType(method)});`);\n\n    if (hasBody) {\n      push('$request->setBody($body);');\n      blank();\n    }\n\n    if (Object.keys(queryObj).length) {\n      push(`$request->setQuery(new http\\\\QueryString(${convertType(queryObj, indent)}));`);\n      blank();\n    }\n\n    if (Object.keys(headersObj).length) {\n      push(`$request->setHeaders(${convertType(headersObj, indent)});`);\n      blank();\n    }\n\n    if (Object.keys(cookiesObj).length) {\n      blank();\n      push(`$client->setCookies(${convertType(cookiesObj, indent)});`);\n      blank();\n    }\n\n    push('$client->enqueue($request)->send();');\n    push('$response = $client->getResponse();');\n    blank();\n    push('echo $response->getBody();');\n\n    if (!noTags && closingTag) {\n      blank();\n      push('?>');\n    }\n\n    return join();\n  },\n};\n","import type { Target } from '../index.js';\n\nimport { curl } from './curl/client.js';\nimport { guzzle } from './guzzle/client.js';\nimport { http1 } from './http1/client.js';\nimport { http2 } from './http2/client.js';\n\nexport const php: Target = {\n  info: {\n    key: 'php',\n    title: 'PHP',\n    default: 'curl',\n    cli: 'php %s',\n  },\n  clientsById: {\n    curl,\n    guzzle,\n    http1,\n    http2,\n  },\n};\n","import type { Converter } from '../index.js';\n\nimport { CodeBuilder } from '../../helpers/code-builder.js';\nimport { escapeString } from '../../helpers/escape.js';\nimport { getHeader } from '../../helpers/headers.js';\n\nexport type PowershellCommand = 'Invoke-RestMethod' | 'Invoke-WebRequest';\n\nexport const generatePowershellConvert = (command: PowershellCommand) => {\n  const convert: Converter<any> = ({ method, headersObj, cookies, uriObj, fullUrl, postData, allHeaders }) => {\n    const { push, join } = new CodeBuilder();\n    const methods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS'];\n\n    if (!methods.includes(method.toUpperCase())) {\n      return 'Method not supported';\n    }\n\n    const commandOptions = [];\n\n    // Add headers, including the cookies\n    const headers = Object.keys(headersObj);\n\n    // construct headers\n    if (headers.length) {\n      push('$headers=@{}');\n      headers.forEach(key => {\n        if (key !== 'connection') {\n          // Not allowed\n          push(`$headers.Add(\"${key}\", \"${escapeString(headersObj[key], { escapeChar: '`' })}\")`);\n        }\n      });\n      commandOptions.push('-Headers $headers');\n    }\n\n    // construct cookies\n    if (cookies.length) {\n      push('$session = New-Object Microsoft.PowerShell.Commands.WebRequestSession');\n\n      cookies.forEach(cookie => {\n        push('$cookie = New-Object System.Net.Cookie');\n\n        push(`$cookie.Name = '${cookie.name}'`);\n        push(`$cookie.Value = '${cookie.value}'`);\n        push(`$cookie.Domain = '${uriObj.host}'`);\n\n        push('$session.Cookies.Add($cookie)');\n      });\n      commandOptions.push('-WebSession $session');\n    }\n\n    if (postData.text) {\n      commandOptions.push(\n        `-ContentType '${escapeString(getHeader(allHeaders, 'content-type'), { delimiter: \"'\", escapeChar: '`' })}'`,\n      );\n      commandOptions.push(`-Body '${postData.text}'`);\n    }\n\n    push(`$response = ${command} -Uri '${fullUrl}' -Method ${method} ${commandOptions.join(' ')}`.trim());\n    return join();\n  };\n  return convert;\n};\n","import type { Client } from '../../index.js';\n\nimport { generatePowershellConvert } from '../common.js';\n\nexport const restmethod: Client = {\n  info: {\n    key: 'restmethod',\n    title: 'Invoke-RestMethod',\n    link: 'https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Utility/Invoke-RestMethod',\n    description: 'Powershell Invoke-RestMethod client',\n    extname: '.ps1',\n  },\n  convert: generatePowershellConvert('Invoke-RestMethod'),\n};\n","import type { Client } from '../../index.js';\n\nimport { generatePowershellConvert } from '../common.js';\n\nexport const webrequest: Client = {\n  info: {\n    key: 'webrequest',\n    title: 'Invoke-WebRequest',\n    link: 'https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Utility/Invoke-WebRequest',\n    description: 'Powershell Invoke-WebRequest client',\n    extname: '.ps1',\n  },\n  convert: generatePowershellConvert('Invoke-WebRequest'),\n};\n","import type { Target } from '../index.js';\n\nimport { restmethod } from './restmethod/client.js';\nimport { webrequest } from './webrequest/client.js';\n\nexport const powershell: Target = {\n  info: {\n    key: 'powershell',\n    title: 'Powershell',\n    default: 'webrequest',\n  },\n  clientsById: {\n    webrequest,\n    restmethod,\n  },\n};\n","/**\n * Create a string corresponding to a Dictionary or Array literal representation with pretty option\n * and indentation.\n */\nfunction concatValues(\n  concatType: 'array' | 'object',\n  values: any,\n  pretty: boolean,\n  indentation: string,\n  indentLevel: number,\n) {\n  const currentIndent = indentation.repeat(indentLevel);\n  const closingBraceIndent = indentation.repeat(indentLevel - 1);\n  const join = pretty ? `,\\n${currentIndent}` : ', ';\n  const openingBrace = concatType === 'object' ? '{' : '[';\n  const closingBrace = concatType === 'object' ? '}' : ']';\n\n  if (pretty) {\n    return `${openingBrace}\\n${currentIndent}${values.join(join)}\\n${closingBraceIndent}${closingBrace}`;\n  }\n\n  if (concatType === 'object' && values.length > 0) {\n    return `${openingBrace} ${values.join(join)} ${closingBrace}`;\n  }\n\n  return `${openingBrace}${values.join(join)}${closingBrace}`;\n}\n\n/**\n * Create a valid Python string of a literal value according to its type.\n *\n * @param {*} value Any JavaScript literal\n * @param {Object} opts Target options\n * @return {string}\n */\nexport const literalRepresentation = (value: any, opts: Record<string, any>, indentLevel?: number): any => {\n  indentLevel = indentLevel === undefined ? 1 : indentLevel + 1;\n\n  switch (Object.prototype.toString.call(value)) {\n    case '[object Number]':\n      return value;\n\n    case '[object Array]': {\n      let pretty = false;\n      const valuesRepresentation: any = (value as any[]).map(v => {\n        // Switch to prettify if the value is a dictionary with multiple keys\n        if (Object.prototype.toString.call(v) === '[object Object]') {\n          pretty = Object.keys(v).length > 1;\n        }\n        return literalRepresentation(v, opts, indentLevel);\n      });\n      return concatValues('array', valuesRepresentation, pretty, opts.indent, indentLevel);\n    }\n\n    case '[object Object]': {\n      const keyValuePairs = [];\n      // eslint-disable-next-line guard-for-in, no-restricted-syntax\n      for (const key in value) {\n        keyValuePairs.push(`\"${key}\": ${literalRepresentation(value[key], opts, indentLevel)}`);\n      }\n\n      return concatValues('object', keyValuePairs, opts.pretty && keyValuePairs.length > 1, opts.indent, indentLevel);\n    }\n\n    case '[object Null]':\n      return 'None';\n\n    case '[object Boolean]':\n      return value ? 'True' : 'False';\n\n    default:\n      if (value === null || value === undefined) {\n        return '';\n      }\n      return `\"${value.toString().replace(/\"/g, '\\\\\"')}\"`;\n  }\n};\n","/**\n * @description\n * HTTP code snippet generator for Python using Requests\n *\n * @author\n * @montanaflynn\n *\n * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author.\n */\nimport type { Client } from '../../index.js';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\nimport { escapeForDoubleQuotes } from '../../../helpers/escape.js';\nimport { getHeaderName } from '../../../helpers/headers.js';\nimport { literalRepresentation } from '../helpers.js';\n\nconst builtInMethods = ['HEAD', 'GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'];\n\nexport interface RequestsOptions {\n  pretty?: true;\n}\n\nexport const requests: Client<RequestsOptions> = {\n  info: {\n    key: 'requests',\n    title: 'Requests',\n    link: 'http://docs.python-requests.org/en/latest/api/#requests.request',\n    description: 'Requests HTTP library',\n    extname: '.py',\n    installation: 'python -m pip install requests',\n  },\n  convert: ({ fullUrl, postData, allHeaders, method }, options) => {\n    const opts = {\n      indent: '    ',\n      pretty: true,\n      ...options,\n    };\n    // Start snippet\n    const { push, blank, join, addPostProcessor } = new CodeBuilder({ indent: opts.indent });\n\n    // Import requests\n    push('import requests');\n    blank();\n\n    // Set URL\n    push(`url = \"${fullUrl}\"`);\n    blank();\n\n    const headers = allHeaders;\n\n    // Construct payload\n    let payload: Record<string, any> = {};\n    const files: Record<string, string> = {};\n\n    let hasFiles = false;\n    let hasPayload = false;\n    let jsonPayload = false;\n    switch (postData.mimeType) {\n      case 'application/json':\n        if (postData.jsonObj) {\n          push(`payload = ${literalRepresentation(postData.jsonObj, opts)}`);\n          jsonPayload = true;\n          hasPayload = true;\n        }\n        break;\n\n      case 'multipart/form-data':\n        if (!postData.params) {\n          break;\n        }\n\n        payload = {};\n        postData.params.forEach(p => {\n          if (p.fileName) {\n            if (p.contentType) {\n              files[p.name] = `('${p.fileName}', open('${p.fileName}', 'rb'), '${p.contentType}')`;\n            } else {\n              files[p.name] = `('${p.fileName}', open('${p.fileName}', 'rb'))`;\n            }\n\n            hasFiles = true;\n          } else {\n            payload[p.name] = p.value;\n            hasPayload = true;\n          }\n        });\n\n        if (hasFiles) {\n          push(`files = ${literalRepresentation(files, opts)}`);\n\n          if (hasPayload) {\n            push(`payload = ${literalRepresentation(payload, opts)}`);\n          }\n\n          // The requests library will only automatically add a `multipart/form-data` header if there are files being sent. If we're **only** sending form data we still need to send the boundary ourselves.\n          const headerName = getHeaderName(headers, 'content-type');\n          if (headerName) {\n            delete headers[headerName];\n          }\n        } else {\n          const nonFilePayload = JSON.stringify(postData.text);\n          if (nonFilePayload) {\n            push(`payload = ${nonFilePayload}`);\n            hasPayload = true;\n          }\n        }\n\n        // The `open()` call must be a literal in the code snippet.\n        addPostProcessor(code =>\n          code\n            .replace(/\"\\('(.+)', open\\('(.+)', 'rb'\\)\\)\"/g, '(\"$1\", open(\"$2\", \"rb\"))')\n            .replace(/\"\\('(.+)', open\\('(.+)', 'rb'\\), '(.+)'\\)\"/g, '(\"$1\", open(\"$2\", \"rb\"), \"$3\")'),\n        );\n        break;\n\n      default: {\n        if (postData.mimeType === 'application/x-www-form-urlencoded' && postData.paramsObj) {\n          push(`payload = ${literalRepresentation(postData.paramsObj, opts)}`);\n          hasPayload = true;\n          break;\n        }\n\n        const stringPayload = JSON.stringify(postData.text);\n        if (stringPayload) {\n          push(`payload = ${stringPayload}`);\n          hasPayload = true;\n        }\n      }\n    }\n\n    // Construct headers\n    const headerCount = Object.keys(headers).length;\n\n    if (headerCount === 0 && (hasPayload || hasFiles)) {\n      // If we don't have any heads but we do have a payload we should put a blank line here between that payload consturction and our execution of the requests library.\n      blank();\n    } else if (headerCount === 1) {\n      Object.keys(headers).forEach(header => {\n        push(`headers = {\"${header}\": \"${escapeForDoubleQuotes(headers[header])}\"}`);\n        blank();\n      });\n    } else if (headerCount > 1) {\n      let count = 1;\n\n      push('headers = {');\n\n      Object.keys(headers).forEach(header => {\n        if (count !== headerCount) {\n          push(`\"${header}\": \"${escapeForDoubleQuotes(headers[header])}\",`, 1);\n        } else {\n          push(`\"${header}\": \"${escapeForDoubleQuotes(headers[header])}\"`, 1);\n        }\n        count += 1;\n      });\n\n      push('}');\n      blank();\n    }\n\n    // Construct request\n    let request = builtInMethods.includes(method)\n      ? `response = requests.${method.toLowerCase()}(url`\n      : `response = requests.request(\"${method}\", url`;\n\n    if (hasPayload) {\n      if (jsonPayload) {\n        request += ', json=payload';\n      } else {\n        request += ', data=payload';\n      }\n    }\n\n    if (hasFiles) {\n      request += ', files=files';\n    }\n\n    if (headerCount > 0) {\n      request += ', headers=headers';\n    }\n\n    request += ')';\n\n    push(request);\n    blank();\n\n    push('print(response.text)');\n\n    return join();\n  },\n};\n","import type { Target } from '../index.js';\n\nimport { requests } from './requests/client.js';\n\nexport const python: Target = {\n  info: {\n    key: 'python',\n    title: 'Python',\n    default: 'requests',\n    cli: 'python3 %s',\n  },\n  clientsById: {\n    requests,\n  },\n};\n","/**\n * @description\n * HTTP code snippet generator for R using httr\n *\n * @author\n * @gabrielakoreeda\n *\n * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author.\n */\nimport type { Client } from '../../index.js';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\nimport { escapeForDoubleQuotes, escapeForSingleQuotes } from '../../../helpers/escape.js';\nimport { getHeader } from '../../../helpers/headers.js';\n\nexport const httr: Client = {\n  info: {\n    key: 'httr',\n    title: 'httr',\n    link: 'https://cran.r-project.org/web/packages/httr/vignettes/quickstart.html',\n    description: 'httr: Tools for Working with URLs and HTTP',\n    extname: '.r',\n  },\n  convert: ({ url, queryObj, queryString, postData, allHeaders, method }) => {\n    // Start snippet\n    const { push, blank, join } = new CodeBuilder();\n\n    // Import httr\n    push('library(httr)');\n    blank();\n\n    // Set URL\n    push(`url <- \"${url}\"`);\n    blank();\n\n    // Construct query string\n    const qs = queryObj;\n    delete queryObj.key;\n\n    const queryCount = Object.keys(qs).length;\n    if (queryString.length === 1) {\n      push(`queryString <- list(${Object.keys(qs)} = \"${Object.values(qs).toString()}\")`);\n      blank();\n    } else if (queryString.length > 1) {\n      push('queryString <- list(');\n\n      Object.keys(qs).forEach((query, i) => {\n        if (i !== queryCount - 1) {\n          push(`  ${query} = \"${qs[query].toString()}\",`);\n        } else {\n          push(`  ${query} = \"${qs[query].toString()}\"`);\n        }\n      });\n\n      push(')');\n      blank();\n    }\n\n    // Construct payload\n    const payload = JSON.stringify(postData.text);\n\n    if (payload) {\n      push(`payload <- ${payload}`);\n      blank();\n    }\n\n    // Define encode\n    if (postData.text || postData.jsonObj || postData.params) {\n      switch (postData.mimeType) {\n        case 'application/x-www-form-urlencoded':\n          push('encode <- \"form\"');\n          blank();\n          break;\n\n        case 'application/json':\n          push('encode <- \"json\"');\n          blank();\n          break;\n\n        case 'multipart/form-data':\n          push('encode <- \"multipart\"');\n          blank();\n          break;\n\n        default:\n          push('encode <- \"raw\"');\n          blank();\n          break;\n      }\n    }\n\n    // Construct headers\n    const cookieHeader = getHeader(allHeaders, 'cookie');\n    const acceptHeader = getHeader(allHeaders, 'accept');\n\n    const setCookies = cookieHeader\n      ? `set_cookies(\\`${String(cookieHeader).replace(/;/g, '\", `').replace(/` /g, '`').replace(/[=]/g, '` = \"')}\")`\n      : undefined;\n\n    const setAccept = acceptHeader ? `accept(\"${escapeForDoubleQuotes(acceptHeader)}\")` : undefined;\n\n    const setContentType = `content_type(\"${escapeForDoubleQuotes(postData.mimeType)}\")`;\n\n    const otherHeaders = Object.entries(allHeaders)\n      // These headers are all handled separately:\n      .filter(([key]) => !['cookie', 'accept', 'content-type'].includes(key.toLowerCase()))\n      .map(([key, value]) => `'${key}' = '${escapeForSingleQuotes(value)}'`)\n      .join(', ');\n\n    const setHeaders = otherHeaders ? `add_headers(${otherHeaders})` : undefined;\n\n    // Construct request\n    let request = `response <- VERB(\"${method}\", url`;\n\n    if (payload) {\n      request += ', body = payload';\n    }\n\n    if (queryString.length) {\n      request += ', query = queryString';\n    }\n\n    const headerAdditions = [setHeaders, setContentType, setAccept, setCookies].filter(x => !!x).join(', ');\n\n    if (headerAdditions) {\n      request += `, ${headerAdditions}`;\n    }\n\n    if (postData.text || postData.jsonObj || postData.params) {\n      request += ', encode = encode';\n    }\n\n    request += ')';\n\n    push(request);\n\n    blank();\n    // Print response\n    push('content(response, \"text\")');\n\n    return join();\n  },\n};\n","import type { Target } from '../index.js';\n\nimport { httr } from './httr/client.js';\n\nexport const r: Target = {\n  info: {\n    key: 'r',\n    title: 'R',\n    default: 'httr',\n  },\n  clientsById: {\n    httr,\n  },\n};\n","import type { Client } from '../../index.js';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\nimport { escapeForSingleQuotes } from '../../../helpers/escape.js';\n\nexport const native: Client = {\n  info: {\n    key: 'native',\n    title: 'net::http',\n    link: 'http://ruby-doc.org/stdlib-2.2.1/libdoc/net/http/rdoc/Net/HTTP.html',\n    description: 'Ruby HTTP client',\n    extname: '.rb',\n  },\n  convert: ({ uriObj, method: rawMethod, fullUrl, postData, allHeaders }) => {\n    const { push, blank, join } = new CodeBuilder();\n\n    push(\"require 'uri'\");\n    push(\"require 'net/http'\");\n    blank();\n\n    // To support custom methods we check for the supported methods\n    // and if doesn't exist then we build a custom class for it\n    const method = rawMethod.toUpperCase();\n    const methods = [\n      'GET',\n      'POST',\n      'HEAD',\n      'DELETE',\n      'PATCH',\n      'PUT',\n      'OPTIONS',\n      'COPY',\n      'LOCK',\n      'UNLOCK',\n      'MOVE',\n      'TRACE',\n    ];\n    const capMethod = method.charAt(0) + method.substring(1).toLowerCase();\n    if (!methods.includes(method)) {\n      push(`class Net::HTTP::${capMethod} < Net::HTTPRequest`);\n      push(`  METHOD = '${method.toUpperCase()}'`);\n      push(`  REQUEST_HAS_BODY = '${postData.text ? 'true' : 'false'}'`);\n      push('  RESPONSE_HAS_BODY = true');\n      push('end');\n      blank();\n    }\n\n    push(`url = URI(\"${fullUrl}\")`);\n    blank();\n    push('http = Net::HTTP.new(url.host, url.port)');\n\n    if (uriObj.protocol === 'https:') {\n      push('http.use_ssl = true');\n    }\n\n    blank();\n    push(`request = Net::HTTP::${capMethod}.new(url)`);\n\n    const headers = Object.keys(allHeaders);\n    if (headers.length) {\n      headers.forEach(key => {\n        push(`request[\"${key}\"] = '${escapeForSingleQuotes(allHeaders[key])}'`);\n      });\n    }\n\n    if (postData.text) {\n      push(`request.body = ${JSON.stringify(postData.text)}`);\n    }\n\n    blank();\n    push('response = http.request(request)');\n    push('puts response.read_body');\n\n    return join();\n  },\n};\n","import type { Target } from '../index.js';\n\nimport { native } from './native/client.js';\n\nexport const ruby: Target = {\n  info: {\n    key: 'ruby',\n    title: 'Ruby',\n    default: 'native',\n  },\n  clientsById: {\n    native,\n  },\n};\n","/**\n * Use 'strong quoting' using single quotes so that we only need to deal with nested single quote characters.\n * see: http://wiki.bash-hackers.org/syntax/quoting#strong_quoting\n */\nexport const quote = (value = '') => {\n  const safe = /^[a-z0-9-_/.@%^=:]+$/i;\n\n  const isShellSafe = safe.test(value);\n\n  if (isShellSafe) {\n    return value;\n  }\n\n  // if the value is not shell safe, then quote it\n  return `'${value.replace(/'/g, \"'\\\\''\")}'`;\n};\n\nexport const escape = (value: string) => value.replace(/\\r/g, '\\\\r').replace(/\\n/g, '\\\\n');\n","/**\n * @description\n *\n * HTTP code snippet generator for the Shell using cURL.\n *\n * @author\n * @AhmadNassri\n *\n * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author.\n */\nimport type { Client } from '../../index.js';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\nimport { getHeader, getHeaderName, isMimeTypeJSON } from '../../../helpers/headers.js';\nimport { quote } from '../../../helpers/shell.js';\n\nexport interface CurlOptions {\n  binary?: boolean;\n  globOff?: boolean;\n  indent?: string | false;\n  prettifyJson?: boolean;\n  short?: boolean;\n}\n\n/**\n * This is a const record with keys that correspond to the long names and values that correspond to the short names for cURL arguments.\n */\nconst params = {\n  'http1.0': '0',\n  'url ': '',\n  cookie: 'b',\n  data: 'd',\n  form: 'F',\n  globoff: 'g',\n  header: 'H',\n  insecure: 'k',\n  request: 'X',\n} as const;\n\nconst getArg = (short: boolean) => (longName: keyof typeof params) => {\n  if (short) {\n    const shortName = params[longName];\n    if (!shortName) {\n      return '';\n    }\n    return `-${shortName}`;\n  }\n  return `--${longName}`;\n};\n\nexport const curl: Client<CurlOptions> = {\n  info: {\n    key: 'curl',\n    title: 'cURL',\n    link: 'http://curl.haxx.se/',\n    description: 'cURL is a command line tool and library for transferring data with URL syntax',\n    extname: '.sh',\n  },\n  convert: ({ fullUrl, method, httpVersion, headersObj, allHeaders, postData }, options = {}) => {\n    const { indent = '  ', short = false, binary = false, globOff = false } = options;\n\n    // In the interest of having nicer looking snippets JSON should be indented separately from the\n    // main command argument indentation.\n    const indentJSON = '  ';\n\n    const { push, join } = new CodeBuilder({\n      ...(typeof indent === 'string' ? { indent } : {}),\n      join: indent !== false ? ` \\\\\\n${indent}` : ' ',\n    });\n\n    const arg = getArg(short);\n\n    let formattedUrl = quote(fullUrl);\n\n    push(`curl ${arg('request')} ${method}`);\n    if (globOff) {\n      formattedUrl = unescape(formattedUrl);\n      push(arg('globoff'));\n    }\n    push(`${arg('url ')}${formattedUrl}`);\n\n    if (httpVersion === 'HTTP/1.0') {\n      push(arg('http1.0'));\n    }\n\n    if (getHeader(allHeaders, 'accept-encoding')) {\n      // note: there is no shorthand for this cURL option\n      push('--compressed');\n    }\n\n    // if multipart form data, we want to remove the boundary\n    if (postData.mimeType === 'multipart/form-data') {\n      const contentTypeHeaderName = getHeaderName(headersObj, 'content-type');\n      if (contentTypeHeaderName) {\n        const contentTypeHeader = headersObj[contentTypeHeaderName];\n        if (contentTypeHeaderName && contentTypeHeader) {\n          // remove the leading semi colon and boundary\n          // up to the next semi colon or the end of string\n          const noBoundary = String(contentTypeHeader).replace(/; boundary.+?(?=(;|$))/, '');\n\n          // replace the content-type header with no boundary in both headersObj and allHeaders\n          headersObj[contentTypeHeaderName] = noBoundary;\n          allHeaders[contentTypeHeaderName] = noBoundary;\n        }\n      }\n    }\n\n    // construct headers\n    Object.keys(headersObj)\n      .sort()\n      .forEach(key => {\n        const header = `${key}: ${headersObj[key]}`;\n        push(`${arg('header')} ${quote(header)}`);\n      });\n\n    if (allHeaders.cookie) {\n      push(`${arg('cookie')} ${quote(allHeaders.cookie as string)}`);\n    }\n\n    // construct post params\n    switch (postData.mimeType) {\n      case 'multipart/form-data':\n        postData.params?.forEach(param => {\n          let post = '';\n          // If the parameter is a filename, we want to put shell quotes around\n          // it rather than URL quoting it. Curl wants `file='@img copy.jpg'`\n          // not `file=@img%20copy.jpg`, which it will fail to find\n          if (param.fileName) {\n            post = `${param.name}='@${param.fileName}'`;\n          } else {\n            post = quote(`${param.name}=${param.value}`);\n          }\n\n          push(`${arg('form')} ${post}`);\n        });\n        break;\n\n      case 'application/x-www-form-urlencoded':\n        if (postData.params) {\n          postData.params.forEach(param => {\n            const unencoded = param.name;\n            const encoded = encodeURIComponent(param.name);\n            const needsEncoding = encoded !== unencoded;\n            const name = needsEncoding ? encoded : unencoded;\n            const flag = binary ? '--data-binary' : needsEncoding ? '--data-urlencode' : arg('data');\n            push(`${flag} ${quote(`${name}=${param.value}`)}`);\n          });\n        } else {\n          push(`${binary ? '--data-binary' : arg('data')} ${quote(postData.text)}`);\n        }\n        break;\n\n      default:\n        // raw request body\n        if (!postData.text) {\n          break;\n        }\n\n        // eslint-disable-next-line no-case-declarations -- builtPayload is only used here.\n        let builtPayload = false;\n\n        // If we're dealing with a JSON variant, and our payload is JSON let's make it look a little\n        // nicer.\n        if (isMimeTypeJSON(postData.mimeType)) {\n          // If our postData is less than 20 characters, let's keep it all on one line so as to not\n          // make the snippet overly lengthy\n          if (postData.text.length > 20) {\n            try {\n              const jsonPayload = JSON.parse(postData.text);\n\n              // If the JSON object has a single quote we should prepare it inside of a HEREDOC\n              // because the single quote in something like `string's` can't be escaped when used\n              // with `--data`.\n              //\n              // Basically this boils down to `--data @- <<EOF...EOF` vs `--data '...'`.\n              builtPayload = true;\n\n              if (postData.text.indexOf(\"'\") > 0) {\n                push(\n                  `${binary ? '--data-binary' : arg('data')} @- <<EOF\\n${JSON.stringify(\n                    jsonPayload,\n                    null,\n                    indentJSON,\n                  )}\\nEOF`,\n                );\n              } else {\n                push(\n                  `${binary ? '--data-binary' : arg('data')} '\\n${JSON.stringify(jsonPayload, null, indentJSON)}\\n'`,\n                );\n              }\n            } catch (err) {\n              // no-op\n            }\n          }\n        }\n\n        if (!builtPayload) {\n          push(`${binary ? '--data-binary' : arg('data')} ${quote(postData.text)}`);\n        }\n    }\n\n    return join();\n  },\n};\n","/**\n * @description\n * HTTP code snippet generator for the Shell using HTTPie.\n *\n * @author\n * @AhmadNassri\n *\n * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author.\n */\nimport type { Client } from '../../index.js';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\nimport { quote } from '../../../helpers/shell.js';\n\nexport interface HttpieOptions {\n  body?: boolean;\n  cert?: boolean;\n  headers?: boolean;\n  pretty?: boolean;\n  print?: boolean;\n  queryParams?: boolean;\n  short?: boolean;\n  style?: boolean;\n  timeout?: boolean;\n  verbose?: boolean;\n  verify?: boolean;\n}\n\nexport const httpie: Client<HttpieOptions> = {\n  info: {\n    key: 'httpie',\n    title: 'HTTPie',\n    link: 'http://httpie.org/',\n    description: 'a CLI, cURL-like tool for humans',\n    extname: '.sh',\n    installation: 'brew install httpie',\n  },\n  convert: ({ allHeaders, postData, queryObj, fullUrl, method, url }, options) => {\n    const opts = {\n      body: false,\n      cert: false,\n      headers: false,\n      indent: '  ',\n      pretty: false,\n      print: false,\n      queryParams: false,\n      short: false,\n      style: false,\n      timeout: false,\n      verbose: false,\n      verify: false,\n      ...options,\n    };\n\n    const { push, join, unshift } = new CodeBuilder({\n      indent: opts.indent,\n      // @ts-expect-error SEEMS LEGIT\n      join: opts.indent !== false ? ` \\\\\\n${opts.indent}` : ' ',\n    });\n\n    let raw = false;\n    const flags = [];\n\n    if (opts.headers) {\n      flags.push(opts.short ? '-h' : '--headers');\n    }\n\n    if (opts.body) {\n      flags.push(opts.short ? '-b' : '--body');\n    }\n\n    if (opts.verbose) {\n      flags.push(opts.short ? '-v' : '--verbose');\n    }\n\n    if (opts.print) {\n      flags.push(`${opts.short ? '-p' : '--print'}=${opts.print}`);\n    }\n\n    if (opts.verify) {\n      flags.push(`--verify=${opts.verify}`);\n    }\n\n    if (opts.cert) {\n      flags.push(`--cert=${opts.cert}`);\n    }\n\n    if (opts.pretty) {\n      flags.push(`--pretty=${opts.pretty}`);\n    }\n\n    if (opts.style) {\n      flags.push(`--style=${opts.style}`);\n    }\n\n    if (opts.timeout) {\n      flags.push(`--timeout=${opts.timeout}`);\n    }\n\n    // construct query params\n    if (opts.queryParams) {\n      Object.keys(queryObj).forEach(name => {\n        const value = queryObj[name];\n\n        if (Array.isArray(value)) {\n          value.forEach(val => {\n            push(`${name}==${quote(val)}`);\n          });\n        } else {\n          push(`${name}==${quote(value)}`);\n        }\n      });\n    }\n\n    // construct headers\n    Object.keys(allHeaders)\n      .sort()\n      .forEach(key => {\n        push(`${key}:${quote(allHeaders[key] as string)}`);\n      });\n\n    if (postData.mimeType === 'application/x-www-form-urlencoded') {\n      // construct post params\n      if (postData.params && postData.params.length) {\n        flags.push(opts.short ? '-f' : '--form');\n\n        postData.params.forEach(param => {\n          push(`${param.name}=${quote(param.value)}`);\n        });\n      }\n    } else {\n      raw = true;\n    }\n\n    const cliFlags = flags.length ? `${flags.join(' ')} ` : '';\n    url = quote(opts.queryParams ? url : fullUrl);\n    unshift(`http ${cliFlags}${method} ${url}`);\n\n    if (raw && postData.text) {\n      const postDataText = quote(postData.text);\n      unshift(`echo ${postDataText} | `);\n    }\n\n    return join();\n  },\n};\n","/**\n * @description\n * HTTP code snippet generator for the Shell using Wget.\n *\n * @author\n * @AhmadNassri\n *\n * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author.\n */\nimport type { Client } from '../../index.js';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\nimport { escape, quote } from '../../../helpers/shell.js';\n\nexport interface WgetOptions {\n  indent?: string | false;\n  short?: boolean;\n  verbose?: boolean;\n}\n\nexport const wget: Client<WgetOptions> = {\n  info: {\n    key: 'wget',\n    title: 'Wget',\n    link: 'https://www.gnu.org/software/wget/',\n    description: 'a free software package for retrieving files using HTTP, HTTPS',\n    extname: '.sh',\n  },\n  convert: ({ method, postData, allHeaders, fullUrl }, options) => {\n    const opts = {\n      indent: '  ',\n      short: false,\n      verbose: false,\n      ...options,\n    };\n\n    const { push, join } = new CodeBuilder({\n      ...(typeof opts.indent === 'string' ? { indent: opts.indent } : {}),\n      join: opts.indent !== false ? ` \\\\\\n${opts.indent}` : ' ',\n    });\n\n    if (opts.verbose) {\n      push(`wget ${opts.short ? '-v' : '--verbose'}`);\n    } else {\n      push(`wget ${opts.short ? '-q' : '--quiet'}`);\n    }\n\n    push(`--method ${quote(method)}`);\n\n    Object.keys(allHeaders).forEach(key => {\n      const header = `${key}: ${allHeaders[key]}`;\n      push(`--header ${quote(header)}`);\n    });\n\n    if (postData.text) {\n      push(`--body-data ${escape(quote(postData.text))}`);\n    }\n\n    push(opts.short ? '-O' : '--output-document');\n    push(`- ${quote(fullUrl)}`);\n\n    return join();\n  },\n};\n","import type { Target } from '../index.js';\n\nimport { curl } from './curl/client.js';\nimport { httpie } from './httpie/client.js';\nimport { wget } from './wget/client.js';\n\nexport const shell: Target = {\n  info: {\n    key: 'shell',\n    title: 'Shell',\n    default: 'curl',\n    cli: '%s',\n  },\n  clientsById: {\n    curl,\n    httpie,\n    wget,\n  },\n};\n","/**\n * Create an string of given length filled with blank spaces\n *\n * @param length Length of the array to return\n * @param str String to pad out with\n */\nconst buildString = (length: number, str: string) => str.repeat(length);\n\n/**\n * Create a string corresponding to a Dictionary or Array literal representation with pretty option and indentation.\n */\nconst concatArray = <T>(arr: T[], pretty: boolean, indentation: string, indentLevel: number) => {\n  const currentIndent = buildString(indentLevel, indentation);\n  const closingBraceIndent = buildString(indentLevel - 1, indentation);\n  const join = pretty ? `,\\n${currentIndent}` : ', ';\n\n  if (pretty) {\n    return `[\\n${currentIndent}${arr.join(join)}\\n${closingBraceIndent}]`;\n  }\n  return `[${arr.join(join)}]`;\n};\n\n/**\n * Create a string corresponding to a valid declaration and initialization of a Swift array or dictionary literal\n *\n * @param name Desired name of the instance\n * @param parameters Key-value object of parameters to translate to a Swift object litearal\n * @param opts Target options\n * @return {string}\n */\nexport const literalDeclaration = <T, U>(name: string, parameters: T, opts: U) =>\n  `let ${name} = ${literalRepresentation(parameters, opts)}`;\n\n/**\n * Create a valid Swift string of a literal value according to its type.\n *\n * @param value Any JavaScript literal\n * @param opts Target options\n */\nexport const literalRepresentation = <T, U>(value: T, opts: U, indentLevel?: number): number | string => {\n  indentLevel = indentLevel === undefined ? 1 : indentLevel + 1;\n\n  switch (Object.prototype.toString.call(value)) {\n    case '[object Number]':\n      return value as unknown as number;\n\n    case '[object Array]': {\n      // Don't prettify arrays nto not take too much space\n      let pretty = false;\n      const valuesRepresentation = (value as unknown as any[]).map((v: any) => {\n        // Switch to prettify if the value is a dictionary with multiple keys\n        if (Object.prototype.toString.call(v) === '[object Object]') {\n          pretty = Object.keys(v).length > 1;\n        }\n        return literalRepresentation(v, opts, indentLevel);\n      });\n      // @ts-expect-error needs better types\n      return concatArray(valuesRepresentation, pretty, opts.indent, indentLevel);\n    }\n\n    case '[object Object]': {\n      const keyValuePairs = [];\n      // eslint-disable-next-line guard-for-in, no-restricted-syntax\n      for (const key in value) {\n        keyValuePairs.push(`\"${key}\": ${literalRepresentation(value[key], opts, indentLevel)}`);\n      }\n      return concatArray(\n        keyValuePairs,\n        // @ts-expect-error needs better types\n        opts.pretty && keyValuePairs.length > 1,\n        // @ts-expect-error needs better types\n        opts.indent,\n        indentLevel,\n      );\n    }\n\n    case '[object Boolean]':\n      return (value as unknown as boolean).toString();\n\n    default:\n      if (value === null || value === undefined) {\n        return 'nil';\n      }\n      return `\"${(value as any).toString().replace(/\"/g, '\\\\\"')}\"`;\n  }\n};\n","/**\n * @description\n * HTTP code snippet generator for Swift using URLSession.\n *\n * @author\n * @thibaultCha\n *\n * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author.\n */\nimport type { Client } from '../../index.js';\n\nimport { CodeBuilder } from '../../../helpers/code-builder.js';\nimport { literalRepresentation, literalDeclaration } from '../helpers.js';\n\nexport interface UrlsessionOptions {\n  pretty?: boolean;\n  timeout?: number | string;\n}\n\nexport const urlsession: Client<UrlsessionOptions> = {\n  info: {\n    key: 'urlsession',\n    title: 'URLSession',\n    link: 'https://developer.apple.com/documentation/foundation/urlsession',\n    description: \"Foundation's URLSession request\",\n    extname: '.swift',\n  },\n  convert: ({ allHeaders, postData, uriObj, queryObj, method }, options) => {\n    const opts = {\n      indent: '  ',\n      pretty: true,\n      timeout: 10,\n      ...options,\n    };\n\n    const { push, blank, join } = new CodeBuilder({ indent: opts.indent });\n\n    push('import Foundation');\n    blank();\n\n    const hasBody = postData.text || postData.jsonObj || postData.params;\n    if (hasBody) {\n      switch (postData.mimeType) {\n        case 'application/x-www-form-urlencoded':\n          // By appending parameters one by one in the resulting snippet,\n          // we make it easier for the user to edit it according to his or her needs after pasting.\n          // The user can just add/remove lines adding/removing body parameters.\n          if (postData.params?.length) {\n            const parameters = postData.params.map(p => `\"${p.name}\": \"${p.value}\"`);\n            if (opts.pretty) {\n              push('let parameters = [');\n              parameters.forEach(param => push(`${param},`, 1));\n              push(']');\n            } else {\n              push(`let parameters = [${parameters.join(', ')}]`);\n            }\n\n            push('let joinedParameters = parameters.map { \"\\\\($0.key)=\\\\($0.value)\" }.joined(separator: \"&\")');\n            push('let postData = Data(joinedParameters.utf8)');\n            blank();\n          }\n          break;\n\n        case 'application/json':\n          if (postData.jsonObj) {\n            push(`${literalDeclaration('parameters', postData.jsonObj, opts)} as [String : Any?]`);\n            blank();\n            push('let postData = try JSONSerialization.data(withJSONObject: parameters, options: [])');\n            blank();\n          }\n          break;\n\n        case 'multipart/form-data':\n          /**\n           * By appending multipart parameters one by one in the resulting snippet,\n           * we make it easier for the user to edit it according to his or her needs after pasting.\n           * The user can just edit the parameters Dictionary or put this part of a snippet in a multipart builder method.\n           */\n\n          push(literalDeclaration('parameters', postData.params, opts));\n          blank();\n          push(`let boundary = \"${postData.boundary}\"`);\n          blank();\n          push('var body = \"\"');\n          push('for param in parameters {');\n          push('let paramName = param[\"name\"]!', 1);\n          push('body += \"--\\\\(boundary)\\\\r\\\\n\"', 1);\n          push('body += \"Content-Disposition:form-data; name=\\\\\"\\\\(paramName)\\\\\"\"', 1);\n          push('if let filename = param[\"fileName\"] {', 1);\n          push('let contentType = param[\"contentType\"]!', 2);\n          push('let fileContent = try String(contentsOfFile: filename, encoding: .utf8)', 2);\n          push('body += \"; filename=\\\\\"\\\\(filename)\\\\\"\\\\r\\\\n\"', 2);\n          push('body += \"Content-Type: \\\\(contentType)\\\\r\\\\n\\\\r\\\\n\"', 2);\n          push('body += fileContent', 2);\n          push('} else if let paramValue = param[\"value\"] {', 1);\n          push('body += \"\\\\r\\\\n\\\\r\\\\n\\\\(paramValue)\"', 2);\n          push('}', 1);\n          push('}');\n          blank();\n          push('let postData = Data(body.utf8)');\n          blank();\n          break;\n\n        default:\n          push(`let postData = Data(\"${postData.text}\".utf8)`);\n          blank();\n      }\n    }\n\n    push(`let url = URL(string: \"${uriObj.href}\")!`);\n\n    const queries = queryObj ? Object.entries(queryObj) : [];\n    if (queries.length < 1) {\n      push('var request = URLRequest(url: url)');\n    } else {\n      push('var components = URLComponents(url: url, resolvingAgainstBaseURL: true)!');\n      push('let queryItems: [URLQueryItem] = [');\n\n      queries.forEach(query => {\n        const key = query[0];\n        const value = query[1];\n        switch (Object.prototype.toString.call(value)) {\n          case '[object String]':\n            push(`URLQueryItem(name: \"${key}\", value: \"${value}\"),`, 1);\n            break;\n          case '[object Array]':\n            (value as string[]).forEach((val: string) => {\n              push(`URLQueryItem(name: \"${key}\", value: \"${val}\"),`, 1);\n            });\n            break;\n        }\n      });\n      push(']');\n      push('components.queryItems = components.queryItems.map { $0 + queryItems } ?? queryItems');\n\n      blank();\n      push('var request = URLRequest(url: components.url!)');\n    }\n\n    push(`request.httpMethod = \"${method}\"`);\n    push(`request.timeoutInterval = ${opts.timeout}`);\n\n    if (Object.keys(allHeaders).length) {\n      push(`request.allHTTPHeaderFields = ${literalRepresentation(allHeaders, opts)}`);\n    }\n\n    if (hasBody) {\n      push('request.httpBody = postData');\n    }\n\n    blank();\n\n    push('let (data, _) = try await URLSession.shared.data(for: request)');\n    push('print(String(decoding: data, as: UTF8.self))');\n\n    return join();\n  },\n};\n","import type { Target } from '../index.js';\n\nimport { urlsession } from './urlsession/client.js';\n\nexport const swift: Target = {\n  info: {\n    key: 'swift',\n    title: 'Swift',\n    default: 'urlsession',\n  },\n  clientsById: {\n    urlsession,\n  },\n};\n","import type { CodeBuilderOptions } from '../helpers/code-builder.js';\nimport type { Request } from '../index.js';\nimport type { Merge } from 'type-fest';\n\nimport { c } from './c/target.js';\nimport { clojure } from './clojure/target.js';\nimport { csharp } from './csharp/target.js';\nimport { go } from './go/target.js';\nimport { http } from './http/target.js';\nimport { java } from './java/target.js';\nimport { javascript } from './javascript/target.js';\nimport { json } from './json/target.js';\nimport { kotlin } from './kotlin/target.js';\nimport { node } from './node/target.js';\nimport { objc } from './objc/target.js';\nimport { ocaml } from './ocaml/target.js';\nimport { php } from './php/target.js';\nimport { powershell } from './powershell/target.js';\nimport { python } from './python/target.js';\nimport { r } from './r/target.js';\nimport { ruby } from './ruby/target.js';\nimport { shell } from './shell/target.js';\nimport { swift } from './swift/target.js';\n\nexport type TargetId = keyof typeof targets;\n\nexport type ClientId = string;\n\nexport interface ClientInfo {\n  description: string;\n  extname: Extension;\n  installation?: string;\n  key: ClientId;\n  link: string;\n  title: string;\n}\n\nexport type Converter<T extends Record<string, any>> = (\n  request: Request,\n  options?: Merge<CodeBuilderOptions, T>,\n) => string;\n\nexport interface Client<T extends Record<string, any> = Record<string, any>> {\n  convert: Converter<T>;\n  info: ClientInfo;\n}\n\nexport interface ClientPlugin<T extends Record<string, any> = Record<string, any>> {\n  client: Client<T>;\n  target: TargetId;\n}\n\nexport type Extension = `.${string}` | null;\n\nexport interface TargetInfo {\n  cli?: string;\n  default: string;\n  key: TargetId;\n  title: string;\n}\n\nexport interface Target {\n  clientsById: Record<ClientId, Client>;\n  info: TargetInfo;\n}\n\nexport const targets = {\n  c,\n  clojure,\n  csharp,\n  go,\n  http,\n  java,\n  javascript,\n  json,\n  kotlin,\n  node,\n  objc,\n  ocaml,\n  php,\n  powershell,\n  python,\n  r,\n  ruby,\n  shell,\n  swift,\n};\n\nexport const isTarget = (target: Target): target is Target => {\n  if (typeof target !== 'object' || target === null || Array.isArray(target)) {\n    const got = target === null ? 'null' : Array.isArray(target) ? 'array' : typeof target;\n    throw new Error(`you tried to add a target which is not an object, got type: \"${got}\"`);\n  }\n\n  if (!Object.prototype.hasOwnProperty.call(target, 'info')) {\n    throw new Error('targets must contain an `info` object');\n  }\n\n  if (!Object.prototype.hasOwnProperty.call(target.info, 'key')) {\n    throw new Error('targets must have an `info` object with the property `key`');\n  }\n\n  if (!target.info.key) {\n    throw new Error('target key must be a unique string');\n  }\n\n  if (Object.prototype.hasOwnProperty.call(targets, target.info.key)) {\n    throw new Error(`a target already exists with this key, \\`${target.info.key}\\``);\n  }\n\n  if (!Object.prototype.hasOwnProperty.call(target.info, 'title')) {\n    throw new Error('targets must have an `info` object with the property `title`');\n  }\n\n  if (!target.info.title) {\n    throw new Error('target title must be a non-zero-length string');\n  }\n\n  if (\n    !Object.prototype.hasOwnProperty.call(target, 'clientsById') ||\n    !target.clientsById ||\n    Object.keys(target.clientsById).length === 0\n  ) {\n    throw new Error(\n      `No clients provided in target ${target.info.key}.  You must provide the property \\`clientsById\\` containg your clients.`,\n    );\n  }\n\n  if (!Object.prototype.hasOwnProperty.call(target.info, 'default')) {\n    throw new Error('targets must have an `info` object with the property `default`');\n  }\n\n  if (!Object.prototype.hasOwnProperty.call(target.clientsById, target.info.default)) {\n    throw new Error(\n      `target ${target.info.key} is configured with a default client ${\n        target.info.default\n      }, but no such client was found in the property \\`clientsById\\` (found ${JSON.stringify(\n        Object.keys(target.clientsById),\n      )})`,\n    );\n  }\n\n  Object.values(target.clientsById).forEach(isClient);\n\n  return true;\n};\n\nexport const addTarget = (target: Target) => {\n  if (!isTarget(target)) {\n    return;\n  }\n  targets[target.info.key] = target;\n};\n\nexport const isClient = (client: Client): client is Client => {\n  if (!client) {\n    throw new Error('clients must be objects');\n  }\n\n  if (!Object.prototype.hasOwnProperty.call(client, 'info')) {\n    throw new Error('targets client must contain an `info` object');\n  }\n\n  if (!Object.prototype.hasOwnProperty.call(client.info, 'key')) {\n    throw new Error('targets client must have an `info` object with property `key`');\n  }\n\n  if (!client.info.key) {\n    throw new Error('client.info.key must contain an identifier unique to this target');\n  }\n\n  if (!Object.prototype.hasOwnProperty.call(client.info, 'title')) {\n    throw new Error('targets client must have an `info` object with property `title`');\n  }\n\n  if (!Object.prototype.hasOwnProperty.call(client.info, 'description')) {\n    throw new Error('targets client must have an `info` object with property `description`');\n  }\n\n  if (!Object.prototype.hasOwnProperty.call(client.info, 'link')) {\n    throw new Error('targets client must have an `info` object with property `link`');\n  }\n\n  if (!Object.prototype.hasOwnProperty.call(client.info, 'extname')) {\n    throw new Error('targets client must have an `info` object with the property `extname`');\n  }\n\n  if (!Object.prototype.hasOwnProperty.call(client, 'convert') || typeof client.convert !== 'function') {\n    throw new Error('targets client must have a `convert` property containing a conversion function');\n  }\n\n  return true;\n};\n\nexport const addClientPlugin = (plugin: ClientPlugin) => {\n  addTargetClient(plugin.target, plugin.client);\n};\n\nexport const addTargetClient = (targetId: TargetId, client: Client) => {\n  if (!isClient(client)) {\n    return;\n  }\n\n  if (!Object.prototype.hasOwnProperty.call(targets, targetId)) {\n    throw new Error(`Sorry, but no ${targetId} target exists to add clients to`);\n  }\n\n  if (Object.prototype.hasOwnProperty.call(targets[targetId], client.info.key)) {\n    throw new Error(\n      `the target ${targetId} already has a client with the key ${client.info.key}, please use a different key`,\n    );\n  }\n\n  targets[targetId].clientsById[client.info.key] = client;\n};\n","import type { ClientId, ClientInfo, TargetId, TargetInfo } from '../targets/index.js';\n\nimport { targets } from '../targets/index.js';\n\nexport interface AvailableTarget extends TargetInfo {\n  clients: ClientInfo[];\n}\n\nexport const availableTargets = () =>\n  Object.keys(targets).map<AvailableTarget>(targetId => ({\n    ...targets[targetId as TargetId].info,\n    clients: Object.keys(targets[targetId as TargetId].clientsById).map(\n      clientId => targets[targetId as TargetId].clientsById[clientId].info,\n    ),\n  }));\n\nexport const extname = (targetId: TargetId, clientId: ClientId) => {\n  const target = targets[targetId];\n  if (!target) {\n    return '';\n  }\n\n  return target.clientsById[clientId]?.info.extname || '';\n};\n"]}