@powerduck/openapi-codegen 0.5.0 → 0.5.1
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/index.cjs +1 -1
- package/package.json +3 -2
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e,t=Object.defineProperty,r=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,o=Object.prototype.hasOwnProperty,s={};((e,r)=>{for(var n in r)t(e,n,{get:r[n],enumerable:!0})})(s,{RefResolver:()=>i,applyPlugin:()=>fe,builtinGenerators:()=>jt,compile:()=>me,cookie:()=>se,createGenerator:()=>ae,defaultExampleContext:()=>Z,example:()=>Q,form:()=>he,generate:()=>At,get:()=>Pt,getGenerator:()=>ce,headerValue:()=>ie,list:()=>Dt,listGenerators:()=>de,normalize:()=>we,parameter:()=>ne,query:()=>oe,register:()=>Ot,registerBuiltins:()=>Ht,registerGenerator:()=>pe,use:()=>Ft}),module.exports=(e=s,((e,s,i,a)=>{if(s&&"object"==typeof s||"function"==typeof s)for(let u of n(s))o.call(e,u)||u===i||t(e,u,{get:()=>s[u],enumerable:!(a=r(s,u))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var i=class{root;cache=new Map;stack=new Set;softMode;constructor(e,t=!1){this.root=e,this.softMode=t}deref(e){if(!e||"object"!=typeof e)return e;const t=e;if("string"!=typeof t.$ref)return e;try{return this.resolveRef(t.$ref)}catch(t){if(this.softMode)return e;throw t}}resolveRef(e){if(!e.startsWith("#/")){const t=new Error(`Only in-document references are supported: ${e}`);if(this.softMode)return{$ref:e};throw t}if(this.cache.has(e))return this.cache.get(e);if(this.stack.has(e)){const t=new Error(`Circular reference detected while resolving: ${e}`);if(this.softMode)return{$ref:e};throw t}this.stack.add(e);try{const t=e.slice(2).split("/").map(e=>e.replace(/~1/g,"/").replace(/~0/g,"~"));let r=this.root;for(const n of t){if(null===r||"object"!=typeof r){const t=new Error(`Broken reference: ${e}`);if(this.softMode)return{$ref:e};throw t}if(r=r[n],void 0===r){const t=new Error(`Broken reference: ${e}`);if(this.softMode)return{$ref:e};throw t}}if(r&&"object"==typeof r&&"string"==typeof r.$ref){const t=this.resolveRef(r.$ref);return this.cache.set(e,t),t}return this.cache.set(e,r),r}finally{this.stack.delete(e)}}clearCache(){this.cache.clear()}},a="/tmp/file.bin",u="file.bin",l="application/octet-stream";function p(e){return String(e).trim().toLowerCase()}function c(e){return"content-type"===p(e)}function d(e){return"content-length"===p(e)}function f(e){return"transfer-encoding"===p(e)}function m(e){return String(e??"").trim().toUpperCase()||"GET"}function h(e){const t=m(e);return"GET"!==t&&"HEAD"!==t}function g(e){const t=m(e);return"POST"===t||"PUT"===t||"PATCH"===t}function y(e,t){return"string"==typeof e&&e.trim().length>0?e:t}function $(e,t){const r=y(e.body?.mediaType);if(void 0!==r)return r.trim();const n=e.headers;if(!n)return t;const o=Array.isArray(n)?n:Object.entries(n);for(const[e,t]of o){if(!c(String(e)))continue;const r=Array.isArray(t)?t:[t];for(const e of r){if(null==e)continue;const t=String(e).trim();if(t)return t}}return t}function S(e){return $(e,"").split(";",1)[0].trim().toLowerCase()}function b(e){const t=S(e);return"application/json"===t||t.endsWith("+json")}function v(e){return"application/x-www-form-urlencoded"===S(e)}function _(e){return"multipart/form-data"===S(e)}function T(e){return null==e?"":"string"==typeof e?e:"number"==typeof e||"boolean"==typeof e||"bigint"==typeof e?String(e):function(e){try{return JSON.stringify(e)??String(e??"")}catch{return String(e??"")}}(e)}function w(e){return T(e)}function R(e){return String(e).replace(/[\r\n\u2028\u2029]+/g," ").replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]+/g," ")}function x(e,t){return`TODO: replace ${R(e)} with the real local file path for multipart field ${R(t)}`}function q(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function C(e){return q(e)&&Boolean(e.__file)}function E(e){return JSON.stringify(String(e))}function B(e){return E(e)}function j(e){return E(e)}function U(e){return`'${String(e).replace(/'/g,"'\\''")}'`}function H(e){return`'${String(e).replace(/\\/g,"\\\\").replace(/'/g,"\\'")}'`}function O(e){const t=String(e);return t.includes("\n")?`%Q{${t.replace(/\\/g,"\\\\").replace(/}/g,"\\}").replace(/\$/g,"\\$")}}`:`'${t.replace(/\\/g,"\\\\").replace(/'/g,"\\'")}'`}function P(e){return`'${String(e).replace(/'/g,"''")}'`}function D(e){return`@"${String(e).replace(/"/g,'""')}"`}function F(e){return E(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}function A(e){return E(e)}function N(e){return E(e)}function L(e){return`@${E(e)}`}function k(e){return E(e)}function M(e){return E(e)}function I(e){return E(e)}function W(e){return E(e)}function z(e){if(!q(e))return[];const t=[];for(const[r,n]of Object.entries(e))if(Array.isArray(n))for(const e of n)t.push({name:r,value:e,file:C(e)});else t.push({name:r,value:n,file:C(n)});return t}function J(e){const t=m(e.method).toLowerCase(),r=("string"==typeof e.path?e.path:"").replace(/\{([^}]+)\}/g,"_by_$1").replace(/[^A-Za-z0-9]+/g,"_").replace(/^_+|_+$/g,"").toLowerCase();return function(e){const t=String(e).replace(/[^A-Za-z0-9_]/g,"_");return(/^[0-9]/.test(t)?`_${t}`:t)||"value"}(r?`${t}_${r}`:`${t}_request`)}function V(e){if(!e.body)return"";const t=e.body.value;if("string"==typeof t)return t;try{return JSON.stringify(t,null,2)??""}catch{return String(t??"")}}function X(...e){for(const t of e)if(void 0!==t)return t}function G(e,t){return e.filter(([e])=>!function(e){const t=p(e);switch(t){case"accept-charset":case"accept-encoding":case"access-control-request-headers":case"access-control-request-method":case"connection":case"content-length":case"cookie":case"cookie2":case"date":case"dnt":case"expect":case"host":case"keep-alive":case"origin":case"permissions-policy":case"referer":case"te":case"trailer":case"transfer-encoding":case"upgrade":case"via":return!0;default:return t.startsWith("proxy-")||t.startsWith("sec-")}}(e)&&(!t||!c(e)))}var K=64,Z={isRequestBody:!1,isResponse:!1};function Q(e,t,r,n=0,o=Z){const s=r??new Set;if(n>=K)return null;const i=t.deref(e);if("boolean"==typeof i)return i?{}:null;if(!q(i))return;const a=i;if(s.has(a))return null;s.add(a);const u=X(a.example,Array.isArray(a.examples)&&a.examples.length?a.examples[0]:void 0);if(void 0!==u)return u;if(void 0!==a.const)return a.const;if(void 0!==a.default)return a.default;if(Array.isArray(a.enum)&&a.enum.length>0)return a.enum[0];if(Array.isArray(a.oneOf)&&a.oneOf.length>0)return Q(a.oneOf[0],t,s,n+1,o);if(Array.isArray(a.anyOf)&&a.anyOf.length>0)return Q(a.anyOf[0],t,s,n+1,o);if(Array.isArray(a.allOf)&&a.allOf.length>0){const e=function(e,t){const r={};for(const n of e){const e=t.deref(n);if(!1===e)return;if(!0!==e&&q(e))for(const[t,n]of Object.entries(e)){if("properties"===t){if(!q(n))continue;const e=q(r.properties)?r.properties:{};r.properties={...e,...n};continue}if("required"===t){if(!Array.isArray(n))continue;const e=new Set(Array.isArray(r.required)?r.required.filter(e=>"string"==typeof e):[]);for(const t of n)"string"==typeof t&&e.add(t);r.required=[...e];continue}if("type"===t){const e=new Set,t=r.type;if("string"==typeof t)e.add(t);else if(Array.isArray(t))for(const r of t)"string"==typeof r&&e.add(r);if("string"==typeof n)e.add(n);else if(Array.isArray(n))for(const t of n)"string"==typeof t&&e.add(t);1===e.size?r.type=[...e][0]:e.size>1&&(r.type=[...e]);continue}if("allOf"===t||"oneOf"===t||"anyOf"===t){if(!Array.isArray(n))continue;const e=Array.isArray(r[t])?r[t]:[];r[t]=[...e,...n];continue}r[t]=n}}return Object.keys(r).length>0?r:void 0}(a.allOf,t);if(void 0===e)return null;const r={...e};for(const[e,t]of Object.entries(a))"allOf"!==e&&void 0===r[e]&&(r[e]=t);return Q(r,t,s,n+1,o)}if(Array.isArray(a.prefixItems)&&a.prefixItems.length>0)return a.prefixItems.map(e=>Q(e,t,s,n+1,o));let l;if("string"==typeof a.type)l=a.type;else if(Array.isArray(a.type)){const e=a.type.find(e=>"null"!==e);l="string"==typeof e?e:a.type[0]}switch(l){case"string":{let e=function(e){if(e<=0)return"";let t="",r=0;for(;t.length<e;){const e=o[r%o.length];t.length>0&&(t+=" "),t+=e,r++}return t.slice(0,e)};if("binary"===a.format)return{__file:!0,name:"file.bin",contentType:"application/octet-stream",data:""};if("date-time"===a.format)return"2025-01-01T00:00:00Z";if("date"===a.format)return"2025-01-01";if("time"===a.format)return"00:00:00Z";if("duration"===a.format)return"P1D";const t="number"==typeof a.minLength?a.minLength:0,r="number"==typeof a.maxLength?a.maxLength:1/0,n=Math.min(Math.max(t,2),r),o=["lorem","ipsum","dolor","sit","amet","consectetur","adipiscing","elit","sed","do","eiusmod","tempor","incididunt","ut","labore","dolore","magna","aliqua","sample","text","value","demo","test"];let s;try{s=e(n)}catch{s="x".repeat(n)}if("string"==typeof a.pattern)try{const e=new RegExp(a.pattern),t=["test","abc","sample","value_01",s,"A"].find(t=>e.test(t));void 0!==t&&(s=t,s=s.slice(0,r))}catch{}return s}case"integer":{let e=0;return"number"==typeof a.minimum&&(e=Math.ceil(a.minimum)),"number"==typeof a.multipleOf&&a.multipleOf>0&&(e=Math.ceil(e/a.multipleOf)*a.multipleOf),"number"==typeof a.maximum&&(e=Math.min(e,a.maximum)),e}case"number":{let e=0;return"number"==typeof a.minimum&&(e=a.minimum),"number"==typeof a.multipleOf&&a.multipleOf>0&&(e=Math.ceil(e/a.multipleOf)*a.multipleOf),"number"==typeof a.maximum&&(e=Math.min(e,a.maximum)),e}case"boolean":return!0;case"null":return null;case"array":{if(Array.isArray(a.examples)&&a.examples.length>0)return a.examples[0];const e=a.items,r=[],i="number"==typeof a.minItems?a.minItems:0,u="number"==typeof a.maxItems?a.maxItems:1/0,l=Math.min(Math.max(1,i),u);if(e)for(let i=0;i<l;i++)r.push(Q(e,t,s,n+1,o));return r}default:{const e={},r=q(a.properties)?a.properties:{};for(const[i,a]of Object.entries(r)){const r=t.deref(a);if(q(r)){if(o.isRequestBody&&Boolean(r.readOnly))continue;if(o.isResponse&&Boolean(r.writeOnly))continue}e[i]=Q(a,t,s,n+1,o)}if(q(a.patternProperties)){const r=Object.entries(a.patternProperties);if(r.length>0){const[i,a]=r[0];e[`_pattern_${i.replace(/[^a-zA-Z0-9]/g,"_")}`]=Q(a,t,s,n+1,o)}}return 0===Object.keys(e).length&&a.additionalProperties&&(e.additionalProp=Q(a.additionalProperties,t,s,n+1,o)),0===Object.keys(e).length&&a.unevaluatedProperties&&(e.additionalProp=Q(a.unevaluatedProperties,t,s,n+1,o)),e}}}var Y=e=>!!e&&"object"==typeof e&&!Array.isArray(e)&&!e.__file,ee=e=>null===e?"null":void 0===e?"":"string"==typeof e?e:"number"==typeof e||"boolean"==typeof e||"bigint"==typeof e?String(e):JSON.stringify(e);function te(e){return encodeURIComponent(e).replace(/[!'()*]/g,e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`)}function re(e){return e.replace(/[\r\n]+/g," ").replace(/\0/g,"")}function ne(e){const t=e.style??("query"===e.in||"querystring"===e.in||"cookie"===e.in?"form":"simple"),r=e.explode??("form"===t||"deepObject"===t),n=Boolean(e.allowReserved),o=e.value;if(null==o)return[];const s="cookie"===e.in?e=>te(e):"header"===e.in?e=>re(e):e=>function(e,t=!1){return t?e:encodeURIComponent(e)}(e,n);if("deepObject"===t&&Y(o))return function(e,t,r){const n=[],o=[{prefix:e,value:t}];for(;o.length>0;){const e=o.pop();if(!e)continue;const{prefix:t,value:s}=e;if(Array.isArray(s))for(let e=s.length-1;e>=0;e--)o.push({prefix:`${t}[${e}]`,value:s[e]});else if(Y(s)){const e=Object.entries(s);for(let r=e.length-1;r>=0;r--){const[n,s]=e[r];o.push({prefix:`${t}[${n}]`,value:s})}}else n.push([r(t),r(ee(s))])}return n}(e.name,o,s);if(Array.isArray(o)){const n=o.map(e=>s(ee(e)));switch(t){case"form":return r?n.map(t=>[s(e.name),t]):[[s(e.name),n.join(",")]];case"spaceDelimited":return[[s(e.name),n.join("%20")]];case"pipeDelimited":return[[s(e.name),n.join("|")]];case"label":return[[s(e.name),"."+n.join(r?".":",")]];case"matrix":return r?[[s(e.name),n.map(t=>`;${e.name}=${t}`).join("")]]:[[s(e.name),`;${e.name}=${n.join(",")}`]];default:return[[s(e.name),n.join(",")]]}}if(Y(o)){const n=Object.entries(o).flatMap(([e,t])=>[[s(e),s(ee(t))]]);switch(t){case"form":return r?n:[[s(e.name),n.flat().join(",")]];case"simple":return[[s(e.name),r?n.map(([e,t])=>`${e}=${t}`).join(","):n.flat().join(",")]];case"label":return[[s(e.name),"."+(r?n.map(([e,t])=>`${e}=${t}`).join("."):n.flat().join("."))]];case"matrix":return[[s(e.name),r?n.map(([e,t])=>`;${e}=${t}`).join(""):`;${e.name}=${n.flat().join(",")}`]];default:return[[s(e.name),n.flat().join(",")]]}}return"label"===t?[[s(e.name),"."+s(ee(o))]]:"matrix"===t?[[s(e.name),`;${e.name}=${s(ee(o))}`]]:[[s(e.name),s(ee(o))]]}function oe(e){return e.map(([e,t])=>`${e}=${t}`).join("&")}function se(e){return e.map(([e,t])=>`${te(e)}=${te(t)}`).join("; ")}function ie(e){return re(e)}function ae(e,t,r){return{language:e,client:t,generate:e=>r(e)}}var ue=new Map;function le(e,t){return`${e.toLowerCase()}\0${t.toLowerCase()}`}function pe(e){ue.set(le(e.language,e.client),e)}function ce(e,t){return ue.get(le(e,t))}function de(){return[...ue.values()].map(e=>({language:e.language,client:e.client}))}function fe(e,t){e.register(t)}function me(e){let t=e.path;for(const r of e.parameters.filter(e=>"path"===e.in)){const e=ne(r).map(e=>e[1]).join(",");t=t.replace(new RegExp(`\\{${r.name}\\}`,"g"),e)}const r=e.parameters.filter(e=>"query"===e.in||"querystring"===e.in).flatMap(e=>ne(e)),n=e.headers.flatMap(e=>ne(e)),o=e.parameters.filter(e=>"cookie"===e.in).flatMap(e=>ne(e));for(const t of e.security||[]){const e=String(t.value??"");"apiKey"===t.type?"query"===t.in?r.push([encodeURIComponent(t.paramName||t.name),encodeURIComponent(e)]):"cookie"===t.in?o.push([t.paramName||t.name,e]):n.push([t.paramName||t.name,ie(e)]):"http"===t.type&&"bearer"===t.scheme?n.push(["Authorization",ie(`Bearer ${e}`)]):"http"===t.type&&"basic"===t.scheme&&n.push(["Authorization",ie(`Basic ${e}`)])}o.length>0&&n.push(["Cookie",se(o)]);const s=function(e,t){if(/^https?:\/\//i.test(t))return t;const r=(e||"").replace(/\/+$/g,"");return t.startsWith("/")||(t="/"+t),r+t}(e.baseUrl,t),i=oe(r);return{url:i?`${s}?${i}`:s,headers:n,body:e.body,queryPairs:r,cookiePairs:o}}function he(e){if(!e||"object"!=typeof e||Array.isArray(e))return"";const t=[];for(const[r,n]of Object.entries(e))if(Array.isArray(n))for(const e of n)t.push(`${encodeURIComponent(r)}=${encodeURIComponent(String(e??""))}`);else t.push(`${encodeURIComponent(r)}=${encodeURIComponent(String(n??""))}`);return t.join("&")}var ge=new Set(["get","put","post","delete","options","head","patch","trace"]),ye=[/^application\/(?:[a-z0-9.+-]+\+)?json(?:\s*;.*)?$/i,/^application\/x-www-form-urlencoded(?:\s*;.*)?$/i,/^multipart\/form-data(?:\s*;.*)?$/i,/^text\/[a-z0-9.+-]+(?:\s*;.*)?$/i,/^application\/octet-stream(?:\s*;.*)?$/i];function $e(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Se(e,t){if(q(e))for(const r of Object.values(e)){const e=t.deref(r);if(q(e)&&$e(e,"value"))return e.value;if(!q(e)&&void 0!==e)return e}}function be(e,t,r){const n=t.deref(e);if(!q(n))return;if($e(n,"example"))return n.example;const o=Se(n.examples,t);return void 0!==o?o:Q(n.schema,t,void 0,0,r)}function ve(e){if(!q(e))return;let t=y(e.url);if(!t)return;const r=q(e.variables)?e.variables:void 0;return t=t.replace(/\{([^{}]+)\}/g,(e,t)=>{if(!r)return e;const n=r[t];if(!q(n))return e;const o=X(n.default,n.example);return void 0===o?e:encodeURIComponent(String(o))}),t}function _e(e){if(Array.isArray(e))for(const t of e){const e=ve(t);if(e)return e}}function Te(e,t,r,n){const o=Array.isArray(t.security)?t.security:Array.isArray(e.security)?e.security:[],s=function(e){if(q(e.components))return q(e.components.securitySchemes)?e.components.securitySchemes:void 0}(e);if(!s)return[];const i=[],a=new Set;for(const e of o)if(q(e))for(const t of Object.keys(e)){if(a.has(t))continue;const e=r.deref(s[t]);if(!q(e))continue;const o=y(e.type);o&&(a.add(t),i.push({name:t,type:o,scheme:y(e.scheme)?.toLowerCase(),in:y(e.in)?.toLowerCase(),paramName:y(e.name),value:n?.[t]??`{{${t}}}`}))}return i}function we(e){if(!q(e))throw new TypeError("normalize options must be an object");if(!q(e.document))throw new TypeError("OpenAPI document root must be a plain object");const t=e.document,r=function(e){const t=[];return q(e)?("string"!=typeof e.openapi&&t.push("Missing or non-string openapi version field"),q(e.info)||t.push("info object missing or not an object"),void 0===e.paths||q(e.paths)||t.push("paths must be an object when defined"),void 0===e.components||q(e.components)||t.push("components must be an object when defined"),t):(t.push("OpenAPI document root must be a plain object"),t)}(t),n=new i(t,!0===e.softRefMode),o=y(e.path);if(!o)throw new TypeError("OpenAPI path must be a non-empty string");const s=function(e){const t=y(e)?.toLowerCase();if(!t||!ge.has(t))throw new Error(`Unsupported HTTP method: ${String(e)}`);return t}(e.method);if(!q(t.paths))throw new Error("OpenAPI document does not define a valid paths object");if(!$e(t.paths,o))throw new Error(`Path not found: ${o}`);const a=n.deref(t.paths[o]);if(!q(a))throw new Error(`Invalid Path Item Object: ${o}`);const u=n.deref(a[s]);if(!q(u))throw new Error(`Operation not found: ${s.toUpperCase()} ${o}`);const l=function(e,t,r){const n=new Map,o=(e,t)=>{if(Array.isArray(e))for(const o of e){const e=r.deref(o);if(!q(e))continue;const s=y(e.name),i=y(e.in)?.toLowerCase();if(!s||!i)continue;const a=`${i}\0${s}`;!t&&n.has(a)||n.set(a,e)}};return o(e,!1),o(t,!0),[...n.values()]}(a.parameters,u.parameters,n),p=l.map(e=>{const t=y(e.name),r=y(e.in)?.toLowerCase();if(!t||!r)throw new TypeError("Resolved parameter must define name and in");return{name:t,in:r,value:X($e(e,"example")?e.example:void 0,Se(e.examples,n),Q(e.schema,n)),style:y(e.style),explode:"boolean"==typeof e.explode?e.explode:void 0,allowReserved:"boolean"==typeof e.allowReserved?e.allowReserved:void 0}}),c=n.deref(u.requestBody),d=q(c)?function(e){if(!q(e))return;const t=Object.entries(e).filter(([e])=>e.trim().length>0);for(const e of ye){const r=t.find(([t])=>e.test(t.trim()));if(r)return r}return t[0]}(c.content):void 0,f={isRequestBody:!0,isResponse:!1};let m;if(d){const e=n.deref(d[1]);m={mediaType:d[0],value:be(e,n,f),encoding:q(e)?e.encoding:void 0}}const h=Te(t,u,n,e.securityValues),g=function(e,t,r,n){return y(e)??_e(t.servers)??_e(r.servers)??_e(n.servers)??"https://example.com"}(e.serverUrl,u,a,t);return{preWarnings:r,method:s.toUpperCase(),baseUrl:g,path:o,parameters:p,headers:p.filter(e=>"header"===e.in),body:m,security:h}}function Re(e){const t=String(e);let r='"';for(let e=0;e<t.length;e+=1){const n=t.charCodeAt(e);switch(n){case 8:r+="\\b";break;case 9:r+="\\t";break;case 10:r+="\\n";break;case 12:r+="\\f";break;case 13:r+="\\r";break;case 34:r+='\\"';break;case 92:r+="\\\\";break;default:r+=n<32||127===n?`\\${n.toString(8).padStart(3,"0")}`:t[e]}}return`${r}"`}function xe(e,t){return"string"==typeof e&&e.trim().length>0?e:t}function qe(e,t){return[` ${e} = curl_slist_append(${e}, ${Re(t)});`,` if (!${e}) {`,' fprintf(stderr, "Failed to allocate request headers\\n");'," exit_code = 1;"," goto cleanup;"," }"]}function Ce(e,t){return"string"==typeof e&&e.trim().length>0?e:t}function Ee(e){return String(e).replace(/[\r\n\u2028\u2029]+/g," ").replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g,"")}function Be(e,t){return"string"==typeof e&&e.trim().length>0?e:t}function je(e,t){return"string"==typeof e&&e.trim().length>0?e:t}function Ue(e){return String(e).replace(/[\r\n\u2028\u2029]+/g," ").replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g,"")}function He(e,t){return"string"==typeof e&&e.trim().length>0?e:t}function Oe(e){return String(e).replace(/[\r\n\u2028\u2029]+/g," ").replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g,"")}function Pe(e){return e.replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function De(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{return JSON.stringify(e)??""}catch{return String(e)}}function Fe(e){return e.replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function Ae(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{return JSON.stringify(e)??""}catch{return String(e)}}function Ne(e){return e.replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function Le(e){return e.replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function ke(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{return JSON.stringify(e)??""}catch{return String(e)}}function Me(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{const t=JSON.stringify(e);return void 0===t?String(e):t}catch{return String(e)}}function Ie(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o&&_(e)),i=Boolean(n&&o),a=function(e,t){const r=e.replace(/[^A-Za-z0-9_$]/g,"_"),n=/^[A-Za-z_$]/.test(r)?r:`_${r}`;return n.length>0?n:t}(J(e),"sendRequest"),u=n&&s?z(n.value):[],l=[],p=[];let g;if(s){p.push(" const formData = new FormData();");let e=0;for(const t of u){const r=String(t.name);if(t.file&&C(t.value)){e+=1;const t=`file${e}`;l.push(`${t}: File`),p.push(` formData.append(${B(r)}, ${t});`)}else p.push(` formData.append(${B(r)}, ${B(w(t.value))});`)}g="formData"}else n&&o&&(g=B(v(e)?he(n.value):V(e)));const y=G(t.headers,s).filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))}).map(([e,t])=>` headers.append(${B(String(e))}, ${B(String(t))});`),$=l.map((e,t)=>`file${t+1}`);return["// Requires a modern browser with File, FormData, Headers, and AbortController.","// Requires TypeScript 5.2+ and Axios 1.7.x.","// Install: npm install axios@^1.7","// Compile: npx tsc --target ES2022 --module ES2022 --moduleResolution bundler --lib ES2022,DOM main.ts","// Axios/browser header handling may combine repeated header values.","// Browser code cannot read local filesystem paths; pass each multipart file as a File argument.","",'import axios, { AxiosError } from "axios";',"",`export async function ${a}(`,...l.map((e,t)=>` ${e}${t<l.length-1?",":""}`),"): Promise<void> {",...p,...p.length>0?[""]:[]," const headers = new Headers();",...y,""," const response = await axios.request<string>({",` method: ${B(r)},`,` url: ${B(t.url)},`," headers,",...g?[` data: ${g},`]:[]," timeout: 30_000,",' responseType: "text",'," transformResponse: [(value: string) => value],"," validateStatus: () => true,"," });",""," const responseText =",' typeof response.data === "string"'," ? response.data",' : String(response.data ?? "");',""," if (response.status < 200 || response.status >= 300) {"," throw new Error("," `HTTP ${response.status} ${response.statusText}: ${responseText}`,"," );"," }",""," console.log(responseText);","}","",...0===l.length?[`${a}().catch((error: unknown) => {`," if (error instanceof AxiosError) {"," console.error(error.message);"," } else {"," console.error(error);"," }","});"]:["// Call the exported function with browser File objects:",`// ${a}(${$.join(", ")}).catch(console.error);`]].join("\n")}function We(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o&&_(e)),i=Boolean(n&&o),a=n&&s?z(n.value):[],u=[],l=[];let p;if(s){l.push(" const formData = new FormData();");let e=0;for(const t of a){const r=String(t.name);if(t.file&&C(t.value)){e+=1;const t=`file${e}`;u.push(`${t}: File`),l.push(` formData.append(${B(r)}, ${t});`)}else l.push(` formData.append(${B(r)}, ${B(w(t.value))});`)}p="formData"}else n&&o&&(p=B(v(e)?he(n.value):V(e)));const g=G(t.headers,s).filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))}).map(([e,t])=>` headers.append(${B(String(e))}, ${B(String(t))});`);return["// Requires a modern browser with Fetch, FormData, File, Headers, and AbortController.","// Requires TypeScript 5.2+.","// Compile: npx tsc main.ts --target ES2022 --module ES2022 --lib ES2022,DOM --strict","// Fetch may combine repeated header values according to the browser header model.","// Multipart files must be supplied as browser File arguments; local paths are inaccessible.","",0===u.length?"export async function sendRequest(): Promise<string> {":["export async function sendRequest(",...u.map((e,t)=>` ${e}${t<u.length-1?",":""}`),"): Promise<string> {"].join("\n"),...l,...l.length>0?[""]:[]," const headers = new Headers();",...g,""," const controller = new AbortController();"," const timeoutId = globalThis.setTimeout("," () => controller.abort(),"," 30_000,"," );",""," try {",` const response = await fetch(${B(t.url)}, {`,` method: ${B(r)},`," headers,",...p?[` body: ${p},`]:[]," signal: controller.signal,"," });",""," const responseText = await response.text();",""," if (!response.ok) {"," throw new Error("," `HTTP ${response.status} ${response.statusText}: ${responseText}`,"," );"," }",""," return responseText;"," } catch (error: unknown) {",' if (error instanceof DOMException && error.name === "AbortError") {',' throw new Error("Request timed out after 30 seconds", {'," cause: error,"," });"," }",""," throw error;"," } finally {"," globalThis.clearTimeout(timeoutId);"," }","}"].join("\n")}function ze(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o&&_(e)),i=Boolean(n&&o),a=function(e,t){const r=e.replace(/[^A-Za-z0-9_$]/g,"_"),n=/^[A-Za-z_$]/.test(r)?r:`_${r}`;return n.length>0?n:t}(J(e),"sendRequest"),u=n&&s?z(n.value):[],l=[],p=[];let g;if(s){p.push(" const formData = new FormData();");let e=0;for(const t of u){const r=String(t.name);if(t.file&&C(t.value)){e+=1;const t=`file${e}`;l.push(`${t}: File`),p.push(` formData.append(${B(r)}, ${t});`)}else p.push(` formData.append(${B(r)}, ${B(w(t.value))});`)}g="formData"}else n&&o&&(g=B(v(e)?he(n.value):V(e)));const y=G(t.headers,s).filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))});return["// Requires a modern browser with FormData, File, Headers, and AbortSignal.timeout().","// Requires TypeScript 5.2+ and ofetch 1.4+.","// Install: npm install ofetch@^1.4","// Compile: npx tsc main.ts --target ES2022 --module ES2022 --moduleResolution bundler --lib ES2022,DOM --strict","// Fetch may combine repeated headers according to its header model.","// Multipart files must be supplied as File arguments; browsers cannot read local paths.","",'import { ofetch } from "ofetch";',"",0===l.length?`export async function ${a}(): Promise<string> {`:[`export async function ${a}(`,...l.map((e,t)=>` ${e}${t<l.length-1?",":""}`),"): Promise<string> {"].join("\n"),...p,...p.length>0?[""]:[]," const headers = new Headers();",...y.map(([e,t])=>` headers.append(${B(String(e))}, ${B(String(t))});`),""," try {"," return await ofetch<string>(",` ${B(t.url)},`," {",` method: ${B(r)},`," headers,",...g?[` body: ${g},`]:[]," signal: AbortSignal.timeout(30_000),",' responseType: "text",'," retry: 0,"," },"," );"," } catch (error: unknown) {"," if (error instanceof Error) {"," throw new Error(`Request failed: ${error.message}`, {"," cause: error,"," });"," }","",' throw new Error("Request failed with an unknown error", {'," cause: error,"," });"," }","}"].join("\n")}function Je(e){return e.replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function Ve(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{return JSON.stringify(e)??""}catch{return String(e)}}function Xe(e){return e.replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function Ge(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{return JSON.stringify(e)??""}catch{return String(e)}}function Ke(e){return e.replace(/\*\//g,"* /").replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function Ze(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{return JSON.stringify(e)??""}catch{return String(e)}}function Qe(e){return e.replace(/\(\*/g,"( *").replace(/\*\)/g,"* )").replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function Ye(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{return JSON.stringify(e)??""}catch{return String(e)}}function et(e){return e.replace(/^\/\/\s*/,"").replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function tt(e){return e.replace(/^\/\/\s*/,"").replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function rt(e){const t=new Map;for(const[r,n]of e){const e=String(r),o=e.trim().toLowerCase(),s=t.get(o);s?s.values.push(String(n)):t.set(o,{name:e,values:[String(n)]})}const r=[" 'headers' => ["];for(const{name:e,values:n}of t.values())1===n.length?r.push(` ${H(e)} => ${H(n[0])},`):r.push(` ${H(e)} => [`,...n.map(e=>` ${H(e)},`)," ],");return r.push(" ],"),r}function nt(e){return e.replace(/^\/\/\s*/,"").replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function ot(e){const t=new Map;for(const[r,n]of e){const e=String(r),o=e.trim().toLowerCase(),s=t.get(o);s?s.values.push(String(n)):t.set(o,{name:e,values:[String(n)]})}const r=["$headers = ["];for(const{name:e,values:n}of t.values())1===n.length?r.push(` ${H(e)} => ${H(n[0])},`):r.push(` ${H(e)} => [`,...n.map(e=>` ${H(e)},`)," ],");return r.push("];"),r}function st(e){return e.replace(/^\/\/\s*/,"").replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function it(e){return e.replace(/^\/\/\s*/,"").replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function at(e){return e.replace(/^\/\/\s*/,"").replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function ut(e){return 0===e.length?"[]":["[",...e.map(([e,t])=>` (${j(String(e))}, ${j(String(t))}),`)," ]"].join("\n")}function lt(e){return e.replace(/^\/\/\s*/,"").replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function pt(e){return e.map(([e,t])=>` (${j(String(e))}, ${j(String(t))}),`)}function ct(e){return e.replace(/^\/\/\s*/,"").replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function dt(e){return e.map(([e,t])=>` (${j(String(e))}, ${j(String(t))}),`)}function ft(e){return e.replace(/^\/\/\s*/,"").replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function mt(e){return e.map(([e,t])=>` (${j(String(e))}, ${j(String(t))}),`)}function ht(e){return e.replace(/^\/\/\s*/,"").replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function gt(e){return e.map(([e,t])=>` (${j(String(e))}, ${j(String(t))}),`)}function yt(e){let t='"';for(const r of e){const e=r.codePointAt(0)??0;switch(r){case"\\":t+="\\\\";break;case'"':t+='\\"';break;case"\n":t+="\\n";break;case"\r":t+="\\r";break;case"\t":t+="\\t";break;default:t+=e<32||127===e||e>126?`\\u{${e.toString(16)}}`:r}}return`${t}"`}function $t(e){const t=e.replace(/\\/g,"\\\\").replace(/`/g,"\\`").replace(/\r/g,"\\r").replace(/\n/g,"\\n");return/^[A-Za-z.][A-Za-z0-9._]*$/.test(e)&&!/^\.[0-9]/.test(e)?e:`\`${t}\``}function St(e,t=2){const r=" ".repeat(t);return e.split("\n").map(e=>e?`${r}${e}`:e).join("\n")}function bt(e,t){const r=e.headers;if(!r)return t;const n=Array.isArray(r)?r:Object.entries(r);for(const[e,t]of n){if("content-type"!==String(e).toLowerCase())continue;const r=Array.isArray(t)?t[0]:t;if(null==r)continue;const n=String(r).trim();if(n)return n}return t}function vt(e){return e.replace(/^\/\/\s*/,"").replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function _t(e){return e.map(([e,t])=>` [${O(String(e))}, ${O(String(t))}],`)}function Tt(e){return e.replace(/^\/\/\s*/,"").replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function wt(e,t){return e.map(e=>e?`${t}${e}`:e)}function Rt(e){return e.replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function xt(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{return JSON.stringify(e)??""}catch{return String(e)}}function qt(e){return e.replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function Ct(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{return JSON.stringify(e)??""}catch{return String(e)}}function Et(e){return e.replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function Bt(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{return JSON.stringify(e)??""}catch{return String(e)}}var jt=[ae("c","libcurl",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=g(r),i=Boolean(n)&&o&&_(e),p=o&&(Boolean(n)||s),y=["/* Requires libcurl development headers and library. */","/* Build: cc example.c -o example $(pkg-config --cflags --libs libcurl) */","/* Proxy and TLS trust settings may be read from the environment. */"],S=t.headers.filter(([e])=>{const t=String(e);return(!p||!d(t)&&!f(t))&&((!i||!c(t))&&!(p&&!i&&n&&c(t)))}),T=[];for(const[e,t]of S)T.push(...qe("headers",`${String(e)}: ${String(t)}`));const w=[];let R=!1;if(i&&n)R=!0,z(n.value).forEach((e,t)=>{const r=String(e.name),n=`part${t}`;if(w.push(` curl_mimepart *${n} = curl_mime_addpart(mime);`,` if (!${n}) {`,' fprintf(stderr, "Failed to allocate multipart field\\n");'," exit_code = 1;"," goto cleanup;"," }",` if (curl_mime_name(${n}, ${Re(r)}) != CURLE_OK) {`,' fprintf(stderr, "Failed to set multipart field name\\n");'," exit_code = 1;"," goto cleanup;"," }"),e.file&&C(e.value)){const t=e.value,s=xe(t.path,a),i=xe(t.name,u),p=xe(t.contentType,l);"string"==typeof t.path&&0!==t.path.trim().length||y.push(`/* ${o=x(s,r),String(o).replace(/[\r\n\u2028\u2029]+/g," ").replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]+/g," ").replace(/\*\//g,"* /")} */`),w.push(` if (curl_mime_filedata(${n}, ${Re(s)}) != CURLE_OK ||`,` curl_mime_filename(${n}, ${Re(i)}) != CURLE_OK ||`,` curl_mime_type(${n}, ${Re(p)}) != CURLE_OK) {`,' fprintf(stderr, "Failed to configure multipart file\\n");'," exit_code = 1;"," goto cleanup;"," }")}else w.push(` if (curl_mime_data(${n}, ${Re(function(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{return JSON.stringify(e)??String(e)}catch{return String(e)}}(e.value))}, CURL_ZERO_TERMINATED) != CURLE_OK) {`,' fprintf(stderr, "Failed to configure multipart field\\n");'," exit_code = 1;"," goto cleanup;"," }");var o});else if(p){const t=Boolean(n)&&v(e),r=Boolean(n)&&b(e),o=n?t?he(n.value):V(e):"",s=t?"application/x-www-form-urlencoded":r?"application/json":"text/plain",i=n?$(e,s):s;w.push(...qe("headers",`Content-Type: ${i}`),` curl_easy_setopt(curl, CURLOPT_POSTFIELDS, ${Re(o)});`," curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE_LARGE, (curl_off_t)-1);")}return["#include <curl/curl.h>","#include <stdio.h>","",...y,"","int main(void) {"," int exit_code = 0;"," CURLcode result;"," long status = 0;"," struct curl_slist *headers = NULL;",...R?[" curl_mime *mime = NULL;"]:[],""," if (curl_global_init(CURL_GLOBAL_DEFAULT) != CURLE_OK) {",' fprintf(stderr, "Failed to initialize libcurl\\n");'," return 1;"," }",""," CURL *curl = curl_easy_init();"," if (!curl) {",' fprintf(stderr, "Failed to create libcurl handle\\n");'," curl_global_cleanup();"," return 1;"," }",...R?[""," mime = curl_mime_init(curl);"," if (!mime) {",' fprintf(stderr, "Failed to create multipart body\\n");'," exit_code = 1;"," goto cleanup;"," }"]:[],"",` curl_easy_setopt(curl, CURLOPT_URL, ${Re(t.url)});`,` curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, ${Re(r)});`," curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 30L);"," curl_easy_setopt(curl, CURLOPT_TIMEOUT, 30L);"," curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);"," curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L);"," curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, fwrite);"," curl_easy_setopt(curl, CURLOPT_WRITEDATA, stdout);","",...T,...T.length>0?[""]:[],...w,...w.length>0?[""]:[],...R?[" curl_easy_setopt(curl, CURLOPT_MIMEPOST, mime);"]:[]," if (headers) {"," curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);"," }",""," result = curl_easy_perform(curl);"," if (result != CURLE_OK) {",' fprintf(stderr, "Request failed: %s\\n", curl_easy_strerror(result));'," exit_code = 1;"," goto cleanup;"," }",""," if (curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &status) != CURLE_OK) {",' fprintf(stderr, "Failed to read HTTP status\\n");'," exit_code = 1;"," goto cleanup;"," }",""," if (status < 200 || status >= 300) {",' fprintf(stderr, "\\nHTTP request failed with status %ld\\n", status);'," exit_code = 1;"," }","","cleanup:",...R?[" curl_mime_free(mime);"]:[]," curl_slist_free_all(headers);"," curl_easy_cleanup(curl);"," curl_global_cleanup();"," return exit_code;","}"].join("\n")}),ae("csharp","httpclient",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n)&&o&&_(e),i=Boolean(n&&o)||!n&&g(r),p=[],y=[];let S=!1;if(n&&s)p.push(" var multipart = new MultipartFormDataContent();"),y.push(" multipart.Dispose();"),z(n.value).forEach((e,t)=>{const r=String(e.name);if(e.file&&C(e.value)){const n=e.value,o=Ce(n.path,a),s=Ce(n.name,u),i=Ce(n.contentType,l),c=`fileStream${t}`,d=`fileContent${t}`;"string"==typeof n.path&&0!==n.path.trim().length||p.push(` // ${Ee(x(o,r))}`),p.push(` var ${c} = File.OpenRead(${D(o)});`,` var ${d} = new StreamContent(${c});`,` ${d}.Headers.ContentType =`,` MediaTypeHeaderValue.Parse(${D(i)});`," multipart.Add(",` ${d},`,` ${D(r)},`,` ${D(s)}`," );")}else p.push(" multipart.Add(",` new StringContent(${D(function(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{const t=JSON.stringify(e);return void 0===t?String(e):t}catch{return String(e)}}(e.value))}),`,` ${D(r)}`," );")}),p.push(" message.Content = multipart;"),S=!0;else if(n&&o){const t=v(e),r=b(e),o=t?he(n.value):V(e),s=$(e,t?"application/x-www-form-urlencoded":r?"application/json":"text/plain");p.push(" message.Content = new StringContent(",` ${D(o)},`," Encoding.UTF8,",` ${D(s)}`," );"),S=!0}else!n&&g(r)&&(p.push(" message.Content = new ByteArrayContent(Array.Empty<byte>());"),S=!0);const T=t.headers.filter(([e])=>{const t=String(e);return!(i&&(d(t)||f(t)||S&&c(t)))}).flatMap(([e,t],r)=>{const n=String(e),o=String(t),s=`headerAdded${r}`;return[` var ${s} = message.Headers.TryAddWithoutValidation(`,` ${D(n)},`,` ${D(o)}`," );",...S?[` if (!${s})`," {",` ${s} = message.Content!.Headers.TryAddWithoutValidation(`,` ${D(n)},`,` ${D(o)}`," );"," }"]:[],` if (!${s})`," {",` Console.Error.WriteLine(${D(`Ignored invalid header: ${Ee(n)}`)});`," }"]});return["using System;","using System.IO;","using System.Net.Http;","using System.Net.Http.Headers;","using System.Text;","using System.Threading;","using System.Threading.Tasks;","","// Requires .NET 8 SDK or later.","// Create and run with: dotnet new console && dotnet run","// Standard HTTP proxy environment variables are honored.","internal static class Program","{"," private static async Task<int> Main()"," {"," using var client = new HttpClient"," {"," Timeout = TimeSpan.FromSeconds(30)"," };",""," using var message = new HttpRequestMessage(",` new HttpMethod(${D(r)}),`,` ${D(t.url)}`," );",""," using var cancellation ="," new CancellationTokenSource(TimeSpan.FromSeconds(30));",""," try"," {",...p,...p.length>0?[""]:[],...T,...T.length>0?[""]:[]," using var response = await client.SendAsync("," message,"," HttpCompletionOption.ResponseHeadersRead,"," cancellation.Token"," );"," var responseText ="," await response.Content.ReadAsStringAsync(cancellation.Token);",""," if (!response.IsSuccessStatusCode)"," {"," Console.Error.WriteLine(",' $"HTTP {(int)response.StatusCode} " +',' $"{response.ReasonPhrase}: {responseText}"'," );"," return 1;"," }",""," Console.Write(responseText);"," return 0;"," }"," catch (OperationCanceledException exception)"," {",' Console.Error.WriteLine($"Request timed out: {exception.Message}");'," return 1;"," }"," catch (Exception exception)"," {",' Console.Error.WriteLine($"Request failed: {exception.Message}");'," return 1;"," }",...y.length>0?[" finally"," {",...y," }"]:[]," }","}"].join("\n")}),ae("csharp","restsharp",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n)&&o&&_(e),i=Boolean(n&&o)||!n&&g(r),p=[];if(n&&s)z(n.value).forEach(e=>{const t=String(e.name);if(e.file&&C(e.value)){const n=e.value,o=Be(n.path,a),s=Be(n.name,u),i=Be(n.contentType,l);"string"==typeof n.path&&0!==n.path.trim().length||p.push(` // ${r=x(o,t),String(r).replace(/[\r\n\u2028\u2029]+/g," ").replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g,"")}`),p.push(" requestMessage.AddFile(",` ${D(t)},`,` ${D(o)},`,` ${D(i)},`,` ${D(s)}`," );")}else p.push(" requestMessage.AddParameter(",` ${D(t)},`,` ${D(function(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{const t=JSON.stringify(e);return void 0===t?String(e):t}catch{return String(e)}}(e.value))}`," );");var r});else if(n&&o){const t=v(e),r=b(e),o=t?he(n.value):V(e),s=$(e,t?"application/x-www-form-urlencoded":r?"application/json":"text/plain");p.push(" requestMessage.AddStringBody(",` ${D(o)},`,` ContentType.FromMediaType(${D(s)})`," );")}else!n&&g(r)&&p.push(" requestMessage.AddStringBody(",' "",'," ContentType.Binary"," );");const y=t.headers.filter(([e])=>{const t=String(e);return!(i&&(d(t)||f(t)||c(t)))}).map(([e,t])=>` requestMessage.AddHeader(${D(String(e))}, ${D(String(t))});`);return["using System;","using System.Threading;","using System.Threading.Tasks;","using RestSharp;","","// Requires .NET 8 and RestSharp 112.x.","// Add the dependency with: dotnet add package RestSharp","// Run with: dotnet run","internal static class Program","{"," private static async Task<int> Main()"," {"," var options = new RestClientOptions"," {",` BaseUrl = new Uri(${D(t.url)}),`," MaxTimeout = 30_000"," };",""," using var client = new RestClient(options);"," var requestMessage = new RestRequest(",' resource: "",',` method: new Method(${D(r)})`," );","",...y,...y.length>0?[""]:[],...p,...p.length>0?[""]:[]," using var cancellation ="," new CancellationTokenSource(TimeSpan.FromSeconds(30));",""," try"," {"," var response = await client.ExecuteAsync("," requestMessage,"," cancellation.Token"," );"," var responseText = response.Content ?? string.Empty;",""," if (!response.IsSuccessful)"," {"," Console.Error.WriteLine(",' $"HTTP {(int)response.StatusCode} " +',' $"{response.StatusDescription}: {responseText}"'," );"," return 1;"," }",""," Console.Write(responseText);"," return 0;"," }"," catch (OperationCanceledException exception)"," {",' Console.Error.WriteLine($"Request timed out: {exception.Message}");'," return 1;"," }"," catch (Exception exception)"," {",' Console.Error.WriteLine($"Request failed: {exception.Message}");'," return 1;"," }"," }","}"].join("\n")}),ae("clojure","clj-http",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o)||!n&&g(r);let i,a;if(n&&o){const t=v(e),r=b(e);i=t?he(n.value):V(e),a=$(e,t?"application/x-www-form-urlencoded":r?"application/json":"text/plain")}else!n&&g(r)&&(i="",a="application/octet-stream");const u=t.headers.filter(([e])=>{const t=String(e);return!(s&&(d(t)||f(t)||c(t)))}).map(([e,t])=>` ${W(String(e))} ${W(String(t))}`);return void 0!==a&&u.push(` "Content-Type" ${W(a)}`),[";; Requires Clojure 1.11+ and clj-http 3.13.0.",";; Run with clj-http on the classpath.","(require '[clj-http.client :as client])","","(let [response"," (try"," (client/request"," {:method",` (keyword ${W(r.toLowerCase())})`,` :url ${W(t.url)}`," :headers"," {",...u," }",...void 0!==i?[` :body ${W(i)}`]:[]," :socket-timeout 30000"," :connection-timeout 30000"," :throw-exceptions false"," :as :text})"," (catch Exception exception"," (binding [*out* *err*]",' (println "Request failed:" (.getMessage exception)))'," (System/exit 1)))]"," (if (<= 200 (:status response) 299)",' (print (or (:body response) ""))'," (do"," (binding [*out* *err*]",' (println (str "HTTP "'," (:status response)",' ": "',' (or (:body response) ""))))'," (System/exit 1))))"].join("\n")}),ae("dart","http",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o)||!n&&g(r);let i,a;if(n&&o){const t=v(e),r=b(e);i=t?he(n.value):V(e),a=$(e,t?"application/x-www-form-urlencoded":r?"application/json":"text/plain")}else!n&&g(r)&&(i="");const u=t.headers.filter(([e])=>{const t=String(e);return!(s&&(d(t)||f(t)||void 0!==a&&c(t)))}).map(([e,t])=>` request.headers.add(${B(String(e))}, ${B(String(t))});`);return void 0!==a&&u.push(` request.headers[${B("Content-Type")}] = ${B(a)};`),["import 'dart:async';","import 'dart:io';","","import 'package:http/http.dart' as http;","","// Requires Dart 3 and package:http.","// Add the dependency with: dart pub add http","// Run with: dart run","Future<void> main() async {"," final client = http.Client();",""," try {",` final request = http.Request(${B(r)}, Uri.parse(${B(t.url)}));`,...u.map(e=>` ${e}`),...void 0!==i?[` request.body = ${B(i)};`]:[],""," final streamedResponse = await client"," .send(request)"," .timeout(const Duration(seconds: 30));"," final responseText = await streamedResponse.stream"," .bytesToString()"," .timeout(const Duration(seconds: 30));",""," if (streamedResponse.statusCode < 200 ||"," streamedResponse.statusCode >= 300) {"," stderr.writeln("," 'HTTP ${streamedResponse.statusCode} '"," '${streamedResponse.reasonPhrase ?? ''}: $responseText',"," );"," exitCode = 1;"," return;"," }",""," stdout.write(responseText);"," } on TimeoutException catch (exception) {"," stderr.writeln('Request timed out: $exception');"," exitCode = 1;"," } on Object catch (exception, stackTrace) {"," stderr.writeln('Request failed: $exception');"," stderr.writeln(stackTrace);"," exitCode = 1;"," } finally {"," client.close();"," }","}"].join("\n")}),ae("fsharp","httpclient",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n)&&o&&_(e),i=Boolean(n&&o)||!n&&g(r),p=[],y=[];let S=[];if(n&&s)p.push(" use multipart = new MultipartFormDataContent()"),z(n.value).forEach((e,t)=>{const r=String(e.name);if(e.file&&C(e.value)){const n=e.value,o=je(n.path,a),s=je(n.name,u),i=je(n.contentType,l),c=`fileStream${t}`,d=`fileContent${t}`;"string"==typeof n.path&&0!==n.path.trim().length||p.push(` // ${Ue(x(o,r))}`),p.push(` let ${c} = File.OpenRead(${I(o)})`,` let ${d} = new StreamContent(${c})`,` ${d}.Headers.ContentType <-`,` MediaTypeHeaderValue.Parse(${I(i)})`," multipart.Add(",` ${d},`,` ${I(r)},`,` ${I(s)}`," )"),y.unshift(` ${d}.Dispose()`,` ${c}.Dispose()`)}else{const n=`fieldContent${t}`;p.push(` let ${n} =`,` new StringContent(${I(function(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{const t=JSON.stringify(e);return void 0===t?String(e):t}catch{return String(e)}}(e.value))})`,` multipart.Add(${n}, ${I(r)})`)}}),S=[" request.Content <- multipart"];else if(n&&o){const t=v(e),r=b(e),o=t?he(n.value):V(e),s=$(e,t?"application/x-www-form-urlencoded":r?"application/json":"text/plain");S=[" request.Content <-"," new StringContent(",` ${I(o)},`," Encoding.UTF8,",` ${I(s)}`," )"]}else!n&&g(r)&&(S=[" request.Content <- new ByteArrayContent(Array.empty<byte>)"]);const T=t.headers.filter(([e])=>{const t=String(e);return!(i&&(d(t)||f(t)||c(t)))}).flatMap(([e,t],r)=>{const n=String(e),o=String(t),s=`headerAdded${r}`;return[` let ${s} =`," if isNull request.Content then"," request.Headers.TryAddWithoutValidation(",` ${I(n)},`,` ${I(o)}`," )"," else"," request.Headers.TryAddWithoutValidation(",` ${I(n)},`,` ${I(o)}`," )"," || request.Content.Headers.TryAddWithoutValidation(",` ${I(n)},`,` ${I(o)}`," )",` if not ${s} then`,` eprintfn ${I(`Ignored invalid header: ${Ue(n)}`)}`]});return["open System","open System.IO","open System.Net.Http","open System.Net.Http.Headers","open System.Text","","// Requires .NET 8 SDK or later.","// Run with: dotnet run","// Standard HTTP proxy environment variables are honored.","[<EntryPoint>]","let main _ ="," use client = new HttpClient()"," client.Timeout <- TimeSpan.FromSeconds(30.0)",""," use request ="," new HttpRequestMessage(",` new HttpMethod(${I(r)}),`,` ${I(t.url)}`," )","",...p,...p.length>0?[""]:[],...S,...S.length>0?[""]:[],...T,...T.length>0?[""]:[]," try"," use response = client.Send(request)"," let responseText = response.Content.ReadAsStringAsync().Result",""," if not response.IsSuccessStatusCode then"," eprintfn",' "HTTP %d %s: %s"'," (int response.StatusCode)"," response.ReasonPhrase"," responseText"," 1"," else",' printfn "%s" responseText'," 0"," with exception ->",' eprintfn "Request failed: %s" exception.Message'," 1",...y.length>0?[" finally",...y]:[]].join("\n")}),ae("go","new-request",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n)&&o&&_(e),i=Boolean(n&&o)||!n&&g(r),p=new Set(['"context"','"fmt"','"io"','"net/http"','"os"','"time"']),y=[];let S,T="nil";if(n&&s)p.add('"bytes"'),p.add('"mime/multipart"'),p.add('"net/textproto"'),y.push(" var bodyBuffer bytes.Buffer"," multipartWriter := multipart.NewWriter(&bodyBuffer)"),z(n.value).forEach((e,t)=>{const r=String(e.name);if(e.file&&C(e.value)){const o=e.value,s=He(o.path,a),i=He(o.name,u),c=He(o.contentType,l),d=`uploadFile${t}`,f=`filePart${t}`,m=`fileHeader${t}`;"string"==typeof o.path&&0!==o.path.trim().length||y.push(` // ${n=x(s,r),String(n).replace(/[\r\n\u2028\u2029]+/g," ").replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g,"")}`),y.push(` ${d}, err := os.Open(${A(s)})`," if err != nil {",` fmt.Fprintf(os.Stderr, ${A(`open multipart file ${r}: %v\n`)}, err)`," os.Exit(1)"," }","",` ${m} := make(textproto.MIMEHeader)`,` ${m}.Set(`,' "Content-Disposition",'," mime.FormatMediaType(",' "form-data",'," map[string]string{",` "name": ${A(r)},`,` "filename": ${A(i)},`," },"," ),"," )",` ${m}.Set("Content-Type", ${A(c)})`,` ${f}, err := multipartWriter.CreatePart(${m})`," if err != nil {",` _ = ${d}.Close()`,` fmt.Fprintf(os.Stderr, ${A(`create multipart file part ${r}: %v\n`)}, err)`," os.Exit(1)"," }",` if _, err := io.Copy(${f}, ${d}); err != nil {`,` _ = ${d}.Close()`,` fmt.Fprintf(os.Stderr, ${A(`copy multipart file ${r}: %v\n`)}, err)`," os.Exit(1)"," }",` if err := ${d}.Close(); err != nil {`,` fmt.Fprintf(os.Stderr, ${A(`close multipart file ${r}: %v\n`)}, err)`," os.Exit(1)"," }"),p.add('"mime"')}else y.push(" if err := multipartWriter.WriteField(",` ${A(r)},`,` ${A(function(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{const t=JSON.stringify(e);return void 0===t?String(e):t}catch{return String(e)}}(e.value))},`," ); err != nil {",` fmt.Fprintf(os.Stderr, ${A(`write multipart field ${r}: %v\n`)}, err)`," os.Exit(1)"," }");var n}),y.push(" if err := multipartWriter.Close(); err != nil {",' fmt.Fprintf(os.Stderr, "close multipart writer: %v\\n", err)'," os.Exit(1)"," }"),T="&bodyBuffer",S="multipartWriter.FormDataContentType()";else if(n&&o){p.add('"strings"');const t=v(e),r=b(e),o=t?"application/x-www-form-urlencoded":r?"application/json":"text/plain";T=`strings.NewReader(${A(t?he(n.value):V(e))})`,S=A($(e,o))}else!n&&g(r)&&(p.add('"http"'),T="http.NoBody");const w=t.headers.filter(([e])=>{const t=String(e);return!i||!(d(t)||f(t)||c(t))}).map(([e,t])=>` req.Header.Add(${A(String(e))}, ${A(String(t))})`);return S&&w.push(` req.Header.Set("Content-Type", ${S})`),["package main","","// Requires Go 1.22 or later.","// Run with: go run .","// Standard HTTP proxy environment variables are honored.","import (",...[...p].sort().map(e=>` ${e}`),")","","func main() {"," ctx, cancel := context.WithTimeout("," context.Background(),"," 30*time.Second,"," )"," defer cancel()","",...y,...y.length>0?[""]:[]," req, err := http.NewRequestWithContext("," ctx,",` ${A(r)},`,` ${A(t.url)},`,` ${T},`," )"," if err != nil {",' fmt.Fprintf(os.Stderr, "create request: %v\\n", err)'," os.Exit(1)"," }",...w,""," client := &http.Client{"," Timeout: 30 * time.Second,"," }",""," resp, err := client.Do(req)"," if err != nil {",' fmt.Fprintf(os.Stderr, "perform request: %v\\n", err)'," os.Exit(1)"," }",""," responseBody, readErr := io.ReadAll(resp.Body)"," closeErr := resp.Body.Close()"," if readErr != nil {",' fmt.Fprintf(os.Stderr, "read response body: %v\\n", readErr)'," os.Exit(1)"," }"," if closeErr != nil {",' fmt.Fprintf(os.Stderr, "close response body: %v\\n", closeErr)'," os.Exit(1)"," }",""," if resp.StatusCode < http.StatusOK ||"," resp.StatusCode >= http.StatusMultipleChoices {",' fmt.Fprintf(os.Stderr, "HTTP %s: %s\\n",'," resp.Status,"," string(responseBody),"," )"," os.Exit(1)"," }",""," fmt.Println(string(responseBody))","}"].join("\n")}),ae("http","http1",function(e){const t=me(e),r=m(e.method),n=e.body,o=Boolean(n)&&h(r),s=t.headers.filter(([e])=>{const t=String(e);return!o||!d(t)&&!f(t)}),i=[`${Oe(r)} ${Oe(t.url)} HTTP/1.1`,...s.map(([e,t])=>`${Oe(e)}: ${Oe(t)}`)];if(o&&n){const t=v(e)?he(n.value):V(e);i.push("",t)}else i.push("");return i.join("\r\n")}),ae("java","asynchttp",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o&&_(e)),i=Boolean(n&&o),p=["Requires JDK 17+ and AsyncHttpClient 3.0.1.","Dependency: org.asynchttpclient:async-http-client:3.0.1","Compile: javac -cp 'lib/*' Example.java","Run: java -cp '.:lib/*' Example","Repeated request headers and multipart fields are added separately."],g=new Set(["import java.time.Duration;","import java.util.concurrent.TimeUnit;","import org.asynchttpclient.AsyncHttpClient;","import org.asynchttpclient.BoundRequestBuilder;","import org.asynchttpclient.DefaultAsyncHttpClientConfig;","import org.asynchttpclient.Response;","import static org.asynchttpclient.Dsl.asyncHttpClient;"]),S=[];if(n&&s){g.add("import java.io.File;"),g.add("import org.asynchttpclient.request.body.multipart.FilePart;"),g.add("import org.asynchttpclient.request.body.multipart.StringPart;");for(const e of z(n.value)){const t=String(e.name);if(e.file&&C(e.value)){const r=e.value,n=y(r.path),o=n??a,s=y(r.name)??u,i=y(r.contentType)??l;n||p.push(Pe(x(o,t)).replace(/^(?:\/\/|#)\s*/,"")),S.push(" builder.addBodyPart(new FilePart(",` ${F(t)},`,` new File(${F(o)}),`,` ${F(i)},`," null,",` ${F(s)}`," ));")}else S.push(" builder.addBodyPart(new StringPart(",` ${F(t)},`,` ${F(De(e.value))}`," ));")}}else if(n&&o){const t=v(e),r=b(e),o=t?he(n.value):V(e),s=$(e,t?"application/x-www-form-urlencoded":r?"application/json":"text/plain");S.push(` builder.setHeader("Content-Type", ${F(s)});`,` builder.setBody(${F(o)});`)}const T=t.headers.filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!i||!c(t))}).map(([e,t])=>` builder.addHeader(${F(String(e))}, ${F(String(t))});`);return[...p.map(e=>`// ${Pe(e)}`),"",[...g].sort().join("\n"),"","public final class Example {"," private Example() {}",""," public static void main(String[] args) throws Exception {"," DefaultAsyncHttpClientConfig config ="," new DefaultAsyncHttpClientConfig.Builder()"," .setConnectTimeout(Duration.ofSeconds(30))"," .setReadTimeout(Duration.ofSeconds(30))"," .setRequestTimeout(Duration.ofSeconds(30))"," .build();",""," try (AsyncHttpClient client = asyncHttpClient(config)) {"," BoundRequestBuilder builder = client.prepare(",` ${F(r)},`,` ${F(t.url)}`," );",...T,...T.length>0?[""]:[],...S,...S.length>0?[""]:[]," Response response = builder"," .execute()"," .get(30, TimeUnit.SECONDS);"," String responseBody = response.getResponseBody();",""," if (response.getStatusCode() < 200 ||"," response.getStatusCode() >= 300) {"," throw new IllegalStateException(",' "HTTP " + response.getStatusCode() + " "',' + response.getStatusText() + ": " + responseBody'," );"," }",""," System.out.println(responseBody);"," }"," }","}"].join("\n")}),ae("java","java-net-http",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o&&_(e)),i=Boolean(n&&o),p=["Requires JDK 17+; no external dependencies.","Compile: javac Example.java","Run: java Example","Repeated request headers and multipart fields are emitted separately."],g=new Set(["import java.net.URI;","import java.net.http.HttpClient;","import java.net.http.HttpRequest;","import java.net.http.HttpResponse;","import java.nio.charset.StandardCharsets;","import java.time.Duration;"]),S=[];let T,w="HttpRequest.BodyPublishers.noBody()";if(n&&s){g.add("import java.io.ByteArrayOutputStream;"),g.add("import java.nio.file.Files;"),g.add("import java.nio.file.Path;"),g.add("import java.util.UUID;"),S.push(' String boundary = "----JavaBoundary" + UUID.randomUUID();'," ByteArrayOutputStream multipartBody ="," new ByteArrayOutputStream();");let e=0;for(const t of z(n.value)){const r=Ne(String(t.name));if(S.push(" multipartBody.write(",' ("--" + boundary + "\\r\\n")'," .getBytes(StandardCharsets.UTF_8)"," );"),t.file&&C(t.value)){e+=1;const n=t.value,o=y(n.path),s=o??a,i=Ne(y(n.name)??u),c=(y(n.contentType)??l).replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g,"").trim()||l,d=`filePath${e}`;o||p.push(Fe(x(s,String(t.name))).replace(/^(?:\/\/|#)\s*/,"")),S.push(` Path ${d} = Path.of(${F(s)});`," multipartBody.write(",` ${F(`Content-Disposition: form-data; name="${r}"; filename="${i}"\r\n`)}.getBytes(StandardCharsets.UTF_8)`," );"," multipartBody.write(",` ${F(`Content-Type: ${c}\r\n\r\n`)}.getBytes(StandardCharsets.UTF_8)`," );",` Files.copy(${d}, multipartBody);`," multipartBody.write(",' "\\r\\n".getBytes(StandardCharsets.UTF_8)'," );")}else S.push(" multipartBody.write(",` ${F(`Content-Disposition: form-data; name="${r}"\r\n\r\n`)}.getBytes(StandardCharsets.UTF_8)`," );"," multipartBody.write(",` ${F(Ae(t.value))}.getBytes(StandardCharsets.UTF_8)`," );"," multipartBody.write(",' "\\r\\n".getBytes(StandardCharsets.UTF_8)'," );")}S.push(" multipartBody.write(",' ("--" + boundary + "--\\r\\n")'," .getBytes(StandardCharsets.UTF_8)"," );"),w="HttpRequest.BodyPublishers.ofByteArray(multipartBody.toByteArray())",T='"multipart/form-data; boundary=" + boundary'}else if(n&&o){const t=v(e),r=b(e),o=t?"application/x-www-form-urlencoded":r?"application/json":"text/plain";w=["HttpRequest.BodyPublishers.ofString(",`${F(t?he(n.value):V(e))}, StandardCharsets.UTF_8`,")"].join(""),T=F($(e,o))}const R=t.headers.filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!i||!c(t))}).map(([e,t])=>` .header(${F(String(e))}, ${F(String(t))})`);return void 0!==T&&R.push(` .header("Content-Type", ${T})`),[...p.map(e=>`// ${Fe(e)}`),"",[...g].sort().join("\n"),"","public final class Example {"," private Example() {}",""," public static void main(String[] args) throws Exception {"," HttpClient client = HttpClient.newBuilder()"," .connectTimeout(Duration.ofSeconds(30))"," .followRedirects(HttpClient.Redirect.NORMAL)"," .build();","",...S,...S.length>0?[""]:[]," HttpRequest httpRequest = HttpRequest.newBuilder()",` .uri(URI.create(${F(t.url)}))`," .timeout(Duration.ofSeconds(30))",...R,` .method(${F(r)}, ${w})`," .build();",""," HttpResponse<String> response = client.send("," httpRequest,"," HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8)"," );",""," String responseBody = response.body();"," if (response.statusCode() < 200 ||"," response.statusCode() >= 300) {"," throw new IllegalStateException(",' "HTTP " + response.statusCode() + ": " + responseBody'," );"," }",""," System.out.println(responseBody);"," }","}"].join("\n")}),ae("java","okhttp",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o&&_(e)),i=Boolean(n&&o||!n&&g(r)),p=["Requires JDK 17+ and OkHttp 4.12.0.","Dependency: com.squareup.okhttp3:okhttp:4.12.0","Compile: javac -cp 'lib/*' Example.java","Run: java -cp '.:lib/*' Example"],S=new Set(["import java.io.IOException;","import java.time.Duration;","import okhttp3.OkHttpClient;","import okhttp3.Request;","import okhttp3.RequestBody;","import okhttp3.Response;"]);let T;if(n&&s){S.add("import java.io.File;"),S.add("import okhttp3.MediaType;"),S.add("import okhttp3.MultipartBody;");const e=[];for(const t of z(n.value)){const r=String(t.name);if(t.file&&C(t.value)){const n=t.value,o=y(n.path),s=o??a,i=y(n.name)??u,c=y(n.contentType)??l;o||p.push(Le(x(s,r)).replace(/^(?:\/\/|#)\s*/,"")),e.push(" .addFormDataPart(",` ${F(r)},`,` ${F(i)},`," RequestBody.create(",` new File(${F(s)}),`,` MediaType.get(${F(c)})`," )"," )")}else e.push(" .addFormDataPart(",` ${F(r)},`,` ${F(ke(t.value))}`," )")}T=[" RequestBody body = new MultipartBody.Builder()"," .setType(MultipartBody.FORM)",...e," .build();"].join("\n")}else if(n&&o){S.add("import okhttp3.MediaType;");const t=v(e),r=b(e),o=t?he(n.value):V(e),s=$(e,t?"application/x-www-form-urlencoded":r?"application/json":"text/plain");T=[" RequestBody body = RequestBody.create(",` ${F(o)},`,` MediaType.get(${F(s)})`," );"].join("\n")}else T=!n&&g(r)?[" RequestBody body = RequestBody.create("," new byte[0],"," null"," );"].join("\n"):" RequestBody body = null;";const w=t.headers.filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!i||!c(t))}).map(([e,t])=>` .addHeader(${F(String(e))}, ${F(String(t))})`);return[...p.map(e=>`// ${Le(e)}`),"",[...S].sort().join("\n"),"","public final class Example {"," private Example() {}",""," public static void main(String[] args) {"," OkHttpClient client = new OkHttpClient.Builder()"," .connectTimeout(Duration.ofSeconds(30))"," .readTimeout(Duration.ofSeconds(30))"," .writeTimeout(Duration.ofSeconds(30))"," .callTimeout(Duration.ofSeconds(30))"," .build();","",T,""," Request httpRequest = new Request.Builder()",` .url(${F(t.url)})`,...w,` .method(${F(r)}, body)`," .build();",""," try (Response response ="," client.newCall(httpRequest).execute()) {"," String responseText = response.body() == null",' ? ""'," : response.body().string();",""," if (!response.isSuccessful()) {"," throw new IOException(",' "HTTP " + response.code() + " " + response.message()',' + ": " + responseText'," );"," }",""," System.out.println(responseText);"," } catch (IOException exception) {"," exception.printStackTrace();"," System.exit(1);"," } finally {"," client.dispatcher().executorService().shutdown();"," client.connectionPool().evictAll();"," if (client.cache() != null) {"," try {"," client.cache().close();"," } catch (IOException exception) {"," exception.printStackTrace();"," }"," }"," }"," }","}"].join("\n")}),ae("java","unirest",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n)&&o&&_(e),i=Boolean(n&&o)||!n&&g(r),u=new Set(["import kong.unirest.HttpRequest;","import kong.unirest.HttpResponse;","import kong.unirest.Unirest;"]),l=["// Requires JDK 17+ and com.konghq:unirest-java:3.14.5.","// Compile and run with the Unirest dependency and its transitive dependencies on the classpath.","// Proxy and TLS behavior can be configured through Unirest.config() when required."],p=t.headers.filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))}),y=e=>e.map(([e,t])=>` .header(${F(String(e))}, ${F(String(t))})`);let S;if(n&&s){u.add("import java.io.File;");const e=z(n.value).map(e=>{const t=String(e.name);if(e.file&&C(e.value)){const o=e.value,s=(r=o.path,n=a,"string"==typeof r&&r.trim().length>0?r:n);return"string"==typeof o.path&&0!==o.path.trim().length||l.push(`// ${function(e){return e.replace(/[\r\n\u2028\u2029]+/g," ").replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g,"")}(x(s,t))}`),[" .field(",` ${F(t)},`,` new File(${F(s)})`," )"].join("\n")}var r,n;return[" .field(",` ${F(t)},`,` ${F(Me(e.value))}`," )"].join("\n")}),o=[` Unirest.request(${F(r)}, ${F(t.url)})`,...y(p),...e];o[o.length-1]=`${o[o.length-1]};`,S=[" HttpRequest<?> httpRequest =",...o]}else if(n&&o){const o=v(e),s=b(e),i=o?he(n.value):V(e),a=$(e,o?"application/x-www-form-urlencoded":s?"application/json":"text/plain"),u=p.filter(([e])=>!c(String(e)));S=[" HttpRequest<?> httpRequest =",` Unirest.request(${F(r)}, ${F(t.url)})`,...y(u),` .header("Content-Type", ${F(a)})`,` .body(${F(i)});`]}else if(!n&&g(r)){const e=p.filter(([e])=>!c(String(e)));S=[" HttpRequest<?> httpRequest =",` Unirest.request(${F(r)}, ${F(t.url)})`,...y(e),' .header("Content-Type", "application/octet-stream")',' .body("");']}else{const e=[` Unirest.request(${F(r)}, ${F(t.url)})`,...y(p)];e[e.length-1]=`${e[e.length-1]};`,S=[" HttpRequest<?> httpRequest =",...e]}return[[...u].sort().join("\n"),"",...l,"public final class Example {"," private Example() {}",""," public static void main(String[] args) {"," int exitCode = 0;",""," try {"," Unirest.config()"," .connectTimeout(30_000)"," .requestTimeout(30_000);","",...S.map(e=>` ${e}`),""," HttpResponse<String> response = httpRequest.asString();"," String responseText = response.getBody() == null",' ? ""'," : response.getBody();",""," if (!response.isSuccess()) {"," System.err.println(",' "HTTP " + response.getStatus() + " "',' + response.getStatusText() + ": " + responseText'," );"," exitCode = 1;"," } else {"," System.out.println(responseText);"," }"," } catch (RuntimeException exception) {"," exception.printStackTrace();"," exitCode = 1;"," } finally {"," Unirest.shutDown();"," }",""," if (exitCode != 0) {"," System.exit(exitCode);"," }"," }","}"].join("\n")}),ae("javascript","axios",Ie),ae("javascript","fetch",We),ae("javascript","jquery",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o&&_(e)),i=Boolean(n&&o),a=n&&s?z(n.value):[],u=[],l=[];let p;if(s){l.push(" const formData = new FormData();");let e=0;for(const t of a){const r=String(t.name);if(t.file&&C(t.value)){e+=1;const t=`file${e}`;u.push(t),l.push(` formData.append(${B(r)}, ${t});`)}else l.push(` formData.append(${B(r)}, ${B(w(t.value))});`)}p="formData"}else n&&o&&(p=B(v(e)?he(n.value):V(e)));const g=G(t.headers,s).filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))}).map(([e,t])=>` headers.append(${B(String(e))}, ${B(String(t))});`);return["// Requires a modern browser with FormData, File, and Headers.","// Requires jQuery 3.7.1+.","// Install: npm install jquery@^3.7.1","// Browser and jQuery header handling may combine repeated header values.","// Multipart files must be supplied as File arguments; browser code cannot read local paths.","",`function sendRequest(${u.join(", ")}) {`,...l,...l.length>0?[""]:[]," const headers = new Headers();",...g,""," return $.ajax({",` url: ${B(t.url)},`,` method: ${B(r)},`," headers: Object.fromEntries(headers.entries()),"," timeout: 30_000,",...p?[` data: ${p},`]:[],...s?[" processData: false,"," contentType: false,"]:p?[" processData: false,"]:[],' dataType: "text",'," })"," .then(function (responseText, _textStatus, jqXHR) {"," if (jqXHR.status < 200 || jqXHR.status >= 300) {"," throw new Error("," `HTTP ${jqXHR.status} ${jqXHR.statusText}: ${responseText}`,"," );"," }",""," console.log(responseText);"," return responseText;"," })"," .catch(function (jqXHR) {",' if (jqXHR && typeof jqXHR.status === "number") {'," const responseText =",' typeof jqXHR.responseText === "string"'," ? jqXHR.responseText",' : "";'," const statusText =",' typeof jqXHR.statusText === "string"'," ? jqXHR.statusText",' : "";',""," throw new Error("," `HTTP ${jqXHR.status} ${statusText}: ${responseText}`,"," );"," }",""," throw jqXHR;"," });","}"].join("\n")}),ae("javascript","ofetch",ze),ae("javascript","xhr",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o&&_(e)),i=Boolean(n&&o),a=n&&s?z(n.value):[],u=[],l=[];let p="null";if(s){l.push(" const formData = new FormData();");let e=0;for(const t of a){const r=String(t.name);if(t.file&&C(t.value)){e+=1;const t=`file${e}`;u.push(`${t}: File`),l.push(` formData.append(${B(r)}, ${t});`)}else l.push(` formData.append(${B(r)}, ${B(w(t.value))});`)}p="formData"}else n&&o&&(p=B(v(e)?he(n.value):V(e)));const g=G(t.headers,s).filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))});return["// Requires a modern browser with XMLHttpRequest, FormData, and File.","// Requires TypeScript 5.2+.","// Compile: npx tsc main.ts --target ES2022 --module ES2022 --lib ES2022,DOM --strict","// Browsers may combine repeated request headers set through XMLHttpRequest.","// Multipart files must be supplied as File arguments; browsers cannot read local paths.","",0===u.length?"export function sendRequest(): Promise<string> {":["export function sendRequest(",...u.map((e,t)=>` ${e}${t<u.length-1?",":""}`),"): Promise<string> {"].join("\n")," return new Promise((resolve, reject) => {",...l,...l.length>0?[""]:[]," const xhr = new XMLHttpRequest();",` xhr.open(${B(r)}, ${B(t.url)}, true);`," xhr.timeout = 30_000;",' xhr.responseType = "text";',"",...g.map(([e,t])=>` xhr.setRequestHeader(${B(String(e))}, ${B(String(t))});`),...g.length>0?[""]:[]," xhr.onload = () => {"," if (xhr.status >= 200 && xhr.status < 300) {"," resolve(xhr.responseText);"," return;"," }",""," reject("," new Error("," `HTTP ${xhr.status} ${xhr.statusText}: ${xhr.responseText}`,"," ),"," );"," };",""," xhr.onerror = () => {",' reject(new Error("Network request failed"));'," };",""," xhr.ontimeout = () => {",' reject(new Error("Request timed out after 30 seconds"));'," };",""," xhr.onabort = () => {",' reject(new Error("Request aborted"));'," };","",` xhr.send(${p});`," });","}"].join("\n")}),ae("kotlin","okhttp",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o&&_(e)),i=Boolean(n&&o||!n&&g(r)),p=["Requires JDK 17+, Kotlin 1.9+, and OkHttp 4.12.0.","Dependency: com.squareup.okhttp3:okhttp:4.12.0","Compile: kotlinc Main.kt -cp okhttp-4.12.0.jar:okio-jvm-3.6.0.jar -include-runtime -d main.jar","Run: java -cp main.jar:okhttp-4.12.0.jar:okio-jvm-3.6.0.jar MainKt","OkHttp addHeader() preserves repeated request-header values."],S=new Set(["import java.time.Duration","import okhttp3.OkHttpClient","import okhttp3.Request","import okhttp3.RequestBody"]);let T;if(n&&s){S.add("import java.io.File"),S.add("import okhttp3.MediaType.Companion.toMediaType"),S.add("import okhttp3.MultipartBody"),S.add("import okhttp3.RequestBody.Companion.asRequestBody");const e=[];for(const t of z(n.value)){const r=String(t.name);if(t.file&&C(t.value)){const n=t.value,o=y(n.path),s=o??a,i=y(n.name)??u,c=y(n.contentType)??l;o||p.push(Je(x(s,r)).replace(/^(?:\/\/|#)\s*/,"")),e.push(" .addFormDataPart(",` ${F(r)},`,` ${F(i)},`,` File(${F(s)}).asRequestBody(`,` ${F(c)}.toMediaType()`," )"," )")}else e.push(" .addFormDataPart(",` ${F(r)},`,` ${F(Ve(t.value))}`," )")}T=[" val body: RequestBody = MultipartBody.Builder()"," .setType(MultipartBody.FORM)",...e," .build()"].join("\n")}else if(n&&o){S.add("import okhttp3.MediaType.Companion.toMediaType"),S.add("import okhttp3.RequestBody.Companion.toRequestBody");const t=v(e),r=b(e),o=t?he(n.value):V(e),s=$(e,t?"application/x-www-form-urlencoded":r?"application/json":"text/plain");T=[" val body: RequestBody =",` ${F(o)}.toRequestBody(`,` ${F(s)}.toMediaType()`," )"].join("\n")}else g(r)?(S.add("import okhttp3.RequestBody.Companion.toRequestBody"),T=[" val body: RequestBody =",` ${F("")}.toRequestBody(null)`].join("\n")):T=" val body: RequestBody? = null";const w=t.headers.filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!i||!c(t))}).map(([e,t])=>` .addHeader(${F(String(e))}, ${F(String(t))})`);return[[...S].sort().join("\n"),"",...p.map(e=>`// ${Je(e)}`),"","fun main() {"," val client = OkHttpClient.Builder()"," .connectTimeout(Duration.ofSeconds(30))"," .readTimeout(Duration.ofSeconds(30))"," .writeTimeout(Duration.ofSeconds(30))"," .callTimeout(Duration.ofSeconds(30))"," .build()","",T,""," val httpRequest = Request.Builder()",` .url(${F(t.url)})`,...w,` .method(${F(r)}, body)`," .build()",""," try {"," client.newCall(httpRequest).execute().use { response ->"," val responseText = response.body?.string().orEmpty()",""," if (!response.isSuccessful) {"," throw IllegalStateException(",' "HTTP ${response.code} ${response.message}: $responseText"'," )"," }",""," println(responseText)"," }"," } finally {"," client.dispatcher.executorService.shutdown()"," client.connectionPool.evictAll()"," client.cache?.close()"," }","}"].join("\n")}),ae("node","axios",function(e){return Ie(e)}),ae("node","fetch",function(e){return`import fetch from "node-fetch";\n\n${We(e)}`}),ae("node","ofetch",function(e){return ze(e)}),ae("node","undici",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o&&_(e)),i=Boolean(n&&o),p=new Set(['import { fetch, Headers } from "undici";']),g=["Requires Node.js 20+, TypeScript 5.2+, and undici 6.x.","Install: npm install undici@^6","Install development tools: npm install --save-dev typescript@^5.2 @types/node","Run: npx tsc request.ts --target ES2022 --module NodeNext --moduleResolution NodeNext && node request.js","Fetch Headers may combine duplicate header values according to Fetch semantics."],$=[];let S;if(n&&o&&s){p.add('import { Blob } from "node:buffer";'),p.add('import { readFile } from "node:fs/promises";'),p.delete('import { fetch, Headers } from "undici";'),p.add('import { fetch, FormData, Headers } from "undici";'),$.push(" const formData = new FormData();");let e=0;for(const t of z(n.value)){const r=String(t.name);if(t.file&&C(t.value)){const n=t.value,o=y(n.path),s=o??a,i=y(n.name)??u,p=y(n.contentType)??l;if(void 0===o){const e=x(s,r).replace(/^\/\/\s*/,"");g.push(Xe(e))}e+=1;const c=`fileData${e}`;$.push(` const ${c} = await readFile(${B(s)});`," formData.append(",` ${B(r)},`,` new Blob([${c}], { type: ${B(p)} }),`,` ${B(i)},`," );")}else $.push(" formData.append(",` ${B(r)},`,` ${B(Ge(t.value))},`," );")}S="formData"}else if(n&&o){S=B(v(e)?he(n.value):V(e))}const b=t.headers.filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))}).map(([e,t])=>` headers.append(${B(String(e))}, ${B(String(t))});`);return[...g.map(e=>`// ${Xe(e)}`),"",[...p].sort().join("\n"),"","async function main(): Promise<void> {",...$,...$.length>0?[""]:[]," const headers = new Headers();",...b,"",` const response = await fetch(${B(t.url)}, {`,` method: ${B(r)},`," headers,",...void 0===S?[]:[` body: ${S},`]," signal: AbortSignal.timeout(30_000),"," });",""," const responseText = await response.text();",""," if (!response.ok) {"," throw new Error("," `HTTP ${response.status} ${response.statusText}: ${responseText}`,"," );"," }",""," console.log(responseText);","}","","main().catch((error: unknown) => {"," const message ="," error instanceof Error ? error.message : String(error);"," console.error(`Request failed: ${message}`);"," process.exitCode = 1;","});"].join("\n")}),ae("objc","nsurlsession",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o&&_(e)),i=Boolean(n&&o),p=["Requires Apple Clang with Objective-C ARC and Foundation on macOS 12+.","Compile: clang -fobjc-arc -framework Foundation main.m -o request","NSURLRequest stores headers as a dictionary; duplicate names are combined with commas."],g=t.headers.filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))}),$=[],S=new Map;for(const[e,t]of g){const r=String(e),n=String(t),o=r.toLowerCase(),s=S.get(o);void 0===s?(S.set(o,$.length),$.push([r,[n]])):$[s][1].push(n)}const b=[];if(n&&o&&s){b.push(' NSString *boundary = [NSString stringWithFormat:@"Boundary-%@", NSUUID.UUID.UUIDString];'," NSMutableData *bodyData = [NSMutableData data];");for(const[e,t]of z(n.value).entries()){const r=String(t.name);if(t.file&&C(t.value)){const n=t.value,o=y(n.path),s=o??a,i=y(n.name)??u,c=y(n.contentType)??l;void 0===o&&p.push(Ke(x(s,r))),b.push(' AppendUTF8(bodyData, [NSString stringWithFormat:@"--%@\\r\\n", boundary]);'," AppendUTF8(bodyData, [NSString stringWithFormat:",' @"Content-Disposition: form-data; name=\\"%@\\"; filename=\\"%@\\"\\r\\n",',` QuoteMultipartValue(${L(r)}),`,` QuoteMultipartValue(${L(i)})]);`," AppendUTF8(bodyData, [NSString stringWithFormat:",' @"Content-Type: %@\\r\\n\\r\\n",',` SafeMediaType(${L(c)})]);`,` NSURL *fileURL${e} = [NSURL fileURLWithPath:${L(s)}];`,` NSError *fileError${e} = nil;`,` NSData *fileData${e} = [NSData dataWithContentsOfURL:fileURL${e}`," options:NSDataReadingMappedIfSafe",` error:&fileError${e}];`,` if (fileData${e} == nil) {`,' fprintf(stderr, "Failed to read multipart file: %s\\n",',` fileError${e}.localizedDescription.UTF8String ?: "unknown error");`," return EXIT_FAILURE;"," }",` [bodyData appendData:fileData${e}];`,' AppendUTF8(bodyData, @"\\r\\n");')}else b.push(' AppendUTF8(bodyData, [NSString stringWithFormat:@"--%@\\r\\n", boundary]);'," AppendUTF8(bodyData, [NSString stringWithFormat:",' @"Content-Disposition: form-data; name=\\"%@\\"\\r\\n\\r\\n",',` QuoteMultipartValue(${L(r)})]);`,` AppendUTF8(bodyData, ${L(Ze(t.value))});`,' AppendUTF8(bodyData, @"\\r\\n");')}b.push(' AppendUTF8(bodyData, [NSString stringWithFormat:@"--%@--\\r\\n", boundary]);'," urlRequest.HTTPBody = bodyData;"," [urlRequest setValue:",' [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]',' forHTTPHeaderField:@"Content-Type"];')}else if(n&&o){const t=v(e)?he(n.value):V(e);b.push(` NSData *requestBody = [${L(t)}`," dataUsingEncoding:NSUTF8StringEncoding];"," if (requestBody == nil) {",' fprintf(stderr, "Failed to encode request body as UTF-8\\n");'," return EXIT_FAILURE;"," }"," urlRequest.HTTPBody = requestBody;")}return[...p.map(e=>`/* ${Ke(e)} */`),"","@import Foundation;","#include <stdio.h>","#include <stdlib.h>","","static void AppendUTF8(NSMutableData *data, NSString *value) {"," NSData *encoded = [value dataUsingEncoding:NSUTF8StringEncoding];"," if (encoded != nil) {"," [data appendData:encoded];"," }","}","","static NSString *QuoteMultipartValue(NSString *value) {"," NSMutableString *result = [NSMutableString stringWithCapacity:value.length];",""," for (NSUInteger index = 0; index < value.length; index++) {"," unichar character = [value characterAtIndex:index];",""," switch (character) {"," case '\\r':"," case '\\n':",' [result appendString:@" "];'," break;"," case '\"':",' [result appendString:@"\\\\\\""];'," break;"," case '\\\\':",' [result appendString:@"\\\\\\\\"];'," break;"," default:"," if (character < 0x20 || character == 0x7F) {",' [result appendString:@" "];'," } else {",' [result appendFormat:@"%C", character];'," }"," break;"," }"," }",""," return result;","}","","static NSString *SafeMediaType(NSString *value) {"," NSMutableString *result = [NSMutableString stringWithCapacity:value.length];",""," for (NSUInteger index = 0; index < value.length; index++) {"," unichar character = [value characterAtIndex:index];"," if (character >= 0x21 && character <= 0x7E) {",' [result appendFormat:@"%C", character];'," }"," }",""," NSString *trimmed = [result stringByTrimmingCharactersInSet:"," NSCharacterSet.whitespaceAndNewlineCharacterSet];",' return trimmed.length > 0 ? trimmed : @"application/octet-stream";',"}","","int main(void) {"," @autoreleasepool {",` NSString *urlString = ${L(t.url)};`," NSURL *url = [NSURL URLWithString:urlString];"," if (url == nil) {",' fprintf(stderr, "Invalid URL: %s\\n", urlString.UTF8String);'," return EXIT_FAILURE;"," }",""," NSMutableURLRequest *urlRequest ="," [NSMutableURLRequest requestWithURL:url];",` urlRequest.HTTPMethod = ${L(r)};`," urlRequest.timeoutInterval = 30.0;",...$.map(([e,t])=>` [urlRequest setValue:${L(t.join(", "))} forHTTPHeaderField:${L(e)}];`),...b,""," NSURLSessionConfiguration *configuration ="," [NSURLSessionConfiguration ephemeralSessionConfiguration];"," configuration.timeoutIntervalForRequest = 30.0;"," configuration.timeoutIntervalForResource = 30.0;",""," NSURLSession *session ="," [NSURLSession sessionWithConfiguration:configuration];"," dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);"," __block int exitCode = EXIT_FAILURE;",""," NSURLSessionDataTask *task = [session"," dataTaskWithRequest:urlRequest"," completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {"," @autoreleasepool {"," if (error != nil) {",' fprintf(stderr, "Request failed: %s\\n",',' error.localizedDescription.UTF8String ?: "unknown error");'," dispatch_semaphore_signal(semaphore);"," return;"," }",""," if (![response isKindOfClass:NSHTTPURLResponse.class]) {",' fprintf(stderr, "The server returned a non-HTTP response\\n");'," dispatch_semaphore_signal(semaphore);"," return;"," }",""," NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;"," NSString *responseText = [[NSString alloc]"," initWithData:(data ?: [NSData data])"," encoding:NSUTF8StringEncoding];"," if (responseText == nil) {"," responseText = [[NSString alloc]"," initWithData:(data ?: [NSData data])",' encoding:NSISOLatin1StringEncoding] ?: @"";'," }",""," if (httpResponse.statusCode < 200 ||"," httpResponse.statusCode >= 300) {",' fprintf(stderr, "HTTP status %ld: %s\\n",'," (long)httpResponse.statusCode,",' responseText.UTF8String ?: "");'," dispatch_semaphore_signal(semaphore);"," return;"," }","",' printf("%s\\n", responseText.UTF8String ?: "");'," exitCode = EXIT_SUCCESS;"," dispatch_semaphore_signal(semaphore);"," }"," }];",""," [task resume];"," dispatch_time_t deadline = dispatch_time("," DISPATCH_TIME_NOW,"," (int64_t)(30.0 * NSEC_PER_SEC)"," );"," if (dispatch_semaphore_wait(semaphore, deadline) != 0) {"," [task cancel];",' fprintf(stderr, "Request timed out after 30 seconds\\n");'," exitCode = EXIT_FAILURE;"," }",""," [session finishTasksAndInvalidate];"," return exitCode;"," }","}"].join("\n")}),ae("ocaml","cohttp",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o&&_(e)),i=Boolean(n&&o),p=["Requires OCaml 5.1+, cohttp-lwt-unix 6.x, lwt 5.x, and uri 4.x.","Install: opam install cohttp-lwt-unix lwt uri","Compile: ocamlfind ocamlopt -thread -linkpkg -package cohttp-lwt-unix,lwt.unix,uri main.ml -o request","Cohttp Header.add preserves repeated header fields."],g=t.headers.filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))}),$=[];if(n&&o&&s){const e=z(n.value);$.push(" let boundary =",' "Boundary-" ^ Uuidm.to_string (Uuidm.v `V4)'," in"," let buffer = Buffer.create 4096 in");for(const[t,r]of e.entries()){const e=String(r.name);if(r.file&&C(r.value)){const n=r.value,o=y(n.path),s=o??a,i=y(n.name)??u,c=y(n.contentType)??l;void 0===o&&p.push(Qe(x(s,e))),$.push(' Buffer.add_string buffer ("--" ^ boundary ^ "\\r\\n");'," Buffer.add_string buffer",' ("Content-Disposition: form-data; name=\\"" ^',` quote_multipart_value ${M(e)} ^`,' "\\"; filename=\\"" ^',` quote_multipart_value ${M(i)} ^`,' "\\"\\r\\n");'," Buffer.add_string buffer",' ("Content-Type: " ^',` safe_media_type ${M(c)} ^`,' "\\r\\n\\r\\n");',` let file_content_${t} =`,` read_file ${M(s)}`," in",` Buffer.add_string buffer file_content_${t};`,' Buffer.add_string buffer "\\r\\n";')}else $.push(' Buffer.add_string buffer ("--" ^ boundary ^ "\\r\\n");'," Buffer.add_string buffer",' ("Content-Disposition: form-data; name=\\"" ^',` quote_multipart_value ${M(e)} ^`,' "\\"\\r\\n\\r\\n");',` Buffer.add_string buffer ${M(Ye(r.value))};`,' Buffer.add_string buffer "\\r\\n";')}$.push(' Buffer.add_string buffer ("--" ^ boundary ^ "--\\r\\n");'," let request_body = Cohttp_lwt.Body.of_string (Buffer.contents buffer) in"," let headers =",' Header.add headers "Content-Type"',' ("multipart/form-data; boundary=" ^ boundary)'," in")}else if(n&&o){const t=v(e)?he(n.value):V(e);$.push(" let request_body =",` Cohttp_lwt.Body.of_string ${M(t)}`," in")}else $.push(" let request_body = Cohttp_lwt.Body.empty in");return[...p.map(e=>`(* ${Qe(e)} *)`),"","open Lwt.Infix","","exception Http_error of int * string","","let read_file path ="," let channel = open_in_bin path in"," Fun.protect"," ~finally:(fun () -> close_in_noerr channel)"," (fun () ->"," let length = in_channel_length channel in"," really_input_string channel length)","","let quote_multipart_value value ="," let buffer = Buffer.create (String.length value) in"," String.iter"," (function"," | '\\r' | '\\n' -> Buffer.add_char buffer ' '",' | \'"\' -> Buffer.add_string buffer "\\\\\\""'," | '\\\\' -> Buffer.add_string buffer \"\\\\\\\\\""," | character ->"," if Char.code character < 32 || Char.code character = 127 then"," Buffer.add_char buffer ' '"," else"," Buffer.add_char buffer character)"," value;"," Buffer.contents buffer","","let safe_media_type value ="," let buffer = Buffer.create (String.length value) in"," String.iter"," (fun character ->"," let code = Char.code character in"," if code >= 33 && code <= 126 then"," Buffer.add_char buffer character)"," value;"," let result = String.trim (Buffer.contents buffer) in",' if result = "" then "application/octet-stream" else result',"","let method_of_string value ="," match String.uppercase_ascii value with",' | "GET" -> `GET',' | "HEAD" -> `HEAD',' | "POST" -> `POST',' | "PUT" -> `PUT',' | "DELETE" -> `DELETE',' | "PATCH" -> `PATCH',' | "OPTIONS" -> `OPTIONS',' | "CONNECT" -> `CONNECT',' | "TRACE" -> `TRACE'," | other -> `Other other","","let add_headers headers values ="," List.fold_left"," (fun result (name, value) ->"," Cohttp.Header.add result name value)"," headers"," values","","let run () =",` let uri = Uri.of_string ${M(t.url)} in`,` let http_method = method_of_string ${M(r)} in`," let headers ="," add_headers (Cohttp.Header.init ())"," [",...g.map(([e,t])=>` (${M(String(e))}, ${M(String(t))});`)," ]"," in",...$," let request ="," Cohttp_lwt_unix.Client.call"," ~headers"," ~body:request_body"," http_method"," uri"," in"," Lwt_unix.with_timeout 30.0 (fun () -> request)"," >>= fun (response, response_body) ->"," Cohttp_lwt.Body.to_string response_body"," >>= fun response_text ->"," let status ="," Cohttp.Response.status response"," in"," let status_code = Cohttp.Code.code_of_status status in"," if status_code < 200 || status_code > 299 then"," Lwt.fail (Http_error (status_code, response_text))"," else"," Lwt_io.print response_text","","let report_error error ="," let message ="," match error with"," | Http_error (status, response_body) ->"," Printf.sprintf",' "HTTP status %d: %s"'," status"," response_body"," | Lwt_unix.Timeout ->",' "Request timed out after 30 seconds"'," | other -> Printexc.to_string other"," in",' Lwt_io.eprintlf "Request failed: %s" message',"","let () ="," match Lwt_main.run (Lwt.catch run report_error) with"," | () -> ()"," | exception error ->",' prerr_endline ("Request failed: " ^ Printexc.to_string error);'," exit 1"].join("\n")}),ae("php","curl",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n)&&o&&_(e),i=Boolean(n&&o),p=[],g=[];let $;if(n&&s){const e=[];let t=0;for(const r of z(n.value)){const n=String(r.name);if(r.file&&C(r.value)){const o=r.value,s=y(o.path)??a,i=y(o.name)??u,c=y(o.contentType)??l,d="$file"+ ++t;y(o.path)||p.push(et(x(s,n))),g.push(`${d} = new CURLFile(`,` ${H(s)},`,` ${H(c)},`,` ${H(i)}`,");"),e.push(` ${H(n)} => ${d},`)}else e.push(` ${H(n)} => ${H(null==r.value?"":"string"==typeof r.value?r.value:JSON.stringify(r.value))},`)}g.push("$postFields = [",...e,"];"),$="$postFields"}else n&&o&&($=H(v(e)?he(n.value):V(e)));const S=t.headers.filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))});return["<?php","","declare(strict_types=1);","",...p.map(e=>`// ${e}`),...p.length>0?[""]:[],...g,...g.length>0?[""]:[],"$ch = curl_init();","","if ($ch === false) {"," throw new RuntimeException('Unable to initialize cURL');","}","","try {"," curl_setopt_array($ch, [",` CURLOPT_URL => ${H(t.url)},`,` CURLOPT_CUSTOMREQUEST => ${H(r)},`," CURLOPT_RETURNTRANSFER => true,"," CURLOPT_CONNECTTIMEOUT => 10,"," CURLOPT_TIMEOUT => 30,",...S.length>0?[" CURLOPT_HTTPHEADER => [",...S.map(([e,t])=>` ${H(`${String(e)}: ${String(t)}`)},`)," ],"]:[],...$?[` CURLOPT_POSTFIELDS => ${$},`]:[]," ]);",""," $responseBody = curl_exec($ch);",""," if ($responseBody === false) {"," throw new RuntimeException("," sprintf('cURL error %d: %s', curl_errno($ch), curl_error($ch))"," );"," }",""," $statusCode = (int) curl_getinfo($ch, CURLINFO_RESPONSE_CODE);",""," if ($statusCode < 200 || $statusCode >= 300) {"," throw new RuntimeException("," sprintf('HTTP %d: %s', $statusCode, $responseBody)"," );"," }",""," echo $responseBody;","} finally {"," curl_close($ch);","}"].join("\n")}),ae("php","guzzle",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n)&&o&&_(e),i=Boolean(n&&o),p=[],g=[],$=[];if(n&&s){let e=0;for(const t of z(n.value)){const r=String(t.name);if(t.file&&C(t.value)){const n=t.value,o=y(n.path)??a,s=y(n.name)??u,i=y(n.contentType)??l,c="$fileHandle"+ ++e;y(n.path)||p.push(tt(x(o,r))),g.push(c),$.push(" [",` 'name' => ${H(r)},`,` 'contents' => ${c},`,` 'filename' => ${H(s)},`," 'headers' => [",` 'Content-Type' => ${H(i)},`," ],"," ],")}else{const e=null==t.value?"":"string"==typeof t.value?t.value:JSON.stringify(t.value);$.push(" [",` 'name' => ${H(r)},`,` 'contents' => ${H(e)},`," ],")}}}const S=[...rt(t.headers.filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))}))," 'connect_timeout' => 10.0,"," 'timeout' => 30.0,"," 'http_errors' => false,"];return n&&o&&(s?S.push(" 'multipart' => [",...$," ],"):S.push(` 'body' => ${H(v(e)?he(n.value):V(e))},`)),["<?php","","declare(strict_types=1);","","require __DIR__ . '/vendor/autoload.php';","","use GuzzleHttp\\Client;","",...p.map(e=>`// ${e}`),...p.length>0?[""]:[],"$client = new Client();",...g.map((e,t)=>`${e} = fopen(${H(y(z(n?.value).filter(e=>e.file&&C(e.value))[t]?.value?.path)??a)}, 'rb');`),...g.length>0?[""]:[],...g.flatMap(e=>[`if (${e} === false) {`," throw new RuntimeException('Unable to open multipart file');","}"]),...g.length>0?[""]:[],"try {",` $response = $client->request(${H(r)}, ${H(t.url)}, [`,...S," ]);",""," $responseBody = (string) $response->getBody();"," $statusCode = $response->getStatusCode();",""," if ($statusCode < 200 || $statusCode >= 300) {"," throw new RuntimeException("," sprintf('HTTP %d: %s', $statusCode, $responseBody)"," );"," }",""," echo $responseBody;","} finally {",...g.map(e=>` if (is_resource(${e})) { fclose(${e}); }`),"}"].join("\n")}),ae("php","laravel-http",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n)&&o&&_(e),i=Boolean(n&&o),p=[],g=[],$=[],S=[],b=[];if(n&&s){let e=0;for(const t of z(n.value)){const r=String(t.name);if(t.file&&C(t.value)){const n=t.value,o=y(n.path)??a,s=y(n.name)??u,i=y(n.contentType)??l,c="$fileHandle"+ ++e;y(n.path)||p.push(nt(x(o,r))),b.push(c),g.push(`${c} = fopen(${H(o)}, 'rb');`,`if (${c} === false) {`,` throw new RuntimeException(${H(`Unable to open multipart file: ${o}`)});`,"}"),$.push(` ->attach(${H(r)}, ${c}, ${H(s)}, ['Content-Type' => ${H(i)}])`)}else{const e=null==t.value?"":"string"==typeof t.value?t.value:JSON.stringify(t.value);S.push(` ${H(r)} => ${H(e)},`)}}}const T=t.headers.filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))});let w;if(n&&o)if(s)w=` ->${r.toLowerCase()}(${H(t.url)}, $fields);`;else{const o=y(n.mediaType)??"application/octet-stream";w=[` ->withBody(${H(v(e)?he(n.value):V(e))}, ${H(o)})`,` ->send(${H(r)}, ${H(t.url)});`].join("\n")}else w=` ->send(${H(r)}, ${H(t.url)});`;return["<?php","","declare(strict_types=1);","","use Illuminate\\Support\\Facades\\Http;","",...p.map(e=>`// ${e}`),...p.length>0?[""]:[],...ot(T),...s?["","$fields = [",...S,"];"]:[],...g.length>0?["",...g]:[],"","try {"," $response = Http::withHeaders($headers)"," ->connectTimeout(10)"," ->timeout(30)",...$,w,""," if (!$response->successful()) {"," throw new RuntimeException("," sprintf('HTTP %d: %s', $response->status(), $response->body())"," );"," }",""," echo $response->body();","} finally {",...b.map(e=>` if (is_resource(${e})) { fclose(${e}); }`),"}"].join("\n")}),ae("powershell","invoke-restmethod",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n)&&o&&_(e),i=Boolean(n&&o),u=[],l=[];if(n&&s){l.push("$form = [ordered]@{}");for(const e of z(n.value)){const t=String(e.name);if(e.file&&C(e.value)){const r=e.value,n=y(r.path)??a;y(r.path)||u.push(st(x(n,t))),l.push(`$form[${P(t)}] = Get-Item -LiteralPath ${P(n)} -ErrorAction Stop`)}else l.push(`$form[${P(t)}] = ${P(w(e.value))}`)}}const p=t.headers.filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))}),g=p.find(([e])=>c(String(e))),$=p.filter(([e])=>!c(String(e))),S=new Map;for(const[e,t]of $){const r=String(e),n=r.trim().toLowerCase(),o=S.get(n);o?o.values.push(String(t)):S.set(n,{name:r,values:[String(t)]})}const b=[...S.values()].map(({name:e,values:t})=>`$headers[${P(e)}] = ${P(t.join(", "))}`),T=n&&o?s?["$parameters['Form'] = $form"]:[`$parameters['Body'] = ${P(v(e)?he(n.value):V(e))}`]:[];return["# Requires PowerShell 7.4 or later.","# Multipart uploads require Invoke-RestMethod -Form support.","# Repeated request-header values are combined with commas.","# Multipart file name and media-type overrides are not supported by -Form.","",...u.map(e=>`# ${e}`),...u.length>0?[""]:[],"$headers = @{}",...b,"","$parameters = @{",` Method = ${P(r)}`,` Uri = ${P(t.url)}`," Headers = $headers"," TimeoutSec = 30"," ErrorAction = 'Stop'",...g&&!s?[` ContentType = ${P(String(g[1]))}`]:[],"}",...l.length>0?["",...l]:[],...T.length>0?["",...T]:[],"","try {"," $response = Invoke-RestMethod @parameters",""," if ($null -ne $response) {"," $response | ConvertTo-Json -Depth 100"," }","} catch {"," $statusCode = $null"," $responseBody = $null",""," if ($null -ne $_.Exception.Response) {"," $statusCode = [int]$_.Exception.Response.StatusCode"," }",""," if ($null -ne $_.ErrorDetails -and $_.ErrorDetails.Message) {"," $responseBody = $_.ErrorDetails.Message"," }",""," if ($null -ne $statusCode) {",' $message = "HTTP ${statusCode}: ${responseBody}"'," } else {"," $message = $_.Exception.Message"," }",""," throw [System.Net.Http.HttpRequestException]::new("," $message,"," $_.Exception"," )","}"].join("\n")}),ae("powershell","invoke-webrequest",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n)&&o&&_(e),i=Boolean(n&&o),u=[],l=[];if(n&&s){l.push("$form = [ordered]@{}");for(const e of z(n.value)){const t=String(e.name);if(e.file&&C(e.value)){const r=e.value,n=y(r.path)??a;y(r.path)||u.push(it(x(n,t))),l.push(`$form[${P(t)}] = Get-Item -LiteralPath ${P(n)} -ErrorAction Stop`)}else l.push(`$form[${P(t)}] = ${P(w(e.value))}`)}}const p=t.headers.filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))}),g=p.find(([e])=>c(String(e))),$=p.filter(([e])=>!c(String(e))),S=new Map;for(const[e,t]of $){const r=String(e),n=r.trim().toLowerCase(),o=S.get(n);o?o.values.push(String(t)):S.set(n,{name:r,values:[String(t)]})}const b=[...S.values()].map(({name:e,values:t})=>`$headers[${P(e)}] = ${P(t.join(", "))}`),T=n&&o?s?["$parameters['Form'] = $form"]:[`$parameters['Body'] = ${P(v(e)?he(n.value):V(e))}`]:[];return["# Requires PowerShell 7.4 or later.","# Multipart uploads require Invoke-WebRequest -Form support.","# Repeated request-header values are combined with commas.","",...u.map(e=>`# ${e}`),...u.length>0?[""]:[],"$headers = @{}",...b,"","$parameters = @{",` Method = ${P(r)}`,` Uri = ${P(t.url)}`," Headers = $headers"," TimeoutSec = 30"," ErrorAction = 'Stop'",...g&&!s?[` ContentType = ${P(String(g[1]))}`]:[],"}",...l.length>0?["",...l]:[],...T.length>0?["",...T]:[],"","try {"," $response = Invoke-WebRequest @parameters"," $response.Content","} catch {"," $statusCode = $null"," $responseBody = $null",""," if ($null -ne $_.Exception.Response) {"," $statusCode = [int]$_.Exception.Response.StatusCode"," }",""," if ($null -ne $_.ErrorDetails -and $_.ErrorDetails.Message) {"," $responseBody = $_.ErrorDetails.Message"," }",""," if ($null -ne $statusCode) {",' $message = "HTTP ${statusCode}: ${responseBody}"'," } else {"," $message = $_.Exception.Message"," }",""," throw [System.Net.Http.HttpRequestException]::new("," $message,"," $_.Exception"," )","}"].join("\n")}),ae("python","aiohttp",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o),i=Boolean(n&&o&&_(e)),p=[],g=[];let $;const S=t.headers.filter(([e])=>{const t=String(e);return(!s||!d(t)&&!f(t))&&(!i||!c(t))});if(n&&o)if(i){g.push(" form_data = aiohttp.FormData(quote_fields=True)");for(const e of z(n.value)){const t=String(e.name);if(e.file&&C(e.value)){const r=e.value,n=y(r.path)??a,o=y(r.name)??u,s=y(r.contentType)??l;y(r.path)||p.push(at(x(n,t))),g.push(` file_handle = stack.enter_context(open(${j(n)}, "rb"))`,[" form_data.add_field(",` ${j(t)},`," file_handle,",` filename=${j(o)},`,` content_type=${j(s)},`," )"].join("\n"))}else g.push([" form_data.add_field(",` ${j(t)},`,` ${j(w(e.value))},`," )"].join("\n"))}$="data=form_data,"}else $=b(e)?`data=${j(V(e))},`:v(e)?`data=${j(he(n.value))},`:`data=${j(V(e))},`;return["# Requires Python 3.10 or later.","# Requires aiohttp 3.9 or later: python -m pip install 'aiohttp>=3.9'","# Repeated request headers are preserved in their original order.",...p.map(e=>`# ${e}`),"","import asyncio","from contextlib import ExitStack","","import aiohttp","","","async def main() -> None:"," headers = aiohttp.CIMultiDict(",` ${ut(S.map(([e,t])=>[String(e),String(t)]))}`," )",""," timeout = aiohttp.ClientTimeout(total=30)",""," with ExitStack() as stack:",...g,...g.length>0?[""]:[]," try:"," async with aiohttp.ClientSession("," headers=headers,"," timeout=timeout,"," ) as session:"," async with session.request(",` ${j(r)},`,` ${j(t.url)},`,...$?[` ${$}`]:[]," ) as response:"," response_body = await response.text(errors='replace')",""," if not 200 <= response.status < 300:"," raise RuntimeError(",' f"HTTP {response.status}: {response_body}"'," )",""," print(response_body)"," except (aiohttp.ClientError, asyncio.TimeoutError) as error:",' raise RuntimeError(f"HTTP request failed: {error}") from error',"","",'if __name__ == "__main__":'," asyncio.run(main())"].join("\n")}),ae("python","http-client",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o),i=Boolean(n&&o&&_(e)),p=[],g=[],$=t.headers.filter(([e])=>{const t=String(e);return(!s||!d(t)&&!f(t))&&(!i||!c(t))});if(n&&i)for(const e of z(n.value)){const t=String(e.name);if(e.file&&C(e.value)){const r=e.value,n=y(r.path)??a,o=y(r.name)??u,s=y(r.contentType)??l;y(r.path)||p.push(lt(x(n,t))),g.push(" parts.append("," (",` ${j(t)},`,` ${j(o)},`,` ${j(s)},`,` Path(${j(n)}).read_bytes(),`," )"," )")}else g.push(" parts.append("," (",` ${j(t)},`," None,"," None,",` ${j(w(e.value))}.encode("utf-8"),`," )"," )")}let S;S=n&&o?i?[' boundary = f"----http-client-{secrets.token_hex(24)}"'," parts: list[tuple[str, str | None, str | None, bytes]] = []",...g," request_body = encode_multipart(parts, boundary)",' request_headers.append(("Content-Type", f"multipart/form-data; boundary={boundary}"))']:b(e)?[` request_body = ${j(V(e))}.encode("utf-8")`]:v(e)?[` request_body = ${j(he(n.value))}.encode("utf-8")`]:[` request_body = ${j(V(e))}.encode("utf-8")`]:[" request_body = None"];const T=i?["","","def quote_disposition(value: str) -> str:",' return value.replace("\\\\", "\\\\\\\\").replace(\'"\', \'\\\\"\')',"","","def encode_multipart("," parts: list[tuple[str, str | None, str | None, bytes]],"," boundary: str,",") -> bytes:"," output = bytearray()"," boundary_bytes = boundary.encode('ascii')",""," for field_name, file_name, content_type, value in parts:"," output.extend(b'--' + boundary_bytes + b'\\r\\n')",""," disposition = ("," 'Content-Disposition: form-data; name=\"'"," + quote_disposition(field_name)"," + '\"'"," )",""," if file_name is not None:"," disposition += ("," '; filename=\"'"," + quote_disposition(file_name)"," + '\"'"," )",""," output.extend(disposition.encode('utf-8'))"," output.extend(b'\\r\\n')",""," if content_type is not None:"," output.extend("," f'Content-Type: {content_type}\\r\\n'.encode('utf-8')"," )",""," output.extend(b'\\r\\n')"," output.extend(value)"," output.extend(b'\\r\\n')",""," output.extend(b'--' + boundary_bytes + b'--\\r\\n')"," return bytes(output)"]:[];return["# Requires Python 3.10 or later.","# Uses only the Python standard library; no installation is required.","# Repeated request headers are preserved in their original order.",...p.map(e=>`# ${e}`),"","import http.client","import secrets","import urllib.parse","from pathlib import Path",...T,"","","def main() -> None:",` parsed = urllib.parse.urlsplit(${j(t.url)})`,""," if parsed.scheme not in {'http', 'https'}:"," raise ValueError("," f\"Unsupported URL scheme: {parsed.scheme or 'missing'}\""," )",""," if parsed.hostname is None:",' raise ValueError("The request URL must include a hostname")',""," path = urllib.parse.urlunsplit("," ('', '', parsed.path or '/', parsed.query, '')"," )",""," request_headers: list[tuple[str, str]] = [",...pt($.map(([e,t])=>[String(e),String(t)]))," ]",...S,""," connection_class = ("," http.client.HTTPSConnection"," if parsed.scheme == 'https'"," else http.client.HTTPConnection"," )",""," connection = connection_class("," parsed.hostname,"," parsed.port,"," timeout=30,"," )",""," try:",` connection.putrequest(${j(r)}, path)`,""," for name, value in request_headers:"," connection.putheader(name, value)",""," if request_body is not None:"," connection.putheader('Content-Length', str(len(request_body)))",""," connection.endheaders(request_body)"," response = connection.getresponse()",""," try:"," response_body = response.read()"," charset = response.headers.get_content_charset() or 'utf-8'"," response_text = response_body.decode("," charset,"," errors='replace',"," )",""," if not 200 <= response.status < 300:"," raise RuntimeError(",' f"HTTP {response.status} {response.reason}: "'," f'{response_text}'"," )",""," print(response_text)"," finally:"," response.close()"," except (OSError, http.client.HTTPException) as error:",' raise RuntimeError(f"HTTP request failed: {error}") from error'," finally:"," connection.close()","","","if __name__ == '__main__':"," main()"].join("\n")}),ae("python","httpx-async",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o),i=Boolean(n&&o&&_(e)),p=[],g=[],$=[],S=t.headers.filter(([e])=>{const t=String(e);return(!s||!d(t)&&!f(t))&&(!i||!c(t))});if(n&&o)if(i){g.push(" data: list[tuple[str, str]] = []"," files: list[tuple[str, tuple[str, BinaryIO, str]]] = []");for(const e of z(n.value)){const t=String(e.name);if(e.file&&C(e.value)){const r=e.value,n=y(r.path)??a,o=y(r.name)??u,s=y(r.contentType)??l;y(r.path)||p.push(ct(x(n,t))),g.push(` file_handle = stack.enter_context(open(${j(n)}, "rb"))`," files.append("," (",` ${j(t)},`," (",` ${j(o)},`," file_handle,",` ${j(s)},`," ),"," )"," )")}else g.push(` data.append((${j(t)}, ${j(w(e.value))}))`)}$.push(" data=data,"),$.push(" files=files,")}else v(e)?$.push(` content=${j(he(n.value))},`):$.push(` content=${j(V(e))},`);return["# Requires Python 3.10 or later.","# Requires HTTPX 0.27 or later: python -m pip install 'httpx>=0.27'","# Repeated request headers and multipart fields are preserved in order.",...p.map(e=>`# ${e}`),"","import asyncio","from contextlib import ExitStack","from typing import BinaryIO","","import httpx","","","async def main() -> None:"," headers = [",...dt(S.map(([e,t])=>[String(e),String(t)]))," ]",""," timeout = httpx.Timeout(30.0)",""," with ExitStack() as stack:",...g,...g.length>0?[""]:[]," try:"," async with httpx.AsyncClient(timeout=timeout) as client:"," response = await client.request(",` ${j(r)},`,` ${j(t.url)},`," headers=headers,",...$," )",""," if not 200 <= response.status_code < 300:"," raise RuntimeError(",' f"HTTP {response.status_code}: {response.text}"'," )",""," print(response.text)"," except httpx.HTTPError as error:",' raise RuntimeError(f"HTTP request failed: {error}") from error',"","",'if __name__ == "__main__":'," asyncio.run(main())"].join("\n")}),ae("python","httpx-sync",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o),i=Boolean(n&&o&&_(e)),p=[],g=[],$=[],S=t.headers.filter(([e])=>{const t=String(e);return(!s||!d(t)&&!f(t))&&(!i||!c(t))});if(n&&o)if(i){g.push(" data: list[tuple[str, str]] = []"," files: list[tuple[str, tuple[str, BinaryIO, str]]] = []");for(const e of z(n.value)){const t=String(e.name);if(e.file&&C(e.value)){const r=e.value,n=y(r.path)??a,o=y(r.name)??u,s=y(r.contentType)??l;y(r.path)||p.push(ft(x(n,t))),g.push(` file_handle = stack.enter_context(open(${j(n)}, "rb"))`," files.append("," (",` ${j(t)},`," (",` ${j(o)},`," file_handle,",` ${j(s)},`," ),"," )"," )")}else g.push(` data.append((${j(t)}, ${j(w(e.value))}))`)}$.push(" data=data,"),$.push(" files=files,")}else v(e)?$.push(` content=${j(he(n.value))},`):$.push(` content=${j(V(e))},`);return["# Requires Python 3.10 or later.","# Requires HTTPX 0.27 or later: python -m pip install 'httpx>=0.27'","# Repeated request headers and multipart fields are preserved in order.",...p.map(e=>`# ${e}`),"","from contextlib import ExitStack","from typing import BinaryIO","","import httpx","","","def main() -> None:"," headers: list[tuple[str, str]] = [",...mt(S.map(([e,t])=>[String(e),String(t)]))," ]",""," timeout = httpx.Timeout(30.0)",""," with ExitStack() as stack:",...g,...g.length>0?[""]:[]," try:"," with httpx.Client(timeout=timeout) as client:"," response = client.request(",` ${j(r)},`,` ${j(t.url)},`," headers=headers,",...$," )",""," if not 200 <= response.status_code < 300:"," raise RuntimeError(",' f"HTTP {response.status_code}: {response.text}"'," )",""," print(response.text)"," except httpx.HTTPError as error:",' raise RuntimeError(f"HTTP request failed: {error}") from error',"","",'if __name__ == "__main__":'," main()"].join("\n")}),ae("python","requests",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o),i=Boolean(n&&o&&_(e)),p=[],g=[],$=[],S=t.headers.filter(([e])=>{const t=String(e);return(!s||!d(t)&&!f(t))&&(!i||!c(t))});if(n&&o)if(i){g.push(" data: list[tuple[str, str]] = []",[" files: list["," tuple[str, tuple[str, BinaryIO, str]]"," ] = []"].join("\n"));for(const e of z(n.value)){const t=String(e.name);if(e.file&&C(e.value)){const r=e.value,n=y(r.path)??a,o=y(r.name)??u,s=y(r.contentType)??l;y(r.path)||p.push(ht(x(n,t))),g.push(` file_handle = stack.enter_context(open(${j(n)}, "rb"))`," files.append("," (",` ${j(t)},`," (",` ${j(o)},`," file_handle,",` ${j(s)},`," ),"," )"," )")}else g.push(` data.append((${j(t)}, ${j(w(e.value))}))`)}$.push(" data=data,"),$.push(" files=files,")}else v(e)?$.push(` data=${j(he(n.value))},`):$.push(` data=${j(V(e))},`);return["# Requires Python 3.10 or later.","# Requires Requests 2.31 or later:","# python -m pip install 'requests>=2.31'","# Requests cannot preserve duplicate request headers; values are","# combined with commas in their original order.","# Duplicate multipart fields and files are preserved.",...p.map(e=>`# ${e}`),"","from contextlib import ExitStack","from typing import BinaryIO","","import requests","","","def combine_headers("," values: list[tuple[str, str]],",") -> dict[str, str]:"," headers: dict[str, str] = {}"," canonical_names: dict[str, str] = {}",""," for name, value in values:"," normalized = name.lower()"," existing_name = canonical_names.get(normalized)",""," if existing_name is None:"," canonical_names[normalized] = name"," headers[name] = value"," else:"," headers[existing_name] = ("," f'{headers[existing_name]}, {value}'"," )",""," return headers","","","def main() -> None:"," header_items: list[tuple[str, str]] = [",...gt(S.map(([e,t])=>[String(e),String(t)]))," ]"," headers = combine_headers(header_items)",""," with ExitStack() as stack:",...g,...g.length>0?[""]:[]," try:"," with requests.Session() as session:"," response = session.request(",` method=${j(r)},`,` url=${j(t.url)},`," headers=headers,",...$," timeout=30,"," )",""," try:"," response_text = response.text",""," if not 200 <= response.status_code < 300:"," raise RuntimeError(",' f"HTTP {response.status_code}: "',' f"{response_text}"'," )",""," print(response_text)"," finally:"," response.close()"," except requests.RequestException as error:"," raise RuntimeError(",' f"HTTP request failed: {error}"'," ) from error","","",'if __name__ == "__main__":'," main()"].join("\n")}),ae("r","httr2",function(e){const t=me(e),r=e.body,n=Boolean(r)&&_(e),o=[],s=["library(httr2)","",`req <- request(${yt(t.url)}) |>`,` req_method(${yt(e.method.toUpperCase())})`],i=t.headers.filter(([e])=>!(n&&"content-type"===e.toLowerCase()));if(i.length>0){const e=i.map(([e,t])=>`${$t(String(e))} = ${yt(String(t))}`);s.push("","req <- req |> req_headers(",St(e.join(",\n")),")")}if(r)if(s.push(""),n){const e=z(r.value).map(e=>{const t=String(e.name);if(e.file&&C(e.value)){const r=e.value,n=r.path||"/tmp/file.bin";return r.path||o.push(`# TODO: replace ${yt(n)} with the real local file path for ${yt(t)}`),`${$t(t)} = upload_file(${yt(n)})`}return`${$t(t)} = ${yt(String(e.value??""))}`});e.length>0&&s.push("req <- req |> req_body_multipart(",St(e.join(",\n")),")")}else if(b(e)){const t=bt(e,"application/json");s.push(`json_body <- ${yt(V(e))}`,"req <- req |> req_body_raw("," json_body,",` type = ${yt(t)}`,")")}else{const t=v(e),n=t?he(r.value):V(e),o=bt(e,t?"application/x-www-form-urlencoded":"application/octet-stream");s.push("req <- req |> req_body_raw(",` ${yt(n)},`,` type = ${yt(o)}`,")")}return s.push("","response <- req |> req_perform()","resp_body_string(response)"),o.length>0?`${o.join("\n")}\n${s.join("\n")}`:s.join("\n")}),ae("ruby","net-http",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o),i=Boolean(n&&o&&_(e)),p=[],g=[],$=t.headers.filter(([e])=>{const t=String(e);return(!s||!d(t)&&!f(t))&&(!i||!c(t))});if(n&&i)for(const e of z(n.value)){const t=String(e.name);if(e.file&&C(e.value)){const r=e.value,n=y(r.path)??a,o=y(r.name)??u,s=y(r.contentType)??l;y(r.path)||p.push(vt(x(n,t))),g.push(" {",` name: ${O(t)},`,` path: ${O(n)},`,` filename: ${O(o)},`,` content_type: ${O(s)},`," },")}else g.push(" {",` name: ${O(t)},`,` value: ${O(w(e.value))},`," },")}let S=[];n&&o&&(S=i?["boundary = generate_boundary","request.body = encode_multipart("," multipart_entries,"," boundary,",")","request['Content-Type'] = (",' "multipart/form-data; boundary=#{boundary}"',")"]:v(e)?[`request.body = ${O(he(n.value))}`]:[`request.body = ${O(V(e))}`]);const b=i?["","def generate_boundary",' "----ruby-net-http-#{SecureRandom.hex(24)}"',"end","","def escape_disposition(value)"," value",' .gsub("\\\\", "\\\\\\\\")'," .gsub('\"', '\\\\\"')",' .gsub(/[\\r\\n]/, "")',"end","","def encode_multipart(entries, boundary)",' body = +"".b',""," entries.each do |entry|",' body << "--#{boundary}\\r\\n".b'," disposition = ("," 'Content-Disposition: form-data; name=\"' +"," escape_disposition(entry.fetch(:name)) +"," '\"'"," )",""," if entry.key?(:path)"," disposition << ("," '; filename=\"' +"," escape_disposition(entry.fetch(:filename)) +"," '\"'"," )"," end","",' body << "#{disposition}\\r\\n".b',""," if entry.key?(:content_type)"," content_type = entry.fetch(:content_type)",' body << "Content-Type: #{content_type}\\r\\n".b'," end","",' body << "\\r\\n".b',""," if entry.key?(:path)"," File.open(entry.fetch(:path), 'rb') do |file|"," IO.copy_stream(file, StringIO.new(body))"," end"," else"," body << entry.fetch(:value).encode("," Encoding::UTF_8,"," invalid: :replace,"," undef: :replace,"," )"," end","",' body << "\\r\\n".b'," end","",' body << "--#{boundary}--\\r\\n".b'," body","end"]:[];return["# Requires Ruby 3.1 or later.","# Uses only the Ruby standard library; no gem installation is required.","# Repeated request-header values are preserved in their original order.",...p.map(e=>`# ${e}`),"",'require "net/http"','require "uri"',...i?['require "securerandom"','require "stringio"']:[],...b,"","def main",` uri = URI.parse(${O(t.url)})`,""," unless %w[http https].include?(uri.scheme)"," raise ArgumentError, ("," \"unsupported URL scheme: #{uri.scheme || 'missing'}\""," )"," end","",' raise ArgumentError, "URL must include a host" unless uri.host',""," request = Net::HTTPGenericRequest.new(",` ${O(r)},`,` ${o?"true":"false"},`," true,"," uri.request_uri.empty? ? '/' : uri.request_uri,"," )",""," header_items = [",..._t($.map(([e,t])=>[String(e),String(t)]))," ]",""," header_items.each do |name, value|"," request.add_field(name, value)"," end",...i?[""," multipart_entries = [",...g.map(e=>` ${e}`)," ]"]:[],...S.length?["",...S.map(e=>` ${e}`)]:[],""," http = Net::HTTP.new(uri.host, uri.port)"," http.use_ssl = uri.scheme == 'https'"," http.open_timeout = 30"," http.read_timeout = 30"," http.write_timeout = 30",""," response = http.start do |connection|"," connection.request(request)"," end",""," unless response.is_a?(Net::HTTPSuccess)"," raise RuntimeError, (",' "HTTP #{response.code} #{response.message}: #{response.body}"'," )"," end",""," puts response.body","rescue URI::InvalidURIError,"," SocketError,"," SystemCallError,"," IOError,"," Timeout::Error,"," Net::HTTPBadResponse,"," Net::HTTPHeaderSyntaxError,"," Net::ProtocolError => error",' raise RuntimeError, "HTTP request failed: #{error.message}"',"end","","main if $PROGRAM_NAME == __FILE__"].join("\n")}),ae("rust","reqwest",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o),i=Boolean(n&&o&&_(e)),p=[],g=[];let $;const S=t.headers.filter(([e])=>{const t=String(e);return(!s||!d(t)&&!f(t))&&(!i||!c(t))});if(n&&o)if(i){g.push("let mut multipart_form = reqwest::blocking::multipart::Form::new();");for(const e of z(n.value)){const t=String(e.name);if(e.file&&C(e.value)){const r=e.value,n=y(r.path)??a,o=y(r.name)??u,s=y(r.contentType)??l;y(r.path)||p.push(Tt(x(n,t))),g.push("{",` let file = File::open(${N(n)})?;`," let part = reqwest::blocking::multipart::Part::reader(file)",` .file_name(${N(o)})`,` .mime_str(${N(s)})?;`," multipart_form = multipart_form.part(",` ${N(t)},`," part,"," );","}")}else g.push("multipart_form = multipart_form.text(",` ${N(t)},`,` ${N(w(e.value))}.to_owned(),`,");")}$=".multipart(multipart_form)"}else{const t=v(e)?he(n.value):V(e);g.push(`let request_body = ${N(t)}.to_owned();`),$=".body(request_body)"}const b=["let mut headers = HeaderMap::new();"];for(const[e,t]of S){const r=String(e),n=String(t);b.push("{",` let name = HeaderName::from_bytes(${N(r)}.as_bytes())?;`,` let value = HeaderValue::from_str(${N(n)})?;`," headers.append(name, value);","}")}return["// Requires Rust 1.74 or later.","// Requires reqwest 0.12 or later.","//","// Cargo.toml:",'// reqwest = { version = "0.12", features = ["blocking", "multipart"] }',"//","// Repeated request headers and multipart fields are preserved in order.",...p.map(e=>`// ${e}`),"","use reqwest::blocking::Client;","use reqwest::header::{HeaderMap, HeaderName, HeaderValue};","use reqwest::Method;",...i?["use std::fs::File;"]:[],"use std::error::Error;","use std::io;","use std::time::Duration;","","","fn main() -> Result<(), Box<dyn Error>> {"," let client = Client::builder()"," .connect_timeout(Duration::from_secs(30))"," .timeout(Duration::from_secs(30))"," .build()?;","",...wt(b," "),"",` let method = Method::from_bytes(${N(r)}.as_bytes())?;`,...g.length>0?["",...wt(g," ")]:[],""," let request = client",` .request(method, ${N(t.url)})`," .headers(headers)",...$?[` ${$}`]:[]," .build()?;",""," let response = client.execute(request)?;"," let status = response.status();"," let response_body = response.text()?;",""," if !status.is_success() {"," return Err(io::Error::other(format!(",' "HTTP {}: {}",'," status,"," response_body,"," ))"," .into());"," }","",' println!("{}", response_body);'," Ok(())","}"].join("\n")}),ae("shell","curl",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o&&_(e)),i=Boolean(n&&o),p=["# Requires curl 7.76.0+.","# Install: https://curl.se/download.html","# Repeated headers and multipart fields are emitted separately.","# --connect-timeout limits connection setup; --max-time limits the whole transfer."],g=t.headers.filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))}),$=["curl --fail-with-body --show-error --silent"," --connect-timeout 30"," --max-time 30",` --request ${U(r)}`,` --url ${U(t.url)}`];for(const[e,t]of g)$.push(` --header ${U(`${String(e)}: ${String(t)}`)}`);if(n&&o&&s)for(const e of z(n.value)){const t=String(e.name);if(e.file&&C(e.value)){const r=e.value,n=y(r.path),o=n??a,s=y(r.name)??u,i=y(r.contentType)??l;void 0===n&&p.push(`# ${Rt(x(o,t))}`),$.push(` --form ${U(`${t}=@${o};filename=${s};type=${i}`)}`)}else $.push(` --form-string ${U(`${t}=${xt(e.value)}`)}`)}else if(n&&o){const t=v(e)?he(n.value):V(e);$.push(` --data-binary ${U(t)}`)}const S=$.map((e,t)=>t<$.length-1?`${e} \\`:e).join("\n");return[...p,S].join("\n")}),ae("shell","httpie",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o&&_(e)),i=Boolean(n&&o&&v(e)),p=Boolean(n&&o),g=["Requires HTTPie 3.2+.","Install: python3 -m pip install 'httpie>=3.2,<4'","HTTPie preserves repeated header arguments and repeated form fields."],$=t.headers.filter(([e])=>{const t=String(e);return(!p||!d(t)&&!f(t))&&(!s&&!i||!c(t))}),S=["http","--check-status","--timeout=30"];(s||i)&&S.push("--form"),S.push(U(r),U(t.url));for(const[e,t]of $)S.push(U(`${String(e)}:${String(t)}`));if(n&&o&&s)for(const e of z(n.value)){const t=String(e.name);if(e.file&&C(e.value)){const r=e.value,n=y(r.path),o=n??a,s=y(r.name)??u,i=y(r.contentType)??l;void 0===n&&g.push(qt(x(o,t))),S.push(U(`${t}@${o};type=${i};filename=${s}`))}else S.push(U(`${t}=${Ct(e.value)}`))}else if(n&&o&&i)for(const e of z(n.value))S.push(U(`${String(e.name)}=${Ct(e.value)}`));else if(n&&o){const t=[`printf '%s' ${U(V(e))}`,"|",S.join(" ")].join(" ");return[...g.map(e=>`# ${qt(e)}`),t].join("\n")}const b=S.map((e,t)=>0===t?e:` ${e}`).join(" \\\n");return[...g.map(e=>`# ${qt(e)}`),b].join("\n")}),ae("shell","wget",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o);if(s&&_(e))throw new Error("GNU Wget cannot safely construct multipart/form-data requests; use curl or HTTPie instead");const i=t.headers.filter(([e])=>{const t=String(e);return!s||!d(t)&&!f(t)}),a=["wget",` --method=${U(r)}`," --timeout=30"," --tries=1"," --server-response"," --content-on-error"," --output-document=-"];for(const[e,t]of i)a.push(` --header=${U(`${String(e)}: ${String(t)}`)}`);if(n&&o){const t=v(e)?he(n.value):V(e);a.push(` --body-data=${U(t)}`)}return a.push(` ${U(t.url)}`),`${["# Requires GNU Wget 1.20+.","# Install (Debian/Ubuntu): sudo apt-get install wget","# --timeout=30 applies separately to DNS, connection, and read operations;","# GNU Wget does not provide a strict 30-second total-transfer timeout.","# --tries=1 disables retries after the initial request.","# Response bodies, including HTTP error bodies, are written to standard output.","# GNU Wget reports HTTP failures through its process exit status.","# Repeated request headers are emitted as separate --header options."].join("\n")}\n${a.join(" \\\n")}`}),ae("swift","nsurlsession",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o&&_(e)),i=Boolean(n&&o),p=["// Requires Swift 5.7+ on macOS 12+ or Linux with FoundationNetworking.","// Compile on macOS: swiftc main.swift -o request","// Compile on Linux: swiftc main.swift -o request","// URLSession cannot preserve duplicate request headers reliably;","// duplicate names are safely combined with commas."],g=t.headers.filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))}),$=[],S=new Map;for(const[e,t]of g){const r=String(e),n=String(t),o=r.toLowerCase(),s=S.get(o);void 0===s?(S.set(o,$.length),$.push([r,[n]])):$[s][1].push(n)}const b=[];if(n&&o&&s){b.push("var bodyData = Data()","","func appendUtf8(_ value: String, to data: inout Data) throws {"," guard let encoded = value.data(using: .utf8) else {"," throw RequestError.utf8Encoding"," }"," data.append(encoded)","}","");for(const[e,t]of z(n.value).entries()){const r=String(t.name);if(t.file&&C(t.value)){const n=t.value,o=y(n.path),s=o??a,i=y(n.name)??u,c=y(n.contentType)??l;void 0===o&&p.push(`// ${Et(x(s,r))}`),b.push('try appendUtf8("--\\(boundary)\\r\\n", to: &bodyData)',`try appendUtf8("Content-Disposition: form-data; name=\\"\\(quotedMultipartValue(${k(r)}))\\"; filename=\\"\\(quotedMultipartValue(${k(i)}))\\"\\r\\n", to: &bodyData)`,`try appendUtf8("Content-Type: \\(safeMediaType(${k(c)}))\\r\\n\\r\\n", to: &bodyData)`,`let fileURL${e} = URL(fileURLWithPath: ${k(s)})`,`bodyData.append(try Data(contentsOf: fileURL${e}, options: [.mappedIfSafe]))`,'try appendUtf8("\\r\\n", to: &bodyData)',"")}else b.push('try appendUtf8("--\\(boundary)\\r\\n", to: &bodyData)',`try appendUtf8("Content-Disposition: form-data; name=\\"\\(quotedMultipartValue(${k(r)}))\\"\\r\\n\\r\\n", to: &bodyData)`,`try appendUtf8(${k(Bt(t.value))}, to: &bodyData)`,'try appendUtf8("\\r\\n", to: &bodyData)',"")}b.push('try appendUtf8("--\\(boundary)--\\r\\n", to: &bodyData)',"urlRequest.httpBody = bodyData","urlRequest.setValue(",' "multipart/form-data; boundary=\\(boundary)",',' forHTTPHeaderField: "Content-Type"',")")}else if(n&&o){const t=v(e)?he(n.value):V(e);b.push(`guard let requestBody = ${k(t)}.data(using: .utf8) else {`," throw RequestError.utf8Encoding","}","urlRequest.httpBody = requestBody")}const T=s?["","func quotedMultipartValue(_ value: String) -> String {"," value",' .replacingOccurrences(of: "\\r", with: " ")',' .replacingOccurrences(of: "\\n", with: " ")',' .replacingOccurrences(of: "\\\\", with: "\\\\\\\\")',' .replacingOccurrences(of: "\\"", with: "\\\\\\"")',"}","","func safeMediaType(_ value: String) -> String {"," let sanitized = value",' .replacingOccurrences(of: "\\r", with: "")',' .replacingOccurrences(of: "\\n", with: "")'," .trimmingCharacters(in: .whitespacesAndNewlines)"," return sanitized.isEmpty",' ? "application/octet-stream"'," : sanitized","}"]:[];return[...p,"","import Foundation","#if canImport(FoundationNetworking)","import FoundationNetworking","#endif","","enum RequestError: Error, CustomStringConvertible {"," case invalidURL(String)"," case utf8Encoding"," case invalidResponse"," case httpStatus(Int, String)",""," var description: String {"," switch self {"," case .invalidURL(let value):",' return "Invalid URL: \\(value)"'," case .utf8Encoding:",' return "Failed to encode request data as UTF-8"'," case .invalidResponse:",' return "The server returned a non-HTTP response"'," case .httpStatus(let status, let body):",' return "HTTP status \\(status): \\(body)"'," }"," }","}",...T,"","@main","struct Main {"," static func main() async {"," do {"," try await run()"," } catch {"," FileHandle.standardError.write(",' Data("Request failed: \\(error)\\n".utf8)'," )"," Foundation.exit(EXIT_FAILURE)"," }"," }",""," static func run() async throws {",` let urlString = ${k(t.url)}`," guard let url = URL(string: urlString) else {"," throw RequestError.invalidURL(urlString)"," }",""," var urlRequest = URLRequest(url: url)",` urlRequest.httpMethod = ${k(r)}`," urlRequest.timeoutInterval = 30",...$.map(([e,t])=>` urlRequest.setValue(${k(t.join(", "))}, forHTTPHeaderField: ${k(e)})`),...s?[' let boundary = "Boundary-\\(UUID().uuidString)"',...b.map(e=>e?` ${e}`:"")]:b.map(e=>e?` ${e}`:""),""," let configuration = URLSessionConfiguration.ephemeral"," configuration.timeoutIntervalForRequest = 30"," configuration.timeoutIntervalForResource = 30"," let session = URLSession(configuration: configuration)"," defer {"," session.invalidateAndCancel()"," }",""," let (data, response) = try await session.data(for: urlRequest)"," guard let httpResponse = response as? HTTPURLResponse else {"," throw RequestError.invalidResponse"," }",""," let responseBody = String(decoding: data, as: UTF8.self)"," guard (200...299).contains(httpResponse.statusCode) else {"," throw RequestError.httpStatus("," httpResponse.statusCode,"," responseBody"," )"," }",""," print(responseBody)"," }","}"].join("\n")})],Ut=!1;function Ht(){if(!Ut){Ut=!0;for(const e of jt)pe(e)}}function Ot(e){pe(e)}function Pt(e,t){return ce(e,t)}function Dt(){return de()}function Ft(e){e.register({register:Ot})}function At(e){if(!e||"object"!=typeof e)throw new TypeError("generate() requires an options object");const t=Pt(e.language,e.client);if(!t)throw new Error(`Unsupported generator: ${e.language}/${e.client}`);let r;if(e.request)r=e.request;else{if(!e.document)throw new TypeError("generate() requires either a 'request' or a 'document' option");if(!e.path)throw new TypeError("generate() requires a 'path' option when using 'document'");if(!e.method)throw new TypeError("generate() requires a 'method' option when using 'document'");r=we({document:e.document,path:e.path,method:e.method,serverUrl:e.serverUrl,securityValues:e.securityValues,softRefMode:e.softRefMode})}return t.generate(r)}Ht();//# sourceMappingURL=index.cjs.map
|
|
1
|
+
var e,t=Object.defineProperty,r=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,o=Object.prototype.hasOwnProperty,s={};((e,r)=>{for(var n in r)t(e,n,{get:r[n],enumerable:!0})})(s,{RefResolver:()=>i,applyPlugin:()=>fe,builtinGenerators:()=>jt,compile:()=>me,cookie:()=>se,createGenerator:()=>ae,defaultExampleContext:()=>Z,example:()=>Q,form:()=>he,generate:()=>At,get:()=>Pt,getGenerator:()=>ce,headerValue:()=>ie,list:()=>Dt,listGenerators:()=>de,normalize:()=>we,parameter:()=>ne,query:()=>oe,register:()=>Ot,registerBuiltins:()=>Ht,registerGenerator:()=>pe,use:()=>Ft}),module.exports=(e=s,((e,s,i,a)=>{if(s&&"object"==typeof s||"function"==typeof s)for(let u of n(s))o.call(e,u)||u===i||t(e,u,{get:()=>s[u],enumerable:!(a=r(s,u))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var i=class{root;cache=new Map;stack=new Set;softMode;constructor(e,t=!1){this.root=e,this.softMode=t}deref(e){if(!e||"object"!=typeof e)return e;const t=e;if("string"!=typeof t.$ref)return e;try{return this.resolveRef(t.$ref)}catch(t){if(this.softMode)return e;throw t}}resolveRef(e){if(!e.startsWith("#/")){const t=new Error(`Only in-document references are supported: ${e}`);if(this.softMode)return{$ref:e};throw t}if(this.cache.has(e))return this.cache.get(e);if(this.stack.has(e)){const t=new Error(`Circular reference detected while resolving: ${e}`);if(this.softMode)return{$ref:e};throw t}this.stack.add(e);try{const t=e.slice(2).split("/").map(e=>e.replace(/~1/g,"/").replace(/~0/g,"~"));let r=this.root;for(const n of t){if(null===r||"object"!=typeof r){const t=new Error(`Broken reference: ${e}`);if(this.softMode)return{$ref:e};throw t}if(r=r[n],void 0===r){const t=new Error(`Broken reference: ${e}`);if(this.softMode)return{$ref:e};throw t}}if(r&&"object"==typeof r&&"string"==typeof r.$ref){const t=this.resolveRef(r.$ref);return this.cache.set(e,t),t}return this.cache.set(e,r),r}finally{this.stack.delete(e)}}clearCache(){this.cache.clear()}},a="/tmp/file.bin",u="file.bin",l="application/octet-stream";function p(e){return String(e).trim().toLowerCase()}function c(e){return"content-type"===p(e)}function d(e){return"content-length"===p(e)}function f(e){return"transfer-encoding"===p(e)}function m(e){return String(e??"").trim().toUpperCase()||"GET"}function h(e){const t=m(e);return"GET"!==t&&"HEAD"!==t}function g(e){const t=m(e);return"POST"===t||"PUT"===t||"PATCH"===t}function y(e,t){return"string"==typeof e&&e.trim().length>0?e:t}function $(e,t){const r=y(e.body?.mediaType);if(void 0!==r)return r.trim();const n=e.headers;if(!n)return t;const o=Array.isArray(n)?n:Object.entries(n);for(const[e,t]of o){if(!c(String(e)))continue;const r=Array.isArray(t)?t:[t];for(const e of r){if(null==e)continue;const t=String(e).trim();if(t)return t}}return t}function S(e){return $(e,"").split(";",1)[0].trim().toLowerCase()}function b(e){const t=S(e);return"application/json"===t||t.endsWith("+json")}function v(e){return"application/x-www-form-urlencoded"===S(e)}function _(e){return"multipart/form-data"===S(e)}function T(e){return null==e?"":"string"==typeof e?e:"number"==typeof e||"boolean"==typeof e||"bigint"==typeof e?String(e):function(e){try{return JSON.stringify(e)??String(e??"")}catch{return String(e??"")}}(e)}function w(e){return T(e)}function R(e){return String(e).replace(/[\r\n\u2028\u2029]+/g," ").replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]+/g," ")}function x(e,t){return`TODO: replace ${R(e)} with the real local file path for multipart field ${R(t)}`}function q(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function C(e){return q(e)&&Boolean(e.__file)}function E(e){return JSON.stringify(String(e))}function B(e){return E(e)}function j(e){return E(e)}function U(e){return`'${String(e).replace(/'/g,"'\\''")}'`}function H(e){return`'${String(e).replace(/\\/g,"\\\\").replace(/'/g,"\\'")}'`}function O(e){const t=String(e);return t.includes("\n")?`%Q{${t.replace(/\\/g,"\\\\").replace(/}/g,"\\}").replace(/\$/g,"\\$")}}`:`'${t.replace(/\\/g,"\\\\").replace(/'/g,"\\'")}'`}function P(e){return`'${String(e).replace(/'/g,"''")}'`}function D(e){return`@"${String(e).replace(/"/g,'""')}"`}function F(e){return E(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}function A(e){return E(e)}function N(e){return E(e)}function L(e){return`@${E(e)}`}function k(e){return E(e)}function M(e){return E(e)}function I(e){return E(e)}function W(e){return E(e)}function z(e){if(!q(e))return[];const t=[];for(const[r,n]of Object.entries(e))if(Array.isArray(n))for(const e of n)t.push({name:r,value:e,file:C(e)});else t.push({name:r,value:n,file:C(n)});return t}function J(e){const t=m(e.method).toLowerCase(),r=("string"==typeof e.path?e.path:"").replace(/\{([^}]+)\}/g,"_by_$1").replace(/[^A-Za-z0-9]+/g,"_").replace(/^_+|_+$/g,"").toLowerCase();return function(e){const t=String(e).replace(/[^A-Za-z0-9_]/g,"_");return(/^[0-9]/.test(t)?`_${t}`:t)||"value"}(r?`${t}_${r}`:`${t}_request`)}function V(e){if(!e.body)return"";const t=e.body.value;if("string"==typeof t)return t;try{return JSON.stringify(t,null,2)??""}catch{return String(t??"")}}function X(...e){for(const t of e)if(void 0!==t)return t}function G(e,t){return e.filter(([e])=>!function(e){const t=p(e);switch(t){case"accept-charset":case"accept-encoding":case"access-control-request-headers":case"access-control-request-method":case"connection":case"content-length":case"cookie":case"cookie2":case"date":case"dnt":case"expect":case"host":case"keep-alive":case"origin":case"permissions-policy":case"referer":case"te":case"trailer":case"transfer-encoding":case"upgrade":case"via":return!0;default:return t.startsWith("proxy-")||t.startsWith("sec-")}}(e)&&(!t||!c(e)))}var K=64,Z={isRequestBody:!1,isResponse:!1};function Q(e,t,r,n=0,o=Z){const s=r??new Set;if(n>=K)return null;const i=t.deref(e);if("boolean"==typeof i)return i?{}:null;if(!q(i))return;const a=i;if(s.has(a))return null;s.add(a);const u=X(a.example,Array.isArray(a.examples)&&a.examples.length?a.examples[0]:void 0);if(void 0!==u)return u;if(void 0!==a.const)return a.const;if(void 0!==a.default)return a.default;if(Array.isArray(a.enum)&&a.enum.length>0)return a.enum[0];if(Array.isArray(a.oneOf)&&a.oneOf.length>0)return Q(a.oneOf[0],t,s,n+1,o);if(Array.isArray(a.anyOf)&&a.anyOf.length>0)return Q(a.anyOf[0],t,s,n+1,o);if(Array.isArray(a.allOf)&&a.allOf.length>0){const e=function(e,t){const r={};for(const n of e){const e=t.deref(n);if(!1===e)return;if(!0!==e&&q(e))for(const[t,n]of Object.entries(e)){if("properties"===t){if(!q(n))continue;const e=q(r.properties)?r.properties:{};r.properties={...e,...n};continue}if("required"===t){if(!Array.isArray(n))continue;const e=new Set(Array.isArray(r.required)?r.required.filter(e=>"string"==typeof e):[]);for(const t of n)"string"==typeof t&&e.add(t);r.required=[...e];continue}if("type"===t){const e=new Set,t=r.type;if("string"==typeof t)e.add(t);else if(Array.isArray(t))for(const r of t)"string"==typeof r&&e.add(r);if("string"==typeof n)e.add(n);else if(Array.isArray(n))for(const t of n)"string"==typeof t&&e.add(t);1===e.size?r.type=[...e][0]:e.size>1&&(r.type=[...e]);continue}if("allOf"===t||"oneOf"===t||"anyOf"===t){if(!Array.isArray(n))continue;const e=Array.isArray(r[t])?r[t]:[];r[t]=[...e,...n];continue}r[t]=n}}return Object.keys(r).length>0?r:void 0}(a.allOf,t);if(void 0===e)return null;const r={...e};for(const[e,t]of Object.entries(a))"allOf"!==e&&void 0===r[e]&&(r[e]=t);return Q(r,t,s,n+1,o)}if(Array.isArray(a.prefixItems)&&a.prefixItems.length>0)return a.prefixItems.map(e=>Q(e,t,s,n+1,o));let l;if("string"==typeof a.type)l=a.type;else if(Array.isArray(a.type)){const e=a.type.find(e=>"null"!==e);l="string"==typeof e?e:a.type[0]}switch(l){case"string":{let e=function(e){if(e<=0)return"";let t="",r=0;for(;t.length<e;){const e=o[r%o.length];t.length>0&&(t+=" "),t+=e,r++}return t.slice(0,e)};if("binary"===a.format)return{__file:!0,name:"file.bin",contentType:"application/octet-stream",data:""};if("date-time"===a.format)return"2025-01-01T00:00:00Z";if("date"===a.format)return"2025-01-01";if("time"===a.format)return"00:00:00Z";if("duration"===a.format)return"P1D";const t="number"==typeof a.minLength?a.minLength:0,r="number"==typeof a.maxLength?a.maxLength:1/0,n=Math.min(Math.max(t,2),r),o=["lorem","ipsum","dolor","sit","amet","consectetur","adipiscing","elit","sed","do","eiusmod","tempor","incididunt","ut","labore","dolore","magna","aliqua","sample","text","value","demo","test"];let s;try{s=e(n)}catch{s="x".repeat(n)}if("string"==typeof a.pattern)try{const e=new RegExp(a.pattern),t=["test","abc","sample","value_01",s,"A"].find(t=>e.test(t));void 0!==t&&(s=t,s=s.slice(0,r))}catch{}return s}case"integer":{let e=0;return"number"==typeof a.minimum&&(e=Math.ceil(a.minimum)),"number"==typeof a.multipleOf&&a.multipleOf>0&&(e=Math.ceil(e/a.multipleOf)*a.multipleOf),"number"==typeof a.maximum&&(e=Math.min(e,a.maximum)),e}case"number":{let e=0;return"number"==typeof a.minimum&&(e=a.minimum),"number"==typeof a.multipleOf&&a.multipleOf>0&&(e=Math.ceil(e/a.multipleOf)*a.multipleOf),"number"==typeof a.maximum&&(e=Math.min(e,a.maximum)),e}case"boolean":return!0;case"null":return null;case"array":{if(Array.isArray(a.examples)&&a.examples.length>0)return a.examples[0];const e=a.items,r=[],i="number"==typeof a.minItems?a.minItems:0,u="number"==typeof a.maxItems?a.maxItems:1/0,l=Math.min(Math.max(1,i),u);if(e)for(let i=0;i<l;i++)r.push(Q(e,t,s,n+1,o));return r}default:{const e={},r=q(a.properties)?a.properties:{};for(const[i,a]of Object.entries(r)){const r=t.deref(a);if(q(r)){if(o.isRequestBody&&Boolean(r.readOnly))continue;if(o.isResponse&&Boolean(r.writeOnly))continue}e[i]=Q(a,t,s,n+1,o)}if(q(a.patternProperties)){const r=Object.entries(a.patternProperties);if(r.length>0){const[i,a]=r[0];e[`_pattern_${i.replace(/[^a-zA-Z0-9]/g,"_")}`]=Q(a,t,s,n+1,o)}}return 0===Object.keys(e).length&&a.additionalProperties&&(e.additionalProp=Q(a.additionalProperties,t,s,n+1,o)),0===Object.keys(e).length&&a.unevaluatedProperties&&(e.additionalProp=Q(a.unevaluatedProperties,t,s,n+1,o)),e}}}var Y=e=>!!e&&"object"==typeof e&&!Array.isArray(e)&&!e.__file,ee=e=>null===e?"null":void 0===e?"":"string"==typeof e?e:"number"==typeof e||"boolean"==typeof e||"bigint"==typeof e?String(e):JSON.stringify(e);function te(e){return encodeURIComponent(e).replace(/[!'()*]/g,e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`)}function re(e){return e.replace(/[\r\n]+/g," ").replace(/\0/g,"")}function ne(e){const t=e.style??("query"===e.in||"querystring"===e.in||"cookie"===e.in?"form":"simple"),r=e.explode??("form"===t||"deepObject"===t),n=Boolean(e.allowReserved),o=e.value;if(null==o)return[];const s="cookie"===e.in?e=>te(e):"header"===e.in?e=>re(e):e=>function(e,t=!1){return t?e:encodeURIComponent(e)}(e,n);if("deepObject"===t&&Y(o))return function(e,t,r){const n=[],o=[{prefix:e,value:t}];for(;o.length>0;){const e=o.pop();if(!e)continue;const{prefix:t,value:s}=e;if(Array.isArray(s))for(let e=s.length-1;e>=0;e--)o.push({prefix:`${t}[${e}]`,value:s[e]});else if(Y(s)){const e=Object.entries(s);for(let r=e.length-1;r>=0;r--){const[n,s]=e[r];o.push({prefix:`${t}[${n}]`,value:s})}}else n.push([r(t),r(ee(s))])}return n}(e.name,o,s);if(Array.isArray(o)){const n=o.map(e=>s(ee(e)));switch(t){case"form":return r?n.map(t=>[s(e.name),t]):[[s(e.name),n.join(",")]];case"spaceDelimited":return[[s(e.name),n.join("%20")]];case"pipeDelimited":return[[s(e.name),n.join("|")]];case"label":return[[s(e.name),"."+n.join(r?".":",")]];case"matrix":return r?[[s(e.name),n.map(t=>`;${e.name}=${t}`).join("")]]:[[s(e.name),`;${e.name}=${n.join(",")}`]];default:return[[s(e.name),n.join(",")]]}}if(Y(o)){const n=Object.entries(o).flatMap(([e,t])=>[[s(e),s(ee(t))]]);switch(t){case"form":return r?n:[[s(e.name),n.flat().join(",")]];case"simple":return[[s(e.name),r?n.map(([e,t])=>`${e}=${t}`).join(","):n.flat().join(",")]];case"label":return[[s(e.name),"."+(r?n.map(([e,t])=>`${e}=${t}`).join("."):n.flat().join("."))]];case"matrix":return[[s(e.name),r?n.map(([e,t])=>`;${e}=${t}`).join(""):`;${e.name}=${n.flat().join(",")}`]];default:return[[s(e.name),n.flat().join(",")]]}}return"label"===t?[[s(e.name),"."+s(ee(o))]]:"matrix"===t?[[s(e.name),`;${e.name}=${s(ee(o))}`]]:[[s(e.name),s(ee(o))]]}function oe(e){return e.map(([e,t])=>`${e}=${t}`).join("&")}function se(e){return e.map(([e,t])=>`${te(e)}=${te(t)}`).join("; ")}function ie(e){return re(e)}function ae(e,t,r){return{language:e,client:t,generate:e=>r(e)}}var ue=new Map;function le(e,t){return`${e.toLowerCase()}\0${t.toLowerCase()}`}function pe(e){ue.set(le(e.language,e.client),e)}function ce(e,t){return ue.get(le(e,t))}function de(){return[...ue.values()].map(e=>({language:e.language,client:e.client}))}function fe(e,t){e.register(t)}function me(e){let t=e.path;for(const r of e.parameters.filter(e=>"path"===e.in)){const e=ne(r).map(e=>e[1]).join(",");t=t.replace(new RegExp(`\\{${r.name}\\}`,"g"),e)}const r=e.parameters.filter(e=>"query"===e.in||"querystring"===e.in).flatMap(e=>ne(e)),n=e.headers.flatMap(e=>ne(e)),o=e.parameters.filter(e=>"cookie"===e.in).flatMap(e=>ne(e));for(const t of e.security||[]){const e=String(t.value??"");"apiKey"===t.type?"query"===t.in?r.push([encodeURIComponent(t.paramName||t.name),encodeURIComponent(e)]):"cookie"===t.in?o.push([t.paramName||t.name,e]):n.push([t.paramName||t.name,ie(e)]):"http"===t.type&&"bearer"===t.scheme?n.push(["Authorization",ie(`Bearer ${e}`)]):"http"===t.type&&"basic"===t.scheme&&n.push(["Authorization",ie(`Basic ${e}`)])}o.length>0&&n.push(["Cookie",se(o)]);const s=function(e,t){if(/^https?:\/\//i.test(t))return t;const r=(e||"").replace(/\/+$/g,"");return t.startsWith("/")||(t="/"+t),r+t}(e.baseUrl,t),i=oe(r);return{url:i?`${s}?${i}`:s,headers:n,body:e.body,queryPairs:r,cookiePairs:o}}function he(e){if(!e||"object"!=typeof e||Array.isArray(e))return"";const t=[];for(const[r,n]of Object.entries(e))if(Array.isArray(n))for(const e of n)t.push(`${encodeURIComponent(r)}=${encodeURIComponent(String(e??""))}`);else t.push(`${encodeURIComponent(r)}=${encodeURIComponent(String(n??""))}`);return t.join("&")}var ge=new Set(["get","put","post","delete","options","head","patch","trace"]),ye=[/^application\/(?:[a-z0-9.+-]+\+)?json(?:\s*;.*)?$/i,/^application\/x-www-form-urlencoded(?:\s*;.*)?$/i,/^multipart\/form-data(?:\s*;.*)?$/i,/^text\/[a-z0-9.+-]+(?:\s*;.*)?$/i,/^application\/octet-stream(?:\s*;.*)?$/i];function $e(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Se(e,t){if(q(e))for(const r of Object.values(e)){const e=t.deref(r);if(q(e)&&$e(e,"value"))return e.value;if(!q(e)&&void 0!==e)return e}}function be(e,t,r){const n=t.deref(e);if(!q(n))return;if($e(n,"example"))return n.example;const o=Se(n.examples,t);return void 0!==o?o:Q(n.schema,t,void 0,0,r)}function ve(e){if(!q(e))return;let t=y(e.url);if(!t)return;const r=q(e.variables)?e.variables:void 0;return t=t.replace(/\{([^{}]+)\}/g,(e,t)=>{if(!r)return e;const n=r[t];if(!q(n))return e;const o=X(n.default,n.example);return void 0===o?e:encodeURIComponent(String(o))}),t}function _e(e){if(Array.isArray(e))for(const t of e){const e=ve(t);if(e)return e}}function Te(e,t,r,n){const o=Array.isArray(t.security)?t.security:Array.isArray(e.security)?e.security:[],s=function(e){if(q(e.components))return q(e.components.securitySchemes)?e.components.securitySchemes:void 0}(e);if(!s)return[];const i=[],a=new Set;for(const e of o)if(q(e))for(const t of Object.keys(e)){if(a.has(t))continue;const e=r.deref(s[t]);if(!q(e))continue;const o=y(e.type);o&&(a.add(t),i.push({name:t,type:o,scheme:y(e.scheme)?.toLowerCase(),in:y(e.in)?.toLowerCase(),paramName:y(e.name),value:n?.[t]??`{{${t}}}`}))}return i}function we(e){if(!q(e))throw new TypeError("normalize options must be an object");if(!q(e.document))throw new TypeError("OpenAPI document root must be a plain object");const t=e.document,r=function(e){const t=[];return q(e)?("string"!=typeof e.openapi&&t.push("Missing or non-string openapi version field"),q(e.info)||t.push("info object missing or not an object"),void 0===e.paths||q(e.paths)||t.push("paths must be an object when defined"),void 0===e.components||q(e.components)||t.push("components must be an object when defined"),t):(t.push("OpenAPI document root must be a plain object"),t)}(t),n=new i(t,!0===e.softRefMode),o=y(e.path);if(!o)throw new TypeError("OpenAPI path must be a non-empty string");const s=function(e){const t=y(e)?.toLowerCase();if(!t||!ge.has(t))throw new Error(`Unsupported HTTP method: ${String(e)}`);return t}(e.method);if(!q(t.paths))throw new Error("OpenAPI document does not define a valid paths object");if(!$e(t.paths,o))throw new Error(`Path not found: ${o}`);const a=n.deref(t.paths[o]);if(!q(a))throw new Error(`Invalid Path Item Object: ${o}`);const u=n.deref(a[s]);if(!q(u))throw new Error(`Operation not found: ${s.toUpperCase()} ${o}`);const l=function(e,t,r){const n=new Map,o=(e,t)=>{if(Array.isArray(e))for(const o of e){const e=r.deref(o);if(!q(e))continue;const s=y(e.name),i=y(e.in)?.toLowerCase();if(!s||!i)continue;const a=`${i}\0${s}`;!t&&n.has(a)||n.set(a,e)}};return o(e,!1),o(t,!0),[...n.values()]}(a.parameters,u.parameters,n),p=l.map(e=>{const t=y(e.name),r=y(e.in)?.toLowerCase();if(!t||!r)throw new TypeError("Resolved parameter must define name and in");return{name:t,in:r,value:X($e(e,"example")?e.example:void 0,Se(e.examples,n),Q(e.schema,n)),style:y(e.style),explode:"boolean"==typeof e.explode?e.explode:void 0,allowReserved:"boolean"==typeof e.allowReserved?e.allowReserved:void 0}}),c=n.deref(u.requestBody),d=q(c)?function(e){if(!q(e))return;const t=Object.entries(e).filter(([e])=>e.trim().length>0);for(const e of ye){const r=t.find(([t])=>e.test(t.trim()));if(r)return r}return t[0]}(c.content):void 0,f={isRequestBody:!0,isResponse:!1};let m;if(d){const e=n.deref(d[1]);m={mediaType:d[0],value:be(e,n,f),encoding:q(e)?e.encoding:void 0}}const h=Te(t,u,n,e.securityValues),g=function(e,t,r,n){return y(e)??_e(t.servers)??_e(r.servers)??_e(n.servers)??"https://example.com"}(e.serverUrl,u,a,t);return{preWarnings:r,method:s.toUpperCase(),baseUrl:g,path:o,parameters:p,headers:p.filter(e=>"header"===e.in),body:m,security:h}}function Re(e){const t=String(e);let r='"';for(let e=0;e<t.length;e+=1){const n=t.charCodeAt(e);switch(n){case 8:r+="\\b";break;case 9:r+="\\t";break;case 10:r+="\\n";break;case 12:r+="\\f";break;case 13:r+="\\r";break;case 34:r+='\\"';break;case 92:r+="\\\\";break;default:r+=n<32||127===n?`\\${n.toString(8).padStart(3,"0")}`:t[e]}}return`${r}"`}function xe(e,t){return"string"==typeof e&&e.trim().length>0?e:t}function qe(e,t){return[` ${e} = curl_slist_append(${e}, ${Re(t)});`,` if (!${e}) {`,' fprintf(stderr, "Failed to allocate request headers\\n");'," exit_code = 1;"," goto cleanup;"," }"]}function Ce(e,t){return"string"==typeof e&&e.trim().length>0?e:t}function Ee(e){return String(e).replace(/[\r\n\u2028\u2029]+/g," ").replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g,"")}function Be(e,t){return"string"==typeof e&&e.trim().length>0?e:t}function je(e,t){return"string"==typeof e&&e.trim().length>0?e:t}function Ue(e){return String(e).replace(/[\r\n\u2028\u2029]+/g," ").replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g,"")}function He(e,t){return"string"==typeof e&&e.trim().length>0?e:t}function Oe(e){return String(e).replace(/[\r\n\u2028\u2029]+/g," ").replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g,"")}function Pe(e){return e.replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function De(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{return JSON.stringify(e)??""}catch{return String(e)}}function Fe(e){return e.replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function Ae(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{return JSON.stringify(e)??""}catch{return String(e)}}function Ne(e){return e.replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function Le(e){return e.replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function ke(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{return JSON.stringify(e)??""}catch{return String(e)}}function Me(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{const t=JSON.stringify(e);return void 0===t?String(e):t}catch{return String(e)}}function Ie(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o&&_(e)),i=Boolean(n&&o),a=function(e,t){const r=e.replace(/[^A-Za-z0-9_$]/g,"_"),n=/^[A-Za-z_$]/.test(r)?r:`_${r}`;return n.length>0?n:t}(J(e),"sendRequest"),u=n&&s?z(n.value):[],l=[],p=[];let g;if(s){p.push(" const formData = new FormData();");let e=0;for(const t of u){const r=String(t.name);if(t.file&&C(t.value)){e+=1;const t=`file${e}`;l.push(`${t}: File`),p.push(` formData.append(${B(r)}, ${t});`)}else p.push(` formData.append(${B(r)}, ${B(w(t.value))});`)}g="formData"}else n&&o&&(g=B(v(e)?he(n.value):V(e)));const y=G(t.headers,s).filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))}).map(([e,t])=>` headers.append(${B(String(e))}, ${B(String(t))});`),$=l.map((e,t)=>`file${t+1}`);return["// Requires a modern browser with File, FormData, Headers, and AbortController.","// Requires TypeScript 5.2+ and Axios 1.7.x.","// Install: npm install axios@^1.7","// Compile: npx tsc --target ES2022 --module ES2022 --moduleResolution bundler --lib ES2022,DOM main.ts","// Axios/browser header handling may combine repeated header values.","// Browser code cannot read local filesystem paths; pass each multipart file as a File argument.","",'import axios, { AxiosError } from "axios";',"",`export async function ${a}(`,...l.map((e,t)=>` ${e}${t<l.length-1?",":""}`),"): Promise<void> {",...p,...p.length>0?[""]:[]," const headers = new Headers();",...y,""," const response = await axios.request<string>({",` method: ${B(r)},`,` url: ${B(t.url)},`," headers,",...g?[` data: ${g},`]:[]," timeout: 30_000,",' responseType: "text",'," transformResponse: [(value: string) => value],"," validateStatus: () => true,"," });",""," const responseText =",' typeof response.data === "string"'," ? response.data",' : String(response.data ?? "");',""," if (response.status < 200 || response.status >= 300) {"," throw new Error("," `HTTP ${response.status} ${response.statusText}: ${responseText}`,"," );"," }",""," console.log(responseText);","}","",...0===l.length?[`${a}().catch((error: unknown) => {`," if (error instanceof AxiosError) {"," console.error(error.message);"," } else {"," console.error(error);"," }","});"]:["// Call the exported function with browser File objects:",`// ${a}(${$.join(", ")}).catch(console.error);`]].join("\n")}function We(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o&&_(e)),i=Boolean(n&&o),a=n&&s?z(n.value):[],u=[],l=[];let p;if(s){l.push(" const formData = new FormData();");let e=0;for(const t of a){const r=String(t.name);if(t.file&&C(t.value)){e+=1;const t=`file${e}`;u.push(`${t}: File`),l.push(` formData.append(${B(r)}, ${t});`)}else l.push(` formData.append(${B(r)}, ${B(w(t.value))});`)}p="formData"}else n&&o&&(p=B(v(e)?he(n.value):V(e)));const g=G(t.headers,s).filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))}).map(([e,t])=>` headers.append(${B(String(e))}, ${B(String(t))});`);return["// Requires a modern browser with Fetch, FormData, File, Headers, and AbortController.","// Requires TypeScript 5.2+.","// Compile: npx tsc main.ts --target ES2022 --module ES2022 --lib ES2022,DOM --strict","// Fetch may combine repeated header values according to the browser header model.","// Multipart files must be supplied as browser File arguments; local paths are inaccessible.","",0===u.length?"export async function sendRequest(): Promise<string> {":["export async function sendRequest(",...u.map((e,t)=>` ${e}${t<u.length-1?",":""}`),"): Promise<string> {"].join("\n"),...l,...l.length>0?[""]:[]," const headers = new Headers();",...g,""," const controller = new AbortController();"," const timeoutId = globalThis.setTimeout("," () => controller.abort(),"," 30_000,"," );",""," try {",` const response = await fetch(${B(t.url)}, {`,` method: ${B(r)},`," headers,",...p?[` body: ${p},`]:[]," signal: controller.signal,"," });",""," const responseText = await response.text();",""," if (!response.ok) {"," throw new Error("," `HTTP ${response.status} ${response.statusText}: ${responseText}`,"," );"," }",""," return responseText;"," } catch (error: unknown) {",' if (error instanceof DOMException && error.name === "AbortError") {',' throw new Error("Request timed out after 30 seconds", {'," cause: error,"," });"," }",""," throw error;"," } finally {"," globalThis.clearTimeout(timeoutId);"," }","}"].join("\n")}function ze(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o&&_(e)),i=Boolean(n&&o),a=function(e,t){const r=e.replace(/[^A-Za-z0-9_$]/g,"_"),n=/^[A-Za-z_$]/.test(r)?r:`_${r}`;return n.length>0?n:t}(J(e),"sendRequest"),u=n&&s?z(n.value):[],l=[],p=[];let g;if(s){p.push(" const formData = new FormData();");let e=0;for(const t of u){const r=String(t.name);if(t.file&&C(t.value)){e+=1;const t=`file${e}`;l.push(`${t}: File`),p.push(` formData.append(${B(r)}, ${t});`)}else p.push(` formData.append(${B(r)}, ${B(w(t.value))});`)}g="formData"}else n&&o&&(g=B(v(e)?he(n.value):V(e)));const y=G(t.headers,s).filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))});return["// Requires a modern browser with FormData, File, Headers, and AbortSignal.timeout().","// Requires TypeScript 5.2+ and ofetch 1.4+.","// Install: npm install ofetch@^1.4","// Compile: npx tsc main.ts --target ES2022 --module ES2022 --moduleResolution bundler --lib ES2022,DOM --strict","// Fetch may combine repeated headers according to its header model.","// Multipart files must be supplied as File arguments; browsers cannot read local paths.","",'import { ofetch } from "ofetch";',"",0===l.length?`export async function ${a}(): Promise<string> {`:[`export async function ${a}(`,...l.map((e,t)=>` ${e}${t<l.length-1?",":""}`),"): Promise<string> {"].join("\n"),...p,...p.length>0?[""]:[]," const headers = new Headers();",...y.map(([e,t])=>` headers.append(${B(String(e))}, ${B(String(t))});`),""," try {"," return await ofetch<string>(",` ${B(t.url)},`," {",` method: ${B(r)},`," headers,",...g?[` body: ${g},`]:[]," signal: AbortSignal.timeout(30_000),",' responseType: "text",'," retry: 0,"," },"," );"," } catch (error: unknown) {"," if (error instanceof Error) {"," throw new Error(`Request failed: ${error.message}`, {"," cause: error,"," });"," }","",' throw new Error("Request failed with an unknown error", {'," cause: error,"," });"," }","}"].join("\n")}function Je(e){return e.replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function Ve(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{return JSON.stringify(e)??""}catch{return String(e)}}function Xe(e){return e.replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function Ge(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{return JSON.stringify(e)??""}catch{return String(e)}}function Ke(e){return e.replace(/\*\//g,"* /").replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function Ze(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{return JSON.stringify(e)??""}catch{return String(e)}}function Qe(e){return e.replace(/\(\*/g,"( *").replace(/\*\)/g,"* )").replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function Ye(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{return JSON.stringify(e)??""}catch{return String(e)}}function et(e){return e.replace(/^\/\/\s*/,"").replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function tt(e){return e.replace(/^\/\/\s*/,"").replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function rt(e){const t=new Map;for(const[r,n]of e){const e=String(r),o=e.trim().toLowerCase(),s=t.get(o);s?s.values.push(String(n)):t.set(o,{name:e,values:[String(n)]})}const r=[" 'headers' => ["];for(const{name:e,values:n}of t.values())1===n.length?r.push(` ${H(e)} => ${H(n[0])},`):r.push(` ${H(e)} => [`,...n.map(e=>` ${H(e)},`)," ],");return r.push(" ],"),r}function nt(e){return e.replace(/^\/\/\s*/,"").replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function ot(e){const t=new Map;for(const[r,n]of e){const e=String(r),o=e.trim().toLowerCase(),s=t.get(o);s?s.values.push(String(n)):t.set(o,{name:e,values:[String(n)]})}const r=["$headers = ["];for(const{name:e,values:n}of t.values())1===n.length?r.push(` ${H(e)} => ${H(n[0])},`):r.push(` ${H(e)} => [`,...n.map(e=>` ${H(e)},`)," ],");return r.push("];"),r}function st(e){return e.replace(/^\/\/\s*/,"").replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function it(e){return e.replace(/^\/\/\s*/,"").replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function at(e){return e.replace(/^\/\/\s*/,"").replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function ut(e){return 0===e.length?"[]":["[",...e.map(([e,t])=>` (${j(String(e))}, ${j(String(t))}),`)," ]"].join("\n")}function lt(e){return e.replace(/^\/\/\s*/,"").replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function pt(e){return e.map(([e,t])=>` (${j(String(e))}, ${j(String(t))}),`)}function ct(e){return e.replace(/^\/\/\s*/,"").replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function dt(e){return e.map(([e,t])=>` (${j(String(e))}, ${j(String(t))}),`)}function ft(e){return e.replace(/^\/\/\s*/,"").replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function mt(e){return e.map(([e,t])=>` (${j(String(e))}, ${j(String(t))}),`)}function ht(e){return e.replace(/^\/\/\s*/,"").replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function gt(e){return e.map(([e,t])=>` (${j(String(e))}, ${j(String(t))}),`)}function yt(e){let t='"';for(const r of e){const e=r.codePointAt(0)??0;switch(r){case"\\":t+="\\\\";break;case'"':t+='\\"';break;case"\n":t+="\\n";break;case"\r":t+="\\r";break;case"\t":t+="\\t";break;default:t+=e<32||127===e||e>126?`\\u{${e.toString(16)}}`:r}}return`${t}"`}function $t(e){const t=e.replace(/\\/g,"\\\\").replace(/`/g,"\\`").replace(/\r/g,"\\r").replace(/\n/g,"\\n");return/^[A-Za-z.][A-Za-z0-9._]*$/.test(e)&&!/^\.[0-9]/.test(e)?e:`\`${t}\``}function St(e,t=2){const r=" ".repeat(t);return e.split("\n").map(e=>e?`${r}${e}`:e).join("\n")}function bt(e,t){const r=e.headers;if(!r)return t;const n=Array.isArray(r)?r:Object.entries(r);for(const[e,t]of n){if("content-type"!==String(e).toLowerCase())continue;const r=Array.isArray(t)?t[0]:t;if(null==r)continue;const n=String(r).trim();if(n)return n}return t}function vt(e){return e.replace(/^\/\/\s*/,"").replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function _t(e){return e.map(([e,t])=>` [${O(String(e))}, ${O(String(t))}],`)}function Tt(e){return e.replace(/^\/\/\s*/,"").replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function wt(e,t){return e.map(e=>e?`${t}${e}`:e)}function Rt(e){return e.replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function xt(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{return JSON.stringify(e)??""}catch{return String(e)}}function qt(e){return e.replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function Ct(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{return JSON.stringify(e)??""}catch{return String(e)}}function Et(e){return e.replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g," ").trim()}function Bt(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{return JSON.stringify(e)??""}catch{return String(e)}}var jt=[ae("c","libcurl",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=g(r),i=Boolean(n)&&o&&_(e),p=o&&(Boolean(n)||s),y=["/* Requires libcurl development headers and library. */","/* Build: cc example.c -o example $(pkg-config --cflags --libs libcurl) */","/* Proxy and TLS trust settings may be read from the environment. */"],S=t.headers.filter(([e])=>{const t=String(e);return(!p||!d(t)&&!f(t))&&((!i||!c(t))&&!(p&&!i&&n&&c(t)))}),T=[];for(const[e,t]of S)T.push(...qe("headers",`${String(e)}: ${String(t)}`));const w=[];let R=!1;if(i&&n)R=!0,z(n.value).forEach((e,t)=>{const r=String(e.name),n=`part${t}`;if(w.push(` curl_mimepart *${n} = curl_mime_addpart(mime);`,` if (!${n}) {`,' fprintf(stderr, "Failed to allocate multipart field\\n");'," exit_code = 1;"," goto cleanup;"," }",` if (curl_mime_name(${n}, ${Re(r)}) != CURLE_OK) {`,' fprintf(stderr, "Failed to set multipart field name\\n");'," exit_code = 1;"," goto cleanup;"," }"),e.file&&C(e.value)){const t=e.value,s=xe(t.path,a),i=xe(t.name,u),p=xe(t.contentType,l);"string"==typeof t.path&&0!==t.path.trim().length||y.push(`/* ${o=x(s,r),String(o).replace(/[\r\n\u2028\u2029]+/g," ").replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]+/g," ").replace(/\*\//g,"* /")} */`),w.push(` if (curl_mime_filedata(${n}, ${Re(s)}) != CURLE_OK ||`,` curl_mime_filename(${n}, ${Re(i)}) != CURLE_OK ||`,` curl_mime_type(${n}, ${Re(p)}) != CURLE_OK) {`,' fprintf(stderr, "Failed to configure multipart file\\n");'," exit_code = 1;"," goto cleanup;"," }")}else w.push(` if (curl_mime_data(${n}, ${Re(function(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{return JSON.stringify(e)??String(e)}catch{return String(e)}}(e.value))}, CURL_ZERO_TERMINATED) != CURLE_OK) {`,' fprintf(stderr, "Failed to configure multipart field\\n");'," exit_code = 1;"," goto cleanup;"," }");var o});else if(p){const t=Boolean(n)&&v(e),r=Boolean(n)&&b(e),o=n?t?he(n.value):V(e):"",s=t?"application/x-www-form-urlencoded":r?"application/json":"text/plain",i=n?$(e,s):s;w.push(...qe("headers",`Content-Type: ${i}`),` curl_easy_setopt(curl, CURLOPT_POSTFIELDS, ${Re(o)});`," curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE_LARGE, (curl_off_t)-1);")}return["#include <curl/curl.h>","#include <stdio.h>","",...y,"","int main(void) {"," int exit_code = 0;"," CURLcode result;"," long status = 0;"," struct curl_slist *headers = NULL;",...R?[" curl_mime *mime = NULL;"]:[],""," if (curl_global_init(CURL_GLOBAL_DEFAULT) != CURLE_OK) {",' fprintf(stderr, "Failed to initialize libcurl\\n");'," return 1;"," }",""," CURL *curl = curl_easy_init();"," if (!curl) {",' fprintf(stderr, "Failed to create libcurl handle\\n");'," curl_global_cleanup();"," return 1;"," }",...R?[""," mime = curl_mime_init(curl);"," if (!mime) {",' fprintf(stderr, "Failed to create multipart body\\n");'," exit_code = 1;"," goto cleanup;"," }"]:[],"",` curl_easy_setopt(curl, CURLOPT_URL, ${Re(t.url)});`,` curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, ${Re(r)});`," curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 30L);"," curl_easy_setopt(curl, CURLOPT_TIMEOUT, 30L);"," curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);"," curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L);"," curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, fwrite);"," curl_easy_setopt(curl, CURLOPT_WRITEDATA, stdout);","",...T,...T.length>0?[""]:[],...w,...w.length>0?[""]:[],...R?[" curl_easy_setopt(curl, CURLOPT_MIMEPOST, mime);"]:[]," if (headers) {"," curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);"," }",""," result = curl_easy_perform(curl);"," if (result != CURLE_OK) {",' fprintf(stderr, "Request failed: %s\\n", curl_easy_strerror(result));'," exit_code = 1;"," goto cleanup;"," }",""," if (curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &status) != CURLE_OK) {",' fprintf(stderr, "Failed to read HTTP status\\n");'," exit_code = 1;"," goto cleanup;"," }",""," if (status < 200 || status >= 300) {",' fprintf(stderr, "\\nHTTP request failed with status %ld\\n", status);'," exit_code = 1;"," }","","cleanup:",...R?[" curl_mime_free(mime);"]:[]," curl_slist_free_all(headers);"," curl_easy_cleanup(curl);"," curl_global_cleanup();"," return exit_code;","}"].join("\n")}),ae("csharp","httpclient",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n)&&o&&_(e),i=Boolean(n&&o)||!n&&g(r),p=[],y=[];let S=!1;if(n&&s)p.push(" var multipart = new MultipartFormDataContent();"),y.push(" multipart.Dispose();"),z(n.value).forEach((e,t)=>{const r=String(e.name);if(e.file&&C(e.value)){const n=e.value,o=Ce(n.path,a),s=Ce(n.name,u),i=Ce(n.contentType,l),c=`fileStream${t}`,d=`fileContent${t}`;"string"==typeof n.path&&0!==n.path.trim().length||p.push(` // ${Ee(x(o,r))}`),p.push(` var ${c} = File.OpenRead(${D(o)});`,` var ${d} = new StreamContent(${c});`,` ${d}.Headers.ContentType =`,` MediaTypeHeaderValue.Parse(${D(i)});`," multipart.Add(",` ${d},`,` ${D(r)},`,` ${D(s)}`," );")}else p.push(" multipart.Add(",` new StringContent(${D(function(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{const t=JSON.stringify(e);return void 0===t?String(e):t}catch{return String(e)}}(e.value))}),`,` ${D(r)}`," );")}),p.push(" message.Content = multipart;"),S=!0;else if(n&&o){const t=v(e),r=b(e),o=t?he(n.value):V(e),s=$(e,t?"application/x-www-form-urlencoded":r?"application/json":"text/plain");p.push(" message.Content = new StringContent(",` ${D(o)},`," Encoding.UTF8,",` ${D(s)}`," );"),S=!0}else!n&&g(r)&&(p.push(" message.Content = new ByteArrayContent(Array.Empty<byte>());"),S=!0);const T=t.headers.filter(([e])=>{const t=String(e);return!(i&&(d(t)||f(t)||S&&c(t)))}).flatMap(([e,t],r)=>{const n=String(e),o=String(t),s=`headerAdded${r}`;return[` var ${s} = message.Headers.TryAddWithoutValidation(`,` ${D(n)},`,` ${D(o)}`," );",...S?[` if (!${s})`," {",` ${s} = message.Content!.Headers.TryAddWithoutValidation(`,` ${D(n)},`,` ${D(o)}`," );"," }"]:[],` if (!${s})`," {",` Console.Error.WriteLine(${D(`Ignored invalid header: ${Ee(n)}`)});`," }"]});return["using System;","using System.IO;","using System.Net.Http;","using System.Net.Http.Headers;","using System.Text;","using System.Threading;","using System.Threading.Tasks;","","// Requires .NET 8 SDK or later.","// Create and run with: dotnet new console && dotnet run","// Standard HTTP proxy environment variables are honored.","internal static class Program","{"," private static async Task<int> Main()"," {"," using var client = new HttpClient"," {"," Timeout = TimeSpan.FromSeconds(30)"," };",""," using var message = new HttpRequestMessage(",` new HttpMethod(${D(r)}),`,` ${D(t.url)}`," );",""," using var cancellation ="," new CancellationTokenSource(TimeSpan.FromSeconds(30));",""," try"," {",...p,...p.length>0?[""]:[],...T,...T.length>0?[""]:[]," using var response = await client.SendAsync("," message,"," HttpCompletionOption.ResponseHeadersRead,"," cancellation.Token"," );"," var responseText ="," await response.Content.ReadAsStringAsync(cancellation.Token);",""," if (!response.IsSuccessStatusCode)"," {"," Console.Error.WriteLine(",' $"HTTP {(int)response.StatusCode} " +',' $"{response.ReasonPhrase}: {responseText}"'," );"," return 1;"," }",""," Console.Write(responseText);"," return 0;"," }"," catch (OperationCanceledException exception)"," {",' Console.Error.WriteLine($"Request timed out: {exception.Message}");'," return 1;"," }"," catch (Exception exception)"," {",' Console.Error.WriteLine($"Request failed: {exception.Message}");'," return 1;"," }",...y.length>0?[" finally"," {",...y," }"]:[]," }","}"].join("\n")}),ae("csharp","restsharp",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n)&&o&&_(e),i=Boolean(n&&o)||!n&&g(r),p=[];if(n&&s)z(n.value).forEach(e=>{const t=String(e.name);if(e.file&&C(e.value)){const n=e.value,o=Be(n.path,a),s=Be(n.name,u),i=Be(n.contentType,l);"string"==typeof n.path&&0!==n.path.trim().length||p.push(` // ${r=x(o,t),String(r).replace(/[\r\n\u2028\u2029]+/g," ").replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g,"")}`),p.push(" requestMessage.AddFile(",` ${D(t)},`,` ${D(o)},`,` ${D(i)},`,` ${D(s)}`," );")}else p.push(" requestMessage.AddParameter(",` ${D(t)},`,` ${D(function(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{const t=JSON.stringify(e);return void 0===t?String(e):t}catch{return String(e)}}(e.value))}`," );");var r});else if(n&&o){const t=v(e),r=b(e),o=t?he(n.value):V(e),s=$(e,t?"application/x-www-form-urlencoded":r?"application/json":"text/plain");p.push(" requestMessage.AddStringBody(",` ${D(o)},`,` ContentType.FromMediaType(${D(s)})`," );")}else!n&&g(r)&&p.push(" requestMessage.AddStringBody(",' "",'," ContentType.Binary"," );");const y=t.headers.filter(([e])=>{const t=String(e);return!(i&&(d(t)||f(t)||c(t)))}).map(([e,t])=>` requestMessage.AddHeader(${D(String(e))}, ${D(String(t))});`);return["using System;","using System.Threading;","using System.Threading.Tasks;","using RestSharp;","","// Requires .NET 8 and RestSharp 112.x.","// Add the dependency with: dotnet add package RestSharp","// Run with: dotnet run","internal static class Program","{"," private static async Task<int> Main()"," {"," var options = new RestClientOptions"," {",` BaseUrl = new Uri(${D(t.url)}),`," MaxTimeout = 30_000"," };",""," using var client = new RestClient(options);"," var requestMessage = new RestRequest(",' resource: "",',` method: new Method(${D(r)})`," );","",...y,...y.length>0?[""]:[],...p,...p.length>0?[""]:[]," using var cancellation ="," new CancellationTokenSource(TimeSpan.FromSeconds(30));",""," try"," {"," var response = await client.ExecuteAsync("," requestMessage,"," cancellation.Token"," );"," var responseText = response.Content ?? string.Empty;",""," if (!response.IsSuccessful)"," {"," Console.Error.WriteLine(",' $"HTTP {(int)response.StatusCode} " +',' $"{response.StatusDescription}: {responseText}"'," );"," return 1;"," }",""," Console.Write(responseText);"," return 0;"," }"," catch (OperationCanceledException exception)"," {",' Console.Error.WriteLine($"Request timed out: {exception.Message}");'," return 1;"," }"," catch (Exception exception)"," {",' Console.Error.WriteLine($"Request failed: {exception.Message}");'," return 1;"," }"," }","}"].join("\n")}),ae("clojure","clj-http",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o)||!n&&g(r);let i,a;if(n&&o){const t=v(e),r=b(e);i=t?he(n.value):V(e),a=$(e,t?"application/x-www-form-urlencoded":r?"application/json":"text/plain")}else!n&&g(r)&&(i="",a="application/octet-stream");const u=t.headers.filter(([e])=>{const t=String(e);return!(s&&(d(t)||f(t)||c(t)))}).map(([e,t])=>` ${W(String(e))} ${W(String(t))}`);return void 0!==a&&u.push(` "Content-Type" ${W(a)}`),[";; Requires Clojure 1.11+ and clj-http 3.13.0.",";; Run with clj-http on the classpath.","(require '[clj-http.client :as client])","","(let [response"," (try"," (client/request"," {:method",` (keyword ${W(r.toLowerCase())})`,` :url ${W(t.url)}`," :headers"," {",...u," }",...void 0!==i?[` :body ${W(i)}`]:[]," :socket-timeout 30000"," :connection-timeout 30000"," :throw-exceptions false"," :as :text})"," (catch Exception exception"," (binding [*out* *err*]",' (println "Request failed:" (.getMessage exception)))'," (System/exit 1)))]"," (if (<= 200 (:status response) 299)",' (print (or (:body response) ""))'," (do"," (binding [*out* *err*]",' (println (str "HTTP "'," (:status response)",' ": "',' (or (:body response) ""))))'," (System/exit 1))))"].join("\n")}),ae("dart","http",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o)||!n&&g(r);let i,a;if(n&&o){const t=v(e),r=b(e);i=t?he(n.value):V(e),a=$(e,t?"application/x-www-form-urlencoded":r?"application/json":"text/plain")}else!n&&g(r)&&(i="");const u=t.headers.filter(([e])=>{const t=String(e);return!(s&&(d(t)||f(t)||void 0!==a&&c(t)))}).map(([e,t])=>` request.headers.add(${B(String(e))}, ${B(String(t))});`);return void 0!==a&&u.push(` request.headers[${B("Content-Type")}] = ${B(a)};`),["import 'dart:async';","import 'dart:io';","","import 'package:http/http.dart' as http;","","// Requires Dart 3 and package:http.","// Add the dependency with: dart pub add http","// Run with: dart run","Future<void> main() async {"," final client = http.Client();",""," try {",` final request = http.Request(${B(r)}, Uri.parse(${B(t.url)}));`,...u.map(e=>` ${e}`),...void 0!==i?[` request.body = ${B(i)};`]:[],""," final streamedResponse = await client"," .send(request)"," .timeout(const Duration(seconds: 30));"," final responseText = await streamedResponse.stream"," .bytesToString()"," .timeout(const Duration(seconds: 30));",""," if (streamedResponse.statusCode < 200 ||"," streamedResponse.statusCode >= 300) {"," stderr.writeln("," 'HTTP ${streamedResponse.statusCode} '"," '${streamedResponse.reasonPhrase ?? ''}: $responseText',"," );"," exitCode = 1;"," return;"," }",""," stdout.write(responseText);"," } on TimeoutException catch (exception) {"," stderr.writeln('Request timed out: $exception');"," exitCode = 1;"," } on Object catch (exception, stackTrace) {"," stderr.writeln('Request failed: $exception');"," stderr.writeln(stackTrace);"," exitCode = 1;"," } finally {"," client.close();"," }","}"].join("\n")}),ae("fsharp","httpclient",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n)&&o&&_(e),i=Boolean(n&&o)||!n&&g(r),p=[],y=[];let S=[];if(n&&s)p.push(" use multipart = new MultipartFormDataContent()"),z(n.value).forEach((e,t)=>{const r=String(e.name);if(e.file&&C(e.value)){const n=e.value,o=je(n.path,a),s=je(n.name,u),i=je(n.contentType,l),c=`fileStream${t}`,d=`fileContent${t}`;"string"==typeof n.path&&0!==n.path.trim().length||p.push(` // ${Ue(x(o,r))}`),p.push(` let ${c} = File.OpenRead(${I(o)})`,` let ${d} = new StreamContent(${c})`,` ${d}.Headers.ContentType <-`,` MediaTypeHeaderValue.Parse(${I(i)})`," multipart.Add(",` ${d},`,` ${I(r)},`,` ${I(s)}`," )"),y.unshift(` ${d}.Dispose()`,` ${c}.Dispose()`)}else{const n=`fieldContent${t}`;p.push(` let ${n} =`,` new StringContent(${I(function(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{const t=JSON.stringify(e);return void 0===t?String(e):t}catch{return String(e)}}(e.value))})`,` multipart.Add(${n}, ${I(r)})`)}}),S=[" request.Content <- multipart"];else if(n&&o){const t=v(e),r=b(e),o=t?he(n.value):V(e),s=$(e,t?"application/x-www-form-urlencoded":r?"application/json":"text/plain");S=[" request.Content <-"," new StringContent(",` ${I(o)},`," Encoding.UTF8,",` ${I(s)}`," )"]}else!n&&g(r)&&(S=[" request.Content <- new ByteArrayContent(Array.empty<byte>)"]);const T=t.headers.filter(([e])=>{const t=String(e);return!(i&&(d(t)||f(t)||c(t)))}).flatMap(([e,t],r)=>{const n=String(e),o=String(t),s=`headerAdded${r}`;return[` let ${s} =`," if isNull request.Content then"," request.Headers.TryAddWithoutValidation(",` ${I(n)},`,` ${I(o)}`," )"," else"," request.Headers.TryAddWithoutValidation(",` ${I(n)},`,` ${I(o)}`," )"," || request.Content.Headers.TryAddWithoutValidation(",` ${I(n)},`,` ${I(o)}`," )",` if not ${s} then`,` eprintfn ${I(`Ignored invalid header: ${Ue(n)}`)}`]});return["open System","open System.IO","open System.Net.Http","open System.Net.Http.Headers","open System.Text","","// Requires .NET 8 SDK or later.","// Run with: dotnet run","// Standard HTTP proxy environment variables are honored.","[<EntryPoint>]","let main _ ="," use client = new HttpClient()"," client.Timeout <- TimeSpan.FromSeconds(30.0)",""," use request ="," new HttpRequestMessage(",` new HttpMethod(${I(r)}),`,` ${I(t.url)}`," )","",...p,...p.length>0?[""]:[],...S,...S.length>0?[""]:[],...T,...T.length>0?[""]:[]," try"," use response = client.Send(request)"," let responseText = response.Content.ReadAsStringAsync().Result",""," if not response.IsSuccessStatusCode then"," eprintfn",' "HTTP %d %s: %s"'," (int response.StatusCode)"," response.ReasonPhrase"," responseText"," 1"," else",' printfn "%s" responseText'," 0"," with exception ->",' eprintfn "Request failed: %s" exception.Message'," 1",...y.length>0?[" finally",...y]:[]].join("\n")}),ae("go","new-request",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n)&&o&&_(e),i=Boolean(n&&o)||!n&&g(r),p=new Set(['"context"','"fmt"','"io"','"net/http"','"os"','"time"']),y=[];let S,T="nil";if(n&&s)p.add('"bytes"'),p.add('"mime/multipart"'),p.add('"net/textproto"'),y.push(" var bodyBuffer bytes.Buffer"," multipartWriter := multipart.NewWriter(&bodyBuffer)"),z(n.value).forEach((e,t)=>{const r=String(e.name);if(e.file&&C(e.value)){const o=e.value,s=He(o.path,a),i=He(o.name,u),c=He(o.contentType,l),d=`uploadFile${t}`,f=`filePart${t}`,m=`fileHeader${t}`;"string"==typeof o.path&&0!==o.path.trim().length||y.push(` // ${n=x(s,r),String(n).replace(/[\r\n\u2028\u2029]+/g," ").replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g,"")}`),y.push(` ${d}, err := os.Open(${A(s)})`," if err != nil {",` fmt.Fprintf(os.Stderr, ${A(`open multipart file ${r}: %v\n`)}, err)`," os.Exit(1)"," }","",` ${m} := make(textproto.MIMEHeader)`,` ${m}.Set(`,' "Content-Disposition",'," mime.FormatMediaType(",' "form-data",'," map[string]string{",` "name": ${A(r)},`,` "filename": ${A(i)},`," },"," ),"," )",` ${m}.Set("Content-Type", ${A(c)})`,` ${f}, err := multipartWriter.CreatePart(${m})`," if err != nil {",` _ = ${d}.Close()`,` fmt.Fprintf(os.Stderr, ${A(`create multipart file part ${r}: %v\n`)}, err)`," os.Exit(1)"," }",` if _, err := io.Copy(${f}, ${d}); err != nil {`,` _ = ${d}.Close()`,` fmt.Fprintf(os.Stderr, ${A(`copy multipart file ${r}: %v\n`)}, err)`," os.Exit(1)"," }",` if err := ${d}.Close(); err != nil {`,` fmt.Fprintf(os.Stderr, ${A(`close multipart file ${r}: %v\n`)}, err)`," os.Exit(1)"," }"),p.add('"mime"')}else y.push(" if err := multipartWriter.WriteField(",` ${A(r)},`,` ${A(function(e){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);try{const t=JSON.stringify(e);return void 0===t?String(e):t}catch{return String(e)}}(e.value))},`," ); err != nil {",` fmt.Fprintf(os.Stderr, ${A(`write multipart field ${r}: %v\n`)}, err)`," os.Exit(1)"," }");var n}),y.push(" if err := multipartWriter.Close(); err != nil {",' fmt.Fprintf(os.Stderr, "close multipart writer: %v\\n", err)'," os.Exit(1)"," }"),T="&bodyBuffer",S="multipartWriter.FormDataContentType()";else if(n&&o){p.add('"strings"');const t=v(e),r=b(e),o=t?"application/x-www-form-urlencoded":r?"application/json":"text/plain";T=`strings.NewReader(${A(t?he(n.value):V(e))})`,S=A($(e,o))}else!n&&g(r)&&(p.add('"http"'),T="http.NoBody");const w=t.headers.filter(([e])=>{const t=String(e);return!i||!(d(t)||f(t)||c(t))}).map(([e,t])=>` req.Header.Add(${A(String(e))}, ${A(String(t))})`);return S&&w.push(` req.Header.Set("Content-Type", ${S})`),["package main","","// Requires Go 1.22 or later.","// Run with: go run .","// Standard HTTP proxy environment variables are honored.","import (",...[...p].sort().map(e=>` ${e}`),")","","func main() {"," ctx, cancel := context.WithTimeout("," context.Background(),"," 30*time.Second,"," )"," defer cancel()","",...y,...y.length>0?[""]:[]," req, err := http.NewRequestWithContext("," ctx,",` ${A(r)},`,` ${A(t.url)},`,` ${T},`," )"," if err != nil {",' fmt.Fprintf(os.Stderr, "create request: %v\\n", err)'," os.Exit(1)"," }",...w,""," client := &http.Client{"," Timeout: 30 * time.Second,"," }",""," resp, err := client.Do(req)"," if err != nil {",' fmt.Fprintf(os.Stderr, "perform request: %v\\n", err)'," os.Exit(1)"," }",""," responseBody, readErr := io.ReadAll(resp.Body)"," closeErr := resp.Body.Close()"," if readErr != nil {",' fmt.Fprintf(os.Stderr, "read response body: %v\\n", readErr)'," os.Exit(1)"," }"," if closeErr != nil {",' fmt.Fprintf(os.Stderr, "close response body: %v\\n", closeErr)'," os.Exit(1)"," }",""," if resp.StatusCode < http.StatusOK ||"," resp.StatusCode >= http.StatusMultipleChoices {",' fmt.Fprintf(os.Stderr, "HTTP %s: %s\\n",'," resp.Status,"," string(responseBody),"," )"," os.Exit(1)"," }",""," fmt.Println(string(responseBody))","}"].join("\n")}),ae("http","http1",function(e){const t=me(e),r=m(e.method),n=e.body,o=Boolean(n)&&h(r),s=t.headers.filter(([e])=>{const t=String(e);return!o||!d(t)&&!f(t)}),i=[`${Oe(r)} ${Oe(t.url)} HTTP/1.1`,...s.map(([e,t])=>`${Oe(e)}: ${Oe(t)}`)];if(o&&n){const t=v(e)?he(n.value):V(e);i.push("",t)}else i.push("");return i.join("\r\n")}),ae("java","asynchttp",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o&&_(e)),i=Boolean(n&&o),p=["Requires JDK 17+ and AsyncHttpClient 3.0.1.","Dependency: org.asynchttpclient:async-http-client:3.0.1","Compile: javac -cp 'lib/*' Example.java","Run: java -cp '.:lib/*' Example","Repeated request headers and multipart fields are added separately."],g=new Set(["import java.time.Duration;","import java.util.concurrent.TimeUnit;","import org.asynchttpclient.AsyncHttpClient;","import org.asynchttpclient.BoundRequestBuilder;","import org.asynchttpclient.DefaultAsyncHttpClientConfig;","import org.asynchttpclient.Response;","import static org.asynchttpclient.Dsl.asyncHttpClient;"]),S=[];if(n&&s){g.add("import java.io.File;"),g.add("import org.asynchttpclient.request.body.multipart.FilePart;"),g.add("import org.asynchttpclient.request.body.multipart.StringPart;");for(const e of z(n.value)){const t=String(e.name);if(e.file&&C(e.value)){const r=e.value,n=y(r.path),o=n??a,s=y(r.name)??u,i=y(r.contentType)??l;n||p.push(Pe(x(o,t)).replace(/^(?:\/\/|#)\s*/,"")),S.push(" builder.addBodyPart(new FilePart(",` ${F(t)},`,` new File(${F(o)}),`,` ${F(i)},`," null,",` ${F(s)}`," ));")}else S.push(" builder.addBodyPart(new StringPart(",` ${F(t)},`,` ${F(De(e.value))}`," ));")}}else if(n&&o){const t=v(e),r=b(e),o=t?he(n.value):V(e),s=$(e,t?"application/x-www-form-urlencoded":r?"application/json":"text/plain");S.push(` builder.setHeader("Content-Type", ${F(s)});`,` builder.setBody(${F(o)});`)}const T=t.headers.filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!i||!c(t))}).map(([e,t])=>` builder.addHeader(${F(String(e))}, ${F(String(t))});`);return[...p.map(e=>`// ${Pe(e)}`),"",[...g].sort().join("\n"),"","public final class Example {"," private Example() {}",""," public static void main(String[] args) throws Exception {"," DefaultAsyncHttpClientConfig config ="," new DefaultAsyncHttpClientConfig.Builder()"," .setConnectTimeout(Duration.ofSeconds(30))"," .setReadTimeout(Duration.ofSeconds(30))"," .setRequestTimeout(Duration.ofSeconds(30))"," .build();",""," try (AsyncHttpClient client = asyncHttpClient(config)) {"," BoundRequestBuilder builder = client.prepare(",` ${F(r)},`,` ${F(t.url)}`," );",...T,...T.length>0?[""]:[],...S,...S.length>0?[""]:[]," Response response = builder"," .execute()"," .get(30, TimeUnit.SECONDS);"," String responseBody = response.getResponseBody();",""," if (response.getStatusCode() < 200 ||"," response.getStatusCode() >= 300) {"," throw new IllegalStateException(",' "HTTP " + response.getStatusCode() + " "',' + response.getStatusText() + ": " + responseBody'," );"," }",""," System.out.println(responseBody);"," }"," }","}"].join("\n")}),ae("java","java-net-http",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o&&_(e)),i=Boolean(n&&o),p=["Requires JDK 17+; no external dependencies.","Compile: javac Example.java","Run: java Example","Repeated request headers and multipart fields are emitted separately."],g=new Set(["import java.net.URI;","import java.net.http.HttpClient;","import java.net.http.HttpRequest;","import java.net.http.HttpResponse;","import java.nio.charset.StandardCharsets;","import java.time.Duration;"]),S=[];let T,w="HttpRequest.BodyPublishers.noBody()";if(n&&s){g.add("import java.io.ByteArrayOutputStream;"),g.add("import java.nio.file.Files;"),g.add("import java.nio.file.Path;"),g.add("import java.util.UUID;"),S.push(' String boundary = "----JavaBoundary" + UUID.randomUUID();'," ByteArrayOutputStream multipartBody ="," new ByteArrayOutputStream();");let e=0;for(const t of z(n.value)){const r=Ne(String(t.name));if(S.push(" multipartBody.write(",' ("--" + boundary + "\\r\\n")'," .getBytes(StandardCharsets.UTF_8)"," );"),t.file&&C(t.value)){e+=1;const n=t.value,o=y(n.path),s=o??a,i=Ne(y(n.name)??u),c=(y(n.contentType)??l).replace(/[\r\n\u0000-\u001f\u007f\u2028\u2029]+/g,"").trim()||l,d=`filePath${e}`;o||p.push(Fe(x(s,String(t.name))).replace(/^(?:\/\/|#)\s*/,"")),S.push(` Path ${d} = Path.of(${F(s)});`," multipartBody.write(",` ${F(`Content-Disposition: form-data; name="${r}"; filename="${i}"\r\n`)}.getBytes(StandardCharsets.UTF_8)`," );"," multipartBody.write(",` ${F(`Content-Type: ${c}\r\n\r\n`)}.getBytes(StandardCharsets.UTF_8)`," );",` Files.copy(${d}, multipartBody);`," multipartBody.write(",' "\\r\\n".getBytes(StandardCharsets.UTF_8)'," );")}else S.push(" multipartBody.write(",` ${F(`Content-Disposition: form-data; name="${r}"\r\n\r\n`)}.getBytes(StandardCharsets.UTF_8)`," );"," multipartBody.write(",` ${F(Ae(t.value))}.getBytes(StandardCharsets.UTF_8)`," );"," multipartBody.write(",' "\\r\\n".getBytes(StandardCharsets.UTF_8)'," );")}S.push(" multipartBody.write(",' ("--" + boundary + "--\\r\\n")'," .getBytes(StandardCharsets.UTF_8)"," );"),w="HttpRequest.BodyPublishers.ofByteArray(multipartBody.toByteArray())",T='"multipart/form-data; boundary=" + boundary'}else if(n&&o){const t=v(e),r=b(e),o=t?"application/x-www-form-urlencoded":r?"application/json":"text/plain";w=["HttpRequest.BodyPublishers.ofString(",`${F(t?he(n.value):V(e))}, StandardCharsets.UTF_8`,")"].join(""),T=F($(e,o))}const R=t.headers.filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!i||!c(t))}).map(([e,t])=>` .header(${F(String(e))}, ${F(String(t))})`);return void 0!==T&&R.push(` .header("Content-Type", ${T})`),[...p.map(e=>`// ${Fe(e)}`),"",[...g].sort().join("\n"),"","public final class Example {"," private Example() {}",""," public static void main(String[] args) throws Exception {"," HttpClient client = HttpClient.newBuilder()"," .connectTimeout(Duration.ofSeconds(30))"," .followRedirects(HttpClient.Redirect.NORMAL)"," .build();","",...S,...S.length>0?[""]:[]," HttpRequest httpRequest = HttpRequest.newBuilder()",` .uri(URI.create(${F(t.url)}))`," .timeout(Duration.ofSeconds(30))",...R,` .method(${F(r)}, ${w})`," .build();",""," HttpResponse<String> response = client.send("," httpRequest,"," HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8)"," );",""," String responseBody = response.body();"," if (response.statusCode() < 200 ||"," response.statusCode() >= 300) {"," throw new IllegalStateException(",' "HTTP " + response.statusCode() + ": " + responseBody'," );"," }",""," System.out.println(responseBody);"," }","}"].join("\n")}),ae("java","okhttp",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o&&_(e)),i=Boolean(n&&o||!n&&g(r)),p=["Requires JDK 17+ and OkHttp 4.12.0.","Dependency: com.squareup.okhttp3:okhttp:4.12.0","Compile: javac -cp 'lib/*' Example.java","Run: java -cp '.:lib/*' Example"],S=new Set(["import java.io.IOException;","import java.time.Duration;","import okhttp3.OkHttpClient;","import okhttp3.Request;","import okhttp3.RequestBody;","import okhttp3.Response;"]);let T;if(n&&s){S.add("import java.io.File;"),S.add("import okhttp3.MediaType;"),S.add("import okhttp3.MultipartBody;");const e=[];for(const t of z(n.value)){const r=String(t.name);if(t.file&&C(t.value)){const n=t.value,o=y(n.path),s=o??a,i=y(n.name)??u,c=y(n.contentType)??l;o||p.push(Le(x(s,r)).replace(/^(?:\/\/|#)\s*/,"")),e.push(" .addFormDataPart(",` ${F(r)},`,` ${F(i)},`," RequestBody.create(",` new File(${F(s)}),`,` MediaType.get(${F(c)})`," )"," )")}else e.push(" .addFormDataPart(",` ${F(r)},`,` ${F(ke(t.value))}`," )")}T=[" RequestBody body = new MultipartBody.Builder()"," .setType(MultipartBody.FORM)",...e," .build();"].join("\n")}else if(n&&o){S.add("import okhttp3.MediaType;");const t=v(e),r=b(e),o=t?he(n.value):V(e),s=$(e,t?"application/x-www-form-urlencoded":r?"application/json":"text/plain");T=[" RequestBody body = RequestBody.create(",` ${F(o)},`,` MediaType.get(${F(s)})`," );"].join("\n")}else T=!n&&g(r)?[" RequestBody body = RequestBody.create("," new byte[0],"," null"," );"].join("\n"):" RequestBody body = null;";const w=t.headers.filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!i||!c(t))}).map(([e,t])=>` .addHeader(${F(String(e))}, ${F(String(t))})`);return[...p.map(e=>`// ${Le(e)}`),"",[...S].sort().join("\n"),"","public final class Example {"," private Example() {}",""," public static void main(String[] args) {"," OkHttpClient client = new OkHttpClient.Builder()"," .connectTimeout(Duration.ofSeconds(30))"," .readTimeout(Duration.ofSeconds(30))"," .writeTimeout(Duration.ofSeconds(30))"," .callTimeout(Duration.ofSeconds(30))"," .build();","",T,""," Request httpRequest = new Request.Builder()",` .url(${F(t.url)})`,...w,` .method(${F(r)}, body)`," .build();",""," try (Response response ="," client.newCall(httpRequest).execute()) {"," String responseText = response.body() == null",' ? ""'," : response.body().string();",""," if (!response.isSuccessful()) {"," throw new IOException(",' "HTTP " + response.code() + " " + response.message()',' + ": " + responseText'," );"," }",""," System.out.println(responseText);"," } catch (IOException exception) {"," exception.printStackTrace();"," System.exit(1);"," } finally {"," client.dispatcher().executorService().shutdown();"," client.connectionPool().evictAll();"," if (client.cache() != null) {"," try {"," client.cache().close();"," } catch (IOException exception) {"," exception.printStackTrace();"," }"," }"," }"," }","}"].join("\n")}),ae("java","unirest",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n)&&o&&_(e),i=Boolean(n&&o)||!n&&g(r),u=new Set(["import kong.unirest.HttpRequest;","import kong.unirest.HttpResponse;","import kong.unirest.Unirest;"]),l=["// Requires JDK 17+ and com.konghq:unirest-java:3.14.5.","// Compile and run with the Unirest dependency and its transitive dependencies on the classpath.","// Proxy and TLS behavior can be configured through Unirest.config() when required."],p=t.headers.filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))}),y=e=>e.map(([e,t])=>` .header(${F(String(e))}, ${F(String(t))})`);let S;if(n&&s){u.add("import java.io.File;");const e=z(n.value).map(e=>{const t=String(e.name);if(e.file&&C(e.value)){const o=e.value,s=(r=o.path,n=a,"string"==typeof r&&r.trim().length>0?r:n);return"string"==typeof o.path&&0!==o.path.trim().length||l.push(`// ${function(e){return e.replace(/[\r\n\u2028\u2029]+/g," ").replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g,"")}(x(s,t))}`),[" .field(",` ${F(t)},`,` new File(${F(s)})`," )"].join("\n")}var r,n;return[" .field(",` ${F(t)},`,` ${F(Me(e.value))}`," )"].join("\n")}),o=[` Unirest.request(${F(r)}, ${F(t.url)})`,...y(p),...e];o[o.length-1]=`${o[o.length-1]};`,S=[" HttpRequest<?> httpRequest =",...o]}else if(n&&o){const o=v(e),s=b(e),i=o?he(n.value):V(e),a=$(e,o?"application/x-www-form-urlencoded":s?"application/json":"text/plain"),u=p.filter(([e])=>!c(String(e)));S=[" HttpRequest<?> httpRequest =",` Unirest.request(${F(r)}, ${F(t.url)})`,...y(u),` .header("Content-Type", ${F(a)})`,` .body(${F(i)});`]}else if(!n&&g(r)){const e=p.filter(([e])=>!c(String(e)));S=[" HttpRequest<?> httpRequest =",` Unirest.request(${F(r)}, ${F(t.url)})`,...y(e),' .header("Content-Type", "application/octet-stream")',' .body("");']}else{const e=[` Unirest.request(${F(r)}, ${F(t.url)})`,...y(p)];e[e.length-1]=`${e[e.length-1]};`,S=[" HttpRequest<?> httpRequest =",...e]}return[[...u].sort().join("\n"),"",...l,"public final class Example {"," private Example() {}",""," public static void main(String[] args) {"," int exitCode = 0;",""," try {"," Unirest.config()"," .connectTimeout(30_000)"," .requestTimeout(30_000);","",...S.map(e=>` ${e}`),""," HttpResponse<String> response = httpRequest.asString();"," String responseText = response.getBody() == null",' ? ""'," : response.getBody();",""," if (!response.isSuccess()) {"," System.err.println(",' "HTTP " + response.getStatus() + " "',' + response.getStatusText() + ": " + responseText'," );"," exitCode = 1;"," } else {"," System.out.println(responseText);"," }"," } catch (RuntimeException exception) {"," exception.printStackTrace();"," exitCode = 1;"," } finally {"," Unirest.shutDown();"," }",""," if (exitCode != 0) {"," System.exit(exitCode);"," }"," }","}"].join("\n")}),ae("javascript","axios",Ie),ae("javascript","fetch",We),ae("javascript","jquery",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o&&_(e)),i=Boolean(n&&o),a=n&&s?z(n.value):[],u=[],l=[];let p;if(s){l.push(" const formData = new FormData();");let e=0;for(const t of a){const r=String(t.name);if(t.file&&C(t.value)){e+=1;const t=`file${e}`;u.push(t),l.push(` formData.append(${B(r)}, ${t});`)}else l.push(` formData.append(${B(r)}, ${B(w(t.value))});`)}p="formData"}else n&&o&&(p=B(v(e)?he(n.value):V(e)));const g=G(t.headers,s).filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))}).map(([e,t])=>` headers.append(${B(String(e))}, ${B(String(t))});`);return["// Requires a modern browser with FormData, File, and Headers.","// Requires jQuery 3.7.1+.","// Install: npm install jquery@^3.7.1","// Browser and jQuery header handling may combine repeated header values.","// Multipart files must be supplied as File arguments; browser code cannot read local paths.","",`function sendRequest(${u.join(", ")}) {`,...l,...l.length>0?[""]:[]," const headers = new Headers();",...g,""," return $.ajax({",` url: ${B(t.url)},`,` method: ${B(r)},`," headers: Object.fromEntries(headers.entries()),"," timeout: 30_000,",...p?[` data: ${p},`]:[],...s?[" processData: false,"," contentType: false,"]:p?[" processData: false,"]:[],' dataType: "text",'," })"," .then(function (responseText, _textStatus, jqXHR) {"," if (jqXHR.status < 200 || jqXHR.status >= 300) {"," throw new Error("," `HTTP ${jqXHR.status} ${jqXHR.statusText}: ${responseText}`,"," );"," }",""," console.log(responseText);"," return responseText;"," })"," .catch(function (jqXHR) {",' if (jqXHR && typeof jqXHR.status === "number") {'," const responseText =",' typeof jqXHR.responseText === "string"'," ? jqXHR.responseText",' : "";'," const statusText =",' typeof jqXHR.statusText === "string"'," ? jqXHR.statusText",' : "";',""," throw new Error("," `HTTP ${jqXHR.status} ${statusText}: ${responseText}`,"," );"," }",""," throw jqXHR;"," });","}"].join("\n")}),ae("javascript","ofetch",ze),ae("javascript","xhr",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o&&_(e)),i=Boolean(n&&o),a=n&&s?z(n.value):[],u=[],l=[];let p="null";if(s){l.push(" const formData = new FormData();");let e=0;for(const t of a){const r=String(t.name);if(t.file&&C(t.value)){e+=1;const t=`file${e}`;u.push(`${t}: File`),l.push(` formData.append(${B(r)}, ${t});`)}else l.push(` formData.append(${B(r)}, ${B(w(t.value))});`)}p="formData"}else n&&o&&(p=B(v(e)?he(n.value):V(e)));const g=G(t.headers,s).filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))});return["// Requires a modern browser with XMLHttpRequest, FormData, and File.","// Requires TypeScript 5.2+.","// Compile: npx tsc main.ts --target ES2022 --module ES2022 --lib ES2022,DOM --strict","// Browsers may combine repeated request headers set through XMLHttpRequest.","// Multipart files must be supplied as File arguments; browsers cannot read local paths.","",0===u.length?"export function sendRequest(): Promise<string> {":["export function sendRequest(",...u.map((e,t)=>` ${e}${t<u.length-1?",":""}`),"): Promise<string> {"].join("\n")," return new Promise((resolve, reject) => {",...l,...l.length>0?[""]:[]," const xhr = new XMLHttpRequest();",` xhr.open(${B(r)}, ${B(t.url)}, true);`," xhr.timeout = 30_000;",' xhr.responseType = "text";',"",...g.map(([e,t])=>` xhr.setRequestHeader(${B(String(e))}, ${B(String(t))});`),...g.length>0?[""]:[]," xhr.onload = () => {"," if (xhr.status >= 200 && xhr.status < 300) {"," resolve(xhr.responseText);"," return;"," }",""," reject("," new Error("," `HTTP ${xhr.status} ${xhr.statusText}: ${xhr.responseText}`,"," ),"," );"," };",""," xhr.onerror = () => {",' reject(new Error("Network request failed"));'," };",""," xhr.ontimeout = () => {",' reject(new Error("Request timed out after 30 seconds"));'," };",""," xhr.onabort = () => {",' reject(new Error("Request aborted"));'," };","",` xhr.send(${p});`," });","}"].join("\n")}),ae("kotlin","okhttp",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o&&_(e)),i=Boolean(n&&o||!n&&g(r)),p=["Requires JDK 17+, Kotlin 1.9+, and OkHttp 4.12.0.","Dependency: com.squareup.okhttp3:okhttp:4.12.0","Compile: kotlinc Main.kt -cp okhttp-4.12.0.jar:okio-jvm-3.6.0.jar -include-runtime -d main.jar","Run: java -cp main.jar:okhttp-4.12.0.jar:okio-jvm-3.6.0.jar MainKt","OkHttp addHeader() preserves repeated request-header values."],S=new Set(["import java.time.Duration","import okhttp3.OkHttpClient","import okhttp3.Request","import okhttp3.RequestBody"]);let T;if(n&&s){S.add("import java.io.File"),S.add("import okhttp3.MediaType.Companion.toMediaType"),S.add("import okhttp3.MultipartBody"),S.add("import okhttp3.RequestBody.Companion.asRequestBody");const e=[];for(const t of z(n.value)){const r=String(t.name);if(t.file&&C(t.value)){const n=t.value,o=y(n.path),s=o??a,i=y(n.name)??u,c=y(n.contentType)??l;o||p.push(Je(x(s,r)).replace(/^(?:\/\/|#)\s*/,"")),e.push(" .addFormDataPart(",` ${F(r)},`,` ${F(i)},`,` File(${F(s)}).asRequestBody(`,` ${F(c)}.toMediaType()`," )"," )")}else e.push(" .addFormDataPart(",` ${F(r)},`,` ${F(Ve(t.value))}`," )")}T=[" val body: RequestBody = MultipartBody.Builder()"," .setType(MultipartBody.FORM)",...e," .build()"].join("\n")}else if(n&&o){S.add("import okhttp3.MediaType.Companion.toMediaType"),S.add("import okhttp3.RequestBody.Companion.toRequestBody");const t=v(e),r=b(e),o=t?he(n.value):V(e),s=$(e,t?"application/x-www-form-urlencoded":r?"application/json":"text/plain");T=[" val body: RequestBody =",` ${F(o)}.toRequestBody(`,` ${F(s)}.toMediaType()`," )"].join("\n")}else g(r)?(S.add("import okhttp3.RequestBody.Companion.toRequestBody"),T=[" val body: RequestBody =",` ${F("")}.toRequestBody(null)`].join("\n")):T=" val body: RequestBody? = null";const w=t.headers.filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!i||!c(t))}).map(([e,t])=>` .addHeader(${F(String(e))}, ${F(String(t))})`);return[[...S].sort().join("\n"),"",...p.map(e=>`// ${Je(e)}`),"","fun main() {"," val client = OkHttpClient.Builder()"," .connectTimeout(Duration.ofSeconds(30))"," .readTimeout(Duration.ofSeconds(30))"," .writeTimeout(Duration.ofSeconds(30))"," .callTimeout(Duration.ofSeconds(30))"," .build()","",T,""," val httpRequest = Request.Builder()",` .url(${F(t.url)})`,...w,` .method(${F(r)}, body)`," .build()",""," try {"," client.newCall(httpRequest).execute().use { response ->"," val responseText = response.body?.string().orEmpty()",""," if (!response.isSuccessful) {"," throw IllegalStateException(",' "HTTP ${response.code} ${response.message}: $responseText"'," )"," }",""," println(responseText)"," }"," } finally {"," client.dispatcher.executorService.shutdown()"," client.connectionPool.evictAll()"," client.cache?.close()"," }","}"].join("\n")}),ae("node","axios",function(e){return Ie(e)}),ae("node","fetch",function(e){return`import fetch from "node-fetch";\n\n${We(e)}`}),ae("node","ofetch",function(e){return ze(e)}),ae("node","undici",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o&&_(e)),i=Boolean(n&&o),p=new Set(['import { fetch, Headers } from "undici";']),g=["Requires Node.js 20+, TypeScript 5.2+, and undici 6.x.","Install: npm install undici@^6","Install development tools: npm install --save-dev typescript@^5.2 @types/node","Run: npx tsc request.ts --target ES2022 --module NodeNext --moduleResolution NodeNext && node request.js","Fetch Headers may combine duplicate header values according to Fetch semantics."],$=[];let S;if(n&&o&&s){p.add('import { Blob } from "node:buffer";'),p.add('import { readFile } from "node:fs/promises";'),p.delete('import { fetch, Headers } from "undici";'),p.add('import { fetch, FormData, Headers } from "undici";'),$.push(" const formData = new FormData();");let e=0;for(const t of z(n.value)){const r=String(t.name);if(t.file&&C(t.value)){const n=t.value,o=y(n.path),s=o??a,i=y(n.name)??u,p=y(n.contentType)??l;if(void 0===o){const e=x(s,r).replace(/^\/\/\s*/,"");g.push(Xe(e))}e+=1;const c=`fileData${e}`;$.push(` const ${c} = await readFile(${B(s)});`," formData.append(",` ${B(r)},`,` new Blob([${c}], { type: ${B(p)} }),`,` ${B(i)},`," );")}else $.push(" formData.append(",` ${B(r)},`,` ${B(Ge(t.value))},`," );")}S="formData"}else if(n&&o){S=B(v(e)?he(n.value):V(e))}const b=t.headers.filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))}).map(([e,t])=>` headers.append(${B(String(e))}, ${B(String(t))});`);return[...g.map(e=>`// ${Xe(e)}`),"",[...p].sort().join("\n"),"","async function main(): Promise<void> {",...$,...$.length>0?[""]:[]," const headers = new Headers();",...b,"",` const response = await fetch(${B(t.url)}, {`,` method: ${B(r)},`," headers,",...void 0===S?[]:[` body: ${S},`]," signal: AbortSignal.timeout(30_000),"," });",""," const responseText = await response.text();",""," if (!response.ok) {"," throw new Error("," `HTTP ${response.status} ${response.statusText}: ${responseText}`,"," );"," }",""," console.log(responseText);","}","","main().catch((error: unknown) => {"," const message ="," error instanceof Error ? error.message : String(error);"," console.error(`Request failed: ${message}`);"," process.exitCode = 1;","});"].join("\n")}),ae("objc","nsurlsession",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o&&_(e)),i=Boolean(n&&o),p=["Requires Apple Clang with Objective-C ARC and Foundation on macOS 12+.","Compile: clang -fobjc-arc -framework Foundation main.m -o request","NSURLRequest stores headers as a dictionary; duplicate names are combined with commas."],g=t.headers.filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))}),$=[],S=new Map;for(const[e,t]of g){const r=String(e),n=String(t),o=r.toLowerCase(),s=S.get(o);void 0===s?(S.set(o,$.length),$.push([r,[n]])):$[s][1].push(n)}const b=[];if(n&&o&&s){b.push(' NSString *boundary = [NSString stringWithFormat:@"Boundary-%@", NSUUID.UUID.UUIDString];'," NSMutableData *bodyData = [NSMutableData data];");for(const[e,t]of z(n.value).entries()){const r=String(t.name);if(t.file&&C(t.value)){const n=t.value,o=y(n.path),s=o??a,i=y(n.name)??u,c=y(n.contentType)??l;void 0===o&&p.push(Ke(x(s,r))),b.push(' AppendUTF8(bodyData, [NSString stringWithFormat:@"--%@\\r\\n", boundary]);'," AppendUTF8(bodyData, [NSString stringWithFormat:",' @"Content-Disposition: form-data; name=\\"%@\\"; filename=\\"%@\\"\\r\\n",',` QuoteMultipartValue(${L(r)}),`,` QuoteMultipartValue(${L(i)})]);`," AppendUTF8(bodyData, [NSString stringWithFormat:",' @"Content-Type: %@\\r\\n\\r\\n",',` SafeMediaType(${L(c)})]);`,` NSURL *fileURL${e} = [NSURL fileURLWithPath:${L(s)}];`,` NSError *fileError${e} = nil;`,` NSData *fileData${e} = [NSData dataWithContentsOfURL:fileURL${e}`," options:NSDataReadingMappedIfSafe",` error:&fileError${e}];`,` if (fileData${e} == nil) {`,' fprintf(stderr, "Failed to read multipart file: %s\\n",',` fileError${e}.localizedDescription.UTF8String ?: "unknown error");`," return EXIT_FAILURE;"," }",` [bodyData appendData:fileData${e}];`,' AppendUTF8(bodyData, @"\\r\\n");')}else b.push(' AppendUTF8(bodyData, [NSString stringWithFormat:@"--%@\\r\\n", boundary]);'," AppendUTF8(bodyData, [NSString stringWithFormat:",' @"Content-Disposition: form-data; name=\\"%@\\"\\r\\n\\r\\n",',` QuoteMultipartValue(${L(r)})]);`,` AppendUTF8(bodyData, ${L(Ze(t.value))});`,' AppendUTF8(bodyData, @"\\r\\n");')}b.push(' AppendUTF8(bodyData, [NSString stringWithFormat:@"--%@--\\r\\n", boundary]);'," urlRequest.HTTPBody = bodyData;"," [urlRequest setValue:",' [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]',' forHTTPHeaderField:@"Content-Type"];')}else if(n&&o){const t=v(e)?he(n.value):V(e);b.push(` NSData *requestBody = [${L(t)}`," dataUsingEncoding:NSUTF8StringEncoding];"," if (requestBody == nil) {",' fprintf(stderr, "Failed to encode request body as UTF-8\\n");'," return EXIT_FAILURE;"," }"," urlRequest.HTTPBody = requestBody;")}return[...p.map(e=>`/* ${Ke(e)} */`),"","@import Foundation;","#include <stdio.h>","#include <stdlib.h>","","static void AppendUTF8(NSMutableData *data, NSString *value) {"," NSData *encoded = [value dataUsingEncoding:NSUTF8StringEncoding];"," if (encoded != nil) {"," [data appendData:encoded];"," }","}","","static NSString *QuoteMultipartValue(NSString *value) {"," NSMutableString *result = [NSMutableString stringWithCapacity:value.length];",""," for (NSUInteger index = 0; index < value.length; index++) {"," unichar character = [value characterAtIndex:index];",""," switch (character) {"," case '\\r':"," case '\\n':",' [result appendString:@" "];'," break;"," case '\"':",' [result appendString:@"\\\\\\""];'," break;"," case '\\\\':",' [result appendString:@"\\\\\\\\"];'," break;"," default:"," if (character < 0x20 || character == 0x7F) {",' [result appendString:@" "];'," } else {",' [result appendFormat:@"%C", character];'," }"," break;"," }"," }",""," return result;","}","","static NSString *SafeMediaType(NSString *value) {"," NSMutableString *result = [NSMutableString stringWithCapacity:value.length];",""," for (NSUInteger index = 0; index < value.length; index++) {"," unichar character = [value characterAtIndex:index];"," if (character >= 0x21 && character <= 0x7E) {",' [result appendFormat:@"%C", character];'," }"," }",""," NSString *trimmed = [result stringByTrimmingCharactersInSet:"," NSCharacterSet.whitespaceAndNewlineCharacterSet];",' return trimmed.length > 0 ? trimmed : @"application/octet-stream";',"}","","int main(void) {"," @autoreleasepool {",` NSString *urlString = ${L(t.url)};`," NSURL *url = [NSURL URLWithString:urlString];"," if (url == nil) {",' fprintf(stderr, "Invalid URL: %s\\n", urlString.UTF8String);'," return EXIT_FAILURE;"," }",""," NSMutableURLRequest *urlRequest ="," [NSMutableURLRequest requestWithURL:url];",` urlRequest.HTTPMethod = ${L(r)};`," urlRequest.timeoutInterval = 30.0;",...$.map(([e,t])=>` [urlRequest setValue:${L(t.join(", "))} forHTTPHeaderField:${L(e)}];`),...b,""," NSURLSessionConfiguration *configuration ="," [NSURLSessionConfiguration ephemeralSessionConfiguration];"," configuration.timeoutIntervalForRequest = 30.0;"," configuration.timeoutIntervalForResource = 30.0;",""," NSURLSession *session ="," [NSURLSession sessionWithConfiguration:configuration];"," dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);"," __block int exitCode = EXIT_FAILURE;",""," NSURLSessionDataTask *task = [session"," dataTaskWithRequest:urlRequest"," completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {"," @autoreleasepool {"," if (error != nil) {",' fprintf(stderr, "Request failed: %s\\n",',' error.localizedDescription.UTF8String ?: "unknown error");'," dispatch_semaphore_signal(semaphore);"," return;"," }",""," if (![response isKindOfClass:NSHTTPURLResponse.class]) {",' fprintf(stderr, "The server returned a non-HTTP response\\n");'," dispatch_semaphore_signal(semaphore);"," return;"," }",""," NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;"," NSString *responseText = [[NSString alloc]"," initWithData:(data ?: [NSData data])"," encoding:NSUTF8StringEncoding];"," if (responseText == nil) {"," responseText = [[NSString alloc]"," initWithData:(data ?: [NSData data])",' encoding:NSISOLatin1StringEncoding] ?: @"";'," }",""," if (httpResponse.statusCode < 200 ||"," httpResponse.statusCode >= 300) {",' fprintf(stderr, "HTTP status %ld: %s\\n",'," (long)httpResponse.statusCode,",' responseText.UTF8String ?: "");'," dispatch_semaphore_signal(semaphore);"," return;"," }","",' printf("%s\\n", responseText.UTF8String ?: "");'," exitCode = EXIT_SUCCESS;"," dispatch_semaphore_signal(semaphore);"," }"," }];",""," [task resume];"," dispatch_time_t deadline = dispatch_time("," DISPATCH_TIME_NOW,"," (int64_t)(30.0 * NSEC_PER_SEC)"," );"," if (dispatch_semaphore_wait(semaphore, deadline) != 0) {"," [task cancel];",' fprintf(stderr, "Request timed out after 30 seconds\\n");'," exitCode = EXIT_FAILURE;"," }",""," [session finishTasksAndInvalidate];"," return exitCode;"," }","}"].join("\n")}),ae("ocaml","cohttp",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o&&_(e)),i=Boolean(n&&o),p=["Requires OCaml 5.1+, cohttp-lwt-unix 6.x, lwt 5.x, and uri 4.x.","Install: opam install cohttp-lwt-unix lwt uri","Compile: ocamlfind ocamlopt -thread -linkpkg -package cohttp-lwt-unix,lwt.unix,uri main.ml -o request","Cohttp Header.add preserves repeated header fields."],g=t.headers.filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))}),$=[];if(n&&o&&s){const e=z(n.value);$.push(" let boundary =",' "Boundary-" ^ Uuidm.to_string (Uuidm.v `V4)'," in"," let buffer = Buffer.create 4096 in");for(const[t,r]of e.entries()){const e=String(r.name);if(r.file&&C(r.value)){const n=r.value,o=y(n.path),s=o??a,i=y(n.name)??u,c=y(n.contentType)??l;void 0===o&&p.push(Qe(x(s,e))),$.push(' Buffer.add_string buffer ("--" ^ boundary ^ "\\r\\n");'," Buffer.add_string buffer",' ("Content-Disposition: form-data; name=\\"" ^',` quote_multipart_value ${M(e)} ^`,' "\\"; filename=\\"" ^',` quote_multipart_value ${M(i)} ^`,' "\\"\\r\\n");'," Buffer.add_string buffer",' ("Content-Type: " ^',` safe_media_type ${M(c)} ^`,' "\\r\\n\\r\\n");',` let file_content_${t} =`,` read_file ${M(s)}`," in",` Buffer.add_string buffer file_content_${t};`,' Buffer.add_string buffer "\\r\\n";')}else $.push(' Buffer.add_string buffer ("--" ^ boundary ^ "\\r\\n");'," Buffer.add_string buffer",' ("Content-Disposition: form-data; name=\\"" ^',` quote_multipart_value ${M(e)} ^`,' "\\"\\r\\n\\r\\n");',` Buffer.add_string buffer ${M(Ye(r.value))};`,' Buffer.add_string buffer "\\r\\n";')}$.push(' Buffer.add_string buffer ("--" ^ boundary ^ "--\\r\\n");'," let request_body = Cohttp_lwt.Body.of_string (Buffer.contents buffer) in"," let headers =",' Header.add headers "Content-Type"',' ("multipart/form-data; boundary=" ^ boundary)'," in")}else if(n&&o){const t=v(e)?he(n.value):V(e);$.push(" let request_body =",` Cohttp_lwt.Body.of_string ${M(t)}`," in")}else $.push(" let request_body = Cohttp_lwt.Body.empty in");return[...p.map(e=>`(* ${Qe(e)} *)`),"","open Lwt.Infix","","exception Http_error of int * string","","let read_file path ="," let channel = open_in_bin path in"," Fun.protect"," ~finally:(fun () -> close_in_noerr channel)"," (fun () ->"," let length = in_channel_length channel in"," really_input_string channel length)","","let quote_multipart_value value ="," let buffer = Buffer.create (String.length value) in"," String.iter"," (function"," | '\\r' | '\\n' -> Buffer.add_char buffer ' '",' | \'"\' -> Buffer.add_string buffer "\\\\\\""'," | '\\\\' -> Buffer.add_string buffer \"\\\\\\\\\""," | character ->"," if Char.code character < 32 || Char.code character = 127 then"," Buffer.add_char buffer ' '"," else"," Buffer.add_char buffer character)"," value;"," Buffer.contents buffer","","let safe_media_type value ="," let buffer = Buffer.create (String.length value) in"," String.iter"," (fun character ->"," let code = Char.code character in"," if code >= 33 && code <= 126 then"," Buffer.add_char buffer character)"," value;"," let result = String.trim (Buffer.contents buffer) in",' if result = "" then "application/octet-stream" else result',"","let method_of_string value ="," match String.uppercase_ascii value with",' | "GET" -> `GET',' | "HEAD" -> `HEAD',' | "POST" -> `POST',' | "PUT" -> `PUT',' | "DELETE" -> `DELETE',' | "PATCH" -> `PATCH',' | "OPTIONS" -> `OPTIONS',' | "CONNECT" -> `CONNECT',' | "TRACE" -> `TRACE'," | other -> `Other other","","let add_headers headers values ="," List.fold_left"," (fun result (name, value) ->"," Cohttp.Header.add result name value)"," headers"," values","","let run () =",` let uri = Uri.of_string ${M(t.url)} in`,` let http_method = method_of_string ${M(r)} in`," let headers ="," add_headers (Cohttp.Header.init ())"," [",...g.map(([e,t])=>` (${M(String(e))}, ${M(String(t))});`)," ]"," in",...$," let request ="," Cohttp_lwt_unix.Client.call"," ~headers"," ~body:request_body"," http_method"," uri"," in"," Lwt_unix.with_timeout 30.0 (fun () -> request)"," >>= fun (response, response_body) ->"," Cohttp_lwt.Body.to_string response_body"," >>= fun response_text ->"," let status ="," Cohttp.Response.status response"," in"," let status_code = Cohttp.Code.code_of_status status in"," if status_code < 200 || status_code > 299 then"," Lwt.fail (Http_error (status_code, response_text))"," else"," Lwt_io.print response_text","","let report_error error ="," let message ="," match error with"," | Http_error (status, response_body) ->"," Printf.sprintf",' "HTTP status %d: %s"'," status"," response_body"," | Lwt_unix.Timeout ->",' "Request timed out after 30 seconds"'," | other -> Printexc.to_string other"," in",' Lwt_io.eprintlf "Request failed: %s" message',"","let () ="," match Lwt_main.run (Lwt.catch run report_error) with"," | () -> ()"," | exception error ->",' prerr_endline ("Request failed: " ^ Printexc.to_string error);'," exit 1"].join("\n")}),ae("php","curl",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n)&&o&&_(e),i=Boolean(n&&o),p=[],g=[];let $;if(n&&s){const e=[];let t=0;for(const r of z(n.value)){const n=String(r.name);if(r.file&&C(r.value)){const o=r.value,s=y(o.path)??a,i=y(o.name)??u,c=y(o.contentType)??l,d="$file"+ ++t;y(o.path)||p.push(et(x(s,n))),g.push(`${d} = new CURLFile(`,` ${H(s)},`,` ${H(c)},`,` ${H(i)}`,");"),e.push(` ${H(n)} => ${d},`)}else e.push(` ${H(n)} => ${H(null==r.value?"":"string"==typeof r.value?r.value:JSON.stringify(r.value))},`)}g.push("$postFields = [",...e,"];"),$="$postFields"}else n&&o&&($=H(v(e)?he(n.value):V(e)));const S=t.headers.filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))});return["<?php","","declare(strict_types=1);","",...p.map(e=>`// ${e}`),...p.length>0?[""]:[],...g,...g.length>0?[""]:[],"$ch = curl_init();","","if ($ch === false) {"," throw new RuntimeException('Unable to initialize cURL');","}","","try {"," curl_setopt_array($ch, [",` CURLOPT_URL => ${H(t.url)},`,` CURLOPT_CUSTOMREQUEST => ${H(r)},`," CURLOPT_RETURNTRANSFER => true,"," CURLOPT_CONNECTTIMEOUT => 10,"," CURLOPT_TIMEOUT => 30,",...S.length>0?[" CURLOPT_HTTPHEADER => [",...S.map(([e,t])=>` ${H(`${String(e)}: ${String(t)}`)},`)," ],"]:[],...$?[` CURLOPT_POSTFIELDS => ${$},`]:[]," ]);",""," $responseBody = curl_exec($ch);",""," if ($responseBody === false) {"," throw new RuntimeException("," sprintf('cURL error %d: %s', curl_errno($ch), curl_error($ch))"," );"," }",""," $statusCode = (int) curl_getinfo($ch, CURLINFO_RESPONSE_CODE);",""," if ($statusCode < 200 || $statusCode >= 300) {"," throw new RuntimeException("," sprintf('HTTP %d: %s', $statusCode, $responseBody)"," );"," }",""," echo $responseBody;","} finally {"," curl_close($ch);","}"].join("\n")}),ae("php","guzzle",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n)&&o&&_(e),i=Boolean(n&&o),p=[],g=[],$=[];if(n&&s){let e=0;for(const t of z(n.value)){const r=String(t.name);if(t.file&&C(t.value)){const n=t.value,o=y(n.path)??a,s=y(n.name)??u,i=y(n.contentType)??l,c="$fileHandle"+ ++e;y(n.path)||p.push(tt(x(o,r))),g.push(c),$.push(" [",` 'name' => ${H(r)},`,` 'contents' => ${c},`,` 'filename' => ${H(s)},`," 'headers' => [",` 'Content-Type' => ${H(i)},`," ],"," ],")}else{const e=null==t.value?"":"string"==typeof t.value?t.value:JSON.stringify(t.value);$.push(" [",` 'name' => ${H(r)},`,` 'contents' => ${H(e)},`," ],")}}}const S=[...rt(t.headers.filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))}))," 'connect_timeout' => 10.0,"," 'timeout' => 30.0,"," 'http_errors' => false,"];return n&&o&&(s?S.push(" 'multipart' => [",...$," ],"):S.push(` 'body' => ${H(v(e)?he(n.value):V(e))},`)),["<?php","","declare(strict_types=1);","","require __DIR__ . '/vendor/autoload.php';","","use GuzzleHttp\\Client;","",...p.map(e=>`// ${e}`),...p.length>0?[""]:[],"$client = new Client();",...g.map((e,t)=>`${e} = fopen(${H(y(z(n?.value).filter(e=>e.file&&C(e.value))[t]?.value?.path)??a)}, 'rb');`),...g.length>0?[""]:[],...g.flatMap(e=>[`if (${e} === false) {`," throw new RuntimeException('Unable to open multipart file');","}"]),...g.length>0?[""]:[],"try {",` $response = $client->request(${H(r)}, ${H(t.url)}, [`,...S," ]);",""," $responseBody = (string) $response->getBody();"," $statusCode = $response->getStatusCode();",""," if ($statusCode < 200 || $statusCode >= 300) {"," throw new RuntimeException("," sprintf('HTTP %d: %s', $statusCode, $responseBody)"," );"," }",""," echo $responseBody;","} finally {",...g.map(e=>` if (is_resource(${e})) { fclose(${e}); }`),"}"].join("\n")}),ae("php","laravel-http",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n)&&o&&_(e),i=Boolean(n&&o),p=[],g=[],$=[],S=[],b=[];if(n&&s){let e=0;for(const t of z(n.value)){const r=String(t.name);if(t.file&&C(t.value)){const n=t.value,o=y(n.path)??a,s=y(n.name)??u,i=y(n.contentType)??l,c="$fileHandle"+ ++e;y(n.path)||p.push(nt(x(o,r))),b.push(c),g.push(`${c} = fopen(${H(o)}, 'rb');`,`if (${c} === false) {`,` throw new RuntimeException(${H(`Unable to open multipart file: ${o}`)});`,"}"),$.push(` ->attach(${H(r)}, ${c}, ${H(s)}, ['Content-Type' => ${H(i)}])`)}else{const e=null==t.value?"":"string"==typeof t.value?t.value:JSON.stringify(t.value);S.push(` ${H(r)} => ${H(e)},`)}}}const T=t.headers.filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))});let w;if(n&&o)if(s)w=` ->${r.toLowerCase()}(${H(t.url)}, $fields);`;else{const o=y(n.mediaType)??"application/octet-stream";w=[` ->withBody(${H(v(e)?he(n.value):V(e))}, ${H(o)})`,` ->send(${H(r)}, ${H(t.url)});`].join("\n")}else w=` ->send(${H(r)}, ${H(t.url)});`;return["<?php","","declare(strict_types=1);","","use Illuminate\\Support\\Facades\\Http;","",...p.map(e=>`// ${e}`),...p.length>0?[""]:[],...ot(T),...s?["","$fields = [",...S,"];"]:[],...g.length>0?["",...g]:[],"","try {"," $response = Http::withHeaders($headers)"," ->connectTimeout(10)"," ->timeout(30)",...$,w,""," if (!$response->successful()) {"," throw new RuntimeException("," sprintf('HTTP %d: %s', $response->status(), $response->body())"," );"," }",""," echo $response->body();","} finally {",...b.map(e=>` if (is_resource(${e})) { fclose(${e}); }`),"}"].join("\n")}),ae("powershell","invoke-restmethod",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n)&&o&&_(e),i=Boolean(n&&o),u=[],l=[];if(n&&s){l.push("$form = [ordered]@{}");for(const e of z(n.value)){const t=String(e.name);if(e.file&&C(e.value)){const r=e.value,n=y(r.path)??a;y(r.path)||u.push(st(x(n,t))),l.push(`$form[${P(t)}] = Get-Item -LiteralPath ${P(n)} -ErrorAction Stop`)}else l.push(`$form[${P(t)}] = ${P(w(e.value))}`)}}const p=t.headers.filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))}),g=p.find(([e])=>c(String(e))),$=p.filter(([e])=>!c(String(e))),S=new Map;for(const[e,t]of $){const r=String(e),n=r.trim().toLowerCase(),o=S.get(n);o?o.values.push(String(t)):S.set(n,{name:r,values:[String(t)]})}const b=[...S.values()].map(({name:e,values:t})=>`$headers[${P(e)}] = ${P(t.join(", "))}`),T=n&&o?s?["$parameters['Form'] = $form"]:[`$parameters['Body'] = ${P(v(e)?he(n.value):V(e))}`]:[];return["# Requires PowerShell 7.4 or later.","# Multipart uploads require Invoke-RestMethod -Form support.","# Repeated request-header values are combined with commas.","# Multipart file name and media-type overrides are not supported by -Form.","",...u.map(e=>`# ${e}`),...u.length>0?[""]:[],"$headers = @{}",...b,"","$parameters = @{",` Method = ${P(r)}`,` Uri = ${P(t.url)}`," Headers = $headers"," TimeoutSec = 30"," ErrorAction = 'Stop'",...g&&!s?[` ContentType = ${P(String(g[1]))}`]:[],"}",...l.length>0?["",...l]:[],...T.length>0?["",...T]:[],"","try {"," $response = Invoke-RestMethod @parameters",""," if ($null -ne $response) {"," $response | ConvertTo-Json -Depth 100"," }","} catch {"," $statusCode = $null"," $responseBody = $null",""," if ($null -ne $_.Exception.Response) {"," $statusCode = [int]$_.Exception.Response.StatusCode"," }",""," if ($null -ne $_.ErrorDetails -and $_.ErrorDetails.Message) {"," $responseBody = $_.ErrorDetails.Message"," }",""," if ($null -ne $statusCode) {",' $message = "HTTP ${statusCode}: ${responseBody}"'," } else {"," $message = $_.Exception.Message"," }",""," throw [System.Net.Http.HttpRequestException]::new("," $message,"," $_.Exception"," )","}"].join("\n")}),ae("powershell","invoke-webrequest",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n)&&o&&_(e),i=Boolean(n&&o),u=[],l=[];if(n&&s){l.push("$form = [ordered]@{}");for(const e of z(n.value)){const t=String(e.name);if(e.file&&C(e.value)){const r=e.value,n=y(r.path)??a;y(r.path)||u.push(it(x(n,t))),l.push(`$form[${P(t)}] = Get-Item -LiteralPath ${P(n)} -ErrorAction Stop`)}else l.push(`$form[${P(t)}] = ${P(w(e.value))}`)}}const p=t.headers.filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))}),g=p.find(([e])=>c(String(e))),$=p.filter(([e])=>!c(String(e))),S=new Map;for(const[e,t]of $){const r=String(e),n=r.trim().toLowerCase(),o=S.get(n);o?o.values.push(String(t)):S.set(n,{name:r,values:[String(t)]})}const b=[...S.values()].map(({name:e,values:t})=>`$headers[${P(e)}] = ${P(t.join(", "))}`),T=n&&o?s?["$parameters['Form'] = $form"]:[`$parameters['Body'] = ${P(v(e)?he(n.value):V(e))}`]:[];return["# Requires PowerShell 7.4 or later.","# Multipart uploads require Invoke-WebRequest -Form support.","# Repeated request-header values are combined with commas.","",...u.map(e=>`# ${e}`),...u.length>0?[""]:[],"$headers = @{}",...b,"","$parameters = @{",` Method = ${P(r)}`,` Uri = ${P(t.url)}`," Headers = $headers"," TimeoutSec = 30"," ErrorAction = 'Stop'",...g&&!s?[` ContentType = ${P(String(g[1]))}`]:[],"}",...l.length>0?["",...l]:[],...T.length>0?["",...T]:[],"","try {"," $response = Invoke-WebRequest @parameters"," $response.Content","} catch {"," $statusCode = $null"," $responseBody = $null",""," if ($null -ne $_.Exception.Response) {"," $statusCode = [int]$_.Exception.Response.StatusCode"," }",""," if ($null -ne $_.ErrorDetails -and $_.ErrorDetails.Message) {"," $responseBody = $_.ErrorDetails.Message"," }",""," if ($null -ne $statusCode) {",' $message = "HTTP ${statusCode}: ${responseBody}"'," } else {"," $message = $_.Exception.Message"," }",""," throw [System.Net.Http.HttpRequestException]::new("," $message,"," $_.Exception"," )","}"].join("\n")}),ae("python","aiohttp",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o),i=Boolean(n&&o&&_(e)),p=[],g=[];let $;const S=t.headers.filter(([e])=>{const t=String(e);return(!s||!d(t)&&!f(t))&&(!i||!c(t))});if(n&&o)if(i){g.push(" form_data = aiohttp.FormData(quote_fields=True)");for(const e of z(n.value)){const t=String(e.name);if(e.file&&C(e.value)){const r=e.value,n=y(r.path)??a,o=y(r.name)??u,s=y(r.contentType)??l;y(r.path)||p.push(at(x(n,t))),g.push(` file_handle = stack.enter_context(open(${j(n)}, "rb"))`,[" form_data.add_field(",` ${j(t)},`," file_handle,",` filename=${j(o)},`,` content_type=${j(s)},`," )"].join("\n"))}else g.push([" form_data.add_field(",` ${j(t)},`,` ${j(w(e.value))},`," )"].join("\n"))}$="data=form_data,"}else $=b(e)?`data=${j(V(e))},`:v(e)?`data=${j(he(n.value))},`:`data=${j(V(e))},`;return["# Requires Python 3.10 or later.","# Requires aiohttp 3.9 or later: python -m pip install 'aiohttp>=3.9'","# Repeated request headers are preserved in their original order.",...p.map(e=>`# ${e}`),"","import asyncio","from contextlib import ExitStack","","import aiohttp","","","async def main() -> None:"," headers = aiohttp.CIMultiDict(",` ${ut(S.map(([e,t])=>[String(e),String(t)]))}`," )",""," timeout = aiohttp.ClientTimeout(total=30)",""," with ExitStack() as stack:",...g,...g.length>0?[""]:[]," try:"," async with aiohttp.ClientSession("," headers=headers,"," timeout=timeout,"," ) as session:"," async with session.request(",` ${j(r)},`,` ${j(t.url)},`,...$?[` ${$}`]:[]," ) as response:"," response_body = await response.text(errors='replace')",""," if not 200 <= response.status < 300:"," raise RuntimeError(",' f"HTTP {response.status}: {response_body}"'," )",""," print(response_body)"," except (aiohttp.ClientError, asyncio.TimeoutError) as error:",' raise RuntimeError(f"HTTP request failed: {error}") from error',"","",'if __name__ == "__main__":'," asyncio.run(main())"].join("\n")}),ae("python","http-client",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o),i=Boolean(n&&o&&_(e)),p=[],g=[],$=t.headers.filter(([e])=>{const t=String(e);return(!s||!d(t)&&!f(t))&&(!i||!c(t))});if(n&&i)for(const e of z(n.value)){const t=String(e.name);if(e.file&&C(e.value)){const r=e.value,n=y(r.path)??a,o=y(r.name)??u,s=y(r.contentType)??l;y(r.path)||p.push(lt(x(n,t))),g.push(" parts.append("," (",` ${j(t)},`,` ${j(o)},`,` ${j(s)},`,` Path(${j(n)}).read_bytes(),`," )"," )")}else g.push(" parts.append("," (",` ${j(t)},`," None,"," None,",` ${j(w(e.value))}.encode("utf-8"),`," )"," )")}let S;S=n&&o?i?[' boundary = f"----http-client-{secrets.token_hex(24)}"'," parts: list[tuple[str, str | None, str | None, bytes]] = []",...g," request_body = encode_multipart(parts, boundary)",' request_headers.append(("Content-Type", f"multipart/form-data; boundary={boundary}"))']:b(e)?[` request_body = ${j(V(e))}.encode("utf-8")`]:v(e)?[` request_body = ${j(he(n.value))}.encode("utf-8")`]:[` request_body = ${j(V(e))}.encode("utf-8")`]:[" request_body = None"];const T=i?["","","def quote_disposition(value: str) -> str:",' return value.replace("\\\\", "\\\\\\\\").replace(\'"\', \'\\\\"\')',"","","def encode_multipart("," parts: list[tuple[str, str | None, str | None, bytes]],"," boundary: str,",") -> bytes:"," output = bytearray()"," boundary_bytes = boundary.encode('ascii')",""," for field_name, file_name, content_type, value in parts:"," output.extend(b'--' + boundary_bytes + b'\\r\\n')",""," disposition = ("," 'Content-Disposition: form-data; name=\"'"," + quote_disposition(field_name)"," + '\"'"," )",""," if file_name is not None:"," disposition += ("," '; filename=\"'"," + quote_disposition(file_name)"," + '\"'"," )",""," output.extend(disposition.encode('utf-8'))"," output.extend(b'\\r\\n')",""," if content_type is not None:"," output.extend("," f'Content-Type: {content_type}\\r\\n'.encode('utf-8')"," )",""," output.extend(b'\\r\\n')"," output.extend(value)"," output.extend(b'\\r\\n')",""," output.extend(b'--' + boundary_bytes + b'--\\r\\n')"," return bytes(output)"]:[];return["# Requires Python 3.10 or later.","# Uses only the Python standard library; no installation is required.","# Repeated request headers are preserved in their original order.",...p.map(e=>`# ${e}`),"","import http.client","import secrets","import urllib.parse","from pathlib import Path",...T,"","","def main() -> None:",` parsed = urllib.parse.urlsplit(${j(t.url)})`,""," if parsed.scheme not in {'http', 'https'}:"," raise ValueError("," f\"Unsupported URL scheme: {parsed.scheme or 'missing'}\""," )",""," if parsed.hostname is None:",' raise ValueError("The request URL must include a hostname")',""," path = urllib.parse.urlunsplit("," ('', '', parsed.path or '/', parsed.query, '')"," )",""," request_headers: list[tuple[str, str]] = [",...pt($.map(([e,t])=>[String(e),String(t)]))," ]",...S,""," connection_class = ("," http.client.HTTPSConnection"," if parsed.scheme == 'https'"," else http.client.HTTPConnection"," )",""," connection = connection_class("," parsed.hostname,"," parsed.port,"," timeout=30,"," )",""," try:",` connection.putrequest(${j(r)}, path)`,""," for name, value in request_headers:"," connection.putheader(name, value)",""," if request_body is not None:"," connection.putheader('Content-Length', str(len(request_body)))",""," connection.endheaders(request_body)"," response = connection.getresponse()",""," try:"," response_body = response.read()"," charset = response.headers.get_content_charset() or 'utf-8'"," response_text = response_body.decode("," charset,"," errors='replace',"," )",""," if not 200 <= response.status < 300:"," raise RuntimeError(",' f"HTTP {response.status} {response.reason}: "'," f'{response_text}'"," )",""," print(response_text)"," finally:"," response.close()"," except (OSError, http.client.HTTPException) as error:",' raise RuntimeError(f"HTTP request failed: {error}") from error'," finally:"," connection.close()","","","if __name__ == '__main__':"," main()"].join("\n")}),ae("python","httpx-async",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o),i=Boolean(n&&o&&_(e)),p=[],g=[],$=[],S=t.headers.filter(([e])=>{const t=String(e);return(!s||!d(t)&&!f(t))&&(!i||!c(t))});if(n&&o)if(i){g.push(" data: list[tuple[str, str]] = []"," files: list[tuple[str, tuple[str, BinaryIO, str]]] = []");for(const e of z(n.value)){const t=String(e.name);if(e.file&&C(e.value)){const r=e.value,n=y(r.path)??a,o=y(r.name)??u,s=y(r.contentType)??l;y(r.path)||p.push(ct(x(n,t))),g.push(` file_handle = stack.enter_context(open(${j(n)}, "rb"))`," files.append("," (",` ${j(t)},`," (",` ${j(o)},`," file_handle,",` ${j(s)},`," ),"," )"," )")}else g.push(` data.append((${j(t)}, ${j(w(e.value))}))`)}$.push(" data=data,"),$.push(" files=files,")}else v(e)?$.push(` content=${j(he(n.value))},`):$.push(` content=${j(V(e))},`);return["# Requires Python 3.10 or later.","# Requires HTTPX 0.27 or later: python -m pip install 'httpx>=0.27'","# Repeated request headers and multipart fields are preserved in order.",...p.map(e=>`# ${e}`),"","import asyncio","from contextlib import ExitStack","from typing import BinaryIO","","import httpx","","","async def main() -> None:"," headers = [",...dt(S.map(([e,t])=>[String(e),String(t)]))," ]",""," timeout = httpx.Timeout(30.0)",""," with ExitStack() as stack:",...g,...g.length>0?[""]:[]," try:"," async with httpx.AsyncClient(timeout=timeout) as client:"," response = await client.request(",` ${j(r)},`,` ${j(t.url)},`," headers=headers,",...$," )",""," if not 200 <= response.status_code < 300:"," raise RuntimeError(",' f"HTTP {response.status_code}: {response.text}"'," )",""," print(response.text)"," except httpx.HTTPError as error:",' raise RuntimeError(f"HTTP request failed: {error}") from error',"","",'if __name__ == "__main__":'," asyncio.run(main())"].join("\n")}),ae("python","httpx-sync",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o),i=Boolean(n&&o&&_(e)),p=[],g=[],$=[],S=t.headers.filter(([e])=>{const t=String(e);return(!s||!d(t)&&!f(t))&&(!i||!c(t))});if(n&&o)if(i){g.push(" data: list[tuple[str, str]] = []"," files: list[tuple[str, tuple[str, BinaryIO, str]]] = []");for(const e of z(n.value)){const t=String(e.name);if(e.file&&C(e.value)){const r=e.value,n=y(r.path)??a,o=y(r.name)??u,s=y(r.contentType)??l;y(r.path)||p.push(ft(x(n,t))),g.push(` file_handle = stack.enter_context(open(${j(n)}, "rb"))`," files.append("," (",` ${j(t)},`," (",` ${j(o)},`," file_handle,",` ${j(s)},`," ),"," )"," )")}else g.push(` data.append((${j(t)}, ${j(w(e.value))}))`)}$.push(" data=data,"),$.push(" files=files,")}else v(e)?$.push(` content=${j(he(n.value))},`):$.push(` content=${j(V(e))},`);return["# Requires Python 3.10 or later.","# Requires HTTPX 0.27 or later: python -m pip install 'httpx>=0.27'","# Repeated request headers and multipart fields are preserved in order.",...p.map(e=>`# ${e}`),"","from contextlib import ExitStack","from typing import BinaryIO","","import httpx","","","def main() -> None:"," headers: list[tuple[str, str]] = [",...mt(S.map(([e,t])=>[String(e),String(t)]))," ]",""," timeout = httpx.Timeout(30.0)",""," with ExitStack() as stack:",...g,...g.length>0?[""]:[]," try:"," with httpx.Client(timeout=timeout) as client:"," response = client.request(",` ${j(r)},`,` ${j(t.url)},`," headers=headers,",...$," )",""," if not 200 <= response.status_code < 300:"," raise RuntimeError(",' f"HTTP {response.status_code}: {response.text}"'," )",""," print(response.text)"," except httpx.HTTPError as error:",' raise RuntimeError(f"HTTP request failed: {error}") from error',"","",'if __name__ == "__main__":'," main()"].join("\n")}),ae("python","requests",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o),i=Boolean(n&&o&&_(e)),p=[],g=[],$=[],S=t.headers.filter(([e])=>{const t=String(e);return(!s||!d(t)&&!f(t))&&(!i||!c(t))});if(n&&o)if(i){g.push(" data: list[tuple[str, str]] = []",[" files: list["," tuple[str, tuple[str, BinaryIO, str]]"," ] = []"].join("\n"));for(const e of z(n.value)){const t=String(e.name);if(e.file&&C(e.value)){const r=e.value,n=y(r.path)??a,o=y(r.name)??u,s=y(r.contentType)??l;y(r.path)||p.push(ht(x(n,t))),g.push(` file_handle = stack.enter_context(open(${j(n)}, "rb"))`," files.append("," (",` ${j(t)},`," (",` ${j(o)},`," file_handle,",` ${j(s)},`," ),"," )"," )")}else g.push(` data.append((${j(t)}, ${j(w(e.value))}))`)}$.push(" data=data,"),$.push(" files=files,")}else v(e)?$.push(` data=${j(he(n.value))},`):$.push(` data=${j(V(e))},`);return["# Requires Python 3.10 or later.","# Requires Requests 2.31 or later:","# python -m pip install 'requests>=2.31'","# Requests cannot preserve duplicate request headers; values are","# combined with commas in their original order.","# Duplicate multipart fields and files are preserved.",...p.map(e=>`# ${e}`),"","from contextlib import ExitStack","from typing import BinaryIO","","import requests","","","def combine_headers("," values: list[tuple[str, str]],",") -> dict[str, str]:"," headers: dict[str, str] = {}"," canonical_names: dict[str, str] = {}",""," for name, value in values:"," normalized = name.lower()"," existing_name = canonical_names.get(normalized)",""," if existing_name is None:"," canonical_names[normalized] = name"," headers[name] = value"," else:"," headers[existing_name] = ("," f'{headers[existing_name]}, {value}'"," )",""," return headers","","","def main() -> None:"," header_items: list[tuple[str, str]] = [",...gt(S.map(([e,t])=>[String(e),String(t)]))," ]"," headers = combine_headers(header_items)",""," with ExitStack() as stack:",...g,...g.length>0?[""]:[]," try:"," with requests.Session() as session:"," response = session.request(",` method=${j(r)},`,` url=${j(t.url)},`," headers=headers,",...$," timeout=30,"," )",""," try:"," response_text = response.text",""," if not 200 <= response.status_code < 300:"," raise RuntimeError(",' f"HTTP {response.status_code}: "',' f"{response_text}"'," )",""," print(response_text)"," finally:"," response.close()"," except requests.RequestException as error:"," raise RuntimeError(",' f"HTTP request failed: {error}"'," ) from error","","",'if __name__ == "__main__":'," main()"].join("\n")}),ae("r","httr2",function(e){const t=me(e),r=e.body,n=Boolean(r)&&_(e),o=[],s=["library(httr2)","",`req <- request(${yt(t.url)}) |>`,` req_method(${yt(e.method.toUpperCase())})`],i=t.headers.filter(([e])=>!(n&&"content-type"===e.toLowerCase()));if(i.length>0){const e=i.map(([e,t])=>`${$t(String(e))} = ${yt(String(t))}`);s.push("","req <- req |> req_headers(",St(e.join(",\n")),")")}if(r)if(s.push(""),n){const e=z(r.value).map(e=>{const t=String(e.name);if(e.file&&C(e.value)){const r=e.value,n=r.path||"/tmp/file.bin";return r.path||o.push(`# TODO: replace ${yt(n)} with the real local file path for ${yt(t)}`),`${$t(t)} = upload_file(${yt(n)})`}return`${$t(t)} = ${yt(String(e.value??""))}`});e.length>0&&s.push("req <- req |> req_body_multipart(",St(e.join(",\n")),")")}else if(b(e)){const t=bt(e,"application/json");s.push(`json_body <- ${yt(V(e))}`,"req <- req |> req_body_raw("," json_body,",` type = ${yt(t)}`,")")}else{const t=v(e),n=t?he(r.value):V(e),o=bt(e,t?"application/x-www-form-urlencoded":"application/octet-stream");s.push("req <- req |> req_body_raw(",` ${yt(n)},`,` type = ${yt(o)}`,")")}return s.push("","response <- req |> req_perform()","resp_body_string(response)"),o.length>0?`${o.join("\n")}\n${s.join("\n")}`:s.join("\n")}),ae("ruby","net-http",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o),i=Boolean(n&&o&&_(e)),p=[],g=[],$=t.headers.filter(([e])=>{const t=String(e);return(!s||!d(t)&&!f(t))&&(!i||!c(t))});if(n&&i)for(const e of z(n.value)){const t=String(e.name);if(e.file&&C(e.value)){const r=e.value,n=y(r.path)??a,o=y(r.name)??u,s=y(r.contentType)??l;y(r.path)||p.push(vt(x(n,t))),g.push(" {",` name: ${O(t)},`,` path: ${O(n)},`,` filename: ${O(o)},`,` content_type: ${O(s)},`," },")}else g.push(" {",` name: ${O(t)},`,` value: ${O(w(e.value))},`," },")}let S=[];n&&o&&(S=i?["boundary = generate_boundary","request.body = encode_multipart("," multipart_entries,"," boundary,",")","request['Content-Type'] = (",' "multipart/form-data; boundary=#{boundary}"',")"]:v(e)?[`request.body = ${O(he(n.value))}`]:[`request.body = ${O(V(e))}`]);const b=i?["","def generate_boundary",' "----ruby-net-http-#{SecureRandom.hex(24)}"',"end","","def escape_disposition(value)"," value",' .gsub("\\\\", "\\\\\\\\")'," .gsub('\"', '\\\\\"')",' .gsub(/[\\r\\n]/, "")',"end","","def encode_multipart(entries, boundary)",' body = +"".b',""," entries.each do |entry|",' body << "--#{boundary}\\r\\n".b'," disposition = ("," 'Content-Disposition: form-data; name=\"' +"," escape_disposition(entry.fetch(:name)) +"," '\"'"," )",""," if entry.key?(:path)"," disposition << ("," '; filename=\"' +"," escape_disposition(entry.fetch(:filename)) +"," '\"'"," )"," end","",' body << "#{disposition}\\r\\n".b',""," if entry.key?(:content_type)"," content_type = entry.fetch(:content_type)",' body << "Content-Type: #{content_type}\\r\\n".b'," end","",' body << "\\r\\n".b',""," if entry.key?(:path)"," File.open(entry.fetch(:path), 'rb') do |file|"," IO.copy_stream(file, StringIO.new(body))"," end"," else"," body << entry.fetch(:value).encode("," Encoding::UTF_8,"," invalid: :replace,"," undef: :replace,"," )"," end","",' body << "\\r\\n".b'," end","",' body << "--#{boundary}--\\r\\n".b'," body","end"]:[];return["# Requires Ruby 3.1 or later.","# Uses only the Ruby standard library; no gem installation is required.","# Repeated request-header values are preserved in their original order.",...p.map(e=>`# ${e}`),"",'require "net/http"','require "uri"',...i?['require "securerandom"','require "stringio"']:[],...b,"","def main",` uri = URI.parse(${O(t.url)})`,""," unless %w[http https].include?(uri.scheme)"," raise ArgumentError, ("," \"unsupported URL scheme: #{uri.scheme || 'missing'}\""," )"," end","",' raise ArgumentError, "URL must include a host" unless uri.host',""," request = Net::HTTPGenericRequest.new(",` ${O(r)},`,` ${o?"true":"false"},`," true,"," uri.request_uri.empty? ? '/' : uri.request_uri,"," )",""," header_items = [",..._t($.map(([e,t])=>[String(e),String(t)]))," ]",""," header_items.each do |name, value|"," request.add_field(name, value)"," end",...i?[""," multipart_entries = [",...g.map(e=>` ${e}`)," ]"]:[],...S.length?["",...S.map(e=>` ${e}`)]:[],""," http = Net::HTTP.new(uri.host, uri.port)"," http.use_ssl = uri.scheme == 'https'"," http.open_timeout = 30"," http.read_timeout = 30"," http.write_timeout = 30",""," response = http.start do |connection|"," connection.request(request)"," end",""," unless response.is_a?(Net::HTTPSuccess)"," raise RuntimeError, (",' "HTTP #{response.code} #{response.message}: #{response.body}"'," )"," end",""," puts response.body","rescue URI::InvalidURIError,"," SocketError,"," SystemCallError,"," IOError,"," Timeout::Error,"," Net::HTTPBadResponse,"," Net::HTTPHeaderSyntaxError,"," Net::ProtocolError => error",' raise RuntimeError, "HTTP request failed: #{error.message}"',"end","","main if $PROGRAM_NAME == __FILE__"].join("\n")}),ae("rust","reqwest",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o),i=Boolean(n&&o&&_(e)),p=[],g=[];let $;const S=t.headers.filter(([e])=>{const t=String(e);return(!s||!d(t)&&!f(t))&&(!i||!c(t))});if(n&&o)if(i){g.push("let mut multipart_form = reqwest::blocking::multipart::Form::new();");for(const e of z(n.value)){const t=String(e.name);if(e.file&&C(e.value)){const r=e.value,n=y(r.path)??a,o=y(r.name)??u,s=y(r.contentType)??l;y(r.path)||p.push(Tt(x(n,t))),g.push("{",` let file = File::open(${N(n)})?;`," let part = reqwest::blocking::multipart::Part::reader(file)",` .file_name(${N(o)})`,` .mime_str(${N(s)})?;`," multipart_form = multipart_form.part(",` ${N(t)},`," part,"," );","}")}else g.push("multipart_form = multipart_form.text(",` ${N(t)},`,` ${N(w(e.value))}.to_owned(),`,");")}$=".multipart(multipart_form)"}else{const t=v(e)?he(n.value):V(e);g.push(`let request_body = ${N(t)}.to_owned();`),$=".body(request_body)"}const b=["let mut headers = HeaderMap::new();"];for(const[e,t]of S){const r=String(e),n=String(t);b.push("{",` let name = HeaderName::from_bytes(${N(r)}.as_bytes())?;`,` let value = HeaderValue::from_str(${N(n)})?;`," headers.append(name, value);","}")}return["// Requires Rust 1.74 or later.","// Requires reqwest 0.12 or later.","//","// Cargo.toml:",'// reqwest = { version = "0.12", features = ["blocking", "multipart"] }',"//","// Repeated request headers and multipart fields are preserved in order.",...p.map(e=>`// ${e}`),"","use reqwest::blocking::Client;","use reqwest::header::{HeaderMap, HeaderName, HeaderValue};","use reqwest::Method;",...i?["use std::fs::File;"]:[],"use std::error::Error;","use std::io;","use std::time::Duration;","","","fn main() -> Result<(), Box<dyn Error>> {"," let client = Client::builder()"," .connect_timeout(Duration::from_secs(30))"," .timeout(Duration::from_secs(30))"," .build()?;","",...wt(b," "),"",` let method = Method::from_bytes(${N(r)}.as_bytes())?;`,...g.length>0?["",...wt(g," ")]:[],""," let request = client",` .request(method, ${N(t.url)})`," .headers(headers)",...$?[` ${$}`]:[]," .build()?;",""," let response = client.execute(request)?;"," let status = response.status();"," let response_body = response.text()?;",""," if !status.is_success() {"," return Err(io::Error::other(format!(",' "HTTP {}: {}",'," status,"," response_body,"," ))"," .into());"," }","",' println!("{}", response_body);'," Ok(())","}"].join("\n")}),ae("shell","curl",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o&&_(e)),i=Boolean(n&&o),p=["# Requires curl 7.76.0+.","# Install: https://curl.se/download.html","# Repeated headers and multipart fields are emitted separately.","# --connect-timeout limits connection setup; --max-time limits the whole transfer."],g=t.headers.filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))}),$=["curl --fail-with-body --show-error --silent"," --connect-timeout 30"," --max-time 30",` --request ${U(r)}`,` --url ${U(t.url)}`];for(const[e,t]of g)$.push(` --header ${U(`${String(e)}: ${String(t)}`)}`);if(n&&o&&s)for(const e of z(n.value)){const t=String(e.name);if(e.file&&C(e.value)){const r=e.value,n=y(r.path),o=n??a,s=y(r.name)??u,i=y(r.contentType)??l;void 0===n&&p.push(`# ${Rt(x(o,t))}`),$.push(` --form ${U(`${t}=@${o};filename=${s};type=${i}`)}`)}else $.push(` --form-string ${U(`${t}=${xt(e.value)}`)}`)}else if(n&&o){const t=v(e)?he(n.value):V(e);$.push(` --data-binary ${U(t)}`)}const S=$.map((e,t)=>t<$.length-1?`${e} \\`:e).join("\n");return[...p,S].join("\n")}),ae("shell","httpie",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o&&_(e)),i=Boolean(n&&o&&v(e)),p=Boolean(n&&o),g=["Requires HTTPie 3.2+.","Install: python3 -m pip install 'httpie>=3.2,<4'","HTTPie preserves repeated header arguments and repeated form fields."],$=t.headers.filter(([e])=>{const t=String(e);return(!p||!d(t)&&!f(t))&&(!s&&!i||!c(t))}),S=["http","--check-status","--timeout=30"];(s||i)&&S.push("--form"),S.push(U(r),U(t.url));for(const[e,t]of $)S.push(U(`${String(e)}:${String(t)}`));if(n&&o&&s)for(const e of z(n.value)){const t=String(e.name);if(e.file&&C(e.value)){const r=e.value,n=y(r.path),o=n??a,s=y(r.name)??u,i=y(r.contentType)??l;void 0===n&&g.push(qt(x(o,t))),S.push(U(`${t}@${o};type=${i};filename=${s}`))}else S.push(U(`${t}=${Ct(e.value)}`))}else if(n&&o&&i)for(const e of z(n.value))S.push(U(`${String(e.name)}=${Ct(e.value)}`));else if(n&&o){const t=[`printf '%s' ${U(V(e))}`,"|",S.join(" ")].join(" ");return[...g.map(e=>`# ${qt(e)}`),t].join("\n")}const b=S.map((e,t)=>0===t?e:` ${e}`).join(" \\\n");return[...g.map(e=>`# ${qt(e)}`),b].join("\n")}),ae("shell","wget",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o);if(s&&_(e))throw new Error("GNU Wget cannot safely construct multipart/form-data requests; use curl or HTTPie instead");const i=t.headers.filter(([e])=>{const t=String(e);return!s||!d(t)&&!f(t)}),a=["wget",` --method=${U(r)}`," --timeout=30"," --tries=1"," --server-response"," --content-on-error"," --output-document=-"];for(const[e,t]of i)a.push(` --header=${U(`${String(e)}: ${String(t)}`)}`);if(n&&o){const t=v(e)?he(n.value):V(e);a.push(` --body-data=${U(t)}`)}return a.push(` ${U(t.url)}`),`${["# Requires GNU Wget 1.20+.","# Install (Debian/Ubuntu): sudo apt-get install wget","# --timeout=30 applies separately to DNS, connection, and read operations;","# GNU Wget does not provide a strict 30-second total-transfer timeout.","# --tries=1 disables retries after the initial request.","# Response bodies, including HTTP error bodies, are written to standard output.","# GNU Wget reports HTTP failures through its process exit status.","# Repeated request headers are emitted as separate --header options."].join("\n")}\n${a.join(" \\\n")}`}),ae("swift","nsurlsession",function(e){const t=me(e),r=m(e.method),n=e.body,o=h(r),s=Boolean(n&&o&&_(e)),i=Boolean(n&&o),p=["// Requires Swift 5.7+ on macOS 12+ or Linux with FoundationNetworking.","// Compile on macOS: swiftc main.swift -o request","// Compile on Linux: swiftc main.swift -o request","// URLSession cannot preserve duplicate request headers reliably;","// duplicate names are safely combined with commas."],g=t.headers.filter(([e])=>{const t=String(e);return(!i||!d(t)&&!f(t))&&(!s||!c(t))}),$=[],S=new Map;for(const[e,t]of g){const r=String(e),n=String(t),o=r.toLowerCase(),s=S.get(o);void 0===s?(S.set(o,$.length),$.push([r,[n]])):$[s][1].push(n)}const b=[];if(n&&o&&s){b.push("var bodyData = Data()","","func appendUtf8(_ value: String, to data: inout Data) throws {"," guard let encoded = value.data(using: .utf8) else {"," throw RequestError.utf8Encoding"," }"," data.append(encoded)","}","");for(const[e,t]of z(n.value).entries()){const r=String(t.name);if(t.file&&C(t.value)){const n=t.value,o=y(n.path),s=o??a,i=y(n.name)??u,c=y(n.contentType)??l;void 0===o&&p.push(`// ${Et(x(s,r))}`),b.push('try appendUtf8("--\\(boundary)\\r\\n", to: &bodyData)',`try appendUtf8("Content-Disposition: form-data; name=\\"\\(quotedMultipartValue(${k(r)}))\\"; filename=\\"\\(quotedMultipartValue(${k(i)}))\\"\\r\\n", to: &bodyData)`,`try appendUtf8("Content-Type: \\(safeMediaType(${k(c)}))\\r\\n\\r\\n", to: &bodyData)`,`let fileURL${e} = URL(fileURLWithPath: ${k(s)})`,`bodyData.append(try Data(contentsOf: fileURL${e}, options: [.mappedIfSafe]))`,'try appendUtf8("\\r\\n", to: &bodyData)',"")}else b.push('try appendUtf8("--\\(boundary)\\r\\n", to: &bodyData)',`try appendUtf8("Content-Disposition: form-data; name=\\"\\(quotedMultipartValue(${k(r)}))\\"\\r\\n\\r\\n", to: &bodyData)`,`try appendUtf8(${k(Bt(t.value))}, to: &bodyData)`,'try appendUtf8("\\r\\n", to: &bodyData)',"")}b.push('try appendUtf8("--\\(boundary)--\\r\\n", to: &bodyData)',"urlRequest.httpBody = bodyData","urlRequest.setValue(",' "multipart/form-data; boundary=\\(boundary)",',' forHTTPHeaderField: "Content-Type"',")")}else if(n&&o){const t=v(e)?he(n.value):V(e);b.push(`guard let requestBody = ${k(t)}.data(using: .utf8) else {`," throw RequestError.utf8Encoding","}","urlRequest.httpBody = requestBody")}const T=s?["","func quotedMultipartValue(_ value: String) -> String {"," value",' .replacingOccurrences(of: "\\r", with: " ")',' .replacingOccurrences(of: "\\n", with: " ")',' .replacingOccurrences(of: "\\\\", with: "\\\\\\\\")',' .replacingOccurrences(of: "\\"", with: "\\\\\\"")',"}","","func safeMediaType(_ value: String) -> String {"," let sanitized = value",' .replacingOccurrences(of: "\\r", with: "")',' .replacingOccurrences(of: "\\n", with: "")'," .trimmingCharacters(in: .whitespacesAndNewlines)"," return sanitized.isEmpty",' ? "application/octet-stream"'," : sanitized","}"]:[];return[...p,"","import Foundation","#if canImport(FoundationNetworking)","import FoundationNetworking","#endif","","enum RequestError: Error, CustomStringConvertible {"," case invalidURL(String)"," case utf8Encoding"," case invalidResponse"," case httpStatus(Int, String)",""," var description: String {"," switch self {"," case .invalidURL(let value):",' return "Invalid URL: \\(value)"'," case .utf8Encoding:",' return "Failed to encode request data as UTF-8"'," case .invalidResponse:",' return "The server returned a non-HTTP response"'," case .httpStatus(let status, let body):",' return "HTTP status \\(status): \\(body)"'," }"," }","}",...T,"","@main","struct Main {"," static func main() async {"," do {"," try await run()"," } catch {"," FileHandle.standardError.write(",' Data("Request failed: \\(error)\\n".utf8)'," )"," Foundation.exit(EXIT_FAILURE)"," }"," }",""," static func run() async throws {",` let urlString = ${k(t.url)}`," guard let url = URL(string: urlString) else {"," throw RequestError.invalidURL(urlString)"," }",""," var urlRequest = URLRequest(url: url)",` urlRequest.httpMethod = ${k(r)}`," urlRequest.timeoutInterval = 30",...$.map(([e,t])=>` urlRequest.setValue(${k(t.join(", "))}, forHTTPHeaderField: ${k(e)})`),...s?[' let boundary = "Boundary-\\(UUID().uuidString)"',...b.map(e=>e?` ${e}`:"")]:b.map(e=>e?` ${e}`:""),""," let configuration = URLSessionConfiguration.ephemeral"," configuration.timeoutIntervalForRequest = 30"," configuration.timeoutIntervalForResource = 30"," let session = URLSession(configuration: configuration)"," defer {"," session.invalidateAndCancel()"," }",""," let (data, response) = try await session.data(for: urlRequest)"," guard let httpResponse = response as? HTTPURLResponse else {"," throw RequestError.invalidResponse"," }",""," let responseBody = String(decoding: data, as: UTF8.self)"," guard (200...299).contains(httpResponse.statusCode) else {"," throw RequestError.httpStatus("," httpResponse.statusCode,"," responseBody"," )"," }",""," print(responseBody)"," }","}"].join("\n")})],Ut=!1;function Ht(){if(!Ut){Ut=!0;for(const e of jt)pe(e)}}function Ot(e){pe(e)}function Pt(e,t){return ce(e,t)}function Dt(){return de()}function Ft(e){e.register({register:Ot})}function At(e){if(!e||"object"!=typeof e)throw new TypeError("generate() requires an options object");const t=Pt(e.language,e.client);if(!t)throw new Error(`Unsupported generator: ${e.language}/${e.client}`);let r;if(e.request)r=e.request;else{if(!e.document)throw new TypeError("generate() requires either a 'request' or a 'document' option");if(!e.path)throw new TypeError("generate() requires a 'path' option when using 'document'");if(!e.method)throw new TypeError("generate() requires a 'method' option when using 'document'");r=we({document:e.document,path:e.path,method:e.method,serverUrl:e.serverUrl,securityValues:e.securityValues,softRefMode:e.softRefMode})}return t.generate(r)}Ht();//# sourceMappingURL=index.cjs.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@powerduck/openapi-codegen",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"description": "Generate runnable HTTP request examples from OpenAPI documents. 21 languages, 41 clients, browser-compatible, zero runtime dependencies.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -63,7 +63,8 @@
|
|
|
63
63
|
},
|
|
64
64
|
"homepage": "https://github.com/PowerDuckie/openapi-codegen#readme",
|
|
65
65
|
"devDependencies": {
|
|
66
|
-
|
|
66
|
+
"@types/node": "^20.19.43",
|
|
67
|
+
"@vitest/coverage-v8": "^3.2.7",
|
|
67
68
|
"fast-check": "^4.0.0",
|
|
68
69
|
"terser": "^5.51.2",
|
|
69
70
|
"tsup": "^8.5.0",
|