@tanstack/vue-query
Version:
Hooks for managing, caching and syncing asynchronous and remote data in Vue
1 lines • 3.5 kB
Source Map (JSON)
{"version":3,"sources":["../../src/usePrefetchInfiniteQuery.ts"],"sourcesContent":["import { getCurrentScope, unref, watchEffect } from 'vue-demi'\nimport { useQueryClient } from './useQueryClient'\nimport { cloneDeepUnref } from './utils'\nimport type {\n DefaultError,\n FetchInfiniteQueryOptions,\n FetchQueryOptions,\n GetNextPageParamFunction,\n InfiniteData,\n InitialPageParam,\n OmitKeyof,\n QueryKey,\n SkipToken,\n} from '@tanstack/query-core'\nimport type { QueryClient } from './queryClient'\nimport type { MaybeRefDeep, MaybeRefOrGetter } from './types'\n\ntype PrefetchInfinitePages<TQueryFnData, TPageParam> =\n | {\n pages?: never\n getNextPageParam?: GetNextPageParamFunction<TPageParam, TQueryFnData>\n }\n | {\n pages: number\n getNextPageParam: GetNextPageParamFunction<TPageParam, TQueryFnData>\n }\n\nexport type UsePrefetchInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey extends QueryKey,\n TPageParam,\n> = OmitKeyof<\n FetchQueryOptions<\n TQueryFnData,\n TError,\n InfiniteData<TData, TPageParam>,\n TQueryKey,\n TPageParam\n >,\n 'queryFn' | 'initialPageParam'\n> &\n InitialPageParam<TPageParam> & {\n queryFn?: Exclude<\n FetchQueryOptions<\n TQueryFnData,\n TError,\n InfiniteData<TData, TPageParam>,\n TQueryKey,\n TPageParam\n >['queryFn'],\n SkipToken\n >\n } & PrefetchInfinitePages<TQueryFnData, TPageParam>\n\nfunction isGetter<T>(value: MaybeRefOrGetter<T>): value is () => T {\n return typeof value === 'function'\n}\n\nexport function usePrefetchInfiniteQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: MaybeRefOrGetter<\n MaybeRefDeep<\n UsePrefetchInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >\n >\n >,\n queryClient?: QueryClient,\n): void {\n if (process.env.NODE_ENV === 'development') {\n if (!getCurrentScope()) {\n console.warn(\n 'vue-query composable like \"useQuery()\" should only be used inside a \"setup()\" function or a running effect scope. They might otherwise lead to memory leaks.',\n )\n }\n }\n\n const client = queryClient || useQueryClient()\n\n watchEffect(() => {\n const resolvedOptions = isGetter(options) ? options() : unref(options)\n const clonedOptions: UsePrefetchInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n > = cloneDeepUnref(resolvedOptions)\n\n if (!client.getQueryState(clonedOptions.queryKey)) {\n void client.prefetchInfiniteQuery(\n clonedOptions as FetchInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n )\n }\n })\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAoD;AACpD,4BAA+B;AAC/B,mBAA+B;AAsD/B,SAAS,SAAY,OAA8C;AACjE,SAAO,OAAO,UAAU;AAC1B;AAEO,SAAS,yBAOd,SAWA,aACM;AACN,MAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,QAAI,KAAC,iCAAgB,GAAG;AACtB,cAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,SAAS,mBAAe,sCAAe;AAE7C,mCAAY,MAAM;AAChB,UAAM,kBAAkB,SAAS,OAAO,IAAI,QAAQ,QAAI,uBAAM,OAAO;AACrE,UAAM,oBAMF,6BAAe,eAAe;AAElC,QAAI,CAAC,OAAO,cAAc,cAAc,QAAQ,GAAG;AACjD,WAAK,OAAO;AAAA,QACV;AAAA,MAOF;AAAA,IACF;AAAA,EACF,CAAC;AACH;","names":[]}