{"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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"}