openapi-typesafe-fetch 1.0.0-rc.1 → 1.0.0-rc.3
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/README.md +10 -3
- package/dist/index.cjs +53 -32
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +184 -54
- package/dist/index.d.mts +184 -54
- package/dist/index.d.ts +184 -54
- package/dist/index.mjs +53 -32
- package/dist/index.mjs.map +1 -1
- package/package.json +10 -9
- package/src/index.d.ts +183 -53
- package/src/index.js +101 -44
package/README.md
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
# openapi-typesafe-fetch
|
|
2
2
|
|
|
3
|
-
A type-safe `fetch` client for types generated by [`openapi-typesafe`](../openapi-typesafe). About 8 kB minified
|
|
4
|
-
|
|
3
|
+
A type-safe `fetch` client for types generated by [`openapi-typesafe`](../openapi-typesafe). About 8.7 kB minified
|
|
4
|
+
(3.4 kB gzipped), no runtime dependencies, works in browsers, Node.js, Bun and Deno, and with React, Vue, Svelte or plain JavaScript.
|
|
5
5
|
|
|
6
6
|
A maintained, drop-in successor to `openapi-fetch` (see the [repository README](../../README.md)).
|
|
7
7
|
|
|
8
|
-
> **
|
|
8
|
+
> **Release candidate.** The current version is a 1.0.0 release candidate (`1.0.0-rc.N`);
|
|
9
|
+
> names and output can still change before 1.0.0.
|
|
9
10
|
|
|
10
11
|
## Setup
|
|
11
12
|
|
|
@@ -49,6 +50,12 @@ for non-JSON responses, and a path-based client (`createPathBasedClient`).
|
|
|
49
50
|
+ import createClient from "openapi-typesafe-fetch";
|
|
50
51
|
```
|
|
51
52
|
|
|
53
|
+
## Versioning
|
|
54
|
+
|
|
55
|
+
Semantic versioning from 1.0.0, with one version for all openapi-typesafe packages. What the
|
|
56
|
+
version promises, and what may grow in a minor release, is listed under
|
|
57
|
+
[Versioning](https://github.com/openapi-typesafe/openapi-typesafe/blob/main/docs/compatibility.md#versioning).
|
|
58
|
+
|
|
52
59
|
## License
|
|
53
60
|
|
|
54
61
|
[MIT](./LICENSE)
|
package/dist/index.cjs
CHANGED
|
@@ -4,8 +4,9 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
const PATH_PARAM_RE = /\{[^{}]+\}/g;
|
|
6
6
|
const DOT_SEGMENT_RE = /(^|\/)\.\.?(\/|$)/;
|
|
7
|
+
const QUERY_OR_FRAGMENT_RE = /[?#]/;
|
|
7
8
|
const JSON_MEDIA_TYPE_RE = /json/i;
|
|
8
|
-
const
|
|
9
|
+
const FORM_MEDIA_TYPE_RE = /^application\/x-www-form-urlencoded(;|$)/i;
|
|
9
10
|
const MULTIPART_MEDIA_TYPE_RE = /^multipart\/form-data(;|$)/i;
|
|
10
11
|
const NESTED_FORM_VALUE_MESSAGE = "Nested form values need your own `bodySerializer()`.";
|
|
11
12
|
const BOUNDARY_PARAMETER_RE = /;\s*boundary=/i;
|
|
@@ -61,11 +62,12 @@ function createClient(clientOptions) {
|
|
|
61
62
|
const pathSerializer = requestPathSerializer || globalPathSerializer || defaultPathSerializer;
|
|
62
63
|
const serializedBody = body === void 0 ? void 0 : bodySerializer(
|
|
63
64
|
body,
|
|
64
|
-
// Note: we declare mergeHeaders() both here and below because it’s a bit of a
|
|
65
|
-
// bodySerializer() needs all headers so we aren’t dropping
|
|
66
|
-
// the result of this ALSO sets the lowest-priority
|
|
67
|
-
// setting the content-type at the very
|
|
68
|
-
// Lastly, based on the way headers work, it’s not a simple
|
|
65
|
+
// Note: we declare mergeHeaders() both here and below because it’s a bit of a
|
|
66
|
+
// chicken-or-egg situation: bodySerializer() needs all headers so we aren’t dropping
|
|
67
|
+
// ones set by the user, however, the result of this ALSO sets the lowest-priority
|
|
68
|
+
// content-type header. So we re-merge below, setting the content-type at the very
|
|
69
|
+
// beginning to be overwritten. Lastly, based on the way headers work, it’s not a simple
|
|
70
|
+
// “present-or-not” check because null intentionally un-sets headers.
|
|
69
71
|
mergeHeaders(baseHeaders, headers, params.header)
|
|
70
72
|
);
|
|
71
73
|
const finalHeaders = mergeHeaders(
|
|
@@ -92,7 +94,12 @@ function createClient(clientOptions) {
|
|
|
92
94
|
let id;
|
|
93
95
|
let options;
|
|
94
96
|
let request = new Request(
|
|
95
|
-
createFinalURL(schemaPath, {
|
|
97
|
+
createFinalURL(schemaPath, {
|
|
98
|
+
baseUrl: finalBaseUrl,
|
|
99
|
+
params,
|
|
100
|
+
querySerializer,
|
|
101
|
+
pathSerializer
|
|
102
|
+
}),
|
|
96
103
|
requestInit
|
|
97
104
|
);
|
|
98
105
|
let response;
|
|
@@ -127,7 +134,9 @@ function createClient(clientOptions) {
|
|
|
127
134
|
response = result;
|
|
128
135
|
break;
|
|
129
136
|
} else {
|
|
130
|
-
throw new Error(
|
|
137
|
+
throw new Error(
|
|
138
|
+
"onRequest: must return new Request() or Response() when modifying the request"
|
|
139
|
+
);
|
|
131
140
|
}
|
|
132
141
|
}
|
|
133
142
|
}
|
|
@@ -183,7 +192,9 @@ function createClient(clientOptions) {
|
|
|
183
192
|
});
|
|
184
193
|
if (result) {
|
|
185
194
|
if (!isResponse(result)) {
|
|
186
|
-
throw new Error(
|
|
195
|
+
throw new Error(
|
|
196
|
+
"onResponse: must return new Response() when modifying the response"
|
|
197
|
+
);
|
|
187
198
|
}
|
|
188
199
|
response = result;
|
|
189
200
|
}
|
|
@@ -266,7 +277,9 @@ function createClient(clientOptions) {
|
|
|
266
277
|
continue;
|
|
267
278
|
}
|
|
268
279
|
if (typeof m !== "object" || !("onRequest" in m || "onResponse" in m || "onError" in m)) {
|
|
269
|
-
throw new Error(
|
|
280
|
+
throw new Error(
|
|
281
|
+
"Middleware must be an object with one of `onRequest()`, `onResponse()` or `onError()`"
|
|
282
|
+
);
|
|
270
283
|
}
|
|
271
284
|
globalMiddlewares.push(m);
|
|
272
285
|
}
|
|
@@ -375,7 +388,10 @@ function serializeObjectParam(name, value, options) {
|
|
|
375
388
|
}[options.style] || "&";
|
|
376
389
|
if (options.style !== "deepObject" && options.explode === false) {
|
|
377
390
|
for (const k in value) {
|
|
378
|
-
values.push(
|
|
391
|
+
values.push(
|
|
392
|
+
encodeName(k),
|
|
393
|
+
options.allowReserved === true ? value[k] : encodeURIComponent(value[k])
|
|
394
|
+
);
|
|
379
395
|
}
|
|
380
396
|
const final2 = values.join(",");
|
|
381
397
|
switch (options.style) {
|
|
@@ -497,35 +513,44 @@ function defaultPathSerializer(pathname, pathParams) {
|
|
|
497
513
|
continue;
|
|
498
514
|
}
|
|
499
515
|
const value = pathParams[name];
|
|
516
|
+
let serialized;
|
|
500
517
|
if (Array.isArray(value)) {
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
if (
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
if (style === "matrix") {
|
|
509
|
-
nextURL = nextURL.replace(match, `;${serializePrimitiveParam(name, value)}`);
|
|
510
|
-
continue;
|
|
518
|
+
serialized = serializeArrayParam(name, value, { style, explode });
|
|
519
|
+
} else if (typeof value === "object") {
|
|
520
|
+
serialized = serializeObjectParam(name, value, { style, explode });
|
|
521
|
+
} else if (style === "matrix") {
|
|
522
|
+
serialized = `;${serializePrimitiveParam(name, value)}`;
|
|
523
|
+
} else {
|
|
524
|
+
serialized = style === "label" ? `.${encodeURIComponent(value)}` : encodeURIComponent(value);
|
|
511
525
|
}
|
|
512
|
-
nextURL = nextURL.replace(match,
|
|
526
|
+
nextURL = nextURL.replace(match, () => serialized);
|
|
513
527
|
}
|
|
514
|
-
|
|
528
|
+
const path = nextURL.split(QUERY_OR_FRAGMENT_RE, 1)[0];
|
|
529
|
+
if (DOT_SEGMENT_RE.test(path)) {
|
|
515
530
|
throw new Error(`Dot path segment in ${nextURL}`);
|
|
516
531
|
}
|
|
532
|
+
if (path.startsWith("//")) {
|
|
533
|
+
throw new Error(`Empty first path segment in ${nextURL}`);
|
|
534
|
+
}
|
|
517
535
|
return nextURL;
|
|
518
536
|
}
|
|
519
537
|
function isRawBody(body) {
|
|
520
538
|
return body instanceof FormData || body instanceof Blob || body instanceof URLSearchParams || body instanceof ArrayBuffer || ArrayBuffer.isView(body);
|
|
521
539
|
}
|
|
522
540
|
function formBody(body) {
|
|
523
|
-
|
|
541
|
+
if (!body || typeof body !== "object" || Array.isArray(body)) {
|
|
542
|
+
return new URLSearchParams(body).toString();
|
|
543
|
+
}
|
|
544
|
+
const form = new URLSearchParams();
|
|
545
|
+
for (const [name, value] of Object.entries(body)) {
|
|
524
546
|
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
525
547
|
throw new Error(NESTED_FORM_VALUE_MESSAGE);
|
|
526
548
|
}
|
|
549
|
+
if (value != null) {
|
|
550
|
+
form.append(name, value);
|
|
551
|
+
}
|
|
527
552
|
}
|
|
528
|
-
return
|
|
553
|
+
return form.toString();
|
|
529
554
|
}
|
|
530
555
|
function multipartBody(body) {
|
|
531
556
|
const formData = new FormData();
|
|
@@ -546,12 +571,8 @@ function defaultBodySerializer(body, headers) {
|
|
|
546
571
|
if (isRawBody(body)) {
|
|
547
572
|
return body;
|
|
548
573
|
}
|
|
549
|
-
const contentType = headers ? (
|
|
550
|
-
|
|
551
|
-
// `get` that is not an instance of this realm's Function (upstream #2637).
|
|
552
|
-
typeof headers.get === "function" ? headers.get("Content-Type") ?? headers.get("content-type") : headers["Content-Type"] ?? headers["content-type"]
|
|
553
|
-
) : void 0;
|
|
554
|
-
if (contentType === FORM_MEDIA_TYPE) {
|
|
574
|
+
const contentType = headers && (isHeaders(headers) ? headers : mergeHeaders(headers)).get("Content-Type");
|
|
575
|
+
if (FORM_MEDIA_TYPE_RE.test(contentType)) {
|
|
555
576
|
return formBody(body);
|
|
556
577
|
}
|
|
557
578
|
if (body && typeof body === "object" && MULTIPART_MEDIA_TYPE_RE.test(contentType)) {
|
|
@@ -582,7 +603,7 @@ function mergeHeaders(...allHeaders) {
|
|
|
582
603
|
if (!h || typeof h !== "object") {
|
|
583
604
|
continue;
|
|
584
605
|
}
|
|
585
|
-
const iterator = isHeaders(h) ? h.entries() : Object.entries(h);
|
|
606
|
+
const iterator = isHeaders(h) ? h.entries() : Symbol.iterator in h ? new Headers(h).entries() : Object.entries(h);
|
|
586
607
|
for (const [k, v] of iterator) {
|
|
587
608
|
if (v === null) {
|
|
588
609
|
finalHeaders.delete(k);
|
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/** A `.` or `..` path segment; URLs resolve it, so a parameter value could leave its path (#2483). */\nconst DOT_SEGMENT_RE = /(^|\\/)\\.\\.?(\\/|$)/;\n/** Any JSON media type: `application/json`, `application/problem+json`, with or without parameters. */\nconst JSON_MEDIA_TYPE_RE = /json/i;\nconst FORM_MEDIA_TYPE = \"application/x-www-form-urlencoded\";\n/** `multipart/form-data`, with or without parameters. */\nconst MULTIPART_MEDIA_TYPE_RE = /^multipart\\/form-data(;|$)/i;\nconst NESTED_FORM_VALUE_MESSAGE = \"Nested form values need your own `bodySerializer()`.\";\n/** The `boundary` parameter of a multipart `Content-Type`; only the platform knows its value. */\nconst BOUNDARY_PARAMETER_RE = /;\\s*boundary=/i;\n\n/**\n * Whether `fetch` is Node.js undici, which takes `requestInitExt` as a second argument. A Node.js\n * version check is not needed: every supported Node.js (`engines`) ships undici.\n */\nconst supportsRequestInitExt = () => {\n return typeof process === \"object\" && process.versions?.undici;\n};\n\n/**\n * The number of request ids handed out. It is shared by all clients on purpose: one middleware can\n * be used by several clients, and it tells their requests apart by id.\n */\nlet requestIdCount = 0;\n\n/**\n * Returns a cheap, non-cryptographically-secure ID, unique within the process.\n * A counter, not `Math.random()`: Next.js prerendering rejects random values read before uncached\n * data (upstream #2486, #2763). The name stays for compatibility.\n */\nexport function randomID() {\n requestIdCount += 1;\n return requestIdCount.toString(36);\n}\n\n/**\n * Create an openapi-typesafe-fetch client.\n * @type {import(\"./index.js\").default}\n */\nexport default function createClient(clientOptions) {\n let {\n baseUrl = \"\",\n Request: CustomRequest = globalThis.Request,\n fetch: baseFetch = globalThis.fetch,\n querySerializer: globalQuerySerializer,\n bodySerializer: globalBodySerializer,\n pathSerializer: globalPathSerializer,\n headers: baseHeaders,\n requestInitExt = undefined,\n ...baseOptions\n } = { ...clientOptions };\n requestInitExt = supportsRequestInitExt() ? requestInitExt : undefined;\n baseUrl = removeTrailingSlash(baseUrl);\n const globalMiddlewares = [];\n\n /**\n * Per-request fetch (keeps settings created in createClient()\n * @param {T} url\n * @param {import('./index.js').FetchOptions<T>} fetchOptions\n */\n async function coreFetch(schemaPath, fetchOptions) {\n const {\n baseUrl: localBaseUrl,\n fetch = baseFetch,\n Request = CustomRequest,\n headers,\n params = {},\n parseAs = \"json\",\n querySerializer: requestQuerySerializer,\n bodySerializer = globalBodySerializer ?? defaultBodySerializer,\n pathSerializer: requestPathSerializer,\n body,\n middleware: requestMiddlewares = [],\n ...init\n } = fetchOptions || {};\n let finalBaseUrl = baseUrl;\n if (localBaseUrl) {\n finalBaseUrl = removeTrailingSlash(localBaseUrl) ?? baseUrl;\n }\n\n let querySerializer =\n typeof globalQuerySerializer === \"function\"\n ? globalQuerySerializer\n : createQuerySerializer(globalQuerySerializer);\n if (requestQuerySerializer) {\n querySerializer =\n typeof requestQuerySerializer === \"function\"\n ? requestQuerySerializer\n : createQuerySerializer({\n ...(typeof globalQuerySerializer === \"object\" ? globalQuerySerializer : {}),\n ...requestQuerySerializer,\n });\n }\n\n const pathSerializer = requestPathSerializer || globalPathSerializer || defaultPathSerializer;\n\n const serializedBody =\n body === undefined\n ? undefined\n : bodySerializer(\n body,\n // Note: we declare mergeHeaders() both here and below because it’s a bit of a chicken-or-egg situation:\n // bodySerializer() needs all headers so we aren’t dropping ones set by the user, however,\n // the result of this ALSO sets the lowest-priority content-type header. So we re-merge below,\n // setting the content-type at the very beginning to be overwritten.\n // Lastly, based on the way headers work, it’s not a simple “present-or-not” check becauase null intentionally un-sets headers.\n mergeHeaders(baseHeaders, headers, params.header),\n );\n const finalHeaders = mergeHeaders(\n // with no body, we should not to set Content-Type\n serializedBody === undefined ||\n // a raw body (FormData, Blob, ...) gets its Content-Type from the platform, or none\n isRawBody(serializedBody)\n ? {}\n : {\n \"Content-Type\": \"application/json\",\n },\n baseHeaders,\n headers,\n params.header,\n );\n // `fetch` sends a FormData as multipart with a boundary only it knows. A `Content-Type` without\n // that boundary, set by hand, replaced the platform's, and the server could not split the parts\n // (upstream #1214), so it goes and the platform sets its own (ADR-013, decision 10).\n if (serializedBody instanceof FormData && !BOUNDARY_PARAMETER_RE.test(finalHeaders.get(\"Content-Type\"))) {\n finalHeaders.delete(\"Content-Type\");\n }\n\n // Client level middleware take priority over request-level middleware\n const finalMiddlewares = [...globalMiddlewares, ...requestMiddlewares];\n\n const requestInit = {\n redirect: \"follow\",\n ...baseOptions,\n ...init,\n body: serializedBody,\n headers: finalHeaders,\n };\n\n let id;\n let options;\n let request = new Request(\n createFinalURL(schemaPath, { baseUrl: finalBaseUrl, params, querySerializer, pathSerializer }),\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(\"onRequest: must return new Request() or Response() when modifying the request\");\n }\n }\n }\n }\n }\n\n if (!response) {\n // fetch!\n try {\n response = await fetch(request, requestInitExt);\n } catch (error) {\n let errorAfterMiddleware = error;\n // middleware (error)\n // execute in reverse-array order (first priority gets last transform)\n if (finalMiddlewares.length) {\n for (let i = finalMiddlewares.length - 1; i >= 0; i--) {\n const m = finalMiddlewares[i];\n if (m && typeof m === \"object\" && typeof m.onError === \"function\") {\n const result = await m.onError({\n request,\n error: errorAfterMiddleware,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n // if error is handled by returning a response, skip remaining middleware\n if (isResponse(result)) {\n errorAfterMiddleware = undefined;\n response = result;\n break;\n }\n\n if (result instanceof Error) {\n errorAfterMiddleware = result;\n continue;\n }\n\n throw new Error(\"onError: must return new Response() or instance of Error\");\n }\n }\n }\n }\n\n // rethrow error if not handled by middleware\n if (errorAfterMiddleware) {\n throw errorAfterMiddleware;\n }\n }\n\n // middleware (response)\n // execute in reverse-array order (first priority gets last transform)\n if (finalMiddlewares.length) {\n for (let i = finalMiddlewares.length - 1; i >= 0; i--) {\n const m = finalMiddlewares[i];\n if (m && typeof m === \"object\" && typeof m.onResponse === \"function\") {\n const result = await m.onResponse({\n request,\n response,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n if (!isResponse(result)) {\n throw new Error(\"onResponse: must return new Response() when modifying the response\");\n }\n response = result;\n }\n }\n }\n }\n }\n\n const contentLength = response.headers.get(\"Content-Length\");\n // handle empty content\n if (\n response.status === 204 ||\n request.method === \"HEAD\" ||\n (contentLength === \"0\" && !response.headers.get(\"Transfer-Encoding\")?.includes(\"chunked\"))\n ) {\n return response.ok ? { data: undefined, response } : { error: undefined, response };\n }\n\n // parse response (falling back to .text() when necessary)\n if (response.ok) {\n const getResponseData = async () => {\n // if \"stream\", skip parsing entirely\n if (parseAs === \"stream\") {\n return response.body;\n }\n\n if (parseAs === \"json\" && !contentLength) {\n // use text() when no content-length is provided to avoid errors parsing empty bodies (200 with no content)\n const raw = await response.text();\n return raw ? JSON.parse(raw) : undefined;\n }\n\n return await response[parseAs]();\n };\n return { data: await getResponseData(), response };\n }\n\n // handle errors (use text() when no content-length to safely handle empty bodies from proxies)\n const raw = await response.text();\n if (!raw) {\n // empty error body - return undefined to be consistent with status 204 handling\n return { error: undefined, response };\n }\n let error = raw;\n try {\n error = JSON.parse(raw); // attempt to parse as JSON\n } catch {\n // noop - keep as raw text\n }\n return { error, response };\n }\n\n return {\n request(method, url, init) {\n return coreFetch(url, { ...init, method: method.toUpperCase() });\n },\n /** Call a GET endpoint */\n GET(url, init) {\n return coreFetch(url, { ...init, method: \"GET\" });\n },\n /** Call a PUT endpoint */\n PUT(url, init) {\n return coreFetch(url, { ...init, method: \"PUT\" });\n },\n /** Call a POST endpoint */\n POST(url, init) {\n return coreFetch(url, { ...init, method: \"POST\" });\n },\n /** Call a DELETE endpoint */\n DELETE(url, init) {\n return coreFetch(url, { ...init, method: \"DELETE\" });\n },\n /** Call a OPTIONS endpoint */\n OPTIONS(url, init) {\n return coreFetch(url, { ...init, method: \"OPTIONS\" });\n },\n /** Call a HEAD endpoint */\n HEAD(url, init) {\n return coreFetch(url, { ...init, method: \"HEAD\" });\n },\n /** Call a PATCH endpoint */\n PATCH(url, init) {\n return coreFetch(url, { ...init, method: \"PATCH\" });\n },\n /** Call a TRACE endpoint */\n TRACE(url, init) {\n return coreFetch(url, { ...init, method: \"TRACE\" });\n },\n /** Call a QUERY endpoint (OpenAPI 3.2) */\n QUERY(url, init) {\n return coreFetch(url, { ...init, method: \"QUERY\" });\n },\n /** Register middleware */\n use(...middleware) {\n for (const m of middleware) {\n if (!m) {\n continue;\n }\n if (typeof m !== \"object\" || !(\"onRequest\" in m || \"onResponse\" in m || \"onError\" in m)) {\n throw new Error(\"Middleware must be an object with one of `onRequest()`, `onResponse()` or `onError()`\");\n }\n globalMiddlewares.push(m);\n }\n },\n /** Unregister middleware */\n eject(...middleware) {\n for (const m of middleware) {\n const i = globalMiddlewares.indexOf(m);\n if (i !== -1) {\n globalMiddlewares.splice(i, 1);\n }\n }\n },\n };\n}\n\nclass PathCallForwarder {\n constructor(client, url) {\n this.client = client;\n this.url = url;\n }\n\n GET = (init) => {\n return this.client.GET(this.url, init);\n };\n PUT = (init) => {\n return this.client.PUT(this.url, init);\n };\n POST = (init) => {\n return this.client.POST(this.url, init);\n };\n DELETE = (init) => {\n return this.client.DELETE(this.url, init);\n };\n OPTIONS = (init) => {\n return this.client.OPTIONS(this.url, init);\n };\n HEAD = (init) => {\n return this.client.HEAD(this.url, init);\n };\n PATCH = (init) => {\n return this.client.PATCH(this.url, init);\n };\n TRACE = (init) => {\n return this.client.TRACE(this.url, init);\n };\n QUERY = (init) => {\n return this.client.QUERY(this.url, init);\n };\n}\n\nclass PathClientProxyHandler {\n constructor() {\n this.client = null;\n }\n\n // Assume the property is an URL.\n get(coreClient, url) {\n const forwarder = new PathCallForwarder(coreClient, url);\n this.client[url] = forwarder;\n return forwarder;\n }\n}\n\n/**\n * Wrap openapi-typesafe-fetch client to support a path based API.\n * @type {import(\"./index.js\").wrapAsPathBasedClient}\n */\nexport function wrapAsPathBasedClient(coreClient) {\n const handler = new PathClientProxyHandler();\n const proxy = new Proxy(coreClient, handler);\n\n // Put the proxy on the prototype chain of the actual client.\n // This means if we do not have a memoized PathCallForwarder,\n // we fall back to the proxy to synthesize it.\n // However, the proxy itself is not on the hot-path (if we fetch the same\n // endpoint multiple times, only the first call will hit the proxy).\n function Client() {}\n Client.prototype = proxy;\n\n const client = new Client();\n\n // Feed the client back to the proxy handler so it can store the generated\n // PathCallForwarder.\n handler.client = client;\n\n return client;\n}\n\n/**\n * Convenience method to an openapi-typesafe-fetch path based client.\n * Strictly equivalent to `wrapAsPathBasedClient(createClient(...))`.\n * @type {import(\"./index.js\").createPathBasedClient}\n */\nexport function createPathBasedClient(clientOptions) {\n return wrapAsPathBasedClient(createClient(clientOptions));\n}\n\n// utils\n\n// Fetch API objects are recognized by the members the client uses, not by `instanceof`: that is\n// bound to one realm's class, and a Request from the `undici` package, another realm (an iframe,\n// an Electron host) or a custom `Request` option is not an instance of it (upstream #1847). The\n// same rule as for headers in `defaultBodySerializer` (upstream #2637).\n\nfunction isHeaders(value) {\n return typeof value?.get === \"function\";\n}\n\nfunction isRequest(value) {\n return typeof value?.method === \"string\" && typeof value.url === \"string\" && isHeaders(value.headers);\n}\n\nfunction isResponse(value) {\n return typeof value?.status === \"number\" && isHeaders(value.headers);\n}\n\n// Parameter names and object keys can be data (an `additionalProperties` object). They are encoded\n// like values, except for characters common in names that do not split a URL (ADR-013, decision 9).\nconst KEPT_NAME_ESCAPES = /%(?:5B|5D|24|3A|40|2C)/g;\n\nfunction encodeName(name) {\n return encodeURIComponent(name).replace(KEPT_NAME_ESCAPES, decodeURIComponent);\n}\n\n/**\n * Serialize primitive param values\n * @type {import(\"./index.js\").serializePrimitiveParam}\n */\nexport function serializePrimitiveParam(name, value, options) {\n if (value === undefined || value === null) {\n return \"\";\n }\n if (typeof value === \"object\") {\n throw new Error(\n \"Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.\",\n );\n }\n return `${name}=${options?.allowReserved === true ? value : encodeURIComponent(value)}`;\n}\n\n/**\n * Serialize object param (shallow only)\n * @type {import(\"./index.js\").serializeObjectParam}\n */\nexport function serializeObjectParam(name, value, options) {\n if (!value || typeof value !== \"object\") {\n return \"\";\n }\n const values = [];\n const joiner =\n {\n simple: \",\",\n label: \".\",\n matrix: \";\",\n }[options.style] || \"&\";\n\n // explode: false\n if (options.style !== \"deepObject\" && options.explode === false) {\n for (const k in value) {\n values.push(encodeName(k), options.allowReserved === true ? value[k] : encodeURIComponent(value[k]));\n }\n const final = values.join(\",\"); // note: values are always joined by comma in explode: false (but joiner can prefix)\n switch (options.style) {\n case \"form\": {\n return `${name}=${final}`;\n }\n case \"label\": {\n return `.${final}`;\n }\n case \"matrix\": {\n return `;${name}=${final}`;\n }\n default: {\n return final;\n }\n }\n }\n\n // explode: true\n for (const k in value) {\n const finalName = options.style === \"deepObject\" ? `${name}[${encodeName(k)}]` : encodeName(k);\n values.push(serializePrimitiveParam(finalName, value[k], options));\n }\n const final = values.join(joiner);\n return options.style === \"label\" || options.style === \"matrix\" ? `${joiner}${final}` : final;\n}\n\n/**\n * Serialize array param (shallow only)\n * @type {import(\"./index.js\").serializeArrayParam}\n */\nexport function serializeArrayParam(name, value, options) {\n if (!Array.isArray(value)) {\n return \"\";\n }\n\n // explode: false\n if (options.explode === false) {\n const joiner = { form: \",\", spaceDelimited: \"%20\", pipeDelimited: \"|\" }[options.style] || \",\"; // note: for arrays, joiners vary wildly based on style + explode behavior\n const final = (options.allowReserved === true ? value : value.map((v) => encodeURIComponent(v))).join(joiner);\n switch (options.style) {\n case \"simple\": {\n return final;\n }\n case \"label\": {\n return `.${final}`;\n }\n case \"matrix\": {\n return `;${name}=${final}`;\n }\n // case \"spaceDelimited\":\n // case \"pipeDelimited\":\n default: {\n return `${name}=${final}`;\n }\n }\n }\n\n // explode: true\n const joiner = { simple: \",\", label: \".\", matrix: \";\" }[options.style] || \"&\";\n const values = [];\n for (const v of value) {\n if (options.style === \"simple\" || options.style === \"label\") {\n values.push(options.allowReserved === true ? v : encodeURIComponent(v));\n } else {\n values.push(serializePrimitiveParam(name, v, options));\n }\n }\n return options.style === \"label\" || options.style === \"matrix\"\n ? `${joiner}${values.join(joiner)}`\n : values.join(joiner);\n}\n\n/**\n * Serialize query params to string\n * @type {import(\"./index.js\").createQuerySerializer}\n */\nexport function createQuerySerializer(options) {\n return function querySerializer(queryParams) {\n const search = [];\n if (queryParams && typeof queryParams === \"object\") {\n for (const key in queryParams) {\n const value = queryParams[key];\n const name = encodeName(key);\n if (value === undefined || value === null) {\n continue;\n }\n if (Array.isArray(value)) {\n if (value.length === 0) {\n continue;\n }\n search.push(\n serializeArrayParam(name, value, {\n style: \"form\",\n explode: true,\n ...options?.array,\n allowReserved: options?.allowReserved || false,\n }),\n );\n continue;\n }\n if (typeof value === \"object\") {\n search.push(\n serializeObjectParam(name, value, {\n style: \"deepObject\",\n explode: true,\n ...options?.object,\n allowReserved: options?.allowReserved || false,\n }),\n );\n continue;\n }\n search.push(serializePrimitiveParam(name, value, options));\n }\n }\n return search.join(\"&\");\n };\n}\n\n/**\n * Handle different OpenAPI 3.x serialization styles\n * @type {import(\"./index.js\").defaultPathSerializer}\n * @see https://swagger.io/docs/specification/serialization/#path\n */\nexport function defaultPathSerializer(pathname, pathParams) {\n let nextURL = pathname;\n for (const match of pathname.match(PATH_PARAM_RE) ?? []) {\n let name = match.substring(1, match.length - 1);\n let explode = false;\n let style = \"simple\";\n if (name.endsWith(\"*\")) {\n explode = true;\n name = name.substring(0, name.length - 1);\n }\n if (name.startsWith(\".\")) {\n style = \"label\";\n name = name.substring(1);\n } else if (name.startsWith(\";\")) {\n style = \"matrix\";\n name = name.substring(1);\n }\n if (!pathParams || pathParams[name] === undefined || pathParams[name] === null) {\n continue;\n }\n const value = pathParams[name];\n if (Array.isArray(value)) {\n nextURL = nextURL.replace(match, serializeArrayParam(name, value, { style, explode }));\n continue;\n }\n if (typeof value === \"object\") {\n nextURL = nextURL.replace(match, serializeObjectParam(name, value, { style, explode }));\n continue;\n }\n if (style === \"matrix\") {\n nextURL = nextURL.replace(match, `;${serializePrimitiveParam(name, value)}`);\n continue;\n }\n nextURL = nextURL.replace(match, style === \"label\" ? `.${encodeURIComponent(value)}` : encodeURIComponent(value));\n }\n // `encodeURIComponent` keeps dots, so a value `..` would move the request up a path level (ADR-013).\n if (DOT_SEGMENT_RE.test(nextURL)) {\n throw new Error(`Dot path segment in ${nextURL}`);\n }\n return nextURL;\n}\n\n/**\n * Bodies `fetch` sends as they are, with their own `Content-Type` (FormData, Blob, URLSearchParams)\n * or none. JSON-encoding a Blob or an ArrayBuffer sent `{}` (ADR-013, decision 6).\n */\nfunction isRawBody(body) {\n return (\n body instanceof FormData ||\n body instanceof Blob ||\n body instanceof URLSearchParams ||\n body instanceof ArrayBuffer ||\n ArrayBuffer.isView(body)\n );\n}\n\n/**\n * A form body. A nested object has no standard form encoding (servers read `a[b]`, `a.b` or JSON),\n * and `URLSearchParams` wrote it as `[object Object]` (ADR-013, decision 7).\n */\nfunction formBody(body) {\n for (const value of Object.values(body)) {\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n throw new Error(NESTED_FORM_VALUE_MESSAGE);\n }\n }\n return new URLSearchParams(body).toString();\n}\n\n/**\n * A `multipart/form-data` body: one part per field, one per item of an array. A `Blob` (or `File`)\n * is a file part, other primitives are text, `null` and `undefined` are left out. A nested object\n * would need a part content type such as JSON, which the client does not guess (ADR-013,\n * decision 10).\n */\nfunction multipartBody(body) {\n const formData = new FormData();\n for (const [name, value] of Object.entries(body)) {\n for (const item of [value].flat()) {\n if (item instanceof Blob) {\n formData.append(name, item);\n } else if (item && typeof item === \"object\") {\n throw new Error(NESTED_FORM_VALUE_MESSAGE);\n } else if (item != null) {\n formData.append(name, String(item));\n }\n }\n }\n return formData;\n}\n\n/**\n * Serialize body object to string\n * @type {import(\"./index.js\").defaultBodySerializer}\n */\nexport function defaultBodySerializer(body, headers) {\n if (isRawBody(body)) {\n return body;\n }\n const contentType = headers\n ? // `typeof`, not `instanceof Function`: headers from another realm (iframe, `node:vm`) have a\n // `get` that is not an instance of this realm's Function (upstream #2637).\n typeof headers.get === \"function\"\n ? (headers.get(\"Content-Type\") ?? headers.get(\"content-type\"))\n : (headers[\"Content-Type\"] ?? headers[\"content-type\"])\n : undefined;\n if (contentType === FORM_MEDIA_TYPE) {\n return formBody(body);\n }\n if (body && typeof body === \"object\" && MULTIPART_MEDIA_TYPE_RE.test(contentType)) {\n return multipartBody(body);\n }\n // A string for a non-JSON media type (`text/plain`, ...) is the body itself; JSON-encoding it\n // added quotes (upstream #2555, #2382). For JSON, a string is a JSON string value (ADR-013).\n if (typeof body === \"string\" && contentType && !JSON_MEDIA_TYPE_RE.test(contentType)) {\n return body;\n }\n return JSON.stringify(body);\n}\n\n/**\n * Construct URL string from baseUrl and handle path and query params\n * @type {import(\"./index.js\").createFinalURL}\n */\nexport function createFinalURL(pathname, options) {\n let finalURL = `${options.baseUrl}${pathname}`;\n if (options.params?.path) {\n finalURL = options.pathSerializer(finalURL, options.params.path);\n }\n let search = options.querySerializer(options.params.query ?? {});\n if (search.startsWith(\"?\")) {\n search = search.substring(1);\n }\n if (search) {\n // A path may already have a query string.\n finalURL += `${finalURL.includes(\"?\") ? \"&\" : \"?\"}${search}`;\n }\n return finalURL;\n}\n\n/**\n * Merge headers a and b, with b taking priority\n * @type {import(\"./index.js\").mergeHeaders}\n */\nexport function mergeHeaders(...allHeaders) {\n const finalHeaders = new Headers();\n for (const h of allHeaders) {\n if (!h || typeof h !== \"object\") {\n continue;\n }\n const iterator = isHeaders(h) ? h.entries() : Object.entries(h);\n for (const [k, v] of iterator) {\n if (v === null) {\n finalHeaders.delete(k);\n } else if (Array.isArray(v)) {\n for (const v2 of v) {\n finalHeaders.append(k, v2);\n }\n } else if (v !== undefined) {\n finalHeaders.set(k, v);\n }\n }\n }\n return finalHeaders;\n}\n\n/**\n * Remove trailing slash from url\n * @type {import(\"./index.js\").removeTrailingSlash}\n */\nexport function removeTrailingSlash(url) {\n if (url.endsWith(\"/\")) {\n return url.substring(0, url.length - 1);\n }\n return url;\n}\n"],"names":["error","raw","final","joiner"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/index.js"],"sourcesContent":["// settings & const\nconst PATH_PARAM_RE = /\\{[^{}]+\\}/g;\n/**\n * A `.` or `..` path segment; URLs resolve it, so a parameter value could leave its path (#2483).\n */\nconst DOT_SEGMENT_RE = /(^|\\/)\\.\\.?(\\/|$)/;\n/** Where the path of a URL ends: its query or fragment, which have no segments. */\nconst QUERY_OR_FRAGMENT_RE = /[?#]/;\n/**\n * Any JSON media type: `application/json`, `application/problem+json`, with or without\n * parameters.\n */\nconst JSON_MEDIA_TYPE_RE = /json/i;\n/** `application/x-www-form-urlencoded`, with or without parameters such as `charset`. */\nconst FORM_MEDIA_TYPE_RE = /^application\\/x-www-form-urlencoded(;|$)/i;\n/** `multipart/form-data`, with or without parameters. */\nconst MULTIPART_MEDIA_TYPE_RE = /^multipart\\/form-data(;|$)/i;\nconst NESTED_FORM_VALUE_MESSAGE = \"Nested form values need your own `bodySerializer()`.\";\n/** The `boundary` parameter of a multipart `Content-Type`; only the platform knows its value. */\nconst BOUNDARY_PARAMETER_RE = /;\\s*boundary=/i;\n\n/**\n * Whether `fetch` is Node.js undici, which takes `requestInitExt` as a second argument. A Node.js\n * version check is not needed: every supported Node.js (`engines`) ships undici.\n */\nconst supportsRequestInitExt = () => {\n return typeof process === \"object\" && process.versions?.undici;\n};\n\n/**\n * The number of request ids handed out. It is shared by all clients on purpose: one middleware can\n * be used by several clients, and it tells their requests apart by id.\n */\nlet requestIdCount = 0;\n\n/**\n * Returns a cheap, non-cryptographically-secure ID, unique within the process.\n * A counter, not `Math.random()`: Next.js prerendering rejects random values read before uncached\n * data (upstream #2486, #2763). The name stays for compatibility.\n */\nexport function randomID() {\n requestIdCount += 1;\n return requestIdCount.toString(36);\n}\n\n/**\n * Create an openapi-typesafe-fetch client.\n * @type {import(\"./index.js\").default}\n */\n// biome-ignore lint/complexity/noExcessiveLinesPerFunction: inherited, kept until 1.1 (ADR-036)\nexport default function createClient(clientOptions) {\n let {\n baseUrl = \"\",\n Request: CustomRequest = globalThis.Request,\n fetch: baseFetch = globalThis.fetch,\n querySerializer: globalQuerySerializer,\n bodySerializer: globalBodySerializer,\n pathSerializer: globalPathSerializer,\n headers: baseHeaders,\n requestInitExt = undefined,\n ...baseOptions\n } = { ...clientOptions };\n requestInitExt = supportsRequestInitExt() ? requestInitExt : undefined;\n baseUrl = removeTrailingSlash(baseUrl);\n const globalMiddlewares = [];\n\n /**\n * Per-request fetch (keeps settings created in createClient()\n * @param {T} url\n * @param {import('./index.js').FetchOptions<T>} fetchOptions\n */\n // biome-ignore lint/complexity/noExcessiveLinesPerFunction: inherited, kept until 1.1 (ADR-036)\n async function coreFetch(schemaPath, fetchOptions) {\n const {\n baseUrl: localBaseUrl,\n fetch = baseFetch,\n Request = CustomRequest,\n headers,\n params = {},\n parseAs = \"json\",\n querySerializer: requestQuerySerializer,\n bodySerializer = globalBodySerializer ?? defaultBodySerializer,\n pathSerializer: requestPathSerializer,\n body,\n middleware: requestMiddlewares = [],\n ...init\n } = fetchOptions || {};\n let finalBaseUrl = baseUrl;\n if (localBaseUrl) {\n finalBaseUrl = removeTrailingSlash(localBaseUrl) ?? baseUrl;\n }\n\n let querySerializer =\n typeof globalQuerySerializer === \"function\"\n ? globalQuerySerializer\n : createQuerySerializer(globalQuerySerializer);\n if (requestQuerySerializer) {\n querySerializer =\n typeof requestQuerySerializer === \"function\"\n ? requestQuerySerializer\n : createQuerySerializer({\n ...(typeof globalQuerySerializer === \"object\" ? globalQuerySerializer : {}),\n ...requestQuerySerializer,\n });\n }\n\n const pathSerializer = requestPathSerializer || globalPathSerializer || defaultPathSerializer;\n\n const serializedBody =\n body === undefined\n ? undefined\n : bodySerializer(\n body,\n // Note: we declare mergeHeaders() both here and below because it’s a bit of a\n // chicken-or-egg situation: bodySerializer() needs all headers so we aren’t dropping\n // ones set by the user, however, the result of this ALSO sets the lowest-priority\n // content-type header. So we re-merge below, setting the content-type at the very\n // beginning to be overwritten. Lastly, based on the way headers work, it’s not a simple\n // “present-or-not” check because null intentionally un-sets headers.\n mergeHeaders(baseHeaders, headers, params.header),\n );\n const finalHeaders = mergeHeaders(\n // with no body, we should not to set Content-Type\n serializedBody === undefined ||\n // a raw body (FormData, Blob, ...) gets its Content-Type from the platform, or none\n isRawBody(serializedBody)\n ? {}\n : {\n \"Content-Type\": \"application/json\",\n },\n baseHeaders,\n headers,\n params.header,\n );\n // `fetch` sends a FormData as multipart with a boundary only it knows. A `Content-Type` without\n // that boundary, set by hand, replaced the platform's, and the server could not split the parts\n // (upstream #1214), so it goes and the platform sets its own (ADR-013, decision 10).\n if (\n serializedBody instanceof FormData &&\n !BOUNDARY_PARAMETER_RE.test(finalHeaders.get(\"Content-Type\"))\n ) {\n finalHeaders.delete(\"Content-Type\");\n }\n\n // Client level middleware take priority over request-level middleware\n const finalMiddlewares = [...globalMiddlewares, ...requestMiddlewares];\n\n const requestInit = {\n redirect: \"follow\",\n ...baseOptions,\n ...init,\n body: serializedBody,\n headers: finalHeaders,\n };\n\n let id;\n let options;\n let request = new Request(\n createFinalURL(schemaPath, {\n baseUrl: finalBaseUrl,\n params,\n querySerializer,\n pathSerializer,\n }),\n requestInit,\n );\n let response;\n\n /** Add custom parameters to Request object */\n for (const key in init) {\n if (!(key in request)) {\n request[key] = init[key];\n }\n }\n\n if (finalMiddlewares.length) {\n id = randomID();\n\n // middleware (request)\n options = Object.freeze({\n baseUrl: finalBaseUrl,\n fetch,\n parseAs,\n querySerializer,\n bodySerializer,\n pathSerializer,\n });\n for (const m of finalMiddlewares) {\n if (m && typeof m === \"object\" && typeof m.onRequest === \"function\") {\n const result = await m.onRequest({\n request,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n if (isRequest(result)) {\n request = result;\n } else if (isResponse(result)) {\n response = result;\n break;\n } else {\n throw new Error(\n \"onRequest: must return new Request() or Response() when modifying the request\",\n );\n }\n }\n }\n }\n }\n\n if (!response) {\n // fetch!\n try {\n response = await fetch(request, requestInitExt);\n } catch (error) {\n let errorAfterMiddleware = error;\n // middleware (error)\n // execute in reverse-array order (first priority gets last transform)\n if (finalMiddlewares.length) {\n for (let i = finalMiddlewares.length - 1; i >= 0; i--) {\n const m = finalMiddlewares[i];\n if (m && typeof m === \"object\" && typeof m.onError === \"function\") {\n const result = await m.onError({\n request,\n error: errorAfterMiddleware,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n // if error is handled by returning a response, skip remaining middleware\n if (isResponse(result)) {\n errorAfterMiddleware = undefined;\n response = result;\n break;\n }\n\n if (result instanceof Error) {\n errorAfterMiddleware = result;\n continue;\n }\n\n throw new Error(\"onError: must return new Response() or instance of Error\");\n }\n }\n }\n }\n\n // rethrow error if not handled by middleware\n if (errorAfterMiddleware) {\n throw errorAfterMiddleware;\n }\n }\n\n // middleware (response)\n // execute in reverse-array order (first priority gets last transform)\n if (finalMiddlewares.length) {\n for (let i = finalMiddlewares.length - 1; i >= 0; i--) {\n const m = finalMiddlewares[i];\n if (m && typeof m === \"object\" && typeof m.onResponse === \"function\") {\n const result = await m.onResponse({\n request,\n response,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n if (!isResponse(result)) {\n throw new Error(\n \"onResponse: must return new Response() when modifying the response\",\n );\n }\n response = result;\n }\n }\n }\n }\n }\n\n const contentLength = response.headers.get(\"Content-Length\");\n // handle empty content\n if (\n response.status === 204 ||\n request.method === \"HEAD\" ||\n (contentLength === \"0\" && !response.headers.get(\"Transfer-Encoding\")?.includes(\"chunked\"))\n ) {\n return response.ok ? { data: undefined, response } : { error: undefined, response };\n }\n\n // parse response (falling back to .text() when necessary)\n if (response.ok) {\n const getResponseData = async () => {\n // if \"stream\", skip parsing entirely\n if (parseAs === \"stream\") {\n return response.body;\n }\n\n if (parseAs === \"json\" && !contentLength) {\n // use text() when no content-length is provided to avoid errors parsing empty bodies\n // (200 with no content)\n const raw = await response.text();\n return raw ? JSON.parse(raw) : undefined;\n }\n\n return await response[parseAs]();\n };\n return { data: await getResponseData(), response };\n }\n\n // handle errors (use text() when no content-length to safely handle empty bodies from proxies)\n const raw = await response.text();\n if (!raw) {\n // empty error body - return undefined to be consistent with status 204 handling\n return { error: undefined, response };\n }\n let error = raw;\n try {\n error = JSON.parse(raw); // attempt to parse as JSON\n } catch {\n // noop - keep as raw text\n }\n return { error, response };\n }\n\n return {\n request(method, url, init) {\n return coreFetch(url, { ...init, method: method.toUpperCase() });\n },\n /** Call a GET endpoint */\n GET(url, init) {\n return coreFetch(url, { ...init, method: \"GET\" });\n },\n /** Call a PUT endpoint */\n PUT(url, init) {\n return coreFetch(url, { ...init, method: \"PUT\" });\n },\n /** Call a POST endpoint */\n POST(url, init) {\n return coreFetch(url, { ...init, method: \"POST\" });\n },\n /** Call a DELETE endpoint */\n DELETE(url, init) {\n return coreFetch(url, { ...init, method: \"DELETE\" });\n },\n /** Call a OPTIONS endpoint */\n OPTIONS(url, init) {\n return coreFetch(url, { ...init, method: \"OPTIONS\" });\n },\n /** Call a HEAD endpoint */\n HEAD(url, init) {\n return coreFetch(url, { ...init, method: \"HEAD\" });\n },\n /** Call a PATCH endpoint */\n PATCH(url, init) {\n return coreFetch(url, { ...init, method: \"PATCH\" });\n },\n /** Call a TRACE endpoint */\n TRACE(url, init) {\n return coreFetch(url, { ...init, method: \"TRACE\" });\n },\n /** Call a QUERY endpoint (OpenAPI 3.2) */\n QUERY(url, init) {\n return coreFetch(url, { ...init, method: \"QUERY\" });\n },\n /** Register middleware */\n use(...middleware) {\n for (const m of middleware) {\n if (!m) {\n continue;\n }\n if (typeof m !== \"object\" || !(\"onRequest\" in m || \"onResponse\" in m || \"onError\" in m)) {\n throw new Error(\n \"Middleware must be an object with one of `onRequest()`, `onResponse()` or `onError()`\",\n );\n }\n globalMiddlewares.push(m);\n }\n },\n /** Unregister middleware */\n eject(...middleware) {\n for (const m of middleware) {\n const i = globalMiddlewares.indexOf(m);\n if (i !== -1) {\n globalMiddlewares.splice(i, 1);\n }\n }\n },\n };\n}\n\nclass PathCallForwarder {\n constructor(client, url) {\n this.client = client;\n this.url = url;\n }\n\n GET = (init) => {\n return this.client.GET(this.url, init);\n };\n PUT = (init) => {\n return this.client.PUT(this.url, init);\n };\n POST = (init) => {\n return this.client.POST(this.url, init);\n };\n DELETE = (init) => {\n return this.client.DELETE(this.url, init);\n };\n OPTIONS = (init) => {\n return this.client.OPTIONS(this.url, init);\n };\n HEAD = (init) => {\n return this.client.HEAD(this.url, init);\n };\n PATCH = (init) => {\n return this.client.PATCH(this.url, init);\n };\n TRACE = (init) => {\n return this.client.TRACE(this.url, init);\n };\n QUERY = (init) => {\n return this.client.QUERY(this.url, init);\n };\n}\n\nclass PathClientProxyHandler {\n constructor() {\n this.client = null;\n }\n\n // Assume the property is an URL.\n get(coreClient, url) {\n const forwarder = new PathCallForwarder(coreClient, url);\n this.client[url] = forwarder;\n return forwarder;\n }\n}\n\n/**\n * Wrap openapi-typesafe-fetch client to support a path based API.\n * @type {import(\"./index.js\").wrapAsPathBasedClient}\n */\nexport function wrapAsPathBasedClient(coreClient) {\n const handler = new PathClientProxyHandler();\n const proxy = new Proxy(coreClient, handler);\n\n // Put the proxy on the prototype chain of the actual client.\n // This means if we do not have a memoized PathCallForwarder,\n // we fall back to the proxy to synthesize it.\n // However, the proxy itself is not on the hot-path (if we fetch the same\n // endpoint multiple times, only the first call will hit the proxy).\n function Client() {}\n Client.prototype = proxy;\n\n const client = new Client();\n\n // Feed the client back to the proxy handler so it can store the generated\n // PathCallForwarder.\n handler.client = client;\n\n return client;\n}\n\n/**\n * Convenience method to an openapi-typesafe-fetch path based client.\n * Strictly equivalent to `wrapAsPathBasedClient(createClient(...))`.\n * @type {import(\"./index.js\").createPathBasedClient}\n */\nexport function createPathBasedClient(clientOptions) {\n return wrapAsPathBasedClient(createClient(clientOptions));\n}\n\n// utils\n\n// Fetch API objects are recognized by the members the client uses, not by `instanceof`: that is\n// bound to one realm's class, and a Request from the `undici` package, another realm (an iframe,\n// an Electron host) or a custom `Request` option is not an instance of it (upstream #1847). The\n// same rule as for headers in `defaultBodySerializer` (upstream #2637).\n\nfunction isHeaders(value) {\n return typeof value?.get === \"function\";\n}\n\nfunction isRequest(value) {\n return (\n typeof value?.method === \"string\" && typeof value.url === \"string\" && isHeaders(value.headers)\n );\n}\n\nfunction isResponse(value) {\n return typeof value?.status === \"number\" && isHeaders(value.headers);\n}\n\n// Parameter names and object keys can be data (an `additionalProperties` object). They are encoded\n// like values, except for characters common in names that do not split a URL (ADR-013, decision 9).\nconst KEPT_NAME_ESCAPES = /%(?:5B|5D|24|3A|40|2C)/g;\n\nfunction encodeName(name) {\n return encodeURIComponent(name).replace(KEPT_NAME_ESCAPES, decodeURIComponent);\n}\n\n/**\n * Serialize primitive param values\n * @type {import(\"./index.js\").serializePrimitiveParam}\n */\nexport function serializePrimitiveParam(name, value, options) {\n if (value === undefined || value === null) {\n return \"\";\n }\n if (typeof value === \"object\") {\n throw new Error(\n \"Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.\",\n );\n }\n return `${name}=${options?.allowReserved === true ? value : encodeURIComponent(value)}`;\n}\n\n/**\n * Serialize object param (shallow only)\n * @type {import(\"./index.js\").serializeObjectParam}\n */\n// biome-ignore lint/complexity/noExcessiveLinesPerFunction: inherited, kept until 1.1 (ADR-036)\nexport function serializeObjectParam(name, value, options) {\n if (!value || typeof value !== \"object\") {\n return \"\";\n }\n const values = [];\n const joiner =\n {\n simple: \",\",\n label: \".\",\n matrix: \";\",\n }[options.style] || \"&\";\n\n // explode: false\n if (options.style !== \"deepObject\" && options.explode === false) {\n for (const k in value) {\n values.push(\n encodeName(k),\n options.allowReserved === true ? value[k] : encodeURIComponent(value[k]),\n );\n }\n // note: values are always joined by comma in explode: false (but joiner can prefix)\n const final = values.join(\",\");\n switch (options.style) {\n case \"form\": {\n return `${name}=${final}`;\n }\n case \"label\": {\n return `.${final}`;\n }\n case \"matrix\": {\n return `;${name}=${final}`;\n }\n default: {\n return final;\n }\n }\n }\n\n // explode: true\n for (const k in value) {\n const finalName = options.style === \"deepObject\" ? `${name}[${encodeName(k)}]` : encodeName(k);\n values.push(serializePrimitiveParam(finalName, value[k], options));\n }\n const final = values.join(joiner);\n return options.style === \"label\" || options.style === \"matrix\" ? `${joiner}${final}` : final;\n}\n\n/**\n * Serialize array param (shallow only)\n * @type {import(\"./index.js\").serializeArrayParam}\n */\n// biome-ignore lint/complexity/noExcessiveLinesPerFunction: inherited, kept until 1.1 (ADR-036)\nexport function serializeArrayParam(name, value, options) {\n if (!Array.isArray(value)) {\n return \"\";\n }\n\n // explode: false\n if (options.explode === false) {\n // note: for arrays, joiners vary wildly based on style + explode behavior\n const joiner = { form: \",\", spaceDelimited: \"%20\", pipeDelimited: \"|\" }[options.style] || \",\";\n const final = (\n options.allowReserved === true ? value : value.map((v) => encodeURIComponent(v))\n ).join(joiner);\n switch (options.style) {\n case \"simple\": {\n return final;\n }\n case \"label\": {\n return `.${final}`;\n }\n case \"matrix\": {\n return `;${name}=${final}`;\n }\n // case \"spaceDelimited\":\n // case \"pipeDelimited\":\n default: {\n return `${name}=${final}`;\n }\n }\n }\n\n // explode: true\n const joiner = { simple: \",\", label: \".\", matrix: \";\" }[options.style] || \"&\";\n const values = [];\n for (const v of value) {\n if (options.style === \"simple\" || options.style === \"label\") {\n values.push(options.allowReserved === true ? v : encodeURIComponent(v));\n } else {\n values.push(serializePrimitiveParam(name, v, options));\n }\n }\n return options.style === \"label\" || options.style === \"matrix\"\n ? `${joiner}${values.join(joiner)}`\n : values.join(joiner);\n}\n\n/**\n * Serialize query params to string\n * @type {import(\"./index.js\").createQuerySerializer}\n */\nexport function createQuerySerializer(options) {\n return function querySerializer(queryParams) {\n const search = [];\n if (queryParams && typeof queryParams === \"object\") {\n for (const key in queryParams) {\n const value = queryParams[key];\n const name = encodeName(key);\n if (value === undefined || value === null) {\n continue;\n }\n if (Array.isArray(value)) {\n if (value.length === 0) {\n continue;\n }\n search.push(\n serializeArrayParam(name, value, {\n style: \"form\",\n explode: true,\n ...options?.array,\n allowReserved: options?.allowReserved || false,\n }),\n );\n continue;\n }\n if (typeof value === \"object\") {\n search.push(\n serializeObjectParam(name, value, {\n style: \"deepObject\",\n explode: true,\n ...options?.object,\n allowReserved: options?.allowReserved || false,\n }),\n );\n continue;\n }\n search.push(serializePrimitiveParam(name, value, options));\n }\n }\n return search.join(\"&\");\n };\n}\n\n/**\n * Handle different OpenAPI 3.x serialization styles\n * @type {import(\"./index.js\").defaultPathSerializer}\n * @see https://swagger.io/docs/specification/serialization/#path\n */\n// biome-ignore lint/complexity/noExcessiveLinesPerFunction: inherited, kept until 1.1 (ADR-036)\nexport function defaultPathSerializer(pathname, pathParams) {\n let nextURL = pathname;\n for (const match of pathname.match(PATH_PARAM_RE) ?? []) {\n let name = match.substring(1, match.length - 1);\n let explode = false;\n let style = \"simple\";\n if (name.endsWith(\"*\")) {\n explode = true;\n name = name.substring(0, name.length - 1);\n }\n if (name.startsWith(\".\")) {\n style = \"label\";\n name = name.substring(1);\n } else if (name.startsWith(\";\")) {\n style = \"matrix\";\n name = name.substring(1);\n }\n if (!pathParams || pathParams[name] === undefined || pathParams[name] === null) {\n continue;\n }\n const value = pathParams[name];\n let serialized;\n if (Array.isArray(value)) {\n serialized = serializeArrayParam(name, value, { style, explode });\n } else if (typeof value === \"object\") {\n serialized = serializeObjectParam(name, value, { style, explode });\n } else if (style === \"matrix\") {\n serialized = `;${serializePrimitiveParam(name, value)}`;\n } else {\n serialized = style === \"label\" ? `.${encodeURIComponent(value)}` : encodeURIComponent(value);\n }\n // A function: a string replacement reads `$'`, `$&` and the like, which object keys keep.\n nextURL = nextURL.replace(match, () => serialized);\n }\n const path = nextURL.split(QUERY_OR_FRAGMENT_RE, 1)[0];\n // `encodeURIComponent` keeps dots, so a value `..` would move the request up a path level\n // (ADR-013).\n // Only the path is checked: before a query (`/a/{id}?v=2`), `$` did not match after `..`.\n if (DOT_SEGMENT_RE.test(path)) {\n throw new Error(`Dot path segment in ${nextURL}`);\n }\n // `//host/…` is a protocol-relative URL: with a relative baseUrl a browser sends it to that\n // host.\n if (path.startsWith(\"//\")) {\n throw new Error(`Empty first path segment in ${nextURL}`);\n }\n return nextURL;\n}\n\n/**\n * Bodies `fetch` sends as they are, with their own `Content-Type` (FormData, Blob, URLSearchParams)\n * or none. JSON-encoding a Blob or an ArrayBuffer sent `{}` (ADR-013, decision 6).\n */\nfunction isRawBody(body) {\n return (\n body instanceof FormData ||\n body instanceof Blob ||\n body instanceof URLSearchParams ||\n body instanceof ArrayBuffer ||\n ArrayBuffer.isView(body)\n );\n}\n\n/**\n * A form body. A nested object has no standard form encoding (servers read `a[b]`, `a.b` or JSON),\n * and `URLSearchParams` wrote it as `[object Object]` (ADR-013, decision 7). `null` and `undefined`\n * fields are left out, as in a multipart body; `URLSearchParams` sent them as the text \"null\" and\n * \"undefined\" (ADR-030). A string or a list of pairs is form data already.\n */\nfunction formBody(body) {\n if (!body || typeof body !== \"object\" || Array.isArray(body)) {\n return new URLSearchParams(body).toString();\n }\n const form = new URLSearchParams();\n for (const [name, value] of Object.entries(body)) {\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n throw new Error(NESTED_FORM_VALUE_MESSAGE);\n }\n if (value != null) {\n form.append(name, value);\n }\n }\n return form.toString();\n}\n\n/**\n * A `multipart/form-data` body: one part per field, one per item of an array. A `Blob` (or `File`)\n * is a file part, other primitives are text, `null` and `undefined` are left out. A nested object\n * would need a part content type such as JSON, which the client does not guess (ADR-013,\n * decision 10).\n */\nfunction multipartBody(body) {\n const formData = new FormData();\n for (const [name, value] of Object.entries(body)) {\n for (const item of [value].flat()) {\n if (item instanceof Blob) {\n formData.append(name, item);\n } else if (item && typeof item === \"object\") {\n throw new Error(NESTED_FORM_VALUE_MESSAGE);\n } else if (item != null) {\n formData.append(name, String(item));\n }\n }\n }\n return formData;\n}\n\n/**\n * Serialize body object to string\n * @type {import(\"./index.js\").defaultBodySerializer}\n */\nexport function defaultBodySerializer(body, headers) {\n if (isRawBody(body)) {\n return body;\n }\n // Headers with a `get` are read directly: headers from another realm (iframe, `node:vm`) may have\n // nothing else (upstream #2637). A record or a list of pairs is read through `Headers`, which\n // matches the name in any letter case.\n const contentType =\n headers && (isHeaders(headers) ? headers : mergeHeaders(headers)).get(\"Content-Type\");\n if (FORM_MEDIA_TYPE_RE.test(contentType)) {\n return formBody(body);\n }\n if (body && typeof body === \"object\" && MULTIPART_MEDIA_TYPE_RE.test(contentType)) {\n return multipartBody(body);\n }\n // A string for a non-JSON media type (`text/plain`, ...) is the body itself; JSON-encoding it\n // added quotes (upstream #2555, #2382). For JSON, a string is a JSON string value (ADR-013).\n if (typeof body === \"string\" && contentType && !JSON_MEDIA_TYPE_RE.test(contentType)) {\n return body;\n }\n return JSON.stringify(body);\n}\n\n/**\n * Construct URL string from baseUrl and handle path and query params\n * @type {import(\"./index.js\").createFinalURL}\n */\nexport function createFinalURL(pathname, options) {\n let finalURL = `${options.baseUrl}${pathname}`;\n if (options.params?.path) {\n finalURL = options.pathSerializer(finalURL, options.params.path);\n }\n let search = options.querySerializer(options.params.query ?? {});\n if (search.startsWith(\"?\")) {\n search = search.substring(1);\n }\n if (search) {\n // A path may already have a query string.\n finalURL += `${finalURL.includes(\"?\") ? \"&\" : \"?\"}${search}`;\n }\n return finalURL;\n}\n\n/**\n * Merge headers a and b, with b taking priority\n * @type {import(\"./index.js\").mergeHeaders}\n */\nexport function mergeHeaders(...allHeaders) {\n const finalHeaders = new Headers();\n for (const h of allHeaders) {\n if (!h || typeof h !== \"object\") {\n continue;\n }\n // A list of pairs (`[[\"x-t\", \"1\"]]`) is a `HeadersInit` too; `Headers` joins a repeated name.\n const iterator = isHeaders(h)\n ? h.entries()\n : Symbol.iterator in h\n ? new Headers(h).entries()\n : Object.entries(h);\n for (const [k, v] of iterator) {\n if (v === null) {\n finalHeaders.delete(k);\n } else if (Array.isArray(v)) {\n for (const v2 of v) {\n finalHeaders.append(k, v2);\n }\n } else if (v !== undefined) {\n finalHeaders.set(k, v);\n }\n }\n }\n return finalHeaders;\n}\n\n/**\n * Remove trailing slash from url\n * @type {import(\"./index.js\").removeTrailingSlash}\n */\nexport function removeTrailingSlash(url) {\n if (url.endsWith(\"/\")) {\n return url.substring(0, url.length - 1);\n }\n return url;\n}\n"],"names":["error","raw","final","joiner"],"mappings":"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"}
|