@powerduck/openapi-codegen 0.4.3 → 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/LICENSE +21 -0
- package/README.md +195 -72
- package/dist/index.cjs +1 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +271 -0
- package/dist/index.d.ts +271 -0
- package/dist/index.js +1 -6785
- package/dist/index.js.map +1 -0
- package/package.json +35 -25
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/refs.ts","../src/core/helpers.ts","../src/core/example.ts","../src/core/serialize.ts","../src/core/generator.ts","../src/core/registry.ts","../src/core/plugin.ts","../src/core/request.ts","../src/core/normalize.ts","../src/emitters/c/libcurl.ts","../src/emitters/csharp/httpclient.ts","../src/emitters/csharp/restsharp.ts","../src/emitters/clojure/clj-http.ts","../src/emitters/dart/http.ts","../src/emitters/fsharp/httpclient.ts","../src/emitters/go/new-request.ts","../src/emitters/http/http1.ts","../src/emitters/java/asynchttp.ts","../src/emitters/java/java-net-http.ts","../src/emitters/java/okhttp.ts","../src/emitters/java/unirest.ts","../src/emitters/javascript/axios.ts","../src/emitters/javascript/fetch.ts","../src/emitters/javascript/jquery.ts","../src/emitters/javascript/ofetch.ts","../src/emitters/javascript/xhr.ts","../src/emitters/kotlin/okhttp.ts","../src/emitters/node/axios.ts","../src/emitters/node/fetch.ts","../src/emitters/node/ofetch.ts","../src/emitters/node/undici.ts","../src/emitters/objc/nsurlsession.ts","../src/emitters/ocaml/cohttp.ts","../src/emitters/php/curl.ts","../src/emitters/php/guzzle.ts","../src/emitters/php/laravel-http.ts","../src/emitters/powershell/invoke-restmethod.ts","../src/emitters/powershell/invoke-webrequest.ts","../src/emitters/python/aiohttp.ts","../src/emitters/python/http-client.ts","../src/emitters/python/httpx-async.ts","../src/emitters/python/httpx-sync.ts","../src/emitters/python/requests.ts","../src/emitters/r/httr2.ts","../src/emitters/ruby/net-http.ts","../src/emitters/rust/reqwest.ts","../src/emitters/shell/curl.ts","../src/emitters/shell/httpie.ts","../src/emitters/shell/wget.ts","../src/emitters/swift/nsurlsession.ts","../src/emitters/index.ts","../src/index.ts"],"sourcesContent":["/**\n * RefResolver for OpenAPI 3.2, browser-compatible, only supports in-document JSON-Pointer references starting with #/\n * Compliant: https://spec.openapis.org/oas/3.2/schema/2025-11-23.html\n */\nexport class RefResolver {\n private readonly root: unknown;\n private readonly cache = new Map<string, unknown>();\n private readonly stack = new Set<string>();\n /** When softMode=true: do NOT throw on broken/circular refs; return partial/original value instead */\n public softMode: boolean;\n\n public constructor(root: unknown, softMode = false) {\n this.root = root;\n this.softMode = softMode;\n }\n\n /**\n * Dereference value, if it contains $ref, resolve it; otherwise return original value.\n * Does NOT validate type of resolved result, only resolves pointer.\n */\n public deref<T = unknown>(value: T): T {\n if (!value || typeof value !== \"object\") {\n return value;\n }\n const target = value as { $ref?: unknown };\n if (typeof target.$ref !== \"string\") {\n return value;\n }\n try {\n return this.resolveRef<T>(target.$ref);\n } catch (err) {\n if (this.softMode) {\n return value;\n }\n throw err;\n }\n }\n\n /**\n * Resolve JSON Pointer $ref starting with #/.\n * Throws for external refs, circular refs, broken pointers unless softMode is enabled.\n */\n public resolveRef<T = unknown>(ref: string): T {\n if (!ref.startsWith(\"#/\")) {\n const err = new Error(\n `Only in-document references are supported: ${ref}`,\n );\n if (this.softMode) {\n return { $ref: ref } as T;\n }\n throw err;\n }\n if (this.cache.has(ref)) {\n return this.cache.get(ref) as T;\n }\n if (this.stack.has(ref)) {\n const err = new Error(\n `Circular reference detected while resolving: ${ref}`,\n );\n if (this.softMode) {\n return { $ref: ref } as T;\n }\n throw err;\n }\n this.stack.add(ref);\n try {\n const pointerSegments = ref\n .slice(2)\n .split(\"/\")\n .map((segment) => segment.replace(/~1/g, \"/\").replace(/~0/g, \"~\"));\n\n let current: unknown = this.root;\n for (const part of pointerSegments) {\n if (current === null || typeof current !== \"object\") {\n const err = new Error(`Broken reference: ${ref}`);\n if (this.softMode) return { $ref: ref } as T;\n throw err;\n }\n current = (current as Record<string, unknown>)[part];\n if (current === undefined) {\n const err = new Error(`Broken reference: ${ref}`);\n if (this.softMode) return { $ref: ref } as T;\n throw err;\n }\n }\n\n // Follow chained $ref\n if (\n current &&\n typeof current === \"object\" &&\n typeof (current as { $ref?: unknown }).$ref === \"string\"\n ) {\n const chained = this.resolveRef((current as { $ref: string }).$ref);\n this.cache.set(ref, chained);\n return chained as T;\n }\n\n this.cache.set(ref, current);\n return current as T;\n } finally {\n this.stack.delete(ref);\n }\n }\n\n /** Clear internal cache, for reuse with different documents. */\n public clearCache(): void {\n this.cache.clear();\n }\n}\n","import type { FileValue, Parameter, RequestIR } from \"../types\";\n\nexport const DEFAULT_FILE_PATH = \"/tmp/file.bin\";\nexport const DEFAULT_FILE_NAME = \"file.bin\";\nexport const DEFAULT_BINARY_MEDIA_TYPE = \"application/octet-stream\";\n\n/** Normalize a header name for case-insensitive comparison. */\nfunction normalizeHeaderName(name: string): string {\n return String(name).trim().toLowerCase();\n}\n\nexport function isContentTypeHeader(name: string): boolean {\n return normalizeHeaderName(name) === \"content-type\";\n}\n\nexport function isContentLengthHeader(name: string): boolean {\n return normalizeHeaderName(name) === \"content-length\";\n}\n\nexport function isTransferEncodingHeader(name: string): boolean {\n return normalizeHeaderName(name) === \"transfer-encoding\";\n}\n\n/** Normalize an HTTP method to uppercase, falling back to GET. */\nexport function normalizeMethod(method: string): string {\n const value = String(method ?? \"\")\n .trim()\n .toUpperCase();\n\n return value || \"GET\";\n}\n\n/** True when the generator permits a request body for the method. */\nexport function supportsRequestBody(method: string): boolean {\n const verb = normalizeMethod(method);\n return verb !== \"GET\" && verb !== \"HEAD\";\n}\n\n/**\n * True when generator policy supplies a body for the method, using an empty\n * body when one was not provided.\n */\nexport function requiresRequestBody(method: string): boolean {\n const verb = normalizeMethod(method);\n return verb === \"POST\" || verb === \"PUT\" || verb === \"PATCH\";\n}\n\n/** Return a nonblank string, or undefined. */\nexport function nonBlankString(value: unknown): string | undefined;\n\n/** Return a nonblank string, or the supplied fallback. */\nexport function nonBlankString(value: unknown, fallback: string): string;\n\nexport function nonBlankString(\n value: unknown,\n fallback?: string,\n): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : fallback;\n}\n\n/**\n * Resolve the effective media type:\n * body.mediaType, then the first nonblank Content-Type header, then fallback.\n */\nexport function mediaTypeOf(request: RequestIR, fallback: string): string {\n const bodyMediaType = nonBlankString(request.body?.mediaType);\n if (bodyMediaType !== undefined) return bodyMediaType.trim();\n\n const rawHeaders: unknown = request.headers;\n if (!rawHeaders) return fallback;\n\n const pairs: Array<[unknown, unknown]> = Array.isArray(rawHeaders)\n ? (rawHeaders as Array<[unknown, unknown]>)\n : Object.entries(rawHeaders as Record<string, unknown>);\n\n for (const [key, rawValue] of pairs) {\n if (!isContentTypeHeader(String(key))) continue;\n\n const values = Array.isArray(rawValue) ? rawValue : [rawValue];\n\n for (const candidate of values) {\n if (candidate == null) continue;\n\n const value = String(candidate).trim();\n if (value) return value;\n }\n }\n\n return fallback;\n}\n\n/** Return the normalized media type without parameters. */\nfunction requestMediaType(request: RequestIR): string {\n return mediaTypeOf(request, \"\").split(\";\", 1)[0].trim().toLowerCase();\n}\n\n/** True if the effective media type belongs to the JSON family. */\nexport function hasJsonBody(request: RequestIR): boolean {\n const mediaType = requestMediaType(request);\n return mediaType === \"application/json\" || mediaType.endsWith(\"+json\");\n}\n\n/** True if the effective media type is URL-encoded form data. */\nexport function hasFormBody(request: RequestIR): boolean {\n return requestMediaType(request) === \"application/x-www-form-urlencoded\";\n}\n\n/** True if the effective media type is multipart form data. */\nexport function hasMultipartBody(request: RequestIR): boolean {\n return requestMediaType(request) === \"multipart/form-data\";\n}\n\n/** Safely serialize a value as compact JSON with a string fallback. */\nfunction compactJson(value: unknown): string {\n try {\n return JSON.stringify(value) ?? String(value ?? \"\");\n } catch {\n return String(value ?? \"\");\n }\n}\n\n/**\n * Serialize primitive and structured values for generated string literals.\n * Shared implementation for kotlinValue and formFieldValue.\n */\nfunction literalValue(value: unknown): string {\n if (value == null) return \"\";\n if (typeof value === \"string\") return value;\n\n if (\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n\n return compactJson(value);\n}\n\n/** Serialize primitive and structured values for generated string literals. */\nexport function kotlinValue(value: unknown): string {\n return literalValue(value);\n}\n\n/** Convert an unknown value into a form or multipart field string. */\nexport function formFieldValue(value: unknown): string {\n return literalValue(value);\n}\n\n/** Sanitize text intended for a generated source-code comment. */\nfunction sanitizeCommentText(value: unknown): string {\n return String(value)\n .replace(/[\\r\\n\\u2028\\u2029]+/g, \" \")\n .replace(/[\\u0000-\\u0008\\u000b\\u000c\\u000e-\\u001f\\u007f]+/g, \" \");\n}\n\n/**\n * Build comment text for a placeholder multipart path.\n * The caller must add the target language's comment delimiters.\n */\nexport function fileComment(path: string, fieldName: string): string {\n return (\n `TODO: replace ${sanitizeCommentText(path)} with the real local file ` +\n `path for multipart field ${sanitizeCommentText(fieldName)}`\n );\n}\n\n/** Type guard for a plain, non-array object. */\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\n/** Type guard for the internal multipart-file marker shape. */\nexport function isFileValue(value: unknown): value is FileValue {\n return isRecord(value) && Boolean(value.__file);\n}\n\nexport function assertIsRecord(\n value: unknown,\n message = \"Expected plain record object\",\n): asserts value is Record<string, unknown> {\n if (!isRecord(value)) throw new TypeError(message);\n}\n\nexport function assertIsString(\n value: unknown,\n message = \"Expected string\",\n): asserts value is string {\n if (typeof value !== \"string\") throw new TypeError(message);\n}\n\nexport function assertIsNumber(\n value: unknown,\n message = \"Expected finite number\",\n): asserts value is number {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n throw new TypeError(message);\n }\n}\n\n/** Pretty-print a value as JSON, with safe fallbacks. */\nexport function stringifyLiteral(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2) ?? \"null\";\n } catch {\n return JSON.stringify(String(value));\n }\n}\n\n/**\n * JSON-based string escaping. Shared implementation for languages that use\n * JSON-compatible string literals (JS, Python, Go, Rust, Swift, R, OCaml, F#, Clojure).\n */\nfunction jsonEscape(value: string): string {\n return JSON.stringify(String(value));\n}\n\nexport function escapeJs(value: string): string {\n return jsonEscape(value);\n}\n\nexport function escapePy(value: string): string {\n return jsonEscape(value);\n}\n\nexport function escapeSh(value: string): string {\n return `'${String(value).replace(/'/g, \"'\\\\''\")}'`;\n}\n\nexport function escapePhp(value: string): string {\n return `'${String(value).replace(/\\\\/g, \"\\\\\\\\\").replace(/'/g, \"\\\\'\")}'`;\n}\n\nexport function escapeRuby(value: string): string {\n const text = String(value);\n\n if (text.includes(\"\\n\")) {\n return `%Q{${text.replace(/\\\\/g, \"\\\\\\\\\").replace(/}/g, \"\\\\}\").replace(/\\$/g, \"\\\\$\")}}`;\n }\n\n return `'${text.replace(/\\\\/g, \"\\\\\\\\\").replace(/'/g, \"\\\\'\")}'`;\n}\n\nexport function escapePowerShell(value: string): string {\n return `'${String(value).replace(/'/g, \"''\")}'`;\n}\n\nexport function escapeCSharp(value: string): string {\n return `@\"${String(value).replace(/\"/g, '\"\"')}\"`;\n}\n\nexport function escapeJava(value: string): string {\n return jsonEscape(value)\n .replace(/\\u2028/g, \"\\\\u2028\")\n .replace(/\\u2029/g, \"\\\\u2029\");\n}\n\nexport function escapeGo(value: string): string {\n return jsonEscape(value);\n}\n\nexport function escapeRust(value: string): string {\n return jsonEscape(value);\n}\n\nexport function escapeObjC(value: string): string {\n return `@${jsonEscape(value)}`;\n}\n\nexport function escapeSwift(value: string): string {\n return jsonEscape(value);\n}\n\nexport function escapeR(value: string): string {\n return jsonEscape(value);\n}\n\nexport function escapeOCaml(value: string): string {\n return jsonEscape(value);\n}\n\nexport function escapeFSharp(value: string): string {\n return jsonEscape(value);\n}\n\nexport function escapeClojure(value: string): string {\n return jsonEscape(value);\n}\n\n/**\n * Convert headers into an object.\n *\n * Duplicate names are overwritten by the last value because the target shape\n * cannot represent repeated headers.\n */\nexport function toHeaderObject(\n headers: Array<[string, string]>,\n): Record<string, string> {\n const output: Record<string, string> = {};\n\n for (const [name, value] of headers) {\n output[name] = value;\n }\n\n return output;\n}\n\n/** Flatten a multipart body into ordered field descriptors. */\nexport function toKeyValueBody(\n value: unknown,\n): Array<{ name: string; value: unknown; file: boolean }> {\n if (!isRecord(value)) return [];\n\n const entries: Array<{\n name: string;\n value: unknown;\n file: boolean;\n }> = [];\n\n for (const [name, entry] of Object.entries(value)) {\n if (Array.isArray(entry)) {\n for (const item of entry) {\n entries.push({\n name,\n value: item,\n file: isFileValue(item),\n });\n }\n } else {\n entries.push({\n name,\n value: entry,\n file: isFileValue(entry),\n });\n }\n }\n\n return entries;\n}\n\n/** Indent every nonempty line with the given prefix. */\nexport function indent(text: string, prefix = \" \"): string {\n return text\n .split(\"\\n\")\n .map((line) => (line.length > 0 ? `${prefix}${line}` : line))\n .join(\"\\n\");\n}\n\n/** Convert arbitrary text into a valid basic identifier. */\nexport function sanitizeIdentifier(value: string): string {\n const cleaned = String(value).replace(/[^A-Za-z0-9_]/g, \"_\");\n const candidate = /^[0-9]/.test(cleaned) ? `_${cleaned}` : cleaned;\n\n return candidate || \"value\";\n}\n\n/** Generate a function or variable name from the method and path template. */\nexport function operationName(request: RequestIR): string {\n const verb = normalizeMethod(request.method).toLowerCase();\n const rawPath = typeof request.path === \"string\" ? request.path : \"\";\n\n const path = rawPath\n .replace(/\\{([^}]+)\\}/g, \"_by_$1\")\n .replace(/[^A-Za-z0-9]+/g, \"_\")\n .replace(/^_+|_+$/g, \"\")\n .toLowerCase();\n\n return sanitizeIdentifier(path ? `${verb}_${path}` : `${verb}_request`);\n}\n\n/** Return raw body text or serialize a structured value once. */\nexport function bodyText(request: RequestIR): string {\n if (!request.body) return \"\";\n\n const raw = request.body.value;\n if (typeof raw === \"string\") return raw;\n\n try {\n return JSON.stringify(raw, null, 2) ?? \"\";\n } catch {\n return String(raw ?? \"\");\n }\n}\n\n/** Filter parameters by their OpenAPI location. */\nexport function collectByLocation(\n request: RequestIR,\n location: Parameter[\"in\"],\n): Parameter[] {\n const parameters = Array.isArray(request.parameters)\n ? request.parameters\n : [];\n\n return parameters.filter((parameter) => parameter.in === location);\n}\n\n/** Return the first value that is not undefined. */\nexport function firstDefined<T>(\n ...values: Array<T | undefined>\n): T | undefined {\n for (const value of values) {\n if (value !== undefined) return value;\n }\n\n return undefined;\n}\n\n/** Perform a lightweight structural check of an OpenAPI document. */\nexport function lightweightOpenAPIPreCheck(doc: unknown): string[] {\n const warnings: string[] = [];\n\n if (!isRecord(doc)) {\n warnings.push(\"OpenAPI document root must be a plain object\");\n return warnings;\n }\n\n if (typeof doc.openapi !== \"string\") {\n warnings.push(\"Missing or non-string openapi version field\");\n }\n\n if (!isRecord(doc.info)) {\n warnings.push(\"info object missing or not an object\");\n }\n\n if (doc.paths !== undefined && !isRecord(doc.paths)) {\n warnings.push(\"paths must be an object when defined\");\n }\n\n if (doc.components !== undefined && !isRecord(doc.components)) {\n warnings.push(\"components must be an object when defined\");\n }\n\n return warnings;\n}\n\n/**\n * Shallowly merge allOf schemas.\n *\n * Boolean schema true is ignored; false invalidates the merge. Properties are\n * merged, required entries are deduplicated, and composition arrays are\n * concatenated.\n */\nexport function mergeAllOfSchemas(\n schemas: unknown[],\n resolver: { deref: (value: unknown) => unknown },\n): Record<string, unknown> | undefined {\n const collected: Record<string, unknown> = {};\n\n for (const rawSchema of schemas) {\n const resolved = resolver.deref(rawSchema);\n\n if (resolved === false) return undefined;\n if (resolved === true || !isRecord(resolved)) continue;\n\n for (const [key, value] of Object.entries(resolved)) {\n if (key === \"properties\") {\n if (!isRecord(value)) continue;\n\n const existing = isRecord(collected.properties)\n ? collected.properties\n : {};\n\n collected.properties = {\n ...existing,\n ...value,\n };\n\n continue;\n }\n\n if (key === \"required\") {\n if (!Array.isArray(value)) continue;\n\n const required = new Set<string>(\n Array.isArray(collected.required)\n ? collected.required.filter(\n (item): item is string => typeof item === \"string\",\n )\n : [],\n );\n\n for (const item of value) {\n if (typeof item === \"string\") required.add(item);\n }\n\n collected.required = [...required];\n continue;\n }\n\n if (key === \"type\") {\n const types = new Set<string>();\n const existing = collected.type;\n\n if (typeof existing === \"string\") {\n types.add(existing);\n } else if (Array.isArray(existing)) {\n for (const item of existing) {\n if (typeof item === \"string\") types.add(item);\n }\n }\n\n if (typeof value === \"string\") {\n types.add(value);\n } else if (Array.isArray(value)) {\n for (const item of value) {\n if (typeof item === \"string\") types.add(item);\n }\n }\n\n if (types.size === 1) {\n collected.type = [...types][0];\n } else if (types.size > 1) {\n collected.type = [...types];\n }\n\n continue;\n }\n\n if (key === \"allOf\" || key === \"oneOf\" || key === \"anyOf\") {\n if (!Array.isArray(value)) continue;\n\n const existing = Array.isArray(collected[key])\n ? (collected[key] as unknown[])\n : [];\n\n collected[key] = [...existing, ...value];\n continue;\n }\n\n collected[key] = value;\n }\n }\n\n return Object.keys(collected).length > 0 ? collected : undefined;\n}\n\n/**\n * Return true for headers forbidden or controlled by browser networking APIs.\n * Content-Type is handled separately because it is valid for non-multipart\n * request bodies.\n */\nexport function isBrowserForbiddenHeader(name: string): boolean {\n const normalized = normalizeHeaderName(name);\n\n switch (normalized) {\n case \"accept-charset\":\n case \"accept-encoding\":\n case \"access-control-request-headers\":\n case \"access-control-request-method\":\n case \"connection\":\n case \"content-length\":\n case \"cookie\":\n case \"cookie2\":\n case \"date\":\n case \"dnt\":\n case \"expect\":\n case \"host\":\n case \"keep-alive\":\n case \"origin\":\n case \"permissions-policy\":\n case \"referer\":\n case \"te\":\n case \"trailer\":\n case \"transfer-encoding\":\n case \"upgrade\":\n case \"via\":\n return true;\n default:\n return normalized.startsWith(\"proxy-\") || normalized.startsWith(\"sec-\");\n }\n}\n\n/** Remove headers rejected by browser APIs or generated for multipart bodies. */\nexport function browserHeaders(\n headers: Array<[string, string]>,\n multipart: boolean,\n): Array<[string, string]> {\n return headers.filter(([name]) => {\n if (isBrowserForbiddenHeader(name)) return false;\n return !multipart || !isContentTypeHeader(name);\n });\n}\n","import { RefResolver } from \"./refs\";\nimport { isRecord, firstDefined, mergeAllOfSchemas } from \"./helpers\";\n\nconst MAX_RECURSION_DEPTH = 64;\n\n/**\n * Context for example generation, controls readOnly/writeOnly filtering.\n * - isRequestBody: true → skip readOnly properties\n * - isResponse: true → skip writeOnly properties\n */\nexport type ExampleGenContext = {\n isRequestBody: boolean;\n isResponse: boolean;\n};\n\nexport const defaultExampleContext: ExampleGenContext = {\n isRequestBody: false,\n isResponse: false,\n};\n\n/**\n * Generate example value from JSON-Schema / OpenAPI 3.2 Schema Object.\n * Compliant with OAS3.2 schema 2025-11-23, browser-only.\n * Handles boolean schemas (true / false), const, enum, composition keywords, type inference, formats.\n * Respects minLength/maxLength, minItems/maxItems, minimum/maximum, multipleOf.\n * Skips readOnly fields for request-body context; skips writeOnly fields for response context.\n * Basic pattern regex-aware string example generation.\n * @param schema raw schema value (may contain $ref)\n * @param resolver reference resolver instance\n * @param seen set for circular-reference detection\n * @param depth current recursion depth\n * @param ctx generation context for readOnly/writeOnly rules\n * @returns example instance value, null for stop-circular, undefined for no-inference\n */\nexport function example(\n schema: unknown,\n resolver: RefResolver,\n seen?: Set<unknown>,\n depth = 0,\n ctx: ExampleGenContext = defaultExampleContext,\n): unknown {\n const localSeen = seen ?? new Set<unknown>();\n if (depth >= MAX_RECURSION_DEPTH) {\n return null;\n }\n\n const resolved = resolver.deref(schema);\n\n // Handle boolean-schema: OAS3.2 allows schema: true | false\n if (typeof resolved === \"boolean\") {\n return resolved ? {} : null;\n }\n if (!isRecord(resolved)) {\n return undefined;\n }\n\n const node = resolved as Record<string, unknown>;\n if (localSeen.has(node)) {\n return null;\n }\n localSeen.add(node);\n\n // OAS3.2 precedence: node.example > first entry of node.examples array-style\n const directExample = firstDefined(\n node.example,\n Array.isArray(node.examples) && node.examples.length\n ? node.examples[0]\n : undefined,\n );\n if (directExample !== undefined) {\n return directExample;\n }\n\n if (node.const !== undefined) {\n return node.const;\n }\n if (node.default !== undefined) {\n return node.default;\n }\n if (Array.isArray(node.enum) && node.enum.length > 0) {\n return node.enum[0];\n }\n\n // Composition keywords\n if (Array.isArray(node.oneOf) && node.oneOf.length > 0) {\n return example(node.oneOf[0], resolver, localSeen, depth + 1, ctx);\n }\n if (Array.isArray(node.anyOf) && node.anyOf.length > 0) {\n return example(node.anyOf[0], resolver, localSeen, depth + 1, ctx);\n }\n\n // allOf: merge schema constraints FIRST, generate example from merged composite schema\n if (Array.isArray(node.allOf) && node.allOf.length > 0) {\n const mergedSchema = mergeAllOfSchemas(node.allOf, resolver);\n if (mergedSchema === undefined) {\n return null;\n }\n // copy top-level non-allOf keywords onto merged composite schema\n const composite: Record<string, unknown> = { ...mergedSchema };\n for (const [k, v] of Object.entries(node)) {\n if (k !== \"allOf\" && composite[k] === undefined) {\n composite[k] = v;\n }\n }\n return example(composite, resolver, localSeen, depth + 1, ctx);\n }\n\n // JSON-Schema tuple prefixItems\n if (Array.isArray(node.prefixItems) && node.prefixItems.length > 0) {\n return node.prefixItems.map((item: unknown) =>\n example(item, resolver, localSeen, depth + 1, ctx),\n );\n }\n\n // Stub placeholders for unsupported JSON-Schema 2020-12 keywords\n /* contains, dependentRequired, if-then-else, $dynamicRef: no full implementation, pass-through */\n\n let inferredType: string | undefined;\n if (typeof node.type === \"string\") {\n inferredType = node.type;\n } else if (Array.isArray(node.type)) {\n const nonNull = node.type.find((entry: unknown) => entry !== \"null\");\n inferredType =\n typeof nonNull === \"string\"\n ? nonNull\n : (node.type[0] as string | undefined);\n }\n\n switch (inferredType) {\n case \"string\": {\n if (node.format === \"binary\") {\n return {\n __file: true,\n name: \"file.bin\",\n contentType: \"application/octet-stream\",\n data: \"\",\n };\n }\n if (node.format === \"date-time\") return \"2025-01-01T00:00:00Z\";\n if (node.format === \"date\") return \"2025-01-01\";\n if (node.format === \"time\") return \"00:00:00Z\";\n if (node.format === \"duration\") return \"P1D\";\n\n const minLen = typeof node.minLength === \"number\" ? node.minLength : 0;\n const maxLen =\n typeof node.maxLength === \"number\" ? node.maxLength : Infinity;\n const targetLen = Math.min(Math.max(minLen, 2), maxLen);\n\n // lorem-ipsum style word fragments for western-friendly sample strings\n const wordPool = [\n \"lorem\",\n \"ipsum\",\n \"dolor\",\n \"sit\",\n \"amet\",\n \"consectetur\",\n \"adipiscing\",\n \"elit\",\n \"sed\",\n \"do\",\n \"eiusmod\",\n \"tempor\",\n \"incididunt\",\n \"ut\",\n \"labore\",\n \"dolore\",\n \"magna\",\n \"aliqua\",\n \"sample\",\n \"text\",\n \"value\",\n \"demo\",\n \"test\",\n ];\n\n function makeSampleString(len: number): string {\n if (len <= 0) return \"\";\n let buf = \"\";\n let idx = 0;\n while (buf.length < len) {\n const word = wordPool[idx % wordPool.length];\n if (buf.length > 0) buf += \" \";\n buf += word;\n idx++;\n }\n // hard-truncate to exact target length\n return buf.slice(0, len);\n }\n\n let strVal: string;\n try {\n strVal = makeSampleString(targetLen);\n } catch {\n // safety fallback\n strVal = \"x\".repeat(targetLen);\n }\n\n // pattern-aware string generation, degrade safely on invalid regex\n if (typeof node.pattern === \"string\") {\n try {\n const re = new RegExp(node.pattern);\n // try simple candidates until match\n const candidates = [\"test\", \"abc\", \"sample\", \"value_01\", strVal, \"A\"];\n const matched = candidates.find((c) => re.test(c));\n if (matched !== undefined) {\n strVal = matched;\n // respect maxLength after candidate selection\n strVal = strVal.slice(0, maxLen);\n }\n } catch {\n // invalid regex pattern, keep generated sample string\n }\n }\n\n return strVal;\n }\n\n case \"integer\": {\n let val = 0;\n if (typeof node.minimum === \"number\") {\n val = Math.ceil(node.minimum);\n }\n if (typeof node.multipleOf === \"number\" && node.multipleOf > 0) {\n val = Math.ceil(val / node.multipleOf) * node.multipleOf;\n }\n // respect upper-bound maximum\n if (typeof node.maximum === \"number\") {\n val = Math.min(val, node.maximum);\n }\n return val;\n }\n case \"number\": {\n let val = 0;\n if (typeof node.minimum === \"number\") {\n val = node.minimum;\n }\n if (typeof node.multipleOf === \"number\" && node.multipleOf > 0) {\n val = Math.ceil(val / node.multipleOf) * node.multipleOf;\n }\n // respect upper-bound maximum\n if (typeof node.maximum === \"number\") {\n val = Math.min(val, node.maximum);\n }\n return val;\n }\n case \"boolean\":\n return true;\n case \"null\":\n return null;\n case \"array\": {\n if (Array.isArray(node.examples) && node.examples.length > 0) {\n return node.examples[0];\n }\n const itemSchema = node.items;\n const arr: unknown[] = [];\n const minItems = typeof node.minItems === \"number\" ? node.minItems : 0;\n const maxItems =\n typeof node.maxItems === \"number\" ? node.maxItems : Infinity;\n const count = Math.min(Math.max(1, minItems), maxItems);\n if (itemSchema) {\n for (let i = 0; i < count; i++) {\n arr.push(example(itemSchema, resolver, localSeen, depth + 1, ctx));\n }\n }\n return arr;\n }\n case \"object\":\n default: {\n const output: Record<string, unknown> = {};\n const properties = isRecord(node.properties) ? node.properties : {};\n for (const [key, propertySchema] of Object.entries(properties)) {\n const propResolved = resolver.deref(propertySchema);\n if (isRecord(propResolved)) {\n // skip readOnly for request-body\n if (ctx.isRequestBody && Boolean(propResolved.readOnly)) {\n continue;\n }\n // skip writeOnly for response\n if (ctx.isResponse && Boolean(propResolved.writeOnly)) {\n continue;\n }\n }\n output[key] = example(\n propertySchema,\n resolver,\n localSeen,\n depth + 1,\n ctx,\n );\n }\n\n // patternProperties example\n if (isRecord(node.patternProperties)) {\n const patternEntries = Object.entries(node.patternProperties);\n if (patternEntries.length > 0) {\n const [patternKey, patternSchema] = patternEntries[0];\n const dummyKey = `_pattern_${patternKey.replace(/[^a-zA-Z0-9]/g, \"_\")}`;\n output[dummyKey] = example(\n patternSchema,\n resolver,\n localSeen,\n depth + 1,\n ctx,\n );\n }\n }\n\n if (Object.keys(output).length === 0 && node.additionalProperties) {\n output.additionalProp = example(\n node.additionalProperties,\n resolver,\n localSeen,\n depth + 1,\n ctx,\n );\n }\n if (Object.keys(output).length === 0 && node.unevaluatedProperties) {\n output.additionalProp = example(\n node.unevaluatedProperties,\n resolver,\n localSeen,\n depth + 1,\n ctx,\n );\n }\n return output;\n }\n }\n}\n","export type Pair = [string, string];\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n !!value && typeof value === \"object\" && !Array.isArray(value) && !(value as { __file?: boolean }).__file;\n\nconst stringValue = (value: unknown): string => {\n if (value === null) {\n return \"null\";\n }\n if (value === undefined) {\n return \"\";\n }\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\") {\n return String(value);\n }\n return JSON.stringify(value);\n};\n\nfunction percentEncode(value: string, allowReserved = false): string {\n return allowReserved ? value : encodeURIComponent(value);\n}\n\nfunction cookieEncode(value: string): string {\n return encodeURIComponent(value)\n .replace(/[!'()*]/g, (ch) => `%${ch.charCodeAt(0).toString(16).toUpperCase()}`);\n}\n\nfunction headerSanitize(value: string): string {\n return value.replace(/[\\r\\n]+/g, \" \").replace(/\\0/g, \"\");\n}\n\n/**\n * Iterative flattenPairs, no recursion, avoid browser stack-overflow for deep nested payloads.\n * Replaces old recursive implementation.\n */\nfunction flattenPairs(prefix: string, value: unknown, encode: (input: string) => string): Pair[] {\n const result: Pair[] = [];\n const stack: Array<{ prefix: string; value: unknown }> = [{ prefix, value }];\n\n while (stack.length > 0) {\n const item = stack.pop();\n if (!item) continue;\n const { prefix: p, value: v } = item;\n\n if (Array.isArray(v)) {\n for (let i = v.length - 1; i >= 0; i--) {\n stack.push({ prefix: `${p}[${i}]`, value: v[i] });\n }\n } else if (isRecord(v)) {\n const entries = Object.entries(v);\n for (let i = entries.length - 1; i >= 0; i--) {\n const [k, val] = entries[i];\n stack.push({ prefix: `${p}[${k}]`, value: val });\n }\n } else {\n result.push([encode(p), encode(stringValue(v))]);\n }\n }\n return result;\n}\n\nexport function parameter(parameter: {\n name: string;\n in: string;\n value: unknown;\n style?: string;\n explode?: boolean;\n allowReserved?: boolean;\n}): Pair[] {\n const style =\n parameter.style ??\n (parameter.in === \"query\" || parameter.in === \"querystring\" || parameter.in === \"cookie\" ? \"form\" : \"simple\");\n const explode = parameter.explode ?? (style === \"form\" || style === \"deepObject\");\n const allowReserved = Boolean(parameter.allowReserved);\n const value = parameter.value;\n if (value == null) {\n return [];\n }\n const encode =\n parameter.in === \"cookie\"\n ? (input: string) => cookieEncode(input)\n : parameter.in === \"header\"\n ? (input: string) => headerSanitize(input)\n : (input: string) => percentEncode(input, allowReserved);\n\n if (style === \"deepObject\" && isRecord(value)) {\n return flattenPairs(parameter.name, value, encode);\n }\n if (Array.isArray(value)) {\n const items = value.map((item) => encode(stringValue(item)));\n switch (style) {\n case \"form\":\n return explode ? items.map((item) => [encode(parameter.name), item]) : [[encode(parameter.name), items.join(\",\")]];\n case \"spaceDelimited\":\n return [[encode(parameter.name), items.join(\"%20\")]];\n case \"pipeDelimited\":\n return [[encode(parameter.name), items.join(\"|\")]];\n case \"label\":\n return [[encode(parameter.name), \".\" + items.join(explode ? \".\" : \",\")]];\n case \"matrix\":\n return explode\n ? [[encode(parameter.name), items.map((item) => `;${parameter.name}=${item}`).join(\"\")]]\n : [[encode(parameter.name), `;${parameter.name}=${items.join(\",\")}`]];\n case \"simple\":\n default:\n return [[encode(parameter.name), items.join(\",\")]];\n }\n }\n if (isRecord(value)) {\n const entries = Object.entries(value).flatMap(([key, item]) => {\n return [[encode(key), encode(stringValue(item))]] as Pair[];\n });\n switch (style) {\n case \"form\":\n return explode ? entries : [[encode(parameter.name), entries.flat().join(\",\")]];\n case \"simple\":\n return [[encode(parameter.name), explode ? entries.map(([k, v]) => `${k}=${v}`).join(\",\") : entries.flat().join(\",\")]];\n case \"label\":\n return [[encode(parameter.name), \".\" + (explode ? entries.map(([k, v]) => `${k}=${v}`).join(\".\") : entries.flat().join(\".\"))]];\n case \"matrix\":\n return [[encode(parameter.name), explode ? entries.map(([k, v]) => `;${k}=${v}`).join(\"\") : `;${parameter.name}=${entries.flat().join(\",\")}`]];\n default:\n return [[encode(parameter.name), entries.flat().join(\",\")]];\n }\n }\n if (style === \"label\") {\n return [[encode(parameter.name), \".\" + encode(stringValue(value))]];\n }\n if (style === \"matrix\") {\n return [[encode(parameter.name), `;${parameter.name}=${encode(stringValue(value))}`]];\n }\n return [[encode(parameter.name), encode(stringValue(value))]];\n}\n\nexport function query(pairs: Pair[]): string {\n return pairs.map(([key, value]) => `${key}=${value}`).join(\"&\");\n}\n\nexport function cookie(pairs: Pair[]): string {\n return pairs.map(([key, value]) => `${cookieEncode(key)}=${cookieEncode(value)}`).join(\"; \");\n}\n\nexport function headerValue(value: string): string {\n return headerSanitize(value);\n}\n","import type { Generator, RequestIR } from \"../types\";\nexport type GeneratorEmitter = (request: RequestIR) => string;\nexport function createGenerator(\n language: string,\n client: string,\n emit: GeneratorEmitter,\n): Generator {\n return {\n language,\n client,\n generate(request: RequestIR): string {\n return emit(request);\n },\n };\n}\n","import type { Generator } from \"../types\";\n\nconst store = new Map<string, Generator>();\n\nfunction key(language: string, client: string): string {\n return `${language.toLowerCase()}\\0${client.toLowerCase()}`;\n}\n\nexport function registerGenerator(generator: Generator): void {\n store.set(key(generator.language, generator.client), generator);\n}\n\nexport function getGenerator(language: string, client: string): Generator | undefined {\n return store.get(key(language, client));\n}\n\nexport function listGenerators(): Array<{ language: string; client: string }> {\n return [...store.values()].map((item) => ({ language: item.language, client: item.client }));\n}\n","import type { Generator, Plugin } from \"../types\";\n\nexport interface PluginApi {\n register(generator: Generator): void;\n}\n\nexport function applyPlugin(plugin: Plugin, api: PluginApi): void {\n plugin.register(api);\n}\n","import { cookie, headerValue, parameter, query } from \"./serialize\";\nimport type { Body, RequestIR } from \"../types\";\n\nexport interface CompiledRequest {\n url: string;\n headers: Array<[string, string]>;\n body?: Body;\n queryPairs: Array<[string, string]>;\n cookiePairs: Array<[string, string]>;\n}\n\nfunction trimSlashes(input: string): string {\n return input.replace(/\\/+$/g, \"\");\n}\n\nfunction joinUrl(baseUrl: string, path: string): string {\n if (/^https?:\\/\\//i.test(path)) {\n return path;\n }\n const normalizedBase = trimSlashes(baseUrl || \"\");\n if (!path.startsWith(\"/\")) {\n path = \"/\" + path;\n }\n return normalizedBase + path;\n}\n\nexport function compile(request: RequestIR): CompiledRequest {\n let path = request.path;\n for (const item of request.parameters.filter(\n (parameter) => parameter.in === \"path\",\n )) {\n const rendered = parameter(item)\n .map((pair) => pair[1])\n .join(\",\");\n path = path.replace(new RegExp(`\\\\{${item.name}\\\\}`, \"g\"), rendered);\n }\n\n const queryPairs = request.parameters\n .filter(\n (parameter) => parameter.in === \"query\" || parameter.in === \"querystring\",\n )\n .flatMap((item) => parameter(item));\n\n const headerPairs = request.headers.flatMap((header) => parameter(header));\n\n const cookiePairs = request.parameters\n .filter((parameter) => parameter.in === \"cookie\")\n .flatMap((item) => parameter(item));\n\n for (const security of request.security || []) {\n const rawValue = String(security.value ?? \"\");\n if (security.type === \"apiKey\") {\n if (security.in === \"query\") {\n queryPairs.push([\n encodeURIComponent(security.paramName || security.name),\n encodeURIComponent(rawValue),\n ]);\n } else if (security.in === \"cookie\") {\n cookiePairs.push([security.paramName || security.name, rawValue]);\n } else {\n headerPairs.push([\n security.paramName || security.name,\n headerValue(rawValue),\n ]);\n }\n } else if (security.type === \"http\" && security.scheme === \"bearer\") {\n headerPairs.push([\"Authorization\", headerValue(`Bearer ${rawValue}`)]);\n } else if (security.type === \"http\" && security.scheme === \"basic\") {\n headerPairs.push([\"Authorization\", headerValue(`Basic ${rawValue}`)]);\n }\n }\n\n if (cookiePairs.length > 0) {\n headerPairs.push([\"Cookie\", cookie(cookiePairs)]);\n }\n\n const url = joinUrl(request.baseUrl, path);\n const queryString = query(queryPairs);\n\n return {\n url: queryString ? `${url}?${queryString}` : url,\n headers: headerPairs,\n body: request.body,\n queryPairs,\n cookiePairs,\n };\n}\n\nexport function form(value: unknown): string {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return \"\";\n }\n const pairs: string[] = [];\n for (const [key, current] of Object.entries(\n value as Record<string, unknown>,\n )) {\n if (Array.isArray(current)) {\n for (const item of current) {\n pairs.push(\n `${encodeURIComponent(key)}=${encodeURIComponent(String(item ?? \"\"))}`,\n );\n }\n continue;\n }\n pairs.push(\n `${encodeURIComponent(key)}=${encodeURIComponent(String(current ?? \"\"))}`,\n );\n }\n return pairs.join(\"&\");\n}\n","import { example, type ExampleGenContext } from \"./example\";\nimport { RefResolver } from \"./refs\";\nimport { firstDefined, isRecord, lightweightOpenAPIPreCheck, nonBlankString } from \"./helpers\";\n\nconst HTTP_METHODS = new Set([\n \"get\",\n \"put\",\n \"post\",\n \"delete\",\n \"options\",\n \"head\",\n \"patch\",\n \"trace\",\n]);\n\nconst CONTENT_PREFERENCES: RegExp[] = [\n /^application\\/(?:[a-z0-9.+-]+\\+)?json(?:\\s*;.*)?$/i,\n /^application\\/x-www-form-urlencoded(?:\\s*;.*)?$/i,\n /^multipart\\/form-data(?:\\s*;.*)?$/i,\n /^text\\/[a-z0-9.+-]+(?:\\s*;.*)?$/i,\n /^application\\/octet-stream(?:\\s*;.*)?$/i,\n];\n\ninterface NormalizeOptions {\n document: unknown;\n path: string;\n method: string;\n serverUrl?: string;\n securityValues?: Record<string, string>;\n softRefMode?: boolean;\n}\n\ninterface NormalizedParameter {\n name: string;\n in: string;\n value: unknown;\n style?: string;\n explode?: boolean;\n allowReserved?: boolean;\n}\n\ninterface NormalizedSecurity {\n name: string;\n type: string;\n scheme?: string;\n in?: string;\n paramName?: string;\n value: string;\n}\n\nfunction own(object: Record<string, unknown>, key: string): boolean {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\n/**\n * Normalize and validate an HTTP method.\n * Throws for unsupported methods (unlike helpers.normalizeMethod which falls back to GET).\n */\nfunction normalizeMethod(value: unknown): string {\n const method = nonBlankString(value)?.toLowerCase();\n\n if (!method || !HTTP_METHODS.has(method)) {\n throw new Error(`Unsupported HTTP method: ${String(value)}`);\n }\n\n return method;\n}\n\nfunction pickContent(content: unknown): [string, unknown] | undefined {\n if (!isRecord(content)) return undefined;\n\n const entries = Object.entries(content).filter(\n ([mediaType]) => mediaType.trim().length > 0,\n );\n\n for (const matcher of CONTENT_PREFERENCES) {\n const match = entries.find(([mediaType]) => matcher.test(mediaType.trim()));\n if (match) return match;\n }\n\n return entries[0];\n}\n\n/**\n * Merge path-level and operation-level parameters.\n *\n * OpenAPI defines a parameter's identity as the combination of `name` and\n * `in`. Operation-level parameters override path-level parameters.\n */\nfunction mergeParameters(\n pathParameters: unknown,\n operationParameters: unknown,\n resolver: RefResolver,\n): Record<string, unknown>[] {\n const merged = new Map<string, Record<string, unknown>>();\n\n const add = (entries: unknown, overwrite: boolean): void => {\n if (!Array.isArray(entries)) return;\n\n for (const entry of entries) {\n const parameter = resolver.deref(entry);\n if (!isRecord(parameter)) continue;\n\n const name = nonBlankString(parameter.name);\n const location = nonBlankString(parameter.in)?.toLowerCase();\n\n if (!name || !location) continue;\n\n const key = `${location}\\u0000${name}`;\n if (overwrite || !merged.has(key)) {\n merged.set(key, parameter);\n }\n }\n };\n\n add(pathParameters, false);\n add(operationParameters, true);\n\n return [...merged.values()];\n}\n\n/**\n * Read the first usable value from an OpenAPI examples map.\n *\n * Example Object references are resolved. Inline Example Objects and direct\n * values are both accepted for resilience.\n */\nfunction readFirstExampleValue(\n examples: unknown,\n resolver: RefResolver,\n): unknown {\n if (!isRecord(examples)) return undefined;\n\n for (const entry of Object.values(examples)) {\n const resolved = resolver.deref(entry);\n\n if (isRecord(resolved) && own(resolved, \"value\")) {\n return resolved.value;\n }\n\n if (!isRecord(resolved) && resolved !== undefined) {\n return resolved;\n }\n }\n\n return undefined;\n}\n\n/**\n * Select a request example according to OpenAPI precedence:\n * Media Type Object `example`, first usable `examples` entry, then schema.\n */\nfunction readExampleForMediaType(\n mediaTypeObject: unknown,\n resolver: RefResolver,\n context: ExampleGenContext,\n): unknown {\n const resolved = resolver.deref(mediaTypeObject);\n if (!isRecord(resolved)) return undefined;\n\n if (own(resolved, \"example\")) {\n return resolved.example;\n }\n\n const examplesValue = readFirstExampleValue(resolved.examples, resolver);\n if (examplesValue !== undefined) {\n return examplesValue;\n }\n\n return example(resolved.schema, resolver, undefined, 0, context);\n}\n\nfunction resolveServerUrl(server: unknown): string | undefined {\n if (!isRecord(server)) return undefined;\n\n let url = nonBlankString(server.url);\n if (!url) return undefined;\n\n const variables = isRecord(server.variables) ? server.variables : undefined;\n\n url = url.replace(/\\{([^{}]+)\\}/g, (placeholder, variableName: string) => {\n if (!variables) return placeholder;\n\n const variable = variables[variableName];\n if (!isRecord(variable)) return placeholder;\n\n const value = firstDefined(variable.default, variable.example);\n return value === undefined\n ? placeholder\n : encodeURIComponent(String(value));\n });\n\n return url;\n}\n\nfunction firstServerUrl(servers: unknown): string | undefined {\n if (!Array.isArray(servers)) return undefined;\n\n for (const server of servers) {\n const url = resolveServerUrl(server);\n if (url) return url;\n }\n\n return undefined;\n}\n\nfunction resolveBaseUrl(\n explicitServerUrl: unknown,\n operation: Record<string, unknown>,\n pathItem: Record<string, unknown>,\n root: Record<string, unknown>,\n): string {\n return (\n nonBlankString(explicitServerUrl) ??\n firstServerUrl(operation.servers) ??\n firstServerUrl(pathItem.servers) ??\n firstServerUrl(root.servers) ??\n \"https://example.com\"\n );\n}\n\nfunction resolveSecuritySchemes(\n root: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n if (!isRecord(root.components)) return undefined;\n return isRecord(root.components.securitySchemes)\n ? root.components.securitySchemes\n : undefined;\n}\n\nfunction normalizeSecurity(\n root: Record<string, unknown>,\n operation: Record<string, unknown>,\n resolver: RefResolver,\n securityValues: Record<string, string> | undefined,\n): NormalizedSecurity[] {\n /*\n * An operation-level empty security array explicitly disables inherited\n * root security.\n */\n const requirements = Array.isArray(operation.security)\n ? operation.security\n : Array.isArray(root.security)\n ? root.security\n : [];\n\n const schemes = resolveSecuritySchemes(root);\n if (!schemes) return [];\n\n const result: NormalizedSecurity[] = [];\n const seen = new Set<string>();\n\n /*\n * Security Requirement Objects are alternatives, while properties within\n * one object are combined. This normalized representation remains flat for\n * compatibility with existing emitters.\n */\n for (const requirement of requirements) {\n if (!isRecord(requirement)) continue;\n\n for (const name of Object.keys(requirement)) {\n if (seen.has(name)) continue;\n\n const scheme = resolver.deref(schemes[name]);\n if (!isRecord(scheme)) continue;\n\n const type = nonBlankString(scheme.type);\n if (!type) continue;\n\n seen.add(name);\n result.push({\n name,\n type,\n scheme: nonBlankString(scheme.scheme)?.toLowerCase(),\n in: nonBlankString(scheme.in)?.toLowerCase(),\n paramName: nonBlankString(scheme.name),\n value: securityValues?.[name] ?? `{{${name}}}`,\n });\n }\n }\n\n return result;\n}\n\nexport function normalize(options: NormalizeOptions) {\n if (!isRecord(options)) {\n throw new TypeError(\"normalize options must be an object\");\n }\n\n if (!isRecord(options.document)) {\n throw new TypeError(\"OpenAPI document root must be a plain object\");\n }\n\n const root = options.document;\n const preWarnings = lightweightOpenAPIPreCheck(root);\n const resolver = new RefResolver(root, options.softRefMode === true);\n\n const path = nonBlankString(options.path);\n if (!path) {\n throw new TypeError(\"OpenAPI path must be a non-empty string\");\n }\n\n const method = normalizeMethod(options.method);\n\n if (!isRecord(root.paths)) {\n throw new Error(\"OpenAPI document does not define a valid paths object\");\n }\n\n if (!own(root.paths, path)) {\n throw new Error(`Path not found: ${path}`);\n }\n\n const pathItem = resolver.deref(root.paths[path]);\n if (!isRecord(pathItem)) {\n throw new Error(`Invalid Path Item Object: ${path}`);\n }\n\n const operation = resolver.deref(pathItem[method]);\n if (!isRecord(operation)) {\n throw new Error(`Operation not found: ${method.toUpperCase()} ${path}`);\n }\n\n const mergedParameters = mergeParameters(\n pathItem.parameters,\n operation.parameters,\n resolver,\n );\n\n const parameters: NormalizedParameter[] = mergedParameters.map(\n (parameter) => {\n const name = nonBlankString(parameter.name);\n const location = nonBlankString(parameter.in)?.toLowerCase();\n\n if (!name || !location) {\n throw new TypeError(\"Resolved parameter must define name and in\");\n }\n\n const parameterExample = own(parameter, \"example\")\n ? parameter.example\n : undefined;\n\n return {\n name,\n in: location,\n value: firstDefined(\n parameterExample,\n readFirstExampleValue(parameter.examples, resolver),\n example(parameter.schema, resolver),\n ),\n style: nonBlankString(parameter.style),\n explode:\n typeof parameter.explode === \"boolean\"\n ? parameter.explode\n : undefined,\n allowReserved:\n typeof parameter.allowReserved === \"boolean\"\n ? parameter.allowReserved\n : undefined,\n };\n },\n );\n\n const requestBody = resolver.deref(operation.requestBody);\n const chosen = isRecord(requestBody)\n ? pickContent(requestBody.content)\n : undefined;\n\n const bodyContext: ExampleGenContext = {\n isRequestBody: true,\n isResponse: false,\n };\n\n let body:\n | {\n mediaType: string;\n value: unknown;\n encoding?: unknown;\n }\n | undefined;\n\n if (chosen) {\n const mediaTypeObject = resolver.deref(chosen[1]);\n\n body = {\n mediaType: chosen[0],\n value: readExampleForMediaType(mediaTypeObject, resolver, bodyContext),\n encoding: isRecord(mediaTypeObject)\n ? mediaTypeObject.encoding\n : undefined,\n };\n }\n\n const security = normalizeSecurity(\n root,\n operation,\n resolver,\n options.securityValues,\n );\n\n const baseUrl = resolveBaseUrl(options.serverUrl, operation, pathItem, root);\n\n return {\n preWarnings,\n method: method.toUpperCase(),\n baseUrl,\n path,\n parameters,\n headers: parameters.filter((parameter) => parameter.in === \"header\"),\n body,\n security,\n };\n}\n","import {\n DEFAULT_BINARY_MEDIA_TYPE,\n DEFAULT_FILE_NAME,\n DEFAULT_FILE_PATH,\n bodyText,\n compile,\n fileComment,\n form,\n hasFormBody,\n hasJsonBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n mediaTypeOf,\n normalizeMethod,\n requiresRequestBody,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { FileValue, RequestIR } from \"../../types\";\n\nfunction escapeCString(value: unknown): string {\n const text = String(value);\n let escaped = '\"';\n\n for (let index = 0; index < text.length; index += 1) {\n const code = text.charCodeAt(index);\n\n switch (code) {\n case 0x08:\n escaped += \"\\\\b\";\n break;\n case 0x09:\n escaped += \"\\\\t\";\n break;\n case 0x0a:\n escaped += \"\\\\n\";\n break;\n case 0x0c:\n escaped += \"\\\\f\";\n break;\n case 0x0d:\n escaped += \"\\\\r\";\n break;\n case 0x22:\n escaped += '\\\\\"';\n break;\n case 0x5c:\n escaped += \"\\\\\\\\\";\n break;\n default:\n if (code < 0x20 || code === 0x7f) {\n escaped += `\\\\${code.toString(8).padStart(3, \"0\")}`;\n } else {\n escaped += text[index];\n }\n }\n }\n\n return `${escaped}\"`;\n}\n\nfunction nonBlankString(value: unknown, fallback: string): string {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : fallback;\n}\n\nfunction safeComment(value: unknown): string {\n return String(value)\n .replace(/[\\r\\n\\u2028\\u2029]+/g, \" \")\n .replace(/[\\u0000-\\u0008\\u000b\\u000c\\u000e-\\u001f\\u007f]+/g, \" \")\n .replace(/\\*\\//g, \"* /\");\n}\n\nfunction multipartText(value: unknown): string {\n if (typeof value === \"string\") return value;\n if (value == null) return \"\";\n\n if (\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n\n try {\n return JSON.stringify(value) ?? String(value);\n } catch {\n return String(value);\n }\n}\n\nfunction slistAppend(variable: string, value: string): string[] {\n return [\n ` ${variable} = curl_slist_append(${variable}, ${escapeCString(value)});`,\n ` if (!${variable}) {`,\n ` fprintf(stderr, \"Failed to allocate request headers\\\\n\");`,\n ` exit_code = 1;`,\n ` goto cleanup;`,\n ` }`,\n ];\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const mustHaveBody = requiresRequestBody(method);\n const multipart = Boolean(body) && canHaveBody && hasMultipartBody(request);\n const hasGeneratedBody = canHaveBody && (Boolean(body) || mustHaveBody);\n\n const comments: string[] = [\n \"/* Requires libcurl development headers and library. */\",\n \"/* Build: cc example.c -o example $(pkg-config --cflags --libs libcurl) */\",\n \"/* Proxy and TLS trust settings may be read from the environment. */\",\n ];\n\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n if (\n hasGeneratedBody &&\n (isContentLengthHeader(name) || isTransferEncodingHeader(name))\n ) {\n return false;\n }\n\n if (multipart && isContentTypeHeader(name)) {\n return false;\n }\n\n if (hasGeneratedBody && !multipart && body && isContentTypeHeader(name)) {\n return false;\n }\n\n return true;\n });\n\n const headerSetup: string[] = [];\n for (const [name, value] of headers) {\n headerSetup.push(\n ...slistAppend(\"headers\", `${String(name)}: ${String(value)}`),\n );\n }\n\n const bodySetup: string[] = [];\n let usesMime = false;\n\n if (multipart && body) {\n usesMime = true;\n\n toKeyValueBody(body.value).forEach((entry, index) => {\n const fieldName = String(entry.name);\n const part = `part${index}`;\n\n bodySetup.push(\n ` curl_mimepart *${part} = curl_mime_addpart(mime);`,\n ` if (!${part}) {`,\n ` fprintf(stderr, \"Failed to allocate multipart field\\\\n\");`,\n ` exit_code = 1;`,\n ` goto cleanup;`,\n ` }`,\n ` if (curl_mime_name(${part}, ${escapeCString(fieldName)}) != CURLE_OK) {`,\n ` fprintf(stderr, \"Failed to set multipart field name\\\\n\");`,\n ` exit_code = 1;`,\n ` goto cleanup;`,\n ` }`,\n );\n\n if (entry.file && isFileValue(entry.value)) {\n const fileValue: FileValue = entry.value;\n const path = nonBlankString(fileValue.path, DEFAULT_FILE_PATH);\n const name = nonBlankString(fileValue.name, DEFAULT_FILE_NAME);\n const contentType = nonBlankString(\n fileValue.contentType,\n DEFAULT_BINARY_MEDIA_TYPE,\n );\n\n if (\n typeof fileValue.path !== \"string\" ||\n fileValue.path.trim().length === 0\n ) {\n comments.push(`/* ${safeComment(fileComment(path, fieldName))} */`);\n }\n\n bodySetup.push(\n ` if (curl_mime_filedata(${part}, ${escapeCString(path)}) != CURLE_OK ||`,\n ` curl_mime_filename(${part}, ${escapeCString(name)}) != CURLE_OK ||`,\n ` curl_mime_type(${part}, ${escapeCString(contentType)}) != CURLE_OK) {`,\n ` fprintf(stderr, \"Failed to configure multipart file\\\\n\");`,\n ` exit_code = 1;`,\n ` goto cleanup;`,\n ` }`,\n );\n } else {\n bodySetup.push(\n ` if (curl_mime_data(${part}, ${escapeCString(multipartText(entry.value))}, CURL_ZERO_TERMINATED) != CURLE_OK) {`,\n ` fprintf(stderr, \"Failed to configure multipart field\\\\n\");`,\n ` exit_code = 1;`,\n ` goto cleanup;`,\n ` }`,\n );\n }\n });\n } else if (hasGeneratedBody) {\n const isForm = Boolean(body) && hasFormBody(request);\n const isJson = Boolean(body) && hasJsonBody(request);\n const payload = body ? (isForm ? form(body.value) : bodyText(request)) : \"\";\n\n const fallbackMediaType = isForm\n ? \"application/x-www-form-urlencoded\"\n : isJson\n ? \"application/json\"\n : \"text/plain\";\n\n const mediaType = body\n ? mediaTypeOf(request, fallbackMediaType)\n : fallbackMediaType;\n\n bodySetup.push(\n ...slistAppend(\"headers\", `Content-Type: ${mediaType}`),\n ` curl_easy_setopt(curl, CURLOPT_POSTFIELDS, ${escapeCString(payload)});`,\n \" curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE_LARGE, (curl_off_t)-1);\",\n ); //Cannot find name 'Buffer'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node` and then add 'node' to the types field in your tsconfig.ts(2591)\n }\n\n return [\n \"#include <curl/curl.h>\",\n \"#include <stdio.h>\",\n \"\",\n ...comments,\n \"\",\n \"int main(void) {\",\n \" int exit_code = 0;\",\n \" CURLcode result;\",\n \" long status = 0;\",\n \" struct curl_slist *headers = NULL;\",\n ...(usesMime ? [\" curl_mime *mime = NULL;\"] : []),\n \"\",\n \" if (curl_global_init(CURL_GLOBAL_DEFAULT) != CURLE_OK) {\",\n ' fprintf(stderr, \"Failed to initialize libcurl\\\\n\");',\n \" return 1;\",\n \" }\",\n \"\",\n \" CURL *curl = curl_easy_init();\",\n \" if (!curl) {\",\n ' fprintf(stderr, \"Failed to create libcurl handle\\\\n\");',\n \" curl_global_cleanup();\",\n \" return 1;\",\n \" }\",\n ...(usesMime\n ? [\n \"\",\n \" mime = curl_mime_init(curl);\",\n \" if (!mime) {\",\n ' fprintf(stderr, \"Failed to create multipart body\\\\n\");',\n \" exit_code = 1;\",\n \" goto cleanup;\",\n \" }\",\n ]\n : []),\n \"\",\n ` curl_easy_setopt(curl, CURLOPT_URL, ${escapeCString(compiled.url)});`,\n ` curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, ${escapeCString(method)});`,\n \" curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 30L);\",\n \" curl_easy_setopt(curl, CURLOPT_TIMEOUT, 30L);\",\n \" curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);\",\n \" curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L);\",\n \" curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, fwrite);\",\n \" curl_easy_setopt(curl, CURLOPT_WRITEDATA, stdout);\",\n \"\",\n ...headerSetup,\n ...(headerSetup.length > 0 ? [\"\"] : []),\n ...bodySetup,\n ...(bodySetup.length > 0 ? [\"\"] : []),\n ...(usesMime ? [\" curl_easy_setopt(curl, CURLOPT_MIMEPOST, mime);\"] : []),\n \" if (headers) {\",\n \" curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);\",\n \" }\",\n \"\",\n \" result = curl_easy_perform(curl);\",\n \" if (result != CURLE_OK) {\",\n ' fprintf(stderr, \"Request failed: %s\\\\n\", curl_easy_strerror(result));',\n \" exit_code = 1;\",\n \" goto cleanup;\",\n \" }\",\n \"\",\n \" if (curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &status) != CURLE_OK) {\",\n ' fprintf(stderr, \"Failed to read HTTP status\\\\n\");',\n \" exit_code = 1;\",\n \" goto cleanup;\",\n \" }\",\n \"\",\n \" if (status < 200 || status >= 300) {\",\n ' fprintf(stderr, \"\\\\nHTTP request failed with status %ld\\\\n\", status);',\n \" exit_code = 1;\",\n \" }\",\n \"\",\n \"cleanup:\",\n ...(usesMime ? [\" curl_mime_free(mime);\"] : []),\n \" curl_slist_free_all(headers);\",\n \" curl_easy_cleanup(curl);\",\n \" curl_global_cleanup();\",\n \" return exit_code;\",\n \"}\",\n ].join(\"\\n\");\n}\n","import {\n DEFAULT_BINARY_MEDIA_TYPE,\n DEFAULT_FILE_NAME,\n DEFAULT_FILE_PATH,\n bodyText,\n compile,\n escapeCSharp,\n fileComment,\n form,\n hasFormBody,\n hasJsonBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n mediaTypeOf,\n normalizeMethod,\n requiresRequestBody,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { FileValue, RequestIR } from \"../../types\";\n\nfunction nonBlankString(value: unknown, fallback: string): string {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : fallback;\n}\n\nfunction safeComment(value: unknown): string {\n return String(value)\n .replace(/[\\r\\n\\u2028\\u2029]+/g, \" \")\n .replace(/[\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F]/g, \"\");\n}\n\nfunction multipartText(value: unknown): string {\n if (typeof value === \"string\") return value;\n if (value === null || value === undefined) return \"\";\n\n if (\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n\n try {\n const serialized = JSON.stringify(value);\n return serialized === undefined ? String(value) : serialized;\n } catch {\n return String(value);\n }\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const multipart = Boolean(body) && canHaveBody && hasMultipartBody(request);\n const generatedBody =\n Boolean(body && canHaveBody) || (!body && requiresRequestBody(method));\n\n const setupLines: string[] = [];\n const disposalLines: string[] = [];\n let contentAssigned = false;\n\n if (body && multipart) {\n setupLines.push(\n \" var multipart = new MultipartFormDataContent();\",\n );\n disposalLines.push(\" multipart.Dispose();\");\n\n toKeyValueBody(body.value).forEach((item, index) => {\n const fieldName = String(item.name);\n\n if (item.file && isFileValue(item.value)) {\n const fileValue: FileValue = item.value;\n const filePath = nonBlankString(fileValue.path, DEFAULT_FILE_PATH);\n const fileName = nonBlankString(fileValue.name, DEFAULT_FILE_NAME);\n const contentType = nonBlankString(\n fileValue.contentType,\n DEFAULT_BINARY_MEDIA_TYPE,\n );\n const streamVariable = `fileStream${index}`;\n const contentVariable = `fileContent${index}`;\n\n if (\n typeof fileValue.path !== \"string\" ||\n fileValue.path.trim().length === 0\n ) {\n setupLines.push(\n ` // ${safeComment(fileComment(filePath, fieldName))}`,\n );\n }\n\n setupLines.push(\n ` var ${streamVariable} = File.OpenRead(${escapeCSharp(filePath)});`,\n ` var ${contentVariable} = new StreamContent(${streamVariable});`,\n ` ${contentVariable}.Headers.ContentType =`,\n ` MediaTypeHeaderValue.Parse(${escapeCSharp(contentType)});`,\n \" multipart.Add(\",\n ` ${contentVariable},`,\n ` ${escapeCSharp(fieldName)},`,\n ` ${escapeCSharp(fileName)}`,\n \" );\",\n );\n } else {\n setupLines.push(\n \" multipart.Add(\",\n ` new StringContent(${escapeCSharp(multipartText(item.value))}),`,\n ` ${escapeCSharp(fieldName)}`,\n \" );\",\n );\n }\n });\n\n setupLines.push(\" message.Content = multipart;\");\n contentAssigned = true;\n } else if (body && canHaveBody) {\n const isForm = hasFormBody(request);\n const isJson = hasJsonBody(request);\n const payload = isForm ? form(body.value) : bodyText(request);\n const fallbackMediaType = isForm\n ? \"application/x-www-form-urlencoded\"\n : isJson\n ? \"application/json\"\n : \"text/plain\";\n const mediaType = mediaTypeOf(request, fallbackMediaType);\n\n setupLines.push(\n \" message.Content = new StringContent(\",\n ` ${escapeCSharp(payload)},`,\n \" Encoding.UTF8,\",\n ` ${escapeCSharp(mediaType)}`,\n \" );\",\n );\n contentAssigned = true;\n } else if (!body && requiresRequestBody(method)) {\n setupLines.push(\n \" message.Content = new ByteArrayContent(Array.Empty<byte>());\",\n );\n contentAssigned = true;\n }\n\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n return !(\n generatedBody &&\n (isContentLengthHeader(name) ||\n isTransferEncodingHeader(name) ||\n (contentAssigned && isContentTypeHeader(name)))\n );\n });\n\n const headerLines = headers.flatMap(([rawName, rawValue], index) => {\n const name = String(rawName);\n const value = String(rawValue);\n const variable = `headerAdded${index}`;\n\n return [\n ` var ${variable} = message.Headers.TryAddWithoutValidation(`,\n ` ${escapeCSharp(name)},`,\n ` ${escapeCSharp(value)}`,\n \" );\",\n ...(contentAssigned\n ? [\n ` if (!${variable})`,\n \" {\",\n ` ${variable} = message.Content!.Headers.TryAddWithoutValidation(`,\n ` ${escapeCSharp(name)},`,\n ` ${escapeCSharp(value)}`,\n \" );\",\n \" }\",\n ]\n : []),\n ` if (!${variable})`,\n \" {\",\n ` Console.Error.WriteLine(${escapeCSharp(\n `Ignored invalid header: ${safeComment(name)}`,\n )});`,\n \" }\",\n ];\n });\n\n return [\n \"using System;\",\n \"using System.IO;\",\n \"using System.Net.Http;\",\n \"using System.Net.Http.Headers;\",\n \"using System.Text;\",\n \"using System.Threading;\",\n \"using System.Threading.Tasks;\",\n \"\",\n \"// Requires .NET 8 SDK or later.\",\n \"// Create and run with: dotnet new console && dotnet run\",\n \"// Standard HTTP proxy environment variables are honored.\",\n \"internal static class Program\",\n \"{\",\n \" private static async Task<int> Main()\",\n \" {\",\n \" using var client = new HttpClient\",\n \" {\",\n \" Timeout = TimeSpan.FromSeconds(30)\",\n \" };\",\n \"\",\n \" using var message = new HttpRequestMessage(\",\n ` new HttpMethod(${escapeCSharp(method)}),`,\n ` ${escapeCSharp(compiled.url)}`,\n \" );\",\n \"\",\n \" using var cancellation =\",\n \" new CancellationTokenSource(TimeSpan.FromSeconds(30));\",\n \"\",\n \" try\",\n \" {\",\n ...setupLines,\n ...(setupLines.length > 0 ? [\"\"] : []),\n ...headerLines,\n ...(headerLines.length > 0 ? [\"\"] : []),\n \" using var response = await client.SendAsync(\",\n \" message,\",\n \" HttpCompletionOption.ResponseHeadersRead,\",\n \" cancellation.Token\",\n \" );\",\n \" var responseText =\",\n \" await response.Content.ReadAsStringAsync(cancellation.Token);\",\n \"\",\n \" if (!response.IsSuccessStatusCode)\",\n \" {\",\n \" Console.Error.WriteLine(\",\n ' $\"HTTP {(int)response.StatusCode} \" +',\n ' $\"{response.ReasonPhrase}: {responseText}\"',\n \" );\",\n \" return 1;\",\n \" }\",\n \"\",\n \" Console.Write(responseText);\",\n \" return 0;\",\n \" }\",\n \" catch (OperationCanceledException exception)\",\n \" {\",\n ' Console.Error.WriteLine($\"Request timed out: {exception.Message}\");',\n \" return 1;\",\n \" }\",\n \" catch (Exception exception)\",\n \" {\",\n ' Console.Error.WriteLine($\"Request failed: {exception.Message}\");',\n \" return 1;\",\n \" }\",\n ...(disposalLines.length > 0\n ? [\" finally\", \" {\", ...disposalLines, \" }\"]\n : []),\n \" }\",\n \"}\",\n ].join(\"\\n\");\n}\n","import {\n DEFAULT_BINARY_MEDIA_TYPE,\n DEFAULT_FILE_NAME,\n DEFAULT_FILE_PATH,\n bodyText,\n compile,\n escapeCSharp,\n fileComment,\n form,\n hasFormBody,\n hasJsonBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n mediaTypeOf,\n normalizeMethod,\n requiresRequestBody,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { FileValue, RequestIR } from \"../../types\";\n\nfunction nonBlankString(value: unknown, fallback: string): string {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : fallback;\n}\n\nfunction safeComment(value: unknown): string {\n return String(value)\n .replace(/[\\r\\n\\u2028\\u2029]+/g, \" \")\n .replace(/[\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F]/g, \"\");\n}\n\nfunction multipartText(value: unknown): string {\n if (typeof value === \"string\") return value;\n if (value === null || value === undefined) return \"\";\n\n if (\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n\n try {\n const serialized = JSON.stringify(value);\n return serialized === undefined ? String(value) : serialized;\n } catch {\n return String(value);\n }\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const multipart = Boolean(body) && canHaveBody && hasMultipartBody(request);\n const generatedBody =\n Boolean(body && canHaveBody) || (!body && requiresRequestBody(method));\n\n const bodyLines: string[] = [];\n\n if (body && multipart) {\n toKeyValueBody(body.value).forEach((item) => {\n const fieldName = String(item.name);\n\n if (item.file && isFileValue(item.value)) {\n const fileValue: FileValue = item.value;\n const filePath = nonBlankString(fileValue.path, DEFAULT_FILE_PATH);\n const fileName = nonBlankString(fileValue.name, DEFAULT_FILE_NAME);\n const contentType = nonBlankString(\n fileValue.contentType,\n DEFAULT_BINARY_MEDIA_TYPE,\n );\n\n if (\n typeof fileValue.path !== \"string\" ||\n fileValue.path.trim().length === 0\n ) {\n bodyLines.push(\n ` // ${safeComment(fileComment(filePath, fieldName))}`,\n );\n }\n\n bodyLines.push(\n \" requestMessage.AddFile(\",\n ` ${escapeCSharp(fieldName)},`,\n ` ${escapeCSharp(filePath)},`,\n ` ${escapeCSharp(contentType)},`,\n ` ${escapeCSharp(fileName)}`,\n \" );\",\n );\n } else {\n bodyLines.push(\n \" requestMessage.AddParameter(\",\n ` ${escapeCSharp(fieldName)},`,\n ` ${escapeCSharp(multipartText(item.value))}`,\n \" );\",\n );\n }\n });\n } else if (body && canHaveBody) {\n const isForm = hasFormBody(request);\n const isJson = hasJsonBody(request);\n const payload = isForm ? form(body.value) : bodyText(request);\n const fallbackMediaType = isForm\n ? \"application/x-www-form-urlencoded\"\n : isJson\n ? \"application/json\"\n : \"text/plain\";\n const mediaType = mediaTypeOf(request, fallbackMediaType);\n\n bodyLines.push(\n \" requestMessage.AddStringBody(\",\n ` ${escapeCSharp(payload)},`,\n ` ContentType.FromMediaType(${escapeCSharp(mediaType)})`,\n \" );\",\n );\n } else if (!body && requiresRequestBody(method)) {\n bodyLines.push(\n \" requestMessage.AddStringBody(\",\n ' \"\",',\n \" ContentType.Binary\",\n \" );\",\n );\n }\n\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n return !(\n generatedBody &&\n (isContentLengthHeader(name) ||\n isTransferEncodingHeader(name) ||\n isContentTypeHeader(name))\n );\n });\n\n const headerLines = headers.map(\n ([name, value]) =>\n ` requestMessage.AddHeader(${escapeCSharp(\n String(name),\n )}, ${escapeCSharp(String(value))});`,\n );\n\n return [\n \"using System;\",\n \"using System.Threading;\",\n \"using System.Threading.Tasks;\",\n \"using RestSharp;\",\n \"\",\n \"// Requires .NET 8 and RestSharp 112.x.\",\n \"// Add the dependency with: dotnet add package RestSharp\",\n \"// Run with: dotnet run\",\n \"internal static class Program\",\n \"{\",\n \" private static async Task<int> Main()\",\n \" {\",\n \" var options = new RestClientOptions\",\n \" {\",\n ` BaseUrl = new Uri(${escapeCSharp(compiled.url)}),`,\n \" MaxTimeout = 30_000\",\n \" };\",\n \"\",\n \" using var client = new RestClient(options);\",\n \" var requestMessage = new RestRequest(\",\n ' resource: \"\",',\n ` method: new Method(${escapeCSharp(method)})`,\n \" );\",\n \"\",\n ...headerLines,\n ...(headerLines.length > 0 ? [\"\"] : []),\n ...bodyLines,\n ...(bodyLines.length > 0 ? [\"\"] : []),\n \" using var cancellation =\",\n \" new CancellationTokenSource(TimeSpan.FromSeconds(30));\",\n \"\",\n \" try\",\n \" {\",\n \" var response = await client.ExecuteAsync(\",\n \" requestMessage,\",\n \" cancellation.Token\",\n \" );\",\n \" var responseText = response.Content ?? string.Empty;\",\n \"\",\n \" if (!response.IsSuccessful)\",\n \" {\",\n \" Console.Error.WriteLine(\",\n ' $\"HTTP {(int)response.StatusCode} \" +',\n ' $\"{response.StatusDescription}: {responseText}\"',\n \" );\",\n \" return 1;\",\n \" }\",\n \"\",\n \" Console.Write(responseText);\",\n \" return 0;\",\n \" }\",\n \" catch (OperationCanceledException exception)\",\n \" {\",\n ' Console.Error.WriteLine($\"Request timed out: {exception.Message}\");',\n \" return 1;\",\n \" }\",\n \" catch (Exception exception)\",\n \" {\",\n ' Console.Error.WriteLine($\"Request failed: {exception.Message}\");',\n \" return 1;\",\n \" }\",\n \" }\",\n \"}\",\n ].join(\"\\n\");\n}\n","import {\n bodyText,\n compile,\n form,\n hasFormBody,\n hasJsonBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isTransferEncodingHeader,\n mediaTypeOf,\n normalizeMethod,\n requiresRequestBody,\n supportsRequestBody,\n} from \"../common\";\nimport type { RequestIR } from \"../../types\";\nimport { escapeClojure } from \"../../core/helpers\";\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const generatedBody =\n Boolean(body && canHaveBody) || (!body && requiresRequestBody(method));\n\n let payload: string | undefined;\n let contentType: string | undefined;\n\n if (body && canHaveBody) {\n const isForm = hasFormBody(request);\n const isJson = hasJsonBody(request);\n\n payload = isForm ? form(body.value) : bodyText(request);\n contentType = mediaTypeOf(\n request,\n isForm\n ? \"application/x-www-form-urlencoded\"\n : isJson\n ? \"application/json\"\n : \"text/plain\",\n );\n } else if (!body && requiresRequestBody(method)) {\n payload = \"\";\n contentType = \"application/octet-stream\";\n }\n\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n return !(\n generatedBody &&\n (isContentLengthHeader(name) ||\n isTransferEncodingHeader(name) ||\n isContentTypeHeader(name))\n );\n });\n\n const headerEntries = headers.map(\n ([name, value]) =>\n ` ${escapeClojure(String(name))} ${escapeClojure(String(value))}`,\n );\n\n if (contentType !== undefined) {\n headerEntries.push(` \"Content-Type\" ${escapeClojure(contentType)}`);\n }\n\n return [\n \";; Requires Clojure 1.11+ and clj-http 3.13.0.\",\n \";; Run with clj-http on the classpath.\",\n \"(require '[clj-http.client :as client])\",\n \"\",\n \"(let [response\",\n \" (try\",\n \" (client/request\",\n \" {:method\",\n ` (keyword ${escapeClojure(method.toLowerCase())})`,\n ` :url ${escapeClojure(compiled.url)}`,\n \" :headers\",\n \" {\",\n ...headerEntries,\n \" }\",\n ...(payload !== undefined\n ? [` :body ${escapeClojure(payload)}`]\n : []),\n \" :socket-timeout 30000\",\n \" :connection-timeout 30000\",\n \" :throw-exceptions false\",\n \" :as :text})\",\n \" (catch Exception exception\",\n \" (binding [*out* *err*]\",\n ' (println \"Request failed:\" (.getMessage exception)))',\n \" (System/exit 1)))]\",\n \" (if (<= 200 (:status response) 299)\",\n ' (print (or (:body response) \"\"))',\n \" (do\",\n \" (binding [*out* *err*]\",\n ' (println (str \"HTTP \"',\n \" (:status response)\",\n ' \": \"',\n ' (or (:body response) \"\"))))',\n \" (System/exit 1))))\",\n ].join(\"\\n\");\n}\n","import {\n bodyText,\n compile,\n escapeJs,\n form,\n hasFormBody,\n hasJsonBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isTransferEncodingHeader,\n mediaTypeOf,\n normalizeMethod,\n requiresRequestBody,\n supportsRequestBody,\n} from \"../common\";\nimport type { RequestIR } from \"../../types\";\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const generatedBody =\n Boolean(body && canHaveBody) || (!body && requiresRequestBody(method));\n\n let payload: string | undefined;\n let contentType: string | undefined;\n\n if (body && canHaveBody) {\n const isForm = hasFormBody(request);\n const isJson = hasJsonBody(request);\n\n payload = isForm ? form(body.value) : bodyText(request);\n contentType = mediaTypeOf(\n request,\n isForm\n ? \"application/x-www-form-urlencoded\"\n : isJson\n ? \"application/json\"\n : \"text/plain\",\n );\n } else if (!body && requiresRequestBody(method)) {\n payload = \"\";\n }\n\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n return !(\n generatedBody &&\n (isContentLengthHeader(name) ||\n isTransferEncodingHeader(name) ||\n (contentType !== undefined && isContentTypeHeader(name)))\n );\n });\n\n const headerLines = headers.map(\n ([name, value]) =>\n ` request.headers.add(${escapeJs(String(name))}, ${escapeJs(\n String(value),\n )});`,\n );\n\n if (contentType !== undefined) {\n headerLines.push(\n ` request.headers[${escapeJs(\"Content-Type\")}] = ${escapeJs(\n contentType,\n )};`,\n );\n }\n\n return [\n \"import 'dart:async';\",\n \"import 'dart:io';\",\n \"\",\n \"import 'package:http/http.dart' as http;\",\n \"\",\n \"// Requires Dart 3 and package:http.\",\n \"// Add the dependency with: dart pub add http\",\n \"// Run with: dart run\",\n \"Future<void> main() async {\",\n \" final client = http.Client();\",\n \"\",\n \" try {\",\n ` final request = http.Request(${escapeJs(method)}, Uri.parse(${escapeJs(\n compiled.url,\n )}));`,\n ...headerLines.map((line) => ` ${line}`),\n ...(payload !== undefined\n ? [` request.body = ${escapeJs(payload)};`]\n : []),\n \"\",\n \" final streamedResponse = await client\",\n \" .send(request)\",\n \" .timeout(const Duration(seconds: 30));\",\n \" final responseText = await streamedResponse.stream\",\n \" .bytesToString()\",\n \" .timeout(const Duration(seconds: 30));\",\n \"\",\n \" if (streamedResponse.statusCode < 200 ||\",\n \" streamedResponse.statusCode >= 300) {\",\n \" stderr.writeln(\",\n \" 'HTTP ${streamedResponse.statusCode} '\",\n \" '${streamedResponse.reasonPhrase ?? ''}: $responseText',\",\n \" );\",\n \" exitCode = 1;\",\n \" return;\",\n \" }\",\n \"\",\n \" stdout.write(responseText);\",\n \" } on TimeoutException catch (exception) {\",\n \" stderr.writeln('Request timed out: $exception');\",\n \" exitCode = 1;\",\n \" } on Object catch (exception, stackTrace) {\",\n \" stderr.writeln('Request failed: $exception');\",\n \" stderr.writeln(stackTrace);\",\n \" exitCode = 1;\",\n \" } finally {\",\n \" client.close();\",\n \" }\",\n \"}\",\n ].join(\"\\n\");\n}","import {\n DEFAULT_BINARY_MEDIA_TYPE,\n DEFAULT_FILE_NAME,\n DEFAULT_FILE_PATH,\n bodyText,\n compile,\n escapeFSharp,\n fileComment,\n form,\n hasFormBody,\n hasJsonBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n mediaTypeOf,\n normalizeMethod,\n requiresRequestBody,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { FileValue, RequestIR } from \"../../types\";\n\nfunction nonBlankString(value: unknown, fallback: string): string {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : fallback;\n}\n\nfunction safeComment(value: unknown): string {\n return String(value)\n .replace(/[\\r\\n\\u2028\\u2029]+/g, \" \")\n .replace(/[\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F]/g, \"\");\n}\n\nfunction multipartText(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n\n if (value === null || value === undefined) {\n return \"\";\n }\n\n if (\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n\n try {\n const serialized = JSON.stringify(value);\n return serialized === undefined ? String(value) : serialized;\n } catch {\n return String(value);\n }\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const multipart = Boolean(body) && canHaveBody && hasMultipartBody(request);\n const generatedBody =\n Boolean(body && canHaveBody) || (!body && requiresRequestBody(method));\n\n const setupLines: string[] = [];\n const cleanupLines: string[] = [];\n let contentLines: string[] = [];\n\n if (body && multipart) {\n setupLines.push(\" use multipart = new MultipartFormDataContent()\");\n\n toKeyValueBody(body.value).forEach((item, index) => {\n const fieldName = String(item.name);\n\n if (item.file && isFileValue(item.value)) {\n const fileValue: FileValue = item.value;\n const filePath = nonBlankString(fileValue.path, DEFAULT_FILE_PATH);\n const fileName = nonBlankString(fileValue.name, DEFAULT_FILE_NAME);\n const contentType = nonBlankString(\n fileValue.contentType,\n DEFAULT_BINARY_MEDIA_TYPE,\n );\n\n const streamVariable = `fileStream${index}`;\n const contentVariable = `fileContent${index}`;\n\n if (\n typeof fileValue.path !== \"string\" ||\n fileValue.path.trim().length === 0\n ) {\n setupLines.push(\n ` // ${safeComment(fileComment(filePath, fieldName))}`,\n );\n }\n\n setupLines.push(\n ` let ${streamVariable} = File.OpenRead(${escapeFSharp(filePath)})`,\n ` let ${contentVariable} = new StreamContent(${streamVariable})`,\n ` ${contentVariable}.Headers.ContentType <-`,\n ` MediaTypeHeaderValue.Parse(${escapeFSharp(contentType)})`,\n ` multipart.Add(`,\n ` ${contentVariable},`,\n ` ${escapeFSharp(fieldName)},`,\n ` ${escapeFSharp(fileName)}`,\n ` )`,\n );\n\n cleanupLines.unshift(\n ` ${contentVariable}.Dispose()`,\n ` ${streamVariable}.Dispose()`,\n );\n } else {\n const contentVariable = `fieldContent${index}`;\n\n setupLines.push(\n ` let ${contentVariable} =`,\n ` new StringContent(${escapeFSharp(multipartText(item.value))})`,\n ` multipart.Add(${contentVariable}, ${escapeFSharp(fieldName)})`,\n );\n }\n });\n\n contentLines = [\" request.Content <- multipart\"];\n } else if (body && canHaveBody) {\n const isForm = hasFormBody(request);\n const isJson = hasJsonBody(request);\n const payload = isForm ? form(body.value) : bodyText(request);\n const fallbackMediaType = isForm\n ? \"application/x-www-form-urlencoded\"\n : isJson\n ? \"application/json\"\n : \"text/plain\";\n const mediaType = mediaTypeOf(request, fallbackMediaType);\n\n contentLines = [\n \" request.Content <-\",\n ` new StringContent(`,\n ` ${escapeFSharp(payload)},`,\n \" Encoding.UTF8,\",\n ` ${escapeFSharp(mediaType)}`,\n \" )\",\n ];\n } else if (!body && requiresRequestBody(method)) {\n contentLines = [\n \" request.Content <- new ByteArrayContent(Array.empty<byte>)\",\n ];\n }\n\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n return !(\n generatedBody &&\n (isContentLengthHeader(name) ||\n isTransferEncodingHeader(name) ||\n isContentTypeHeader(name))\n );\n });\n\n const headerLines = headers.flatMap(([rawName, rawValue], index) => {\n const name = String(rawName);\n const value = String(rawValue);\n const resultVariable = `headerAdded${index}`;\n\n return [\n ` let ${resultVariable} =`,\n ` if isNull request.Content then`,\n ` request.Headers.TryAddWithoutValidation(`,\n ` ${escapeFSharp(name)},`,\n ` ${escapeFSharp(value)}`,\n \" )\",\n \" else\",\n ` request.Headers.TryAddWithoutValidation(`,\n ` ${escapeFSharp(name)},`,\n ` ${escapeFSharp(value)}`,\n \" )\",\n ` || request.Content.Headers.TryAddWithoutValidation(`,\n ` ${escapeFSharp(name)},`,\n ` ${escapeFSharp(value)}`,\n \" )\",\n ` if not ${resultVariable} then`,\n ` eprintfn ${escapeFSharp(`Ignored invalid header: ${safeComment(name)}`)}`,\n ];\n });\n\n return [\n \"open System\",\n \"open System.IO\",\n \"open System.Net.Http\",\n \"open System.Net.Http.Headers\",\n \"open System.Text\",\n \"\",\n \"// Requires .NET 8 SDK or later.\",\n \"// Run with: dotnet run\",\n \"// Standard HTTP proxy environment variables are honored.\",\n \"[<EntryPoint>]\",\n \"let main _ =\",\n \" use client = new HttpClient()\",\n \" client.Timeout <- TimeSpan.FromSeconds(30.0)\",\n \"\",\n \" use request =\",\n \" new HttpRequestMessage(\",\n ` new HttpMethod(${escapeFSharp(method)}),`,\n ` ${escapeFSharp(compiled.url)}`,\n \" )\",\n \"\",\n ...setupLines,\n ...(setupLines.length > 0 ? [\"\"] : []),\n ...contentLines,\n ...(contentLines.length > 0 ? [\"\"] : []),\n ...headerLines,\n ...(headerLines.length > 0 ? [\"\"] : []),\n \" try\",\n \" use response = client.Send(request)\",\n \" let responseText = response.Content.ReadAsStringAsync().Result\",\n \"\",\n \" if not response.IsSuccessStatusCode then\",\n \" eprintfn\",\n ' \"HTTP %d %s: %s\"',\n \" (int response.StatusCode)\",\n \" response.ReasonPhrase\",\n \" responseText\",\n \" 1\",\n \" else\",\n ' printfn \"%s\" responseText',\n \" 0\",\n \" with exception ->\",\n ' eprintfn \"Request failed: %s\" exception.Message',\n \" 1\",\n ...(cleanupLines.length > 0 ? [\" finally\", ...cleanupLines] : []),\n ].join(\"\\n\");\n}\n","import {\n DEFAULT_BINARY_MEDIA_TYPE,\n DEFAULT_FILE_NAME,\n DEFAULT_FILE_PATH,\n bodyText,\n compile,\n escapeGo,\n fileComment,\n form,\n hasFormBody,\n hasJsonBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n mediaTypeOf,\n normalizeMethod,\n requiresRequestBody,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { FileValue, RequestIR } from \"../../types\";\n\nfunction nonBlankString(value: unknown, fallback: string): string {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : fallback;\n}\n\nfunction safeComment(value: unknown): string {\n return String(value)\n .replace(/[\\r\\n\\u2028\\u2029]+/g, \" \")\n .replace(/[\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F]/g, \"\");\n}\n\nfunction multipartText(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n\n if (value === null || value === undefined) {\n return \"\";\n }\n\n if (\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n\n try {\n const serialized = JSON.stringify(value);\n return serialized === undefined ? String(value) : serialized;\n } catch {\n return String(value);\n }\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const multipart = Boolean(body) && canHaveBody && hasMultipartBody(request);\n const generatedBody =\n Boolean(body && canHaveBody) || (!body && requiresRequestBody(method));\n\n const imports = new Set<string>([\n '\"context\"',\n '\"fmt\"',\n '\"io\"',\n '\"net/http\"',\n '\"os\"',\n '\"time\"',\n ]);\n\n const setupLines: string[] = [];\n let requestBodyExpression = \"nil\";\n let generatedContentType: string | undefined;\n\n if (body && multipart) {\n imports.add('\"bytes\"');\n imports.add('\"mime/multipart\"');\n imports.add('\"net/textproto\"');\n\n setupLines.push(\n \" var bodyBuffer bytes.Buffer\",\n \" multipartWriter := multipart.NewWriter(&bodyBuffer)\",\n );\n\n toKeyValueBody(body.value).forEach((item, index) => {\n const fieldName = String(item.name);\n\n if (item.file && isFileValue(item.value)) {\n const fileValue: FileValue = item.value;\n const filePath = nonBlankString(fileValue.path, DEFAULT_FILE_PATH);\n const fileName = nonBlankString(fileValue.name, DEFAULT_FILE_NAME);\n const contentType = nonBlankString(\n fileValue.contentType,\n DEFAULT_BINARY_MEDIA_TYPE,\n );\n\n const fileVariable = `uploadFile${index}`;\n const partVariable = `filePart${index}`;\n const headerVariable = `fileHeader${index}`;\n\n if (\n typeof fileValue.path !== \"string\" ||\n fileValue.path.trim().length === 0\n ) {\n setupLines.push(\n ` // ${safeComment(fileComment(filePath, fieldName))}`,\n );\n }\n\n setupLines.push(\n ` ${fileVariable}, err := os.Open(${escapeGo(filePath)})`,\n \" if err != nil {\",\n ` fmt.Fprintf(os.Stderr, ${escapeGo(\n `open multipart file ${fieldName}: %v\\n`,\n )}, err)`,\n \" os.Exit(1)\",\n \" }\",\n \"\",\n ` ${headerVariable} := make(textproto.MIMEHeader)`,\n ` ${headerVariable}.Set(`,\n ' \"Content-Disposition\",',\n \" mime.FormatMediaType(\",\n ' \"form-data\",',\n \" map[string]string{\",\n ` \"name\": ${escapeGo(fieldName)},`,\n ` \"filename\": ${escapeGo(fileName)},`,\n \" },\",\n \" ),\",\n \" )\",\n ` ${headerVariable}.Set(\"Content-Type\", ${escapeGo(contentType)})`,\n ` ${partVariable}, err := multipartWriter.CreatePart(${headerVariable})`,\n \" if err != nil {\",\n ` _ = ${fileVariable}.Close()`,\n ` fmt.Fprintf(os.Stderr, ${escapeGo(\n `create multipart file part ${fieldName}: %v\\n`,\n )}, err)`,\n \" os.Exit(1)\",\n \" }\",\n ` if _, err := io.Copy(${partVariable}, ${fileVariable}); err != nil {`,\n ` _ = ${fileVariable}.Close()`,\n ` fmt.Fprintf(os.Stderr, ${escapeGo(\n `copy multipart file ${fieldName}: %v\\n`,\n )}, err)`,\n \" os.Exit(1)\",\n \" }\",\n ` if err := ${fileVariable}.Close(); err != nil {`,\n ` fmt.Fprintf(os.Stderr, ${escapeGo(\n `close multipart file ${fieldName}: %v\\n`,\n )}, err)`,\n \" os.Exit(1)\",\n \" }\",\n );\n\n imports.add('\"mime\"');\n } else {\n setupLines.push(\n ` if err := multipartWriter.WriteField(`,\n ` ${escapeGo(fieldName)},`,\n ` ${escapeGo(multipartText(item.value))},`,\n \" ); err != nil {\",\n ` fmt.Fprintf(os.Stderr, ${escapeGo(\n `write multipart field ${fieldName}: %v\\n`,\n )}, err)`,\n \" os.Exit(1)\",\n \" }\",\n );\n }\n });\n\n setupLines.push(\n \" if err := multipartWriter.Close(); err != nil {\",\n ' fmt.Fprintf(os.Stderr, \"close multipart writer: %v\\\\n\", err)',\n \" os.Exit(1)\",\n \" }\",\n );\n\n requestBodyExpression = \"&bodyBuffer\";\n generatedContentType = \"multipartWriter.FormDataContentType()\";\n } else if (body && canHaveBody) {\n imports.add('\"strings\"');\n\n const isForm = hasFormBody(request);\n const isJson = hasJsonBody(request);\n const payload = isForm ? form(body.value) : bodyText(request);\n const fallbackMediaType = isForm\n ? \"application/x-www-form-urlencoded\"\n : isJson\n ? \"application/json\"\n : \"text/plain\";\n\n requestBodyExpression = `strings.NewReader(${escapeGo(payload)})`;\n generatedContentType = escapeGo(mediaTypeOf(request, fallbackMediaType));\n } else if (!body && requiresRequestBody(method)) {\n imports.add('\"http\"');\n requestBodyExpression = \"http.NoBody\";\n }\n\n const filteredHeaders = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n if (\n generatedBody &&\n (isContentLengthHeader(name) ||\n isTransferEncodingHeader(name) ||\n isContentTypeHeader(name))\n ) {\n return false;\n }\n\n return true;\n });\n\n const headerLines = filteredHeaders.map(\n ([name, value]) =>\n ` req.Header.Add(${escapeGo(String(name))}, ${escapeGo(String(value))})`,\n );\n\n if (generatedContentType) {\n headerLines.push(\n ` req.Header.Set(\"Content-Type\", ${generatedContentType})`,\n );\n }\n\n return [\n \"package main\",\n \"\",\n \"// Requires Go 1.22 or later.\",\n \"// Run with: go run .\",\n \"// Standard HTTP proxy environment variables are honored.\",\n \"import (\",\n ...[...imports].sort().map((item) => ` ${item}`),\n \")\",\n \"\",\n \"func main() {\",\n \" ctx, cancel := context.WithTimeout(\",\n \" context.Background(),\",\n \" 30*time.Second,\",\n \" )\",\n \" defer cancel()\",\n \"\",\n ...setupLines,\n ...(setupLines.length > 0 ? [\"\"] : []),\n \" req, err := http.NewRequestWithContext(\",\n \" ctx,\",\n ` ${escapeGo(method)},`,\n ` ${escapeGo(compiled.url)},`,\n ` ${requestBodyExpression},`,\n \" )\",\n \" if err != nil {\",\n ' fmt.Fprintf(os.Stderr, \"create request: %v\\\\n\", err)',\n \" os.Exit(1)\",\n \" }\",\n ...headerLines,\n \"\",\n \" client := &http.Client{\",\n \" Timeout: 30 * time.Second,\",\n \" }\",\n \"\",\n \" resp, err := client.Do(req)\",\n \" if err != nil {\",\n ' fmt.Fprintf(os.Stderr, \"perform request: %v\\\\n\", err)',\n \" os.Exit(1)\",\n \" }\",\n \"\",\n \" responseBody, readErr := io.ReadAll(resp.Body)\",\n \" closeErr := resp.Body.Close()\",\n \" if readErr != nil {\",\n ' fmt.Fprintf(os.Stderr, \"read response body: %v\\\\n\", readErr)',\n \" os.Exit(1)\",\n \" }\",\n \" if closeErr != nil {\",\n ' fmt.Fprintf(os.Stderr, \"close response body: %v\\\\n\", closeErr)',\n \" os.Exit(1)\",\n \" }\",\n \"\",\n \" if resp.StatusCode < http.StatusOK ||\",\n \" resp.StatusCode >= http.StatusMultipleChoices {\",\n ' fmt.Fprintf(os.Stderr, \"HTTP %s: %s\\\\n\",',\n \" resp.Status,\",\n \" string(responseBody),\",\n \" )\",\n \" os.Exit(1)\",\n \" }\",\n \"\",\n \" fmt.Println(string(responseBody))\",\n \"}\",\n ].join(\"\\n\");\n}\n","import {\n bodyText,\n compile,\n form,\n hasFormBody,\n isContentLengthHeader,\n isTransferEncodingHeader,\n normalizeMethod,\n supportsRequestBody,\n} from \"../common\";\nimport type { RequestIR } from \"../../types\";\n\nfunction sanitizeHeaderPart(value: unknown): string {\n return String(value)\n .replace(/[\\r\\n\\u2028\\u2029]+/g, \" \")\n .replace(/[\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F]/g, \"\");\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const generatedBody = Boolean(body) && supportsRequestBody(method);\n\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n return (\n !generatedBody ||\n (!isContentLengthHeader(name) && !isTransferEncodingHeader(name))\n );\n });\n\n const lines = [\n `${sanitizeHeaderPart(method)} ${sanitizeHeaderPart(compiled.url)} HTTP/1.1`,\n ...headers.map(\n ([name, value]) =>\n `${sanitizeHeaderPart(name)}: ${sanitizeHeaderPart(value)}`,\n ),\n ];\n\n if (generatedBody && body) {\n const payload = hasFormBody(request) ? form(body.value) : bodyText(request);\n\n lines.push(\"\", payload);\n } else {\n lines.push(\"\");\n }\n\n return lines.join(\"\\r\\n\");\n}\n","import {\n DEFAULT_BINARY_MEDIA_TYPE,\n DEFAULT_FILE_NAME,\n DEFAULT_FILE_PATH,\n bodyText,\n compile,\n escapeJava,\n fileComment,\n form,\n hasFormBody,\n hasJsonBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n mediaTypeOf,\n nonBlankString,\n normalizeMethod,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { FileValue, RequestIR } from \"../../types\";\n\nfunction safeComment(value: string): string {\n return value.replace(/[\\r\\n\\u0000-\\u001f\\u007f\\u2028\\u2029]+/g, \" \").trim();\n}\n\nfunction textFieldValue(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n\n if (value === null || value === undefined) {\n return \"\";\n }\n\n if (\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n\n try {\n return JSON.stringify(value) ?? \"\";\n } catch {\n return String(value);\n }\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const multipart = Boolean(body && canHaveBody && hasMultipartBody(request));\n const generatedBody = Boolean(body && canHaveBody);\n\n const comments: string[] = [\n \"Requires JDK 17+ and AsyncHttpClient 3.0.1.\",\n \"Dependency: org.asynchttpclient:async-http-client:3.0.1\",\n \"Compile: javac -cp 'lib/*' Example.java\",\n \"Run: java -cp '.:lib/*' Example\",\n \"Repeated request headers and multipart fields are added separately.\",\n ];\n\n const imports = new Set<string>([\n \"import java.time.Duration;\",\n \"import java.util.concurrent.TimeUnit;\",\n \"import org.asynchttpclient.AsyncHttpClient;\",\n \"import org.asynchttpclient.BoundRequestBuilder;\",\n \"import org.asynchttpclient.DefaultAsyncHttpClientConfig;\",\n \"import org.asynchttpclient.Response;\",\n \"import static org.asynchttpclient.Dsl.asyncHttpClient;\",\n ]);\n\n const bodyLines: string[] = [];\n\n if (body && multipart) {\n imports.add(\"import java.io.File;\");\n imports.add(\"import org.asynchttpclient.request.body.multipart.FilePart;\");\n imports.add(\n \"import org.asynchttpclient.request.body.multipart.StringPart;\",\n );\n\n for (const entry of toKeyValueBody(body.value)) {\n const fieldName = String(entry.name);\n\n if (entry.file && isFileValue(entry.value)) {\n const fileValue: FileValue = entry.value;\n const actualPath = nonBlankString(fileValue.path);\n const filePath = actualPath ?? DEFAULT_FILE_PATH;\n const fileName = nonBlankString(fileValue.name) ?? DEFAULT_FILE_NAME;\n const contentType =\n nonBlankString(fileValue.contentType) ?? DEFAULT_BINARY_MEDIA_TYPE;\n\n if (!actualPath) {\n comments.push(\n safeComment(fileComment(filePath, fieldName)).replace(\n /^(?:\\/\\/|#)\\s*/,\n \"\",\n ),\n );\n }\n\n bodyLines.push(\n \" builder.addBodyPart(new FilePart(\",\n ` ${escapeJava(fieldName)},`,\n ` new File(${escapeJava(filePath)}),`,\n ` ${escapeJava(contentType)},`,\n ` null,`,\n ` ${escapeJava(fileName)}`,\n \" ));\",\n );\n } else {\n bodyLines.push(\n \" builder.addBodyPart(new StringPart(\",\n ` ${escapeJava(fieldName)},`,\n ` ${escapeJava(textFieldValue(entry.value))}`,\n \" ));\",\n );\n }\n }\n } else if (body && canHaveBody) {\n const isForm = hasFormBody(request);\n const isJson = hasJsonBody(request);\n const payload = isForm ? form(body.value) : bodyText(request);\n const fallbackMediaType = isForm\n ? \"application/x-www-form-urlencoded\"\n : isJson\n ? \"application/json\"\n : \"text/plain\";\n const contentType = mediaTypeOf(request, fallbackMediaType);\n\n bodyLines.push(\n ` builder.setHeader(\"Content-Type\", ${escapeJava(contentType)});`,\n ` builder.setBody(${escapeJava(payload)});`,\n );\n }\n\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n if (\n generatedBody &&\n (isContentLengthHeader(name) || isTransferEncodingHeader(name))\n ) {\n return false;\n }\n\n /*\n * Multipart encoding generates its boundary-bearing Content-Type.\n * Other generated bodies set their effective Content-Type below.\n */\n if (generatedBody && isContentTypeHeader(name)) {\n return false;\n }\n\n return true;\n });\n\n const headerLines = headers.map(\n ([name, value]) =>\n ` builder.addHeader(${escapeJava(String(name))}, ${escapeJava(\n String(value),\n )});`,\n );\n\n return [\n ...comments.map((comment) => `// ${safeComment(comment)}`),\n \"\",\n [...imports].sort().join(\"\\n\"),\n \"\",\n \"public final class Example {\",\n \" private Example() {}\",\n \"\",\n \" public static void main(String[] args) throws Exception {\",\n \" DefaultAsyncHttpClientConfig config =\",\n \" new DefaultAsyncHttpClientConfig.Builder()\",\n \" .setConnectTimeout(Duration.ofSeconds(30))\",\n \" .setReadTimeout(Duration.ofSeconds(30))\",\n \" .setRequestTimeout(Duration.ofSeconds(30))\",\n \" .build();\",\n \"\",\n \" try (AsyncHttpClient client = asyncHttpClient(config)) {\",\n \" BoundRequestBuilder builder = client.prepare(\",\n ` ${escapeJava(method)},`,\n ` ${escapeJava(compiled.url)}`,\n \" );\",\n ...headerLines,\n ...(headerLines.length > 0 ? [\"\"] : []),\n ...bodyLines,\n ...(bodyLines.length > 0 ? [\"\"] : []),\n \" Response response = builder\",\n \" .execute()\",\n \" .get(30, TimeUnit.SECONDS);\",\n \" String responseBody = response.getResponseBody();\",\n \"\",\n \" if (response.getStatusCode() < 200 ||\",\n \" response.getStatusCode() >= 300) {\",\n \" throw new IllegalStateException(\",\n ' \"HTTP \" + response.getStatusCode() + \" \"',\n ' + response.getStatusText() + \": \" + responseBody',\n \" );\",\n \" }\",\n \"\",\n \" System.out.println(responseBody);\",\n \" }\",\n \" }\",\n \"}\",\n ].join(\"\\n\");\n}\n","import {\n DEFAULT_BINARY_MEDIA_TYPE,\n DEFAULT_FILE_NAME,\n DEFAULT_FILE_PATH,\n bodyText,\n compile,\n escapeJava,\n fileComment,\n form,\n hasFormBody,\n hasJsonBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n mediaTypeOf,\n nonBlankString,\n normalizeMethod,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { FileValue, RequestIR } from \"../../types\";\n\nfunction safeComment(value: string): string {\n return value\n .replace(/[\\r\\n\\u0000-\\u001f\\u007f\\u2028\\u2029]+/g, \" \")\n .trim();\n}\n\nfunction textFieldValue(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n\n if (value === null || value === undefined) {\n return \"\";\n }\n\n if (\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n\n try {\n return JSON.stringify(value) ?? \"\";\n } catch {\n return String(value);\n }\n}\n\nfunction multipartQuotedValue(value: string): string {\n return value\n .replace(/[\\r\\n\\u0000-\\u001f\\u007f\\u2028\\u2029]+/g, \" \")\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, '\\\\\"');\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const multipart = Boolean(\n body && canHaveBody && hasMultipartBody(request),\n );\n const generatedBody = Boolean(body && canHaveBody);\n const comments: string[] = [\n \"Requires JDK 17+; no external dependencies.\",\n \"Compile: javac Example.java\",\n \"Run: java Example\",\n \"Repeated request headers and multipart fields are emitted separately.\",\n ];\n\n const imports = new Set<string>([\n \"import java.net.URI;\",\n \"import java.net.http.HttpClient;\",\n \"import java.net.http.HttpRequest;\",\n \"import java.net.http.HttpResponse;\",\n \"import java.nio.charset.StandardCharsets;\",\n \"import java.time.Duration;\",\n ]);\n\n const declarations: string[] = [];\n let bodyPublisher = \"HttpRequest.BodyPublishers.noBody()\";\n let generatedContentType: string | undefined;\n\n if (body && multipart) {\n imports.add(\"import java.io.ByteArrayOutputStream;\");\n imports.add(\"import java.nio.file.Files;\");\n imports.add(\"import java.nio.file.Path;\");\n imports.add(\"import java.util.UUID;\");\n\n declarations.push(\n ' String boundary = \"----JavaBoundary\" + UUID.randomUUID();',\n \" ByteArrayOutputStream multipartBody =\",\n \" new ByteArrayOutputStream();\",\n );\n\n let fileIndex = 0;\n\n for (const entry of toKeyValueBody(body.value)) {\n const fieldName = multipartQuotedValue(String(entry.name));\n\n declarations.push(\n \" multipartBody.write(\",\n ' (\"--\" + boundary + \"\\\\r\\\\n\")',\n \" .getBytes(StandardCharsets.UTF_8)\",\n \" );\",\n );\n\n if (entry.file && isFileValue(entry.value)) {\n fileIndex += 1;\n\n const fileValue: FileValue = entry.value;\n const actualPath = nonBlankString(fileValue.path);\n const filePath = actualPath ?? DEFAULT_FILE_PATH;\n const fileName = multipartQuotedValue(\n nonBlankString(fileValue.name) ?? DEFAULT_FILE_NAME,\n );\n const contentType = (\n nonBlankString(fileValue.contentType) ??\n DEFAULT_BINARY_MEDIA_TYPE\n )\n .replace(/[\\r\\n\\u0000-\\u001f\\u007f\\u2028\\u2029]+/g, \"\")\n .trim() || DEFAULT_BINARY_MEDIA_TYPE;\n const pathVariable = `filePath${fileIndex}`;\n\n if (!actualPath) {\n comments.push(\n safeComment(fileComment(filePath, String(entry.name))).replace(\n /^(?:\\/\\/|#)\\s*/,\n \"\",\n ),\n );\n }\n\n declarations.push(\n ` Path ${pathVariable} = Path.of(${escapeJava(filePath)});`,\n \" multipartBody.write(\",\n ` ${escapeJava(\n `Content-Disposition: form-data; name=\"${fieldName}\"; filename=\"${fileName}\"\\r\\n`,\n )}.getBytes(StandardCharsets.UTF_8)`,\n \" );\",\n \" multipartBody.write(\",\n ` ${escapeJava(\n `Content-Type: ${contentType}\\r\\n\\r\\n`,\n )}.getBytes(StandardCharsets.UTF_8)`,\n \" );\",\n ` Files.copy(${pathVariable}, multipartBody);`,\n \" multipartBody.write(\",\n ' \"\\\\r\\\\n\".getBytes(StandardCharsets.UTF_8)',\n \" );\",\n );\n } else {\n declarations.push(\n \" multipartBody.write(\",\n ` ${escapeJava(\n `Content-Disposition: form-data; name=\"${fieldName}\"\\r\\n\\r\\n`,\n )}.getBytes(StandardCharsets.UTF_8)`,\n \" );\",\n \" multipartBody.write(\",\n ` ${escapeJava(\n textFieldValue(entry.value),\n )}.getBytes(StandardCharsets.UTF_8)`,\n \" );\",\n \" multipartBody.write(\",\n ' \"\\\\r\\\\n\".getBytes(StandardCharsets.UTF_8)',\n \" );\",\n );\n }\n }\n\n declarations.push(\n \" multipartBody.write(\",\n ' (\"--\" + boundary + \"--\\\\r\\\\n\")',\n \" .getBytes(StandardCharsets.UTF_8)\",\n \" );\",\n );\n\n bodyPublisher =\n \"HttpRequest.BodyPublishers.ofByteArray(multipartBody.toByteArray())\";\n generatedContentType = '\"multipart/form-data; boundary=\" + boundary';\n } else if (body && canHaveBody) {\n const isForm = hasFormBody(request);\n const isJson = hasJsonBody(request);\n const payload = isForm ? form(body.value) : bodyText(request);\n const fallbackContentType = isForm\n ? \"application/x-www-form-urlencoded\"\n : isJson\n ? \"application/json\"\n : \"text/plain\";\n\n bodyPublisher = [\n \"HttpRequest.BodyPublishers.ofString(\",\n `${escapeJava(payload)}, StandardCharsets.UTF_8`,\n \")\",\n ].join(\"\");\n\n generatedContentType = escapeJava(\n mediaTypeOf(request, fallbackContentType),\n );\n }\n\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n if (\n generatedBody &&\n (isContentLengthHeader(name) ||\n isTransferEncodingHeader(name))\n ) {\n return false;\n }\n\n if (generatedBody && isContentTypeHeader(name)) {\n return false;\n }\n\n return true;\n });\n\n const headerLines = headers.map(\n ([name, value]) =>\n ` .header(${escapeJava(String(name))}, ${escapeJava(\n String(value),\n )})`,\n );\n\n if (generatedContentType !== undefined) {\n headerLines.push(\n ` .header(\"Content-Type\", ${generatedContentType})`,\n );\n }\n\n return [\n ...comments.map((comment) => `// ${safeComment(comment)}`),\n \"\",\n [...imports].sort().join(\"\\n\"),\n \"\",\n \"public final class Example {\",\n \" private Example() {}\",\n \"\",\n \" public static void main(String[] args) throws Exception {\",\n \" HttpClient client = HttpClient.newBuilder()\",\n \" .connectTimeout(Duration.ofSeconds(30))\",\n \" .followRedirects(HttpClient.Redirect.NORMAL)\",\n \" .build();\",\n \"\",\n ...declarations,\n ...(declarations.length > 0 ? [\"\"] : []),\n \" HttpRequest httpRequest = HttpRequest.newBuilder()\",\n ` .uri(URI.create(${escapeJava(compiled.url)}))`,\n \" .timeout(Duration.ofSeconds(30))\",\n ...headerLines,\n ` .method(${escapeJava(method)}, ${bodyPublisher})`,\n \" .build();\",\n \"\",\n \" HttpResponse<String> response = client.send(\",\n \" httpRequest,\",\n \" HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8)\",\n \" );\",\n \"\",\n \" String responseBody = response.body();\",\n \" if (response.statusCode() < 200 ||\",\n \" response.statusCode() >= 300) {\",\n \" throw new IllegalStateException(\",\n ' \"HTTP \" + response.statusCode() + \": \" + responseBody',\n \" );\",\n \" }\",\n \"\",\n \" System.out.println(responseBody);\",\n \" }\",\n \"}\",\n ].join(\"\\n\");\n}","import {\n DEFAULT_BINARY_MEDIA_TYPE,\n DEFAULT_FILE_NAME,\n DEFAULT_FILE_PATH,\n bodyText,\n compile,\n escapeJava,\n fileComment,\n form,\n hasFormBody,\n hasJsonBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n mediaTypeOf,\n nonBlankString,\n normalizeMethod,\n requiresRequestBody,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { FileValue, RequestIR } from \"../../types\";\n\nfunction safeComment(value: string): string {\n return value\n .replace(/[\\r\\n\\u0000-\\u001f\\u007f\\u2028\\u2029]+/g, \" \")\n .trim();\n}\n\nfunction textFieldValue(value: unknown): string {\n if (typeof value === \"string\") return value;\n if (value === null || value === undefined) return \"\";\n\n if (\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n\n try {\n return JSON.stringify(value) ?? \"\";\n } catch {\n return String(value);\n }\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const multipart = Boolean(\n body && canHaveBody && hasMultipartBody(request),\n );\n const generatedBody = Boolean(\n (body && canHaveBody) || (!body && requiresRequestBody(method)),\n );\n\n const comments: string[] = [\n \"Requires JDK 17+ and OkHttp 4.12.0.\",\n \"Dependency: com.squareup.okhttp3:okhttp:4.12.0\",\n \"Compile: javac -cp 'lib/*' Example.java\",\n \"Run: java -cp '.:lib/*' Example\",\n ];\n\n const imports = new Set<string>([\n \"import java.io.IOException;\",\n \"import java.time.Duration;\",\n \"import okhttp3.OkHttpClient;\",\n \"import okhttp3.Request;\",\n \"import okhttp3.RequestBody;\",\n \"import okhttp3.Response;\",\n ]);\n\n let bodyBlock: string;\n\n if (body && multipart) {\n imports.add(\"import java.io.File;\");\n imports.add(\"import okhttp3.MediaType;\");\n imports.add(\"import okhttp3.MultipartBody;\");\n\n const parts: string[] = [];\n\n for (const entry of toKeyValueBody(body.value)) {\n const fieldName = String(entry.name);\n\n if (entry.file && isFileValue(entry.value)) {\n const fileValue: FileValue = entry.value;\n const actualPath = nonBlankString(fileValue.path);\n const filePath = actualPath ?? DEFAULT_FILE_PATH;\n const fileName =\n nonBlankString(fileValue.name) ?? DEFAULT_FILE_NAME;\n const contentType =\n nonBlankString(fileValue.contentType) ??\n DEFAULT_BINARY_MEDIA_TYPE;\n\n if (!actualPath) {\n comments.push(\n safeComment(fileComment(filePath, fieldName)).replace(\n /^(?:\\/\\/|#)\\s*/,\n \"\",\n ),\n );\n }\n\n parts.push(\n \" .addFormDataPart(\",\n ` ${escapeJava(fieldName)},`,\n ` ${escapeJava(fileName)},`,\n \" RequestBody.create(\",\n ` new File(${escapeJava(filePath)}),`,\n ` MediaType.get(${escapeJava(contentType)})`,\n \" )\",\n \" )\",\n );\n } else {\n parts.push(\n \" .addFormDataPart(\",\n ` ${escapeJava(fieldName)},`,\n ` ${escapeJava(textFieldValue(entry.value))}`,\n \" )\",\n );\n }\n }\n\n bodyBlock = [\n \" RequestBody body = new MultipartBody.Builder()\",\n \" .setType(MultipartBody.FORM)\",\n ...parts,\n \" .build();\",\n ].join(\"\\n\");\n } else if (body && canHaveBody) {\n imports.add(\"import okhttp3.MediaType;\");\n\n const isForm = hasFormBody(request);\n const isJson = hasJsonBody(request);\n const payload = isForm ? form(body.value) : bodyText(request);\n const fallbackMediaType = isForm\n ? \"application/x-www-form-urlencoded\"\n : isJson\n ? \"application/json\"\n : \"text/plain\";\n const mediaType = mediaTypeOf(request, fallbackMediaType);\n\n bodyBlock = [\n \" RequestBody body = RequestBody.create(\",\n ` ${escapeJava(payload)},`,\n ` MediaType.get(${escapeJava(mediaType)})`,\n \" );\",\n ].join(\"\\n\");\n } else if (!body && requiresRequestBody(method)) {\n bodyBlock = [\n \" RequestBody body = RequestBody.create(\",\n \" new byte[0],\",\n \" null\",\n \" );\",\n ].join(\"\\n\");\n } else {\n bodyBlock = \" RequestBody body = null;\";\n }\n\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n if (\n generatedBody &&\n (isContentLengthHeader(name) ||\n isTransferEncodingHeader(name))\n ) {\n return false;\n }\n\n // RequestBody supplies Content-Type, including multipart's boundary.\n if (generatedBody && isContentTypeHeader(name)) {\n return false;\n }\n\n return true;\n });\n\n const headerLines = headers.map(\n ([name, value]) =>\n ` .addHeader(${escapeJava(String(name))}, ${escapeJava(\n String(value),\n )})`,\n );\n\n return [\n ...comments.map((comment) => `// ${safeComment(comment)}`),\n \"\",\n [...imports].sort().join(\"\\n\"),\n \"\",\n \"public final class Example {\",\n \" private Example() {}\",\n \"\",\n \" public static void main(String[] args) {\",\n \" OkHttpClient client = new OkHttpClient.Builder()\",\n \" .connectTimeout(Duration.ofSeconds(30))\",\n \" .readTimeout(Duration.ofSeconds(30))\",\n \" .writeTimeout(Duration.ofSeconds(30))\",\n \" .callTimeout(Duration.ofSeconds(30))\",\n \" .build();\",\n \"\",\n bodyBlock,\n \"\",\n \" Request httpRequest = new Request.Builder()\",\n ` .url(${escapeJava(compiled.url)})`,\n ...headerLines,\n ` .method(${escapeJava(method)}, body)`,\n \" .build();\",\n \"\",\n \" try (Response response =\",\n \" client.newCall(httpRequest).execute()) {\",\n \" String responseText = response.body() == null\",\n ' ? \"\"',\n \" : response.body().string();\",\n \"\",\n \" if (!response.isSuccessful()) {\",\n \" throw new IOException(\",\n ' \"HTTP \" + response.code() + \" \" + response.message()',\n ' + \": \" + responseText',\n \" );\",\n \" }\",\n \"\",\n \" System.out.println(responseText);\",\n \" } catch (IOException exception) {\",\n \" exception.printStackTrace();\",\n \" System.exit(1);\",\n \" } finally {\",\n \" client.dispatcher().executorService().shutdown();\",\n \" client.connectionPool().evictAll();\",\n \" if (client.cache() != null) {\",\n \" try {\",\n \" client.cache().close();\",\n \" } catch (IOException exception) {\",\n \" exception.printStackTrace();\",\n \" }\",\n \" }\",\n \" }\",\n \" }\",\n \"}\",\n ].join(\"\\n\");\n}","import {\n DEFAULT_FILE_PATH,\n bodyText,\n compile,\n escapeJava,\n fileComment,\n form,\n hasFormBody,\n hasJsonBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n mediaTypeOf,\n normalizeMethod,\n requiresRequestBody,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { FileValue, RequestIR } from \"../../types\";\n\nfunction nonBlankString(value: unknown, fallback: string): string {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : fallback;\n}\n\nfunction safeComment(value: string): string {\n return value\n .replace(/[\\r\\n\\u2028\\u2029]+/g, \" \")\n .replace(/[\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F]/g, \"\");\n}\n\nfunction multipartText(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n\n if (value === null || value === undefined) {\n return \"\";\n }\n\n if (\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n\n try {\n const serialized = JSON.stringify(value);\n return serialized === undefined ? String(value) : serialized;\n } catch {\n return String(value);\n }\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const multipart = Boolean(body) && canHaveBody && hasMultipartBody(request);\n const generatedBody =\n Boolean(body && canHaveBody) || (!body && requiresRequestBody(method));\n\n const imports = new Set<string>([\n \"import kong.unirest.HttpRequest;\",\n \"import kong.unirest.HttpResponse;\",\n \"import kong.unirest.Unirest;\",\n ]);\n\n const comments: string[] = [\n \"// Requires JDK 17+ and com.konghq:unirest-java:3.14.5.\",\n \"// Compile and run with the Unirest dependency and its transitive dependencies on the classpath.\",\n \"// Proxy and TLS behavior can be configured through Unirest.config() when required.\",\n ];\n\n /*\n * Generated entities own their framing headers. Multipart additionally owns\n * Content-Type because Unirest must append the generated boundary.\n */\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n if (\n generatedBody &&\n (isContentLengthHeader(name) || isTransferEncodingHeader(name))\n ) {\n return false;\n }\n\n if (multipart && isContentTypeHeader(name)) {\n return false;\n }\n\n return true;\n });\n\n const emitHeaders = (source: Array<[unknown, unknown]>): string[] =>\n source.map(\n ([name, value]) =>\n ` .header(${escapeJava(String(name))}, ${escapeJava(\n String(value),\n )})`,\n );\n\n let requestDeclaration: string[];\n\n if (body && multipart) {\n imports.add(\"import java.io.File;\");\n\n const fieldLines = toKeyValueBody(body.value).map((entry) => {\n const fieldName = String(entry.name);\n\n if (entry.file && isFileValue(entry.value)) {\n const fileValue: FileValue = entry.value;\n const filePath = nonBlankString(fileValue.path, DEFAULT_FILE_PATH);\n\n if (\n typeof fileValue.path !== \"string\" ||\n fileValue.path.trim().length === 0\n ) {\n comments.push(`// ${safeComment(fileComment(filePath, fieldName))}`);\n }\n\n /*\n * The portable Unirest File overload derives filename and media type\n * from the File. It cannot consistently override both metadata values\n * across supported Unirest 3.x releases.\n */\n return [\n \" .field(\",\n ` ${escapeJava(fieldName)},`,\n ` new File(${escapeJava(filePath)})`,\n \" )\",\n ].join(\"\\n\");\n }\n\n return [\n \" .field(\",\n ` ${escapeJava(fieldName)},`,\n ` ${escapeJava(multipartText(entry.value))}`,\n \" )\",\n ].join(\"\\n\");\n });\n\n const chain = [\n ` Unirest.request(${escapeJava(method)}, ${escapeJava(compiled.url)})`,\n ...emitHeaders(headers),\n ...fieldLines,\n ];\n\n chain[chain.length - 1] = `${chain[chain.length - 1]};`;\n requestDeclaration = [\" HttpRequest<?> httpRequest =\", ...chain];\n } else if (body && canHaveBody) {\n const isForm = hasFormBody(request);\n const isJson = hasJsonBody(request);\n const payload = isForm ? form(body.value) : bodyText(request);\n const fallbackMediaType = isForm\n ? \"application/x-www-form-urlencoded\"\n : isJson\n ? \"application/json\"\n : \"text/plain\";\n const mediaType = mediaTypeOf(request, fallbackMediaType);\n\n const effectiveHeaders = headers.filter(\n ([name]) => !isContentTypeHeader(String(name)),\n );\n\n requestDeclaration = [\n \" HttpRequest<?> httpRequest =\",\n ` Unirest.request(${escapeJava(method)}, ${escapeJava(compiled.url)})`,\n ...emitHeaders(effectiveHeaders),\n ` .header(\"Content-Type\", ${escapeJava(mediaType)})`,\n ` .body(${escapeJava(payload)});`,\n ];\n } else if (!body && requiresRequestBody(method)) {\n const effectiveHeaders = headers.filter(\n ([name]) => !isContentTypeHeader(String(name)),\n );\n\n requestDeclaration = [\n \" HttpRequest<?> httpRequest =\",\n ` Unirest.request(${escapeJava(method)}, ${escapeJava(compiled.url)})`,\n ...emitHeaders(effectiveHeaders),\n ` .header(\"Content-Type\", \"application/octet-stream\")`,\n ' .body(\"\");',\n ];\n } else {\n const chain = [\n ` Unirest.request(${escapeJava(method)}, ${escapeJava(compiled.url)})`,\n ...emitHeaders(headers),\n ];\n\n chain[chain.length - 1] = `${chain[chain.length - 1]};`;\n requestDeclaration = [\" HttpRequest<?> httpRequest =\", ...chain];\n }\n\n return [\n [...imports].sort().join(\"\\n\"),\n \"\",\n ...comments,\n \"public final class Example {\",\n \" private Example() {}\",\n \"\",\n \" public static void main(String[] args) {\",\n \" int exitCode = 0;\",\n \"\",\n \" try {\",\n \" Unirest.config()\",\n \" .connectTimeout(30_000)\",\n \" .requestTimeout(30_000);\",\n \"\",\n ...requestDeclaration.map((line) => ` ${line}`),\n \"\",\n \" HttpResponse<String> response = httpRequest.asString();\",\n \" String responseText = response.getBody() == null\",\n ' ? \"\"',\n \" : response.getBody();\",\n \"\",\n \" if (!response.isSuccess()) {\",\n \" System.err.println(\",\n ' \"HTTP \" + response.getStatus() + \" \"',\n ' + response.getStatusText() + \": \" + responseText',\n \" );\",\n \" exitCode = 1;\",\n \" } else {\",\n \" System.out.println(responseText);\",\n \" }\",\n \" } catch (RuntimeException exception) {\",\n \" exception.printStackTrace();\",\n \" exitCode = 1;\",\n \" } finally {\",\n \" Unirest.shutDown();\",\n \" }\",\n \"\",\n \" if (exitCode != 0) {\",\n \" System.exit(exitCode);\",\n \" }\",\n \" }\",\n \"}\",\n ].join(\"\\n\");\n}\n","import {\n bodyText,\n browserHeaders,\n compile,\n escapeJs,\n form,\n formFieldValue,\n hasFormBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n normalizeMethod,\n operationName,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { RequestIR } from \"../../types\";\n\nfunction safeIdentifier(value: string, fallback: string): string {\n const cleaned = value.replace(/[^A-Za-z0-9_$]/g, \"_\");\n const candidate = /^[A-Za-z_$]/.test(cleaned) ? cleaned : `_${cleaned}`;\n\n return candidate.length > 0 ? candidate : fallback;\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const multipart = Boolean(body && canHaveBody && hasMultipartBody(request));\n const generatedBody = Boolean(body && canHaveBody);\n const functionName = safeIdentifier(operationName(request), \"sendRequest\");\n\n const entries = body && multipart ? toKeyValueBody(body.value) : [];\n\n const fileParameters: string[] = [];\n const prefix: string[] = [];\n let dataExpression: string | undefined;\n\n if (multipart) {\n prefix.push(\" const formData = new FormData();\");\n\n let fileIndex = 0;\n\n for (const entry of entries) {\n const fieldName = String(entry.name);\n\n if (entry.file && isFileValue(entry.value)) {\n fileIndex += 1;\n const parameterName = `file${fileIndex}`;\n fileParameters.push(`${parameterName}: File`);\n\n /*\n * Browser File objects already carry their filename and media type.\n * FileValue.path is not usable in browser code.\n */\n prefix.push(\n ` formData.append(${escapeJs(fieldName)}, ${parameterName});`,\n );\n } else {\n prefix.push(\n ` formData.append(${escapeJs(fieldName)}, ${escapeJs(\n formFieldValue(entry.value),\n )});`,\n );\n }\n }\n\n dataExpression = \"formData\";\n } else if (body && canHaveBody) {\n dataExpression = escapeJs(\n hasFormBody(request) ? form(body.value) : bodyText(request),\n );\n }\n\n /*\n * Browser environments prohibit or control several request headers.\n * browserHeaders() removes those headers while retaining the ordered list.\n */\n const headers = browserHeaders(compiled.headers, multipart).filter(\n ([rawName]) => {\n const name = String(rawName);\n\n if (\n generatedBody &&\n (isContentLengthHeader(name) || isTransferEncodingHeader(name))\n ) {\n return false;\n }\n\n /*\n * The browser must generate multipart Content-Type with its boundary.\n */\n if (multipart && isContentTypeHeader(name)) {\n return false;\n }\n\n return true;\n },\n );\n\n const headerCode = headers.map(\n ([name, value]) =>\n ` headers.append(${escapeJs(String(name))}, ${escapeJs(\n String(value),\n )});`,\n );\n\n const invocationArguments = fileParameters.map(\n (_, index) => `file${index + 1}`,\n );\n\n return [\n \"// Requires a modern browser with File, FormData, Headers, and AbortController.\",\n \"// Requires TypeScript 5.2+ and Axios 1.7.x.\",\n \"// Install: npm install axios@^1.7\",\n \"// Compile: npx tsc --target ES2022 --module ES2022 --moduleResolution bundler --lib ES2022,DOM main.ts\",\n \"// Axios/browser header handling may combine repeated header values.\",\n \"// Browser code cannot read local filesystem paths; pass each multipart file as a File argument.\",\n \"\",\n 'import axios, { AxiosError } from \"axios\";',\n \"\",\n `export async function ${functionName}(`,\n ...fileParameters.map(\n (parameter, index) =>\n ` ${parameter}${index < fileParameters.length - 1 ? \",\" : \"\"}`,\n ),\n `): Promise<void> {`,\n ...prefix,\n ...(prefix.length > 0 ? [\"\"] : []),\n \" const headers = new Headers();\",\n ...headerCode,\n \"\",\n \" const response = await axios.request<string>({\",\n ` method: ${escapeJs(method)},`,\n ` url: ${escapeJs(compiled.url)},`,\n \" headers,\",\n ...(dataExpression ? [` data: ${dataExpression},`] : []),\n \" timeout: 30_000,\",\n ' responseType: \"text\",',\n \" transformResponse: [(value: string) => value],\",\n \" validateStatus: () => true,\",\n \" });\",\n \"\",\n \" const responseText =\",\n ' typeof response.data === \"string\"',\n \" ? response.data\",\n ' : String(response.data ?? \"\");',\n \"\",\n \" if (response.status < 200 || response.status >= 300) {\",\n \" throw new Error(\",\n \" `HTTP ${response.status} ${response.statusText}: ${responseText}`,\",\n \" );\",\n \" }\",\n \"\",\n \" console.log(responseText);\",\n \"}\",\n \"\",\n ...(fileParameters.length === 0\n ? [\n `${functionName}().catch((error: unknown) => {`,\n \" if (error instanceof AxiosError) {\",\n \" console.error(error.message);\",\n \" } else {\",\n \" console.error(error);\",\n \" }\",\n \"});\",\n ]\n : [\n \"// Call the exported function with browser File objects:\",\n `// ${functionName}(${invocationArguments.join(\", \")}).catch(console.error);`,\n ]),\n ].join(\"\\n\");\n}\n","import {\n bodyText,\n browserHeaders,\n compile,\n escapeJs,\n form,\n formFieldValue,\n hasFormBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n normalizeMethod,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { RequestIR } from \"../../types\";\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const multipart = Boolean(body && canHaveBody && hasMultipartBody(request));\n const generatedBody = Boolean(body && canHaveBody);\n\n const entries = body && multipart ? toKeyValueBody(body.value) : [];\n\n const fileParameters: string[] = [];\n const setupLines: string[] = [];\n let bodyExpression: string | undefined;\n\n if (multipart) {\n setupLines.push(\" const formData = new FormData();\");\n\n let fileIndex = 0;\n\n for (const entry of entries) {\n const fieldName = String(entry.name);\n\n if (entry.file && isFileValue(entry.value)) {\n fileIndex += 1;\n const parameterName = `file${fileIndex}`;\n fileParameters.push(`${parameterName}: File`);\n\n /*\n * In browsers, File supplies its own name and media type.\n * FileValue.path cannot be accessed from browser JavaScript.\n */\n setupLines.push(\n ` formData.append(${escapeJs(fieldName)}, ${parameterName});`,\n );\n } else {\n setupLines.push(\n ` formData.append(${escapeJs(fieldName)}, ${escapeJs(\n formFieldValue(entry.value),\n )});`,\n );\n }\n }\n\n bodyExpression = \"formData\";\n } else if (body && canHaveBody) {\n bodyExpression = escapeJs(\n hasFormBody(request) ? form(body.value) : bodyText(request),\n );\n }\n\n /*\n * browserHeaders() removes headers that browser Fetch does not permit.\n * Headers.append() is used instead of an object so duplicate inputs are\n * represented as faithfully as Fetch's header model permits.\n */\n const headers = browserHeaders(compiled.headers, multipart).filter(\n ([rawName]) => {\n const name = String(rawName);\n\n if (\n generatedBody &&\n (isContentLengthHeader(name) || isTransferEncodingHeader(name))\n ) {\n return false;\n }\n\n // FormData must generate Content-Type together with its boundary.\n if (multipart && isContentTypeHeader(name)) {\n return false;\n }\n\n return true;\n },\n );\n\n const headerLines = headers.map(\n ([name, value]) =>\n ` headers.append(${escapeJs(String(name))}, ${escapeJs(\n String(value),\n )});`,\n );\n\n const signature =\n fileParameters.length === 0\n ? \"export async function sendRequest(): Promise<string> {\"\n : [\n \"export async function sendRequest(\",\n ...fileParameters.map(\n (parameter, index) =>\n ` ${parameter}${index < fileParameters.length - 1 ? \",\" : \"\"}`,\n ),\n \"): Promise<string> {\",\n ].join(\"\\n\");\n\n return [\n \"// Requires a modern browser with Fetch, FormData, File, Headers, and AbortController.\",\n \"// Requires TypeScript 5.2+.\",\n \"// Compile: npx tsc main.ts --target ES2022 --module ES2022 --lib ES2022,DOM --strict\",\n \"// Fetch may combine repeated header values according to the browser header model.\",\n \"// Multipart files must be supplied as browser File arguments; local paths are inaccessible.\",\n \"\",\n signature,\n ...setupLines,\n ...(setupLines.length > 0 ? [\"\"] : []),\n \" const headers = new Headers();\",\n ...headerLines,\n \"\",\n \" const controller = new AbortController();\",\n \" const timeoutId = globalThis.setTimeout(\",\n \" () => controller.abort(),\",\n \" 30_000,\",\n \" );\",\n \"\",\n \" try {\",\n ` const response = await fetch(${escapeJs(compiled.url)}, {`,\n ` method: ${escapeJs(method)},`,\n \" headers,\",\n ...(bodyExpression ? [` body: ${bodyExpression},`] : []),\n \" signal: controller.signal,\",\n \" });\",\n \"\",\n \" const responseText = await response.text();\",\n \"\",\n \" if (!response.ok) {\",\n \" throw new Error(\",\n \" `HTTP ${response.status} ${response.statusText}: ${responseText}`,\",\n \" );\",\n \" }\",\n \"\",\n \" return responseText;\",\n \" } catch (error: unknown) {\",\n ' if (error instanceof DOMException && error.name === \"AbortError\") {',\n ' throw new Error(\"Request timed out after 30 seconds\", {',\n \" cause: error,\",\n \" });\",\n \" }\",\n \"\",\n \" throw error;\",\n \" } finally {\",\n \" globalThis.clearTimeout(timeoutId);\",\n \" }\",\n \"}\",\n ].join(\"\\n\");\n}\n","import {\n bodyText,\n browserHeaders,\n compile,\n escapeJs,\n form,\n hasFormBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n normalizeMethod,\n supportsRequestBody,\n toKeyValueBody,\n formFieldValue,\n} from \"../common\";\nimport type { RequestIR } from \"../../types\";\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const multipart = Boolean(body && canHaveBody && hasMultipartBody(request));\n const generatedBody = Boolean(body && canHaveBody);\n\n const entries = body && multipart ? toKeyValueBody(body.value) : [];\n\n const parameters: string[] = [];\n const setupLines: string[] = [];\n let dataExpression: string | undefined;\n\n if (multipart) {\n setupLines.push(\" const formData = new FormData();\");\n\n let fileIndex = 0;\n\n for (const entry of entries) {\n const fieldName = String(entry.name);\n\n if (entry.file && isFileValue(entry.value)) {\n fileIndex += 1;\n const parameterName = `file${fileIndex}`;\n\n parameters.push(parameterName);\n setupLines.push(\n ` formData.append(${escapeJs(fieldName)}, ${parameterName});`,\n );\n } else {\n setupLines.push(\n ` formData.append(${escapeJs(fieldName)}, ${escapeJs(\n formFieldValue(entry.value),\n )});`,\n );\n }\n }\n\n dataExpression = \"formData\";\n } else if (body && canHaveBody) {\n dataExpression = escapeJs(\n hasFormBody(request) ? form(body.value) : bodyText(request),\n );\n }\n\n /*\n * Browsers prohibit or control some request headers. Repeated values cannot\n * be represented reliably by jQuery's plain headers object, so values are\n * safely combined according to the browser header model.\n */\n const headers = browserHeaders(compiled.headers, multipart).filter(\n ([rawName]) => {\n const name = String(rawName);\n\n if (\n generatedBody &&\n (isContentLengthHeader(name) || isTransferEncodingHeader(name))\n ) {\n return false;\n }\n\n // FormData must generate Content-Type together with its boundary.\n if (multipart && isContentTypeHeader(name)) {\n return false;\n }\n\n return true;\n },\n );\n\n const headerSetupLines = headers.map(\n ([name, value]) =>\n ` headers.append(${escapeJs(String(name))}, ${escapeJs(\n String(value),\n )});`,\n );\n\n return [\n \"// Requires a modern browser with FormData, File, and Headers.\",\n \"// Requires jQuery 3.7.1+.\",\n \"// Install: npm install jquery@^3.7.1\",\n \"// Browser and jQuery header handling may combine repeated header values.\",\n \"// Multipart files must be supplied as File arguments; browser code cannot read local paths.\",\n \"\",\n `function sendRequest(${parameters.join(\", \")}) {`,\n ...setupLines,\n ...(setupLines.length > 0 ? [\"\"] : []),\n \" const headers = new Headers();\",\n ...headerSetupLines,\n \"\",\n \" return $.ajax({\",\n ` url: ${escapeJs(compiled.url)},`,\n ` method: ${escapeJs(method)},`,\n \" headers: Object.fromEntries(headers.entries()),\",\n \" timeout: 30_000,\",\n ...(dataExpression ? [` data: ${dataExpression},`] : []),\n ...(multipart\n ? [\" processData: false,\", \" contentType: false,\"]\n : dataExpression\n ? [\" processData: false,\"]\n : []),\n ' dataType: \"text\",',\n \" })\",\n \" .then(function (responseText, _textStatus, jqXHR) {\",\n \" if (jqXHR.status < 200 || jqXHR.status >= 300) {\",\n \" throw new Error(\",\n \" `HTTP ${jqXHR.status} ${jqXHR.statusText}: ${responseText}`,\",\n \" );\",\n \" }\",\n \"\",\n \" console.log(responseText);\",\n \" return responseText;\",\n \" })\",\n \" .catch(function (jqXHR) {\",\n ' if (jqXHR && typeof jqXHR.status === \"number\") {',\n \" const responseText =\",\n ' typeof jqXHR.responseText === \"string\"',\n \" ? jqXHR.responseText\",\n ' : \"\";',\n \" const statusText =\",\n ' typeof jqXHR.statusText === \"string\"',\n \" ? jqXHR.statusText\",\n ' : \"\";',\n \"\",\n \" throw new Error(\",\n \" `HTTP ${jqXHR.status} ${statusText}: ${responseText}`,\",\n \" );\",\n \" }\",\n \"\",\n \" throw jqXHR;\",\n \" });\",\n \"}\",\n ].join(\"\\n\");\n}\n","import {\n bodyText,\n browserHeaders,\n compile,\n escapeJs,\n form,\n formFieldValue,\n hasFormBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n normalizeMethod,\n operationName,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { RequestIR } from \"../../types\";\n\nfunction safeIdentifier(value: string, fallback: string): string {\n const cleaned = value.replace(/[^A-Za-z0-9_$]/g, \"_\");\n const candidate = /^[A-Za-z_$]/.test(cleaned) ? cleaned : `_${cleaned}`;\n\n return candidate.length > 0 ? candidate : fallback;\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const multipart = Boolean(body && canHaveBody && hasMultipartBody(request));\n const generatedBody = Boolean(body && canHaveBody);\n const name = safeIdentifier(operationName(request), \"sendRequest\");\n\n const entries = body && multipart ? toKeyValueBody(body.value) : [];\n\n const parameters: string[] = [];\n const setupLines: string[] = [];\n let bodyExpression: string | undefined;\n\n if (multipart) {\n setupLines.push(\" const formData = new FormData();\");\n\n let fileIndex = 0;\n\n for (const entry of entries) {\n const fieldName = String(entry.name);\n\n if (entry.file && isFileValue(entry.value)) {\n fileIndex += 1;\n const parameterName = `file${fileIndex}`;\n\n parameters.push(`${parameterName}: File`);\n setupLines.push(\n ` formData.append(${escapeJs(fieldName)}, ${parameterName});`,\n );\n } else {\n setupLines.push(\n ` formData.append(${escapeJs(fieldName)}, ${escapeJs(\n formFieldValue(entry.value),\n )});`,\n );\n }\n }\n\n bodyExpression = \"formData\";\n } else if (body && canHaveBody) {\n bodyExpression = escapeJs(\n hasFormBody(request) ? form(body.value) : bodyText(request),\n );\n }\n\n /*\n * browserHeaders() removes browser-controlled or forbidden headers.\n * Use Headers.append() to retain duplicates as far as Fetch permits.\n */\n const headers = browserHeaders(compiled.headers, multipart).filter(\n ([rawName]) => {\n const name = String(rawName);\n\n if (\n generatedBody &&\n (isContentLengthHeader(name) || isTransferEncodingHeader(name))\n ) {\n return false;\n }\n\n // FormData must generate the boundary-bearing Content-Type.\n if (multipart && isContentTypeHeader(name)) {\n return false;\n }\n\n return true;\n },\n );\n\n const signature =\n parameters.length === 0\n ? `export async function ${name}(): Promise<string> {`\n : [\n `export async function ${name}(`,\n ...parameters.map(\n (parameter, index) =>\n ` ${parameter}${index < parameters.length - 1 ? \",\" : \"\"}`,\n ),\n \"): Promise<string> {\",\n ].join(\"\\n\");\n\n return [\n \"// Requires a modern browser with FormData, File, Headers, and AbortSignal.timeout().\",\n \"// Requires TypeScript 5.2+ and ofetch 1.4+.\",\n \"// Install: npm install ofetch@^1.4\",\n \"// Compile: npx tsc main.ts --target ES2022 --module ES2022 --moduleResolution bundler --lib ES2022,DOM --strict\",\n \"// Fetch may combine repeated headers according to its header model.\",\n \"// Multipart files must be supplied as File arguments; browsers cannot read local paths.\",\n \"\",\n 'import { ofetch } from \"ofetch\";',\n \"\",\n signature,\n ...setupLines,\n ...(setupLines.length > 0 ? [\"\"] : []),\n \" const headers = new Headers();\",\n ...headers.map(\n ([name, value]) =>\n ` headers.append(${escapeJs(String(name))}, ${escapeJs(\n String(value),\n )});`,\n ),\n \"\",\n \" try {\",\n \" return await ofetch<string>(\",\n ` ${escapeJs(compiled.url)},`,\n \" {\",\n ` method: ${escapeJs(method)},`,\n \" headers,\",\n ...(bodyExpression ? [` body: ${bodyExpression},`] : []),\n \" signal: AbortSignal.timeout(30_000),\",\n ' responseType: \"text\",',\n \" retry: 0,\",\n \" },\",\n \" );\",\n \" } catch (error: unknown) {\",\n \" if (error instanceof Error) {\",\n \" throw new Error(`Request failed: ${error.message}`, {\",\n \" cause: error,\",\n \" });\",\n \" }\",\n \"\",\n ' throw new Error(\"Request failed with an unknown error\", {',\n \" cause: error,\",\n \" });\",\n \" }\",\n \"}\",\n ].join(\"\\n\");\n}\n","import {\n bodyText,\n browserHeaders,\n compile,\n escapeJs,\n form,\n formFieldValue,\n hasFormBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n normalizeMethod,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { RequestIR } from \"../../types\";\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const multipart = Boolean(body && canHaveBody && hasMultipartBody(request));\n const generatedBody = Boolean(body && canHaveBody);\n\n const entries = body && multipart ? toKeyValueBody(body.value) : [];\n\n const parameters: string[] = [];\n const setupLines: string[] = [];\n let bodyExpression = \"null\";\n\n if (multipart) {\n setupLines.push(\" const formData = new FormData();\");\n\n let fileIndex = 0;\n\n for (const entry of entries) {\n const fieldName = String(entry.name);\n\n if (entry.file && isFileValue(entry.value)) {\n fileIndex += 1;\n const parameterName = `file${fileIndex}`;\n\n parameters.push(`${parameterName}: File`);\n setupLines.push(\n ` formData.append(${escapeJs(fieldName)}, ${parameterName});`,\n );\n } else {\n setupLines.push(\n ` formData.append(${escapeJs(fieldName)}, ${escapeJs(\n formFieldValue(entry.value),\n )});`,\n );\n }\n }\n\n bodyExpression = \"formData\";\n } else if (body && canHaveBody) {\n bodyExpression = escapeJs(\n hasFormBody(request) ? form(body.value) : bodyText(request),\n );\n }\n\n const headers = browserHeaders(compiled.headers, multipart).filter(\n ([rawName]) => {\n const name = String(rawName);\n\n if (\n generatedBody &&\n (isContentLengthHeader(name) || isTransferEncodingHeader(name))\n ) {\n return false;\n }\n\n // XMLHttpRequest must generate multipart Content-Type and its boundary.\n if (multipart && isContentTypeHeader(name)) {\n return false;\n }\n\n return true;\n },\n );\n\n const signature =\n parameters.length === 0\n ? \"export function sendRequest(): Promise<string> {\"\n : [\n \"export function sendRequest(\",\n ...parameters.map(\n (parameter, index) =>\n ` ${parameter}${index < parameters.length - 1 ? \",\" : \"\"}`,\n ),\n \"): Promise<string> {\",\n ].join(\"\\n\");\n\n return [\n \"// Requires a modern browser with XMLHttpRequest, FormData, and File.\",\n \"// Requires TypeScript 5.2+.\",\n \"// Compile: npx tsc main.ts --target ES2022 --module ES2022 --lib ES2022,DOM --strict\",\n \"// Browsers may combine repeated request headers set through XMLHttpRequest.\",\n \"// Multipart files must be supplied as File arguments; browsers cannot read local paths.\",\n \"\",\n signature,\n \" return new Promise((resolve, reject) => {\",\n ...setupLines,\n ...(setupLines.length > 0 ? [\"\"] : []),\n \" const xhr = new XMLHttpRequest();\",\n ` xhr.open(${escapeJs(method)}, ${escapeJs(compiled.url)}, true);`,\n \" xhr.timeout = 30_000;\",\n ' xhr.responseType = \"text\";',\n \"\",\n ...headers.map(\n ([name, value]) =>\n ` xhr.setRequestHeader(${escapeJs(String(name))}, ${escapeJs(\n String(value),\n )});`,\n ),\n ...(headers.length > 0 ? [\"\"] : []),\n \" xhr.onload = () => {\",\n \" if (xhr.status >= 200 && xhr.status < 300) {\",\n \" resolve(xhr.responseText);\",\n \" return;\",\n \" }\",\n \"\",\n \" reject(\",\n \" new Error(\",\n \" `HTTP ${xhr.status} ${xhr.statusText}: ${xhr.responseText}`,\",\n \" ),\",\n \" );\",\n \" };\",\n \"\",\n \" xhr.onerror = () => {\",\n ' reject(new Error(\"Network request failed\"));',\n \" };\",\n \"\",\n \" xhr.ontimeout = () => {\",\n ' reject(new Error(\"Request timed out after 30 seconds\"));',\n \" };\",\n \"\",\n \" xhr.onabort = () => {\",\n ' reject(new Error(\"Request aborted\"));',\n \" };\",\n \"\",\n ` xhr.send(${bodyExpression});`,\n \" });\",\n \"}\",\n ].join(\"\\n\");\n}\n","import {\n DEFAULT_BINARY_MEDIA_TYPE,\n DEFAULT_FILE_NAME,\n DEFAULT_FILE_PATH,\n bodyText,\n compile,\n escapeJava,\n fileComment,\n form,\n hasFormBody,\n hasJsonBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n mediaTypeOf,\n nonBlankString,\n normalizeMethod,\n requiresRequestBody,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { FileValue, RequestIR } from \"../../types\";\n\nfunction safeComment(value: string): string {\n return value.replace(/[\\r\\n\\u0000-\\u001f\\u007f\\u2028\\u2029]+/g, \" \").trim();\n}\n\nfunction textFieldValue(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n\n if (value === null || value === undefined) {\n return \"\";\n }\n\n if (\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n\n try {\n return JSON.stringify(value) ?? \"\";\n } catch {\n return String(value);\n }\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const multipart = Boolean(body && canHaveBody && hasMultipartBody(request));\n const generatedBody = Boolean(\n (body && canHaveBody) || (!body && requiresRequestBody(method)),\n );\n\n const comments: string[] = [\n \"Requires JDK 17+, Kotlin 1.9+, and OkHttp 4.12.0.\",\n \"Dependency: com.squareup.okhttp3:okhttp:4.12.0\",\n \"Compile: kotlinc Main.kt -cp okhttp-4.12.0.jar:okio-jvm-3.6.0.jar -include-runtime -d main.jar\",\n \"Run: java -cp main.jar:okhttp-4.12.0.jar:okio-jvm-3.6.0.jar MainKt\",\n \"OkHttp addHeader() preserves repeated request-header values.\",\n ];\n\n const imports = new Set<string>([\n \"import java.time.Duration\",\n \"import okhttp3.OkHttpClient\",\n \"import okhttp3.Request\",\n \"import okhttp3.RequestBody\",\n ]);\n\n let bodyCode: string;\n\n if (body && multipart) {\n imports.add(\"import java.io.File\");\n imports.add(\"import okhttp3.MediaType.Companion.toMediaType\");\n imports.add(\"import okhttp3.MultipartBody\");\n imports.add(\"import okhttp3.RequestBody.Companion.asRequestBody\");\n\n const partCode: string[] = [];\n\n for (const entry of toKeyValueBody(body.value)) {\n const fieldName = String(entry.name);\n\n if (entry.file && isFileValue(entry.value)) {\n const fileValue: FileValue = entry.value;\n const actualPath = nonBlankString(fileValue.path);\n const filePath = actualPath ?? DEFAULT_FILE_PATH;\n const fileName = nonBlankString(fileValue.name) ?? DEFAULT_FILE_NAME;\n const contentType =\n nonBlankString(fileValue.contentType) ?? DEFAULT_BINARY_MEDIA_TYPE;\n\n if (!actualPath) {\n comments.push(\n safeComment(fileComment(filePath, fieldName)).replace(\n /^(?:\\/\\/|#)\\s*/,\n \"\",\n ),\n );\n }\n\n partCode.push(\n \" .addFormDataPart(\",\n ` ${escapeJava(fieldName)},`,\n ` ${escapeJava(fileName)},`,\n ` File(${escapeJava(filePath)}).asRequestBody(`,\n ` ${escapeJava(contentType)}.toMediaType()`,\n \" )\",\n \" )\",\n );\n } else {\n partCode.push(\n \" .addFormDataPart(\",\n ` ${escapeJava(fieldName)},`,\n ` ${escapeJava(textFieldValue(entry.value))}`,\n \" )\",\n );\n }\n }\n\n bodyCode = [\n \" val body: RequestBody = MultipartBody.Builder()\",\n \" .setType(MultipartBody.FORM)\",\n ...partCode,\n \" .build()\",\n ].join(\"\\n\");\n } else if (body && canHaveBody) {\n imports.add(\"import okhttp3.MediaType.Companion.toMediaType\");\n imports.add(\"import okhttp3.RequestBody.Companion.toRequestBody\");\n\n const isForm = hasFormBody(request);\n const isJson = hasJsonBody(request);\n const payload = isForm ? form(body.value) : bodyText(request);\n const fallbackMediaType = isForm\n ? \"application/x-www-form-urlencoded\"\n : isJson\n ? \"application/json\"\n : \"text/plain\";\n\n const mediaType = mediaTypeOf(request, fallbackMediaType);\n\n bodyCode = [\n \" val body: RequestBody =\",\n ` ${escapeJava(payload)}.toRequestBody(`,\n ` ${escapeJava(mediaType)}.toMediaType()`,\n \" )\",\n ].join(\"\\n\");\n } else if (requiresRequestBody(method)) {\n imports.add(\"import okhttp3.RequestBody.Companion.toRequestBody\");\n\n bodyCode = [\n \" val body: RequestBody =\",\n ` ${escapeJava(\"\")}.toRequestBody(null)`,\n ].join(\"\\n\");\n } else {\n bodyCode = \" val body: RequestBody? = null\";\n }\n\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n if (\n generatedBody &&\n (isContentLengthHeader(name) || isTransferEncodingHeader(name))\n ) {\n return false;\n }\n\n /*\n * MultipartBody must generate its boundary-bearing Content-Type.\n * Other generated RequestBody instances carry the selected media type.\n */\n if (generatedBody && isContentTypeHeader(name)) {\n return false;\n }\n\n return true;\n });\n\n const headerCode = headers.map(\n ([name, value]) =>\n ` .addHeader(${escapeJava(String(name))}, ${escapeJava(\n String(value),\n )})`,\n );\n\n return [\n [...imports].sort().join(\"\\n\"),\n \"\",\n ...comments.map((comment) => `// ${safeComment(comment)}`),\n \"\",\n \"fun main() {\",\n \" val client = OkHttpClient.Builder()\",\n \" .connectTimeout(Duration.ofSeconds(30))\",\n \" .readTimeout(Duration.ofSeconds(30))\",\n \" .writeTimeout(Duration.ofSeconds(30))\",\n \" .callTimeout(Duration.ofSeconds(30))\",\n \" .build()\",\n \"\",\n bodyCode,\n \"\",\n \" val httpRequest = Request.Builder()\",\n ` .url(${escapeJava(compiled.url)})`,\n ...headerCode,\n ` .method(${escapeJava(method)}, body)`,\n \" .build()\",\n \"\",\n \" try {\",\n \" client.newCall(httpRequest).execute().use { response ->\",\n \" val responseText = response.body?.string().orEmpty()\",\n \"\",\n \" if (!response.isSuccessful) {\",\n \" throw IllegalStateException(\",\n ' \"HTTP ${response.code} ${response.message}: $responseText\"',\n \" )\",\n \" }\",\n \"\",\n \" println(responseText)\",\n \" }\",\n \" } finally {\",\n \" client.dispatcher.executorService.shutdown()\",\n \" client.connectionPool.evictAll()\",\n \" client.cache?.close()\",\n \" }\",\n \"}\",\n ].join(\"\\n\");\n}\n","import { emit as emitBrowserAxios } from \"../javascript/axios\";\nimport type { RequestIR } from \"../../types\";\nexport function emit(request: RequestIR): string {\n return emitBrowserAxios(request);\n}\n","import { emit as emitBrowserFetch } from \"../javascript/fetch\";\nimport type { RequestIR } from \"../../types\";\nexport function emit(request: RequestIR): string {\n return `import fetch from \"node-fetch\";\\n\\n${emitBrowserFetch(request)}`;\n}\n","import { emit as emitBrowserOfetch } from \"../javascript/ofetch\";\nimport type { RequestIR } from \"../../types\";\nexport function emit(request: RequestIR): string {\n return emitBrowserOfetch(request);\n}\n","import {\n DEFAULT_BINARY_MEDIA_TYPE,\n DEFAULT_FILE_NAME,\n DEFAULT_FILE_PATH,\n bodyText,\n compile,\n escapeJs,\n fileComment,\n form,\n hasFormBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n nonBlankString,\n normalizeMethod,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { FileValue, RequestIR } from \"../../types\";\n\nfunction safeComment(value: string): string {\n return value.replace(/[\\r\\n\\u0000-\\u001f\\u007f\\u2028\\u2029]+/g, \" \").trim();\n}\n\nfunction textFieldValue(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n\n if (value === null || value === undefined) {\n return \"\";\n }\n\n if (\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n\n try {\n return JSON.stringify(value) ?? \"\";\n } catch {\n return String(value);\n }\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const multipart = Boolean(body && canHaveBody && hasMultipartBody(request));\n const generatedBody = Boolean(body && canHaveBody);\n\n const imports = new Set<string>(['import { fetch, Headers } from \"undici\";']);\n\n const comments: string[] = [\n \"Requires Node.js 20+, TypeScript 5.2+, and undici 6.x.\",\n \"Install: npm install undici@^6\",\n \"Install development tools: npm install --save-dev typescript@^5.2 @types/node\",\n \"Run: npx tsc request.ts --target ES2022 --module NodeNext --moduleResolution NodeNext && node request.js\",\n \"Fetch Headers may combine duplicate header values according to Fetch semantics.\",\n ];\n\n const setupLines: string[] = [];\n let bodyExpression: string | undefined;\n\n if (body && canHaveBody && multipart) {\n imports.add('import { Blob } from \"node:buffer\";');\n imports.add('import { readFile } from \"node:fs/promises\";');\n imports.delete('import { fetch, Headers } from \"undici\";');\n imports.add('import { fetch, FormData, Headers } from \"undici\";');\n\n setupLines.push(\" const formData = new FormData();\");\n\n let fileIndex = 0;\n\n for (const entry of toKeyValueBody(body.value)) {\n const fieldName = String(entry.name);\n\n if (entry.file && isFileValue(entry.value)) {\n const fileValue: FileValue = entry.value;\n const actualPath = nonBlankString(fileValue.path);\n const filePath = actualPath ?? DEFAULT_FILE_PATH;\n const fileName = nonBlankString(fileValue.name) ?? DEFAULT_FILE_NAME;\n const contentType =\n nonBlankString(fileValue.contentType) ?? DEFAULT_BINARY_MEDIA_TYPE;\n\n if (actualPath === undefined) {\n const comment = fileComment(filePath, fieldName).replace(\n /^\\/\\/\\s*/,\n \"\",\n );\n\n comments.push(safeComment(comment));\n }\n\n fileIndex += 1;\n const dataName = `fileData${fileIndex}`;\n\n setupLines.push(\n ` const ${dataName} = await readFile(${escapeJs(filePath)});`,\n ` formData.append(`,\n ` ${escapeJs(fieldName)},`,\n ` new Blob([${dataName}], { type: ${escapeJs(contentType)} }),`,\n ` ${escapeJs(fileName)},`,\n ` );`,\n );\n } else {\n setupLines.push(\n ` formData.append(`,\n ` ${escapeJs(fieldName)},`,\n ` ${escapeJs(textFieldValue(entry.value))},`,\n ` );`,\n );\n }\n }\n\n bodyExpression = \"formData\";\n } else if (body && canHaveBody) {\n const payload = hasFormBody(request) ? form(body.value) : bodyText(request);\n\n bodyExpression = escapeJs(payload);\n }\n\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n if (\n generatedBody &&\n (isContentLengthHeader(name) || isTransferEncodingHeader(name))\n ) {\n return false;\n }\n\n // FormData/undici must generate Content-Type with its boundary.\n if (multipart && isContentTypeHeader(name)) {\n return false;\n }\n\n return true;\n });\n\n const headerLines = headers.map(\n ([rawName, rawValue]) =>\n ` headers.append(${escapeJs(\n String(rawName),\n )}, ${escapeJs(String(rawValue))});`,\n );\n\n return [\n ...comments.map((comment) => `// ${safeComment(comment)}`),\n \"\",\n [...imports].sort().join(\"\\n\"),\n \"\",\n \"async function main(): Promise<void> {\",\n ...setupLines,\n ...(setupLines.length > 0 ? [\"\"] : []),\n \" const headers = new Headers();\",\n ...headerLines,\n \"\",\n ` const response = await fetch(${escapeJs(compiled.url)}, {`,\n ` method: ${escapeJs(method)},`,\n \" headers,\",\n ...(bodyExpression === undefined ? [] : [` body: ${bodyExpression},`]),\n \" signal: AbortSignal.timeout(30_000),\",\n \" });\",\n \"\",\n \" const responseText = await response.text();\",\n \"\",\n \" if (!response.ok) {\",\n \" throw new Error(\",\n \" `HTTP ${response.status} ${response.statusText}: ${responseText}`,\",\n \" );\",\n \" }\",\n \"\",\n \" console.log(responseText);\",\n \"}\",\n \"\",\n \"main().catch((error: unknown) => {\",\n \" const message =\",\n \" error instanceof Error ? error.message : String(error);\",\n \" console.error(`Request failed: ${message}`);\",\n \" process.exitCode = 1;\",\n \"});\",\n ].join(\"\\n\");\n}\n","import {\n DEFAULT_BINARY_MEDIA_TYPE,\n DEFAULT_FILE_NAME,\n DEFAULT_FILE_PATH,\n bodyText,\n compile,\n escapeObjC,\n fileComment,\n form,\n hasFormBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n nonBlankString,\n normalizeMethod,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { FileValue, RequestIR } from \"../../types\";\n\nfunction safeObjCComment(value: string): string {\n return value\n .replace(/\\*\\//g, \"* /\")\n .replace(/[\\r\\n\\u0000-\\u001f\\u007f\\u2028\\u2029]+/g, \" \")\n .trim();\n}\n\nfunction textFieldValue(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n\n if (value === null || value === undefined) {\n return \"\";\n }\n\n if (\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n\n try {\n return JSON.stringify(value) ?? \"\";\n } catch {\n return String(value);\n }\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const multipart = Boolean(body && canHaveBody && hasMultipartBody(request));\n const generatedBody = Boolean(body && canHaveBody);\n\n const comments: string[] = [\n \"Requires Apple Clang with Objective-C ARC and Foundation on macOS 12+.\",\n \"Compile: clang -fobjc-arc -framework Foundation main.m -o request\",\n \"NSURLRequest stores headers as a dictionary; duplicate names are combined with commas.\",\n ];\n\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n if (\n generatedBody &&\n (isContentLengthHeader(name) || isTransferEncodingHeader(name))\n ) {\n return false;\n }\n\n if (multipart && isContentTypeHeader(name)) {\n return false;\n }\n\n return true;\n });\n\n /*\n * NSMutableURLRequest cannot represent duplicate header names reliably.\n * Combine values case-insensitively, preserving their input order.\n */\n const combinedHeaders: Array<[string, string[]]> = [];\n const headerIndexes = new Map<string, number>();\n\n for (const [rawName, rawValue] of headers) {\n const name = String(rawName);\n const value = String(rawValue);\n const normalizedName = name.toLowerCase();\n const existingIndex = headerIndexes.get(normalizedName);\n\n if (existingIndex === undefined) {\n headerIndexes.set(normalizedName, combinedHeaders.length);\n combinedHeaders.push([name, [value]]);\n } else {\n combinedHeaders[existingIndex][1].push(value);\n }\n }\n\n const bodyLines: string[] = [];\n\n if (body && canHaveBody && multipart) {\n bodyLines.push(\n ` NSString *boundary = [NSString stringWithFormat:@\"Boundary-%@\", NSUUID.UUID.UUIDString];`,\n ` NSMutableData *bodyData = [NSMutableData data];`,\n );\n\n for (const [index, entry] of toKeyValueBody(body.value).entries()) {\n const fieldName = String(entry.name);\n\n if (entry.file && isFileValue(entry.value)) {\n const fileValue: FileValue = entry.value;\n const actualPath = nonBlankString(fileValue.path);\n const filePath = actualPath ?? DEFAULT_FILE_PATH;\n const fileName = nonBlankString(fileValue.name) ?? DEFAULT_FILE_NAME;\n const contentType =\n nonBlankString(fileValue.contentType) ?? DEFAULT_BINARY_MEDIA_TYPE;\n\n if (actualPath === undefined) {\n comments.push(safeObjCComment(fileComment(filePath, fieldName)));\n }\n\n bodyLines.push(\n ` AppendUTF8(bodyData, [NSString stringWithFormat:@\"--%@\\\\r\\\\n\", boundary]);`,\n ` AppendUTF8(bodyData, [NSString stringWithFormat:`,\n ` @\"Content-Disposition: form-data; name=\\\\\"%@\\\\\"; filename=\\\\\"%@\\\\\"\\\\r\\\\n\",`,\n ` QuoteMultipartValue(${escapeObjC(fieldName)}),`,\n ` QuoteMultipartValue(${escapeObjC(fileName)})]);`,\n ` AppendUTF8(bodyData, [NSString stringWithFormat:`,\n ` @\"Content-Type: %@\\\\r\\\\n\\\\r\\\\n\",`,\n ` SafeMediaType(${escapeObjC(contentType)})]);`,\n ` NSURL *fileURL${index} = [NSURL fileURLWithPath:${escapeObjC(filePath)}];`,\n ` NSError *fileError${index} = nil;`,\n ` NSData *fileData${index} = [NSData dataWithContentsOfURL:fileURL${index}`,\n ` options:NSDataReadingMappedIfSafe`,\n ` error:&fileError${index}];`,\n ` if (fileData${index} == nil) {`,\n ` fprintf(stderr, \"Failed to read multipart file: %s\\\\n\",`,\n ` fileError${index}.localizedDescription.UTF8String ?: \"unknown error\");`,\n ` return EXIT_FAILURE;`,\n ` }`,\n ` [bodyData appendData:fileData${index}];`,\n ` AppendUTF8(bodyData, @\"\\\\r\\\\n\");`,\n );\n } else {\n bodyLines.push(\n ` AppendUTF8(bodyData, [NSString stringWithFormat:@\"--%@\\\\r\\\\n\", boundary]);`,\n ` AppendUTF8(bodyData, [NSString stringWithFormat:`,\n ` @\"Content-Disposition: form-data; name=\\\\\"%@\\\\\"\\\\r\\\\n\\\\r\\\\n\",`,\n ` QuoteMultipartValue(${escapeObjC(fieldName)})]);`,\n ` AppendUTF8(bodyData, ${escapeObjC(\n textFieldValue(entry.value),\n )});`,\n ` AppendUTF8(bodyData, @\"\\\\r\\\\n\");`,\n );\n }\n }\n\n bodyLines.push(\n ` AppendUTF8(bodyData, [NSString stringWithFormat:@\"--%@--\\\\r\\\\n\", boundary]);`,\n ` urlRequest.HTTPBody = bodyData;`,\n ` [urlRequest setValue:`,\n ` [NSString stringWithFormat:@\"multipart/form-data; boundary=%@\", boundary]`,\n ` forHTTPHeaderField:@\"Content-Type\"];`,\n );\n } else if (body && canHaveBody) {\n const payload = hasFormBody(request) ? form(body.value) : bodyText(request);\n\n bodyLines.push(\n ` NSData *requestBody = [${escapeObjC(payload)}`,\n ` dataUsingEncoding:NSUTF8StringEncoding];`,\n ` if (requestBody == nil) {`,\n ` fprintf(stderr, \"Failed to encode request body as UTF-8\\\\n\");`,\n ` return EXIT_FAILURE;`,\n ` }`,\n ` urlRequest.HTTPBody = requestBody;`,\n );\n }\n\n return [\n ...comments.map((comment) => `/* ${safeObjCComment(comment)} */`),\n ``,\n `@import Foundation;`,\n `#include <stdio.h>`,\n `#include <stdlib.h>`,\n ``,\n `static void AppendUTF8(NSMutableData *data, NSString *value) {`,\n ` NSData *encoded = [value dataUsingEncoding:NSUTF8StringEncoding];`,\n ` if (encoded != nil) {`,\n ` [data appendData:encoded];`,\n ` }`,\n `}`,\n ``,\n `static NSString *QuoteMultipartValue(NSString *value) {`,\n ` NSMutableString *result = [NSMutableString stringWithCapacity:value.length];`,\n ``,\n ` for (NSUInteger index = 0; index < value.length; index++) {`,\n ` unichar character = [value characterAtIndex:index];`,\n ``,\n ` switch (character) {`,\n ` case '\\\\r':`,\n ` case '\\\\n':`,\n ` [result appendString:@\" \"];`,\n ` break;`,\n ` case '\"':`,\n ` [result appendString:@\"\\\\\\\\\\\\\"\"];`,\n ` break;`,\n ` case '\\\\\\\\':`,\n ` [result appendString:@\"\\\\\\\\\\\\\\\\\"];`,\n ` break;`,\n ` default:`,\n ` if (character < 0x20 || character == 0x7F) {`,\n ` [result appendString:@\" \"];`,\n ` } else {`,\n ` [result appendFormat:@\"%C\", character];`,\n ` }`,\n ` break;`,\n ` }`,\n ` }`,\n ``,\n ` return result;`,\n `}`,\n ``,\n `static NSString *SafeMediaType(NSString *value) {`,\n ` NSMutableString *result = [NSMutableString stringWithCapacity:value.length];`,\n ``,\n ` for (NSUInteger index = 0; index < value.length; index++) {`,\n ` unichar character = [value characterAtIndex:index];`,\n ` if (character >= 0x21 && character <= 0x7E) {`,\n ` [result appendFormat:@\"%C\", character];`,\n ` }`,\n ` }`,\n ``,\n ` NSString *trimmed = [result stringByTrimmingCharactersInSet:`,\n ` NSCharacterSet.whitespaceAndNewlineCharacterSet];`,\n ` return trimmed.length > 0 ? trimmed : @\"application/octet-stream\";`,\n `}`,\n ``,\n `int main(void) {`,\n ` @autoreleasepool {`,\n ` NSString *urlString = ${escapeObjC(compiled.url)};`,\n ` NSURL *url = [NSURL URLWithString:urlString];`,\n ` if (url == nil) {`,\n ` fprintf(stderr, \"Invalid URL: %s\\\\n\", urlString.UTF8String);`,\n ` return EXIT_FAILURE;`,\n ` }`,\n ``,\n ` NSMutableURLRequest *urlRequest =`,\n ` [NSMutableURLRequest requestWithURL:url];`,\n ` urlRequest.HTTPMethod = ${escapeObjC(method)};`,\n ` urlRequest.timeoutInterval = 30.0;`,\n ...combinedHeaders.map(\n ([name, values]) =>\n ` [urlRequest setValue:${escapeObjC(\n values.join(\", \"),\n )} forHTTPHeaderField:${escapeObjC(name)}];`,\n ),\n ...bodyLines,\n ``,\n ` NSURLSessionConfiguration *configuration =`,\n ` [NSURLSessionConfiguration ephemeralSessionConfiguration];`,\n ` configuration.timeoutIntervalForRequest = 30.0;`,\n ` configuration.timeoutIntervalForResource = 30.0;`,\n ``,\n ` NSURLSession *session =`,\n ` [NSURLSession sessionWithConfiguration:configuration];`,\n ` dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);`,\n ` __block int exitCode = EXIT_FAILURE;`,\n ``,\n ` NSURLSessionDataTask *task = [session`,\n ` dataTaskWithRequest:urlRequest`,\n ` completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {`,\n ` @autoreleasepool {`,\n ` if (error != nil) {`,\n ` fprintf(stderr, \"Request failed: %s\\\\n\",`,\n ` error.localizedDescription.UTF8String ?: \"unknown error\");`,\n ` dispatch_semaphore_signal(semaphore);`,\n ` return;`,\n ` }`,\n ``,\n ` if (![response isKindOfClass:NSHTTPURLResponse.class]) {`,\n ` fprintf(stderr, \"The server returned a non-HTTP response\\\\n\");`,\n ` dispatch_semaphore_signal(semaphore);`,\n ` return;`,\n ` }`,\n ``,\n ` NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;`,\n ` NSString *responseText = [[NSString alloc]`,\n ` initWithData:(data ?: [NSData data])`,\n ` encoding:NSUTF8StringEncoding];`,\n ` if (responseText == nil) {`,\n ` responseText = [[NSString alloc]`,\n ` initWithData:(data ?: [NSData data])`,\n ` encoding:NSISOLatin1StringEncoding] ?: @\"\";`,\n ` }`,\n ``,\n ` if (httpResponse.statusCode < 200 ||`,\n ` httpResponse.statusCode >= 300) {`,\n ` fprintf(stderr, \"HTTP status %ld: %s\\\\n\",`,\n ` (long)httpResponse.statusCode,`,\n ` responseText.UTF8String ?: \"\");`,\n ` dispatch_semaphore_signal(semaphore);`,\n ` return;`,\n ` }`,\n ``,\n ` printf(\"%s\\\\n\", responseText.UTF8String ?: \"\");`,\n ` exitCode = EXIT_SUCCESS;`,\n ` dispatch_semaphore_signal(semaphore);`,\n ` }`,\n ` }];`,\n ``,\n ` [task resume];`,\n ` dispatch_time_t deadline = dispatch_time(`,\n ` DISPATCH_TIME_NOW,`,\n ` (int64_t)(30.0 * NSEC_PER_SEC)`,\n ` );`,\n ` if (dispatch_semaphore_wait(semaphore, deadline) != 0) {`,\n ` [task cancel];`,\n ` fprintf(stderr, \"Request timed out after 30 seconds\\\\n\");`,\n ` exitCode = EXIT_FAILURE;`,\n ` }`,\n ``,\n ` [session finishTasksAndInvalidate];`,\n ` return exitCode;`,\n ` }`,\n `}`,\n ].join(\"\\n\");\n}\n","import {\n DEFAULT_BINARY_MEDIA_TYPE,\n DEFAULT_FILE_NAME,\n DEFAULT_FILE_PATH,\n bodyText,\n compile,\n escapeOCaml,\n fileComment,\n form,\n hasFormBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n nonBlankString,\n normalizeMethod,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { FileValue, RequestIR } from \"../../types\";\n\nfunction safeOCamlComment(value: string): string {\n return value\n .replace(/\\(\\*/g, \"( *\")\n .replace(/\\*\\)/g, \"* )\")\n .replace(/[\\r\\n\\u0000-\\u001f\\u007f\\u2028\\u2029]+/g, \" \")\n .trim();\n}\n\nfunction textFieldValue(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n\n if (value === null || value === undefined) {\n return \"\";\n }\n\n if (\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n\n try {\n return JSON.stringify(value) ?? \"\";\n } catch {\n return String(value);\n }\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const multipart = Boolean(body && canHaveBody && hasMultipartBody(request));\n const generatedBody = Boolean(body && canHaveBody);\n\n const comments: string[] = [\n \"Requires OCaml 5.1+, cohttp-lwt-unix 6.x, lwt 5.x, and uri 4.x.\",\n \"Install: opam install cohttp-lwt-unix lwt uri\",\n \"Compile: ocamlfind ocamlopt -thread -linkpkg -package cohttp-lwt-unix,lwt.unix,uri main.ml -o request\",\n \"Cohttp Header.add preserves repeated header fields.\",\n ];\n\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n if (\n generatedBody &&\n (isContentLengthHeader(name) || isTransferEncodingHeader(name))\n ) {\n return false;\n }\n\n if (multipart && isContentTypeHeader(name)) {\n return false;\n }\n\n return true;\n });\n\n const bodyLines: string[] = [];\n\n if (body && canHaveBody && multipart) {\n const items = toKeyValueBody(body.value);\n\n bodyLines.push(\n ` let boundary =`,\n ` \"Boundary-\" ^ Uuidm.to_string (Uuidm.v \\`V4)`,\n ` in`,\n ` let buffer = Buffer.create 4096 in`,\n );\n\n for (const [index, entry] of items.entries()) {\n const fieldName = String(entry.name);\n\n if (entry.file && isFileValue(entry.value)) {\n const fileValue: FileValue = entry.value;\n const actualPath = nonBlankString(fileValue.path);\n const filePath = actualPath ?? DEFAULT_FILE_PATH;\n const fileName = nonBlankString(fileValue.name) ?? DEFAULT_FILE_NAME;\n const contentType =\n nonBlankString(fileValue.contentType) ?? DEFAULT_BINARY_MEDIA_TYPE;\n\n if (actualPath === undefined) {\n comments.push(safeOCamlComment(fileComment(filePath, fieldName)));\n }\n\n bodyLines.push(\n ` Buffer.add_string buffer (\"--\" ^ boundary ^ \"\\\\r\\\\n\");`,\n ` Buffer.add_string buffer`,\n ` (\"Content-Disposition: form-data; name=\\\\\"\" ^`,\n ` quote_multipart_value ${escapeOCaml(fieldName)} ^`,\n ` \"\\\\\"; filename=\\\\\"\" ^`,\n ` quote_multipart_value ${escapeOCaml(fileName)} ^`,\n ` \"\\\\\"\\\\r\\\\n\");`,\n ` Buffer.add_string buffer`,\n ` (\"Content-Type: \" ^`,\n ` safe_media_type ${escapeOCaml(contentType)} ^`,\n ` \"\\\\r\\\\n\\\\r\\\\n\");`,\n ` let file_content_${index} =`,\n ` read_file ${escapeOCaml(filePath)}`,\n ` in`,\n ` Buffer.add_string buffer file_content_${index};`,\n ` Buffer.add_string buffer \"\\\\r\\\\n\";`,\n );\n } else {\n bodyLines.push(\n ` Buffer.add_string buffer (\"--\" ^ boundary ^ \"\\\\r\\\\n\");`,\n ` Buffer.add_string buffer`,\n ` (\"Content-Disposition: form-data; name=\\\\\"\" ^`,\n ` quote_multipart_value ${escapeOCaml(fieldName)} ^`,\n ` \"\\\\\"\\\\r\\\\n\\\\r\\\\n\");`,\n ` Buffer.add_string buffer ${escapeOCaml(\n textFieldValue(entry.value),\n )};`,\n ` Buffer.add_string buffer \"\\\\r\\\\n\";`,\n );\n }\n }\n\n bodyLines.push(\n ` Buffer.add_string buffer (\"--\" ^ boundary ^ \"--\\\\r\\\\n\");`,\n ` let request_body = Cohttp_lwt.Body.of_string (Buffer.contents buffer) in`,\n ` let headers =`,\n ` Header.add headers \"Content-Type\"`,\n ` (\"multipart/form-data; boundary=\" ^ boundary)`,\n ` in`,\n );\n } else if (body && canHaveBody) {\n const payload = hasFormBody(request) ? form(body.value) : bodyText(request);\n\n bodyLines.push(\n ` let request_body =`,\n ` Cohttp_lwt.Body.of_string ${escapeOCaml(payload)}`,\n ` in`,\n );\n } else {\n bodyLines.push(` let request_body = Cohttp_lwt.Body.empty in`);\n }\n\n return [\n ...comments.map((comment) => `(* ${safeOCamlComment(comment)} *)`),\n ``,\n `open Lwt.Infix`,\n ``,\n `exception Http_error of int * string`,\n ``,\n `let read_file path =`,\n ` let channel = open_in_bin path in`,\n ` Fun.protect`,\n ` ~finally:(fun () -> close_in_noerr channel)`,\n ` (fun () ->`,\n ` let length = in_channel_length channel in`,\n ` really_input_string channel length)`,\n ``,\n `let quote_multipart_value value =`,\n ` let buffer = Buffer.create (String.length value) in`,\n ` String.iter`,\n ` (function`,\n ` | '\\\\r' | '\\\\n' -> Buffer.add_char buffer ' '`,\n ` | '\"' -> Buffer.add_string buffer \"\\\\\\\\\\\\\"\"`,\n ` | '\\\\\\\\' -> Buffer.add_string buffer \"\\\\\\\\\\\\\\\\\"`,\n ` | character ->`,\n ` if Char.code character < 32 || Char.code character = 127 then`,\n ` Buffer.add_char buffer ' '`,\n ` else`,\n ` Buffer.add_char buffer character)`,\n ` value;`,\n ` Buffer.contents buffer`,\n ``,\n `let safe_media_type value =`,\n ` let buffer = Buffer.create (String.length value) in`,\n ` String.iter`,\n ` (fun character ->`,\n ` let code = Char.code character in`,\n ` if code >= 33 && code <= 126 then`,\n ` Buffer.add_char buffer character)`,\n ` value;`,\n ` let result = String.trim (Buffer.contents buffer) in`,\n ` if result = \"\" then \"application/octet-stream\" else result`,\n ``,\n `let method_of_string value =`,\n ` match String.uppercase_ascii value with`,\n ` | \"GET\" -> \\`GET`,\n ` | \"HEAD\" -> \\`HEAD`,\n ` | \"POST\" -> \\`POST`,\n ` | \"PUT\" -> \\`PUT`,\n ` | \"DELETE\" -> \\`DELETE`,\n ` | \"PATCH\" -> \\`PATCH`,\n ` | \"OPTIONS\" -> \\`OPTIONS`,\n ` | \"CONNECT\" -> \\`CONNECT`,\n ` | \"TRACE\" -> \\`TRACE`,\n ` | other -> \\`Other other`,\n ``,\n `let add_headers headers values =`,\n ` List.fold_left`,\n ` (fun result (name, value) ->`,\n ` Cohttp.Header.add result name value)`,\n ` headers`,\n ` values`,\n ``,\n `let run () =`,\n ` let uri = Uri.of_string ${escapeOCaml(compiled.url)} in`,\n ` let http_method = method_of_string ${escapeOCaml(method)} in`,\n ` let headers =`,\n ` add_headers (Cohttp.Header.init ())`,\n ` [`,\n ...headers.map(\n ([rawName, rawValue]) =>\n ` (${escapeOCaml(String(rawName))}, ${escapeOCaml(\n String(rawValue),\n )});`,\n ),\n ` ]`,\n ` in`,\n ...bodyLines,\n ` let request =`,\n ` Cohttp_lwt_unix.Client.call`,\n ` ~headers`,\n ` ~body:request_body`,\n ` http_method`,\n ` uri`,\n ` in`,\n ` Lwt_unix.with_timeout 30.0 (fun () -> request)`,\n ` >>= fun (response, response_body) ->`,\n ` Cohttp_lwt.Body.to_string response_body`,\n ` >>= fun response_text ->`,\n ` let status =`,\n ` Cohttp.Response.status response`,\n ` in`,\n ` let status_code = Cohttp.Code.code_of_status status in`,\n ` if status_code < 200 || status_code > 299 then`,\n ` Lwt.fail (Http_error (status_code, response_text))`,\n ` else`,\n ` Lwt_io.print response_text`,\n ``,\n `let report_error error =`,\n ` let message =`,\n ` match error with`,\n ` | Http_error (status, response_body) ->`,\n ` Printf.sprintf`,\n ` \"HTTP status %d: %s\"`,\n ` status`,\n ` response_body`,\n ` | Lwt_unix.Timeout ->`,\n ` \"Request timed out after 30 seconds\"`,\n ` | other -> Printexc.to_string other`,\n ` in`,\n ` Lwt_io.eprintlf \"Request failed: %s\" message`,\n ``,\n `let () =`,\n ` match Lwt_main.run (Lwt.catch run report_error) with`,\n ` | () -> ()`,\n ` | exception error ->`,\n ` prerr_endline (\"Request failed: \" ^ Printexc.to_string error);`,\n ` exit 1`,\n ].join(\"\\n\");\n}\n","import {\n DEFAULT_BINARY_MEDIA_TYPE,\n DEFAULT_FILE_NAME,\n DEFAULT_FILE_PATH,\n bodyText,\n compile,\n escapePhp,\n fileComment,\n form,\n hasFormBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n nonBlankString,\n normalizeMethod,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { FileValue, RequestIR } from \"../../types\";\n\nfunction safeComment(value: string): string {\n return value\n .replace(/^\\/\\/\\s*/, \"\")\n .replace(/[\\r\\n\\u0000-\\u001f\\u007f\\u2028\\u2029]+/g, \" \")\n .trim();\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const multipart = Boolean(body) && canHaveBody && hasMultipartBody(request);\n const generatedBody = Boolean(body && canHaveBody);\n\n const comments: string[] = [];\n const setupLines: string[] = [];\n let bodyExpression: string | undefined;\n\n if (body && multipart) {\n const fieldLines: string[] = [];\n let fileIndex = 0;\n\n for (const entry of toKeyValueBody(body.value)) {\n const fieldName = String(entry.name);\n\n if (entry.file && isFileValue(entry.value)) {\n const fileValue: FileValue = entry.value;\n const filePath = nonBlankString(fileValue.path) ?? DEFAULT_FILE_PATH;\n const fileName = nonBlankString(fileValue.name) ?? DEFAULT_FILE_NAME;\n const contentType =\n nonBlankString(fileValue.contentType) ?? DEFAULT_BINARY_MEDIA_TYPE;\n const variable = `$file${++fileIndex}`;\n\n if (!nonBlankString(fileValue.path)) {\n comments.push(safeComment(fileComment(filePath, fieldName)));\n }\n\n setupLines.push(\n `${variable} = new CURLFile(`,\n ` ${escapePhp(filePath)},`,\n ` ${escapePhp(contentType)},`,\n ` ${escapePhp(fileName)}`,\n `);`,\n );\n\n fieldLines.push(` ${escapePhp(fieldName)} => ${variable},`);\n } else {\n fieldLines.push(\n ` ${escapePhp(fieldName)} => ${escapePhp(\n entry.value == null\n ? \"\"\n : typeof entry.value === \"string\"\n ? entry.value\n : JSON.stringify(entry.value),\n )},`,\n );\n }\n }\n\n setupLines.push(\"$postFields = [\", ...fieldLines, \"];\");\n bodyExpression = \"$postFields\";\n } else if (body && canHaveBody) {\n bodyExpression = escapePhp(\n hasFormBody(request) ? form(body.value) : bodyText(request),\n );\n }\n\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n if (\n generatedBody &&\n (isContentLengthHeader(name) || isTransferEncodingHeader(name))\n ) {\n return false;\n }\n\n if (multipart && isContentTypeHeader(name)) {\n return false;\n }\n\n return true;\n });\n\n return [\n \"<?php\",\n \"\",\n \"declare(strict_types=1);\",\n \"\",\n ...comments.map((comment) => `// ${comment}`),\n ...(comments.length > 0 ? [\"\"] : []),\n ...setupLines,\n ...(setupLines.length > 0 ? [\"\"] : []),\n \"$ch = curl_init();\",\n \"\",\n \"if ($ch === false) {\",\n \" throw new RuntimeException('Unable to initialize cURL');\",\n \"}\",\n \"\",\n \"try {\",\n \" curl_setopt_array($ch, [\",\n ` CURLOPT_URL => ${escapePhp(compiled.url)},`,\n ` CURLOPT_CUSTOMREQUEST => ${escapePhp(method)},`,\n \" CURLOPT_RETURNTRANSFER => true,\",\n \" CURLOPT_CONNECTTIMEOUT => 10,\",\n \" CURLOPT_TIMEOUT => 30,\",\n ...(headers.length > 0\n ? [\n \" CURLOPT_HTTPHEADER => [\",\n ...headers.map(\n ([name, value]) =>\n ` ${escapePhp(`${String(name)}: ${String(value)}`)},`,\n ),\n \" ],\",\n ]\n : []),\n ...(bodyExpression ? [` CURLOPT_POSTFIELDS => ${bodyExpression},`] : []),\n \" ]);\",\n \"\",\n \" $responseBody = curl_exec($ch);\",\n \"\",\n \" if ($responseBody === false) {\",\n \" throw new RuntimeException(\",\n \" sprintf('cURL error %d: %s', curl_errno($ch), curl_error($ch))\",\n \" );\",\n \" }\",\n \"\",\n \" $statusCode = (int) curl_getinfo($ch, CURLINFO_RESPONSE_CODE);\",\n \"\",\n \" if ($statusCode < 200 || $statusCode >= 300) {\",\n \" throw new RuntimeException(\",\n \" sprintf('HTTP %d: %s', $statusCode, $responseBody)\",\n \" );\",\n \" }\",\n \"\",\n \" echo $responseBody;\",\n \"} finally {\",\n \" curl_close($ch);\",\n \"}\",\n ].join(\"\\n\");\n}\n","import {\n DEFAULT_BINARY_MEDIA_TYPE,\n DEFAULT_FILE_NAME,\n DEFAULT_FILE_PATH,\n bodyText,\n compile,\n escapePhp,\n fileComment,\n form,\n hasFormBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n nonBlankString,\n normalizeMethod,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { FileValue, RequestIR } from \"../../types\";\n\nfunction safeComment(value: string): string {\n return value\n .replace(/^\\/\\/\\s*/, \"\")\n .replace(/[\\r\\n\\u0000-\\u001f\\u007f\\u2028\\u2029]+/g, \" \")\n .trim();\n}\n\nfunction phpHeaderArray(headers: Array<[string, string]>): string[] {\n const grouped = new Map<string, { name: string; values: string[] }>();\n\n for (const [rawName, rawValue] of headers) {\n const name = String(rawName);\n const key = name.trim().toLowerCase();\n const existing = grouped.get(key);\n\n if (existing) {\n existing.values.push(String(rawValue));\n } else {\n grouped.set(key, {\n name,\n values: [String(rawValue)],\n });\n }\n }\n\n const lines = [\" 'headers' => [\"];\n\n for (const { name, values } of grouped.values()) {\n if (values.length === 1) {\n lines.push(` ${escapePhp(name)} => ${escapePhp(values[0])},`);\n } else {\n lines.push(\n ` ${escapePhp(name)} => [`,\n ...values.map((value) => ` ${escapePhp(value)},`),\n \" ],\",\n );\n }\n }\n\n lines.push(\" ],\");\n return lines;\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const multipart = Boolean(body) && canHaveBody && hasMultipartBody(request);\n const generatedBody = Boolean(body && canHaveBody);\n\n const comments: string[] = [];\n const resourceVariables: string[] = [];\n const multipartLines: string[] = [];\n\n if (body && multipart) {\n let fileIndex = 0;\n\n for (const entry of toKeyValueBody(body.value)) {\n const fieldName = String(entry.name);\n\n if (entry.file && isFileValue(entry.value)) {\n const fileValue: FileValue = entry.value;\n const filePath = nonBlankString(fileValue.path) ?? DEFAULT_FILE_PATH;\n const fileName = nonBlankString(fileValue.name) ?? DEFAULT_FILE_NAME;\n const contentType =\n nonBlankString(fileValue.contentType) ?? DEFAULT_BINARY_MEDIA_TYPE;\n const variable = `$fileHandle${++fileIndex}`;\n\n if (!nonBlankString(fileValue.path)) {\n comments.push(safeComment(fileComment(filePath, fieldName)));\n }\n\n resourceVariables.push(variable);\n\n multipartLines.push(\n \" [\",\n ` 'name' => ${escapePhp(fieldName)},`,\n ` 'contents' => ${variable},`,\n ` 'filename' => ${escapePhp(fileName)},`,\n \" 'headers' => [\",\n ` 'Content-Type' => ${escapePhp(contentType)},`,\n \" ],\",\n \" ],\",\n );\n } else {\n const value =\n entry.value == null\n ? \"\"\n : typeof entry.value === \"string\"\n ? entry.value\n : JSON.stringify(entry.value);\n\n multipartLines.push(\n \" [\",\n ` 'name' => ${escapePhp(fieldName)},`,\n ` 'contents' => ${escapePhp(value)},`,\n \" ],\",\n );\n }\n }\n }\n\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n if (\n generatedBody &&\n (isContentLengthHeader(name) || isTransferEncodingHeader(name))\n ) {\n return false;\n }\n\n if (multipart && isContentTypeHeader(name)) {\n return false;\n }\n\n return true;\n });\n\n const requestOptions = [\n ...phpHeaderArray(headers),\n \" 'connect_timeout' => 10.0,\",\n \" 'timeout' => 30.0,\",\n \" 'http_errors' => false,\",\n ];\n\n if (body && canHaveBody) {\n if (multipart) {\n requestOptions.push(\" 'multipart' => [\", ...multipartLines, \" ],\");\n } else {\n requestOptions.push(\n ` 'body' => ${escapePhp(\n hasFormBody(request) ? form(body.value) : bodyText(request),\n )},`,\n );\n }\n }\n\n return [\n \"<?php\",\n \"\",\n \"declare(strict_types=1);\",\n \"\",\n \"require __DIR__ . '/vendor/autoload.php';\",\n \"\",\n \"use GuzzleHttp\\\\Client;\",\n \"\",\n ...comments.map((comment) => `// ${comment}`),\n ...(comments.length > 0 ? [\"\"] : []),\n \"$client = new Client();\",\n ...resourceVariables.map(\n (variable, index) =>\n `${variable} = fopen(${escapePhp(\n nonBlankString(\n (\n toKeyValueBody(body?.value).filter(\n (entry) => entry.file && isFileValue(entry.value),\n )[index]?.value as FileValue | undefined\n )?.path,\n ) ?? DEFAULT_FILE_PATH,\n )}, 'rb');`,\n ),\n ...(resourceVariables.length > 0 ? [\"\"] : []),\n ...resourceVariables.flatMap((variable) => [\n `if (${variable} === false) {`,\n ` throw new RuntimeException('Unable to open multipart file');`,\n \"}\",\n ]),\n ...(resourceVariables.length > 0 ? [\"\"] : []),\n \"try {\",\n ` $response = $client->request(${escapePhp(method)}, ${escapePhp(\n compiled.url,\n )}, [`,\n ...requestOptions,\n \" ]);\",\n \"\",\n \" $responseBody = (string) $response->getBody();\",\n \" $statusCode = $response->getStatusCode();\",\n \"\",\n \" if ($statusCode < 200 || $statusCode >= 300) {\",\n \" throw new RuntimeException(\",\n \" sprintf('HTTP %d: %s', $statusCode, $responseBody)\",\n \" );\",\n \" }\",\n \"\",\n \" echo $responseBody;\",\n \"} finally {\",\n ...resourceVariables.map(\n (variable) => ` if (is_resource(${variable})) { fclose(${variable}); }`,\n ),\n \"}\",\n ].join(\"\\n\");\n}\n","import {\n DEFAULT_BINARY_MEDIA_TYPE,\n DEFAULT_FILE_NAME,\n DEFAULT_FILE_PATH,\n bodyText,\n compile,\n escapePhp,\n fileComment,\n form,\n hasFormBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n nonBlankString,\n normalizeMethod,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { FileValue, RequestIR } from \"../../types\";\n\nfunction safeComment(value: string): string {\n return value\n .replace(/^\\/\\/\\s*/, \"\")\n .replace(/[\\r\\n\\u0000-\\u001f\\u007f\\u2028\\u2029]+/g, \" \")\n .trim();\n}\n\nfunction phpHeaders(headers: Array<[string, string]>): string[] {\n const grouped = new Map<string, { name: string; values: string[] }>();\n\n for (const [rawName, rawValue] of headers) {\n const name = String(rawName);\n const key = name.trim().toLowerCase();\n const existing = grouped.get(key);\n\n if (existing) {\n existing.values.push(String(rawValue));\n } else {\n grouped.set(key, {\n name,\n values: [String(rawValue)],\n });\n }\n }\n\n const lines = [\"$headers = [\"];\n\n for (const { name, values } of grouped.values()) {\n if (values.length === 1) {\n lines.push(` ${escapePhp(name)} => ${escapePhp(values[0])},`);\n } else {\n lines.push(\n ` ${escapePhp(name)} => [`,\n ...values.map((value) => ` ${escapePhp(value)},`),\n \" ],\",\n );\n }\n }\n\n lines.push(\"];\");\n return lines;\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const multipart = Boolean(body) && canHaveBody && hasMultipartBody(request);\n const generatedBody = Boolean(body && canHaveBody);\n\n const comments: string[] = [];\n const setupLines: string[] = [];\n const attachLines: string[] = [];\n const dataLines: string[] = [];\n const fileVariables: string[] = [];\n\n if (body && multipart) {\n let fileIndex = 0;\n\n for (const entry of toKeyValueBody(body.value)) {\n const fieldName = String(entry.name);\n\n if (entry.file && isFileValue(entry.value)) {\n const fileValue: FileValue = entry.value;\n const filePath = nonBlankString(fileValue.path) ?? DEFAULT_FILE_PATH;\n const fileName = nonBlankString(fileValue.name) ?? DEFAULT_FILE_NAME;\n const contentType =\n nonBlankString(fileValue.contentType) ?? DEFAULT_BINARY_MEDIA_TYPE;\n const variable = `$fileHandle${++fileIndex}`;\n\n if (!nonBlankString(fileValue.path)) {\n comments.push(safeComment(fileComment(filePath, fieldName)));\n }\n\n fileVariables.push(variable);\n\n setupLines.push(\n `${variable} = fopen(${escapePhp(filePath)}, 'rb');`,\n `if (${variable} === false) {`,\n ` throw new RuntimeException(${escapePhp(\n `Unable to open multipart file: ${filePath}`,\n )});`,\n \"}\",\n );\n\n attachLines.push(\n ` ->attach(${escapePhp(fieldName)}, ${variable}, ${escapePhp(\n fileName,\n )}, ['Content-Type' => ${escapePhp(contentType)}])`,\n );\n } else {\n const value =\n entry.value == null\n ? \"\"\n : typeof entry.value === \"string\"\n ? entry.value\n : JSON.stringify(entry.value);\n\n dataLines.push(` ${escapePhp(fieldName)} => ${escapePhp(value)},`);\n }\n }\n }\n\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n if (\n generatedBody &&\n (isContentLengthHeader(name) || isTransferEncodingHeader(name))\n ) {\n return false;\n }\n\n if (multipart && isContentTypeHeader(name)) {\n return false;\n }\n\n return true;\n });\n\n let sendLine: string;\n\n if (!body || !canHaveBody) {\n sendLine = ` ->send(${escapePhp(method)}, ${escapePhp(compiled.url)});`;\n } else if (multipart) {\n sendLine = ` ->${method.toLowerCase()}(${escapePhp(\n compiled.url,\n )}, $fields);`;\n } else {\n const mediaType =\n nonBlankString(body.mediaType) ?? \"application/octet-stream\";\n\n sendLine = [\n ` ->withBody(${escapePhp(\n hasFormBody(request) ? form(body.value) : bodyText(request),\n )}, ${escapePhp(mediaType)})`,\n ` ->send(${escapePhp(method)}, ${escapePhp(compiled.url)});`,\n ].join(\"\\n\");\n }\n\n return [\n \"<?php\",\n \"\",\n \"declare(strict_types=1);\",\n \"\",\n \"use Illuminate\\\\Support\\\\Facades\\\\Http;\",\n \"\",\n ...comments.map((comment) => `// ${comment}`),\n ...(comments.length > 0 ? [\"\"] : []),\n ...phpHeaders(headers),\n ...(multipart ? [\"\", \"$fields = [\", ...dataLines, \"];\"] : []),\n ...(setupLines.length > 0 ? [\"\", ...setupLines] : []),\n \"\",\n \"try {\",\n \" $response = Http::withHeaders($headers)\",\n \" ->connectTimeout(10)\",\n \" ->timeout(30)\",\n ...attachLines,\n sendLine,\n \"\",\n \" if (!$response->successful()) {\",\n \" throw new RuntimeException(\",\n \" sprintf('HTTP %d: %s', $response->status(), $response->body())\",\n \" );\",\n \" }\",\n \"\",\n \" echo $response->body();\",\n \"} finally {\",\n ...fileVariables.map(\n (variable) => ` if (is_resource(${variable})) { fclose(${variable}); }`,\n ),\n \"}\",\n ].join(\"\\n\");\n}\n","import {\n DEFAULT_FILE_PATH,\n bodyText,\n compile,\n escapePowerShell,\n fileComment,\n form,\n formFieldValue,\n hasFormBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n nonBlankString,\n normalizeMethod,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { FileValue, RequestIR } from \"../../types\";\n\nfunction safeComment(value: string): string {\n return value\n .replace(/^\\/\\/\\s*/, \"\")\n .replace(/[\\r\\n\\u0000-\\u001f\\u007f\\u2028\\u2029]+/g, \" \")\n .trim();\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const multipart = Boolean(body) && canHaveBody && hasMultipartBody(request);\n const generatedBody = Boolean(body && canHaveBody);\n\n const comments: string[] = [];\n const setupLines: string[] = [];\n\n if (body && multipart) {\n setupLines.push(\"$form = [ordered]@{}\");\n\n for (const entry of toKeyValueBody(body.value)) {\n const fieldName = String(entry.name);\n\n if (entry.file && isFileValue(entry.value)) {\n const fileValue: FileValue = entry.value;\n const filePath = nonBlankString(fileValue.path) ?? DEFAULT_FILE_PATH;\n\n if (!nonBlankString(fileValue.path)) {\n comments.push(safeComment(fileComment(filePath, fieldName)));\n }\n\n setupLines.push(\n `$form[${escapePowerShell(fieldName)}] = Get-Item -LiteralPath ${escapePowerShell(\n filePath,\n )} -ErrorAction Stop`,\n );\n } else {\n setupLines.push(\n `$form[${escapePowerShell(fieldName)}] = ${escapePowerShell(\n formFieldValue(entry.value),\n )}`,\n );\n }\n }\n }\n\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n if (\n generatedBody &&\n (isContentLengthHeader(name) || isTransferEncodingHeader(name))\n ) {\n return false;\n }\n\n return !multipart || !isContentTypeHeader(name);\n });\n\n const contentTypeHeader = headers.find(([name]) =>\n isContentTypeHeader(String(name)),\n );\n\n const ordinaryHeaders = headers.filter(\n ([name]) => !isContentTypeHeader(String(name)),\n );\n\n /*\n * Invoke-RestMethod requires a dictionary-like value for -Headers.\n * It cannot represent repeated header fields independently, so repeated\n * values are combined using their standard comma-separated form.\n */\n const groupedHeaders = new Map<string, { name: string; values: string[] }>();\n\n for (const [rawName, rawValue] of ordinaryHeaders) {\n const name = String(rawName);\n const key = name.trim().toLowerCase();\n const current = groupedHeaders.get(key);\n\n if (current) {\n current.values.push(String(rawValue));\n } else {\n groupedHeaders.set(key, {\n name,\n values: [String(rawValue)],\n });\n }\n }\n\n const headerLines = [...groupedHeaders.values()].map(\n ({ name, values }) =>\n `$headers[${escapePowerShell(name)}] = ${escapePowerShell(\n values.join(\", \"),\n )}`,\n );\n\n const bodyParameterLines =\n !body || !canHaveBody\n ? []\n : multipart\n ? [\"$parameters['Form'] = $form\"]\n : [\n `$parameters['Body'] = ${escapePowerShell(\n hasFormBody(request) ? form(body.value) : bodyText(request),\n )}`,\n ];\n\n return [\n \"# Requires PowerShell 7.4 or later.\",\n \"# Multipart uploads require Invoke-RestMethod -Form support.\",\n \"# Repeated request-header values are combined with commas.\",\n \"# Multipart file name and media-type overrides are not supported by -Form.\",\n \"\",\n ...comments.map((comment) => `# ${comment}`),\n ...(comments.length > 0 ? [\"\"] : []),\n \"$headers = @{}\",\n ...headerLines,\n \"\",\n \"$parameters = @{\",\n ` Method = ${escapePowerShell(method)}`,\n ` Uri = ${escapePowerShell(compiled.url)}`,\n \" Headers = $headers\",\n \" TimeoutSec = 30\",\n \" ErrorAction = 'Stop'\",\n ...(contentTypeHeader && !multipart\n ? [` ContentType = ${escapePowerShell(String(contentTypeHeader[1]))}`]\n : []),\n \"}\",\n ...(setupLines.length > 0 ? [\"\", ...setupLines] : []),\n ...(bodyParameterLines.length > 0 ? [\"\", ...bodyParameterLines] : []),\n \"\",\n \"try {\",\n \" $response = Invoke-RestMethod @parameters\",\n \"\",\n \" if ($null -ne $response) {\",\n \" $response | ConvertTo-Json -Depth 100\",\n \" }\",\n \"} catch {\",\n \" $statusCode = $null\",\n \" $responseBody = $null\",\n \"\",\n \" if ($null -ne $_.Exception.Response) {\",\n \" $statusCode = [int]$_.Exception.Response.StatusCode\",\n \" }\",\n \"\",\n \" if ($null -ne $_.ErrorDetails -and $_.ErrorDetails.Message) {\",\n \" $responseBody = $_.ErrorDetails.Message\",\n \" }\",\n \"\",\n \" if ($null -ne $statusCode) {\",\n ' $message = \"HTTP ${statusCode}: ${responseBody}\"',\n \" } else {\",\n \" $message = $_.Exception.Message\",\n \" }\",\n \"\",\n \" throw [System.Net.Http.HttpRequestException]::new(\",\n \" $message,\",\n \" $_.Exception\",\n \" )\",\n \"}\",\n ].join(\"\\n\");\n}\n","import {\n DEFAULT_FILE_PATH,\n bodyText,\n compile,\n escapePowerShell,\n fileComment,\n form,\n formFieldValue,\n hasFormBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n nonBlankString,\n normalizeMethod,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { FileValue, RequestIR } from \"../../types\";\n\nfunction safeComment(value: string): string {\n return value\n .replace(/^\\/\\/\\s*/, \"\")\n .replace(/[\\r\\n\\u0000-\\u001f\\u007f\\u2028\\u2029]+/g, \" \")\n .trim();\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const multipart = Boolean(body) && canHaveBody && hasMultipartBody(request);\n const generatedBody = Boolean(body && canHaveBody);\n\n const comments: string[] = [];\n const setupLines: string[] = [];\n\n if (body && multipart) {\n setupLines.push(\"$form = [ordered]@{}\");\n\n for (const entry of toKeyValueBody(body.value)) {\n const fieldName = String(entry.name);\n\n if (entry.file && isFileValue(entry.value)) {\n const fileValue: FileValue = entry.value;\n const filePath = nonBlankString(fileValue.path) ?? DEFAULT_FILE_PATH;\n\n if (!nonBlankString(fileValue.path)) {\n comments.push(safeComment(fileComment(filePath, fieldName)));\n }\n\n setupLines.push(\n `$form[${escapePowerShell(fieldName)}] = Get-Item -LiteralPath ${escapePowerShell(\n filePath,\n )} -ErrorAction Stop`,\n );\n } else {\n setupLines.push(\n `$form[${escapePowerShell(fieldName)}] = ${escapePowerShell(\n formFieldValue(entry.value),\n )}`,\n );\n }\n }\n }\n\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n if (\n generatedBody &&\n (isContentLengthHeader(name) || isTransferEncodingHeader(name))\n ) {\n return false;\n }\n\n return !multipart || !isContentTypeHeader(name);\n });\n\n const contentTypeHeader = headers.find(([name]) =>\n isContentTypeHeader(String(name)),\n );\n\n const ordinaryHeaders = headers.filter(\n ([name]) => !isContentTypeHeader(String(name)),\n );\n\n /*\n * Invoke-WebRequest accepts a Hashtable for -Headers but cannot reliably\n * represent repeated header fields. Combine repeated values in insertion\n * order instead of silently overwriting them.\n */\n const groupedHeaders = new Map<string, { name: string; values: string[] }>();\n\n for (const [rawName, rawValue] of ordinaryHeaders) {\n const name = String(rawName);\n const key = name.trim().toLowerCase();\n const current = groupedHeaders.get(key);\n\n if (current) {\n current.values.push(String(rawValue));\n } else {\n groupedHeaders.set(key, {\n name,\n values: [String(rawValue)],\n });\n }\n }\n\n const headerLines = [...groupedHeaders.values()].map(\n ({ name, values }) =>\n `$headers[${escapePowerShell(name)}] = ${escapePowerShell(\n values.join(\", \"),\n )}`,\n );\n\n const bodyParameterLines =\n !body || !canHaveBody\n ? []\n : multipart\n ? [\"$parameters['Form'] = $form\"]\n : [\n `$parameters['Body'] = ${escapePowerShell(\n hasFormBody(request) ? form(body.value) : bodyText(request),\n )}`,\n ];\n\n return [\n \"# Requires PowerShell 7.4 or later.\",\n \"# Multipart uploads require Invoke-WebRequest -Form support.\",\n \"# Repeated request-header values are combined with commas.\",\n \"\",\n ...comments.map((comment) => `# ${comment}`),\n ...(comments.length > 0 ? [\"\"] : []),\n \"$headers = @{}\",\n ...headerLines,\n \"\",\n \"$parameters = @{\",\n ` Method = ${escapePowerShell(method)}`,\n ` Uri = ${escapePowerShell(compiled.url)}`,\n \" Headers = $headers\",\n \" TimeoutSec = 30\",\n \" ErrorAction = 'Stop'\",\n ...(contentTypeHeader && !multipart\n ? [` ContentType = ${escapePowerShell(String(contentTypeHeader[1]))}`]\n : []),\n \"}\",\n ...(setupLines.length > 0 ? [\"\", ...setupLines] : []),\n ...(bodyParameterLines.length > 0 ? [\"\", ...bodyParameterLines] : []),\n \"\",\n \"try {\",\n \" $response = Invoke-WebRequest @parameters\",\n \" $response.Content\",\n \"} catch {\",\n \" $statusCode = $null\",\n \" $responseBody = $null\",\n \"\",\n \" if ($null -ne $_.Exception.Response) {\",\n \" $statusCode = [int]$_.Exception.Response.StatusCode\",\n \" }\",\n \"\",\n \" if ($null -ne $_.ErrorDetails -and $_.ErrorDetails.Message) {\",\n \" $responseBody = $_.ErrorDetails.Message\",\n \" }\",\n \"\",\n \" if ($null -ne $statusCode) {\",\n ' $message = \"HTTP ${statusCode}: ${responseBody}\"',\n \" } else {\",\n \" $message = $_.Exception.Message\",\n \" }\",\n \"\",\n \" throw [System.Net.Http.HttpRequestException]::new(\",\n \" $message,\",\n \" $_.Exception\",\n \" )\",\n \"}\",\n ].join(\"\\n\");\n}\n","import {\n DEFAULT_BINARY_MEDIA_TYPE,\n DEFAULT_FILE_NAME,\n DEFAULT_FILE_PATH,\n bodyText,\n compile,\n escapePy,\n fileComment,\n form,\n formFieldValue,\n hasFormBody,\n hasJsonBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n nonBlankString,\n normalizeMethod,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { FileValue, RequestIR } from \"../../types\";\n\nfunction safeComment(value: string): string {\n return value\n .replace(/^\\/\\/\\s*/, \"\")\n .replace(/[\\r\\n\\u0000-\\u001f\\u007f\\u2028\\u2029]+/g, \" \")\n .trim();\n}\n\nfunction pythonHeaderList(headers: Array<[string, string]>): string {\n if (headers.length === 0) return \"[]\";\n\n return [\n \"[\",\n ...headers.map(\n ([name, value]) =>\n ` (${escapePy(String(name))}, ${escapePy(String(value))}),`,\n ),\n \" ]\",\n ].join(\"\\n\");\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const generatedBody = Boolean(body && canHaveBody);\n const multipart = Boolean(body && canHaveBody && hasMultipartBody(request));\n\n const comments: string[] = [];\n const setupLines: string[] = [];\n let bodyArgument: string | undefined;\n\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n if (\n generatedBody &&\n (isContentLengthHeader(name) || isTransferEncodingHeader(name))\n ) {\n return false;\n }\n\n return !multipart || !isContentTypeHeader(name);\n });\n\n if (body && canHaveBody) {\n if (multipart) {\n setupLines.push(\" form_data = aiohttp.FormData(quote_fields=True)\");\n\n for (const entry of toKeyValueBody(body.value)) {\n const fieldName = String(entry.name);\n\n if (entry.file && isFileValue(entry.value)) {\n const fileValue: FileValue = entry.value;\n const filePath = nonBlankString(fileValue.path) ?? DEFAULT_FILE_PATH;\n const fileName = nonBlankString(fileValue.name) ?? DEFAULT_FILE_NAME;\n const contentType =\n nonBlankString(fileValue.contentType) ?? DEFAULT_BINARY_MEDIA_TYPE;\n\n if (!nonBlankString(fileValue.path)) {\n comments.push(safeComment(fileComment(filePath, fieldName)));\n }\n\n setupLines.push(\n ` file_handle = stack.enter_context(open(${escapePy(\n filePath,\n )}, \"rb\"))`,\n [\n \" form_data.add_field(\",\n ` ${escapePy(fieldName)},`,\n \" file_handle,\",\n ` filename=${escapePy(fileName)},`,\n ` content_type=${escapePy(contentType)},`,\n \" )\",\n ].join(\"\\n\"),\n );\n } else {\n setupLines.push(\n [\n \" form_data.add_field(\",\n ` ${escapePy(fieldName)},`,\n ` ${escapePy(formFieldValue(entry.value))},`,\n \" )\",\n ].join(\"\\n\"),\n );\n }\n }\n\n bodyArgument = \"data=form_data,\";\n } else if (hasJsonBody(request)) {\n /*\n * Pass serialized JSON as data rather than json= so values outside\n * Python's literal syntax remain valid, and bodyText() is used only once.\n */\n bodyArgument = `data=${escapePy(bodyText(request))},`;\n } else if (hasFormBody(request)) {\n bodyArgument = `data=${escapePy(form(body.value))},`;\n } else {\n bodyArgument = `data=${escapePy(bodyText(request))},`;\n }\n }\n\n return [\n \"# Requires Python 3.10 or later.\",\n \"# Requires aiohttp 3.9 or later: python -m pip install 'aiohttp>=3.9'\",\n \"# Repeated request headers are preserved in their original order.\",\n ...comments.map((comment) => `# ${comment}`),\n \"\",\n \"import asyncio\",\n \"from contextlib import ExitStack\",\n \"\",\n \"import aiohttp\",\n \"\",\n \"\",\n \"async def main() -> None:\",\n \" headers = aiohttp.CIMultiDict(\",\n ` ${pythonHeaderList(\n headers.map(\n ([name, value]) => [String(name), String(value)] as [string, string],\n ),\n )}`,\n \" )\",\n \"\",\n \" timeout = aiohttp.ClientTimeout(total=30)\",\n \"\",\n \" with ExitStack() as stack:\",\n ...setupLines,\n ...(setupLines.length > 0 ? [\"\"] : []),\n \" try:\",\n \" async with aiohttp.ClientSession(\",\n \" headers=headers,\",\n \" timeout=timeout,\",\n \" ) as session:\",\n \" async with session.request(\",\n ` ${escapePy(method)},`,\n ` ${escapePy(compiled.url)},`,\n ...(bodyArgument ? [` ${bodyArgument}`] : []),\n \" ) as response:\",\n \" response_body = await response.text(errors='replace')\",\n \"\",\n \" if not 200 <= response.status < 300:\",\n \" raise RuntimeError(\",\n ' f\"HTTP {response.status}: {response_body}\"',\n \" )\",\n \"\",\n \" print(response_body)\",\n \" except (aiohttp.ClientError, asyncio.TimeoutError) as error:\",\n ' raise RuntimeError(f\"HTTP request failed: {error}\") from error',\n \"\",\n \"\",\n 'if __name__ == \"__main__\":',\n \" asyncio.run(main())\",\n ].join(\"\\n\");\n}\n","import {\n DEFAULT_BINARY_MEDIA_TYPE,\n DEFAULT_FILE_NAME,\n DEFAULT_FILE_PATH,\n bodyText,\n compile,\n escapePy,\n fileComment,\n form,\n formFieldValue,\n hasFormBody,\n hasJsonBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n nonBlankString,\n normalizeMethod,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { FileValue, RequestIR } from \"../../types\";\n\nfunction safeComment(value: string): string {\n return value\n .replace(/^\\/\\/\\s*/, \"\")\n .replace(/[\\r\\n\\u0000-\\u001f\\u007f\\u2028\\u2029]+/g, \" \")\n .trim();\n}\n\nfunction pythonHeaderList(headers: Array<[string, string]>): string[] {\n return headers.map(\n ([name, value]) =>\n ` (${escapePy(String(name))}, ${escapePy(String(value))}),`,\n );\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const generatedBody = Boolean(body && canHaveBody);\n const multipart = Boolean(body && canHaveBody && hasMultipartBody(request));\n\n const comments: string[] = [];\n const multipartSetup: string[] = [];\n\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n if (\n generatedBody &&\n (isContentLengthHeader(name) || isTransferEncodingHeader(name))\n ) {\n return false;\n }\n\n return !multipart || !isContentTypeHeader(name);\n });\n\n if (body && multipart) {\n for (const entry of toKeyValueBody(body.value)) {\n const fieldName = String(entry.name);\n\n if (entry.file && isFileValue(entry.value)) {\n const fileValue: FileValue = entry.value;\n const filePath = nonBlankString(fileValue.path) ?? DEFAULT_FILE_PATH;\n const fileName = nonBlankString(fileValue.name) ?? DEFAULT_FILE_NAME;\n const contentType =\n nonBlankString(fileValue.contentType) ?? DEFAULT_BINARY_MEDIA_TYPE;\n\n if (!nonBlankString(fileValue.path)) {\n comments.push(safeComment(fileComment(filePath, fieldName)));\n }\n\n multipartSetup.push(\n \" parts.append(\",\n \" (\",\n ` ${escapePy(fieldName)},`,\n ` ${escapePy(fileName)},`,\n ` ${escapePy(contentType)},`,\n ` Path(${escapePy(filePath)}).read_bytes(),`,\n \" )\",\n \" )\",\n );\n } else {\n multipartSetup.push(\n \" parts.append(\",\n \" (\",\n ` ${escapePy(fieldName)},`,\n \" None,\",\n \" None,\",\n ` ${escapePy(formFieldValue(entry.value))}.encode(\"utf-8\"),`,\n \" )\",\n \" )\",\n );\n }\n }\n }\n\n let bodySetup: string[];\n\n if (!body || !canHaveBody) {\n bodySetup = [\" request_body = None\"];\n } else if (multipart) {\n bodySetup = [\n ' boundary = f\"----http-client-{secrets.token_hex(24)}\"',\n \" parts: list[tuple[str, str | None, str | None, bytes]] = []\",\n ...multipartSetup,\n \" request_body = encode_multipart(parts, boundary)\",\n ' request_headers.append((\"Content-Type\", f\"multipart/form-data; boundary={boundary}\"))',\n ];\n } else if (hasJsonBody(request)) {\n bodySetup = [\n ` request_body = ${escapePy(bodyText(request))}.encode(\"utf-8\")`,\n ];\n } else if (hasFormBody(request)) {\n bodySetup = [\n ` request_body = ${escapePy(form(body.value))}.encode(\"utf-8\")`,\n ];\n } else {\n bodySetup = [\n ` request_body = ${escapePy(bodyText(request))}.encode(\"utf-8\")`,\n ];\n }\n\n const imports = [\n \"import http.client\",\n \"import secrets\",\n \"import urllib.parse\",\n \"from pathlib import Path\",\n ];\n\n const helperLines = multipart\n ? [\n \"\",\n \"\",\n \"def quote_disposition(value: str) -> str:\",\n ' return value.replace(\"\\\\\\\\\", \"\\\\\\\\\\\\\\\\\").replace(\\'\"\\', \\'\\\\\\\\\"\\')',\n \"\",\n \"\",\n \"def encode_multipart(\",\n \" parts: list[tuple[str, str | None, str | None, bytes]],\",\n \" boundary: str,\",\n \") -> bytes:\",\n \" output = bytearray()\",\n \" boundary_bytes = boundary.encode('ascii')\",\n \"\",\n \" for field_name, file_name, content_type, value in parts:\",\n \" output.extend(b'--' + boundary_bytes + b'\\\\r\\\\n')\",\n \"\",\n \" disposition = (\",\n \" 'Content-Disposition: form-data; name=\\\"'\",\n \" + quote_disposition(field_name)\",\n \" + '\\\"'\",\n \" )\",\n \"\",\n \" if file_name is not None:\",\n \" disposition += (\",\n \" '; filename=\\\"'\",\n \" + quote_disposition(file_name)\",\n \" + '\\\"'\",\n \" )\",\n \"\",\n \" output.extend(disposition.encode('utf-8'))\",\n \" output.extend(b'\\\\r\\\\n')\",\n \"\",\n \" if content_type is not None:\",\n \" output.extend(\",\n \" f'Content-Type: {content_type}\\\\r\\\\n'.encode('utf-8')\",\n \" )\",\n \"\",\n \" output.extend(b'\\\\r\\\\n')\",\n \" output.extend(value)\",\n \" output.extend(b'\\\\r\\\\n')\",\n \"\",\n \" output.extend(b'--' + boundary_bytes + b'--\\\\r\\\\n')\",\n \" return bytes(output)\",\n ]\n : [];\n\n return [\n \"# Requires Python 3.10 or later.\",\n \"# Uses only the Python standard library; no installation is required.\",\n \"# Repeated request headers are preserved in their original order.\",\n ...comments.map((comment) => `# ${comment}`),\n \"\",\n ...imports,\n ...helperLines,\n \"\",\n \"\",\n \"def main() -> None:\",\n ` parsed = urllib.parse.urlsplit(${escapePy(compiled.url)})`,\n \"\",\n \" if parsed.scheme not in {'http', 'https'}:\",\n \" raise ValueError(\",\n \" f\\\"Unsupported URL scheme: {parsed.scheme or 'missing'}\\\"\",\n \" )\",\n \"\",\n \" if parsed.hostname is None:\",\n ' raise ValueError(\"The request URL must include a hostname\")',\n \"\",\n \" path = urllib.parse.urlunsplit(\",\n \" ('', '', parsed.path or '/', parsed.query, '')\",\n \" )\",\n \"\",\n \" request_headers: list[tuple[str, str]] = [\",\n ...pythonHeaderList(\n headers.map(\n ([name, value]) => [String(name), String(value)] as [string, string],\n ),\n ),\n \" ]\",\n ...bodySetup,\n \"\",\n \" connection_class = (\",\n \" http.client.HTTPSConnection\",\n \" if parsed.scheme == 'https'\",\n \" else http.client.HTTPConnection\",\n \" )\",\n \"\",\n \" connection = connection_class(\",\n \" parsed.hostname,\",\n \" parsed.port,\",\n \" timeout=30,\",\n \" )\",\n \"\",\n \" try:\",\n ` connection.putrequest(${escapePy(method)}, path)`,\n \"\",\n \" for name, value in request_headers:\",\n \" connection.putheader(name, value)\",\n \"\",\n \" if request_body is not None:\",\n \" connection.putheader('Content-Length', str(len(request_body)))\",\n \"\",\n \" connection.endheaders(request_body)\",\n \" response = connection.getresponse()\",\n \"\",\n \" try:\",\n \" response_body = response.read()\",\n \" charset = response.headers.get_content_charset() or 'utf-8'\",\n \" response_text = response_body.decode(\",\n \" charset,\",\n \" errors='replace',\",\n \" )\",\n \"\",\n \" if not 200 <= response.status < 300:\",\n \" raise RuntimeError(\",\n ' f\"HTTP {response.status} {response.reason}: \"',\n \" f'{response_text}'\",\n \" )\",\n \"\",\n \" print(response_text)\",\n \" finally:\",\n \" response.close()\",\n \" except (OSError, http.client.HTTPException) as error:\",\n ' raise RuntimeError(f\"HTTP request failed: {error}\") from error',\n \" finally:\",\n \" connection.close()\",\n \"\",\n \"\",\n \"if __name__ == '__main__':\",\n \" main()\",\n ].join(\"\\n\");\n}\n","import {\n DEFAULT_BINARY_MEDIA_TYPE,\n DEFAULT_FILE_NAME,\n DEFAULT_FILE_PATH,\n bodyText,\n compile,\n escapePy,\n fileComment,\n form,\n formFieldValue,\n hasFormBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n nonBlankString,\n normalizeMethod,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { FileValue, RequestIR } from \"../../types\";\n\nfunction safeComment(value: string): string {\n return value\n .replace(/^\\/\\/\\s*/, \"\")\n .replace(/[\\r\\n\\u0000-\\u001f\\u007f\\u2028\\u2029]+/g, \" \")\n .trim();\n}\n\nfunction pythonHeaderList(headers: Array<[string, string]>): string[] {\n return headers.map(\n ([name, value]) =>\n ` (${escapePy(String(name))}, ${escapePy(String(value))}),`,\n );\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const generatedBody = Boolean(body && canHaveBody);\n const multipart = Boolean(body && canHaveBody && hasMultipartBody(request));\n\n const comments: string[] = [];\n const setupLines: string[] = [];\n const requestArguments: string[] = [];\n\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n if (\n generatedBody &&\n (isContentLengthHeader(name) || isTransferEncodingHeader(name))\n ) {\n return false;\n }\n\n return !multipart || !isContentTypeHeader(name);\n });\n\n if (body && canHaveBody) {\n if (multipart) {\n setupLines.push(\n \" data: list[tuple[str, str]] = []\",\n \" files: list[tuple[str, tuple[str, BinaryIO, str]]] = []\",\n );\n\n for (const entry of toKeyValueBody(body.value)) {\n const fieldName = String(entry.name);\n\n if (entry.file && isFileValue(entry.value)) {\n const fileValue: FileValue = entry.value;\n const filePath = nonBlankString(fileValue.path) ?? DEFAULT_FILE_PATH;\n const fileName = nonBlankString(fileValue.name) ?? DEFAULT_FILE_NAME;\n const contentType =\n nonBlankString(fileValue.contentType) ?? DEFAULT_BINARY_MEDIA_TYPE;\n\n if (!nonBlankString(fileValue.path)) {\n comments.push(safeComment(fileComment(filePath, fieldName)));\n }\n\n setupLines.push(\n ` file_handle = stack.enter_context(open(${escapePy(\n filePath,\n )}, \"rb\"))`,\n \" files.append(\",\n \" (\",\n ` ${escapePy(fieldName)},`,\n \" (\",\n ` ${escapePy(fileName)},`,\n \" file_handle,\",\n ` ${escapePy(contentType)},`,\n \" ),\",\n \" )\",\n \" )\",\n );\n } else {\n setupLines.push(\n ` data.append((${escapePy(fieldName)}, ${escapePy(\n formFieldValue(entry.value),\n )}))`,\n );\n }\n }\n\n requestArguments.push(\" data=data,\");\n requestArguments.push(\" files=files,\");\n } else if (hasFormBody(request)) {\n requestArguments.push(\n ` content=${escapePy(form(body.value))},`,\n );\n } else {\n /*\n * JSON is intentionally emitted through content=bodyText(...), not\n * json=<Python literal>. stringifyLiteral() produces JSON syntax,\n * which is invalid Python for true, false, and null.\n */\n requestArguments.push(\n ` content=${escapePy(bodyText(request))},`,\n );\n }\n }\n\n return [\n \"# Requires Python 3.10 or later.\",\n \"# Requires HTTPX 0.27 or later: python -m pip install 'httpx>=0.27'\",\n \"# Repeated request headers and multipart fields are preserved in order.\",\n ...comments.map((comment) => `# ${comment}`),\n \"\",\n \"import asyncio\",\n \"from contextlib import ExitStack\",\n \"from typing import BinaryIO\",\n \"\",\n \"import httpx\",\n \"\",\n \"\",\n \"async def main() -> None:\",\n \" headers = [\",\n ...pythonHeaderList(\n headers.map(\n ([name, value]) => [String(name), String(value)] as [string, string],\n ),\n ),\n \" ]\",\n \"\",\n \" timeout = httpx.Timeout(30.0)\",\n \"\",\n \" with ExitStack() as stack:\",\n ...setupLines,\n ...(setupLines.length > 0 ? [\"\"] : []),\n \" try:\",\n \" async with httpx.AsyncClient(timeout=timeout) as client:\",\n \" response = await client.request(\",\n ` ${escapePy(method)},`,\n ` ${escapePy(compiled.url)},`,\n \" headers=headers,\",\n ...requestArguments,\n \" )\",\n \"\",\n \" if not 200 <= response.status_code < 300:\",\n \" raise RuntimeError(\",\n ' f\"HTTP {response.status_code}: {response.text}\"',\n \" )\",\n \"\",\n \" print(response.text)\",\n \" except httpx.HTTPError as error:\",\n ' raise RuntimeError(f\"HTTP request failed: {error}\") from error',\n \"\",\n \"\",\n 'if __name__ == \"__main__\":',\n \" asyncio.run(main())\",\n ].join(\"\\n\");\n}\n","import {\n DEFAULT_BINARY_MEDIA_TYPE,\n DEFAULT_FILE_NAME,\n DEFAULT_FILE_PATH,\n bodyText,\n compile,\n escapePy,\n fileComment,\n form,\n formFieldValue,\n hasFormBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n nonBlankString,\n normalizeMethod,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { FileValue, RequestIR } from \"../../types\";\n\nfunction safeComment(value: string): string {\n return value\n .replace(/^\\/\\/\\s*/, \"\")\n .replace(/[\\r\\n\\u0000-\\u001f\\u007f\\u2028\\u2029]+/g, \" \")\n .trim();\n}\n\nfunction pythonHeaderLines(headers: Array<[string, string]>): string[] {\n return headers.map(\n ([name, value]) =>\n ` (${escapePy(String(name))}, ${escapePy(String(value))}),`,\n );\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const generatedBody = Boolean(body && canHaveBody);\n const multipart = Boolean(body && canHaveBody && hasMultipartBody(request));\n\n const comments: string[] = [];\n const setupLines: string[] = [];\n const requestArguments: string[] = [];\n\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n if (\n generatedBody &&\n (isContentLengthHeader(name) || isTransferEncodingHeader(name))\n ) {\n return false;\n }\n\n return !multipart || !isContentTypeHeader(name);\n });\n\n if (body && canHaveBody) {\n if (multipart) {\n setupLines.push(\n \" data: list[tuple[str, str]] = []\",\n \" files: list[tuple[str, tuple[str, BinaryIO, str]]] = []\",\n );\n\n for (const entry of toKeyValueBody(body.value)) {\n const fieldName = String(entry.name);\n\n if (entry.file && isFileValue(entry.value)) {\n const fileValue: FileValue = entry.value;\n const filePath = nonBlankString(fileValue.path) ?? DEFAULT_FILE_PATH;\n const fileName = nonBlankString(fileValue.name) ?? DEFAULT_FILE_NAME;\n const contentType =\n nonBlankString(fileValue.contentType) ?? DEFAULT_BINARY_MEDIA_TYPE;\n\n if (!nonBlankString(fileValue.path)) {\n comments.push(safeComment(fileComment(filePath, fieldName)));\n }\n\n setupLines.push(\n ` file_handle = stack.enter_context(open(${escapePy(\n filePath,\n )}, \"rb\"))`,\n \" files.append(\",\n \" (\",\n ` ${escapePy(fieldName)},`,\n \" (\",\n ` ${escapePy(fileName)},`,\n \" file_handle,\",\n ` ${escapePy(contentType)},`,\n \" ),\",\n \" )\",\n \" )\",\n );\n } else {\n setupLines.push(\n ` data.append((${escapePy(fieldName)}, ${escapePy(\n formFieldValue(entry.value),\n )}))`,\n );\n }\n }\n\n requestArguments.push(\" data=data,\");\n requestArguments.push(\" files=files,\");\n } else if (hasFormBody(request)) {\n requestArguments.push(\n ` content=${escapePy(form(body.value))},`,\n );\n } else {\n /*\n * JSON is emitted as serialized content. JSON text is not necessarily\n * valid Python source because true, false and null differ.\n */\n requestArguments.push(\n ` content=${escapePy(bodyText(request))},`,\n );\n }\n }\n\n return [\n \"# Requires Python 3.10 or later.\",\n \"# Requires HTTPX 0.27 or later: python -m pip install 'httpx>=0.27'\",\n \"# Repeated request headers and multipart fields are preserved in order.\",\n ...comments.map((comment) => `# ${comment}`),\n \"\",\n \"from contextlib import ExitStack\",\n \"from typing import BinaryIO\",\n \"\",\n \"import httpx\",\n \"\",\n \"\",\n \"def main() -> None:\",\n \" headers: list[tuple[str, str]] = [\",\n ...pythonHeaderLines(\n headers.map(\n ([name, value]) => [String(name), String(value)] as [string, string],\n ),\n ),\n \" ]\",\n \"\",\n \" timeout = httpx.Timeout(30.0)\",\n \"\",\n \" with ExitStack() as stack:\",\n ...setupLines,\n ...(setupLines.length > 0 ? [\"\"] : []),\n \" try:\",\n \" with httpx.Client(timeout=timeout) as client:\",\n \" response = client.request(\",\n ` ${escapePy(method)},`,\n ` ${escapePy(compiled.url)},`,\n \" headers=headers,\",\n ...requestArguments,\n \" )\",\n \"\",\n \" if not 200 <= response.status_code < 300:\",\n \" raise RuntimeError(\",\n ' f\"HTTP {response.status_code}: {response.text}\"',\n \" )\",\n \"\",\n \" print(response.text)\",\n \" except httpx.HTTPError as error:\",\n ' raise RuntimeError(f\"HTTP request failed: {error}\") from error',\n \"\",\n \"\",\n 'if __name__ == \"__main__\":',\n \" main()\",\n ].join(\"\\n\");\n}\n","import {\n DEFAULT_BINARY_MEDIA_TYPE,\n DEFAULT_FILE_NAME,\n DEFAULT_FILE_PATH,\n bodyText,\n compile,\n escapePy,\n fileComment,\n form,\n formFieldValue,\n hasFormBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n nonBlankString,\n normalizeMethod,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { FileValue, RequestIR } from \"../../types\";\n\nfunction safeComment(value: string): string {\n return value\n .replace(/^\\/\\/\\s*/, \"\")\n .replace(/[\\r\\n\\u0000-\\u001f\\u007f\\u2028\\u2029]+/g, \" \")\n .trim();\n}\n\nfunction pythonHeaderLines(headers: Array<[string, string]>): string[] {\n return headers.map(\n ([name, value]) =>\n ` (${escapePy(String(name))}, ${escapePy(String(value))}),`,\n );\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const generatedBody = Boolean(body && canHaveBody);\n const multipart = Boolean(body && canHaveBody && hasMultipartBody(request));\n\n const comments: string[] = [];\n const setupLines: string[] = [];\n const requestArguments: string[] = [];\n\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n if (\n generatedBody &&\n (isContentLengthHeader(name) || isTransferEncodingHeader(name))\n ) {\n return false;\n }\n\n return !multipart || !isContentTypeHeader(name);\n });\n\n if (body && canHaveBody) {\n if (multipart) {\n setupLines.push(\n \" data: list[tuple[str, str]] = []\",\n [\n \" files: list[\",\n \" tuple[str, tuple[str, BinaryIO, str]]\",\n \" ] = []\",\n ].join(\"\\n\"),\n );\n\n for (const entry of toKeyValueBody(body.value)) {\n const fieldName = String(entry.name);\n\n if (entry.file && isFileValue(entry.value)) {\n const fileValue: FileValue = entry.value;\n const filePath = nonBlankString(fileValue.path) ?? DEFAULT_FILE_PATH;\n const fileName = nonBlankString(fileValue.name) ?? DEFAULT_FILE_NAME;\n const contentType =\n nonBlankString(fileValue.contentType) ?? DEFAULT_BINARY_MEDIA_TYPE;\n\n if (!nonBlankString(fileValue.path)) {\n comments.push(safeComment(fileComment(filePath, fieldName)));\n }\n\n setupLines.push(\n ` file_handle = stack.enter_context(open(${escapePy(\n filePath,\n )}, \"rb\"))`,\n \" files.append(\",\n \" (\",\n ` ${escapePy(fieldName)},`,\n \" (\",\n ` ${escapePy(fileName)},`,\n \" file_handle,\",\n ` ${escapePy(contentType)},`,\n \" ),\",\n \" )\",\n \" )\",\n );\n } else {\n setupLines.push(\n ` data.append((${escapePy(fieldName)}, ${escapePy(\n formFieldValue(entry.value),\n )}))`,\n );\n }\n }\n\n requestArguments.push(\" data=data,\");\n requestArguments.push(\" files=files,\");\n } else if (hasFormBody(request)) {\n requestArguments.push(\n ` data=${escapePy(form(body.value))},`,\n );\n } else {\n /*\n * Send JSON and arbitrary bodies as serialized content. This avoids\n * emitting JSON syntax as invalid Python source and preserves the\n * exact body representation produced by bodyText().\n */\n requestArguments.push(\n ` data=${escapePy(bodyText(request))},`,\n );\n }\n }\n\n return [\n \"# Requires Python 3.10 or later.\",\n \"# Requires Requests 2.31 or later:\",\n \"# python -m pip install 'requests>=2.31'\",\n \"# Requests cannot preserve duplicate request headers; values are\",\n \"# combined with commas in their original order.\",\n \"# Duplicate multipart fields and files are preserved.\",\n ...comments.map((comment) => `# ${comment}`),\n \"\",\n \"from contextlib import ExitStack\",\n \"from typing import BinaryIO\",\n \"\",\n \"import requests\",\n \"\",\n \"\",\n \"def combine_headers(\",\n \" values: list[tuple[str, str]],\",\n \") -> dict[str, str]:\",\n \" headers: dict[str, str] = {}\",\n \" canonical_names: dict[str, str] = {}\",\n \"\",\n \" for name, value in values:\",\n \" normalized = name.lower()\",\n \" existing_name = canonical_names.get(normalized)\",\n \"\",\n \" if existing_name is None:\",\n \" canonical_names[normalized] = name\",\n \" headers[name] = value\",\n \" else:\",\n \" headers[existing_name] = (\",\n \" f'{headers[existing_name]}, {value}'\",\n \" )\",\n \"\",\n \" return headers\",\n \"\",\n \"\",\n \"def main() -> None:\",\n \" header_items: list[tuple[str, str]] = [\",\n ...pythonHeaderLines(\n headers.map(\n ([name, value]) => [String(name), String(value)] as [string, string],\n ),\n ),\n \" ]\",\n \" headers = combine_headers(header_items)\",\n \"\",\n \" with ExitStack() as stack:\",\n ...setupLines,\n ...(setupLines.length > 0 ? [\"\"] : []),\n \" try:\",\n \" with requests.Session() as session:\",\n \" response = session.request(\",\n ` method=${escapePy(method)},`,\n ` url=${escapePy(compiled.url)},`,\n \" headers=headers,\",\n ...requestArguments,\n \" timeout=30,\",\n \" )\",\n \"\",\n \" try:\",\n \" response_text = response.text\",\n \"\",\n \" if not 200 <= response.status_code < 300:\",\n \" raise RuntimeError(\",\n ' f\"HTTP {response.status_code}: \"',\n ' f\"{response_text}\"',\n \" )\",\n \"\",\n \" print(response_text)\",\n \" finally:\",\n \" response.close()\",\n \" except requests.RequestException as error:\",\n \" raise RuntimeError(\",\n ' f\"HTTP request failed: {error}\"',\n \" ) from error\",\n \"\",\n \"\",\n 'if __name__ == \"__main__\":',\n \" main()\",\n ].join(\"\\n\");\n}\n","import {\n compile,\n bodyText,\n form,\n hasFormBody,\n hasMultipartBody,\n hasJsonBody,\n isFileValue,\n toKeyValueBody,\n} from \"../common\";\nimport type { FileValue, RequestIR } from \"../../types\";\n\nfunction rString(value: string): string {\n let out = '\"';\n\n for (const char of value) {\n const code = char.codePointAt(0) ?? 0;\n\n switch (char) {\n case \"\\\\\":\n out += \"\\\\\\\\\";\n break;\n case '\"':\n out += '\\\\\"';\n break;\n case \"\\n\":\n out += \"\\\\n\";\n break;\n case \"\\r\":\n out += \"\\\\r\";\n break;\n case \"\\t\":\n out += \"\\\\t\";\n break;\n default:\n if (code < 0x20 || code === 0x7f || code > 0x7e) {\n out += `\\\\u{${code.toString(16)}}`;\n } else {\n out += char;\n }\n }\n }\n\n return `${out}\"`;\n}\n\nfunction rName(name: string): string {\n const escaped = name\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/`/g, \"\\\\`\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/\\n/g, \"\\\\n\");\n\n const isBareName =\n /^[A-Za-z.][A-Za-z0-9._]*$/.test(name) && !/^\\.[0-9]/.test(name);\n\n return isBareName ? name : `\\`${escaped}\\``;\n}\n\nfunction indent(text: string, spaces = 2): string {\n const pad = \" \".repeat(spaces);\n\n return text\n .split(\"\\n\")\n .map((line) => (line ? `${pad}${line}` : line))\n .join(\"\\n\");\n}\n\nfunction contentTypeOf(request: RequestIR, fallback: string): string {\n const headers: unknown = request.headers;\n\n if (!headers) {\n return fallback;\n }\n\n const pairs: Array<[unknown, unknown]> = Array.isArray(headers)\n ? (headers as Array<[unknown, unknown]>)\n : Object.entries(headers as Record<string, unknown>);\n\n for (const [key, rawValue] of pairs) {\n if (String(key).toLowerCase() !== \"content-type\") {\n continue;\n }\n\n const firstValue = Array.isArray(rawValue) ? rawValue[0] : rawValue;\n\n if (firstValue === null || firstValue === undefined) {\n continue;\n }\n\n const value = String(firstValue).trim();\n\n if (value) {\n return value;\n }\n }\n\n return fallback;\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const body = request.body;\n const isMultipart = Boolean(body) && hasMultipartBody(request);\n const comments: string[] = [];\n\n const lines: string[] = [\n \"library(httr2)\",\n \"\",\n `req <- request(${rString(compiled.url)}) |>`,\n ` req_method(${rString(request.method.toUpperCase())})`,\n ];\n\n const headers = compiled.headers.filter(\n ([key]) => !(isMultipart && key.toLowerCase() === \"content-type\"),\n );\n\n if (headers.length > 0) {\n const args = headers.map(\n ([key, value]) => `${rName(String(key))} = ${rString(String(value))}`,\n );\n\n lines.push(\"\", \"req <- req |> req_headers(\", indent(args.join(\",\\n\")), \")\");\n }\n\n if (body) {\n lines.push(\"\");\n\n if (isMultipart) {\n const fields = toKeyValueBody(body.value).map((entry) => {\n const name = String(entry.name);\n\n if (entry.file && isFileValue(entry.value)) {\n const fileValue: FileValue = entry.value;\n const filePath = fileValue.path || \"/tmp/file.bin\";\n\n if (!fileValue.path) {\n comments.push(\n `# TODO: replace ${rString(filePath)} with the real local file path for ${rString(name)}`,\n );\n }\n\n return `${rName(name)} = upload_file(${rString(filePath)})`;\n }\n\n return `${rName(name)} = ${rString(String(entry.value ?? \"\"))}`;\n });\n\n if (fields.length > 0) {\n lines.push(\n \"req <- req |> req_body_multipart(\",\n indent(fields.join(\",\\n\")),\n \")\",\n );\n }\n } else if (hasJsonBody(request)) {\n const contentType = contentTypeOf(request, \"application/json\");\n\n lines.push(\n `json_body <- ${rString(bodyText(request))}`,\n \"req <- req |> req_body_raw(\",\n \" json_body,\",\n ` type = ${rString(contentType)}`,\n \")\",\n );\n } else {\n const isForm = hasFormBody(request);\n const payload = isForm ? form(body.value) : bodyText(request);\n\n const contentType = contentTypeOf(\n request,\n isForm\n ? \"application/x-www-form-urlencoded\"\n : \"application/octet-stream\",\n );\n\n lines.push(\n \"req <- req |> req_body_raw(\",\n ` ${rString(payload)},`,\n ` type = ${rString(contentType)}`,\n \")\",\n );\n }\n }\n\n lines.push(\n \"\",\n \"response <- req |> req_perform()\",\n \"resp_body_string(response)\",\n );\n\n return comments.length > 0\n ? `${comments.join(\"\\n\")}\\n${lines.join(\"\\n\")}`\n : lines.join(\"\\n\");\n}\n","import {\n DEFAULT_BINARY_MEDIA_TYPE,\n DEFAULT_FILE_NAME,\n DEFAULT_FILE_PATH,\n bodyText,\n compile,\n escapeRuby,\n fileComment,\n form,\n formFieldValue,\n hasFormBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n nonBlankString,\n normalizeMethod,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { FileValue, RequestIR } from \"../../types\";\n\nfunction safeComment(value: string): string {\n return value\n .replace(/^\\/\\/\\s*/, \"\")\n .replace(/[\\r\\n\\u0000-\\u001f\\u007f\\u2028\\u2029]+/g, \" \")\n .trim();\n}\n\nfunction rubyHeaderLines(headers: Array<[string, string]>): string[] {\n return headers.map(\n ([name, value]) =>\n ` [${escapeRuby(String(name))}, ${escapeRuby(String(value))}],`,\n );\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const generatedBody = Boolean(body && canHaveBody);\n const multipart = Boolean(body && canHaveBody && hasMultipartBody(request));\n\n const comments: string[] = [];\n const multipartEntries: string[] = [];\n\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n if (\n generatedBody &&\n (isContentLengthHeader(name) || isTransferEncodingHeader(name))\n ) {\n return false;\n }\n\n return !multipart || !isContentTypeHeader(name);\n });\n\n if (body && multipart) {\n for (const entry of toKeyValueBody(body.value)) {\n const fieldName = String(entry.name);\n\n if (entry.file && isFileValue(entry.value)) {\n const fileValue: FileValue = entry.value;\n const filePath = nonBlankString(fileValue.path) ?? DEFAULT_FILE_PATH;\n const fileName = nonBlankString(fileValue.name) ?? DEFAULT_FILE_NAME;\n const contentType =\n nonBlankString(fileValue.contentType) ?? DEFAULT_BINARY_MEDIA_TYPE;\n\n if (!nonBlankString(fileValue.path)) {\n comments.push(safeComment(fileComment(filePath, fieldName)));\n }\n\n multipartEntries.push(\n \" {\",\n ` name: ${escapeRuby(fieldName)},`,\n ` path: ${escapeRuby(filePath)},`,\n ` filename: ${escapeRuby(fileName)},`,\n ` content_type: ${escapeRuby(contentType)},`,\n \" },\",\n );\n } else {\n multipartEntries.push(\n \" {\",\n ` name: ${escapeRuby(fieldName)},`,\n ` value: ${escapeRuby(formFieldValue(entry.value))},`,\n \" },\",\n );\n }\n }\n }\n\n let bodyLines: string[] = [];\n\n if (body && canHaveBody) {\n if (multipart) {\n bodyLines = [\n \"boundary = generate_boundary\",\n \"request.body = encode_multipart(\",\n \" multipart_entries,\",\n \" boundary,\",\n \")\",\n \"request['Content-Type'] = (\",\n ' \"multipart/form-data; boundary=#{boundary}\"',\n \")\",\n ];\n } else if (hasFormBody(request)) {\n bodyLines = [`request.body = ${escapeRuby(form(body.value))}`];\n } else {\n bodyLines = [`request.body = ${escapeRuby(bodyText(request))}`];\n }\n }\n\n const multipartHelpers = multipart\n ? [\n \"\",\n \"def generate_boundary\",\n ' \"----ruby-net-http-#{SecureRandom.hex(24)}\"',\n \"end\",\n \"\",\n \"def escape_disposition(value)\",\n \" value\",\n ' .gsub(\"\\\\\\\\\", \"\\\\\\\\\\\\\\\\\")',\n \" .gsub('\\\"', '\\\\\\\\\\\"')\",\n ' .gsub(/[\\\\r\\\\n]/, \"\")',\n \"end\",\n \"\",\n \"def encode_multipart(entries, boundary)\",\n ' body = +\"\".b',\n \"\",\n \" entries.each do |entry|\",\n ' body << \"--#{boundary}\\\\r\\\\n\".b',\n \" disposition = (\",\n \" 'Content-Disposition: form-data; name=\\\"' +\",\n \" escape_disposition(entry.fetch(:name)) +\",\n \" '\\\"'\",\n \" )\",\n \"\",\n \" if entry.key?(:path)\",\n \" disposition << (\",\n \" '; filename=\\\"' +\",\n \" escape_disposition(entry.fetch(:filename)) +\",\n \" '\\\"'\",\n \" )\",\n \" end\",\n \"\",\n ' body << \"#{disposition}\\\\r\\\\n\".b',\n \"\",\n \" if entry.key?(:content_type)\",\n \" content_type = entry.fetch(:content_type)\",\n ' body << \"Content-Type: #{content_type}\\\\r\\\\n\".b',\n \" end\",\n \"\",\n ' body << \"\\\\r\\\\n\".b',\n \"\",\n \" if entry.key?(:path)\",\n \" File.open(entry.fetch(:path), 'rb') do |file|\",\n \" IO.copy_stream(file, StringIO.new(body))\",\n \" end\",\n \" else\",\n \" body << entry.fetch(:value).encode(\",\n \" Encoding::UTF_8,\",\n \" invalid: :replace,\",\n \" undef: :replace,\",\n \" )\",\n \" end\",\n \"\",\n ' body << \"\\\\r\\\\n\".b',\n \" end\",\n \"\",\n ' body << \"--#{boundary}--\\\\r\\\\n\".b',\n \" body\",\n \"end\",\n ]\n : [];\n\n return [\n \"# Requires Ruby 3.1 or later.\",\n \"# Uses only the Ruby standard library; no gem installation is required.\",\n \"# Repeated request-header values are preserved in their original order.\",\n ...comments.map((comment) => `# ${comment}`),\n \"\",\n 'require \"net/http\"',\n 'require \"uri\"',\n ...(multipart ? ['require \"securerandom\"', 'require \"stringio\"'] : []),\n ...multipartHelpers,\n \"\",\n \"def main\",\n ` uri = URI.parse(${escapeRuby(compiled.url)})`,\n \"\",\n \" unless %w[http https].include?(uri.scheme)\",\n \" raise ArgumentError, (\",\n \" \\\"unsupported URL scheme: #{uri.scheme || 'missing'}\\\"\",\n \" )\",\n \" end\",\n \"\",\n ' raise ArgumentError, \"URL must include a host\" unless uri.host',\n \"\",\n \" request = Net::HTTPGenericRequest.new(\",\n ` ${escapeRuby(method)},`,\n ` ${canHaveBody ? \"true\" : \"false\"},`,\n \" true,\",\n \" uri.request_uri.empty? ? '/' : uri.request_uri,\",\n \" )\",\n \"\",\n \" header_items = [\",\n ...rubyHeaderLines(\n headers.map(\n ([name, value]) => [String(name), String(value)] as [string, string],\n ),\n ),\n \" ]\",\n \"\",\n \" header_items.each do |name, value|\",\n \" request.add_field(name, value)\",\n \" end\",\n ...(multipart\n ? [\n \"\",\n \" multipart_entries = [\",\n ...multipartEntries.map((line) => ` ${line}`),\n \" ]\",\n ]\n : []),\n ...(bodyLines.length ? [\"\", ...bodyLines.map((line) => ` ${line}`)] : []),\n \"\",\n \" http = Net::HTTP.new(uri.host, uri.port)\",\n \" http.use_ssl = uri.scheme == 'https'\",\n \" http.open_timeout = 30\",\n \" http.read_timeout = 30\",\n \" http.write_timeout = 30\",\n \"\",\n \" response = http.start do |connection|\",\n \" connection.request(request)\",\n \" end\",\n \"\",\n \" unless response.is_a?(Net::HTTPSuccess)\",\n \" raise RuntimeError, (\",\n ' \"HTTP #{response.code} #{response.message}: #{response.body}\"',\n \" )\",\n \" end\",\n \"\",\n \" puts response.body\",\n \"rescue URI::InvalidURIError,\",\n \" SocketError,\",\n \" SystemCallError,\",\n \" IOError,\",\n \" Timeout::Error,\",\n \" Net::HTTPBadResponse,\",\n \" Net::HTTPHeaderSyntaxError,\",\n \" Net::ProtocolError => error\",\n ' raise RuntimeError, \"HTTP request failed: #{error.message}\"',\n \"end\",\n \"\",\n \"main if $PROGRAM_NAME == __FILE__\",\n ].join(\"\\n\");\n}\n","import {\n DEFAULT_BINARY_MEDIA_TYPE,\n DEFAULT_FILE_NAME,\n DEFAULT_FILE_PATH,\n bodyText,\n compile,\n escapeRust,\n fileComment,\n form,\n formFieldValue,\n hasFormBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n nonBlankString,\n normalizeMethod,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { FileValue, RequestIR } from \"../../types\";\n\nfunction safeComment(value: string): string {\n return value\n .replace(/^\\/\\/\\s*/, \"\")\n .replace(/[\\r\\n\\u0000-\\u001f\\u007f\\u2028\\u2029]+/g, \" \")\n .trim();\n}\n\nfunction indentLines(lines: string[], prefix: string): string[] {\n return lines.map((line) => (line ? `${prefix}${line}` : line));\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const generatedBody = Boolean(body && canHaveBody);\n const multipart = Boolean(body && canHaveBody && hasMultipartBody(request));\n\n const comments: string[] = [];\n const bodySetup: string[] = [];\n let bodyBuilder: string | undefined;\n\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n if (\n generatedBody &&\n (isContentLengthHeader(name) || isTransferEncodingHeader(name))\n ) {\n return false;\n }\n\n return !multipart || !isContentTypeHeader(name);\n });\n\n if (body && canHaveBody) {\n if (multipart) {\n bodySetup.push(\n \"let mut multipart_form = reqwest::blocking::multipart::Form::new();\",\n );\n\n for (const entry of toKeyValueBody(body.value)) {\n const fieldName = String(entry.name);\n\n if (entry.file && isFileValue(entry.value)) {\n const fileValue: FileValue = entry.value;\n const filePath = nonBlankString(fileValue.path) ?? DEFAULT_FILE_PATH;\n const fileName = nonBlankString(fileValue.name) ?? DEFAULT_FILE_NAME;\n const contentType =\n nonBlankString(fileValue.contentType) ?? DEFAULT_BINARY_MEDIA_TYPE;\n\n if (!nonBlankString(fileValue.path)) {\n comments.push(safeComment(fileComment(filePath, fieldName)));\n }\n\n bodySetup.push(\n \"{\",\n ` let file = File::open(${escapeRust(filePath)})?;`,\n \" let part = reqwest::blocking::multipart::Part::reader(file)\",\n ` .file_name(${escapeRust(fileName)})`,\n ` .mime_str(${escapeRust(contentType)})?;`,\n \" multipart_form = multipart_form.part(\",\n ` ${escapeRust(fieldName)},`,\n \" part,\",\n \" );\",\n \"}\",\n );\n } else {\n bodySetup.push(\n \"multipart_form = multipart_form.text(\",\n ` ${escapeRust(fieldName)},`,\n ` ${escapeRust(formFieldValue(entry.value))}.to_owned(),`,\n \");\",\n );\n }\n }\n\n bodyBuilder = \".multipart(multipart_form)\";\n } else {\n const bodyValue = hasFormBody(request)\n ? form(body.value)\n : bodyText(request);\n\n bodySetup.push(`let request_body = ${escapeRust(bodyValue)}.to_owned();`);\n bodyBuilder = \".body(request_body)\";\n }\n }\n\n const headerSetup: string[] = [\"let mut headers = HeaderMap::new();\"];\n\n for (const [rawName, rawValue] of headers) {\n const name = String(rawName);\n const value = String(rawValue);\n\n headerSetup.push(\n \"{\",\n ` let name = HeaderName::from_bytes(${escapeRust(name)}.as_bytes())?;`,\n ` let value = HeaderValue::from_str(${escapeRust(value)})?;`,\n \" headers.append(name, value);\",\n \"}\",\n );\n }\n\n return [\n \"// Requires Rust 1.74 or later.\",\n \"// Requires reqwest 0.12 or later.\",\n \"//\",\n \"// Cargo.toml:\",\n '// reqwest = { version = \"0.12\", features = [\"blocking\", \"multipart\"] }',\n \"//\",\n \"// Repeated request headers and multipart fields are preserved in order.\",\n ...comments.map((comment) => `// ${comment}`),\n \"\",\n \"use reqwest::blocking::Client;\",\n \"use reqwest::header::{HeaderMap, HeaderName, HeaderValue};\",\n \"use reqwest::Method;\",\n ...(multipart ? [\"use std::fs::File;\"] : []),\n \"use std::error::Error;\",\n \"use std::io;\",\n \"use std::time::Duration;\",\n \"\",\n \"\",\n \"fn main() -> Result<(), Box<dyn Error>> {\",\n \" let client = Client::builder()\",\n \" .connect_timeout(Duration::from_secs(30))\",\n \" .timeout(Duration::from_secs(30))\",\n \" .build()?;\",\n \"\",\n ...indentLines(headerSetup, \" \"),\n \"\",\n ` let method = Method::from_bytes(${escapeRust(method)}.as_bytes())?;`,\n ...(bodySetup.length > 0 ? [\"\", ...indentLines(bodySetup, \" \")] : []),\n \"\",\n \" let request = client\",\n ` .request(method, ${escapeRust(compiled.url)})`,\n \" .headers(headers)\",\n ...(bodyBuilder ? [` ${bodyBuilder}`] : []),\n \" .build()?;\",\n \"\",\n \" let response = client.execute(request)?;\",\n \" let status = response.status();\",\n \" let response_body = response.text()?;\",\n \"\",\n \" if !status.is_success() {\",\n \" return Err(io::Error::other(format!(\",\n ' \"HTTP {}: {}\",',\n \" status,\",\n \" response_body,\",\n \" ))\",\n \" .into());\",\n \" }\",\n \"\",\n ' println!(\"{}\", response_body);',\n \" Ok(())\",\n \"}\",\n ].join(\"\\n\");\n}\n","import {\n DEFAULT_BINARY_MEDIA_TYPE,\n DEFAULT_FILE_NAME,\n DEFAULT_FILE_PATH,\n bodyText,\n compile,\n escapeSh,\n fileComment,\n form,\n hasFormBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n nonBlankString,\n normalizeMethod,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { FileValue, RequestIR } from \"../../types\";\n\nfunction safeShellComment(value: string): string {\n return value.replace(/[\\r\\n\\u0000-\\u001f\\u007f\\u2028\\u2029]+/g, \" \").trim();\n}\n\nfunction formFieldValue(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n\n if (value === null || value === undefined) {\n return \"\";\n }\n\n if (\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n\n try {\n return JSON.stringify(value) ?? \"\";\n } catch {\n return String(value);\n }\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const multipart = Boolean(body && canHaveBody && hasMultipartBody(request));\n const generatedBody = Boolean(body && canHaveBody);\n\n const comments: string[] = [\n \"# Requires curl 7.76.0+.\",\n \"# Install: https://curl.se/download.html\",\n \"# Repeated headers and multipart fields are emitted separately.\",\n \"# --connect-timeout limits connection setup; --max-time limits the whole transfer.\",\n ];\n\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n if (\n generatedBody &&\n (isContentLengthHeader(name) || isTransferEncodingHeader(name))\n ) {\n return false;\n }\n\n // curl must generate multipart Content-Type and its boundary.\n if (multipart && isContentTypeHeader(name)) {\n return false;\n }\n\n return true;\n });\n\n const lines: string[] = [\n `curl --fail-with-body --show-error --silent`,\n ` --connect-timeout 30`,\n ` --max-time 30`,\n ` --request ${escapeSh(method)}`,\n ` --url ${escapeSh(compiled.url)}`,\n ];\n\n for (const [rawName, rawValue] of headers) {\n lines.push(\n ` --header ${escapeSh(`${String(rawName)}: ${String(rawValue)}`)}`,\n );\n }\n\n if (body && canHaveBody && multipart) {\n for (const entry of toKeyValueBody(body.value)) {\n const fieldName = String(entry.name);\n\n if (entry.file && isFileValue(entry.value)) {\n const fileValue: FileValue = entry.value;\n const actualPath = nonBlankString(fileValue.path);\n const filePath = actualPath ?? DEFAULT_FILE_PATH;\n const fileName = nonBlankString(fileValue.name) ?? DEFAULT_FILE_NAME;\n const contentType =\n nonBlankString(fileValue.contentType) ?? DEFAULT_BINARY_MEDIA_TYPE;\n\n if (actualPath === undefined) {\n comments.push(\n `# ${safeShellComment(fileComment(filePath, fieldName))}`,\n );\n }\n\n /*\n * curl multipart syntax:\n * field=@path;filename=name;type=media/type\n *\n * --form-string is not used for files because it treats @ literally.\n */\n lines.push(\n ` --form ${escapeSh(\n `${fieldName}=@${filePath};filename=${fileName};type=${contentType}`,\n )}`,\n );\n } else {\n /*\n * --form-string prevents values beginning with @, <, or other curl\n * form metacharacters from being interpreted as files or commands.\n */\n lines.push(\n ` --form-string ${escapeSh(\n `${fieldName}=${formFieldValue(entry.value)}`,\n )}`,\n );\n }\n }\n } else if (body && canHaveBody) {\n const data = hasFormBody(request) ? form(body.value) : bodyText(request);\n\n /*\n * --data-binary preserves the generated body exactly, except that curl's\n * command-line argument interface cannot represent embedded NUL bytes.\n */\n lines.push(` --data-binary ${escapeSh(data)}`);\n }\n\n const command = lines\n .map((line, index) => (index < lines.length - 1 ? `${line} \\\\` : line))\n .join(\"\\n\");\n\n return [...comments, command].join(\"\\n\");\n}\n","import {\n DEFAULT_BINARY_MEDIA_TYPE,\n DEFAULT_FILE_NAME,\n DEFAULT_FILE_PATH,\n bodyText,\n compile,\n escapeSh,\n fileComment,\n hasFormBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n nonBlankString,\n normalizeMethod,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { FileValue, RequestIR } from \"../../types\";\n\nfunction safeShellComment(value: string): string {\n return value.replace(/[\\r\\n\\u0000-\\u001f\\u007f\\u2028\\u2029]+/g, \" \").trim();\n}\n\nfunction stringValue(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n\n if (value === null || value === undefined) {\n return \"\";\n }\n\n if (\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n\n try {\n return JSON.stringify(value) ?? \"\";\n } catch {\n return String(value);\n }\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const multipart = Boolean(body && canHaveBody && hasMultipartBody(request));\n const urlEncoded = Boolean(body && canHaveBody && hasFormBody(request));\n const generatedBody = Boolean(body && canHaveBody);\n\n const comments: string[] = [\n \"Requires HTTPie 3.2+.\",\n \"Install: python3 -m pip install 'httpie>=3.2,<4'\",\n \"HTTPie preserves repeated header arguments and repeated form fields.\",\n ];\n\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n if (\n generatedBody &&\n (isContentLengthHeader(name) || isTransferEncodingHeader(name))\n ) {\n return false;\n }\n\n if ((multipart || urlEncoded) && isContentTypeHeader(name)) {\n return false;\n }\n\n return true;\n });\n\n const parts: string[] = [\"http\", \"--check-status\", \"--timeout=30\"];\n\n if (multipart || urlEncoded) {\n parts.push(\"--form\");\n }\n\n parts.push(escapeSh(method), escapeSh(compiled.url));\n\n for (const [rawName, rawValue] of headers) {\n parts.push(escapeSh(`${String(rawName)}:${String(rawValue)}`));\n }\n\n if (body && canHaveBody && multipart) {\n for (const entry of toKeyValueBody(body.value)) {\n const fieldName = String(entry.name);\n\n if (entry.file && isFileValue(entry.value)) {\n const fileValue: FileValue = entry.value;\n const actualPath = nonBlankString(fileValue.path);\n const filePath = actualPath ?? DEFAULT_FILE_PATH;\n const fileName = nonBlankString(fileValue.name) ?? DEFAULT_FILE_NAME;\n const contentType =\n nonBlankString(fileValue.contentType) ?? DEFAULT_BINARY_MEDIA_TYPE;\n\n if (actualPath === undefined) {\n comments.push(safeShellComment(fileComment(filePath, fieldName)));\n }\n\n parts.push(\n escapeSh(\n `${fieldName}@${filePath};type=${contentType};filename=${fileName}`,\n ),\n );\n } else {\n parts.push(escapeSh(`${fieldName}=${stringValue(entry.value)}`));\n }\n }\n } else if (body && canHaveBody && urlEncoded) {\n for (const entry of toKeyValueBody(body.value)) {\n parts.push(escapeSh(`${String(entry.name)}=${stringValue(entry.value)}`));\n }\n } else if (body && canHaveBody) {\n const command = [\n `printf '%s' ${escapeSh(bodyText(request))}`,\n \"|\",\n parts.join(\" \"),\n ].join(\" \");\n\n return [\n ...comments.map((line) => `# ${safeShellComment(line)}`),\n command,\n ].join(\"\\n\");\n }\n\n const command = parts\n .map((part, index) => (index === 0 ? part : ` ${part}`))\n .join(\" \\\\\\n\");\n\n return [\n ...comments.map((line) => `# ${safeShellComment(line)}`),\n command,\n ].join(\"\\n\");\n}\n","import {\n bodyText,\n compile,\n escapeSh,\n form,\n hasFormBody,\n hasMultipartBody,\n isContentLengthHeader,\n isTransferEncodingHeader,\n normalizeMethod,\n supportsRequestBody,\n} from \"../common\";\nimport type { RequestIR } from \"../../types\";\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const generatedBody = Boolean(body && canHaveBody);\n\n if (generatedBody && hasMultipartBody(request)) {\n throw new Error(\n \"GNU Wget cannot safely construct multipart/form-data requests; use curl or HTTPie instead\",\n );\n }\n\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n if (\n generatedBody &&\n (isContentLengthHeader(name) || isTransferEncodingHeader(name))\n ) {\n return false;\n }\n\n return true;\n });\n\n const parts: string[] = [\n \"wget\",\n ` --method=${escapeSh(method)}`,\n \" --timeout=30\",\n \" --tries=1\",\n \" --server-response\",\n \" --content-on-error\",\n \" --output-document=-\",\n ];\n\n for (const [rawName, rawValue] of headers) {\n /*\n * Each header is emitted separately, so repeated headers are preserved.\n * Quoting the entire value prevents shell metacharacter injection.\n */\n parts.push(\n ` --header=${escapeSh(`${String(rawName)}: ${String(rawValue)}`)}`,\n );\n }\n\n if (body && canHaveBody) {\n const payload = hasFormBody(request) ? form(body.value) : bodyText(request);\n\n /*\n * --body-data sends the generated value directly. Shell quoting protects\n * whitespace and metacharacters, but command-line arguments cannot\n * represent embedded NUL bytes.\n */\n parts.push(` --body-data=${escapeSh(payload)}`);\n }\n\n parts.push(` ${escapeSh(compiled.url)}`);\n\n const comments = [\n \"# Requires GNU Wget 1.20+.\",\n \"# Install (Debian/Ubuntu): sudo apt-get install wget\",\n \"# --timeout=30 applies separately to DNS, connection, and read operations;\",\n \"# GNU Wget does not provide a strict 30-second total-transfer timeout.\",\n \"# --tries=1 disables retries after the initial request.\",\n \"# Response bodies, including HTTP error bodies, are written to standard output.\",\n \"# GNU Wget reports HTTP failures through its process exit status.\",\n \"# Repeated request headers are emitted as separate --header options.\",\n ];\n\n return `${comments.join(\"\\n\")}\\n${parts.join(\" \\\\\\n\")}`;\n}\n","import {\n DEFAULT_BINARY_MEDIA_TYPE,\n DEFAULT_FILE_NAME,\n DEFAULT_FILE_PATH,\n bodyText,\n compile,\n escapeSwift,\n fileComment,\n form,\n hasFormBody,\n hasMultipartBody,\n isContentLengthHeader,\n isContentTypeHeader,\n isFileValue,\n isTransferEncodingHeader,\n nonBlankString,\n normalizeMethod,\n supportsRequestBody,\n toKeyValueBody,\n} from \"../common\";\nimport type { FileValue, RequestIR } from \"../../types\";\n\nfunction safeSwiftComment(value: string): string {\n return value.replace(/[\\r\\n\\u0000-\\u001f\\u007f\\u2028\\u2029]+/g, \" \").trim();\n}\n\nfunction swiftTextValue(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n\n if (value === null || value === undefined) {\n return \"\";\n }\n\n if (\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n\n try {\n return JSON.stringify(value) ?? \"\";\n } catch {\n return String(value);\n }\n}\n\nexport function emit(request: RequestIR): string {\n const compiled = compile(request);\n const method = normalizeMethod(request.method);\n const body = request.body;\n const canHaveBody = supportsRequestBody(method);\n const multipart = Boolean(body && canHaveBody && hasMultipartBody(request));\n const generatedBody = Boolean(body && canHaveBody);\n\n const comments: string[] = [\n \"// Requires Swift 5.7+ on macOS 12+ or Linux with FoundationNetworking.\",\n \"// Compile on macOS: swiftc main.swift -o request\",\n \"// Compile on Linux: swiftc main.swift -o request\",\n \"// URLSession cannot preserve duplicate request headers reliably;\",\n \"// duplicate names are safely combined with commas.\",\n ];\n\n const headers = compiled.headers.filter(([rawName]) => {\n const name = String(rawName);\n\n if (\n generatedBody &&\n (isContentLengthHeader(name) || isTransferEncodingHeader(name))\n ) {\n return false;\n }\n\n // URLSession must generate the multipart boundary used by this emitter.\n if (multipart && isContentTypeHeader(name)) {\n return false;\n }\n\n return true;\n });\n\n /*\n * URLRequest stores headers as a dictionary, so preserve all values by\n * combining duplicate names case-insensitively in insertion order.\n */\n const combinedHeaders: Array<[string, string[]]> = [];\n const headerIndexes = new Map<string, number>();\n\n for (const [rawName, rawValue] of headers) {\n const name = String(rawName);\n const value = String(rawValue);\n const normalizedName = name.toLowerCase();\n const existingIndex = headerIndexes.get(normalizedName);\n\n if (existingIndex === undefined) {\n headerIndexes.set(normalizedName, combinedHeaders.length);\n combinedHeaders.push([name, [value]]);\n } else {\n combinedHeaders[existingIndex][1].push(value);\n }\n }\n\n const bodyLines: string[] = [];\n\n if (body && canHaveBody && multipart) {\n bodyLines.push(\n `var bodyData = Data()`,\n ``,\n `func appendUtf8(_ value: String, to data: inout Data) throws {`,\n ` guard let encoded = value.data(using: .utf8) else {`,\n ` throw RequestError.utf8Encoding`,\n ` }`,\n ` data.append(encoded)`,\n `}`,\n ``,\n );\n\n for (const [index, entry] of toKeyValueBody(body.value).entries()) {\n const fieldName = String(entry.name);\n\n if (entry.file && isFileValue(entry.value)) {\n const fileValue: FileValue = entry.value;\n const actualPath = nonBlankString(fileValue.path);\n const filePath = actualPath ?? DEFAULT_FILE_PATH;\n const fileName = nonBlankString(fileValue.name) ?? DEFAULT_FILE_NAME;\n const contentType =\n nonBlankString(fileValue.contentType) ?? DEFAULT_BINARY_MEDIA_TYPE;\n\n if (actualPath === undefined) {\n comments.push(\n `// ${safeSwiftComment(fileComment(filePath, fieldName))}`,\n );\n }\n\n bodyLines.push(\n `try appendUtf8(\"--\\\\(boundary)\\\\r\\\\n\", to: &bodyData)`,\n `try appendUtf8(\"Content-Disposition: form-data; name=\\\\\"\\\\(quotedMultipartValue(${escapeSwift(\n fieldName,\n )}))\\\\\"; filename=\\\\\"\\\\(quotedMultipartValue(${escapeSwift(\n fileName,\n )}))\\\\\"\\\\r\\\\n\", to: &bodyData)`,\n `try appendUtf8(\"Content-Type: \\\\(safeMediaType(${escapeSwift(\n contentType,\n )}))\\\\r\\\\n\\\\r\\\\n\", to: &bodyData)`,\n `let fileURL${index} = URL(fileURLWithPath: ${escapeSwift(\n filePath,\n )})`,\n `bodyData.append(try Data(contentsOf: fileURL${index}, options: [.mappedIfSafe]))`,\n `try appendUtf8(\"\\\\r\\\\n\", to: &bodyData)`,\n ``,\n );\n } else {\n bodyLines.push(\n `try appendUtf8(\"--\\\\(boundary)\\\\r\\\\n\", to: &bodyData)`,\n `try appendUtf8(\"Content-Disposition: form-data; name=\\\\\"\\\\(quotedMultipartValue(${escapeSwift(\n fieldName,\n )}))\\\\\"\\\\r\\\\n\\\\r\\\\n\", to: &bodyData)`,\n `try appendUtf8(${escapeSwift(\n swiftTextValue(entry.value),\n )}, to: &bodyData)`,\n `try appendUtf8(\"\\\\r\\\\n\", to: &bodyData)`,\n ``,\n );\n }\n }\n\n bodyLines.push(\n `try appendUtf8(\"--\\\\(boundary)--\\\\r\\\\n\", to: &bodyData)`,\n `urlRequest.httpBody = bodyData`,\n `urlRequest.setValue(`,\n ` \"multipart/form-data; boundary=\\\\(boundary)\",`,\n ` forHTTPHeaderField: \"Content-Type\"`,\n `)`,\n );\n } else if (body && canHaveBody) {\n const payload = hasFormBody(request) ? form(body.value) : bodyText(request);\n\n bodyLines.push(\n `guard let requestBody = ${escapeSwift(\n payload,\n )}.data(using: .utf8) else {`,\n ` throw RequestError.utf8Encoding`,\n `}`,\n `urlRequest.httpBody = requestBody`,\n );\n }\n\n const multipartHelpers = multipart\n ? [\n ``,\n `func quotedMultipartValue(_ value: String) -> String {`,\n ` value`,\n ` .replacingOccurrences(of: \"\\\\r\", with: \" \")`,\n ` .replacingOccurrences(of: \"\\\\n\", with: \" \")`,\n ` .replacingOccurrences(of: \"\\\\\\\\\", with: \"\\\\\\\\\\\\\\\\\")`,\n ` .replacingOccurrences(of: \"\\\\\"\", with: \"\\\\\\\\\\\\\"\")`,\n `}`,\n ``,\n `func safeMediaType(_ value: String) -> String {`,\n ` let sanitized = value`,\n ` .replacingOccurrences(of: \"\\\\r\", with: \"\")`,\n ` .replacingOccurrences(of: \"\\\\n\", with: \"\")`,\n ` .trimmingCharacters(in: .whitespacesAndNewlines)`,\n ` return sanitized.isEmpty`,\n ` ? \"application/octet-stream\"`,\n ` : sanitized`,\n `}`,\n ]\n : [];\n\n return [\n ...comments,\n ``,\n `import Foundation`,\n `#if canImport(FoundationNetworking)`,\n `import FoundationNetworking`,\n `#endif`,\n ``,\n `enum RequestError: Error, CustomStringConvertible {`,\n ` case invalidURL(String)`,\n ` case utf8Encoding`,\n ` case invalidResponse`,\n ` case httpStatus(Int, String)`,\n ``,\n ` var description: String {`,\n ` switch self {`,\n ` case .invalidURL(let value):`,\n ` return \"Invalid URL: \\\\(value)\"`,\n ` case .utf8Encoding:`,\n ` return \"Failed to encode request data as UTF-8\"`,\n ` case .invalidResponse:`,\n ` return \"The server returned a non-HTTP response\"`,\n ` case .httpStatus(let status, let body):`,\n ` return \"HTTP status \\\\(status): \\\\(body)\"`,\n ` }`,\n ` }`,\n `}`,\n ...multipartHelpers,\n ``,\n `@main`,\n `struct Main {`,\n ` static func main() async {`,\n ` do {`,\n ` try await run()`,\n ` } catch {`,\n ` FileHandle.standardError.write(`,\n ` Data(\"Request failed: \\\\(error)\\\\n\".utf8)`,\n ` )`,\n ` Foundation.exit(EXIT_FAILURE)`,\n ` }`,\n ` }`,\n ``,\n ` static func run() async throws {`,\n ` let urlString = ${escapeSwift(compiled.url)}`,\n ` guard let url = URL(string: urlString) else {`,\n ` throw RequestError.invalidURL(urlString)`,\n ` }`,\n ``,\n ` var urlRequest = URLRequest(url: url)`,\n ` urlRequest.httpMethod = ${escapeSwift(method)}`,\n ` urlRequest.timeoutInterval = 30`,\n ...combinedHeaders.map(\n ([name, values]) =>\n ` urlRequest.setValue(${escapeSwift(\n values.join(\", \"),\n )}, forHTTPHeaderField: ${escapeSwift(name)})`,\n ),\n ...(multipart\n ? [\n ` let boundary = \"Boundary-\\\\(UUID().uuidString)\"`,\n ...bodyLines.map((line) => (line ? ` ${line}` : ``)),\n ]\n : bodyLines.map((line) => (line ? ` ${line}` : ``))),\n ``,\n ` let configuration = URLSessionConfiguration.ephemeral`,\n ` configuration.timeoutIntervalForRequest = 30`,\n ` configuration.timeoutIntervalForResource = 30`,\n ` let session = URLSession(configuration: configuration)`,\n ` defer {`,\n ` session.invalidateAndCancel()`,\n ` }`,\n ``,\n ` let (data, response) = try await session.data(for: urlRequest)`,\n ` guard let httpResponse = response as? HTTPURLResponse else {`,\n ` throw RequestError.invalidResponse`,\n ` }`,\n ``,\n ` let responseBody = String(decoding: data, as: UTF8.self)`,\n ` guard (200...299).contains(httpResponse.statusCode) else {`,\n ` throw RequestError.httpStatus(`,\n ` httpResponse.statusCode,`,\n ` responseBody`,\n ` )`,\n ` }`,\n ``,\n ` print(responseBody)`,\n ` }`,\n `}`,\n ].join(\"\\n\");\n}\n","/**\n * Unified emitter registry.\n *\n * This module replaces the redundant src/generators/ directory.\n * Each emitter exports an `emit` function; we wrap it with createGenerator\n * and register all built-in generators here.\n */\n\nimport { createGenerator } from \"../core/generator\";\nimport type { Generator } from \"../types\";\n\nimport { emit as cLibcurl } from \"./c/libcurl\";\nimport { emit as csharpHttpclient } from \"./csharp/httpclient\";\nimport { emit as csharpRestsharp } from \"./csharp/restsharp\";\nimport { emit as clojureCljHttp } from \"./clojure/clj-http\";\nimport { emit as dartHttp } from \"./dart/http\";\nimport { emit as fsharpHttpclient } from \"./fsharp/httpclient\";\nimport { emit as goNewRequest } from \"./go/new-request\";\nimport { emit as httpHttp1 } from \"./http/http1\";\nimport { emit as javaAsynchttp } from \"./java/asynchttp\";\nimport { emit as javaJavaNetHttp } from \"./java/java-net-http\";\nimport { emit as javaOkhttp } from \"./java/okhttp\";\nimport { emit as javaUnirest } from \"./java/unirest\";\nimport { emit as javascriptAxios } from \"./javascript/axios\";\nimport { emit as javascriptFetch } from \"./javascript/fetch\";\nimport { emit as javascriptJquery } from \"./javascript/jquery\";\nimport { emit as javascriptOfetch } from \"./javascript/ofetch\";\nimport { emit as javascriptXhr } from \"./javascript/xhr\";\nimport { emit as kotlinOkhttp } from \"./kotlin/okhttp\";\nimport { emit as nodeAxios } from \"./node/axios\";\nimport { emit as nodeFetch } from \"./node/fetch\";\nimport { emit as nodeOfetch } from \"./node/ofetch\";\nimport { emit as nodeUndici } from \"./node/undici\";\nimport { emit as objcNsurlsession } from \"./objc/nsurlsession\";\nimport { emit as ocamlCohttp } from \"./ocaml/cohttp\";\nimport { emit as phpCurl } from \"./php/curl\";\nimport { emit as phpGuzzle } from \"./php/guzzle\";\nimport { emit as phpLaravelHttp } from \"./php/laravel-http\";\nimport { emit as powershellInvokeRestmethod } from \"./powershell/invoke-restmethod\";\nimport { emit as powershellInvokeWebrequest } from \"./powershell/invoke-webrequest\";\nimport { emit as pythonAiohttp } from \"./python/aiohttp\";\nimport { emit as pythonHttpClient } from \"./python/http-client\";\nimport { emit as pythonHttpxAsync } from \"./python/httpx-async\";\nimport { emit as pythonHttpxSync } from \"./python/httpx-sync\";\nimport { emit as pythonRequests } from \"./python/requests\";\nimport { emit as rHttr2 } from \"./r/httr2\";\nimport { emit as rubyNetHttp } from \"./ruby/net-http\";\nimport { emit as rustReqwest } from \"./rust/reqwest\";\nimport { emit as shellCurl } from \"./shell/curl\";\nimport { emit as shellHttpie } from \"./shell/httpie\";\nimport { emit as shellWget } from \"./shell/wget\";\nimport { emit as swiftNsurlsession } from \"./swift/nsurlsession\";\n\n/**\n * All built-in generators, defined as [language, client, emitter] tuples.\n * This is the single source of truth for built-in generator registration.\n */\nexport const builtinGenerators: Generator[] = [\n createGenerator(\"c\", \"libcurl\", cLibcurl),\n createGenerator(\"csharp\", \"httpclient\", csharpHttpclient),\n createGenerator(\"csharp\", \"restsharp\", csharpRestsharp),\n createGenerator(\"clojure\", \"clj-http\", clojureCljHttp),\n createGenerator(\"dart\", \"http\", dartHttp),\n createGenerator(\"fsharp\", \"httpclient\", fsharpHttpclient),\n createGenerator(\"go\", \"new-request\", goNewRequest),\n createGenerator(\"http\", \"http1\", httpHttp1),\n createGenerator(\"java\", \"asynchttp\", javaAsynchttp),\n createGenerator(\"java\", \"java-net-http\", javaJavaNetHttp),\n createGenerator(\"java\", \"okhttp\", javaOkhttp),\n createGenerator(\"java\", \"unirest\", javaUnirest),\n createGenerator(\"javascript\", \"axios\", javascriptAxios),\n createGenerator(\"javascript\", \"fetch\", javascriptFetch),\n createGenerator(\"javascript\", \"jquery\", javascriptJquery),\n createGenerator(\"javascript\", \"ofetch\", javascriptOfetch),\n createGenerator(\"javascript\", \"xhr\", javascriptXhr),\n createGenerator(\"kotlin\", \"okhttp\", kotlinOkhttp),\n createGenerator(\"node\", \"axios\", nodeAxios),\n createGenerator(\"node\", \"fetch\", nodeFetch),\n createGenerator(\"node\", \"ofetch\", nodeOfetch),\n createGenerator(\"node\", \"undici\", nodeUndici),\n createGenerator(\"objc\", \"nsurlsession\", objcNsurlsession),\n createGenerator(\"ocaml\", \"cohttp\", ocamlCohttp),\n createGenerator(\"php\", \"curl\", phpCurl),\n createGenerator(\"php\", \"guzzle\", phpGuzzle),\n createGenerator(\"php\", \"laravel-http\", phpLaravelHttp),\n createGenerator(\"powershell\", \"invoke-restmethod\", powershellInvokeRestmethod),\n createGenerator(\"powershell\", \"invoke-webrequest\", powershellInvokeWebrequest),\n createGenerator(\"python\", \"aiohttp\", pythonAiohttp),\n createGenerator(\"python\", \"http-client\", pythonHttpClient),\n createGenerator(\"python\", \"httpx-async\", pythonHttpxAsync),\n createGenerator(\"python\", \"httpx-sync\", pythonHttpxSync),\n createGenerator(\"python\", \"requests\", pythonRequests),\n createGenerator(\"r\", \"httr2\", rHttr2),\n createGenerator(\"ruby\", \"net-http\", rubyNetHttp),\n createGenerator(\"rust\", \"reqwest\", rustReqwest),\n createGenerator(\"shell\", \"curl\", shellCurl),\n createGenerator(\"shell\", \"httpie\", shellHttpie),\n createGenerator(\"shell\", \"wget\", shellWget),\n createGenerator(\"swift\", \"nsurlsession\", swiftNsurlsession),\n];\n","/**\n * @powerduck/openapi-codegen\n *\n * Generate runnable HTTP request examples from OpenAPI documents.\n * Supports 21 languages and 41 language/client combinations.\n *\n * Browser-compatible, zero runtime dependencies.\n */\n\nexport * from \"./types\";\nexport * from \"./core/refs\";\nexport * from \"./core/example\";\nexport * from \"./core/serialize\";\nexport * from \"./core/generator\";\nexport * from \"./core/registry\";\nexport * from \"./core/plugin\";\nexport * from \"./core/request\";\nexport { normalize } from \"./core/normalize\";\nexport { builtinGenerators } from \"./emitters/index\";\n\nimport { registerGenerator, getGenerator, listGenerators } from \"./core/registry\";\nimport { normalize } from \"./core/normalize\";\nimport { builtinGenerators } from \"./emitters/index\";\nimport type { GenerateOptions, Generator, Plugin, RequestIR } from \"./types\";\n\nlet initialized = false;\n\n/**\n * Register all built-in generators.\n * Called automatically on first use, but can be called explicitly.\n */\nexport function registerBuiltins(): void {\n if (initialized) return;\n initialized = true;\n for (const generator of builtinGenerators) {\n registerGenerator(generator);\n }\n}\n\n// Auto-register builtins on module load\nregisterBuiltins();\n\n/**\n * Register a custom generator.\n */\nexport function register(generator: Generator): void {\n registerGenerator(generator);\n}\n\n/**\n * Get a generator by language and client.\n */\nexport function get(language: string, client: string): Generator | undefined {\n return getGenerator(language, client);\n}\n\n/**\n * List all available generators.\n */\nexport function list(): Array<{ language: string; client: string }> {\n return listGenerators();\n}\n\n/**\n * Apply a plugin that can register custom generators.\n */\nexport function use(plugin: Plugin): void {\n plugin.register({ register });\n}\n\n/**\n * Generate an HTTP request example for an OpenAPI operation.\n *\n * @param options - Generation options\n * @returns Generated source code as a string\n * @throws Error when the path/method is not found, the generator is unknown,\n * or the document is invalid.\n *\n * @example\n * ```typescript\n * import { generate } from \"@powerduck/openapi-codegen\";\n *\n * const code = generate({\n * document: openApiDocument,\n * path: \"/users/{id}\",\n * method: \"get\",\n * language: \"javascript\",\n * client: \"fetch\",\n * });\n *\n * console.log(code);\n * ```\n */\nexport function generate(options: GenerateOptions): string {\n if (!options || typeof options !== \"object\") {\n throw new TypeError(\"generate() requires an options object\");\n }\n\n const generator = get(options.language, options.client);\n if (!generator) {\n throw new Error(`Unsupported generator: ${options.language}/${options.client}`);\n }\n\n let request: RequestIR;\n if (options.request) {\n request = options.request;\n } else {\n if (!options.document) {\n throw new TypeError(\"generate() requires either a 'request' or a 'document' option\");\n }\n if (!options.path) {\n throw new TypeError(\"generate() requires a 'path' option when using 'document'\");\n }\n if (!options.method) {\n throw new TypeError(\"generate() requires a 'method' option when using 'document'\");\n }\n request = normalize({\n document: options.document,\n path: options.path,\n method: options.method,\n serverUrl: options.serverUrl,\n securityValues: options.securityValues,\n softRefMode: options.softRefMode,\n }) as unknown as RequestIR;\n }\n\n return generator.generate(request);\n}\n"],"mappings":"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","names":["key","key","makeSampleString","key","isRecord","parameter","key","emit","parameter","key","key","normalizeMethod","parameter","nonBlankString","nonBlankString","safeComment","multipartText","emit","nonBlankString","safeComment","multipartText","emit","emit","emit","nonBlankString","safeComment","multipartText","emit","nonBlankString","safeComment","multipartText","emit","emit","safeComment","emit","safeComment","textFieldValue","emit","safeComment","textFieldValue","emit","nonBlankString","safeComment","multipartText","emit","emit","parameter","emit","parameter","emit","safeIdentifier","emit","name","parameter","emit","parameter","safeComment","textFieldValue","emit","emit","emit","emit","safeComment","textFieldValue","emit","textFieldValue","emit","textFieldValue","emit","safeComment","emit","safeComment","key","emit","safeComment","key","emit","safeComment","emit","key","safeComment","emit","key","safeComment","emit","safeComment","pythonHeaderList","emit","safeComment","pythonHeaderList","emit","safeComment","emit","safeComment","pythonHeaderLines","emit","indent","key","emit","safeComment","emit","safeComment","emit","formFieldValue","emit","safeShellComment","stringValue","emit","command","emit","emit","emit"]}
|