jotai-tanstack-query
Version:
1 lines • 24 kB
Source Map (JSON)
{"version":3,"file":"index.modern.mjs","sources":["../src/queryClientAtom.ts","../src/utils.ts","../src/baseAtomWithQuery.ts","../src/atomWithQuery.ts","../src/atomWithSuspenseQuery.ts","../src/atomWithInfiniteQuery.ts","../src/atomWithMutation.ts","../src/atomWithSuspenseInfiniteQuery.ts","../src/atomWithMutationState.ts"],"sourcesContent":["import { QueryClient } from '@tanstack/query-core'\nimport { atom } from 'jotai/vanilla'\n\nexport const queryClientAtom = atom(new QueryClient())\n\nif (process.env.NODE_ENV !== 'production') {\n queryClientAtom.debugPrivate = true\n}\n","import type {\n DefaultError,\n DefaultedQueryObserverOptions,\n Query,\n QueryKey,\n QueryObserverResult,\n ThrowOnError,\n} from '@tanstack/query-core'\n\nexport const shouldSuspend = (\n defaultedOptions:\n | DefaultedQueryObserverOptions<any, any, any, any, any>\n | undefined,\n result: QueryObserverResult<any, any>,\n isRestoring: boolean\n) => defaultedOptions?.suspense && willFetch(result, isRestoring)\n\nexport const willFetch = (\n result: QueryObserverResult<any, any>,\n isRestoring: boolean\n) => result.isPending && !isRestoring\n\nexport const getHasError = <\n TData,\n TError,\n TQueryFnData,\n TQueryData,\n TQueryKey extends QueryKey,\n>({\n result,\n throwOnError,\n query,\n}: {\n result: QueryObserverResult<TData, TError>\n throwOnError:\n | ThrowOnError<TQueryFnData, TError, TQueryData, TQueryKey>\n | undefined\n query: Query<TQueryFnData, TError, TQueryData, TQueryKey>\n}) => {\n return (\n result.isError &&\n !result.isFetching &&\n shouldThrowError(throwOnError, [result.error, query])\n )\n}\n\nexport function shouldThrowError<T extends (...args: any[]) => boolean>(\n throwOnError: boolean | T | undefined,\n params: Parameters<T>\n): boolean {\n // Allow useErrorBoundary function to override throwing behavior on a per-error basis\n if (typeof throwOnError === 'function') {\n return throwOnError(...params)\n }\n\n return !!throwOnError\n}\n\nexport const defaultThrowOnError = <\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n _error: TError,\n query: Query<TQueryFnData, TError, TData, TQueryKey>\n) => typeof query.state.data === 'undefined'\n\nexport const ensureStaleTime = (\n defaultedOptions: DefaultedQueryObserverOptions<any, any, any, any, any>\n) => {\n if (defaultedOptions.suspense) {\n if (typeof defaultedOptions.staleTime !== 'number') {\n return {\n ...defaultedOptions,\n staleTime: 1000,\n }\n }\n }\n\n return defaultedOptions\n}\n","import {\n QueryClient,\n QueryKey,\n QueryObserver,\n QueryObserverResult,\n notifyManager,\n} from '@tanstack/query-core'\nimport { Getter, WritableAtom, atom } from 'jotai'\nimport { queryClientAtom } from './queryClientAtom'\nimport { BaseAtomWithQueryOptions } from './types'\nimport { ensureStaleTime, getHasError, shouldSuspend } from './utils'\n\nexport function baseAtomWithQuery<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey extends QueryKey,\n>(\n getOptions: (\n get: Getter\n ) => BaseAtomWithQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n Observer: typeof QueryObserver,\n getQueryClient: (get: Getter) => QueryClient = (get) => get(queryClientAtom)\n): WritableAtom<\n | QueryObserverResult<TData, TError>\n | Promise<QueryObserverResult<TData, TError>>,\n [],\n void\n> {\n const refreshAtom = atom(0)\n const clientAtom = atom(getQueryClient)\n if (process.env.NODE_ENV !== 'production') {\n clientAtom.debugPrivate = true\n }\n\n const observerCacheAtom = atom(\n () =>\n new WeakMap<\n QueryClient,\n QueryObserver<TQueryFnData, TError, TData, TQueryData, TQueryKey>\n >()\n )\n if (process.env.NODE_ENV !== 'production') {\n observerCacheAtom.debugPrivate = true\n }\n\n const defaultedOptionsAtom = atom((get) => {\n const client = get(clientAtom)\n const options = getOptions(get)\n const defaultedOptions = client.defaultQueryOptions(options)\n\n const cache = get(observerCacheAtom)\n const cachedObserver = cache.get(client)\n\n defaultedOptions._optimisticResults = 'optimistic'\n\n if (cachedObserver) {\n cachedObserver.setOptions(defaultedOptions, {\n listeners: false,\n })\n }\n\n return ensureStaleTime(defaultedOptions)\n })\n if (process.env.NODE_ENV !== 'production') {\n defaultedOptionsAtom.debugPrivate = true\n }\n\n const observerAtom = atom((get) => {\n const client = get(clientAtom)\n const defaultedOptions = get(defaultedOptionsAtom)\n\n const observerCache = get(observerCacheAtom)\n\n const cachedObserver = observerCache.get(client)\n\n if (cachedObserver) return cachedObserver\n\n const newObserver = new Observer(client, defaultedOptions)\n observerCache.set(client, newObserver)\n\n return newObserver\n })\n if (process.env.NODE_ENV !== 'production') {\n observerAtom.debugPrivate = true\n }\n\n const dataAtom = atom((get) => {\n const observer = get(observerAtom)\n const defaultedOptions = get(defaultedOptionsAtom)\n const result = observer.getOptimisticResult(defaultedOptions)\n\n const resultAtom = atom(result)\n if (process.env.NODE_ENV !== 'production') {\n resultAtom.debugPrivate = true\n }\n\n resultAtom.onMount = (set) => {\n const unsubscribe = observer.subscribe(notifyManager.batchCalls(set))\n return () => {\n if (observer.getCurrentResult().isError) {\n observer.getCurrentQuery().reset()\n }\n unsubscribe()\n }\n }\n\n return resultAtom\n })\n if (process.env.NODE_ENV !== 'production') {\n dataAtom.debugPrivate = true\n }\n\n return atom(\n (get) => {\n get(refreshAtom)\n const observer = get(observerAtom)\n const defaultedOptions = get(defaultedOptionsAtom)\n\n const result = get(get(dataAtom))\n\n if (shouldSuspend(defaultedOptions, result, false)) {\n return observer.fetchOptimistic(defaultedOptions)\n }\n\n if (\n getHasError({\n result,\n query: observer.getCurrentQuery(),\n throwOnError: defaultedOptions.throwOnError,\n })\n ) {\n throw result.error\n }\n\n return result\n },\n (_get, set) => {\n set(refreshAtom, (c) => c + 1)\n }\n )\n}\n","import {\n DefaultError,\n QueryClient,\n QueryKey,\n QueryObserver,\n} from '@tanstack/query-core'\nimport { Getter, WritableAtom } from 'jotai'\nimport { baseAtomWithQuery } from './baseAtomWithQuery'\nimport { queryClientAtom } from './queryClientAtom'\nimport {\n AtomWithQueryOptions,\n AtomWithQueryResult,\n DefinedAtomWithQueryResult,\n DefinedInitialDataOptions,\n UndefinedInitialDataOptions,\n} from './types'\n\nexport function atomWithQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n getOptions: (\n get: Getter\n ) => UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,\n getQueryClient?: (get: Getter) => QueryClient\n): WritableAtom<AtomWithQueryResult<TData, TError>, [], void>\nexport function atomWithQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n getOptions: (\n get: Getter\n ) => DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,\n getQueryClient?: (get: Getter) => QueryClient\n): WritableAtom<DefinedAtomWithQueryResult<TData, TError>, [], void>\nexport function atomWithQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n getOptions: (\n get: Getter\n ) => AtomWithQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n getQueryClient?: (get: Getter) => QueryClient\n): WritableAtom<AtomWithQueryResult<TData, TError>, [], void>\nexport function atomWithQuery(\n getOptions: (get: Getter) => AtomWithQueryOptions,\n getQueryClient: (get: Getter) => QueryClient = (get) => get(queryClientAtom)\n) {\n return baseAtomWithQuery(getOptions, QueryObserver, getQueryClient)\n}\n","import {\n DefaultError,\n QueryClient,\n QueryKey,\n QueryObserver,\n} from '@tanstack/query-core'\nimport { Getter, WritableAtom, atom } from 'jotai'\nimport { baseAtomWithQuery } from './baseAtomWithQuery'\nimport { queryClientAtom } from './queryClientAtom'\nimport {\n AtomWithSuspenseQueryOptions,\n AtomWithSuspenseQueryResult,\n} from './types'\nimport { defaultThrowOnError } from './utils'\n\nexport function atomWithSuspenseQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n getOptions: (\n get: Getter\n ) => AtomWithSuspenseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n getQueryClient: (get: Getter) => QueryClient = (get) => get(queryClientAtom)\n): WritableAtom<AtomWithSuspenseQueryResult<TData, TError>, [], void> {\n const suspenseOptions = atom((get) => {\n const options = getOptions(get)\n return {\n ...options,\n suspense: true,\n enabled: true,\n throwOnError: defaultThrowOnError,\n }\n })\n\n return baseAtomWithQuery(\n (get: Getter) => get(suspenseOptions),\n QueryObserver,\n getQueryClient\n ) as WritableAtom<AtomWithSuspenseQueryResult<TData, TError>, [], void>\n}\n","import {\n DefaultError,\n InfiniteData,\n InfiniteQueryObserver,\n QueryClient,\n QueryKey,\n QueryObserver,\n} from '@tanstack/query-core'\nimport { Getter, WritableAtom } from 'jotai'\nimport { baseAtomWithQuery } from './baseAtomWithQuery'\nimport { queryClientAtom } from './queryClientAtom'\nimport {\n AtomWithInfiniteQueryOptions,\n AtomWithInfiniteQueryResult,\n DefinedAtomWithInfiniteQueryResult,\n DefinedInitialDataInfiniteOptions,\n UndefinedInitialDataInfiniteOptions,\n} from './types'\n\nexport function atomWithInfiniteQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n getOptions: (\n get: Getter\n ) => UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n getQueryClient?: (get: Getter) => QueryClient\n): WritableAtom<AtomWithInfiniteQueryResult<TData, TError>, [], void>\nexport function atomWithInfiniteQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n getOptions: (\n get: Getter\n ) => DefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n getQueryClient?: (get: Getter) => QueryClient\n): WritableAtom<DefinedAtomWithInfiniteQueryResult<TData, TError>, [], void>\nexport function atomWithInfiniteQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n getOptions: (\n get: Getter\n ) => AtomWithInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryFnData,\n TQueryKey,\n TPageParam\n >,\n getQueryClient?: (get: Getter) => QueryClient\n): WritableAtom<AtomWithInfiniteQueryResult<TData, TError>, [], void>\nexport function atomWithInfiniteQuery(\n getOptions: (get: Getter) => AtomWithInfiniteQueryOptions,\n getQueryClient: (get: Getter) => QueryClient = (get) => get(queryClientAtom)\n) {\n return baseAtomWithQuery(\n getOptions,\n InfiniteQueryObserver as typeof QueryObserver,\n getQueryClient\n )\n}\n","import {\n MutationObserver,\n MutationOptions,\n QueryClient,\n notifyManager,\n} from '@tanstack/query-core'\nimport { Atom, Getter, atom } from 'jotai'\nimport { queryClientAtom } from './queryClientAtom'\nimport { AtomWithMutationResult, MutateFunction } from './types'\nimport { shouldThrowError } from './utils'\n\nexport function atomWithMutation<\n TData = unknown,\n TVariables = void,\n TError = unknown,\n TContext = unknown,\n>(\n getOptions: (\n get: Getter\n ) => MutationOptions<TData, TError, TVariables, TContext>,\n getQueryClient: (get: Getter) => QueryClient = (get) => get(queryClientAtom)\n): Atom<AtomWithMutationResult<TData, TError, TVariables, TContext>> {\n const IN_RENDER = Symbol()\n\n const optionsAtom = atom((get) => {\n const client = getQueryClient(get)\n const options = getOptions(get)\n return client.defaultMutationOptions(options)\n })\n if (process.env.NODE_ENV !== 'production') {\n optionsAtom.debugPrivate = true\n }\n\n const observerCacheAtom = atom(\n () =>\n new WeakMap<\n QueryClient,\n MutationObserver<TData, TError, TVariables, TContext>\n >()\n )\n if (process.env.NODE_ENV !== 'production') {\n observerCacheAtom.debugPrivate = true\n }\n\n const observerAtom = atom((get) => {\n const options = get(optionsAtom)\n const client = getQueryClient(get)\n const observerCache = get(observerCacheAtom)\n\n const observer = observerCache.get(client)\n\n if (observer) {\n ;(observer as any)[IN_RENDER] = true\n observer.setOptions(options)\n delete (observer as any)[IN_RENDER]\n\n return observer\n }\n\n const newObserver = new MutationObserver(client, options)\n observerCache.set(client, newObserver)\n\n return newObserver\n })\n if (process.env.NODE_ENV !== 'production') {\n observerAtom.debugPrivate = true\n }\n\n const dataAtom = atom((get) => {\n const observer = get(observerAtom)\n\n const currentResult = observer.getCurrentResult()\n const resultAtom = atom(currentResult)\n\n resultAtom.onMount = (set) => {\n observer.subscribe(notifyManager.batchCalls(set))\n return () => {\n observer.reset()\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n resultAtom.debugPrivate = true\n }\n\n return resultAtom\n })\n\n const mutateAtom = atom((get) => {\n const observer = get(observerAtom)\n const mutate: MutateFunction<TData, TError, TVariables, TContext> = (\n variables,\n options\n ) => {\n observer.mutate(variables, options).catch(noop)\n }\n\n return mutate\n })\n if (process.env.NODE_ENV !== 'production') {\n mutateAtom.debugPrivate = true\n }\n\n return atom((get) => {\n const observer = get(observerAtom)\n const resultAtom = get(dataAtom)\n\n const result = get(resultAtom)\n const mutate = get(mutateAtom)\n\n if (\n result.isError &&\n shouldThrowError(observer.options.throwOnError, [result.error])\n ) {\n throw result.error\n }\n\n return { ...result, mutate, mutateAsync: result.mutate }\n })\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction noop() {}\n","import {\n DefaultError,\n InfiniteData,\n InfiniteQueryObserver,\n QueryClient,\n QueryKey,\n QueryObserver,\n} from '@tanstack/query-core'\nimport { Getter, WritableAtom, atom } from 'jotai'\nimport { baseAtomWithQuery } from './baseAtomWithQuery'\nimport { queryClientAtom } from './queryClientAtom'\nimport {\n AtomWithSuspenseInfiniteQueryOptions,\n AtomWithSuspenseInfiniteQueryResult,\n} from './types'\nimport { defaultThrowOnError } from './utils'\n\nexport function atomWithSuspenseInfiniteQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n getOptions: (\n get: Getter\n ) => AtomWithSuspenseInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryFnData,\n TQueryKey,\n TPageParam\n >,\n getQueryClient: (get: Getter) => QueryClient = (get) => get(queryClientAtom)\n): WritableAtom<AtomWithSuspenseInfiniteQueryResult<TData, TError>, [], void> {\n const suspenseOptionsAtom = atom((get) => {\n const options = getOptions(get)\n return {\n ...options,\n enabled: true,\n suspense: true,\n throwOnError: defaultThrowOnError,\n }\n })\n\n return baseAtomWithQuery(\n (get: Getter) => get(suspenseOptionsAtom),\n InfiniteQueryObserver as typeof QueryObserver,\n getQueryClient\n ) as unknown as WritableAtom<\n AtomWithSuspenseInfiniteQueryResult<TData, TError>,\n [],\n void\n >\n}\n","import {\n DefaultError,\n Mutation,\n MutationCache,\n MutationFilters,\n MutationState,\n QueryClient,\n} from '@tanstack/query-core'\nimport { Getter, atom } from 'jotai'\nimport { queryClientAtom } from './queryClientAtom'\n\ntype MutationStateOptions<TResult = MutationState> = {\n filters?: MutationFilters\n select?: (\n mutation: Mutation<unknown, DefaultError, unknown, unknown>\n ) => TResult\n}\n\nfunction getResult<TResult = MutationState>(\n mutationCache: MutationCache,\n options: MutationStateOptions<TResult>\n): Array<TResult> {\n return mutationCache\n .findAll(options.filters)\n .map(\n (mutation): TResult =>\n (options.select\n ? options.select(\n mutation as Mutation<unknown, DefaultError, unknown, unknown>\n )\n : mutation.state) as TResult\n )\n}\n\nexport const atomWithMutationState = <TResult = MutationState>(\n getOptions: (get: Getter) => MutationStateOptions<TResult>,\n getQueryClient: (get: Getter) => QueryClient = (get) => get(queryClientAtom)\n) => {\n const resultsAtom = atom<TResult[]>([])\n if (process.env.NODE_ENV !== 'production') {\n resultsAtom.debugPrivate = true\n }\n\n const observableAtom = atom((get) => {\n const queryClient = getQueryClient(get)\n\n const mutationCache = queryClient.getMutationCache()\n resultsAtom.onMount = (set) => {\n const unsubscribe = mutationCache.subscribe(() => {\n set(getResult(getQueryClient(get).getMutationCache(), getOptions(get)))\n })\n return unsubscribe\n }\n })\n if (process.env.NODE_ENV !== 'production') {\n observableAtom.debugPrivate = true\n }\n\n return atom((get) => {\n get(observableAtom)\n return get(resultsAtom)\n })\n}\n"],"names":["queryClientAtom","atom","QueryClient","process","env","NODE_ENV","debugPrivate","shouldSuspend","defaultedOptions","result","isRestoring","suspense","willFetch","isPending","getHasError","throwOnError","query","isError","isFetching","shouldThrowError","error","params","defaultThrowOnError","_error","state","data","ensureStaleTime","staleTime","_extends","baseAtomWithQuery","getOptions","Observer","getQueryClient","get","refreshAtom","clientAtom","observerCacheAtom","WeakMap","defaultedOptionsAtom","client","options","defaultQueryOptions","cachedObserver","_optimisticResults","setOptions","listeners","observerAtom","observerCache","newObserver","set","dataAtom","observer","getOptimisticResult","resultAtom","onMount","unsubscribe","subscribe","notifyManager","batchCalls","getCurrentResult","getCurrentQuery","reset","fetchOptimistic","_get","c","atomWithQuery","QueryObserver","atomWithSuspenseQuery","suspenseOptions","enabled","atomWithInfiniteQuery","InfiniteQueryObserver","atomWithMutation","IN_RENDER","Symbol","optionsAtom","defaultMutationOptions","MutationObserver","currentResult","mutateAtom","mutate","variables","catch","noop","mutateAsync","atomWithSuspenseInfiniteQuery","suspenseOptionsAtom","atomWithMutationState","resultsAtom","observableAtom","mutationCache","getMutationCache","findAll","filters","map","mutation","select","getResult"],"mappings":"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"}