summaryrefslogtreecommitdiffhomepage
path: root/packages/sdk/js/src/gen/client
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-08-02 18:50:19 -0400
committerDax Raad <[email protected]>2025-08-02 18:50:19 -0400
commitca031278ca9ca30277620e344f7a95c597a8a0de (patch)
tree93af08a56682986262fb7d2c97cfd77d6a973ff7 /packages/sdk/js/src/gen/client
parentae6e47bb42bbfcbb908cda28f4ec028a7335904e (diff)
downloadopencode-ca031278ca9ca30277620e344f7a95c597a8a0de.tar.gz
opencode-ca031278ca9ca30277620e344f7a95c597a8a0de.zip
wip: plugins
Diffstat (limited to 'packages/sdk/js/src/gen/client')
-rw-r--r--packages/sdk/js/src/gen/client/client.ts154
-rw-r--r--packages/sdk/js/src/gen/client/index.ts18
-rw-r--r--packages/sdk/js/src/gen/client/types.ts165
-rw-r--r--packages/sdk/js/src/gen/client/utils.ts356
4 files changed, 302 insertions, 391 deletions
diff --git a/packages/sdk/js/src/gen/client/client.ts b/packages/sdk/js/src/gen/client/client.ts
index 89d1e3158..bc009574b 100644
--- a/packages/sdk/js/src/gen/client/client.ts
+++ b/packages/sdk/js/src/gen/client/client.ts
@@ -1,4 +1,4 @@
-import type { Client, Config, RequestOptions } from './types';
+import type { Client, Config, RequestOptions } from "./types"
import {
buildUrl,
createConfig,
@@ -7,189 +7,179 @@ import {
mergeConfigs,
mergeHeaders,
setAuthParams,
-} from './utils';
+} from "./utils"
-type ReqInit = Omit<RequestInit, 'body' | 'headers'> & {
- body?: any;
- headers: ReturnType<typeof mergeHeaders>;
-};
+type ReqInit = Omit<RequestInit, "body" | "headers"> & {
+ body?: any
+ headers: ReturnType<typeof mergeHeaders>
+}
export const createClient = (config: Config = {}): Client => {
- let _config = mergeConfigs(createConfig(), config);
+ let _config = mergeConfigs(createConfig(), config)
- const getConfig = (): Config => ({ ..._config });
+ const getConfig = (): Config => ({ ..._config })
const setConfig = (config: Config): Config => {
- _config = mergeConfigs(_config, config);
- return getConfig();
- };
-
- const interceptors = createInterceptors<
- Request,
- Response,
- unknown,
- RequestOptions
- >();
-
- const request: Client['request'] = async (options) => {
+ _config = mergeConfigs(_config, config)
+ return getConfig()
+ }
+
+ const interceptors = createInterceptors<Request, Response, unknown, RequestOptions>()
+
+ const request: Client["request"] = async (options) => {
const opts = {
..._config,
...options,
fetch: options.fetch ?? _config.fetch ?? globalThis.fetch,
headers: mergeHeaders(_config.headers, options.headers),
- };
+ }
if (opts.security) {
await setAuthParams({
...opts,
security: opts.security,
- });
+ })
}
if (opts.requestValidator) {
- await opts.requestValidator(opts);
+ await opts.requestValidator(opts)
}
if (opts.body && opts.bodySerializer) {
- opts.body = opts.bodySerializer(opts.body);
+ opts.body = opts.bodySerializer(opts.body)
}
// remove Content-Type header if body is empty to avoid sending invalid requests
- if (opts.body === undefined || opts.body === '') {
- opts.headers.delete('Content-Type');
+ if (opts.body === undefined || opts.body === "") {
+ opts.headers.delete("Content-Type")
}
- const url = buildUrl(opts);
+ const url = buildUrl(opts)
const requestInit: ReqInit = {
- redirect: 'follow',
+ redirect: "follow",
...opts,
- };
+ }
- let request = new Request(url, requestInit);
+ let request = new Request(url, requestInit)
for (const fn of interceptors.request._fns) {
if (fn) {
- request = await fn(request, opts);
+ request = await fn(request, opts)
}
}
// fetch must be assigned here, otherwise it would throw the error:
// TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation
- const _fetch = opts.fetch!;
- let response = await _fetch(request);
+ const _fetch = opts.fetch!
+ let response = await _fetch(request)
for (const fn of interceptors.response._fns) {
if (fn) {
- response = await fn(response, request, opts);
+ response = await fn(response, request, opts)
}
}
const result = {
request,
response,
- };
+ }
if (response.ok) {
- if (
- response.status === 204 ||
- response.headers.get('Content-Length') === '0'
- ) {
- return opts.responseStyle === 'data'
+ if (response.status === 204 || response.headers.get("Content-Length") === "0") {
+ return opts.responseStyle === "data"
? {}
: {
data: {},
...result,
- };
+ }
}
const parseAs =
- (opts.parseAs === 'auto'
- ? getParseAs(response.headers.get('Content-Type'))
- : opts.parseAs) ?? 'json';
+ (opts.parseAs === "auto" ? getParseAs(response.headers.get("Content-Type")) : opts.parseAs) ?? "json"
- let data: any;
+ let data: any
switch (parseAs) {
- case 'arrayBuffer':
- case 'blob':
- case 'formData':
- case 'json':
- case 'text':
- data = await response[parseAs]();
- break;
- case 'stream':
- return opts.responseStyle === 'data'
+ case "arrayBuffer":
+ case "blob":
+ case "formData":
+ case "json":
+ case "text":
+ data = await response[parseAs]()
+ break
+ case "stream":
+ return opts.responseStyle === "data"
? response.body
: {
data: response.body,
...result,
- };
+ }
}
- if (parseAs === 'json') {
+ if (parseAs === "json") {
if (opts.responseValidator) {
- await opts.responseValidator(data);
+ await opts.responseValidator(data)
}
if (opts.responseTransformer) {
- data = await opts.responseTransformer(data);
+ data = await opts.responseTransformer(data)
}
}
- return opts.responseStyle === 'data'
+ return opts.responseStyle === "data"
? data
: {
data,
...result,
- };
+ }
}
- const textError = await response.text();
- let jsonError: unknown;
+ const textError = await response.text()
+ let jsonError: unknown
try {
- jsonError = JSON.parse(textError);
+ jsonError = JSON.parse(textError)
} catch {
// noop
}
- const error = jsonError ?? textError;
- let finalError = error;
+ const error = jsonError ?? textError
+ let finalError = error
for (const fn of interceptors.error._fns) {
if (fn) {
- finalError = (await fn(error, response, request, opts)) as string;
+ finalError = (await fn(error, response, request, opts)) as string
}
}
- finalError = finalError || ({} as string);
+ finalError = finalError || ({} as string)
if (opts.throwOnError) {
- throw finalError;
+ throw finalError
}
// TODO: we probably want to return error and improve types
- return opts.responseStyle === 'data'
+ return opts.responseStyle === "data"
? undefined
: {
error: finalError,
...result,
- };
- };
+ }
+ }
return {
buildUrl,
- connect: (options) => request({ ...options, method: 'CONNECT' }),
- delete: (options) => request({ ...options, method: 'DELETE' }),
- get: (options) => request({ ...options, method: 'GET' }),
+ connect: (options) => request({ ...options, method: "CONNECT" }),
+ delete: (options) => request({ ...options, method: "DELETE" }),
+ get: (options) => request({ ...options, method: "GET" }),
getConfig,
- head: (options) => request({ ...options, method: 'HEAD' }),
+ head: (options) => request({ ...options, method: "HEAD" }),
interceptors,
- options: (options) => request({ ...options, method: 'OPTIONS' }),
- patch: (options) => request({ ...options, method: 'PATCH' }),
- post: (options) => request({ ...options, method: 'POST' }),
- put: (options) => request({ ...options, method: 'PUT' }),
+ options: (options) => request({ ...options, method: "OPTIONS" }),
+ patch: (options) => request({ ...options, method: "PATCH" }),
+ post: (options) => request({ ...options, method: "POST" }),
+ put: (options) => request({ ...options, method: "PUT" }),
request,
setConfig,
- trace: (options) => request({ ...options, method: 'TRACE' }),
- };
-};
+ trace: (options) => request({ ...options, method: "TRACE" }),
+ }
+}
diff --git a/packages/sdk/js/src/gen/client/index.ts b/packages/sdk/js/src/gen/client/index.ts
index 5da1f7aee..c6b869b86 100644
--- a/packages/sdk/js/src/gen/client/index.ts
+++ b/packages/sdk/js/src/gen/client/index.ts
@@ -1,12 +1,8 @@
-export type { Auth } from '../core/auth';
-export type { QuerySerializerOptions } from '../core/bodySerializer';
-export {
- formDataBodySerializer,
- jsonBodySerializer,
- urlSearchParamsBodySerializer,
-} from '../core/bodySerializer';
-export { buildClientParams } from '../core/params';
-export { createClient } from './client';
+export type { Auth } from "../core/auth"
+export type { QuerySerializerOptions } from "../core/bodySerializer"
+export { formDataBodySerializer, jsonBodySerializer, urlSearchParamsBodySerializer } from "../core/bodySerializer"
+export { buildClientParams } from "../core/params"
+export { createClient } from "./client"
export type {
Client,
ClientOptions,
@@ -18,5 +14,5 @@ export type {
RequestResult,
ResponseStyle,
TDataShape,
-} from './types';
-export { createConfig, mergeHeaders } from './utils';
+} from "./types"
+export { createConfig, mergeHeaders } from "./utils"
diff --git a/packages/sdk/js/src/gen/client/types.ts b/packages/sdk/js/src/gen/client/types.ts
index 85295df07..7f76fc517 100644
--- a/packages/sdk/js/src/gen/client/types.ts
+++ b/packages/sdk/js/src/gen/client/types.ts
@@ -1,33 +1,30 @@
-import type { Auth } from '../core/auth';
-import type {
- Client as CoreClient,
- Config as CoreConfig,
-} from '../core/types';
-import type { Middleware } from './utils';
+import type { Auth } from "../core/auth"
+import type { Client as CoreClient, Config as CoreConfig } from "../core/types"
+import type { Middleware } from "./utils"
-export type ResponseStyle = 'data' | 'fields';
+export type ResponseStyle = "data" | "fields"
export interface Config<T extends ClientOptions = ClientOptions>
- extends Omit<RequestInit, 'body' | 'headers' | 'method'>,
+ extends Omit<RequestInit, "body" | "headers" | "method">,
CoreConfig {
/**
* Base URL for all requests made by this client.
*/
- baseUrl?: T['baseUrl'];
+ baseUrl?: T["baseUrl"]
/**
* Fetch API implementation. You can use this option to provide a custom
* fetch instance.
*
* @default globalThis.fetch
*/
- fetch?: (request: Request) => ReturnType<typeof fetch>;
+ fetch?: (request: Request) => ReturnType<typeof fetch>
/**
* Please don't use the Fetch client for Next.js applications. The `next`
* options won't have any effect.
*
* Install {@link https://www.npmjs.com/package/@hey-api/client-next `@hey-api/client-next`} instead.
*/
- next?: never;
+ next?: never
/**
* Return the response data parsed in a specified format. By default, `auto`
* will infer the appropriate method from the `Content-Type` response header.
@@ -36,135 +33,118 @@ export interface Config<T extends ClientOptions = ClientOptions>
*
* @default 'auto'
*/
- parseAs?:
- | 'arrayBuffer'
- | 'auto'
- | 'blob'
- | 'formData'
- | 'json'
- | 'stream'
- | 'text';
+ parseAs?: "arrayBuffer" | "auto" | "blob" | "formData" | "json" | "stream" | "text"
/**
* Should we return only data or multiple fields (data, error, response, etc.)?
*
* @default 'fields'
*/
- responseStyle?: ResponseStyle;
+ responseStyle?: ResponseStyle
/**
* Throw an error instead of returning it in the response?
*
* @default false
*/
- throwOnError?: T['throwOnError'];
+ throwOnError?: T["throwOnError"]
}
export interface RequestOptions<
- TResponseStyle extends ResponseStyle = 'fields',
+ TResponseStyle extends ResponseStyle = "fields",
ThrowOnError extends boolean = boolean,
Url extends string = string,
> extends Config<{
- responseStyle: TResponseStyle;
- throwOnError: ThrowOnError;
+ responseStyle: TResponseStyle
+ throwOnError: ThrowOnError
}> {
/**
* Any body that you want to add to your request.
*
* {@link https://developer.mozilla.org/docs/Web/API/fetch#body}
*/
- body?: unknown;
- path?: Record<string, unknown>;
- query?: Record<string, unknown>;
+ body?: unknown
+ path?: Record<string, unknown>
+ query?: Record<string, unknown>
/**
* Security mechanism(s) to use for the request.
*/
- security?: ReadonlyArray<Auth>;
- url: Url;
+ security?: ReadonlyArray<Auth>
+ url: Url
}
export type RequestResult<
TData = unknown,
TError = unknown,
ThrowOnError extends boolean = boolean,
- TResponseStyle extends ResponseStyle = 'fields',
+ TResponseStyle extends ResponseStyle = "fields",
> = ThrowOnError extends true
? Promise<
- TResponseStyle extends 'data'
+ TResponseStyle extends "data"
? TData extends Record<string, unknown>
? TData[keyof TData]
: TData
: {
- data: TData extends Record<string, unknown>
- ? TData[keyof TData]
- : TData;
- request: Request;
- response: Response;
+ data: TData extends Record<string, unknown> ? TData[keyof TData] : TData
+ request: Request
+ response: Response
}
>
: Promise<
- TResponseStyle extends 'data'
- ?
- | (TData extends Record<string, unknown>
- ? TData[keyof TData]
- : TData)
- | undefined
+ TResponseStyle extends "data"
+ ? (TData extends Record<string, unknown> ? TData[keyof TData] : TData) | undefined
: (
| {
- data: TData extends Record<string, unknown>
- ? TData[keyof TData]
- : TData;
- error: undefined;
+ data: TData extends Record<string, unknown> ? TData[keyof TData] : TData
+ error: undefined
}
| {
- data: undefined;
- error: TError extends Record<string, unknown>
- ? TError[keyof TError]
- : TError;
+ data: undefined
+ error: TError extends Record<string, unknown> ? TError[keyof TError] : TError
}
) & {
- request: Request;
- response: Response;
+ request: Request
+ response: Response
}
- >;
+ >
export interface ClientOptions {
- baseUrl?: string;
- responseStyle?: ResponseStyle;
- throwOnError?: boolean;
+ baseUrl?: string
+ responseStyle?: ResponseStyle
+ throwOnError?: boolean
}
type MethodFn = <
TData = unknown,
TError = unknown,
ThrowOnError extends boolean = false,
- TResponseStyle extends ResponseStyle = 'fields',
+ TResponseStyle extends ResponseStyle = "fields",
>(
- options: Omit<RequestOptions<TResponseStyle, ThrowOnError>, 'method'>,
-) => RequestResult<TData, TError, ThrowOnError, TResponseStyle>;
+ options: Omit<RequestOptions<TResponseStyle, ThrowOnError>, "method">,
+) => RequestResult<TData, TError, ThrowOnError, TResponseStyle>
type RequestFn = <
TData = unknown,
TError = unknown,
ThrowOnError extends boolean = false,
- TResponseStyle extends ResponseStyle = 'fields',
+ TResponseStyle extends ResponseStyle = "fields",
>(
- options: Omit<RequestOptions<TResponseStyle, ThrowOnError>, 'method'> &
- Pick<Required<RequestOptions<TResponseStyle, ThrowOnError>>, 'method'>,
-) => RequestResult<TData, TError, ThrowOnError, TResponseStyle>;
+ options: Omit<RequestOptions<TResponseStyle, ThrowOnError>, "method"> &
+ Pick<Required<RequestOptions<TResponseStyle, ThrowOnError>>, "method">,
+) => RequestResult<TData, TError, ThrowOnError, TResponseStyle>
type BuildUrlFn = <
TData extends {
- body?: unknown;
- path?: Record<string, unknown>;
- query?: Record<string, unknown>;
- url: string;
+ body?: unknown
+ path?: Record<string, unknown>
+ query?: Record<string, unknown>
+ url: string
},
>(
- options: Pick<TData, 'url'> & Options<TData>,
-) => string;
+ options: Pick<TData, "url"> & Options<TData>,
+) => string
export type Client = CoreClient<RequestFn, Config, MethodFn, BuildUrlFn> & {
- interceptors: Middleware<Request, Response, unknown, RequestOptions>;
-};
+ interceptors: Middleware<Request, Response, unknown, RequestOptions>
+}
/**
* The `createClientConfig()` function will be called on client initialization
@@ -176,47 +156,36 @@ export type Client = CoreClient<RequestFn, Config, MethodFn, BuildUrlFn> & {
*/
export type CreateClientConfig<T extends ClientOptions = ClientOptions> = (
override?: Config<ClientOptions & T>,
-) => Config<Required<ClientOptions> & T>;
+) => Config<Required<ClientOptions> & T>
export interface TDataShape {
- body?: unknown;
- headers?: unknown;
- path?: unknown;
- query?: unknown;
- url: string;
+ body?: unknown
+ headers?: unknown
+ path?: unknown
+ query?: unknown
+ url: string
}
-type OmitKeys<T, K> = Pick<T, Exclude<keyof T, K>>;
+type OmitKeys<T, K> = Pick<T, Exclude<keyof T, K>>
export type Options<
TData extends TDataShape = TDataShape,
ThrowOnError extends boolean = boolean,
- TResponseStyle extends ResponseStyle = 'fields',
-> = OmitKeys<
- RequestOptions<TResponseStyle, ThrowOnError>,
- 'body' | 'path' | 'query' | 'url'
-> &
- Omit<TData, 'url'>;
+ TResponseStyle extends ResponseStyle = "fields",
+> = OmitKeys<RequestOptions<TResponseStyle, ThrowOnError>, "body" | "path" | "query" | "url"> & Omit<TData, "url">
export type OptionsLegacyParser<
TData = unknown,
ThrowOnError extends boolean = boolean,
- TResponseStyle extends ResponseStyle = 'fields',
+ TResponseStyle extends ResponseStyle = "fields",
> = TData extends { body?: any }
? TData extends { headers?: any }
- ? OmitKeys<
- RequestOptions<TResponseStyle, ThrowOnError>,
- 'body' | 'headers' | 'url'
- > &
- TData
- : OmitKeys<RequestOptions<TResponseStyle, ThrowOnError>, 'body' | 'url'> &
+ ? OmitKeys<RequestOptions<TResponseStyle, ThrowOnError>, "body" | "headers" | "url"> & TData
+ : OmitKeys<RequestOptions<TResponseStyle, ThrowOnError>, "body" | "url"> &
TData &
- Pick<RequestOptions<TResponseStyle, ThrowOnError>, 'headers'>
+ Pick<RequestOptions<TResponseStyle, ThrowOnError>, "headers">
: TData extends { headers?: any }
- ? OmitKeys<
- RequestOptions<TResponseStyle, ThrowOnError>,
- 'headers' | 'url'
- > &
+ ? OmitKeys<RequestOptions<TResponseStyle, ThrowOnError>, "headers" | "url"> &
TData &
- Pick<RequestOptions<TResponseStyle, ThrowOnError>, 'body'>
- : OmitKeys<RequestOptions<TResponseStyle, ThrowOnError>, 'url'> & TData;
+ Pick<RequestOptions<TResponseStyle, ThrowOnError>, "body">
+ : OmitKeys<RequestOptions<TResponseStyle, ThrowOnError>, "url"> & TData
diff --git a/packages/sdk/js/src/gen/client/utils.ts b/packages/sdk/js/src/gen/client/utils.ts
index a52e67292..7b7942633 100644
--- a/packages/sdk/js/src/gen/client/utils.ts
+++ b/packages/sdk/js/src/gen/client/utils.ts
@@ -1,64 +1,54 @@
-import { getAuthToken } from '../core/auth';
-import type {
- QuerySerializer,
- QuerySerializerOptions,
-} from '../core/bodySerializer';
-import { jsonBodySerializer } from '../core/bodySerializer';
-import {
- serializeArrayParam,
- serializeObjectParam,
- serializePrimitiveParam,
-} from '../core/pathSerializer';
-import type { Client, ClientOptions, Config, RequestOptions } from './types';
+import { getAuthToken } from "../core/auth"
+import type { QuerySerializer, QuerySerializerOptions } from "../core/bodySerializer"
+import { jsonBodySerializer } from "../core/bodySerializer"
+import { serializeArrayParam, serializeObjectParam, serializePrimitiveParam } from "../core/pathSerializer"
+import type { Client, ClientOptions, Config, RequestOptions } from "./types"
interface PathSerializer {
- path: Record<string, unknown>;
- url: string;
+ path: Record<string, unknown>
+ url: string
}
-const PATH_PARAM_RE = /\{[^{}]+\}/g;
+const PATH_PARAM_RE = /\{[^{}]+\}/g
-type ArrayStyle = 'form' | 'spaceDelimited' | 'pipeDelimited';
-type MatrixStyle = 'label' | 'matrix' | 'simple';
-type ArraySeparatorStyle = ArrayStyle | MatrixStyle;
+type ArrayStyle = "form" | "spaceDelimited" | "pipeDelimited"
+type MatrixStyle = "label" | "matrix" | "simple"
+type ArraySeparatorStyle = ArrayStyle | MatrixStyle
const defaultPathSerializer = ({ path, url: _url }: PathSerializer) => {
- let url = _url;
- const matches = _url.match(PATH_PARAM_RE);
+ let url = _url
+ const matches = _url.match(PATH_PARAM_RE)
if (matches) {
for (const match of matches) {
- let explode = false;
- let name = match.substring(1, match.length - 1);
- let style: ArraySeparatorStyle = 'simple';
+ let explode = false
+ let name = match.substring(1, match.length - 1)
+ let style: ArraySeparatorStyle = "simple"
- if (name.endsWith('*')) {
- explode = true;
- name = name.substring(0, name.length - 1);
+ if (name.endsWith("*")) {
+ explode = true
+ name = name.substring(0, name.length - 1)
}
- if (name.startsWith('.')) {
- name = name.substring(1);
- style = 'label';
- } else if (name.startsWith(';')) {
- name = name.substring(1);
- style = 'matrix';
+ if (name.startsWith(".")) {
+ name = name.substring(1)
+ style = "label"
+ } else if (name.startsWith(";")) {
+ name = name.substring(1)
+ style = "matrix"
}
- const value = path[name];
+ const value = path[name]
if (value === undefined || value === null) {
- continue;
+ continue
}
if (Array.isArray(value)) {
- url = url.replace(
- match,
- serializeArrayParam({ explode, name, style, value }),
- );
- continue;
+ url = url.replace(match, serializeArrayParam({ explode, name, style, value }))
+ continue
}
- if (typeof value === 'object') {
+ if (typeof value === "object") {
url = url.replace(
match,
serializeObjectParam({
@@ -68,43 +58,37 @@ const defaultPathSerializer = ({ path, url: _url }: PathSerializer) => {
value: value as Record<string, unknown>,
valueOnly: true,
}),
- );
- continue;
+ )
+ continue
}
- if (style === 'matrix') {
+ if (style === "matrix") {
url = url.replace(
match,
`;${serializePrimitiveParam({
name,
value: value as string,
})}`,
- );
- continue;
+ )
+ continue
}
- const replaceValue = encodeURIComponent(
- style === 'label' ? `.${value as string}` : (value as string),
- );
- url = url.replace(match, replaceValue);
+ const replaceValue = encodeURIComponent(style === "label" ? `.${value as string}` : (value as string))
+ url = url.replace(match, replaceValue)
}
}
- return url;
-};
-
-export const createQuerySerializer = <T = unknown>({
- allowReserved,
- array,
- object,
-}: QuerySerializerOptions = {}) => {
+ return url
+}
+
+export const createQuerySerializer = <T = unknown>({ allowReserved, array, object }: QuerySerializerOptions = {}) => {
const querySerializer = (queryParams: T) => {
- const search: string[] = [];
- if (queryParams && typeof queryParams === 'object') {
+ const search: string[] = []
+ if (queryParams && typeof queryParams === "object") {
for (const name in queryParams) {
- const value = queryParams[name];
+ const value = queryParams[name]
if (value === undefined || value === null) {
- continue;
+ continue
}
if (Array.isArray(value)) {
@@ -112,129 +96,120 @@ export const createQuerySerializer = <T = unknown>({
allowReserved,
explode: true,
name,
- style: 'form',
+ style: "form",
value,
...array,
- });
- if (serializedArray) search.push(serializedArray);
- } else if (typeof value === 'object') {
+ })
+ if (serializedArray) search.push(serializedArray)
+ } else if (typeof value === "object") {
const serializedObject = serializeObjectParam({
allowReserved,
explode: true,
name,
- style: 'deepObject',
+ style: "deepObject",
value: value as Record<string, unknown>,
...object,
- });
- if (serializedObject) search.push(serializedObject);
+ })
+ if (serializedObject) search.push(serializedObject)
} else {
const serializedPrimitive = serializePrimitiveParam({
allowReserved,
name,
value: value as string,
- });
- if (serializedPrimitive) search.push(serializedPrimitive);
+ })
+ if (serializedPrimitive) search.push(serializedPrimitive)
}
}
}
- return search.join('&');
- };
- return querySerializer;
-};
+ return search.join("&")
+ }
+ return querySerializer
+}
/**
* Infers parseAs value from provided Content-Type header.
*/
-export const getParseAs = (
- contentType: string | null,
-): Exclude<Config['parseAs'], 'auto'> => {
+export const getParseAs = (contentType: string | null): Exclude<Config["parseAs"], "auto"> => {
if (!contentType) {
// If no Content-Type header is provided, the best we can do is return the raw response body,
// which is effectively the same as the 'stream' option.
- return 'stream';
+ return "stream"
}
- const cleanContent = contentType.split(';')[0]?.trim();
+ const cleanContent = contentType.split(";")[0]?.trim()
if (!cleanContent) {
- return;
+ return
}
- if (
- cleanContent.startsWith('application/json') ||
- cleanContent.endsWith('+json')
- ) {
- return 'json';
+ if (cleanContent.startsWith("application/json") || cleanContent.endsWith("+json")) {
+ return "json"
}
- if (cleanContent === 'multipart/form-data') {
- return 'formData';
+ if (cleanContent === "multipart/form-data") {
+ return "formData"
}
- if (
- ['application/', 'audio/', 'image/', 'video/'].some((type) =>
- cleanContent.startsWith(type),
- )
- ) {
- return 'blob';
+ if (["application/", "audio/", "image/", "video/"].some((type) => cleanContent.startsWith(type))) {
+ return "blob"
}
- if (cleanContent.startsWith('text/')) {
- return 'text';
+ if (cleanContent.startsWith("text/")) {
+ return "text"
}
- return;
-};
+ return
+}
export const setAuthParams = async ({
security,
...options
-}: Pick<Required<RequestOptions>, 'security'> &
- Pick<RequestOptions, 'auth' | 'query'> & {
- headers: Headers;
+}: Pick<Required<RequestOptions>, "security"> &
+ Pick<RequestOptions, "auth" | "query"> & {
+ headers: Headers
}) => {
for (const auth of security) {
- const token = await getAuthToken(auth, options.auth);
+ const token = await getAuthToken(auth, options.auth)
if (!token) {
- continue;
+ continue
}
- const name = auth.name ?? 'Authorization';
+ const name = auth.name ?? "Authorization"
switch (auth.in) {
- case 'query':
+ case "query":
if (!options.query) {
- options.query = {};
+ options.query = {}
}
- options.query[name] = token;
- break;
- case 'cookie':
- options.headers.append('Cookie', `${name}=${token}`);
- break;
- case 'header':
+ options.query[name] = token
+ break
+ case "cookie":
+ options.headers.append("Cookie", `${name}=${token}`)
+ break
+ case "header":
default:
- options.headers.set(name, token);
- break;
+ options.headers.set(name, token)
+ break
}
- return;
+ return
}
-};
+}
-export const buildUrl: Client['buildUrl'] = (options) => {
+export const buildUrl: Client["buildUrl"] = (options) => {
const url = getUrl({
baseUrl: options.baseUrl as string,
path: options.path,
query: options.query,
querySerializer:
- typeof options.querySerializer === 'function'
+ typeof options.querySerializer === "function"
? options.querySerializer
: createQuerySerializer(options.querySerializer),
url: options.url,
- });
- return url;
-};
+ })
+ return url
+}
export const getUrl = ({
baseUrl,
@@ -243,144 +218,125 @@ export const getUrl = ({
querySerializer,
url: _url,
}: {
- baseUrl?: string;
- path?: Record<string, unknown>;
- query?: Record<string, unknown>;
- querySerializer: QuerySerializer;
- url: string;
+ baseUrl?: string
+ path?: Record<string, unknown>
+ query?: Record<string, unknown>
+ querySerializer: QuerySerializer
+ url: string
}) => {
- const pathUrl = _url.startsWith('/') ? _url : `/${_url}`;
- let url = (baseUrl ?? '') + pathUrl;
+ const pathUrl = _url.startsWith("/") ? _url : `/${_url}`
+ let url = (baseUrl ?? "") + pathUrl
if (path) {
- url = defaultPathSerializer({ path, url });
+ url = defaultPathSerializer({ path, url })
}
- let search = query ? querySerializer(query) : '';
- if (search.startsWith('?')) {
- search = search.substring(1);
+ let search = query ? querySerializer(query) : ""
+ if (search.startsWith("?")) {
+ search = search.substring(1)
}
if (search) {
- url += `?${search}`;
+ url += `?${search}`
}
- return url;
-};
+ return url
+}
export const mergeConfigs = (a: Config, b: Config): Config => {
- const config = { ...a, ...b };
- if (config.baseUrl?.endsWith('/')) {
- config.baseUrl = config.baseUrl.substring(0, config.baseUrl.length - 1);
+ const config = { ...a, ...b }
+ if (config.baseUrl?.endsWith("/")) {
+ config.baseUrl = config.baseUrl.substring(0, config.baseUrl.length - 1)
}
- config.headers = mergeHeaders(a.headers, b.headers);
- return config;
-};
-
-export const mergeHeaders = (
- ...headers: Array<Required<Config>['headers'] | undefined>
-): Headers => {
- const mergedHeaders = new Headers();
+ config.headers = mergeHeaders(a.headers, b.headers)
+ return config
+}
+
+export const mergeHeaders = (...headers: Array<Required<Config>["headers"] | undefined>): Headers => {
+ const mergedHeaders = new Headers()
for (const header of headers) {
- if (!header || typeof header !== 'object') {
- continue;
+ if (!header || typeof header !== "object") {
+ continue
}
- const iterator =
- header instanceof Headers ? header.entries() : Object.entries(header);
+ const iterator = header instanceof Headers ? header.entries() : Object.entries(header)
for (const [key, value] of iterator) {
if (value === null) {
- mergedHeaders.delete(key);
+ mergedHeaders.delete(key)
} else if (Array.isArray(value)) {
for (const v of value) {
- mergedHeaders.append(key, v as string);
+ mergedHeaders.append(key, v as string)
}
} else if (value !== undefined) {
// assume object headers are meant to be JSON stringified, i.e. their
// content value in OpenAPI specification is 'application/json'
- mergedHeaders.set(
- key,
- typeof value === 'object' ? JSON.stringify(value) : (value as string),
- );
+ mergedHeaders.set(key, typeof value === "object" ? JSON.stringify(value) : (value as string))
}
}
}
- return mergedHeaders;
-};
+ return mergedHeaders
+}
type ErrInterceptor<Err, Res, Req, Options> = (
error: Err,
response: Res,
request: Req,
options: Options,
-) => Err | Promise<Err>;
+) => Err | Promise<Err>
-type ReqInterceptor<Req, Options> = (
- request: Req,
- options: Options,
-) => Req | Promise<Req>;
+type ReqInterceptor<Req, Options> = (request: Req, options: Options) => Req | Promise<Req>
-type ResInterceptor<Res, Req, Options> = (
- response: Res,
- request: Req,
- options: Options,
-) => Res | Promise<Res>;
+type ResInterceptor<Res, Req, Options> = (response: Res, request: Req, options: Options) => Res | Promise<Res>
class Interceptors<Interceptor> {
- _fns: (Interceptor | null)[];
+ _fns: (Interceptor | null)[]
constructor() {
- this._fns = [];
+ this._fns = []
}
clear() {
- this._fns = [];
+ this._fns = []
}
getInterceptorIndex(id: number | Interceptor): number {
- if (typeof id === 'number') {
- return this._fns[id] ? id : -1;
+ if (typeof id === "number") {
+ return this._fns[id] ? id : -1
} else {
- return this._fns.indexOf(id);
+ return this._fns.indexOf(id)
}
}
exists(id: number | Interceptor) {
- const index = this.getInterceptorIndex(id);
- return !!this._fns[index];
+ const index = this.getInterceptorIndex(id)
+ return !!this._fns[index]
}
eject(id: number | Interceptor) {
- const index = this.getInterceptorIndex(id);
+ const index = this.getInterceptorIndex(id)
if (this._fns[index]) {
- this._fns[index] = null;
+ this._fns[index] = null
}
}
update(id: number | Interceptor, fn: Interceptor) {
- const index = this.getInterceptorIndex(id);
+ const index = this.getInterceptorIndex(id)
if (this._fns[index]) {
- this._fns[index] = fn;
- return id;
+ this._fns[index] = fn
+ return id
} else {
- return false;
+ return false
}
}
use(fn: Interceptor) {
- this._fns = [...this._fns, fn];
- return this._fns.length - 1;
+ this._fns = [...this._fns, fn]
+ return this._fns.length - 1
}
}
// `createInterceptors()` response, meant for external use as it does not
// expose internals
export interface Middleware<Req, Res, Err, Options> {
- error: Pick<
- Interceptors<ErrInterceptor<Err, Res, Req, Options>>,
- 'eject' | 'use'
- >;
- request: Pick<Interceptors<ReqInterceptor<Req, Options>>, 'eject' | 'use'>;
- response: Pick<
- Interceptors<ResInterceptor<Res, Req, Options>>,
- 'eject' | 'use'
- >;
+ error: Pick<Interceptors<ErrInterceptor<Err, Res, Req, Options>>, "eject" | "use">
+ request: Pick<Interceptors<ReqInterceptor<Req, Options>>, "eject" | "use">
+ response: Pick<Interceptors<ResInterceptor<Res, Req, Options>>, "eject" | "use">
}
// do not add `Middleware` as return type so we can use _fns internally
@@ -388,30 +344,30 @@ export const createInterceptors = <Req, Res, Err, Options>() => ({
error: new Interceptors<ErrInterceptor<Err, Res, Req, Options>>(),
request: new Interceptors<ReqInterceptor<Req, Options>>(),
response: new Interceptors<ResInterceptor<Res, Req, Options>>(),
-});
+})
const defaultQuerySerializer = createQuerySerializer({
allowReserved: false,
array: {
explode: true,
- style: 'form',
+ style: "form",
},
object: {
explode: true,
- style: 'deepObject',
+ style: "deepObject",
},
-});
+})
const defaultHeaders = {
- 'Content-Type': 'application/json',
-};
+ "Content-Type": "application/json",
+}
export const createConfig = <T extends ClientOptions = ClientOptions>(
override: Config<Omit<ClientOptions, keyof T> & T> = {},
): Config<Omit<ClientOptions, keyof T> & T> => ({
...jsonBodySerializer,
headers: defaultHeaders,
- parseAs: 'auto',
+ parseAs: "auto",
querySerializer: defaultQuerySerializer,
...override,
-});
+})