@readme/httpsnippet 10.0.3 → 10.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-ZPGGGDJK.js → chunk-CSDAGXA2.js} +28 -37
- package/dist/chunk-CSDAGXA2.js.map +1 -0
- package/dist/index.cjs +27 -36
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +2 -2
- package/dist/targets/index.cjs +27 -36
- package/dist/targets/index.cjs.map +1 -1
- package/dist/targets/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-ZPGGGDJK.js.map +0 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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":["import type { ReducedHelperObject } from './helpers/reducer.js';\nimport type { ClientId, TargetId } from './targets/index.js';\nimport type { Param, PostDataCommon, Request as NpmHarRequest } from 'har-format';\nimport type { UrlWithParsedQuery } from 'node:url';\n\nimport { format as urlFormat, parse as urlParse } from 'node: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 { addTarget, addTargetClient, addClientPlugin } 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 length = Buffer.byteLength(postData.text, 'ascii').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 { 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 // Markers for headers to be created as litteral objects and later be set on the URLRequest 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');\n push('#if canImport(FoundationNetworking)');\n push(' import FoundationNetworking');\n push('#endif');\n\n if (Object.keys(allHeaders).length) {\n req.hasHeaders = true;\n blank();\n push(literalDeclaration('headers', allHeaders, opts));\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 // 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 if (postData.params?.length) {\n const [head, ...tail] = postData.params;\n push(`${tail.length > 0 ? 'var' : 'let'} postData = Data(\"${head.name}=${head.value}\".utf8)`);\n tail.forEach(({ name, value }) => {\n push(`postData.append(Data(\"&${name}=${value}\".utf8))`);\n });\n } else {\n req.hasBody = false;\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\n push('let postData = try JSONSerialization.data(withJSONObject: parameters, options: [])');\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('var error: NSError? = nil');\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[\"content-type\"]!', 2);\n push('let fileContent = String(contentsOfFile: filename, encoding: String.Encoding.utf8)', 2);\n push('if (error != nil) {', 2);\n push('print(error as Any)', 3);\n push('}', 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 break;\n\n default:\n blank();\n push(`let postData = Data(\"${postData.text}\".utf8)`);\n }\n }\n\n blank();\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(`${opts.indent}URLQueryItem(name: \"${key}\", value: \"${value}\"),`);\n break;\n case '[object Array]':\n value.forEach(val => {\n push(`${opts.indent}URLQueryItem(name: \"${key}\", value: \"${val}\"),`);\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\n if (req.hasHeaders) {\n push('request.allHTTPHeaderFields = headers');\n }\n\n if (req.hasBody) {\n push('request.httpBody = postData');\n }\n\n blank();\n // Retrieving the shared session will be less verbose than creating a new one.\n\n push('let (data, response) = try await URLSession.shared.data(for: request)');\n push('print(String(decoding: data, as: UTF8.self))');\n\n blank();\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"]}
|
|
1
|
+
{"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":["import type { ReducedHelperObject } from './helpers/reducer.js';\nimport type { ClientId, TargetId } from './targets/index.js';\nimport type { Param, PostDataCommon, Request as NpmHarRequest } from 'har-format';\nimport type { UrlWithParsedQuery } from 'node:url';\n\nimport { format as urlFormat, parse as urlParse } from 'node: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 { addTarget, addTargetClient, addClientPlugin } 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 length = Buffer.byteLength(postData.text, 'ascii').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[\"content-type\"]!', 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, response) = 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"]}
|