@openapi-qraft/react
Version:
OpenAPI client for React, providing type-safe requests and dynamic TanStack Query React Hooks via a modular, Proxy-based architecture.
1 lines • 24.1 kB
Source Map (JSON)
{"version":3,"file":"qraftAPIClient.cjs","sources":["../../src/qraftAPIClient.ts"],"sourcesContent":["import type { QraftServiceOperationsToken } from '@openapi-qraft/tanstack-query-react-types';\nimport type { QueryClient } from '@tanstack/react-query';\nimport type * as callbacks from './callbacks/index.js';\nimport type * as operationInvokeModule from './callbacks/operationInvokeFn.js';\nimport type {\n OperationSchema,\n RequestFnInfo,\n RequestFnResponse,\n} from './lib/requestFn.js';\nimport { createRecursiveProxy } from './lib/createRecursiveProxy.js';\n\nexport interface CreateAPIBasicClientOptions {\n requestFn: (\n schema: OperationSchema,\n requestInfo: RequestFnInfo\n ) => Promise<RequestFnResponse<any, any>>;\n baseUrl: string;\n}\n\nexport interface CreateAPIBasicQueryClientOptions {\n queryClient: QueryClient;\n}\n\nexport interface CreateAPIQueryClientOptions\n extends CreateAPIBasicClientOptions,\n CreateAPIBasicQueryClientOptions {}\n\n/**\n * @deprecated use `CreateAPIClientOptions` instead\n */\nexport type QraftClientOptions =\n | CreateAPIBasicClientOptions\n | CreateAPIQueryClientOptions;\n\nexport type CreateAPIClientOptions =\n | CreateAPIBasicClientOptions\n | CreateAPIBasicQueryClientOptions\n | CreateAPIQueryClientOptions;\n\n/**\n * Creates a QueryClient compatible API Client which contains all operations\n * such as `useQuery`, `useMutation`.\n *\n * @example Fetching data with QueryClient\n * ```ts\n * const api = qraftAPIClient(services, callbacks, {\n * requestFn: requestFn,\n * baseUrl: 'https://api.example.com',\n * queryClient: new QueryClient(),\n * });\n *\n * api.service.operation({\n * parameters: { path: { id: 1 } },\n * });\n * ```\n */\nexport function qraftAPIClient<\n Services extends UnionServiceOperationsDeclaration<Services>,\n Callbacks extends ServiceMethods,\n>(\n services: Services,\n callbacks: Callbacks,\n options: CreateAPIQueryClientOptions\n): APIDefaultQueryClientServices<Services>;\n\n/**\n * Creates a QueryClient compatible API Client which contains all operations\n * such as `useQuery`, `useMutation`.\n *\n * @example Fetching data with QueryClient\n * ```ts\n * const api = qraftAPIClient(services, callbacks, {\n * requestFn: requestFn,\n * baseUrl: 'https://api.example.com',\n * queryClient: new QueryClient(),\n * });\n *\n * api.service.operation({\n * parameters: { path: { id: 1 } },\n * });\n * ```\n */\nexport function qraftAPIClient<\n Services extends UnionServiceOperationsDeclaration<Services>,\n Callbacks extends PartialServiceMethods,\n>(\n services: Services,\n callbacks: Callbacks,\n options: CreateAPIQueryClientOptions\n): APIQueryClientServices<Services, Callbacks>;\n\n/**\n * Creates a QueryClient compatible API Client which contains\n * only state management manipulations such as `useIsMutating`,\n * `setQueryData`, `getQueryData` and `invalidateQueries`.\n *\n * @example Invalidating queries with QueryClient\n * ```ts\n * const api = qraftAPIClient(services, callbacks, {\n * // an instance of QueryClient shared between all clients\n * queryClient: sharedQueryClient\n * });\n *\n * api.service.operation.invalidateQueries({\n * parameters: { path: { id: 1 } },\n * });\n */\nexport function qraftAPIClient<\n Services extends UnionServiceOperationsDeclaration<Services>,\n Callbacks extends PartialServiceMethods,\n>(\n services: Services,\n callbacks: Callbacks,\n options: CreateAPIBasicQueryClientOptions\n): APIBasicQueryClientServices<Services, Callbacks>;\n\n/**\n * Creates a basic API Client which contains all hooks and methods\n * that don't require an explicitly provided QueryClient.\n * Hooks like `useQuery` and `useMutation` will automatically retrieve\n * the QueryClient from the `<QueryClientProvider />` context.\n *\n * @example Fetching data with QueryClient from context\n * ```ts\n * const api = qraftAPIClient(services, callbacks, {\n * requestFn: requestFn,\n * baseUrl: 'https://api.example.com',\n * });\n *\n * // QueryClient will be retrieved from React context\n * api.service.operation.useQuery({\n * parameters: { path: { id: 1 } },\n * });\n * ```\n *\n * @example Fetching data without QueryClient\n * ```ts\n * const api = qraftAPIClient(services, callbacks, {\n * requestFn: requestFn,\n * baseUrl: 'https://api.example.com',\n * });\n *\n * api.service.operation({\n * parameters: { path: { id: 1 } },\n * });\n * ```\n */\nexport function qraftAPIClient<\n Services extends UnionServiceOperationsDeclaration<Services>,\n Callbacks extends PartialServiceMethods,\n>(\n services: Services,\n callbacks: Callbacks,\n options: CreateAPIBasicClientOptions\n): APIBasicClientServices<Services, Callbacks>;\n\n/**\n * Creates a utility API Client which contains utility operations\n * such as `getQueryKey`, `getInfiniteQueryKey`, `getMutationKey` and state hooks\n * like `useIsFetching` and `useMutationData`.\n *\n * @example Using state hooks\n * ```ts\n * const api = qraftAPIClient(services, callbacks);\n *\n * // Check if any query is currently fetching\n * const isFetching = api.service.operation.useIsFetching();\n * ```\n *\n * @example Getting query keys with utility client\n * ```ts\n * const api = qraftAPIClient(services, callbacks);\n *\n * api.service.operation.getQueryKey({\n * parameters: { path: { id: 1 } },\n * });\n * ```\n */\nexport function qraftAPIClient<\n Services extends UnionServiceOperationsDeclaration<Services>,\n Callbacks extends Pick<PartialServiceMethods, UtilityOperationCallbacks>,\n>(\n services: Services,\n callbacks: Callbacks\n): APIUtilityClientServices<Services, Callbacks>;\n\nexport function qraftAPIClient<\n Services extends UnionServiceOperationsDeclaration<Services>,\n Callbacks extends PartialServiceMethods,\n>(\n services: Services,\n callbacks: Callbacks,\n options?: CreateAPIClientOptions\n):\n | APIQueryClientServices<Services, Callbacks>\n | APIDefaultQueryClientServices<Services>\n | APIBasicQueryClientServices<Services, Callbacks>\n | APIUtilityClientServices<Services, Callbacks> {\n const stringTag = 'QraftAPIClient';\n\n const toString = (path: (symbol | string)[]): string => {\n return `[${stringTag}${path.length ? ' ' + path.join('.') : ''}]`;\n };\n\n const primitiveMethods = {\n [Symbol.toPrimitive](\n this: undefined,\n path: (string | symbol)[],\n hint: 'string' | 'number' | 'default'\n ): unknown {\n if (hint === 'number') return NaN;\n if (hint === 'string') return toString(path);\n return getByPath(services, path);\n },\n valueOf(this: undefined, path: (string | symbol)[]): unknown {\n return getByPath(services, path);\n },\n toJSON(this: undefined, path: (string | symbol)[]): string {\n return JSON.stringify(getByPath(services, path));\n },\n toString(this: undefined, path: (string | symbol)[]): string {\n return toString(path);\n },\n };\n\n return createRecursiveProxy(\n function getCallback(getPath, key) {\n if (Object.prototype.hasOwnProperty.call(primitiveMethods, key)) {\n return primitiveMethods[key as keyof typeof primitiveMethods].bind(\n undefined,\n getPath\n );\n } else if (key === Symbol.toStringTag) {\n return stringTag;\n }\n\n if (key !== 'schema') return;\n if (\n getPath.length !== 2 &&\n !('schema' in services) &&\n getPath.length !== 1 &&\n !(services[getPath[0] as never] as OperationsDeclaration<any>)?.schema\n )\n return;\n\n const serviceOperation = getByPath(services, getPath);\n if (!isServiceOperation(serviceOperation))\n throw new Error(`Service operation not found: ${getPath.join('.')}`);\n return serviceOperation.schema;\n },\n function applyCallback(applyPath, args) {\n const { path, callbackName } = extractCallbackDetails(\n applyPath,\n services\n );\n\n assertValidCallbackName(callbackName, callbacks);\n\n const serviceOperation = getByPath(services, path);\n\n if (!isServiceOperation(serviceOperation))\n throw new Error(`Service operation not found: ${path.join('.')}`);\n\n if (\n callbackName !== 'operationInvokeFn' &&\n callbackName !== 'getQueryKey' &&\n callbackName !== 'getMutationKey' &&\n callbackName !== 'getInfiniteQueryKey' &&\n callbackName !== 'useInfiniteQuery' &&\n callbackName !== 'useQueries' &&\n callbackName !== 'useQuery' &&\n callbackName !== 'useSuspenseInfiniteQuery' &&\n callbackName !== 'useSuspenseQueries' &&\n callbackName !== 'useSuspenseQuery' &&\n callbackName !== 'useIsFetching' &&\n callbackName !== 'useMutation' &&\n callbackName !== 'useIsMutating' &&\n callbackName !== 'useMutationState'\n )\n if (!options || !('queryClient' in options && options.queryClient))\n throw new Error(\n `'qraft.<service>.<operation>.${String(callbackName)}()' requires 'queryClient' in 'createAPIClient(...)' options.`\n );\n\n // @ts-expect-error - Too complex union type\n return callbacks[callbackName](options, serviceOperation.schema, args);\n },\n []\n ) as never;\n}\n\nfunction assertValidCallbackName<\n Callbacks extends Record<string, (...rest: any[]) => unknown>,\n>(\n callbackName: string | number | symbol,\n callbacks: Callbacks\n): asserts callbackName is keyof Callbacks {\n if (!(callbackName in callbacks)) {\n if (\n (callbackName as InvokeOperationCallback) ===\n ('operationInvokeFn' satisfies InvokeOperationCallback)\n )\n throw new Error(\n `Callback 'operationInvokeFn' is required for executing 'qraft.<service>.<operation>()', but it is not provided in the 'callbacks' object.`\n );\n throw new Error(\n `Callback for 'qraft.<service>.<operation>.${String(callbackName)}()' is not provided in the 'callbacks' object.`\n );\n }\n}\n\n/**\n * Extracts Callback details from the applyPath\n */\nfunction extractCallbackDetails(\n applyPath: (string | symbol)[],\n services: UnionServiceOperationsDeclaration<any>\n) {\n // client.<service>.<operation>() [OperationInvokeFn]\n // <service>.<operation>() [OperationInvokeFn]\n // client() [OperationInvokeFn]\n // client()\n if (\n (applyPath.length === 2 &&\n !(services[applyPath[0] as never] as OperationsDeclaration<any>)\n ?.schema) ||\n (applyPath.length === 0 && 'schema' in services)\n ) {\n return {\n path: applyPath,\n callbackName: 'operationInvokeFn' satisfies InvokeOperationCallback,\n };\n } else {\n // client.<service>.<operation>.<method>()\n // <service>.<operation>.<method>()\n // client.<method>()\n return {\n path: applyPath.slice(0, -1),\n // The last arg is for instance `.useMutation` or `.useQuery()`\n callbackName: applyPath[applyPath.length - 1],\n };\n }\n}\n\nfunction isServiceOperation(\n input: unknown\n): input is { schema: OperationSchema } {\n return input !== null && typeof input === 'object' && 'schema' in input;\n}\n\nfunction getByPath(obj: Record<string, unknown>, path: (string | symbol)[]) {\n return path.reduce<unknown>((acc, key) => {\n if (acc && typeof acc === 'object' && key in acc)\n return acc[key as keyof typeof acc];\n }, obj);\n}\n\ntype ServiceMethods = typeof callbacks;\n\ntype PartialServiceMethods = Partial<ServiceMethods>;\n\ntype OperationDeclaration = {\n schema: OperationSchema;\n [QraftServiceOperationsToken]: Partial<\n Record<\n | QueryOperationCallbacks\n | QueryOperationStateCallbacks\n | MutationOperationHookCallbacks\n | MutationOperationStateCallbacks\n | UtilityOperationCallbacks,\n any\n >\n > & {\n types: any;\n schema: OperationSchema;\n (...args: any[]): any;\n };\n};\n\ntype OperationsDeclaration<Operations> = {\n [operation in keyof Operations]: OperationDeclaration;\n};\n\ntype ServicesDeclaration<Services> = {\n [service in keyof Services]: OperationsDeclaration<Services[service]>;\n};\n\nexport type UnionServiceOperationsDeclaration<Services> =\n | ServicesDeclaration<Services>\n | OperationsDeclaration<Services>\n | OperationDeclaration;\n\ntype QueryOperationHookCallbacks = Extract<\n keyof ServiceMethods,\n | 'useInfiniteQuery'\n | 'useQueries'\n | 'useQuery'\n | 'useSuspenseInfiniteQuery'\n | 'useSuspenseQueries'\n | 'useSuspenseQuery'\n>;\n\ntype QueryOperationCallbacks =\n | Extract<\n keyof ServiceMethods,\n | 'fetchInfiniteQuery'\n | 'fetchQuery'\n | 'prefetchInfiniteQuery'\n | 'prefetchQuery'\n | 'refetchQueries'\n | 'ensureQueryData'\n | 'ensureInfiniteQueryData'\n >\n | QueryOperationHookCallbacks;\n\ntype QueryOperationStateHookCallbacks = Extract<\n keyof ServiceMethods,\n 'useIsFetching'\n>;\n\ntype QueryOperationStateCallbacks =\n | Extract<\n keyof ServiceMethods,\n | 'cancelQueries'\n | 'getInfiniteQueryData'\n | 'getInfiniteQueryState'\n | 'getQueriesData'\n | 'getQueryData'\n | 'getQueryState'\n | 'invalidateQueries'\n | 'isFetching'\n | 'removeQueries'\n | 'resetQueries'\n | 'setInfiniteQueryData'\n | 'setQueriesData'\n | 'setQueryData'\n >\n | QueryOperationStateHookCallbacks;\n\ntype MutationOperationHookCallbacks = Extract<\n keyof ServiceMethods,\n 'useMutation'\n>;\n\ntype MutationOperationStateHookCallbacks = Extract<\n keyof ServiceMethods,\n 'useIsMutating' | 'useMutationState'\n>;\n\ntype MutationOperationStateCallbacks =\n | Extract<keyof ServiceMethods, 'isMutating'>\n | MutationOperationStateHookCallbacks;\n\ntype InvokeOperationCallback = Extract<\n keyof typeof operationInvokeModule,\n 'operationInvokeFn'\n>;\n\ntype UtilityOperationCallbacks = Extract<\n keyof ServiceMethods,\n | 'getQueryKey'\n | 'getInfiniteQueryKey'\n | 'getMutationKey'\n | QueryOperationStateHookCallbacks\n | MutationOperationStateHookCallbacks\n>;\n\ntype OperationCallbackList =\n | QueryOperationCallbacks\n | QueryOperationStateCallbacks\n | MutationOperationHookCallbacks\n | MutationOperationStateCallbacks\n | InvokeOperationCallback\n | UtilityOperationCallbacks;\n\nexport type APIQueryClientServices<\n Services extends UnionServiceOperationsDeclaration<Services>,\n Callbacks extends PartialServiceMethods,\n> = ServicesFilteredByCallbacks<\n Services,\n Extract<keyof Callbacks, OperationCallbackList>\n>;\n\nexport type APIDefaultQueryClientServices<\n Services extends UnionServiceOperationsDeclaration<Services>,\n> = Services extends OperationDeclaration\n ? Services[QraftServiceOperationsToken]\n : Services extends OperationsDeclaration<Services>\n ? {\n [operation in keyof Services]: Services[operation][QraftServiceOperationsToken];\n }\n : Services extends ServicesDeclaration<Services>\n ? {\n [service in keyof Services]: {\n [operation in keyof Services[service]]: Services[service][operation][QraftServiceOperationsToken];\n };\n }\n : never;\n\nexport type APIBasicQueryClientServices<\n Services extends UnionServiceOperationsDeclaration<Services>,\n Callbacks extends PartialServiceMethods,\n> = ServicesFilteredByCallbacks<\n Services,\n Extract<\n keyof Callbacks,\n | QueryOperationStateCallbacks\n | MutationOperationStateCallbacks\n | UtilityOperationCallbacks\n >\n>;\n\nexport type APIBasicClientServices<\n Services extends UnionServiceOperationsDeclaration<Services>,\n Callbacks extends PartialServiceMethods,\n> = ServicesFilteredByCallbacks<\n Services,\n Extract<\n keyof Callbacks,\n | InvokeOperationCallback\n | UtilityOperationCallbacks\n | QueryOperationHookCallbacks\n | QueryOperationStateHookCallbacks\n | MutationOperationStateHookCallbacks\n | MutationOperationHookCallbacks\n >\n>;\n\nexport type APIUtilityClientServices<\n Services extends UnionServiceOperationsDeclaration<Services>,\n Callbacks extends Pick<PartialServiceMethods, UtilityOperationCallbacks>,\n> = ServicesFilteredByUtilityCallbacks<\n Services,\n Extract<keyof Callbacks, UtilityOperationCallbacks>\n>;\n\ntype ServicesFilteredByCallbacks<\n Services extends UnionServiceOperationsDeclaration<Services>,\n CallbackList extends OperationCallbackList,\n> = Services extends OperationDeclaration\n ? Pick<\n Services[QraftServiceOperationsToken],\n Extract<\n keyof Services[QraftServiceOperationsToken],\n CallbackList | 'schema' | 'types'\n >\n > &\n OperationInvokeFn<Services[QraftServiceOperationsToken], CallbackList>\n : Services extends OperationsDeclaration<Services>\n ? {\n [operation in keyof Services]: Pick<\n Services[operation][QraftServiceOperationsToken],\n Extract<\n keyof Services[operation][QraftServiceOperationsToken],\n CallbackList | 'schema' | 'types'\n >\n > &\n OperationInvokeFn<\n Services[operation][QraftServiceOperationsToken],\n CallbackList\n >;\n }\n : Services extends ServicesDeclaration<Services>\n ? {\n [serviceName in keyof Services]: {\n [operation in keyof Services[serviceName]]: Pick<\n Services[serviceName][operation][QraftServiceOperationsToken],\n Extract<\n keyof Services[serviceName][operation][QraftServiceOperationsToken],\n CallbackList | 'schema' | 'types'\n >\n > &\n OperationInvokeFn<\n Services[serviceName][operation][QraftServiceOperationsToken],\n CallbackList\n >;\n };\n }\n : never;\n\ntype OperationInvokeFn<\n InvokeFn extends (...args: any[]) => any,\n CallbackList extends OperationCallbackList,\n> = InvokeOperationCallback extends CallbackList\n ? InvokeFn extends (...args: infer Args) => infer Result\n ? { (...args: Args): Result }\n : Record<string, never>\n : Record<string, never>;\n\ntype ServicesFilteredByUtilityCallbacks<\n Services extends UnionServiceOperationsDeclaration<Services>,\n CallbackList extends UtilityOperationCallbacks,\n> = Services extends OperationDeclaration\n ? Pick<\n Services[QraftServiceOperationsToken],\n Extract<\n keyof Services[QraftServiceOperationsToken],\n CallbackList | 'schema' | 'types'\n >\n >\n : Services extends OperationsDeclaration<Services>\n ? {\n [operation in keyof Services]: Pick<\n Services[operation][QraftServiceOperationsToken],\n Extract<\n keyof Services[operation][QraftServiceOperationsToken],\n CallbackList | 'schema' | 'types'\n >\n >;\n }\n : Services extends ServicesDeclaration<Services>\n ? {\n [serviceName in keyof Services]: {\n [operation in keyof Services[serviceName]]: Pick<\n Services[serviceName][operation][QraftServiceOperationsToken],\n Extract<\n keyof Services[serviceName][operation][QraftServiceOperationsToken],\n CallbackList | 'schema' | 'types'\n >\n >;\n };\n }\n : never;\n"],"names":["qraftAPIClient","services","callbacks","options","stringTag","toString","path","length","join","primitiveMethods","Symbol","toPrimitive","hint","NaN","getByPath","valueOf","toJSON","JSON","stringify","createRecursiveProxy","getCallback","getPath","key","Object","prototype","hasOwnProperty","call","bind","undefined","toStringTag","schema","serviceOperation","isServiceOperation","Error","applyCallback","applyPath","args","callbackName","extractCallbackDetails","assertValidCallbackName","queryClient","String","slice","input","obj","reduce","acc"],"mappings":"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"}