openapi-typesafe-fetch 1.0.0-rc.2 → 1.0.0-rc.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +763 -0
- package/README.md +2 -2
- package/dist/helpers.cjs +3 -0
- package/dist/helpers.cjs.map +1 -0
- package/dist/helpers.d.cts +299 -0
- package/dist/helpers.d.mts +299 -0
- package/dist/helpers.d.ts +299 -0
- package/dist/helpers.mjs +2 -0
- package/dist/helpers.mjs.map +1 -0
- package/dist/index.cjs +190 -131
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +64 -17
- package/dist/index.d.mts +64 -17
- package/dist/index.d.ts +64 -17
- package/dist/index.mjs +190 -131
- package/dist/index.mjs.map +1 -1
- package/package.json +18 -9
- package/src/helpers.ts +437 -0
- package/src/index.d.ts +60 -16
- package/src/index.js +305 -183
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/index.js"],"sourcesContent":["// settings & const\nconst PATH_PARAM_RE = /\\{[^{}]+\\}/g;\n/**\n * A `.` or `..` path segment; URLs resolve it, so a parameter value could leave its path (#2483).\n */\nconst DOT_SEGMENT_RE = /(^|\\/)\\.\\.?(\\/|$)/;\n/** Where the path of a URL ends: its query or fragment, which have no segments. */\nconst QUERY_OR_FRAGMENT_RE = /[?#]/;\n/**\n * Any JSON media type: `application/json`, `application/problem+json`, with or without\n * parameters.\n */\nconst JSON_MEDIA_TYPE_RE = /json/i;\n/** `application/x-www-form-urlencoded`, with or without parameters such as `charset`. */\nconst FORM_MEDIA_TYPE_RE = /^application\\/x-www-form-urlencoded(;|$)/i;\n/** `multipart/form-data`, with or without parameters. */\nconst MULTIPART_MEDIA_TYPE_RE = /^multipart\\/form-data(;|$)/i;\nconst NESTED_FORM_VALUE_MESSAGE = \"Nested form values need your own `bodySerializer()`.\";\n/** The `boundary` parameter of a multipart `Content-Type`; only the platform knows its value. */\nconst BOUNDARY_PARAMETER_RE = /;\\s*boundary=/i;\n\n/**\n * Whether `fetch` is Node.js undici, which takes `requestInitExt` as a second argument. A Node.js\n * version check is not needed: every supported Node.js (`engines`) ships undici.\n */\nconst supportsRequestInitExt = () => {\n return typeof process === \"object\" && process.versions?.undici;\n};\n\n/**\n * The number of request ids handed out. It is shared by all clients on purpose: one middleware can\n * be used by several clients, and it tells their requests apart by id.\n */\nlet requestIdCount = 0;\n\n/**\n * Returns a cheap, non-cryptographically-secure ID, unique within the process.\n * A counter, not `Math.random()`: Next.js prerendering rejects random values read before uncached\n * data (upstream #2486, #2763). The name stays for compatibility.\n */\nexport function randomID() {\n requestIdCount += 1;\n return requestIdCount.toString(36);\n}\n\n/**\n * Create an openapi-typesafe-fetch client.\n * @type {import(\"./index.js\").default}\n */\n// biome-ignore lint/complexity/noExcessiveLinesPerFunction: inherited, kept until 1.1 (ADR-036)\nexport default function createClient(clientOptions) {\n let {\n baseUrl = \"\",\n Request: CustomRequest = globalThis.Request,\n fetch: baseFetch = globalThis.fetch,\n querySerializer: globalQuerySerializer,\n bodySerializer: globalBodySerializer,\n pathSerializer: globalPathSerializer,\n headers: baseHeaders,\n requestInitExt = undefined,\n ...baseOptions\n } = { ...clientOptions };\n requestInitExt = supportsRequestInitExt() ? requestInitExt : undefined;\n baseUrl = removeTrailingSlash(baseUrl);\n const globalMiddlewares = [];\n\n /**\n * Per-request fetch (keeps settings created in createClient()\n * @param {T} url\n * @param {import('./index.js').FetchOptions<T>} fetchOptions\n */\n // biome-ignore lint/complexity/noExcessiveLinesPerFunction: inherited, kept until 1.1 (ADR-036)\n async function coreFetch(schemaPath, fetchOptions) {\n const {\n baseUrl: localBaseUrl,\n fetch = baseFetch,\n Request = CustomRequest,\n headers,\n params = {},\n parseAs = \"json\",\n querySerializer: requestQuerySerializer,\n bodySerializer = globalBodySerializer ?? defaultBodySerializer,\n pathSerializer: requestPathSerializer,\n body,\n middleware: requestMiddlewares = [],\n ...init\n } = fetchOptions || {};\n let finalBaseUrl = baseUrl;\n if (localBaseUrl) {\n finalBaseUrl = removeTrailingSlash(localBaseUrl) ?? baseUrl;\n }\n\n let querySerializer =\n typeof globalQuerySerializer === \"function\"\n ? globalQuerySerializer\n : createQuerySerializer(globalQuerySerializer);\n if (requestQuerySerializer) {\n querySerializer =\n typeof requestQuerySerializer === \"function\"\n ? requestQuerySerializer\n : createQuerySerializer({\n ...(typeof globalQuerySerializer === \"object\" ? globalQuerySerializer : {}),\n ...requestQuerySerializer,\n });\n }\n\n const pathSerializer = requestPathSerializer || globalPathSerializer || defaultPathSerializer;\n\n const serializedBody =\n body === undefined\n ? undefined\n : bodySerializer(\n body,\n // Note: we declare mergeHeaders() both here and below because it’s a bit of a\n // chicken-or-egg situation: bodySerializer() needs all headers so we aren’t dropping\n // ones set by the user, however, the result of this ALSO sets the lowest-priority\n // content-type header. So we re-merge below, setting the content-type at the very\n // beginning to be overwritten. Lastly, based on the way headers work, it’s not a simple\n // “present-or-not” check because null intentionally un-sets headers.\n mergeHeaders(baseHeaders, headers, params.header),\n );\n const finalHeaders = mergeHeaders(\n // with no body, we should not to set Content-Type\n serializedBody === undefined ||\n // a raw body (FormData, Blob, ...) gets its Content-Type from the platform, or none\n isRawBody(serializedBody)\n ? {}\n : {\n \"Content-Type\": \"application/json\",\n },\n baseHeaders,\n headers,\n params.header,\n );\n // `fetch` sends a FormData as multipart with a boundary only it knows. A `Content-Type` without\n // that boundary, set by hand, replaced the platform's, and the server could not split the parts\n // (upstream #1214), so it goes and the platform sets its own (ADR-013, decision 10).\n if (\n serializedBody instanceof FormData &&\n !BOUNDARY_PARAMETER_RE.test(finalHeaders.get(\"Content-Type\"))\n ) {\n finalHeaders.delete(\"Content-Type\");\n }\n\n // Client level middleware take priority over request-level middleware\n const finalMiddlewares = [...globalMiddlewares, ...requestMiddlewares];\n\n const requestInit = {\n redirect: \"follow\",\n ...baseOptions,\n ...init,\n body: serializedBody,\n headers: finalHeaders,\n };\n\n let id;\n let options;\n let request = new Request(\n createFinalURL(schemaPath, {\n baseUrl: finalBaseUrl,\n params,\n querySerializer,\n pathSerializer,\n }),\n requestInit,\n );\n let response;\n\n /** Add custom parameters to Request object */\n for (const key in init) {\n if (!(key in request)) {\n request[key] = init[key];\n }\n }\n\n if (finalMiddlewares.length) {\n id = randomID();\n\n // middleware (request)\n options = Object.freeze({\n baseUrl: finalBaseUrl,\n fetch,\n parseAs,\n querySerializer,\n bodySerializer,\n pathSerializer,\n });\n for (const m of finalMiddlewares) {\n if (m && typeof m === \"object\" && typeof m.onRequest === \"function\") {\n const result = await m.onRequest({\n request,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n if (isRequest(result)) {\n request = result;\n } else if (isResponse(result)) {\n response = result;\n break;\n } else {\n throw new Error(\n \"onRequest: must return new Request() or Response() when modifying the request\",\n );\n }\n }\n }\n }\n }\n\n if (!response) {\n // fetch!\n try {\n response = await fetch(request, requestInitExt);\n } catch (error) {\n let errorAfterMiddleware = error;\n // middleware (error)\n // execute in reverse-array order (first priority gets last transform)\n if (finalMiddlewares.length) {\n for (let i = finalMiddlewares.length - 1; i >= 0; i--) {\n const m = finalMiddlewares[i];\n if (m && typeof m === \"object\" && typeof m.onError === \"function\") {\n const result = await m.onError({\n request,\n error: errorAfterMiddleware,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n // if error is handled by returning a response, skip remaining middleware\n if (isResponse(result)) {\n errorAfterMiddleware = undefined;\n response = result;\n break;\n }\n\n if (result instanceof Error) {\n errorAfterMiddleware = result;\n continue;\n }\n\n throw new Error(\"onError: must return new Response() or instance of Error\");\n }\n }\n }\n }\n\n // rethrow error if not handled by middleware\n if (errorAfterMiddleware) {\n throw errorAfterMiddleware;\n }\n }\n\n // middleware (response)\n // execute in reverse-array order (first priority gets last transform)\n if (finalMiddlewares.length) {\n for (let i = finalMiddlewares.length - 1; i >= 0; i--) {\n const m = finalMiddlewares[i];\n if (m && typeof m === \"object\" && typeof m.onResponse === \"function\") {\n const result = await m.onResponse({\n request,\n response,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n if (!isResponse(result)) {\n throw new Error(\n \"onResponse: must return new Response() when modifying the response\",\n );\n }\n response = result;\n }\n }\n }\n }\n }\n\n const contentLength = response.headers.get(\"Content-Length\");\n // handle empty content\n if (\n response.status === 204 ||\n request.method === \"HEAD\" ||\n (contentLength === \"0\" && !response.headers.get(\"Transfer-Encoding\")?.includes(\"chunked\"))\n ) {\n return response.ok ? { data: undefined, response } : { error: undefined, response };\n }\n\n // parse response (falling back to .text() when necessary)\n if (response.ok) {\n const getResponseData = async () => {\n // if \"stream\", skip parsing entirely\n if (parseAs === \"stream\") {\n return response.body;\n }\n\n if (parseAs === \"json\" && !contentLength) {\n // use text() when no content-length is provided to avoid errors parsing empty bodies\n // (200 with no content)\n const raw = await response.text();\n return raw ? JSON.parse(raw) : undefined;\n }\n\n return await response[parseAs]();\n };\n return { data: await getResponseData(), response };\n }\n\n // handle errors (use text() when no content-length to safely handle empty bodies from proxies)\n const raw = await response.text();\n if (!raw) {\n // empty error body - return undefined to be consistent with status 204 handling\n return { error: undefined, response };\n }\n let error = raw;\n try {\n error = JSON.parse(raw); // attempt to parse as JSON\n } catch {\n // noop - keep as raw text\n }\n return { error, response };\n }\n\n return {\n request(method, url, init) {\n return coreFetch(url, { ...init, method: method.toUpperCase() });\n },\n /** Call a GET endpoint */\n GET(url, init) {\n return coreFetch(url, { ...init, method: \"GET\" });\n },\n /** Call a PUT endpoint */\n PUT(url, init) {\n return coreFetch(url, { ...init, method: \"PUT\" });\n },\n /** Call a POST endpoint */\n POST(url, init) {\n return coreFetch(url, { ...init, method: \"POST\" });\n },\n /** Call a DELETE endpoint */\n DELETE(url, init) {\n return coreFetch(url, { ...init, method: \"DELETE\" });\n },\n /** Call a OPTIONS endpoint */\n OPTIONS(url, init) {\n return coreFetch(url, { ...init, method: \"OPTIONS\" });\n },\n /** Call a HEAD endpoint */\n HEAD(url, init) {\n return coreFetch(url, { ...init, method: \"HEAD\" });\n },\n /** Call a PATCH endpoint */\n PATCH(url, init) {\n return coreFetch(url, { ...init, method: \"PATCH\" });\n },\n /** Call a TRACE endpoint */\n TRACE(url, init) {\n return coreFetch(url, { ...init, method: \"TRACE\" });\n },\n /** Call a QUERY endpoint (OpenAPI 3.2) */\n QUERY(url, init) {\n return coreFetch(url, { ...init, method: \"QUERY\" });\n },\n /** Register middleware */\n use(...middleware) {\n for (const m of middleware) {\n if (!m) {\n continue;\n }\n if (typeof m !== \"object\" || !(\"onRequest\" in m || \"onResponse\" in m || \"onError\" in m)) {\n throw new Error(\n \"Middleware must be an object with one of `onRequest()`, `onResponse()` or `onError()`\",\n );\n }\n globalMiddlewares.push(m);\n }\n },\n /** Unregister middleware */\n eject(...middleware) {\n for (const m of middleware) {\n const i = globalMiddlewares.indexOf(m);\n if (i !== -1) {\n globalMiddlewares.splice(i, 1);\n }\n }\n },\n };\n}\n\nclass PathCallForwarder {\n constructor(client, url) {\n this.client = client;\n this.url = url;\n }\n\n GET = (init) => {\n return this.client.GET(this.url, init);\n };\n PUT = (init) => {\n return this.client.PUT(this.url, init);\n };\n POST = (init) => {\n return this.client.POST(this.url, init);\n };\n DELETE = (init) => {\n return this.client.DELETE(this.url, init);\n };\n OPTIONS = (init) => {\n return this.client.OPTIONS(this.url, init);\n };\n HEAD = (init) => {\n return this.client.HEAD(this.url, init);\n };\n PATCH = (init) => {\n return this.client.PATCH(this.url, init);\n };\n TRACE = (init) => {\n return this.client.TRACE(this.url, init);\n };\n QUERY = (init) => {\n return this.client.QUERY(this.url, init);\n };\n}\n\nclass PathClientProxyHandler {\n constructor() {\n this.client = null;\n }\n\n // Assume the property is an URL.\n get(coreClient, url) {\n const forwarder = new PathCallForwarder(coreClient, url);\n this.client[url] = forwarder;\n return forwarder;\n }\n}\n\n/**\n * Wrap openapi-typesafe-fetch client to support a path based API.\n * @type {import(\"./index.js\").wrapAsPathBasedClient}\n */\nexport function wrapAsPathBasedClient(coreClient) {\n const handler = new PathClientProxyHandler();\n const proxy = new Proxy(coreClient, handler);\n\n // Put the proxy on the prototype chain of the actual client.\n // This means if we do not have a memoized PathCallForwarder,\n // we fall back to the proxy to synthesize it.\n // However, the proxy itself is not on the hot-path (if we fetch the same\n // endpoint multiple times, only the first call will hit the proxy).\n function Client() {}\n Client.prototype = proxy;\n\n const client = new Client();\n\n // Feed the client back to the proxy handler so it can store the generated\n // PathCallForwarder.\n handler.client = client;\n\n return client;\n}\n\n/**\n * Convenience method to an openapi-typesafe-fetch path based client.\n * Strictly equivalent to `wrapAsPathBasedClient(createClient(...))`.\n * @type {import(\"./index.js\").createPathBasedClient}\n */\nexport function createPathBasedClient(clientOptions) {\n return wrapAsPathBasedClient(createClient(clientOptions));\n}\n\n// utils\n\n// Fetch API objects are recognized by the members the client uses, not by `instanceof`: that is\n// bound to one realm's class, and a Request from the `undici` package, another realm (an iframe,\n// an Electron host) or a custom `Request` option is not an instance of it (upstream #1847). The\n// same rule as for headers in `defaultBodySerializer` (upstream #2637).\n\nfunction isHeaders(value) {\n return typeof value?.get === \"function\";\n}\n\nfunction isRequest(value) {\n return (\n typeof value?.method === \"string\" && typeof value.url === \"string\" && isHeaders(value.headers)\n );\n}\n\nfunction isResponse(value) {\n return typeof value?.status === \"number\" && isHeaders(value.headers);\n}\n\n// Parameter names and object keys can be data (an `additionalProperties` object). They are encoded\n// like values, except for characters common in names that do not split a URL (ADR-013, decision 9).\nconst KEPT_NAME_ESCAPES = /%(?:5B|5D|24|3A|40|2C)/g;\n\nfunction encodeName(name) {\n return encodeURIComponent(name).replace(KEPT_NAME_ESCAPES, decodeURIComponent);\n}\n\n/**\n * Serialize primitive param values\n * @type {import(\"./index.js\").serializePrimitiveParam}\n */\nexport function serializePrimitiveParam(name, value, options) {\n if (value === undefined || value === null) {\n return \"\";\n }\n if (typeof value === \"object\") {\n throw new Error(\n \"Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.\",\n );\n }\n return `${name}=${options?.allowReserved === true ? value : encodeURIComponent(value)}`;\n}\n\n/**\n * Serialize object param (shallow only)\n * @type {import(\"./index.js\").serializeObjectParam}\n */\n// biome-ignore lint/complexity/noExcessiveLinesPerFunction: inherited, kept until 1.1 (ADR-036)\nexport function serializeObjectParam(name, value, options) {\n if (!value || typeof value !== \"object\") {\n return \"\";\n }\n const values = [];\n const joiner =\n {\n simple: \",\",\n label: \".\",\n matrix: \";\",\n }[options.style] || \"&\";\n\n // explode: false\n if (options.style !== \"deepObject\" && options.explode === false) {\n for (const k in value) {\n values.push(\n encodeName(k),\n options.allowReserved === true ? value[k] : encodeURIComponent(value[k]),\n );\n }\n // note: values are always joined by comma in explode: false (but joiner can prefix)\n const final = values.join(\",\");\n switch (options.style) {\n case \"form\": {\n return `${name}=${final}`;\n }\n case \"label\": {\n return `.${final}`;\n }\n case \"matrix\": {\n return `;${name}=${final}`;\n }\n default: {\n return final;\n }\n }\n }\n\n // explode: true\n for (const k in value) {\n const finalName = options.style === \"deepObject\" ? `${name}[${encodeName(k)}]` : encodeName(k);\n values.push(serializePrimitiveParam(finalName, value[k], options));\n }\n const final = values.join(joiner);\n return options.style === \"label\" || options.style === \"matrix\" ? `${joiner}${final}` : final;\n}\n\n/**\n * Serialize array param (shallow only)\n * @type {import(\"./index.js\").serializeArrayParam}\n */\n// biome-ignore lint/complexity/noExcessiveLinesPerFunction: inherited, kept until 1.1 (ADR-036)\nexport function serializeArrayParam(name, value, options) {\n if (!Array.isArray(value)) {\n return \"\";\n }\n\n // explode: false\n if (options.explode === false) {\n // note: for arrays, joiners vary wildly based on style + explode behavior\n const joiner = { form: \",\", spaceDelimited: \"%20\", pipeDelimited: \"|\" }[options.style] || \",\";\n const final = (\n options.allowReserved === true ? value : value.map((v) => encodeURIComponent(v))\n ).join(joiner);\n switch (options.style) {\n case \"simple\": {\n return final;\n }\n case \"label\": {\n return `.${final}`;\n }\n case \"matrix\": {\n return `;${name}=${final}`;\n }\n // case \"spaceDelimited\":\n // case \"pipeDelimited\":\n default: {\n return `${name}=${final}`;\n }\n }\n }\n\n // explode: true\n const joiner = { simple: \",\", label: \".\", matrix: \";\" }[options.style] || \"&\";\n const values = [];\n for (const v of value) {\n if (options.style === \"simple\" || options.style === \"label\") {\n values.push(options.allowReserved === true ? v : encodeURIComponent(v));\n } else {\n values.push(serializePrimitiveParam(name, v, options));\n }\n }\n return options.style === \"label\" || options.style === \"matrix\"\n ? `${joiner}${values.join(joiner)}`\n : values.join(joiner);\n}\n\n/**\n * Serialize query params to string\n * @type {import(\"./index.js\").createQuerySerializer}\n */\nexport function createQuerySerializer(options) {\n return function querySerializer(queryParams) {\n const search = [];\n if (queryParams && typeof queryParams === \"object\") {\n for (const key in queryParams) {\n const value = queryParams[key];\n const name = encodeName(key);\n if (value === undefined || value === null) {\n continue;\n }\n if (Array.isArray(value)) {\n if (value.length === 0) {\n continue;\n }\n search.push(\n serializeArrayParam(name, value, {\n style: \"form\",\n explode: true,\n ...options?.array,\n allowReserved: options?.allowReserved || false,\n }),\n );\n continue;\n }\n if (typeof value === \"object\") {\n search.push(\n serializeObjectParam(name, value, {\n style: \"deepObject\",\n explode: true,\n ...options?.object,\n allowReserved: options?.allowReserved || false,\n }),\n );\n continue;\n }\n search.push(serializePrimitiveParam(name, value, options));\n }\n }\n return search.join(\"&\");\n };\n}\n\n/**\n * Handle different OpenAPI 3.x serialization styles\n * @type {import(\"./index.js\").defaultPathSerializer}\n * @see https://swagger.io/docs/specification/serialization/#path\n */\n// biome-ignore lint/complexity/noExcessiveLinesPerFunction: inherited, kept until 1.1 (ADR-036)\nexport function defaultPathSerializer(pathname, pathParams) {\n let nextURL = pathname;\n for (const match of pathname.match(PATH_PARAM_RE) ?? []) {\n let name = match.substring(1, match.length - 1);\n let explode = false;\n let style = \"simple\";\n if (name.endsWith(\"*\")) {\n explode = true;\n name = name.substring(0, name.length - 1);\n }\n if (name.startsWith(\".\")) {\n style = \"label\";\n name = name.substring(1);\n } else if (name.startsWith(\";\")) {\n style = \"matrix\";\n name = name.substring(1);\n }\n if (!pathParams || pathParams[name] === undefined || pathParams[name] === null) {\n continue;\n }\n const value = pathParams[name];\n let serialized;\n if (Array.isArray(value)) {\n serialized = serializeArrayParam(name, value, { style, explode });\n } else if (typeof value === \"object\") {\n serialized = serializeObjectParam(name, value, { style, explode });\n } else if (style === \"matrix\") {\n serialized = `;${serializePrimitiveParam(name, value)}`;\n } else {\n serialized = style === \"label\" ? `.${encodeURIComponent(value)}` : encodeURIComponent(value);\n }\n // A function: a string replacement reads `$'`, `$&` and the like, which object keys keep.\n nextURL = nextURL.replace(match, () => serialized);\n }\n const path = nextURL.split(QUERY_OR_FRAGMENT_RE, 1)[0];\n // `encodeURIComponent` keeps dots, so a value `..` would move the request up a path level\n // (ADR-013).\n // Only the path is checked: before a query (`/a/{id}?v=2`), `$` did not match after `..`.\n if (DOT_SEGMENT_RE.test(path)) {\n throw new Error(`Dot path segment in ${nextURL}`);\n }\n // `//host/…` is a protocol-relative URL: with a relative baseUrl a browser sends it to that\n // host.\n if (path.startsWith(\"//\")) {\n throw new Error(`Empty first path segment in ${nextURL}`);\n }\n return nextURL;\n}\n\n/**\n * Bodies `fetch` sends as they are, with their own `Content-Type` (FormData, Blob, URLSearchParams)\n * or none. JSON-encoding a Blob or an ArrayBuffer sent `{}` (ADR-013, decision 6).\n */\nfunction isRawBody(body) {\n return (\n body instanceof FormData ||\n body instanceof Blob ||\n body instanceof URLSearchParams ||\n body instanceof ArrayBuffer ||\n ArrayBuffer.isView(body)\n );\n}\n\n/**\n * A form body. A nested object has no standard form encoding (servers read `a[b]`, `a.b` or JSON),\n * and `URLSearchParams` wrote it as `[object Object]` (ADR-013, decision 7). `null` and `undefined`\n * fields are left out, as in a multipart body; `URLSearchParams` sent them as the text \"null\" and\n * \"undefined\" (ADR-030). A string or a list of pairs is form data already.\n */\nfunction formBody(body) {\n if (!body || typeof body !== \"object\" || Array.isArray(body)) {\n return new URLSearchParams(body).toString();\n }\n const form = new URLSearchParams();\n for (const [name, value] of Object.entries(body)) {\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n throw new Error(NESTED_FORM_VALUE_MESSAGE);\n }\n if (value != null) {\n form.append(name, value);\n }\n }\n return form.toString();\n}\n\n/**\n * A `multipart/form-data` body: one part per field, one per item of an array. A `Blob` (or `File`)\n * is a file part, other primitives are text, `null` and `undefined` are left out. A nested object\n * would need a part content type such as JSON, which the client does not guess (ADR-013,\n * decision 10).\n */\nfunction multipartBody(body) {\n const formData = new FormData();\n for (const [name, value] of Object.entries(body)) {\n for (const item of [value].flat()) {\n if (item instanceof Blob) {\n formData.append(name, item);\n } else if (item && typeof item === \"object\") {\n throw new Error(NESTED_FORM_VALUE_MESSAGE);\n } else if (item != null) {\n formData.append(name, String(item));\n }\n }\n }\n return formData;\n}\n\n/**\n * Serialize body object to string\n * @type {import(\"./index.js\").defaultBodySerializer}\n */\nexport function defaultBodySerializer(body, headers) {\n if (isRawBody(body)) {\n return body;\n }\n // Headers with a `get` are read directly: headers from another realm (iframe, `node:vm`) may have\n // nothing else (upstream #2637). A record or a list of pairs is read through `Headers`, which\n // matches the name in any letter case.\n const contentType =\n headers && (isHeaders(headers) ? headers : mergeHeaders(headers)).get(\"Content-Type\");\n if (FORM_MEDIA_TYPE_RE.test(contentType)) {\n return formBody(body);\n }\n if (body && typeof body === \"object\" && MULTIPART_MEDIA_TYPE_RE.test(contentType)) {\n return multipartBody(body);\n }\n // A string for a non-JSON media type (`text/plain`, ...) is the body itself; JSON-encoding it\n // added quotes (upstream #2555, #2382). For JSON, a string is a JSON string value (ADR-013).\n if (typeof body === \"string\" && contentType && !JSON_MEDIA_TYPE_RE.test(contentType)) {\n return body;\n }\n return JSON.stringify(body);\n}\n\n/**\n * Construct URL string from baseUrl and handle path and query params\n * @type {import(\"./index.js\").createFinalURL}\n */\nexport function createFinalURL(pathname, options) {\n let finalURL = `${options.baseUrl}${pathname}`;\n if (options.params?.path) {\n finalURL = options.pathSerializer(finalURL, options.params.path);\n }\n let search = options.querySerializer(options.params.query ?? {});\n if (search.startsWith(\"?\")) {\n search = search.substring(1);\n }\n if (search) {\n // A path may already have a query string.\n finalURL += `${finalURL.includes(\"?\") ? \"&\" : \"?\"}${search}`;\n }\n return finalURL;\n}\n\n/**\n * Merge headers a and b, with b taking priority\n * @type {import(\"./index.js\").mergeHeaders}\n */\nexport function mergeHeaders(...allHeaders) {\n const finalHeaders = new Headers();\n for (const h of allHeaders) {\n if (!h || typeof h !== \"object\") {\n continue;\n }\n // A list of pairs (`[[\"x-t\", \"1\"]]`) is a `HeadersInit` too; `Headers` joins a repeated name.\n const iterator = isHeaders(h)\n ? h.entries()\n : Symbol.iterator in h\n ? new Headers(h).entries()\n : Object.entries(h);\n for (const [k, v] of iterator) {\n if (v === null) {\n finalHeaders.delete(k);\n } else if (Array.isArray(v)) {\n for (const v2 of v) {\n finalHeaders.append(k, v2);\n }\n } else if (v !== undefined) {\n finalHeaders.set(k, v);\n }\n }\n }\n return finalHeaders;\n}\n\n/**\n * Remove trailing slash from url\n * @type {import(\"./index.js\").removeTrailingSlash}\n */\nexport function removeTrailingSlash(url) {\n if (url.endsWith(\"/\")) {\n return url.substring(0, url.length - 1);\n }\n return url;\n}\n"],"names":["error","raw","final","joiner"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/index.js"],"sourcesContent":["// settings & const\nconst PATH_PARAM_RE = /\\{[^{}]+\\}/g;\n/**\n * A `.` or `..` path segment; URLs resolve it, so a parameter value could leave its path (#2483).\n */\nconst DOT_SEGMENT_RE = /^\\.\\.?$/;\n/** Where the path of a URL ends: its query or fragment, which have no segments. */\nconst QUERY_OR_FRAGMENT_RE = /[?#]/;\n/**\n * A JSON media type: `json` or a `+json` suffix (RFC 6838), as in `application/problem+json`, with\n * or without parameters. Not `x-ndjson`, `jsonl` or `json-seq`: their bodies are lines of JSON.\n */\nconst JSON_MEDIA_TYPE_RE = /^[^/]+\\/([^;]*\\+)?json\\s*(;|$)/i;\n/** `text/*` media types: a JSON parse error of such a body points to `parseAs: \"text\"`. */\nconst TEXT_MEDIA_TYPE_RE = /^text\\//i;\n/** `application/x-www-form-urlencoded`, with or without parameters such as `charset`. */\nconst FORM_MEDIA_TYPE_RE = /^application\\/x-www-form-urlencoded(;|$)/i;\n/** `multipart/form-data`, with or without parameters. */\nconst MULTIPART_MEDIA_TYPE_RE = /^multipart\\/form-data(;|$)/i;\nconst NESTED_FORM_VALUE_MESSAGE = \"Nested form values need your own `bodySerializer()`.\";\n/** The `boundary` parameter of a multipart `Content-Type`; only the platform knows its value. */\nconst BOUNDARY_PARAMETER_RE = /;\\s*boundary=/i;\n\n/**\n * Marks the FormData objects the default `bodySerializer` built. Only for them is the boundary the\n * platform's alone, whoever returns them (a `bodySerializer` may wrap the default one). A\n * registered symbol is the same in the CommonJS and ES module builds and in every copy of the\n * package, so a form one of them built is known to the others (ADR-013, decision 10).\n */\nconst CLIENT_BUILT_FORM = Symbol.for(\"openapi-typesafe-fetch/form\");\n\n/**\n * Whether `fetch` is Node.js undici, which takes `requestInitExt` as a second argument. A Node.js\n * version check is not needed: every supported Node.js (`engines`) ships undici.\n */\nconst supportsRequestInitExt = () => {\n return typeof process === \"object\" && process.versions?.undici;\n};\n\n/**\n * The number of request ids handed out. It is shared by all clients on purpose: one middleware can\n * be used by several clients, and it tells their requests apart by id.\n */\nlet requestIdCount = 0;\n\n/**\n * Returns a cheap, non-cryptographically-secure ID, unique within the process.\n * A counter, not `Math.random()`: Next.js prerendering rejects random values read before uncached\n * data (upstream #2486, #2763). The name stays for compatibility.\n */\nexport function randomID() {\n requestIdCount += 1;\n return requestIdCount.toString(36);\n}\n\n/**\n * Create an openapi-typesafe-fetch client.\n * @type {import(\"./index.js\").default}\n */\n// biome-ignore lint/complexity/noExcessiveLinesPerFunction: inherited, kept until 1.1 (ADR-036)\nexport default function createClient(clientOptions) {\n let {\n baseUrl = \"\",\n Request: CustomRequest = globalThis.Request,\n fetch: baseFetch = globalThis.fetch,\n querySerializer: globalQuerySerializer,\n bodySerializer: globalBodySerializer,\n pathSerializer: globalPathSerializer,\n headers: baseHeaders,\n requestInitExt = undefined,\n ...baseOptions\n } = { ...clientOptions };\n requestInitExt = supportsRequestInitExt() ? requestInitExt : undefined;\n baseUrl = removeTrailingSlash(baseUrl);\n const globalMiddlewares = [];\n\n /**\n * Per-request fetch (keeps settings created in createClient()\n * @param {T} url\n * @param {import('./index.js').FetchOptions<T>} fetchOptions\n */\n // biome-ignore lint/complexity/noExcessiveLinesPerFunction: inherited, kept until 1.1 (ADR-036)\n async function coreFetch(schemaPath, fetchOptions) {\n const {\n baseUrl: localBaseUrl,\n fetch = baseFetch,\n Request = CustomRequest,\n headers,\n params = {},\n parseAs = \"json\",\n querySerializer: requestQuerySerializer,\n bodySerializer = globalBodySerializer ?? defaultBodySerializer,\n pathSerializer: requestPathSerializer,\n body,\n middleware: requestMiddlewares = [],\n ...init\n } = fetchOptions || {};\n let finalBaseUrl = baseUrl;\n if (localBaseUrl) {\n finalBaseUrl = removeTrailingSlash(localBaseUrl) ?? baseUrl;\n }\n\n let querySerializer =\n typeof globalQuerySerializer === \"function\"\n ? globalQuerySerializer\n : createQuerySerializer(globalQuerySerializer);\n if (requestQuerySerializer) {\n querySerializer =\n typeof requestQuerySerializer === \"function\"\n ? requestQuerySerializer\n : createQuerySerializer({\n ...(typeof globalQuerySerializer === \"object\" ? globalQuerySerializer : {}),\n ...requestQuerySerializer,\n });\n }\n\n const pathSerializer = requestPathSerializer || globalPathSerializer || defaultPathSerializer;\n\n const serializedBody =\n body === undefined\n ? undefined\n : bodySerializer(\n body,\n // Note: we declare mergeHeaders() both here and below because it’s a bit of a\n // chicken-or-egg situation: bodySerializer() needs all headers so we aren’t dropping\n // ones set by the user, however, the result of this ALSO sets the lowest-priority\n // content-type header. So we re-merge below, setting the content-type at the very\n // beginning to be overwritten. Lastly, based on the way headers work, it’s not a simple\n // “present-or-not” check because null intentionally un-sets headers.\n mergeHeaders(baseHeaders, headers, params.header),\n );\n const finalHeaders = mergeHeaders(\n // with no body, we should not to set Content-Type\n serializedBody === undefined ||\n // a raw body (FormData, Blob, ...) gets its Content-Type from the platform, or none\n isRawBody(serializedBody)\n ? {}\n : {\n \"Content-Type\": \"application/json\",\n },\n baseHeaders,\n headers,\n params.header,\n );\n if (isPlatformInstance(serializedBody, \"FormData\")) {\n dropFormContentType(finalHeaders, serializedBody[CLIENT_BUILT_FORM] === true);\n }\n\n // Client level middleware take priority over request-level middleware\n const finalMiddlewares = [...globalMiddlewares, ...requestMiddlewares];\n\n const requestInit = {\n redirect: \"follow\",\n // The Fetch standard requires `duplex: \"half\"` (its only value) for a stream body.\n duplex: isStreamBody(serializedBody) ? \"half\" : undefined,\n ...baseOptions,\n ...init,\n body: serializedBody,\n headers: finalHeaders,\n };\n\n let id;\n let options;\n let request = new Request(\n createFinalURL(schemaPath, {\n baseUrl: finalBaseUrl,\n params,\n querySerializer,\n pathSerializer,\n }),\n requestInit,\n );\n let response;\n\n /** Add custom parameters to Request object */\n for (const key in init) {\n if (!(key in request)) {\n request[key] = init[key];\n }\n }\n\n if (finalMiddlewares.length) {\n id = randomID();\n\n // middleware (request)\n options = Object.freeze({\n baseUrl: finalBaseUrl,\n fetch,\n parseAs,\n querySerializer,\n bodySerializer,\n pathSerializer,\n });\n for (const m of finalMiddlewares) {\n if (m && typeof m === \"object\" && typeof m.onRequest === \"function\") {\n const result = await m.onRequest({\n request,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n if (isRequest(result)) {\n request = result;\n } else if (isResponse(result)) {\n response = result;\n break;\n } else {\n throw new Error(\n \"onRequest: must return new Request() or Response() when modifying the request\",\n );\n }\n }\n }\n }\n }\n\n if (!response) {\n // fetch!\n try {\n response = await fetch(request, requestInitExt);\n } catch (error) {\n let errorAfterMiddleware = error;\n // middleware (error)\n // execute in reverse-array order (first priority gets last transform)\n if (finalMiddlewares.length) {\n for (let i = finalMiddlewares.length - 1; i >= 0; i--) {\n const m = finalMiddlewares[i];\n if (m && typeof m === \"object\" && typeof m.onError === \"function\") {\n const result = await m.onError({\n request,\n error: errorAfterMiddleware,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n // if error is handled by returning a response, skip remaining middleware\n if (isResponse(result)) {\n errorAfterMiddleware = undefined;\n response = result;\n break;\n }\n\n if (result instanceof Error) {\n errorAfterMiddleware = result;\n continue;\n }\n\n throw new Error(\"onError: must return new Response() or instance of Error\");\n }\n }\n }\n }\n\n // rethrow error if not handled by middleware\n if (errorAfterMiddleware) {\n throw errorAfterMiddleware;\n }\n }\n // A lookalike from the `fetch` option is rejected as one from middleware is (ADR-025).\n if (!isResponse(response)) {\n throw new Error(\"fetch: must return new Response()\");\n }\n\n // middleware (response)\n // execute in reverse-array order (first priority gets last transform)\n if (finalMiddlewares.length) {\n for (let i = finalMiddlewares.length - 1; i >= 0; i--) {\n const m = finalMiddlewares[i];\n if (m && typeof m === \"object\" && typeof m.onResponse === \"function\") {\n const result = await m.onResponse({\n request,\n response,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n if (!isResponse(result)) {\n throw new Error(\n \"onResponse: must return new Response() when modifying the response\",\n );\n }\n response = result;\n }\n }\n }\n }\n }\n\n const contentLength = response.headers.get(\"Content-Length\");\n // handle empty content\n if (\n response.status === 204 ||\n request.method === \"HEAD\" ||\n (contentLength === \"0\" && !response.headers.get(\"Transfer-Encoding\")?.includes(\"chunked\"))\n ) {\n return response.ok ? { data: undefined, response } : { error: undefined, response };\n }\n\n if (response.ok) {\n return { data: await readSuccessBody(response, parseAs), response };\n }\n return { error: await readErrorBody(response), response };\n }\n\n return {\n request(method, url, init) {\n return coreFetch(url, { ...init, method: method.toUpperCase() });\n },\n /** Call a GET endpoint */\n GET(url, init) {\n return coreFetch(url, { ...init, method: \"GET\" });\n },\n /** Call a PUT endpoint */\n PUT(url, init) {\n return coreFetch(url, { ...init, method: \"PUT\" });\n },\n /** Call a POST endpoint */\n POST(url, init) {\n return coreFetch(url, { ...init, method: \"POST\" });\n },\n /** Call a DELETE endpoint */\n DELETE(url, init) {\n return coreFetch(url, { ...init, method: \"DELETE\" });\n },\n /** Call a OPTIONS endpoint */\n OPTIONS(url, init) {\n return coreFetch(url, { ...init, method: \"OPTIONS\" });\n },\n /** Call a HEAD endpoint */\n HEAD(url, init) {\n return coreFetch(url, { ...init, method: \"HEAD\" });\n },\n /** Call a PATCH endpoint */\n PATCH(url, init) {\n return coreFetch(url, { ...init, method: \"PATCH\" });\n },\n /** Call a TRACE endpoint */\n TRACE(url, init) {\n return coreFetch(url, { ...init, method: \"TRACE\" });\n },\n /** Call a QUERY endpoint (OpenAPI 3.2) */\n QUERY(url, init) {\n return coreFetch(url, { ...init, method: \"QUERY\" });\n },\n /** Register middleware */\n use(...middleware) {\n for (const m of middleware) {\n if (!m) {\n continue;\n }\n if (typeof m !== \"object\" || !(\"onRequest\" in m || \"onResponse\" in m || \"onError\" in m)) {\n throw new Error(\n \"Middleware must be an object with one of `onRequest()`, `onResponse()` or `onError()`\",\n );\n }\n globalMiddlewares.push(m);\n }\n },\n /** Unregister middleware */\n eject(...middleware) {\n for (const m of middleware) {\n const i = globalMiddlewares.indexOf(m);\n if (i !== -1) {\n globalMiddlewares.splice(i, 1);\n }\n }\n },\n };\n}\n\nclass PathCallForwarder {\n constructor(client, url) {\n this.client = client;\n this.url = url;\n }\n\n GET = (init) => {\n return this.client.GET(this.url, init);\n };\n PUT = (init) => {\n return this.client.PUT(this.url, init);\n };\n POST = (init) => {\n return this.client.POST(this.url, init);\n };\n DELETE = (init) => {\n return this.client.DELETE(this.url, init);\n };\n OPTIONS = (init) => {\n return this.client.OPTIONS(this.url, init);\n };\n HEAD = (init) => {\n return this.client.HEAD(this.url, init);\n };\n PATCH = (init) => {\n return this.client.PATCH(this.url, init);\n };\n TRACE = (init) => {\n return this.client.TRACE(this.url, init);\n };\n QUERY = (init) => {\n return this.client.QUERY(this.url, init);\n };\n}\n\nclass PathClientProxyHandler {\n constructor() {\n this.client = null;\n }\n\n // Assume the property is an URL.\n get(coreClient, url) {\n const forwarder = new PathCallForwarder(coreClient, url);\n this.client[url] = forwarder;\n return forwarder;\n }\n}\n\n/**\n * Wrap openapi-typesafe-fetch client to support a path based API.\n * @type {import(\"./index.js\").wrapAsPathBasedClient}\n */\nexport function wrapAsPathBasedClient(coreClient) {\n const handler = new PathClientProxyHandler();\n const proxy = new Proxy(coreClient, handler);\n\n // Put the proxy on the prototype chain of the actual client.\n // This means if we do not have a memoized PathCallForwarder,\n // we fall back to the proxy to synthesize it.\n // However, the proxy itself is not on the hot-path (if we fetch the same\n // endpoint multiple times, only the first call will hit the proxy).\n function Client() {}\n Client.prototype = proxy;\n\n const client = new Client();\n\n // Feed the client back to the proxy handler so it can store the generated\n // PathCallForwarder.\n handler.client = client;\n\n return client;\n}\n\n/**\n * Convenience method to an openapi-typesafe-fetch path based client.\n * Strictly equivalent to `wrapAsPathBasedClient(createClient(...))`.\n * @type {import(\"./index.js\").createPathBasedClient}\n */\nexport function createPathBasedClient(clientOptions) {\n return wrapAsPathBasedClient(createClient(clientOptions));\n}\n\n// utils\n\n/**\n * `fetch` sends a FormData as multipart with a boundary only it knows, so a `Content-Type` set by\n * hand replaced the platform's and the server could not split the parts (upstream #1214). It goes,\n * and the platform sets its own, unless the user built the FormData and named a boundary for a\n * `fetch` of their own (ADR-013, decision 10).\n */\nfunction dropFormContentType(headers, isClientBuilt) {\n if (isClientBuilt || !BOUNDARY_PARAMETER_RE.test(headers.get(\"Content-Type\"))) {\n headers.delete(\"Content-Type\");\n }\n}\n\n// Fetch API objects are recognized by the members the client uses, not by `instanceof`: that is\n// bound to one realm's class, and a Request from the `undici` package, another realm (an iframe,\n// an Electron host) or a custom `Request` option is not an instance of it (upstream #1847). The\n// same rule as for headers in `defaultBodySerializer` (upstream #2637).\n\nfunction isHeaders(value) {\n return typeof value?.get === \"function\";\n}\n\nfunction isRequest(value) {\n return (\n typeof value?.method === \"string\" && typeof value.url === \"string\" && isHeaders(value.headers)\n );\n}\n\nfunction isResponse(value) {\n return (\n typeof value?.ok === \"boolean\" &&\n typeof value.status === \"number\" &&\n typeof value.text === \"function\" &&\n isHeaders(value.headers)\n );\n}\n\n/**\n * Parse a JSON body. A body that is not JSON, such as the HTML page of a proxy, threw a bare\n * `SyntaxError`; this one names the response and says which `parseAs` reads it (ADR-041). It holds\n * no body text, and so no `cause`: the parser's message quotes the body, and a body such as a\n * form-encoded OAuth token answer would carry a secret into logs and error trackers.\n */\nfunction parseJSON(raw, response) {\n try {\n return JSON.parse(raw);\n } catch {\n const contentType = response.headers.get(\"Content-Type\");\n const hint = TEXT_MEDIA_TYPE_RE.test(contentType) ? 'set `parseAs: \"text\"`' : \"set `parseAs`\";\n const subject = `Response ${response.status} (${contentType ?? \"no Content-Type\"})`;\n throw new SyntaxError(`${subject} is not JSON (${raw.length} characters); ${hint}`);\n }\n}\n\n/** The data of a success response, by `parseAs` (default `\"json\"`, as in openapi-fetch). */\nasync function readSuccessBody(response, parseAs) {\n if (parseAs === \"stream\") {\n return response.body;\n }\n if (parseAs !== \"json\") {\n return response[parseAs]();\n }\n // text(), not json(): an empty body (no Content-Length) is no data, and the text names a failure.\n const raw = await response.text();\n return raw ? parseJSON(raw, response) : undefined;\n}\n\n/**\n * The error of an error response: `undefined` for an empty body, else JSON. A body that is not\n * JSON (a proxy's HTML page) stays text, as in openapi-fetch.\n */\nasync function readErrorBody(response) {\n const raw = await response.text();\n if (!raw) {\n return undefined;\n }\n try {\n return JSON.parse(raw);\n } catch {\n // Deliberate fallback, not a lost failure: the caller gets the body as text in `error`.\n return raw;\n }\n}\n\n// Parameter names can be data (the keys of a free-form query). They are encoded like values,\n// except for characters common in the names a schema declares (`filter[status]`, `$filter`) that\n// do not split a URL (ADR-013, decision 9). Object keys are always data, so they are encoded as\n// values are, with no exceptions: a `,` or `]` in a key added members for the server.\nconst KEPT_NAME_ESCAPES = /%(?:5B|5D|24|3A|40|2C)/g;\n\nfunction encodeName(name) {\n return encodeURIComponent(name).replace(KEPT_NAME_ESCAPES, decodeURIComponent);\n}\n\n/**\n * A `Date` value. Checked by its method, not with `instanceof`, so a Date from another realm counts\n * too (as for the Fetch API objects above).\n */\nfunction isDate(value) {\n return typeof value?.toISOString === \"function\";\n}\n\n/**\n * A parameter or form value as it is sent: a `Date` as ISO 8601, because `String(date)` is a\n * local-time text such as \"Thu Jan 01 1970 ...\" (ADR-041); any other value as it is.\n */\nfunction valueText(value) {\n return isDate(value) ? value.toISOString() : value;\n}\n\n/** One parameter value (or object key), percent-encoded unless `allowReserved`. */\nfunction encodeValue(value, allowReserved) {\n const text = valueText(value);\n return allowReserved === true ? text : encodeURIComponent(text);\n}\n\n/**\n * Serialize primitive param values\n * @type {import(\"./index.js\").serializePrimitiveParam}\n */\nexport function serializePrimitiveParam(name, value, options) {\n if (value === undefined || value === null) {\n return \"\";\n }\n if (typeof value === \"object\" && !isDate(value)) {\n throw new Error(\n \"Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.\",\n );\n }\n return `${name}=${encodeValue(value, options?.allowReserved)}`;\n}\n\n/** Join exploded parts: by `,`, `.` or `;` in a path style (label and matrix also first), else `&`. */\nfunction joinExploded(values, style) {\n const joiner = { simple: \",\", label: \".\", matrix: \";\" }[style] || \"&\";\n const final = values.join(joiner);\n return style === \"label\" || style === \"matrix\" ? `${joiner}${final}` : final;\n}\n\n/** A non-exploded object: names and values in one comma-separated list. */\nfunction serializeUnexplodedObject(name, value, options) {\n const values = [];\n for (const k in value) {\n values.push(encodeValue(k), encodeValue(value[k], options.allowReserved));\n }\n const final = values.join(\",\");\n switch (options.style) {\n case \"form\": {\n return `${name}=${final}`;\n }\n case \"label\": {\n return `.${final}`;\n }\n case \"matrix\": {\n return `;${name}=${final}`;\n }\n default: {\n return final;\n }\n }\n}\n\n/**\n * Serialize object param (shallow only). An object without members, or with only `null` and\n * `undefined` ones when exploded, gives `\"\"`: its empty parts added stray separators (ADR-041).\n * @type {import(\"./index.js\").serializeObjectParam}\n */\nexport function serializeObjectParam(name, value, options) {\n if (!value || typeof value !== \"object\" || !Object.keys(value).length) {\n return \"\";\n }\n if (options.style !== \"deepObject\" && options.explode === false) {\n return serializeUnexplodedObject(name, value, options);\n }\n const values = [];\n for (const k in value) {\n const key = encodeValue(k);\n const finalName = options.style === \"deepObject\" ? `${name}[${key}]` : key;\n if (value[k] != null) {\n values.push(serializePrimitiveParam(finalName, value[k], options));\n }\n }\n return values.length ? joinExploded(values, options.style) : \"\";\n}\n\n/** A non-exploded array; the item separator depends on the style. */\nfunction serializeUnexplodedArray(name, value, options) {\n const joiner = { form: \",\", spaceDelimited: \"%20\", pipeDelimited: \"|\" }[options.style] || \",\";\n const final = value.map((v) => encodeValue(v, options.allowReserved)).join(joiner);\n switch (options.style) {\n case \"simple\": {\n return final;\n }\n case \"label\": {\n return `.${final}`;\n }\n case \"matrix\": {\n return `;${name}=${final}`;\n }\n default: {\n // form, spaceDelimited, pipeDelimited\n return `${name}=${final}`;\n }\n }\n}\n\n/**\n * Serialize array param (shallow only). An empty array gives `\"\"`, and so does an exploded\n * `form` array of only `null` and `undefined` items (ADR-041).\n * @type {import(\"./index.js\").serializeArrayParam}\n */\nexport function serializeArrayParam(name, value, options) {\n if (!Array.isArray(value) || !value.length) {\n return \"\";\n }\n if (options.explode === false) {\n return serializeUnexplodedArray(name, value, options);\n }\n const values = [];\n for (const v of value) {\n if (options.style === \"simple\" || options.style === \"label\") {\n values.push(encodeValue(v, options.allowReserved));\n } else if (v != null) {\n values.push(serializePrimitiveParam(name, v, options));\n }\n }\n return values.length ? joinExploded(values, options.style) : \"\";\n}\n\n/** One query parameter with the default styles: `form` arrays, `deepObject` objects. */\nfunction serializeQueryParam(name, value, options) {\n const allowReserved = options?.allowReserved || false;\n if (Array.isArray(value)) {\n return serializeArrayParam(name, value, {\n style: \"form\",\n explode: true,\n ...options?.array,\n allowReserved,\n });\n }\n if (value && typeof value === \"object\" && !isDate(value)) {\n return serializeObjectParam(name, value, {\n style: \"deepObject\",\n explode: true,\n ...options?.object,\n allowReserved,\n });\n }\n return serializePrimitiveParam(name, value, options);\n}\n\n/**\n * Serialize query params to string. A parameter that serializes to nothing (`null`, an empty\n * array or object) is left out with its `&`; an empty part made `a=1&&b=2` (ADR-041).\n * @type {import(\"./index.js\").createQuerySerializer}\n */\nexport function createQuerySerializer(options) {\n return function querySerializer(queryParams) {\n const search = [];\n if (queryParams && typeof queryParams === \"object\") {\n for (const key in queryParams) {\n const part = serializeQueryParam(encodeName(key), queryParams[key], options);\n if (part) {\n search.push(part);\n }\n }\n }\n return search.join(\"&\");\n };\n}\n\n/**\n * Handle different OpenAPI 3.x serialization styles\n * @type {import(\"./index.js\").defaultPathSerializer}\n * @see https://swagger.io/docs/specification/serialization/#path\n */\nexport function defaultPathSerializer(pathname, pathParams) {\n const matches = pathname.match(PATH_PARAM_RE);\n if (!matches) {\n return pathname;\n }\n let nextURL = pathname;\n for (const match of matches) {\n let name = match.substring(1, match.length - 1);\n let explode = false;\n let style = \"simple\";\n if (name.endsWith(\"*\")) {\n explode = true;\n name = name.substring(0, name.length - 1);\n }\n if (name.startsWith(\".\")) {\n style = \"label\";\n name = name.substring(1);\n } else if (name.startsWith(\";\")) {\n style = \"matrix\";\n name = name.substring(1);\n }\n if (!pathParams || pathParams[name] === undefined || pathParams[name] === null) {\n continue;\n }\n const value = pathParams[name];\n let serialized;\n if (Array.isArray(value)) {\n serialized = serializeArrayParam(name, value, { style, explode });\n } else if (typeof value === \"object\" && !isDate(value)) {\n serialized = serializeObjectParam(name, value, { style, explode });\n } else if (style === \"matrix\") {\n serialized = `;${serializePrimitiveParam(name, value)}`;\n } else {\n serialized = style === \"label\" ? `.${encodeValue(value)}` : encodeValue(value);\n }\n // A function: a string replacement reads `$'`, `$&` and the like, which object keys keep.\n nextURL = nextURL.replace(match, () => serialized);\n }\n checkSerializedPath(pathname, nextURL);\n return nextURL;\n}\n\n/**\n * Throw when the path parameters moved the request. Only the path part (before `?` or `#`) from the\n * segment of the first parameter on is checked: the text before it is the `baseUrl` and the\n * template, which no value changes, and a protocol-relative base (`//api.example/v1`) is valid.\n * Values are percent-encoded, so they add no `/` and segment `i` of the URL comes from segment `i`\n * of the template. The message names that template segment, never the URL: the `baseUrl` and the\n * values may carry secrets (a token in the path, credentials in the base), and errors reach logs\n * (ADR-041).\n */\nfunction checkSerializedPath(template, url) {\n const fixed = template.slice(0, template.search(PATH_PARAM_RE));\n const path = url.split(QUERY_OR_FRAGMENT_RE, 1)[0];\n const first = fixed.split(\"/\").length - 1;\n // `encodeURIComponent` keeps dots, so a value `..` would move the request up a path level\n // (ADR-013).\n let index = path\n .split(\"/\")\n .findIndex((segment, at) => at >= first && DOT_SEGMENT_RE.test(segment));\n let problem = \"Dot\";\n // `//host/…` is a protocol-relative URL: with a relative baseUrl a browser sends it to that host\n // (ADR-030).\n if (index === -1 && path.startsWith(\"//\") && !fixed.startsWith(\"//\")) {\n [index, problem] = [1, \"Empty first\"];\n }\n if (index !== -1) {\n const name = template.split(QUERY_OR_FRAGMENT_RE, 1)[0].split(\"/\")[index];\n throw new Error(`${problem} path segment in \"${name}\"`);\n }\n}\n\n/**\n * Whether a value is an instance of the platform class `name`. A runtime may lack the class (React\n * Native has no `ReadableStream`); then no value is one, and the check does not throw.\n */\nfunction isPlatformInstance(value, name) {\n const type = globalThis[name];\n return typeof type === \"function\" && value instanceof type;\n}\n\n/**\n * A stream body: a `ReadableStream`, or an async iterable such as a Node.js `Readable`, which\n * `fetch` in Node.js, Deno and Bun also streams. Both need `duplex: \"half\"` (ADR-013, decision 6).\n */\nfunction isStreamBody(body) {\n return (\n isPlatformInstance(body, \"ReadableStream\") || typeof body?.[Symbol.asyncIterator] === \"function\"\n );\n}\n\n/**\n * Bodies `fetch` sends as they are, with their own `Content-Type` (FormData, Blob, URLSearchParams)\n * or none. JSON-encoding a Blob, an ArrayBuffer or a stream sent `{}` (ADR-013, decision 6).\n */\nfunction isRawBody(body) {\n return (\n [\"FormData\", \"Blob\", \"URLSearchParams\", \"ArrayBuffer\"].some((name) =>\n isPlatformInstance(body, name),\n ) ||\n ArrayBuffer.isView(body) ||\n isStreamBody(body)\n );\n}\n\n/**\n * Whether a form item is nested: an object or an array, which form encodings cannot hold. A `Date`\n * is not. A field holds one level of array, so its items are checked, not the field.\n */\nfunction isNestedFormValue(value) {\n return value && typeof value === \"object\" && !isDate(value);\n}\n\n/**\n * The items of a form field: the items of an array, with a hole as `undefined` (`flat()` dropped\n * holes, while `null` and `undefined` items stayed), or the value alone.\n */\nfunction formItems(value) {\n return Array.isArray(value) ? Array.from(value) : [value];\n}\n\n/**\n * A form body. A nested object or array, also as an array item, has no standard form encoding\n * (servers read `a[b]`, `a.b` or JSON), and `URLSearchParams` wrote it as `[object Object]` or\n * flattened it (ADR-013, decision 7). `null` and `undefined` fields are left out, as in a multipart\n * body; `URLSearchParams` sent them as the text \"null\" and \"undefined\" (ADR-030). A string or a\n * list of pairs is form data already.\n */\nfunction formBody(body) {\n if (!body || typeof body !== \"object\" || Array.isArray(body)) {\n return new URLSearchParams(body).toString();\n }\n const form = new URLSearchParams();\n for (const [name, value] of Object.entries(body)) {\n const items = formItems(value);\n if (items.some(isNestedFormValue)) {\n throw new Error(NESTED_FORM_VALUE_MESSAGE);\n }\n if (value != null) {\n // An array is one comma-separated value, as `URLSearchParams` writes it.\n form.append(name, items.map(valueText).join(\",\"));\n }\n }\n return form.toString();\n}\n\n/**\n * A `multipart/form-data` body: one part per field, one per item of an array. A `Blob` (or `File`)\n * is a file part, other primitives are text, `null` and `undefined` are left out. A nested object\n * or array would need a part content type such as JSON, which the client does not guess (ADR-013,\n * decision 10). The FormData is marked as the client's, so its `Content-Type` is the platform's.\n * A symbol key is not a form field, and `Object.keys` and JSON leave it out.\n */\nfunction multipartBody(body) {\n const formData = new FormData();\n formData[CLIENT_BUILT_FORM] = true;\n for (const [name, value] of Object.entries(body)) {\n for (const item of formItems(value)) {\n if (isPlatformInstance(item, \"Blob\")) {\n formData.append(name, item);\n } else if (isNestedFormValue(item)) {\n throw new Error(NESTED_FORM_VALUE_MESSAGE);\n } else if (item != null) {\n formData.append(name, String(valueText(item)));\n }\n }\n }\n return formData;\n}\n\n/**\n * Serialize body object to string\n * @type {import(\"./index.js\").defaultBodySerializer}\n */\nexport function defaultBodySerializer(body, headers) {\n if (isRawBody(body)) {\n return body;\n }\n // Headers with a `get` are read directly: headers from another realm (iframe, `node:vm`) may have\n // nothing else (upstream #2637). A record or a list of pairs is read through `Headers`, which\n // matches the name in any letter case.\n const contentType =\n headers && (isHeaders(headers) ? headers : mergeHeaders(headers)).get(\"Content-Type\");\n if (FORM_MEDIA_TYPE_RE.test(contentType)) {\n return formBody(body);\n }\n if (body && typeof body === \"object\" && MULTIPART_MEDIA_TYPE_RE.test(contentType)) {\n return multipartBody(body);\n }\n // A string for a non-JSON media type (`text/plain`, ...) is the body itself; JSON-encoding it\n // added quotes (upstream #2555, #2382). For JSON, a string is a JSON string value (ADR-013).\n if (typeof body === \"string\" && contentType && !JSON_MEDIA_TYPE_RE.test(contentType)) {\n return body;\n }\n return JSON.stringify(body);\n}\n\n/**\n * Construct URL string from baseUrl and handle path and query params\n * @type {import(\"./index.js\").createFinalURL}\n */\nexport function createFinalURL(pathname, options) {\n let finalURL = `${options.baseUrl}${pathname}`;\n if (options.params?.path) {\n finalURL = options.pathSerializer(finalURL, options.params.path);\n }\n let search = options.querySerializer(options.params.query ?? {});\n if (search.startsWith(\"?\")) {\n search = search.substring(1);\n }\n if (search) {\n // A path may already have a query string.\n finalURL += `${finalURL.includes(\"?\") ? \"&\" : \"?\"}${search}`;\n }\n return finalURL;\n}\n\n/**\n * Merge headers a and b, with b taking priority\n * @type {import(\"./index.js\").mergeHeaders}\n */\nexport function mergeHeaders(...allHeaders) {\n const finalHeaders = new Headers();\n for (const h of allHeaders) {\n if (!h || typeof h !== \"object\") {\n continue;\n }\n // A list of pairs (`[[\"x-t\", \"1\"]]`) is a `HeadersInit` too; `Headers` joins a repeated name.\n const iterator = isHeaders(h)\n ? h.entries()\n : Symbol.iterator in h\n ? new Headers(h).entries()\n : Object.entries(h);\n for (const [k, v] of iterator) {\n if (v === null) {\n finalHeaders.delete(k);\n } else if (Array.isArray(v)) {\n for (const v2 of v) {\n finalHeaders.append(k, v2);\n }\n } else if (v !== undefined) {\n finalHeaders.set(k, v);\n }\n }\n }\n return finalHeaders;\n}\n\n/**\n * Remove trailing slash from url\n * @type {import(\"./index.js\").removeTrailingSlash}\n */\nexport function removeTrailingSlash(url) {\n if (url.endsWith(\"/\")) {\n return url.substring(0, url.length - 1);\n }\n return url;\n}\n"],"names":[],"mappings":"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"}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
/// <reference lib="es2018.asynciterable" />
|
|
2
|
+
import { OperationRequestBodyContent, MediaType, HttpMethod, PathsWithMethod, RequiredKeysOf, Writable, IsOperationRequestBodyOptional, FilterKeys, Readable, SuccessResponse, ResponseObjectMap, ErrorResponse } from './helpers.cjs';
|
|
3
|
+
|
|
4
|
+
// A stream body may be an async iterable (`RawRequestBody`). The reference brings that type into a
|
|
5
|
+
// project whose `lib` is older than ES2018, which fails with TS2583 otherwise. The declaration
|
|
6
|
+
// build copies it into the published declarations (build.config.ts).
|
|
7
|
+
/// <reference lib="es2018.asynciterable" />
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
// The client declares the helper types in `./helpers.js`, published as
|
|
11
|
+
// `openapi-typesafe-fetch/helpers`, and `openapi-typesafe-helpers` re-exports them: one
|
|
12
|
+
// declaration, so generic code may mix the names of both packages. Types inferred from the
|
|
13
|
+
// client print them by that path, which a library that uses the client can import, also under
|
|
14
|
+
// pnpm and Yarn PnP (ADR-034). They are not exported here, as in openapi-fetch: a project that
|
|
15
|
+
// writes `export type * from` the client next to its own `ErrorResponse` fails with TS2308. This
|
|
16
|
+
// file has no `export { … }` either, so its other top-level types stay importable from
|
|
17
|
+
// `openapi-typesafe-fetch/src/index.js`, as openapi-fetch's are (`InitParam`).
|
|
2
18
|
|
|
3
19
|
/** Options for each client instance */
|
|
4
20
|
interface ClientOptions extends Omit<RequestInit, "headers"> {
|
|
@@ -134,7 +150,17 @@ type RequestBodyOption<T> =
|
|
|
134
150
|
? { body?: Writable<OperationRequestBodyContent<T>> }
|
|
135
151
|
: { body: Writable<OperationRequestBodyContent<T>> };
|
|
136
152
|
|
|
137
|
-
|
|
153
|
+
/**
|
|
154
|
+
* The init of a call to the operation `T`; for a union of operations, the union of their inits. It
|
|
155
|
+
* distributes so that the client's init type and a wrapper's `FetchOptions` of a generic path are
|
|
156
|
+
* the same type, which TypeScript can relate: an alias that distributed only inside the client
|
|
157
|
+
* gave a conditional type no `FetchOptions` argument was assignable to (TS2345). The operations
|
|
158
|
+
* of a union are not merged into one deep init type, which gave TS2589 on hundreds of paths
|
|
159
|
+
* (upstream #1882).
|
|
160
|
+
*/
|
|
161
|
+
type FetchOptions<T> = T extends unknown
|
|
162
|
+
? RequestOptions<T> & Omit<RequestInit, "body" | "headers">
|
|
163
|
+
: never;
|
|
138
164
|
|
|
139
165
|
// Readable<T> strips $Write markers (writeOnly properties excluded from response)
|
|
140
166
|
type FetchResponse<
|
|
@@ -241,19 +267,16 @@ type MaybeOptionalInit<Params, Location extends PropertyKey> = OperationInits<
|
|
|
241
267
|
* One conditional type, as openapi-fetch's, not a union with a conditional `undefined`: while the
|
|
242
268
|
* operation is generic, a union made `FetchResponse` distribute over its members, so the `data` of
|
|
243
269
|
* a generic wrapper's call no longer related to `FetchResponse<Paths[Path][Method], Init, Media>`.
|
|
270
|
+
* Its check type is not a type parameter, so TypeScript takes a `FetchOptions` of a generic path
|
|
271
|
+
* for it when that type fits both branches. `FetchOptions` itself makes one init per operation:
|
|
272
|
+
* while the path is generic it stays an alias, not an `infer` type, which TypeScript reads as
|
|
273
|
+
* `unknown`, so the init stays the contextual type of an argument and a literal such as
|
|
274
|
+
* `"available"` keeps its type (swr-openapi's `Exact<Init>` checks).
|
|
244
275
|
*/
|
|
245
276
|
type OperationInits<Operation> =
|
|
246
|
-
RequiredKeysOf<
|
|
247
|
-
?
|
|
248
|
-
:
|
|
249
|
-
|
|
250
|
-
/**
|
|
251
|
-
* Each operation's init. A distributive alias, not `extends infer Operation`: while the path is
|
|
252
|
-
* not known, TypeScript reads an `infer` type as `unknown`, so the init lost its type as the
|
|
253
|
-
* contextual type of an argument and a literal such as `"available"` widened to `string`
|
|
254
|
-
* (swr-openapi's `Exact<Init>` checks).
|
|
255
|
-
*/
|
|
256
|
-
type OperationFetchOptions<Operation> = Operation extends unknown ? FetchOptions<Operation> : never;
|
|
277
|
+
RequiredKeysOf<FetchOptions<Operation>> extends never
|
|
278
|
+
? FetchOptions<Operation> | undefined
|
|
279
|
+
: FetchOptions<Operation>;
|
|
257
280
|
|
|
258
281
|
// The final init param to accept.
|
|
259
282
|
// - Determines if the param is optional or not.
|
|
@@ -281,11 +304,19 @@ type WithAnyKeys<Init> = Init & { [key: string]: unknown };
|
|
|
281
304
|
* adds none.
|
|
282
305
|
*/
|
|
283
306
|
type PathOperation<Paths, Path, Method> = Extract<
|
|
284
|
-
FilterKeys<Paths
|
|
307
|
+
FilterKeys<PathItem<Paths, Path>, Method>,
|
|
285
308
|
// biome-ignore lint/suspicious/noExplicitAny: unknown rejects the generated interfaces
|
|
286
309
|
Record<string | number, any>
|
|
287
310
|
>;
|
|
288
311
|
|
|
312
|
+
/**
|
|
313
|
+
* The path item of each path of `Path`. Not `Paths[Path & keyof Paths]`: with template keys
|
|
314
|
+
* (`--path-params-as-types`), `/apps/${string}` intersected with the keys is every key it
|
|
315
|
+
* overlaps, such as `/apps/${string}/logs/${number}`, so a call to one path got the responses of
|
|
316
|
+
* the others too once the responses distribute over the operations.
|
|
317
|
+
*/
|
|
318
|
+
type PathItem<Paths, Path> = Path extends keyof Paths ? Paths[Path] : never;
|
|
319
|
+
|
|
289
320
|
type ClientMethod<Paths extends {}, Method extends HttpMethod, Media extends MediaType> = <
|
|
290
321
|
Path extends PathsWithMethod<Paths, Method>,
|
|
291
322
|
Init extends MaybeOptionalInit<Paths[Path], Method>,
|
|
@@ -444,8 +475,18 @@ declare function defaultPathSerializer(
|
|
|
444
475
|
pathParams: Record<string, unknown>,
|
|
445
476
|
): string;
|
|
446
477
|
|
|
447
|
-
/**
|
|
448
|
-
|
|
478
|
+
/**
|
|
479
|
+
* Bodies that `fetch` sends as they are, so `defaultBodySerializer` returns them unchanged. A
|
|
480
|
+
* stream is a `ReadableStream` or an async iterable, such as a Node.js `Readable`.
|
|
481
|
+
*/
|
|
482
|
+
type RawRequestBody =
|
|
483
|
+
| FormData
|
|
484
|
+
| Blob
|
|
485
|
+
| URLSearchParams
|
|
486
|
+
| ArrayBuffer
|
|
487
|
+
| ArrayBufferView
|
|
488
|
+
| ReadableStream
|
|
489
|
+
| AsyncIterable<unknown>;
|
|
449
490
|
|
|
450
491
|
/**
|
|
451
492
|
* The result of `defaultBodySerializer` for a body of type `Body`: the body itself when it is raw,
|
|
@@ -539,5 +580,11 @@ declare function mergeHeaders(...allHeaders: (HeadersOptions | undefined)[]): He
|
|
|
539
580
|
/** Remove trailing slash from url */
|
|
540
581
|
declare function removeTrailingSlash(url: string): string;
|
|
541
582
|
|
|
542
|
-
|
|
583
|
+
/**
|
|
584
|
+
* Return a new ID, unique within the process: the request `id` that middleware callbacks get.
|
|
585
|
+
* It comes from a counter shared by all clients, not from `Math.random()`; the name is upstream's.
|
|
586
|
+
*/
|
|
587
|
+
declare function randomID(): string;
|
|
588
|
+
|
|
589
|
+
export { createFinalURL, createPathBasedClient, createQuerySerializer, createClient as default, defaultBodySerializer, defaultPathSerializer, mergeHeaders, randomID, removeTrailingSlash, serializeArrayParam, serializeObjectParam, serializePrimitiveParam, wrapAsPathBasedClient };
|
|
543
590
|
export type { BodySerializer, Client, ClientForPath, ClientMethod, ClientOptions, ClientPathsWithMethod, ClientRequestMethod, CustomFetchClientOptions, DefaultParamsOption, FetchOptions, FetchResponse, HeadersOptions, MaybeOptionalInit, MergedOptions, MethodResponse, Middleware, MiddlewareCallbackParams, MiddlewareRequestParams, ParamsOption, ParseAs, ParseAsResponse, PathBasedClient, PathOperation, PathSerializer, QuerySerializer, QuerySerializerOptions, RequestBodyOption, RequestOptions };
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
/// <reference lib="es2018.asynciterable" />
|
|
2
|
+
import { OperationRequestBodyContent, MediaType, HttpMethod, PathsWithMethod, RequiredKeysOf, Writable, IsOperationRequestBodyOptional, FilterKeys, Readable, SuccessResponse, ResponseObjectMap, ErrorResponse } from './helpers.mjs';
|
|
3
|
+
|
|
4
|
+
// A stream body may be an async iterable (`RawRequestBody`). The reference brings that type into a
|
|
5
|
+
// project whose `lib` is older than ES2018, which fails with TS2583 otherwise. The declaration
|
|
6
|
+
// build copies it into the published declarations (build.config.ts).
|
|
7
|
+
/// <reference lib="es2018.asynciterable" />
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
// The client declares the helper types in `./helpers.js`, published as
|
|
11
|
+
// `openapi-typesafe-fetch/helpers`, and `openapi-typesafe-helpers` re-exports them: one
|
|
12
|
+
// declaration, so generic code may mix the names of both packages. Types inferred from the
|
|
13
|
+
// client print them by that path, which a library that uses the client can import, also under
|
|
14
|
+
// pnpm and Yarn PnP (ADR-034). They are not exported here, as in openapi-fetch: a project that
|
|
15
|
+
// writes `export type * from` the client next to its own `ErrorResponse` fails with TS2308. This
|
|
16
|
+
// file has no `export { … }` either, so its other top-level types stay importable from
|
|
17
|
+
// `openapi-typesafe-fetch/src/index.js`, as openapi-fetch's are (`InitParam`).
|
|
2
18
|
|
|
3
19
|
/** Options for each client instance */
|
|
4
20
|
interface ClientOptions extends Omit<RequestInit, "headers"> {
|
|
@@ -134,7 +150,17 @@ type RequestBodyOption<T> =
|
|
|
134
150
|
? { body?: Writable<OperationRequestBodyContent<T>> }
|
|
135
151
|
: { body: Writable<OperationRequestBodyContent<T>> };
|
|
136
152
|
|
|
137
|
-
|
|
153
|
+
/**
|
|
154
|
+
* The init of a call to the operation `T`; for a union of operations, the union of their inits. It
|
|
155
|
+
* distributes so that the client's init type and a wrapper's `FetchOptions` of a generic path are
|
|
156
|
+
* the same type, which TypeScript can relate: an alias that distributed only inside the client
|
|
157
|
+
* gave a conditional type no `FetchOptions` argument was assignable to (TS2345). The operations
|
|
158
|
+
* of a union are not merged into one deep init type, which gave TS2589 on hundreds of paths
|
|
159
|
+
* (upstream #1882).
|
|
160
|
+
*/
|
|
161
|
+
type FetchOptions<T> = T extends unknown
|
|
162
|
+
? RequestOptions<T> & Omit<RequestInit, "body" | "headers">
|
|
163
|
+
: never;
|
|
138
164
|
|
|
139
165
|
// Readable<T> strips $Write markers (writeOnly properties excluded from response)
|
|
140
166
|
type FetchResponse<
|
|
@@ -241,19 +267,16 @@ type MaybeOptionalInit<Params, Location extends PropertyKey> = OperationInits<
|
|
|
241
267
|
* One conditional type, as openapi-fetch's, not a union with a conditional `undefined`: while the
|
|
242
268
|
* operation is generic, a union made `FetchResponse` distribute over its members, so the `data` of
|
|
243
269
|
* a generic wrapper's call no longer related to `FetchResponse<Paths[Path][Method], Init, Media>`.
|
|
270
|
+
* Its check type is not a type parameter, so TypeScript takes a `FetchOptions` of a generic path
|
|
271
|
+
* for it when that type fits both branches. `FetchOptions` itself makes one init per operation:
|
|
272
|
+
* while the path is generic it stays an alias, not an `infer` type, which TypeScript reads as
|
|
273
|
+
* `unknown`, so the init stays the contextual type of an argument and a literal such as
|
|
274
|
+
* `"available"` keeps its type (swr-openapi's `Exact<Init>` checks).
|
|
244
275
|
*/
|
|
245
276
|
type OperationInits<Operation> =
|
|
246
|
-
RequiredKeysOf<
|
|
247
|
-
?
|
|
248
|
-
:
|
|
249
|
-
|
|
250
|
-
/**
|
|
251
|
-
* Each operation's init. A distributive alias, not `extends infer Operation`: while the path is
|
|
252
|
-
* not known, TypeScript reads an `infer` type as `unknown`, so the init lost its type as the
|
|
253
|
-
* contextual type of an argument and a literal such as `"available"` widened to `string`
|
|
254
|
-
* (swr-openapi's `Exact<Init>` checks).
|
|
255
|
-
*/
|
|
256
|
-
type OperationFetchOptions<Operation> = Operation extends unknown ? FetchOptions<Operation> : never;
|
|
277
|
+
RequiredKeysOf<FetchOptions<Operation>> extends never
|
|
278
|
+
? FetchOptions<Operation> | undefined
|
|
279
|
+
: FetchOptions<Operation>;
|
|
257
280
|
|
|
258
281
|
// The final init param to accept.
|
|
259
282
|
// - Determines if the param is optional or not.
|
|
@@ -281,11 +304,19 @@ type WithAnyKeys<Init> = Init & { [key: string]: unknown };
|
|
|
281
304
|
* adds none.
|
|
282
305
|
*/
|
|
283
306
|
type PathOperation<Paths, Path, Method> = Extract<
|
|
284
|
-
FilterKeys<Paths
|
|
307
|
+
FilterKeys<PathItem<Paths, Path>, Method>,
|
|
285
308
|
// biome-ignore lint/suspicious/noExplicitAny: unknown rejects the generated interfaces
|
|
286
309
|
Record<string | number, any>
|
|
287
310
|
>;
|
|
288
311
|
|
|
312
|
+
/**
|
|
313
|
+
* The path item of each path of `Path`. Not `Paths[Path & keyof Paths]`: with template keys
|
|
314
|
+
* (`--path-params-as-types`), `/apps/${string}` intersected with the keys is every key it
|
|
315
|
+
* overlaps, such as `/apps/${string}/logs/${number}`, so a call to one path got the responses of
|
|
316
|
+
* the others too once the responses distribute over the operations.
|
|
317
|
+
*/
|
|
318
|
+
type PathItem<Paths, Path> = Path extends keyof Paths ? Paths[Path] : never;
|
|
319
|
+
|
|
289
320
|
type ClientMethod<Paths extends {}, Method extends HttpMethod, Media extends MediaType> = <
|
|
290
321
|
Path extends PathsWithMethod<Paths, Method>,
|
|
291
322
|
Init extends MaybeOptionalInit<Paths[Path], Method>,
|
|
@@ -444,8 +475,18 @@ declare function defaultPathSerializer(
|
|
|
444
475
|
pathParams: Record<string, unknown>,
|
|
445
476
|
): string;
|
|
446
477
|
|
|
447
|
-
/**
|
|
448
|
-
|
|
478
|
+
/**
|
|
479
|
+
* Bodies that `fetch` sends as they are, so `defaultBodySerializer` returns them unchanged. A
|
|
480
|
+
* stream is a `ReadableStream` or an async iterable, such as a Node.js `Readable`.
|
|
481
|
+
*/
|
|
482
|
+
type RawRequestBody =
|
|
483
|
+
| FormData
|
|
484
|
+
| Blob
|
|
485
|
+
| URLSearchParams
|
|
486
|
+
| ArrayBuffer
|
|
487
|
+
| ArrayBufferView
|
|
488
|
+
| ReadableStream
|
|
489
|
+
| AsyncIterable<unknown>;
|
|
449
490
|
|
|
450
491
|
/**
|
|
451
492
|
* The result of `defaultBodySerializer` for a body of type `Body`: the body itself when it is raw,
|
|
@@ -539,5 +580,11 @@ declare function mergeHeaders(...allHeaders: (HeadersOptions | undefined)[]): He
|
|
|
539
580
|
/** Remove trailing slash from url */
|
|
540
581
|
declare function removeTrailingSlash(url: string): string;
|
|
541
582
|
|
|
542
|
-
|
|
583
|
+
/**
|
|
584
|
+
* Return a new ID, unique within the process: the request `id` that middleware callbacks get.
|
|
585
|
+
* It comes from a counter shared by all clients, not from `Math.random()`; the name is upstream's.
|
|
586
|
+
*/
|
|
587
|
+
declare function randomID(): string;
|
|
588
|
+
|
|
589
|
+
export { createFinalURL, createPathBasedClient, createQuerySerializer, createClient as default, defaultBodySerializer, defaultPathSerializer, mergeHeaders, randomID, removeTrailingSlash, serializeArrayParam, serializeObjectParam, serializePrimitiveParam, wrapAsPathBasedClient };
|
|
543
590
|
export type { BodySerializer, Client, ClientForPath, ClientMethod, ClientOptions, ClientPathsWithMethod, ClientRequestMethod, CustomFetchClientOptions, DefaultParamsOption, FetchOptions, FetchResponse, HeadersOptions, MaybeOptionalInit, MergedOptions, MethodResponse, Middleware, MiddlewareCallbackParams, MiddlewareRequestParams, ParamsOption, ParseAs, ParseAsResponse, PathBasedClient, PathOperation, PathSerializer, QuerySerializer, QuerySerializerOptions, RequestBodyOption, RequestOptions };
|