openapi-typesafe-fetch 1.0.0-rc.6 → 1.0.0-rc.7
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 +17 -0
- package/dist/helpers.d.cts +7 -1
- package/dist/helpers.d.mts +7 -1
- package/dist/helpers.d.ts +7 -1
- package/dist/index.cjs +34 -20
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +34 -20
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/src/helpers.ts +7 -3
- package/src/index.js +52 -22
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
This package is a fork of `openapi-fetch`. The entries above `0.17.0` are releases of openapi-typesafe-fetch; `0.17.0` and the entries below it are the upstream history up to the fork point (upstream commit `d46a319a`), with `openapi-fetch` versions.
|
|
4
4
|
|
|
5
|
+
## 1.0.0-rc.7
|
|
6
|
+
|
|
7
|
+
### Patch Changes
|
|
8
|
+
|
|
9
|
+
- [#96](https://github.com/openapi-typesafe/openapi-typesafe/pull/96) [`171fa71`](https://github.com/openapi-typesafe/openapi-typesafe/commit/171fa71311107e4e26a9ae7a62b431662fb13de5) Thanks [@fedorello](https://github.com/fedorello)! - `SuccessResponseJSON`, `ErrorResponseJSON` and the `data` and `error` of a client made with
|
|
10
|
+
``createClient<paths, `${string}/json`>()`` leave out a response that has no JSON media type. It
|
|
11
|
+
added its whole `content` map, so a `text/html` 500 typed the error as `{ "text/html": string }`,
|
|
12
|
+
a value the client never returns.
|
|
13
|
+
|
|
14
|
+
- [#96](https://github.com/openapi-typesafe/openapi-typesafe/pull/96) [`171fa71`](https://github.com/openapi-typesafe/openapi-typesafe/commit/171fa71311107e4e26a9ae7a62b431662fb13de5) Thanks [@fedorello](https://github.com/fedorello)! - A nested array or object in a path parameter (`{ id: [[1]] }`) now fails with an error that names
|
|
15
|
+
`pathSerializer()`, the option that sends such values. It told you to write a `querySerializer()`,
|
|
16
|
+
which does not apply to the path.
|
|
17
|
+
|
|
18
|
+
- [#96](https://github.com/openapi-typesafe/openapi-typesafe/pull/96) [`171fa71`](https://github.com/openapi-typesafe/openapi-typesafe/commit/171fa71311107e4e26a9ae7a62b431662fb13de5) Thanks [@fedorello](https://github.com/fedorello)! - A request's `querySerializer` option set to `undefined` (`{ array: { explode: undefined } }`, as a
|
|
19
|
+
wrapper passes its own optional option on) now takes the client's value, as an option left out
|
|
20
|
+
does. It replaced the client's value, so the default style was sent.
|
|
21
|
+
|
|
5
22
|
## 1.0.0-rc.6
|
|
6
23
|
|
|
7
24
|
### Patch Changes
|
package/dist/helpers.d.cts
CHANGED
|
@@ -206,8 +206,14 @@ type SuccessStatus<T> = [SuccessStatusKey<T>] extends [never] ? Extract<keyof T,
|
|
|
206
206
|
* share its statuses, and a `default`-only path typed the data `undefined` (upstream).
|
|
207
207
|
*/
|
|
208
208
|
type SuccessResponse<T extends Record<string | number, any>, Media extends MediaType = MediaType> = T extends unknown ? GetResponseContent<T, Media, SuccessStatus<T>> : never;
|
|
209
|
+
/**
|
|
210
|
+
* The bodies of the responses `ResponseCode` in the media types `Media`. A response with a
|
|
211
|
+
* `content` map but no media type in `Media` adds nothing: it gave its whole map, so the error of
|
|
212
|
+
* `ErrorResponseJSON` for a `text/html` 500 was `{ "text/html": string }`, a body no response has.
|
|
213
|
+
* A response without `content` keeps its `content` type (`undefined` for `content?: never`).
|
|
214
|
+
*/
|
|
209
215
|
type GetResponseContent<T extends Record<string | number, any>, Media extends MediaType = MediaType, ResponseCode extends keyof T = keyof T> = ResponseCode extends keyof T ? {
|
|
210
|
-
[K in ResponseCode]: T[K]["content"] extends Record<string, any> ? FilterKeys<T[K]["content"], Media>
|
|
216
|
+
[K in ResponseCode]: T[K]["content"] extends Record<string, any> ? FilterKeys<T[K]["content"], Media> : K extends keyof T ? T[K]["content"] : never;
|
|
211
217
|
}[ResponseCode] : never;
|
|
212
218
|
/**
|
|
213
219
|
* Return all 1XX, 3XX, 4XX, 5XX and `default` responses from a Response Object Map; for a union
|
package/dist/helpers.d.mts
CHANGED
|
@@ -206,8 +206,14 @@ type SuccessStatus<T> = [SuccessStatusKey<T>] extends [never] ? Extract<keyof T,
|
|
|
206
206
|
* share its statuses, and a `default`-only path typed the data `undefined` (upstream).
|
|
207
207
|
*/
|
|
208
208
|
type SuccessResponse<T extends Record<string | number, any>, Media extends MediaType = MediaType> = T extends unknown ? GetResponseContent<T, Media, SuccessStatus<T>> : never;
|
|
209
|
+
/**
|
|
210
|
+
* The bodies of the responses `ResponseCode` in the media types `Media`. A response with a
|
|
211
|
+
* `content` map but no media type in `Media` adds nothing: it gave its whole map, so the error of
|
|
212
|
+
* `ErrorResponseJSON` for a `text/html` 500 was `{ "text/html": string }`, a body no response has.
|
|
213
|
+
* A response without `content` keeps its `content` type (`undefined` for `content?: never`).
|
|
214
|
+
*/
|
|
209
215
|
type GetResponseContent<T extends Record<string | number, any>, Media extends MediaType = MediaType, ResponseCode extends keyof T = keyof T> = ResponseCode extends keyof T ? {
|
|
210
|
-
[K in ResponseCode]: T[K]["content"] extends Record<string, any> ? FilterKeys<T[K]["content"], Media>
|
|
216
|
+
[K in ResponseCode]: T[K]["content"] extends Record<string, any> ? FilterKeys<T[K]["content"], Media> : K extends keyof T ? T[K]["content"] : never;
|
|
211
217
|
}[ResponseCode] : never;
|
|
212
218
|
/**
|
|
213
219
|
* Return all 1XX, 3XX, 4XX, 5XX and `default` responses from a Response Object Map; for a union
|
package/dist/helpers.d.ts
CHANGED
|
@@ -206,8 +206,14 @@ type SuccessStatus<T> = [SuccessStatusKey<T>] extends [never] ? Extract<keyof T,
|
|
|
206
206
|
* share its statuses, and a `default`-only path typed the data `undefined` (upstream).
|
|
207
207
|
*/
|
|
208
208
|
type SuccessResponse<T extends Record<string | number, any>, Media extends MediaType = MediaType> = T extends unknown ? GetResponseContent<T, Media, SuccessStatus<T>> : never;
|
|
209
|
+
/**
|
|
210
|
+
* The bodies of the responses `ResponseCode` in the media types `Media`. A response with a
|
|
211
|
+
* `content` map but no media type in `Media` adds nothing: it gave its whole map, so the error of
|
|
212
|
+
* `ErrorResponseJSON` for a `text/html` 500 was `{ "text/html": string }`, a body no response has.
|
|
213
|
+
* A response without `content` keeps its `content` type (`undefined` for `content?: never`).
|
|
214
|
+
*/
|
|
209
215
|
type GetResponseContent<T extends Record<string | number, any>, Media extends MediaType = MediaType, ResponseCode extends keyof T = keyof T> = ResponseCode extends keyof T ? {
|
|
210
|
-
[K in ResponseCode]: T[K]["content"] extends Record<string, any> ? FilterKeys<T[K]["content"], Media>
|
|
216
|
+
[K in ResponseCode]: T[K]["content"] extends Record<string, any> ? FilterKeys<T[K]["content"], Media> : K extends keyof T ? T[K]["content"] : never;
|
|
211
217
|
}[ResponseCode] : never;
|
|
212
218
|
/**
|
|
213
219
|
* Return all 1XX, 3XX, 4XX, 5XX and `default` responses from a Response Object Map; for a union
|
package/dist/index.cjs
CHANGED
|
@@ -415,9 +415,7 @@ function headerParamValue(value) {
|
|
|
415
415
|
if (value === null || typeof value !== "object" || isDate(value)) {
|
|
416
416
|
return valueText(value);
|
|
417
417
|
}
|
|
418
|
-
|
|
419
|
-
throw new Error(`${NESTED_VALUE_ERROR} in header parameters.`);
|
|
420
|
-
}
|
|
418
|
+
checkFlatMembers(value, HEADER_NESTED_VALUE_ERROR);
|
|
421
419
|
const serialize = Array.isArray(value) ? serializeArrayParam : serializeObjectParam;
|
|
422
420
|
return serialize("", value, HEADER_PARAM_STYLE) || void 0;
|
|
423
421
|
}
|
|
@@ -429,14 +427,22 @@ function serializeHeaderParams(header) {
|
|
|
429
427
|
return Object.fromEntries(entries);
|
|
430
428
|
}
|
|
431
429
|
const NESTED_VALUE_ERROR = "Deeply-nested arrays/objects aren\u2019t supported";
|
|
430
|
+
const HEADER_NESTED_VALUE_ERROR = `${NESTED_VALUE_ERROR} in header parameters.`;
|
|
431
|
+
const PATH_HOOK_HINT = "Provide your own `pathSerializer()` to handle these.";
|
|
432
|
+
const PATH_NESTED_VALUE_ERROR = `${NESTED_VALUE_ERROR} in path parameters. ${PATH_HOOK_HINT}`;
|
|
433
|
+
const QUERY_HOOK_HINT = "Provide your own `querySerializer()` to handle these.";
|
|
434
|
+
const QUERY_NESTED_VALUE_ERROR = `${NESTED_VALUE_ERROR}. ${QUERY_HOOK_HINT}`;
|
|
432
435
|
function isNestedValue(value) {
|
|
433
436
|
return Boolean(value) && typeof value === "object" && !isDate(value);
|
|
434
437
|
}
|
|
438
|
+
function checkFlatMembers(value, message) {
|
|
439
|
+
if (Object.values(value).some((member) => isNestedValue(member))) {
|
|
440
|
+
throw new Error(message);
|
|
441
|
+
}
|
|
442
|
+
}
|
|
435
443
|
function encodeValue(value, allowReserved) {
|
|
436
444
|
if (isNestedValue(value)) {
|
|
437
|
-
throw new Error(
|
|
438
|
-
`${NESTED_VALUE_ERROR}. Provide your own \`querySerializer()\` to handle these.`
|
|
439
|
-
);
|
|
445
|
+
throw new Error(QUERY_NESTED_VALUE_ERROR);
|
|
440
446
|
}
|
|
441
447
|
const text = valueText(value);
|
|
442
448
|
return allowReserved === true ? text : encodeURIComponent(text);
|
|
@@ -573,11 +579,15 @@ function mergeQueryOptions(clientOptions, requestOptions) {
|
|
|
573
579
|
const base = typeof clientOptions === "function" ? {} : clientOptions ?? {};
|
|
574
580
|
return {
|
|
575
581
|
...base,
|
|
576
|
-
...requestOptions,
|
|
577
|
-
array: { ...base.array, ...requestOptions.array },
|
|
578
|
-
object: { ...base.object, ...requestOptions.object }
|
|
582
|
+
...definedOptions(requestOptions),
|
|
583
|
+
array: { ...base.array, ...definedOptions(requestOptions.array) },
|
|
584
|
+
object: { ...base.object, ...definedOptions(requestOptions.object) }
|
|
579
585
|
};
|
|
580
586
|
}
|
|
587
|
+
function definedOptions(options) {
|
|
588
|
+
const entries = Object.entries(options ?? {}).filter(([, value]) => value !== void 0);
|
|
589
|
+
return Object.fromEntries(entries);
|
|
590
|
+
}
|
|
581
591
|
function defaultPathSerializer(pathname, pathParams) {
|
|
582
592
|
const matches = pathname.match(PATH_PARAM_RE);
|
|
583
593
|
if (!matches) {
|
|
@@ -602,22 +612,26 @@ function defaultPathSerializer(pathname, pathParams) {
|
|
|
602
612
|
if (!pathParams || pathParams[name] === void 0 || pathParams[name] === null) {
|
|
603
613
|
continue;
|
|
604
614
|
}
|
|
605
|
-
const
|
|
606
|
-
let serialized;
|
|
607
|
-
if (Array.isArray(value)) {
|
|
608
|
-
serialized = serializeArrayParam(name, value, { style, explode });
|
|
609
|
-
} else if (typeof value === "object" && !isDate(value)) {
|
|
610
|
-
serialized = serializeObjectParam(name, value, { style, explode });
|
|
611
|
-
} else if (style === "matrix") {
|
|
612
|
-
serialized = `;${serializePrimitiveParam(name, value)}`;
|
|
613
|
-
} else {
|
|
614
|
-
serialized = style === "label" ? `.${encodeValue(value)}` : encodeValue(value);
|
|
615
|
-
}
|
|
615
|
+
const serialized = serializePathParam(name, pathParams[name], { style, explode });
|
|
616
616
|
nextURL = nextURL.replace(match, () => serialized);
|
|
617
617
|
}
|
|
618
618
|
checkSerializedPath(pathname, nextURL);
|
|
619
619
|
return nextURL;
|
|
620
620
|
}
|
|
621
|
+
function serializePathParam(name, value, options) {
|
|
622
|
+
if (Array.isArray(value)) {
|
|
623
|
+
checkFlatMembers(value, PATH_NESTED_VALUE_ERROR);
|
|
624
|
+
return serializeArrayParam(name, value, options);
|
|
625
|
+
}
|
|
626
|
+
if (typeof value === "object" && !isDate(value)) {
|
|
627
|
+
checkFlatMembers(value, PATH_NESTED_VALUE_ERROR);
|
|
628
|
+
return serializeObjectParam(name, value, options);
|
|
629
|
+
}
|
|
630
|
+
if (options.style === "matrix") {
|
|
631
|
+
return `;${serializePrimitiveParam(name, value)}`;
|
|
632
|
+
}
|
|
633
|
+
return options.style === "label" ? `.${encodeValue(value)}` : encodeValue(value);
|
|
634
|
+
}
|
|
621
635
|
function checkSerializedPath(template, url) {
|
|
622
636
|
const fixed = template.slice(0, template.search(PATH_PARAM_RE));
|
|
623
637
|
const path = url.split(QUERY_OR_FRAGMENT_RE, 1)[0];
|
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 * 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/**\n * `application/x-www-form-urlencoded`, with or without parameters such as `charset`. Spaces and\n * tabs may come before the `;` (OWS, RFC 9110, section 8.3.1).\n */\nconst FORM_MEDIA_TYPE_RE = /^application\\/x-www-form-urlencoded[ \\t]*(;|$)/i;\n/** `multipart/form-data`, with or without parameters, also after spaces or tabs (OWS). */\nconst MULTIPART_MEDIA_TYPE_RE = /^multipart\\/form-data[ \\t]*(;|$)/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/** `[object Name]`: the type tag is between these indexes of `Object.prototype.toString`. */\nconst TYPE_TAG_START = \"[object \".length;\nconst TYPE_TAG_END = -1;\nconst BLOB_CLASSES = [\"Blob\", \"File\"];\n/** Raw bodies with no methods the client uses. */\nconst RAW_BODY_CLASSES = [\"URLSearchParams\", \"ArrayBuffer\"];\n/** The methods of a body's class that the client uses, which tell a forged type tag. */\nconst FORM_DATA_METHODS = [\"append\", \"entries\"];\nconst BLOB_METHODS = [\"arrayBuffer\"];\nconst STREAM_METHODS = [\"getReader\"];\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 FormData: CustomFormData = globalThis.FormData,\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(mergeQueryOptions(globalQuerySerializer, requestQuerySerializer));\n }\n\n const pathSerializer = requestPathSerializer || globalPathSerializer || defaultPathSerializer;\n const headerParams = serializeHeaderParams(params.header);\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, headerParams),\n );\n const requestBody = isFormData(serializedBody)\n ? asFormDataOf(CustomFormData, serializedBody)\n : serializedBody;\n const finalHeaders = mergeHeaders(\n // with no body, we should not to set Content-Type\n requestBody === undefined ||\n // a raw body (FormData, Blob, ...) gets its Content-Type from the platform, or none\n isRawBody(requestBody)\n ? {}\n : {\n \"Content-Type\": \"application/json\",\n },\n baseHeaders,\n headers,\n headerParams,\n );\n if (isFormData(requestBody)) {\n dropFormContentType(finalHeaders, requestBody[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(requestBody) ? \"half\" : undefined,\n ...baseOptions,\n ...init,\n body: requestBody,\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 (isError(result)) {\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 return readResult(response, parseAs, request.method);\n }\n\n return {\n baseUrl,\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/**\n * Whether the response has no body: an answer to HEAD (RFC 9110 §9.3.2) or a `Content-Length` of\n * 0 without chunked transfer. An answer to HEAD keeps the `Content-Length` that GET would send, so\n * the method is read, not the length. A 204 needs no check: a `Response` with it has no body.\n */\nfunction hasEmptyBody(response, method) {\n const isDeclaredEmpty =\n response.headers.get(\"Content-Length\") === \"0\" &&\n !response.headers.get(\"Transfer-Encoding\")?.includes(\"chunked\");\n return method === \"HEAD\" || isDeclaredEmpty;\n}\n\n/**\n * The `data` or `error` of a response. A response without a body has no error and, for JSON, no\n * data; each other `parseAs` reads the body with its method, also an empty one: `\"\"`, an empty\n * Blob or ArrayBuffer, or `response.body`, as their types say.\n */\nasync function readResult(response, parseAs, method) {\n const isEmpty = hasEmptyBody(response, method);\n if (!response.ok) {\n return { error: isEmpty ? undefined : await readErrorBody(response), response };\n }\n if (parseAs === \"json\" && isEmpty) {\n return { data: undefined, response };\n }\n return { data: await readSuccessBody(response, parseAs), response };\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/** Header parameters are written in `simple` style, not exploded: OpenAPI's only header style. */\nconst HEADER_PARAM_STYLE = { style: \"simple\", explode: false, allowReserved: true };\n\n/**\n * A header parameter value: a `Date` as ISO 8601, an array as `a,b` and an object as `name,value`\n * pairs, as a `simple` path parameter (ADR-041), since `Headers` sent an object as\n * `[object Object]` and a `Date` as local time. Not percent-encoded: a header holds no URL. `null`\n * still removes a header, and an empty array or object sends none.\n */\nfunction headerParamValue(value) {\n if (value === null || typeof value !== \"object\" || isDate(value)) {\n return valueText(value);\n }\n // The query error names `querySerializer()`, which does not apply to headers.\n if (Object.values(value).some((member) => isNestedValue(member))) {\n throw new Error(`${NESTED_VALUE_ERROR} in header parameters.`);\n }\n const serialize = Array.isArray(value) ? serializeArrayParam : serializeObjectParam;\n return serialize(\"\", value, HEADER_PARAM_STYLE) || undefined;\n}\n\n/** The `params.header` record with each value in the `simple` style. */\nfunction serializeHeaderParams(header) {\n if (!header || typeof header !== \"object\") {\n return header;\n }\n const entries = Object.entries(header).map(([name, value]) => [name, headerParamValue(value)]);\n return Object.fromEntries(entries);\n}\n\n/** The start of the error for a nested object or array in a parameter. */\nconst NESTED_VALUE_ERROR = \"Deeply-nested arrays/objects aren’t supported\";\n\n/** Whether a value is an object or an array a parameter cannot hold as a member. */\nfunction isNestedValue(value) {\n return Boolean(value) && typeof value === \"object\" && !isDate(value);\n}\n\n/**\n * One parameter value (or object key), percent-encoded unless `allowReserved`. A nested object or\n * array has no standard encoding: as an array item or an object value it was sent as\n * `[object Object]` (ADR-041).\n */\nfunction encodeValue(value, allowReserved) {\n if (isNestedValue(value)) {\n throw new Error(\n `${NESTED_VALUE_ERROR}. Provide your own \\`querySerializer()\\` to handle these.`,\n );\n }\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 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/**\n * A non-exploded object: names and values in one comma-separated list. A name is part of the\n * value, so `allowReserved` keeps it as it is too: a header name with a space was sent as `a%20b`.\n * A `null` or `undefined` member is left out, as in the exploded styles: it was sent as the text\n * `undefined`, or as an empty value in a header. Only such members give `\"\"`.\n */\nfunction serializeUnexplodedObject(name, value, options) {\n const values = [];\n for (const k in value) {\n if (value[k] != null) {\n values.push(\n encodeValue(k, options.allowReserved),\n encodeValue(value[k], options.allowReserved),\n );\n }\n }\n if (!values.length) {\n return \"\";\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/**\n * A non-exploded array; the item separator depends on the style. `null` and `undefined` items are\n * left out, as in the exploded styles, and only such items give `\"\"`.\n */\nfunction serializeUnexplodedArray(name, value, options) {\n const joiner = { form: \",\", spaceDelimited: \"%20\", pipeDelimited: \"|\" }[options.style] || \",\";\n const items = value.filter((v) => v != null);\n if (!items.length) {\n return \"\";\n }\n const final = items.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 one of only `null`\n * and `undefined` items, which every style leaves out (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 (v == null) {\n continue;\n }\n if (options.style === \"simple\" || options.style === \"label\") {\n values.push(encodeValue(v, options.allowReserved));\n } else {\n values.push(serializePrimitiveParam(name, v, options));\n }\n }\n return values.length ? joinExploded(values, options.style) : \"\";\n}\n\n/**\n * The `style` and `explode` of query arrays or objects. `explode` left out follows OpenAPI: `true`\n * for `form` only, so a `pipeDelimited` array is `a|b`, not `a&a`. `deepObject` is always exploded.\n */\nfunction queryStyle(options, defaultStyle, allowReserved) {\n const style = options?.style ?? defaultStyle;\n return { style, explode: options?.explode ?? style === \"form\", allowReserved };\n}\n\n/**\n * One query parameter with the default styles: exploded `form` arrays and `deepObject` objects.\n * `style` and `explode` are optional, and one left out or `undefined` takes its default.\n */\nfunction serializeQueryParam(name, value, options) {\n const allowReserved = options?.allowReserved || false;\n if (Array.isArray(value)) {\n return serializeArrayParam(name, value, queryStyle(options?.array, \"form\", allowReserved));\n }\n if (value && typeof value === \"object\" && !isDate(value)) {\n const style = queryStyle(options?.object, \"deepObject\", allowReserved);\n return serializeObjectParam(name, value, style);\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 * The request's query options over the client's. `array` and `object` merge by key, since each of\n * `style` and `explode` may be left out: `{ array: { explode: false } }` dropped the client's\n * `pipeDelimited` style (ADR-041).\n */\nfunction mergeQueryOptions(clientOptions, requestOptions) {\n const base = typeof clientOptions === \"function\" ? {} : (clientOptions ?? {});\n return {\n ...base,\n ...requestOptions,\n array: { ...base.array, ...requestOptions.array },\n object: { ...base.object, ...requestOptions.object },\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 * The type tag of a value (`Object.prototype.toString`): the classes of the Fetch API and the\n * built-ins name themselves with it in every realm and in other implementations such as the\n * `undici` package. `instanceof` checked the class of this realm only, so a FormData from undici\n * was JSON-encoded as `{}` (ADR-030). A runtime that lacks a class (React Native has no\n * `ReadableStream`) simply has no value with its tag.\n */\nfunction typeTag(value) {\n return Object.prototype.toString.call(value).slice(TYPE_TAG_START, TYPE_TAG_END);\n}\n\n/**\n * Whether a value is of the class `name`: an instance of this realm's global class of that name,\n * which the platform's `fetch` takes, or a value with its type tag and the methods the client uses.\n * The classes of React Native have no type tag, and the Blob of jsdom 20 no `arrayBuffer`; the tag\n * alone tells the classes of another realm or implementation (ADR-030).\n */\nfunction isClass(value, name, methods = []) {\n const type = globalThis[name];\n return (\n (typeof type === \"function\" && value instanceof type) ||\n (typeTag(value) === name && methods.every((method) => typeof value[method] === \"function\"))\n );\n}\n\n/**\n * An `Error` of any realm: an Error of another realm (an iframe, `node:vm`) has the type tag\n * `Error` but fails `instanceof`. A `DOMException` of this realm, which has its own tag, still\n * counts by `instanceof`.\n */\nfunction isError(value) {\n return isClass(value, \"Error\");\n}\n\nfunction isFormData(value) {\n return isClass(value, \"FormData\", FORM_DATA_METHODS);\n}\n\n/** A `Blob` or a `File`, of any realm. */\nfunction isBlob(value) {\n return BLOB_CLASSES.some((name) => isClass(value, name, BLOB_METHODS));\n}\n\nfunction isReadableStream(value) {\n return isClass(value, \"ReadableStream\", STREAM_METHODS);\n}\n\n/**\n * The FormData as an instance of the client's `FormData` class. A `Request` takes only its own\n * implementation's FormData: undici's read the platform's as the text `[object FormData]`. So a\n * FormData of another class, such as the one the client builds for a multipart body, is copied\n * into one of the `FormData` option, the class of the `Request` option's implementation.\n */\nfunction asFormDataOf(FormDataClass, form) {\n if (typeof FormDataClass !== \"function\" || form instanceof FormDataClass) {\n return form;\n }\n const copy = new FormDataClass();\n for (const [name, value] of form.entries()) {\n copy.append(name, value);\n }\n // The copy has a boundary of its own, so a `Content-Type` written for the original is wrong.\n copy[CLIENT_BUILT_FORM] = true;\n return copy;\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 isReadableStream(body) || typeof body?.[Symbol.asyncIterator] === \"function\";\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 isFormData(body) ||\n isBlob(body) ||\n RAW_BODY_CLASSES.some((name) => isClass(body, name)) ||\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 (isBlob(item)) {\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 return finalURL;\n }\n // The query goes before a fragment of the template (`/docs#intro`), which ends the URL, and\n // joins a query the template already has.\n const hashIndex = finalURL.indexOf(\"#\");\n const fragmentStart = hashIndex === -1 ? finalURL.length : hashIndex;\n const beforeFragment = finalURL.slice(0, fragmentStart);\n const joiner = beforeFragment.includes(\"?\") ? \"&\" : \"?\";\n return `${beforeFragment}${joiner}${search}${finalURL.slice(fragmentStart)}`;\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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"}
|
|
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/**\n * `application/x-www-form-urlencoded`, with or without parameters such as `charset`. Spaces and\n * tabs may come before the `;` (OWS, RFC 9110, section 8.3.1).\n */\nconst FORM_MEDIA_TYPE_RE = /^application\\/x-www-form-urlencoded[ \\t]*(;|$)/i;\n/** `multipart/form-data`, with or without parameters, also after spaces or tabs (OWS). */\nconst MULTIPART_MEDIA_TYPE_RE = /^multipart\\/form-data[ \\t]*(;|$)/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/** `[object Name]`: the type tag is between these indexes of `Object.prototype.toString`. */\nconst TYPE_TAG_START = \"[object \".length;\nconst TYPE_TAG_END = -1;\nconst BLOB_CLASSES = [\"Blob\", \"File\"];\n/** Raw bodies with no methods the client uses. */\nconst RAW_BODY_CLASSES = [\"URLSearchParams\", \"ArrayBuffer\"];\n/** The methods of a body's class that the client uses, which tell a forged type tag. */\nconst FORM_DATA_METHODS = [\"append\", \"entries\"];\nconst BLOB_METHODS = [\"arrayBuffer\"];\nconst STREAM_METHODS = [\"getReader\"];\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 FormData: CustomFormData = globalThis.FormData,\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(mergeQueryOptions(globalQuerySerializer, requestQuerySerializer));\n }\n\n const pathSerializer = requestPathSerializer || globalPathSerializer || defaultPathSerializer;\n const headerParams = serializeHeaderParams(params.header);\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, headerParams),\n );\n const requestBody = isFormData(serializedBody)\n ? asFormDataOf(CustomFormData, serializedBody)\n : serializedBody;\n const finalHeaders = mergeHeaders(\n // with no body, we should not to set Content-Type\n requestBody === undefined ||\n // a raw body (FormData, Blob, ...) gets its Content-Type from the platform, or none\n isRawBody(requestBody)\n ? {}\n : {\n \"Content-Type\": \"application/json\",\n },\n baseHeaders,\n headers,\n headerParams,\n );\n if (isFormData(requestBody)) {\n dropFormContentType(finalHeaders, requestBody[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(requestBody) ? \"half\" : undefined,\n ...baseOptions,\n ...init,\n body: requestBody,\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 (isError(result)) {\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 return readResult(response, parseAs, request.method);\n }\n\n return {\n baseUrl,\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/**\n * Whether the response has no body: an answer to HEAD (RFC 9110 §9.3.2) or a `Content-Length` of\n * 0 without chunked transfer. An answer to HEAD keeps the `Content-Length` that GET would send, so\n * the method is read, not the length. A 204 needs no check: a `Response` with it has no body.\n */\nfunction hasEmptyBody(response, method) {\n const isDeclaredEmpty =\n response.headers.get(\"Content-Length\") === \"0\" &&\n !response.headers.get(\"Transfer-Encoding\")?.includes(\"chunked\");\n return method === \"HEAD\" || isDeclaredEmpty;\n}\n\n/**\n * The `data` or `error` of a response. A response without a body has no error and, for JSON, no\n * data; each other `parseAs` reads the body with its method, also an empty one: `\"\"`, an empty\n * Blob or ArrayBuffer, or `response.body`, as their types say.\n */\nasync function readResult(response, parseAs, method) {\n const isEmpty = hasEmptyBody(response, method);\n if (!response.ok) {\n return { error: isEmpty ? undefined : await readErrorBody(response), response };\n }\n if (parseAs === \"json\" && isEmpty) {\n return { data: undefined, response };\n }\n return { data: await readSuccessBody(response, parseAs), response };\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/** Header parameters are written in `simple` style, not exploded: OpenAPI's only header style. */\nconst HEADER_PARAM_STYLE = { style: \"simple\", explode: false, allowReserved: true };\n\n/**\n * A header parameter value: a `Date` as ISO 8601, an array as `a,b` and an object as `name,value`\n * pairs, as a `simple` path parameter (ADR-041), since `Headers` sent an object as\n * `[object Object]` and a `Date` as local time. Not percent-encoded: a header holds no URL. `null`\n * still removes a header, and an empty array or object sends none.\n */\nfunction headerParamValue(value) {\n if (value === null || typeof value !== \"object\" || isDate(value)) {\n return valueText(value);\n }\n checkFlatMembers(value, HEADER_NESTED_VALUE_ERROR);\n const serialize = Array.isArray(value) ? serializeArrayParam : serializeObjectParam;\n return serialize(\"\", value, HEADER_PARAM_STYLE) || undefined;\n}\n\n/** The `params.header` record with each value in the `simple` style. */\nfunction serializeHeaderParams(header) {\n if (!header || typeof header !== \"object\") {\n return header;\n }\n const entries = Object.entries(header).map(([name, value]) => [name, headerParamValue(value)]);\n return Object.fromEntries(entries);\n}\n\n/** The start of the error for a nested object or array in a parameter. */\nconst NESTED_VALUE_ERROR = \"Deeply-nested arrays/objects aren’t supported\";\n\n/** A header has no serializer option, so its error names no hook. */\nconst HEADER_NESTED_VALUE_ERROR = `${NESTED_VALUE_ERROR} in header parameters.`;\n\nconst PATH_HOOK_HINT = \"Provide your own `pathSerializer()` to handle these.\";\nconst PATH_NESTED_VALUE_ERROR = `${NESTED_VALUE_ERROR} in path parameters. ${PATH_HOOK_HINT}`;\n\nconst QUERY_HOOK_HINT = \"Provide your own `querySerializer()` to handle these.\";\nconst QUERY_NESTED_VALUE_ERROR = `${NESTED_VALUE_ERROR}. ${QUERY_HOOK_HINT}`;\n\n/** Whether a value is an object or an array a parameter cannot hold as a member. */\nfunction isNestedValue(value) {\n return Boolean(value) && typeof value === \"object\" && !isDate(value);\n}\n\n/**\n * Throw `message` when an array or object parameter has a nested member. Headers and path\n * parameters check first: the check in `encodeValue` names `querySerializer()`, the hook of the\n * query only.\n */\nfunction checkFlatMembers(value, message) {\n if (Object.values(value).some((member) => isNestedValue(member))) {\n throw new Error(message);\n }\n}\n\n/**\n * One parameter value (or object key), percent-encoded unless `allowReserved`. A nested object or\n * array has no standard encoding: as an array item or an object value it was sent as\n * `[object Object]` (ADR-041).\n */\nfunction encodeValue(value, allowReserved) {\n if (isNestedValue(value)) {\n throw new Error(QUERY_NESTED_VALUE_ERROR);\n }\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 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/**\n * A non-exploded object: names and values in one comma-separated list. A name is part of the\n * value, so `allowReserved` keeps it as it is too: a header name with a space was sent as `a%20b`.\n * A `null` or `undefined` member is left out, as in the exploded styles: it was sent as the text\n * `undefined`, or as an empty value in a header. Only such members give `\"\"`.\n */\nfunction serializeUnexplodedObject(name, value, options) {\n const values = [];\n for (const k in value) {\n if (value[k] != null) {\n values.push(\n encodeValue(k, options.allowReserved),\n encodeValue(value[k], options.allowReserved),\n );\n }\n }\n if (!values.length) {\n return \"\";\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/**\n * A non-exploded array; the item separator depends on the style. `null` and `undefined` items are\n * left out, as in the exploded styles, and only such items give `\"\"`.\n */\nfunction serializeUnexplodedArray(name, value, options) {\n const joiner = { form: \",\", spaceDelimited: \"%20\", pipeDelimited: \"|\" }[options.style] || \",\";\n const items = value.filter((v) => v != null);\n if (!items.length) {\n return \"\";\n }\n const final = items.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 one of only `null`\n * and `undefined` items, which every style leaves out (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 (v == null) {\n continue;\n }\n if (options.style === \"simple\" || options.style === \"label\") {\n values.push(encodeValue(v, options.allowReserved));\n } else {\n values.push(serializePrimitiveParam(name, v, options));\n }\n }\n return values.length ? joinExploded(values, options.style) : \"\";\n}\n\n/**\n * The `style` and `explode` of query arrays or objects. `explode` left out follows OpenAPI: `true`\n * for `form` only, so a `pipeDelimited` array is `a|b`, not `a&a`. `deepObject` is always exploded.\n */\nfunction queryStyle(options, defaultStyle, allowReserved) {\n const style = options?.style ?? defaultStyle;\n return { style, explode: options?.explode ?? style === \"form\", allowReserved };\n}\n\n/**\n * One query parameter with the default styles: exploded `form` arrays and `deepObject` objects.\n * `style` and `explode` are optional, and one left out or `undefined` takes its default.\n */\nfunction serializeQueryParam(name, value, options) {\n const allowReserved = options?.allowReserved || false;\n if (Array.isArray(value)) {\n return serializeArrayParam(name, value, queryStyle(options?.array, \"form\", allowReserved));\n }\n if (value && typeof value === \"object\" && !isDate(value)) {\n const style = queryStyle(options?.object, \"deepObject\", allowReserved);\n return serializeObjectParam(name, value, style);\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 * The request's query options over the client's. `array` and `object` merge by key, since each of\n * `style` and `explode` may be left out: `{ array: { explode: false } }` dropped the client's\n * `pipeDelimited` style (ADR-041). An option set to `undefined` counts as left out.\n */\nfunction mergeQueryOptions(clientOptions, requestOptions) {\n const base = typeof clientOptions === \"function\" ? {} : (clientOptions ?? {});\n return {\n ...base,\n ...definedOptions(requestOptions),\n array: { ...base.array, ...definedOptions(requestOptions.array) },\n object: { ...base.object, ...definedOptions(requestOptions.object) },\n };\n}\n\n/**\n * The options that are not `undefined`. A wrapper that forwards its own optional option passes\n * `{ explode: undefined }`, which compiles, and a spread of it replaced the client's value.\n */\nfunction definedOptions(options) {\n const entries = Object.entries(options ?? {}).filter(([, value]) => value !== undefined);\n return Object.fromEntries(entries);\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 serialized = serializePathParam(name, pathParams[name], { style, explode });\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/** One path parameter value in its `style`; a nested member fails with the path's message. */\nfunction serializePathParam(name, value, options) {\n if (Array.isArray(value)) {\n checkFlatMembers(value, PATH_NESTED_VALUE_ERROR);\n return serializeArrayParam(name, value, options);\n }\n if (typeof value === \"object\" && !isDate(value)) {\n checkFlatMembers(value, PATH_NESTED_VALUE_ERROR);\n return serializeObjectParam(name, value, options);\n }\n if (options.style === \"matrix\") {\n return `;${serializePrimitiveParam(name, value)}`;\n }\n return options.style === \"label\" ? `.${encodeValue(value)}` : encodeValue(value);\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 * The type tag of a value (`Object.prototype.toString`): the classes of the Fetch API and the\n * built-ins name themselves with it in every realm and in other implementations such as the\n * `undici` package. `instanceof` checked the class of this realm only, so a FormData from undici\n * was JSON-encoded as `{}` (ADR-030). A runtime that lacks a class (React Native has no\n * `ReadableStream`) simply has no value with its tag.\n */\nfunction typeTag(value) {\n return Object.prototype.toString.call(value).slice(TYPE_TAG_START, TYPE_TAG_END);\n}\n\n/**\n * Whether a value is of the class `name`: an instance of this realm's global class of that name,\n * which the platform's `fetch` takes, or a value with its type tag and the methods the client uses.\n * The classes of React Native have no type tag, and the Blob of jsdom 20 no `arrayBuffer`; the tag\n * alone tells the classes of another realm or implementation (ADR-030).\n */\nfunction isClass(value, name, methods = []) {\n const type = globalThis[name];\n return (\n (typeof type === \"function\" && value instanceof type) ||\n (typeTag(value) === name && methods.every((method) => typeof value[method] === \"function\"))\n );\n}\n\n/**\n * An `Error` of any realm: an Error of another realm (an iframe, `node:vm`) has the type tag\n * `Error` but fails `instanceof`. A `DOMException` of this realm, which has its own tag, still\n * counts by `instanceof`.\n */\nfunction isError(value) {\n return isClass(value, \"Error\");\n}\n\nfunction isFormData(value) {\n return isClass(value, \"FormData\", FORM_DATA_METHODS);\n}\n\n/** A `Blob` or a `File`, of any realm. */\nfunction isBlob(value) {\n return BLOB_CLASSES.some((name) => isClass(value, name, BLOB_METHODS));\n}\n\nfunction isReadableStream(value) {\n return isClass(value, \"ReadableStream\", STREAM_METHODS);\n}\n\n/**\n * The FormData as an instance of the client's `FormData` class. A `Request` takes only its own\n * implementation's FormData: undici's read the platform's as the text `[object FormData]`. So a\n * FormData of another class, such as the one the client builds for a multipart body, is copied\n * into one of the `FormData` option, the class of the `Request` option's implementation.\n */\nfunction asFormDataOf(FormDataClass, form) {\n if (typeof FormDataClass !== \"function\" || form instanceof FormDataClass) {\n return form;\n }\n const copy = new FormDataClass();\n for (const [name, value] of form.entries()) {\n copy.append(name, value);\n }\n // The copy has a boundary of its own, so a `Content-Type` written for the original is wrong.\n copy[CLIENT_BUILT_FORM] = true;\n return copy;\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 isReadableStream(body) || typeof body?.[Symbol.asyncIterator] === \"function\";\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 isFormData(body) ||\n isBlob(body) ||\n RAW_BODY_CLASSES.some((name) => isClass(body, name)) ||\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 (isBlob(item)) {\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 return finalURL;\n }\n // The query goes before a fragment of the template (`/docs#intro`), which ends the URL, and\n // joins a query the template already has.\n const hashIndex = finalURL.indexOf(\"#\");\n const fragmentStart = hashIndex === -1 ? finalURL.length : hashIndex;\n const beforeFragment = finalURL.slice(0, fragmentStart);\n const joiner = beforeFragment.includes(\"?\") ? \"&\" : \"?\";\n return `${beforeFragment}${joiner}${search}${finalURL.slice(fragmentStart)}`;\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.mjs
CHANGED
|
@@ -411,9 +411,7 @@ function headerParamValue(value) {
|
|
|
411
411
|
if (value === null || typeof value !== "object" || isDate(value)) {
|
|
412
412
|
return valueText(value);
|
|
413
413
|
}
|
|
414
|
-
|
|
415
|
-
throw new Error(`${NESTED_VALUE_ERROR} in header parameters.`);
|
|
416
|
-
}
|
|
414
|
+
checkFlatMembers(value, HEADER_NESTED_VALUE_ERROR);
|
|
417
415
|
const serialize = Array.isArray(value) ? serializeArrayParam : serializeObjectParam;
|
|
418
416
|
return serialize("", value, HEADER_PARAM_STYLE) || void 0;
|
|
419
417
|
}
|
|
@@ -425,14 +423,22 @@ function serializeHeaderParams(header) {
|
|
|
425
423
|
return Object.fromEntries(entries);
|
|
426
424
|
}
|
|
427
425
|
const NESTED_VALUE_ERROR = "Deeply-nested arrays/objects aren\u2019t supported";
|
|
426
|
+
const HEADER_NESTED_VALUE_ERROR = `${NESTED_VALUE_ERROR} in header parameters.`;
|
|
427
|
+
const PATH_HOOK_HINT = "Provide your own `pathSerializer()` to handle these.";
|
|
428
|
+
const PATH_NESTED_VALUE_ERROR = `${NESTED_VALUE_ERROR} in path parameters. ${PATH_HOOK_HINT}`;
|
|
429
|
+
const QUERY_HOOK_HINT = "Provide your own `querySerializer()` to handle these.";
|
|
430
|
+
const QUERY_NESTED_VALUE_ERROR = `${NESTED_VALUE_ERROR}. ${QUERY_HOOK_HINT}`;
|
|
428
431
|
function isNestedValue(value) {
|
|
429
432
|
return Boolean(value) && typeof value === "object" && !isDate(value);
|
|
430
433
|
}
|
|
434
|
+
function checkFlatMembers(value, message) {
|
|
435
|
+
if (Object.values(value).some((member) => isNestedValue(member))) {
|
|
436
|
+
throw new Error(message);
|
|
437
|
+
}
|
|
438
|
+
}
|
|
431
439
|
function encodeValue(value, allowReserved) {
|
|
432
440
|
if (isNestedValue(value)) {
|
|
433
|
-
throw new Error(
|
|
434
|
-
`${NESTED_VALUE_ERROR}. Provide your own \`querySerializer()\` to handle these.`
|
|
435
|
-
);
|
|
441
|
+
throw new Error(QUERY_NESTED_VALUE_ERROR);
|
|
436
442
|
}
|
|
437
443
|
const text = valueText(value);
|
|
438
444
|
return allowReserved === true ? text : encodeURIComponent(text);
|
|
@@ -569,11 +575,15 @@ function mergeQueryOptions(clientOptions, requestOptions) {
|
|
|
569
575
|
const base = typeof clientOptions === "function" ? {} : clientOptions ?? {};
|
|
570
576
|
return {
|
|
571
577
|
...base,
|
|
572
|
-
...requestOptions,
|
|
573
|
-
array: { ...base.array, ...requestOptions.array },
|
|
574
|
-
object: { ...base.object, ...requestOptions.object }
|
|
578
|
+
...definedOptions(requestOptions),
|
|
579
|
+
array: { ...base.array, ...definedOptions(requestOptions.array) },
|
|
580
|
+
object: { ...base.object, ...definedOptions(requestOptions.object) }
|
|
575
581
|
};
|
|
576
582
|
}
|
|
583
|
+
function definedOptions(options) {
|
|
584
|
+
const entries = Object.entries(options ?? {}).filter(([, value]) => value !== void 0);
|
|
585
|
+
return Object.fromEntries(entries);
|
|
586
|
+
}
|
|
577
587
|
function defaultPathSerializer(pathname, pathParams) {
|
|
578
588
|
const matches = pathname.match(PATH_PARAM_RE);
|
|
579
589
|
if (!matches) {
|
|
@@ -598,22 +608,26 @@ function defaultPathSerializer(pathname, pathParams) {
|
|
|
598
608
|
if (!pathParams || pathParams[name] === void 0 || pathParams[name] === null) {
|
|
599
609
|
continue;
|
|
600
610
|
}
|
|
601
|
-
const
|
|
602
|
-
let serialized;
|
|
603
|
-
if (Array.isArray(value)) {
|
|
604
|
-
serialized = serializeArrayParam(name, value, { style, explode });
|
|
605
|
-
} else if (typeof value === "object" && !isDate(value)) {
|
|
606
|
-
serialized = serializeObjectParam(name, value, { style, explode });
|
|
607
|
-
} else if (style === "matrix") {
|
|
608
|
-
serialized = `;${serializePrimitiveParam(name, value)}`;
|
|
609
|
-
} else {
|
|
610
|
-
serialized = style === "label" ? `.${encodeValue(value)}` : encodeValue(value);
|
|
611
|
-
}
|
|
611
|
+
const serialized = serializePathParam(name, pathParams[name], { style, explode });
|
|
612
612
|
nextURL = nextURL.replace(match, () => serialized);
|
|
613
613
|
}
|
|
614
614
|
checkSerializedPath(pathname, nextURL);
|
|
615
615
|
return nextURL;
|
|
616
616
|
}
|
|
617
|
+
function serializePathParam(name, value, options) {
|
|
618
|
+
if (Array.isArray(value)) {
|
|
619
|
+
checkFlatMembers(value, PATH_NESTED_VALUE_ERROR);
|
|
620
|
+
return serializeArrayParam(name, value, options);
|
|
621
|
+
}
|
|
622
|
+
if (typeof value === "object" && !isDate(value)) {
|
|
623
|
+
checkFlatMembers(value, PATH_NESTED_VALUE_ERROR);
|
|
624
|
+
return serializeObjectParam(name, value, options);
|
|
625
|
+
}
|
|
626
|
+
if (options.style === "matrix") {
|
|
627
|
+
return `;${serializePrimitiveParam(name, value)}`;
|
|
628
|
+
}
|
|
629
|
+
return options.style === "label" ? `.${encodeValue(value)}` : encodeValue(value);
|
|
630
|
+
}
|
|
617
631
|
function checkSerializedPath(template, url) {
|
|
618
632
|
const fixed = template.slice(0, template.search(PATH_PARAM_RE));
|
|
619
633
|
const path = url.split(QUERY_OR_FRAGMENT_RE, 1)[0];
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","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/**\n * `application/x-www-form-urlencoded`, with or without parameters such as `charset`. Spaces and\n * tabs may come before the `;` (OWS, RFC 9110, section 8.3.1).\n */\nconst FORM_MEDIA_TYPE_RE = /^application\\/x-www-form-urlencoded[ \\t]*(;|$)/i;\n/** `multipart/form-data`, with or without parameters, also after spaces or tabs (OWS). */\nconst MULTIPART_MEDIA_TYPE_RE = /^multipart\\/form-data[ \\t]*(;|$)/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/** `[object Name]`: the type tag is between these indexes of `Object.prototype.toString`. */\nconst TYPE_TAG_START = \"[object \".length;\nconst TYPE_TAG_END = -1;\nconst BLOB_CLASSES = [\"Blob\", \"File\"];\n/** Raw bodies with no methods the client uses. */\nconst RAW_BODY_CLASSES = [\"URLSearchParams\", \"ArrayBuffer\"];\n/** The methods of a body's class that the client uses, which tell a forged type tag. */\nconst FORM_DATA_METHODS = [\"append\", \"entries\"];\nconst BLOB_METHODS = [\"arrayBuffer\"];\nconst STREAM_METHODS = [\"getReader\"];\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 FormData: CustomFormData = globalThis.FormData,\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(mergeQueryOptions(globalQuerySerializer, requestQuerySerializer));\n }\n\n const pathSerializer = requestPathSerializer || globalPathSerializer || defaultPathSerializer;\n const headerParams = serializeHeaderParams(params.header);\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, headerParams),\n );\n const requestBody = isFormData(serializedBody)\n ? asFormDataOf(CustomFormData, serializedBody)\n : serializedBody;\n const finalHeaders = mergeHeaders(\n // with no body, we should not to set Content-Type\n requestBody === undefined ||\n // a raw body (FormData, Blob, ...) gets its Content-Type from the platform, or none\n isRawBody(requestBody)\n ? {}\n : {\n \"Content-Type\": \"application/json\",\n },\n baseHeaders,\n headers,\n headerParams,\n );\n if (isFormData(requestBody)) {\n dropFormContentType(finalHeaders, requestBody[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(requestBody) ? \"half\" : undefined,\n ...baseOptions,\n ...init,\n body: requestBody,\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 (isError(result)) {\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 return readResult(response, parseAs, request.method);\n }\n\n return {\n baseUrl,\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/**\n * Whether the response has no body: an answer to HEAD (RFC 9110 §9.3.2) or a `Content-Length` of\n * 0 without chunked transfer. An answer to HEAD keeps the `Content-Length` that GET would send, so\n * the method is read, not the length. A 204 needs no check: a `Response` with it has no body.\n */\nfunction hasEmptyBody(response, method) {\n const isDeclaredEmpty =\n response.headers.get(\"Content-Length\") === \"0\" &&\n !response.headers.get(\"Transfer-Encoding\")?.includes(\"chunked\");\n return method === \"HEAD\" || isDeclaredEmpty;\n}\n\n/**\n * The `data` or `error` of a response. A response without a body has no error and, for JSON, no\n * data; each other `parseAs` reads the body with its method, also an empty one: `\"\"`, an empty\n * Blob or ArrayBuffer, or `response.body`, as their types say.\n */\nasync function readResult(response, parseAs, method) {\n const isEmpty = hasEmptyBody(response, method);\n if (!response.ok) {\n return { error: isEmpty ? undefined : await readErrorBody(response), response };\n }\n if (parseAs === \"json\" && isEmpty) {\n return { data: undefined, response };\n }\n return { data: await readSuccessBody(response, parseAs), response };\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/** Header parameters are written in `simple` style, not exploded: OpenAPI's only header style. */\nconst HEADER_PARAM_STYLE = { style: \"simple\", explode: false, allowReserved: true };\n\n/**\n * A header parameter value: a `Date` as ISO 8601, an array as `a,b` and an object as `name,value`\n * pairs, as a `simple` path parameter (ADR-041), since `Headers` sent an object as\n * `[object Object]` and a `Date` as local time. Not percent-encoded: a header holds no URL. `null`\n * still removes a header, and an empty array or object sends none.\n */\nfunction headerParamValue(value) {\n if (value === null || typeof value !== \"object\" || isDate(value)) {\n return valueText(value);\n }\n // The query error names `querySerializer()`, which does not apply to headers.\n if (Object.values(value).some((member) => isNestedValue(member))) {\n throw new Error(`${NESTED_VALUE_ERROR} in header parameters.`);\n }\n const serialize = Array.isArray(value) ? serializeArrayParam : serializeObjectParam;\n return serialize(\"\", value, HEADER_PARAM_STYLE) || undefined;\n}\n\n/** The `params.header` record with each value in the `simple` style. */\nfunction serializeHeaderParams(header) {\n if (!header || typeof header !== \"object\") {\n return header;\n }\n const entries = Object.entries(header).map(([name, value]) => [name, headerParamValue(value)]);\n return Object.fromEntries(entries);\n}\n\n/** The start of the error for a nested object or array in a parameter. */\nconst NESTED_VALUE_ERROR = \"Deeply-nested arrays/objects aren’t supported\";\n\n/** Whether a value is an object or an array a parameter cannot hold as a member. */\nfunction isNestedValue(value) {\n return Boolean(value) && typeof value === \"object\" && !isDate(value);\n}\n\n/**\n * One parameter value (or object key), percent-encoded unless `allowReserved`. A nested object or\n * array has no standard encoding: as an array item or an object value it was sent as\n * `[object Object]` (ADR-041).\n */\nfunction encodeValue(value, allowReserved) {\n if (isNestedValue(value)) {\n throw new Error(\n `${NESTED_VALUE_ERROR}. Provide your own \\`querySerializer()\\` to handle these.`,\n );\n }\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 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/**\n * A non-exploded object: names and values in one comma-separated list. A name is part of the\n * value, so `allowReserved` keeps it as it is too: a header name with a space was sent as `a%20b`.\n * A `null` or `undefined` member is left out, as in the exploded styles: it was sent as the text\n * `undefined`, or as an empty value in a header. Only such members give `\"\"`.\n */\nfunction serializeUnexplodedObject(name, value, options) {\n const values = [];\n for (const k in value) {\n if (value[k] != null) {\n values.push(\n encodeValue(k, options.allowReserved),\n encodeValue(value[k], options.allowReserved),\n );\n }\n }\n if (!values.length) {\n return \"\";\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/**\n * A non-exploded array; the item separator depends on the style. `null` and `undefined` items are\n * left out, as in the exploded styles, and only such items give `\"\"`.\n */\nfunction serializeUnexplodedArray(name, value, options) {\n const joiner = { form: \",\", spaceDelimited: \"%20\", pipeDelimited: \"|\" }[options.style] || \",\";\n const items = value.filter((v) => v != null);\n if (!items.length) {\n return \"\";\n }\n const final = items.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 one of only `null`\n * and `undefined` items, which every style leaves out (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 (v == null) {\n continue;\n }\n if (options.style === \"simple\" || options.style === \"label\") {\n values.push(encodeValue(v, options.allowReserved));\n } else {\n values.push(serializePrimitiveParam(name, v, options));\n }\n }\n return values.length ? joinExploded(values, options.style) : \"\";\n}\n\n/**\n * The `style` and `explode` of query arrays or objects. `explode` left out follows OpenAPI: `true`\n * for `form` only, so a `pipeDelimited` array is `a|b`, not `a&a`. `deepObject` is always exploded.\n */\nfunction queryStyle(options, defaultStyle, allowReserved) {\n const style = options?.style ?? defaultStyle;\n return { style, explode: options?.explode ?? style === \"form\", allowReserved };\n}\n\n/**\n * One query parameter with the default styles: exploded `form` arrays and `deepObject` objects.\n * `style` and `explode` are optional, and one left out or `undefined` takes its default.\n */\nfunction serializeQueryParam(name, value, options) {\n const allowReserved = options?.allowReserved || false;\n if (Array.isArray(value)) {\n return serializeArrayParam(name, value, queryStyle(options?.array, \"form\", allowReserved));\n }\n if (value && typeof value === \"object\" && !isDate(value)) {\n const style = queryStyle(options?.object, \"deepObject\", allowReserved);\n return serializeObjectParam(name, value, style);\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 * The request's query options over the client's. `array` and `object` merge by key, since each of\n * `style` and `explode` may be left out: `{ array: { explode: false } }` dropped the client's\n * `pipeDelimited` style (ADR-041).\n */\nfunction mergeQueryOptions(clientOptions, requestOptions) {\n const base = typeof clientOptions === \"function\" ? {} : (clientOptions ?? {});\n return {\n ...base,\n ...requestOptions,\n array: { ...base.array, ...requestOptions.array },\n object: { ...base.object, ...requestOptions.object },\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 * The type tag of a value (`Object.prototype.toString`): the classes of the Fetch API and the\n * built-ins name themselves with it in every realm and in other implementations such as the\n * `undici` package. `instanceof` checked the class of this realm only, so a FormData from undici\n * was JSON-encoded as `{}` (ADR-030). A runtime that lacks a class (React Native has no\n * `ReadableStream`) simply has no value with its tag.\n */\nfunction typeTag(value) {\n return Object.prototype.toString.call(value).slice(TYPE_TAG_START, TYPE_TAG_END);\n}\n\n/**\n * Whether a value is of the class `name`: an instance of this realm's global class of that name,\n * which the platform's `fetch` takes, or a value with its type tag and the methods the client uses.\n * The classes of React Native have no type tag, and the Blob of jsdom 20 no `arrayBuffer`; the tag\n * alone tells the classes of another realm or implementation (ADR-030).\n */\nfunction isClass(value, name, methods = []) {\n const type = globalThis[name];\n return (\n (typeof type === \"function\" && value instanceof type) ||\n (typeTag(value) === name && methods.every((method) => typeof value[method] === \"function\"))\n );\n}\n\n/**\n * An `Error` of any realm: an Error of another realm (an iframe, `node:vm`) has the type tag\n * `Error` but fails `instanceof`. A `DOMException` of this realm, which has its own tag, still\n * counts by `instanceof`.\n */\nfunction isError(value) {\n return isClass(value, \"Error\");\n}\n\nfunction isFormData(value) {\n return isClass(value, \"FormData\", FORM_DATA_METHODS);\n}\n\n/** A `Blob` or a `File`, of any realm. */\nfunction isBlob(value) {\n return BLOB_CLASSES.some((name) => isClass(value, name, BLOB_METHODS));\n}\n\nfunction isReadableStream(value) {\n return isClass(value, \"ReadableStream\", STREAM_METHODS);\n}\n\n/**\n * The FormData as an instance of the client's `FormData` class. A `Request` takes only its own\n * implementation's FormData: undici's read the platform's as the text `[object FormData]`. So a\n * FormData of another class, such as the one the client builds for a multipart body, is copied\n * into one of the `FormData` option, the class of the `Request` option's implementation.\n */\nfunction asFormDataOf(FormDataClass, form) {\n if (typeof FormDataClass !== \"function\" || form instanceof FormDataClass) {\n return form;\n }\n const copy = new FormDataClass();\n for (const [name, value] of form.entries()) {\n copy.append(name, value);\n }\n // The copy has a boundary of its own, so a `Content-Type` written for the original is wrong.\n copy[CLIENT_BUILT_FORM] = true;\n return copy;\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 isReadableStream(body) || typeof body?.[Symbol.asyncIterator] === \"function\";\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 isFormData(body) ||\n isBlob(body) ||\n RAW_BODY_CLASSES.some((name) => isClass(body, name)) ||\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 (isBlob(item)) {\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 return finalURL;\n }\n // The query goes before a fragment of the template (`/docs#intro`), which ends the URL, and\n // joins a query the template already has.\n const hashIndex = finalURL.indexOf(\"#\");\n const fragmentStart = hashIndex === -1 ? finalURL.length : hashIndex;\n const beforeFragment = finalURL.slice(0, fragmentStart);\n const joiner = beforeFragment.includes(\"?\") ? \"&\" : \"?\";\n return `${beforeFragment}${joiner}${search}${finalURL.slice(fragmentStart)}`;\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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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","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/**\n * `application/x-www-form-urlencoded`, with or without parameters such as `charset`. Spaces and\n * tabs may come before the `;` (OWS, RFC 9110, section 8.3.1).\n */\nconst FORM_MEDIA_TYPE_RE = /^application\\/x-www-form-urlencoded[ \\t]*(;|$)/i;\n/** `multipart/form-data`, with or without parameters, also after spaces or tabs (OWS). */\nconst MULTIPART_MEDIA_TYPE_RE = /^multipart\\/form-data[ \\t]*(;|$)/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/** `[object Name]`: the type tag is between these indexes of `Object.prototype.toString`. */\nconst TYPE_TAG_START = \"[object \".length;\nconst TYPE_TAG_END = -1;\nconst BLOB_CLASSES = [\"Blob\", \"File\"];\n/** Raw bodies with no methods the client uses. */\nconst RAW_BODY_CLASSES = [\"URLSearchParams\", \"ArrayBuffer\"];\n/** The methods of a body's class that the client uses, which tell a forged type tag. */\nconst FORM_DATA_METHODS = [\"append\", \"entries\"];\nconst BLOB_METHODS = [\"arrayBuffer\"];\nconst STREAM_METHODS = [\"getReader\"];\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 FormData: CustomFormData = globalThis.FormData,\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(mergeQueryOptions(globalQuerySerializer, requestQuerySerializer));\n }\n\n const pathSerializer = requestPathSerializer || globalPathSerializer || defaultPathSerializer;\n const headerParams = serializeHeaderParams(params.header);\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, headerParams),\n );\n const requestBody = isFormData(serializedBody)\n ? asFormDataOf(CustomFormData, serializedBody)\n : serializedBody;\n const finalHeaders = mergeHeaders(\n // with no body, we should not to set Content-Type\n requestBody === undefined ||\n // a raw body (FormData, Blob, ...) gets its Content-Type from the platform, or none\n isRawBody(requestBody)\n ? {}\n : {\n \"Content-Type\": \"application/json\",\n },\n baseHeaders,\n headers,\n headerParams,\n );\n if (isFormData(requestBody)) {\n dropFormContentType(finalHeaders, requestBody[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(requestBody) ? \"half\" : undefined,\n ...baseOptions,\n ...init,\n body: requestBody,\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 (isError(result)) {\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 return readResult(response, parseAs, request.method);\n }\n\n return {\n baseUrl,\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/**\n * Whether the response has no body: an answer to HEAD (RFC 9110 §9.3.2) or a `Content-Length` of\n * 0 without chunked transfer. An answer to HEAD keeps the `Content-Length` that GET would send, so\n * the method is read, not the length. A 204 needs no check: a `Response` with it has no body.\n */\nfunction hasEmptyBody(response, method) {\n const isDeclaredEmpty =\n response.headers.get(\"Content-Length\") === \"0\" &&\n !response.headers.get(\"Transfer-Encoding\")?.includes(\"chunked\");\n return method === \"HEAD\" || isDeclaredEmpty;\n}\n\n/**\n * The `data` or `error` of a response. A response without a body has no error and, for JSON, no\n * data; each other `parseAs` reads the body with its method, also an empty one: `\"\"`, an empty\n * Blob or ArrayBuffer, or `response.body`, as their types say.\n */\nasync function readResult(response, parseAs, method) {\n const isEmpty = hasEmptyBody(response, method);\n if (!response.ok) {\n return { error: isEmpty ? undefined : await readErrorBody(response), response };\n }\n if (parseAs === \"json\" && isEmpty) {\n return { data: undefined, response };\n }\n return { data: await readSuccessBody(response, parseAs), response };\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/** Header parameters are written in `simple` style, not exploded: OpenAPI's only header style. */\nconst HEADER_PARAM_STYLE = { style: \"simple\", explode: false, allowReserved: true };\n\n/**\n * A header parameter value: a `Date` as ISO 8601, an array as `a,b` and an object as `name,value`\n * pairs, as a `simple` path parameter (ADR-041), since `Headers` sent an object as\n * `[object Object]` and a `Date` as local time. Not percent-encoded: a header holds no URL. `null`\n * still removes a header, and an empty array or object sends none.\n */\nfunction headerParamValue(value) {\n if (value === null || typeof value !== \"object\" || isDate(value)) {\n return valueText(value);\n }\n checkFlatMembers(value, HEADER_NESTED_VALUE_ERROR);\n const serialize = Array.isArray(value) ? serializeArrayParam : serializeObjectParam;\n return serialize(\"\", value, HEADER_PARAM_STYLE) || undefined;\n}\n\n/** The `params.header` record with each value in the `simple` style. */\nfunction serializeHeaderParams(header) {\n if (!header || typeof header !== \"object\") {\n return header;\n }\n const entries = Object.entries(header).map(([name, value]) => [name, headerParamValue(value)]);\n return Object.fromEntries(entries);\n}\n\n/** The start of the error for a nested object or array in a parameter. */\nconst NESTED_VALUE_ERROR = \"Deeply-nested arrays/objects aren’t supported\";\n\n/** A header has no serializer option, so its error names no hook. */\nconst HEADER_NESTED_VALUE_ERROR = `${NESTED_VALUE_ERROR} in header parameters.`;\n\nconst PATH_HOOK_HINT = \"Provide your own `pathSerializer()` to handle these.\";\nconst PATH_NESTED_VALUE_ERROR = `${NESTED_VALUE_ERROR} in path parameters. ${PATH_HOOK_HINT}`;\n\nconst QUERY_HOOK_HINT = \"Provide your own `querySerializer()` to handle these.\";\nconst QUERY_NESTED_VALUE_ERROR = `${NESTED_VALUE_ERROR}. ${QUERY_HOOK_HINT}`;\n\n/** Whether a value is an object or an array a parameter cannot hold as a member. */\nfunction isNestedValue(value) {\n return Boolean(value) && typeof value === \"object\" && !isDate(value);\n}\n\n/**\n * Throw `message` when an array or object parameter has a nested member. Headers and path\n * parameters check first: the check in `encodeValue` names `querySerializer()`, the hook of the\n * query only.\n */\nfunction checkFlatMembers(value, message) {\n if (Object.values(value).some((member) => isNestedValue(member))) {\n throw new Error(message);\n }\n}\n\n/**\n * One parameter value (or object key), percent-encoded unless `allowReserved`. A nested object or\n * array has no standard encoding: as an array item or an object value it was sent as\n * `[object Object]` (ADR-041).\n */\nfunction encodeValue(value, allowReserved) {\n if (isNestedValue(value)) {\n throw new Error(QUERY_NESTED_VALUE_ERROR);\n }\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 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/**\n * A non-exploded object: names and values in one comma-separated list. A name is part of the\n * value, so `allowReserved` keeps it as it is too: a header name with a space was sent as `a%20b`.\n * A `null` or `undefined` member is left out, as in the exploded styles: it was sent as the text\n * `undefined`, or as an empty value in a header. Only such members give `\"\"`.\n */\nfunction serializeUnexplodedObject(name, value, options) {\n const values = [];\n for (const k in value) {\n if (value[k] != null) {\n values.push(\n encodeValue(k, options.allowReserved),\n encodeValue(value[k], options.allowReserved),\n );\n }\n }\n if (!values.length) {\n return \"\";\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/**\n * A non-exploded array; the item separator depends on the style. `null` and `undefined` items are\n * left out, as in the exploded styles, and only such items give `\"\"`.\n */\nfunction serializeUnexplodedArray(name, value, options) {\n const joiner = { form: \",\", spaceDelimited: \"%20\", pipeDelimited: \"|\" }[options.style] || \",\";\n const items = value.filter((v) => v != null);\n if (!items.length) {\n return \"\";\n }\n const final = items.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 one of only `null`\n * and `undefined` items, which every style leaves out (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 (v == null) {\n continue;\n }\n if (options.style === \"simple\" || options.style === \"label\") {\n values.push(encodeValue(v, options.allowReserved));\n } else {\n values.push(serializePrimitiveParam(name, v, options));\n }\n }\n return values.length ? joinExploded(values, options.style) : \"\";\n}\n\n/**\n * The `style` and `explode` of query arrays or objects. `explode` left out follows OpenAPI: `true`\n * for `form` only, so a `pipeDelimited` array is `a|b`, not `a&a`. `deepObject` is always exploded.\n */\nfunction queryStyle(options, defaultStyle, allowReserved) {\n const style = options?.style ?? defaultStyle;\n return { style, explode: options?.explode ?? style === \"form\", allowReserved };\n}\n\n/**\n * One query parameter with the default styles: exploded `form` arrays and `deepObject` objects.\n * `style` and `explode` are optional, and one left out or `undefined` takes its default.\n */\nfunction serializeQueryParam(name, value, options) {\n const allowReserved = options?.allowReserved || false;\n if (Array.isArray(value)) {\n return serializeArrayParam(name, value, queryStyle(options?.array, \"form\", allowReserved));\n }\n if (value && typeof value === \"object\" && !isDate(value)) {\n const style = queryStyle(options?.object, \"deepObject\", allowReserved);\n return serializeObjectParam(name, value, style);\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 * The request's query options over the client's. `array` and `object` merge by key, since each of\n * `style` and `explode` may be left out: `{ array: { explode: false } }` dropped the client's\n * `pipeDelimited` style (ADR-041). An option set to `undefined` counts as left out.\n */\nfunction mergeQueryOptions(clientOptions, requestOptions) {\n const base = typeof clientOptions === \"function\" ? {} : (clientOptions ?? {});\n return {\n ...base,\n ...definedOptions(requestOptions),\n array: { ...base.array, ...definedOptions(requestOptions.array) },\n object: { ...base.object, ...definedOptions(requestOptions.object) },\n };\n}\n\n/**\n * The options that are not `undefined`. A wrapper that forwards its own optional option passes\n * `{ explode: undefined }`, which compiles, and a spread of it replaced the client's value.\n */\nfunction definedOptions(options) {\n const entries = Object.entries(options ?? {}).filter(([, value]) => value !== undefined);\n return Object.fromEntries(entries);\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 serialized = serializePathParam(name, pathParams[name], { style, explode });\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/** One path parameter value in its `style`; a nested member fails with the path's message. */\nfunction serializePathParam(name, value, options) {\n if (Array.isArray(value)) {\n checkFlatMembers(value, PATH_NESTED_VALUE_ERROR);\n return serializeArrayParam(name, value, options);\n }\n if (typeof value === \"object\" && !isDate(value)) {\n checkFlatMembers(value, PATH_NESTED_VALUE_ERROR);\n return serializeObjectParam(name, value, options);\n }\n if (options.style === \"matrix\") {\n return `;${serializePrimitiveParam(name, value)}`;\n }\n return options.style === \"label\" ? `.${encodeValue(value)}` : encodeValue(value);\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 * The type tag of a value (`Object.prototype.toString`): the classes of the Fetch API and the\n * built-ins name themselves with it in every realm and in other implementations such as the\n * `undici` package. `instanceof` checked the class of this realm only, so a FormData from undici\n * was JSON-encoded as `{}` (ADR-030). A runtime that lacks a class (React Native has no\n * `ReadableStream`) simply has no value with its tag.\n */\nfunction typeTag(value) {\n return Object.prototype.toString.call(value).slice(TYPE_TAG_START, TYPE_TAG_END);\n}\n\n/**\n * Whether a value is of the class `name`: an instance of this realm's global class of that name,\n * which the platform's `fetch` takes, or a value with its type tag and the methods the client uses.\n * The classes of React Native have no type tag, and the Blob of jsdom 20 no `arrayBuffer`; the tag\n * alone tells the classes of another realm or implementation (ADR-030).\n */\nfunction isClass(value, name, methods = []) {\n const type = globalThis[name];\n return (\n (typeof type === \"function\" && value instanceof type) ||\n (typeTag(value) === name && methods.every((method) => typeof value[method] === \"function\"))\n );\n}\n\n/**\n * An `Error` of any realm: an Error of another realm (an iframe, `node:vm`) has the type tag\n * `Error` but fails `instanceof`. A `DOMException` of this realm, which has its own tag, still\n * counts by `instanceof`.\n */\nfunction isError(value) {\n return isClass(value, \"Error\");\n}\n\nfunction isFormData(value) {\n return isClass(value, \"FormData\", FORM_DATA_METHODS);\n}\n\n/** A `Blob` or a `File`, of any realm. */\nfunction isBlob(value) {\n return BLOB_CLASSES.some((name) => isClass(value, name, BLOB_METHODS));\n}\n\nfunction isReadableStream(value) {\n return isClass(value, \"ReadableStream\", STREAM_METHODS);\n}\n\n/**\n * The FormData as an instance of the client's `FormData` class. A `Request` takes only its own\n * implementation's FormData: undici's read the platform's as the text `[object FormData]`. So a\n * FormData of another class, such as the one the client builds for a multipart body, is copied\n * into one of the `FormData` option, the class of the `Request` option's implementation.\n */\nfunction asFormDataOf(FormDataClass, form) {\n if (typeof FormDataClass !== \"function\" || form instanceof FormDataClass) {\n return form;\n }\n const copy = new FormDataClass();\n for (const [name, value] of form.entries()) {\n copy.append(name, value);\n }\n // The copy has a boundary of its own, so a `Content-Type` written for the original is wrong.\n copy[CLIENT_BUILT_FORM] = true;\n return copy;\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 isReadableStream(body) || typeof body?.[Symbol.asyncIterator] === \"function\";\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 isFormData(body) ||\n isBlob(body) ||\n RAW_BODY_CLASSES.some((name) => isClass(body, name)) ||\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 (isBlob(item)) {\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 return finalURL;\n }\n // The query goes before a fragment of the template (`/docs#intro`), which ends the URL, and\n // joins a query the template already has.\n const hashIndex = finalURL.indexOf(\"#\");\n const fragmentStart = hashIndex === -1 ? finalURL.length : hashIndex;\n const beforeFragment = finalURL.slice(0, fragmentStart);\n const joiner = beforeFragment.includes(\"?\") ? \"&\" : \"?\";\n return `${beforeFragment}${joiner}${search}${finalURL.slice(fragmentStart)}`;\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/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "openapi-typesafe-fetch",
|
|
3
3
|
"description": "Fast, type-safe fetch client for your OpenAPI schema. About 10.5 kB minified, 4 kB gzipped. Works with React, Vue, Svelte, or vanilla JS.",
|
|
4
|
-
"version": "1.0.0-rc.
|
|
4
|
+
"version": "1.0.0-rc.7",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Fedor Chishchin",
|
|
7
7
|
"url": "https://github.com/fedorello"
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
"express": "5.3.0",
|
|
68
68
|
"feature-fetch": "0.1.2",
|
|
69
69
|
"node-forge": "1.4.3",
|
|
70
|
-
"openapi-typesafe": "^1.0.0-rc.
|
|
70
|
+
"openapi-typesafe": "^1.0.0-rc.7",
|
|
71
71
|
"openapi-typescript-fetch": "2.2.1",
|
|
72
72
|
"typescript": "^6.0.3",
|
|
73
73
|
"undici": "7.30.2",
|
package/src/helpers.ts
CHANGED
|
@@ -266,6 +266,12 @@ export type SuccessResponse<
|
|
|
266
266
|
Media extends MediaType = MediaType,
|
|
267
267
|
> = T extends unknown ? GetResponseContent<T, Media, SuccessStatus<T>> : never;
|
|
268
268
|
|
|
269
|
+
/**
|
|
270
|
+
* The bodies of the responses `ResponseCode` in the media types `Media`. A response with a
|
|
271
|
+
* `content` map but no media type in `Media` adds nothing: it gave its whole map, so the error of
|
|
272
|
+
* `ErrorResponseJSON` for a `text/html` 500 was `{ "text/html": string }`, a body no response has.
|
|
273
|
+
* A response without `content` keeps its `content` type (`undefined` for `content?: never`).
|
|
274
|
+
*/
|
|
269
275
|
export type GetResponseContent<
|
|
270
276
|
// biome-ignore lint/suspicious/noExplicitAny: unknown rejects the generated interfaces
|
|
271
277
|
T extends Record<string | number, any>,
|
|
@@ -275,9 +281,7 @@ export type GetResponseContent<
|
|
|
275
281
|
? {
|
|
276
282
|
// biome-ignore lint/suspicious/noExplicitAny: unknown rejects interface content types
|
|
277
283
|
[K in ResponseCode]: T[K]["content"] extends Record<string, any>
|
|
278
|
-
? FilterKeys<T[K]["content"], Media>
|
|
279
|
-
? T[K]["content"]
|
|
280
|
-
: FilterKeys<T[K]["content"], Media>
|
|
284
|
+
? FilterKeys<T[K]["content"], Media>
|
|
281
285
|
: K extends keyof T
|
|
282
286
|
? T[K]["content"]
|
|
283
287
|
: never;
|
package/src/index.js
CHANGED
|
@@ -612,10 +612,7 @@ function headerParamValue(value) {
|
|
|
612
612
|
if (value === null || typeof value !== "object" || isDate(value)) {
|
|
613
613
|
return valueText(value);
|
|
614
614
|
}
|
|
615
|
-
|
|
616
|
-
if (Object.values(value).some((member) => isNestedValue(member))) {
|
|
617
|
-
throw new Error(`${NESTED_VALUE_ERROR} in header parameters.`);
|
|
618
|
-
}
|
|
615
|
+
checkFlatMembers(value, HEADER_NESTED_VALUE_ERROR);
|
|
619
616
|
const serialize = Array.isArray(value) ? serializeArrayParam : serializeObjectParam;
|
|
620
617
|
return serialize("", value, HEADER_PARAM_STYLE) || undefined;
|
|
621
618
|
}
|
|
@@ -632,11 +629,31 @@ function serializeHeaderParams(header) {
|
|
|
632
629
|
/** The start of the error for a nested object or array in a parameter. */
|
|
633
630
|
const NESTED_VALUE_ERROR = "Deeply-nested arrays/objects aren’t supported";
|
|
634
631
|
|
|
632
|
+
/** A header has no serializer option, so its error names no hook. */
|
|
633
|
+
const HEADER_NESTED_VALUE_ERROR = `${NESTED_VALUE_ERROR} in header parameters.`;
|
|
634
|
+
|
|
635
|
+
const PATH_HOOK_HINT = "Provide your own `pathSerializer()` to handle these.";
|
|
636
|
+
const PATH_NESTED_VALUE_ERROR = `${NESTED_VALUE_ERROR} in path parameters. ${PATH_HOOK_HINT}`;
|
|
637
|
+
|
|
638
|
+
const QUERY_HOOK_HINT = "Provide your own `querySerializer()` to handle these.";
|
|
639
|
+
const QUERY_NESTED_VALUE_ERROR = `${NESTED_VALUE_ERROR}. ${QUERY_HOOK_HINT}`;
|
|
640
|
+
|
|
635
641
|
/** Whether a value is an object or an array a parameter cannot hold as a member. */
|
|
636
642
|
function isNestedValue(value) {
|
|
637
643
|
return Boolean(value) && typeof value === "object" && !isDate(value);
|
|
638
644
|
}
|
|
639
645
|
|
|
646
|
+
/**
|
|
647
|
+
* Throw `message` when an array or object parameter has a nested member. Headers and path
|
|
648
|
+
* parameters check first: the check in `encodeValue` names `querySerializer()`, the hook of the
|
|
649
|
+
* query only.
|
|
650
|
+
*/
|
|
651
|
+
function checkFlatMembers(value, message) {
|
|
652
|
+
if (Object.values(value).some((member) => isNestedValue(member))) {
|
|
653
|
+
throw new Error(message);
|
|
654
|
+
}
|
|
655
|
+
}
|
|
656
|
+
|
|
640
657
|
/**
|
|
641
658
|
* One parameter value (or object key), percent-encoded unless `allowReserved`. A nested object or
|
|
642
659
|
* array has no standard encoding: as an array item or an object value it was sent as
|
|
@@ -644,9 +661,7 @@ function isNestedValue(value) {
|
|
|
644
661
|
*/
|
|
645
662
|
function encodeValue(value, allowReserved) {
|
|
646
663
|
if (isNestedValue(value)) {
|
|
647
|
-
throw new Error(
|
|
648
|
-
`${NESTED_VALUE_ERROR}. Provide your own \`querySerializer()\` to handle these.`,
|
|
649
|
-
);
|
|
664
|
+
throw new Error(QUERY_NESTED_VALUE_ERROR);
|
|
650
665
|
}
|
|
651
666
|
const text = valueText(value);
|
|
652
667
|
return allowReserved === true ? text : encodeURIComponent(text);
|
|
@@ -831,18 +846,27 @@ export function createQuerySerializer(options) {
|
|
|
831
846
|
/**
|
|
832
847
|
* The request's query options over the client's. `array` and `object` merge by key, since each of
|
|
833
848
|
* `style` and `explode` may be left out: `{ array: { explode: false } }` dropped the client's
|
|
834
|
-
* `pipeDelimited` style (ADR-041).
|
|
849
|
+
* `pipeDelimited` style (ADR-041). An option set to `undefined` counts as left out.
|
|
835
850
|
*/
|
|
836
851
|
function mergeQueryOptions(clientOptions, requestOptions) {
|
|
837
852
|
const base = typeof clientOptions === "function" ? {} : (clientOptions ?? {});
|
|
838
853
|
return {
|
|
839
854
|
...base,
|
|
840
|
-
...requestOptions,
|
|
841
|
-
array: { ...base.array, ...requestOptions.array },
|
|
842
|
-
object: { ...base.object, ...requestOptions.object },
|
|
855
|
+
...definedOptions(requestOptions),
|
|
856
|
+
array: { ...base.array, ...definedOptions(requestOptions.array) },
|
|
857
|
+
object: { ...base.object, ...definedOptions(requestOptions.object) },
|
|
843
858
|
};
|
|
844
859
|
}
|
|
845
860
|
|
|
861
|
+
/**
|
|
862
|
+
* The options that are not `undefined`. A wrapper that forwards its own optional option passes
|
|
863
|
+
* `{ explode: undefined }`, which compiles, and a spread of it replaced the client's value.
|
|
864
|
+
*/
|
|
865
|
+
function definedOptions(options) {
|
|
866
|
+
const entries = Object.entries(options ?? {}).filter(([, value]) => value !== undefined);
|
|
867
|
+
return Object.fromEntries(entries);
|
|
868
|
+
}
|
|
869
|
+
|
|
846
870
|
/**
|
|
847
871
|
* Handle different OpenAPI 3.x serialization styles
|
|
848
872
|
* @type {import("./index.js").defaultPathSerializer}
|
|
@@ -872,17 +896,7 @@ export function defaultPathSerializer(pathname, pathParams) {
|
|
|
872
896
|
if (!pathParams || pathParams[name] === undefined || pathParams[name] === null) {
|
|
873
897
|
continue;
|
|
874
898
|
}
|
|
875
|
-
const
|
|
876
|
-
let serialized;
|
|
877
|
-
if (Array.isArray(value)) {
|
|
878
|
-
serialized = serializeArrayParam(name, value, { style, explode });
|
|
879
|
-
} else if (typeof value === "object" && !isDate(value)) {
|
|
880
|
-
serialized = serializeObjectParam(name, value, { style, explode });
|
|
881
|
-
} else if (style === "matrix") {
|
|
882
|
-
serialized = `;${serializePrimitiveParam(name, value)}`;
|
|
883
|
-
} else {
|
|
884
|
-
serialized = style === "label" ? `.${encodeValue(value)}` : encodeValue(value);
|
|
885
|
-
}
|
|
899
|
+
const serialized = serializePathParam(name, pathParams[name], { style, explode });
|
|
886
900
|
// A function: a string replacement reads `$'`, `$&` and the like, which object keys keep.
|
|
887
901
|
nextURL = nextURL.replace(match, () => serialized);
|
|
888
902
|
}
|
|
@@ -890,6 +904,22 @@ export function defaultPathSerializer(pathname, pathParams) {
|
|
|
890
904
|
return nextURL;
|
|
891
905
|
}
|
|
892
906
|
|
|
907
|
+
/** One path parameter value in its `style`; a nested member fails with the path's message. */
|
|
908
|
+
function serializePathParam(name, value, options) {
|
|
909
|
+
if (Array.isArray(value)) {
|
|
910
|
+
checkFlatMembers(value, PATH_NESTED_VALUE_ERROR);
|
|
911
|
+
return serializeArrayParam(name, value, options);
|
|
912
|
+
}
|
|
913
|
+
if (typeof value === "object" && !isDate(value)) {
|
|
914
|
+
checkFlatMembers(value, PATH_NESTED_VALUE_ERROR);
|
|
915
|
+
return serializeObjectParam(name, value, options);
|
|
916
|
+
}
|
|
917
|
+
if (options.style === "matrix") {
|
|
918
|
+
return `;${serializePrimitiveParam(name, value)}`;
|
|
919
|
+
}
|
|
920
|
+
return options.style === "label" ? `.${encodeValue(value)}` : encodeValue(value);
|
|
921
|
+
}
|
|
922
|
+
|
|
893
923
|
/**
|
|
894
924
|
* Throw when the path parameters moved the request. Only the path part (before `?` or `#`) from the
|
|
895
925
|
* segment of the first parameter on is checked: the text before it is the `baseUrl` and the
|