UNPKG

@openapi-qraft/react

Version:

OpenAPI client for React, providing type-safe requests and dynamic TanStack Query React Hooks via a modular, Proxy-based architecture.

184 lines 11.9 kB
import type { QraftServiceOperationsToken } from '@openapi-qraft/tanstack-query-react-types'; import type { QueryClient } from '@tanstack/react-query'; import type * as callbacks from './callbacks/index.js'; import type * as operationInvokeModule from './callbacks/operationInvokeFn.js'; import type { OperationSchema, RequestFnInfo, RequestFnResponse } from './lib/requestFn.js'; export interface CreateAPIBasicClientOptions { requestFn: (schema: OperationSchema, requestInfo: RequestFnInfo) => Promise<RequestFnResponse<any, any>>; baseUrl: string; } export interface CreateAPIBasicQueryClientOptions { queryClient: QueryClient; } export interface CreateAPIQueryClientOptions extends CreateAPIBasicClientOptions, CreateAPIBasicQueryClientOptions { } /** * @deprecated use `CreateAPIClientOptions` instead */ export type QraftClientOptions = CreateAPIBasicClientOptions | CreateAPIQueryClientOptions; export type CreateAPIClientOptions = CreateAPIBasicClientOptions | CreateAPIBasicQueryClientOptions | CreateAPIQueryClientOptions; /** * Creates a QueryClient compatible API Client which contains all operations * such as `useQuery`, `useMutation`. * * @example Fetching data with QueryClient * ```ts * const api = qraftAPIClient(services, callbacks, { * requestFn: requestFn, * baseUrl: 'https://api.example.com', * queryClient: new QueryClient(), * }); * * api.service.operation({ * parameters: { path: { id: 1 } }, * }); * ``` */ export declare function qraftAPIClient<Services extends UnionServiceOperationsDeclaration<Services>, Callbacks extends ServiceMethods>(services: Services, callbacks: Callbacks, options: CreateAPIQueryClientOptions): APIDefaultQueryClientServices<Services>; /** * Creates a QueryClient compatible API Client which contains all operations * such as `useQuery`, `useMutation`. * * @example Fetching data with QueryClient * ```ts * const api = qraftAPIClient(services, callbacks, { * requestFn: requestFn, * baseUrl: 'https://api.example.com', * queryClient: new QueryClient(), * }); * * api.service.operation({ * parameters: { path: { id: 1 } }, * }); * ``` */ export declare function qraftAPIClient<Services extends UnionServiceOperationsDeclaration<Services>, Callbacks extends PartialServiceMethods>(services: Services, callbacks: Callbacks, options: CreateAPIQueryClientOptions): APIQueryClientServices<Services, Callbacks>; /** * Creates a QueryClient compatible API Client which contains * only state management manipulations such as `useIsMutating`, * `setQueryData`, `getQueryData` and `invalidateQueries`. * * @example Invalidating queries with QueryClient * ```ts * const api = qraftAPIClient(services, callbacks, { * // an instance of QueryClient shared between all clients * queryClient: sharedQueryClient * }); * * api.service.operation.invalidateQueries({ * parameters: { path: { id: 1 } }, * }); */ export declare function qraftAPIClient<Services extends UnionServiceOperationsDeclaration<Services>, Callbacks extends PartialServiceMethods>(services: Services, callbacks: Callbacks, options: CreateAPIBasicQueryClientOptions): APIBasicQueryClientServices<Services, Callbacks>; /** * Creates a basic API Client which contains all hooks and methods * that don't require an explicitly provided QueryClient. * Hooks like `useQuery` and `useMutation` will automatically retrieve * the QueryClient from the `<QueryClientProvider />` context. * * @example Fetching data with QueryClient from context * ```ts * const api = qraftAPIClient(services, callbacks, { * requestFn: requestFn, * baseUrl: 'https://api.example.com', * }); * * // QueryClient will be retrieved from React context * api.service.operation.useQuery({ * parameters: { path: { id: 1 } }, * }); * ``` * * @example Fetching data without QueryClient * ```ts * const api = qraftAPIClient(services, callbacks, { * requestFn: requestFn, * baseUrl: 'https://api.example.com', * }); * * api.service.operation({ * parameters: { path: { id: 1 } }, * }); * ``` */ export declare function qraftAPIClient<Services extends UnionServiceOperationsDeclaration<Services>, Callbacks extends PartialServiceMethods>(services: Services, callbacks: Callbacks, options: CreateAPIBasicClientOptions): APIBasicClientServices<Services, Callbacks>; /** * Creates a utility API Client which contains utility operations * such as `getQueryKey`, `getInfiniteQueryKey`, `getMutationKey` and state hooks * like `useIsFetching` and `useMutationData`. * * @example Using state hooks * ```ts * const api = qraftAPIClient(services, callbacks); * * // Check if any query is currently fetching * const isFetching = api.service.operation.useIsFetching(); * ``` * * @example Getting query keys with utility client * ```ts * const api = qraftAPIClient(services, callbacks); * * api.service.operation.getQueryKey({ * parameters: { path: { id: 1 } }, * }); * ``` */ export declare function qraftAPIClient<Services extends UnionServiceOperationsDeclaration<Services>, Callbacks extends Pick<PartialServiceMethods, UtilityOperationCallbacks>>(services: Services, callbacks: Callbacks): APIUtilityClientServices<Services, Callbacks>; type ServiceMethods = typeof callbacks; type PartialServiceMethods = Partial<ServiceMethods>; type OperationDeclaration = { schema: OperationSchema; [QraftServiceOperationsToken]: Partial<Record<QueryOperationCallbacks | QueryOperationStateCallbacks | MutationOperationHookCallbacks | MutationOperationStateCallbacks | UtilityOperationCallbacks, any>> & { types: any; schema: OperationSchema; (...args: any[]): any; }; }; type OperationsDeclaration<Operations> = { [operation in keyof Operations]: OperationDeclaration; }; type ServicesDeclaration<Services> = { [service in keyof Services]: OperationsDeclaration<Services[service]>; }; export type UnionServiceOperationsDeclaration<Services> = ServicesDeclaration<Services> | OperationsDeclaration<Services> | OperationDeclaration; type QueryOperationHookCallbacks = Extract<keyof ServiceMethods, 'useInfiniteQuery' | 'useQueries' | 'useQuery' | 'useSuspenseInfiniteQuery' | 'useSuspenseQueries' | 'useSuspenseQuery'>; type QueryOperationCallbacks = Extract<keyof ServiceMethods, 'fetchInfiniteQuery' | 'fetchQuery' | 'prefetchInfiniteQuery' | 'prefetchQuery' | 'refetchQueries' | 'ensureQueryData' | 'ensureInfiniteQueryData'> | QueryOperationHookCallbacks; type QueryOperationStateHookCallbacks = Extract<keyof ServiceMethods, 'useIsFetching'>; type QueryOperationStateCallbacks = Extract<keyof ServiceMethods, 'cancelQueries' | 'getInfiniteQueryData' | 'getInfiniteQueryState' | 'getQueriesData' | 'getQueryData' | 'getQueryState' | 'invalidateQueries' | 'isFetching' | 'removeQueries' | 'resetQueries' | 'setInfiniteQueryData' | 'setQueriesData' | 'setQueryData'> | QueryOperationStateHookCallbacks; type MutationOperationHookCallbacks = Extract<keyof ServiceMethods, 'useMutation'>; type MutationOperationStateHookCallbacks = Extract<keyof ServiceMethods, 'useIsMutating' | 'useMutationState'>; type MutationOperationStateCallbacks = Extract<keyof ServiceMethods, 'isMutating'> | MutationOperationStateHookCallbacks; type InvokeOperationCallback = Extract<keyof typeof operationInvokeModule, 'operationInvokeFn'>; type UtilityOperationCallbacks = Extract<keyof ServiceMethods, 'getQueryKey' | 'getInfiniteQueryKey' | 'getMutationKey' | QueryOperationStateHookCallbacks | MutationOperationStateHookCallbacks>; type OperationCallbackList = QueryOperationCallbacks | QueryOperationStateCallbacks | MutationOperationHookCallbacks | MutationOperationStateCallbacks | InvokeOperationCallback | UtilityOperationCallbacks; export type APIQueryClientServices<Services extends UnionServiceOperationsDeclaration<Services>, Callbacks extends PartialServiceMethods> = ServicesFilteredByCallbacks<Services, Extract<keyof Callbacks, OperationCallbackList>>; export type APIDefaultQueryClientServices<Services extends UnionServiceOperationsDeclaration<Services>> = Services extends OperationDeclaration ? Services[QraftServiceOperationsToken] : Services extends OperationsDeclaration<Services> ? { [operation in keyof Services]: Services[operation][QraftServiceOperationsToken]; } : Services extends ServicesDeclaration<Services> ? { [service in keyof Services]: { [operation in keyof Services[service]]: Services[service][operation][QraftServiceOperationsToken]; }; } : never; export type APIBasicQueryClientServices<Services extends UnionServiceOperationsDeclaration<Services>, Callbacks extends PartialServiceMethods> = ServicesFilteredByCallbacks<Services, Extract<keyof Callbacks, QueryOperationStateCallbacks | MutationOperationStateCallbacks | UtilityOperationCallbacks>>; export type APIBasicClientServices<Services extends UnionServiceOperationsDeclaration<Services>, Callbacks extends PartialServiceMethods> = ServicesFilteredByCallbacks<Services, Extract<keyof Callbacks, InvokeOperationCallback | UtilityOperationCallbacks | QueryOperationHookCallbacks | QueryOperationStateHookCallbacks | MutationOperationStateHookCallbacks | MutationOperationHookCallbacks>>; export type APIUtilityClientServices<Services extends UnionServiceOperationsDeclaration<Services>, Callbacks extends Pick<PartialServiceMethods, UtilityOperationCallbacks>> = ServicesFilteredByUtilityCallbacks<Services, Extract<keyof Callbacks, UtilityOperationCallbacks>>; type ServicesFilteredByCallbacks<Services extends UnionServiceOperationsDeclaration<Services>, CallbackList extends OperationCallbackList> = Services extends OperationDeclaration ? Pick<Services[QraftServiceOperationsToken], Extract<keyof Services[QraftServiceOperationsToken], CallbackList | 'schema' | 'types'>> & OperationInvokeFn<Services[QraftServiceOperationsToken], CallbackList> : Services extends OperationsDeclaration<Services> ? { [operation in keyof Services]: Pick<Services[operation][QraftServiceOperationsToken], Extract<keyof Services[operation][QraftServiceOperationsToken], CallbackList | 'schema' | 'types'>> & OperationInvokeFn<Services[operation][QraftServiceOperationsToken], CallbackList>; } : Services extends ServicesDeclaration<Services> ? { [serviceName in keyof Services]: { [operation in keyof Services[serviceName]]: Pick<Services[serviceName][operation][QraftServiceOperationsToken], Extract<keyof Services[serviceName][operation][QraftServiceOperationsToken], CallbackList | 'schema' | 'types'>> & OperationInvokeFn<Services[serviceName][operation][QraftServiceOperationsToken], CallbackList>; }; } : never; type OperationInvokeFn<InvokeFn extends (...args: any[]) => any, CallbackList extends OperationCallbackList> = InvokeOperationCallback extends CallbackList ? InvokeFn extends (...args: infer Args) => infer Result ? { (...args: Args): Result; } : Record<string, never> : Record<string, never>; type ServicesFilteredByUtilityCallbacks<Services extends UnionServiceOperationsDeclaration<Services>, CallbackList extends UtilityOperationCallbacks> = Services extends OperationDeclaration ? Pick<Services[QraftServiceOperationsToken], Extract<keyof Services[QraftServiceOperationsToken], CallbackList | 'schema' | 'types'>> : Services extends OperationsDeclaration<Services> ? { [operation in keyof Services]: Pick<Services[operation][QraftServiceOperationsToken], Extract<keyof Services[operation][QraftServiceOperationsToken], CallbackList | 'schema' | 'types'>>; } : Services extends ServicesDeclaration<Services> ? { [serviceName in keyof Services]: { [operation in keyof Services[serviceName]]: Pick<Services[serviceName][operation][QraftServiceOperationsToken], Extract<keyof Services[serviceName][operation][QraftServiceOperationsToken], CallbackList | 'schema' | 'types'>>; }; } : never; export {}; //# sourceMappingURL=qraftAPIClient.d.ts.map