UNPKG

@hey-api/openapi-ts

Version:

🚀 The OpenAPI to TypeScript codegen. Generate clients, SDKs, validators, and more.

193 lines (171 loc) • 5.84 kB
import type { AsyncDataOptions, useAsyncData, useFetch, UseFetchOptions, useLazyAsyncData, useLazyFetch, } from 'nuxt/app'; import type { Ref } from 'vue'; import type { Auth } from '../core/auth'; import type { QuerySerializerOptions } from '../core/bodySerializer'; import type { Client as CoreClient, Config as CoreConfig, } from '../core/types'; export type ArraySeparatorStyle = ArrayStyle | MatrixStyle; type ArrayStyle = 'form' | 'spaceDelimited' | 'pipeDelimited'; type MatrixStyle = 'label' | 'matrix' | 'simple'; export type ObjectSeparatorStyle = ObjectStyle | MatrixStyle; type ObjectStyle = 'form' | 'deepObject'; export type QuerySerializer = ( query: Parameters<Client['buildUrl']>[0]['query'], ) => string; type WithRefs<TData> = { [K in keyof TData]: NonNullable<TData[K]> extends object ? WithRefs<NonNullable<TData[K]>> | Ref<NonNullable<TData[K]>> : NonNullable<TData[K]> | Ref<NonNullable<TData[K]>>; }; // copied from Nuxt export type KeysOf<T> = Array< T extends T ? (keyof T extends string ? keyof T : never) : never >; export interface Config<T extends ClientOptions = ClientOptions> extends Omit< FetchOptions<unknown>, 'baseURL' | 'body' | 'headers' | 'method' | 'query' >, WithRefs<Pick<FetchOptions<unknown>, 'query'>>, Omit<CoreConfig, 'querySerializer'> { /** * Base URL for all requests made by this client. */ baseURL?: T['baseURL']; /** * A function for serializing request query parameters. By default, arrays * will be exploded in form style, objects will be exploded in deepObject * style, and reserved characters are percent-encoded. * * {@link https://swagger.io/docs/specification/serialization/#query View examples} */ querySerializer?: QuerySerializer | QuerySerializerOptions; } export interface RequestOptions< TComposable extends Composable = Composable, ResT = unknown, DefaultT = undefined, Url extends string = string, > extends Config, WithRefs<{ /** * Any body that you want to add to your request. * * {@link https://developer.mozilla.org/docs/Web/API/fetch#body} */ body?: unknown; path?: FetchOptions<unknown>['query']; query?: FetchOptions<unknown>['query']; }> { asyncDataOptions?: AsyncDataOptions<ResT, ResT, KeysOf<ResT>, DefaultT>; composable: TComposable; key?: string; /** * Security mechanism(s) to use for the request. */ security?: ReadonlyArray<Auth>; url: Url; } export type RequestResult< TComposable extends Composable, ResT, TError, > = TComposable extends '$fetch' ? ReturnType<typeof $fetch<ResT>> : TComposable extends 'useAsyncData' ? ReturnType<typeof useAsyncData<ResT | null, TError>> : TComposable extends 'useFetch' ? ReturnType<typeof useFetch<ResT | null, TError>> : TComposable extends 'useLazyAsyncData' ? ReturnType<typeof useLazyAsyncData<ResT | null, TError>> : TComposable extends 'useLazyFetch' ? ReturnType<typeof useLazyFetch<ResT | null, TError>> : never; export interface ClientOptions { baseURL?: string; } type MethodFn = < TComposable extends Composable, ResT = unknown, TError = unknown, DefaultT = undefined, >( options: Omit<RequestOptions<TComposable, ResT, DefaultT>, 'method'>, ) => RequestResult<TComposable, ResT, TError>; type RequestFn = < TComposable extends Composable, ResT = unknown, TError = unknown, DefaultT = undefined, >( options: Omit<RequestOptions<TComposable, ResT, DefaultT>, 'method'> & Pick<Required<RequestOptions<TComposable, ResT, DefaultT>>, 'method'>, ) => RequestResult<TComposable, ResT, TError>; /** * The `createClientConfig()` function will be called on client initialization * and the returned object will become the client's initial configuration. * * You may want to initialize your client this way instead of calling * `setConfig()`. This is useful for example if you're using Next.js * to ensure your client always has the correct values. */ export type CreateClientConfig<T extends ClientOptions = ClientOptions> = ( override?: Config<ClientOptions & T>, ) => Config<Required<ClientOptions> & T>; export interface TDataShape { body?: unknown; headers?: unknown; path?: FetchOptions<unknown>['query']; query?: FetchOptions<unknown>['query']; url: string; } export type BuildUrlOptions< TData extends Omit<TDataShape, 'headers'> = Omit<TDataShape, 'headers'>, > = Pick<WithRefs<TData>, 'path' | 'query'> & Pick<TData, 'url'> & Pick<Options<'$fetch', TData>, 'baseURL' | 'querySerializer'>; type BuildUrlFn = <TData extends Omit<TDataShape, 'headers'>>( options: BuildUrlOptions<TData>, ) => string; export type Client = CoreClient<RequestFn, Config, MethodFn, BuildUrlFn>; type OmitKeys<T, K> = Pick<T, Exclude<keyof T, K>>; export type Options< TComposable extends Composable, TData extends TDataShape = TDataShape, ResT = unknown, DefaultT = undefined, > = OmitKeys< RequestOptions<TComposable, ResT, DefaultT>, 'body' | 'path' | 'query' | 'url' > & WithRefs<Omit<TData, 'url'>>; export type OptionsLegacyParser<TData = unknown> = TData extends { body?: any } ? TData extends { headers?: any } ? OmitKeys<RequestOptions, 'body' | 'headers' | 'url'> & TData : OmitKeys<RequestOptions, 'body' | 'url'> & TData & Pick<RequestOptions, 'headers'> : TData extends { headers?: any } ? OmitKeys<RequestOptions, 'headers' | 'url'> & TData & Pick<RequestOptions, 'body'> : OmitKeys<RequestOptions, 'url'> & TData; type FetchOptions<TData> = Omit< UseFetchOptions<TData, TData>, keyof AsyncDataOptions<TData> >; export type Composable = | '$fetch' | 'useAsyncData' | 'useFetch' | 'useLazyAsyncData' | 'useLazyFetch';