@tanstack/solid-query 5.0.0-alpha.22 → 5.0.0-alpha.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/build/cjs/index.js +3 -3
  2. package/build/cjs/index.js.map +1 -1
  3. package/build/esm/index.js +3 -3
  4. package/build/esm/index.js.map +1 -1
  5. package/build/umd/index.js +1 -1
  6. package/build/umd/index.js.map +1 -1
  7. package/package.json +2 -2
  8. package/src/__tests__/createMutation.test.tsx +4 -4
  9. package/src/__tests__/createQuery.test.tsx +6 -6
  10. package/src/__tests__/suspense.test.tsx +6 -6
  11. package/src/createBaseQuery.ts +2 -2
  12. package/src/createMutation.ts +1 -1
  13. package/build/source/QueryClient.js +0 -6
  14. package/build/source/QueryClientProvider.jsx +0 -21
  15. package/build/source/__tests__/QueryClientProvider.test.jsx +0 -121
  16. package/build/source/__tests__/createInfiniteQuery.test.jsx +0 -1361
  17. package/build/source/__tests__/createMutation.test.jsx +0 -867
  18. package/build/source/__tests__/createQueries.test.jsx +0 -590
  19. package/build/source/__tests__/createQuery.test.jsx +0 -4398
  20. package/build/source/__tests__/createQuery.types.test.jsx +0 -135
  21. package/build/source/__tests__/suspense.test.jsx +0 -659
  22. package/build/source/__tests__/transition.test.jsx +0 -42
  23. package/build/source/__tests__/useIsFetching.test.jsx +0 -190
  24. package/build/source/__tests__/useIsMutating.test.jsx +0 -198
  25. package/build/source/__tests__/utils.jsx +0 -50
  26. package/build/source/createBaseQuery.js +0 -174
  27. package/build/source/createInfiniteQuery.js +0 -8
  28. package/build/source/createMutation.js +0 -38
  29. package/build/source/createQueries.js +0 -32
  30. package/build/source/createQuery.js +0 -6
  31. package/build/source/index.js +0 -15
  32. package/build/source/setBatchUpdatesFn.js +0 -3
  33. package/build/source/types.js +0 -2
  34. package/build/source/useIsFetching.js +0 -12
  35. package/build/source/useIsMutating.js +0 -12
  36. package/build/source/utils.js +0 -7
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/setBatchUpdatesFn.ts","../../src/QueryClient.ts","../../src/QueryClientProvider.tsx","../../src/utils.ts","../../src/createBaseQuery.ts","../../src/createMutation.ts","../../src/createInfiniteQuery.ts","../../src/createQueries.ts","../../src/createQuery.ts","../../src/useIsFetching.ts","../../src/useIsMutating.ts"],"sourcesContent":["import { notifyManager } from '@tanstack/query-core'\nimport { batch } from 'solid-js'\n\nnotifyManager.setBatchNotifyFunction(batch)\n","import type {\n QueryClientConfig as QueryCoreClientConfig,\n DefaultOptions as CoreDefaultOptions,\n QueryObserverOptions as QueryCoreObserverOptions,\n InfiniteQueryObserverOptions as QueryCoreInfiniteQueryObserverOptions,\n DefaultError,\n QueryKey,\n} from '@tanstack/query-core'\nimport { QueryClient as QueryCoreClient } from '@tanstack/query-core'\n\nexport interface QueryObserverOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = never,\n> extends Omit<\n QueryCoreObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey,\n TPageParam\n >,\n 'structuralSharing'\n > {\n /**\n * Set this to a reconciliation key to enable reconciliation between query results.\n * Set this to `false` to disable reconciliation between query results.\n * Set this to a function which accepts the old and new data and returns resolved data of the same type to implement custom reconciliation logic.\n * Defaults reconciliation key to `id`.\n */\n reconcile?:\n | string\n | false\n | ((oldData: TData | undefined, newData: TData) => TData)\n}\n\nexport interface InfiniteQueryObserverOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> extends Omit<\n QueryCoreInfiniteQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey,\n TPageParam\n >,\n 'structuralSharing'\n > {\n /**\n * Set this to a reconciliation key to enable reconciliation between query results.\n * Set this to `false` to disable reconciliation between query results.\n * Set this to a function which accepts the old and new data and returns resolved data of the same type to implement custom reconciliation logic.\n * Defaults reconciliation key to `id`.\n */\n reconcile?:\n | string\n | false\n | ((oldData: TData | undefined, newData: TData) => TData)\n}\n\nexport interface DefaultOptions<TError = DefaultError>\n extends CoreDefaultOptions<TError> {\n queries?: QueryObserverOptions<unknown, TError>\n}\n\nexport interface QueryClientConfig extends QueryCoreClientConfig {\n defaultOptions?: DefaultOptions\n}\n\nexport class QueryClient extends QueryCoreClient {\n constructor(config: QueryClientConfig = {}) {\n super(config)\n }\n}\n","import type { QueryClient } from './QueryClient'\nimport type { JSX } from 'solid-js'\nimport { createContext, useContext, onMount, onCleanup } from 'solid-js'\n\nexport const QueryClientContext = createContext<QueryClient | undefined>(\n undefined,\n)\n\nexport const useQueryClient = (queryClient?: QueryClient) => {\n const client = useContext(QueryClientContext)\n\n if (queryClient) {\n return queryClient\n }\n\n if (!client) {\n throw new Error('No QueryClient set, use QueryClientProvider to set one')\n }\n\n return client\n}\n\nexport type QueryClientProviderProps = {\n client: QueryClient\n children?: JSX.Element\n}\n\nexport const QueryClientProvider = (\n props: QueryClientProviderProps,\n): JSX.Element => {\n onMount(() => {\n props.client.mount()\n })\n onCleanup(() => props.client.unmount())\n\n return (\n <QueryClientContext.Provider value={props.client}>\n {props.children}\n </QueryClientContext.Provider>\n )\n}\n","export function shouldThrowError<T extends (...args: any[]) => boolean>(\n throwError: boolean | T | undefined,\n params: Parameters<T>,\n): boolean {\n // Allow throwError function to override throwing behavior on a per-error basis\n if (typeof throwError === 'function') {\n return throwError(...params)\n }\n\n return !!throwError\n}\n","/* eslint-disable @typescript-eslint/no-unnecessary-condition */\n// Had to disable the lint rule because isServer type is defined as false\n// in solid-js/web package. I'll create a GitHub issue with them to see\n// why that happens.\nimport type {\n QueryKey,\n QueryObserver,\n QueryObserverResult,\n} from '@tanstack/query-core'\nimport type { QueryClient } from './QueryClient'\nimport { hydrate } from '@tanstack/query-core'\nimport { notifyManager } from '@tanstack/query-core'\nimport type { Accessor } from 'solid-js'\nimport { isServer } from 'solid-js/web'\nimport {\n createComputed,\n createMemo,\n createResource,\n on,\n onCleanup,\n} from 'solid-js'\nimport { createStore, reconcile, unwrap } from 'solid-js/store'\nimport { useQueryClient } from './QueryClientProvider'\nimport type { CreateBaseQueryOptions } from './types'\nimport { shouldThrowError } from './utils'\n\nfunction reconcileFn<TData, TError>(\n store: QueryObserverResult<TData, TError>,\n result: QueryObserverResult<TData, TError>,\n reconcileOption:\n | string\n | false\n | ((oldData: TData | undefined, newData: TData) => TData),\n): QueryObserverResult<TData, TError> {\n if (reconcileOption === false) return result\n if (typeof reconcileOption === 'function') {\n const newData = reconcileOption(store.data, result.data as TData)\n return { ...result, data: newData } as typeof result\n }\n const newData = reconcile(result.data, { key: reconcileOption })(store.data)\n return { ...result, data: newData } as typeof result\n}\n\n// Base Query Function that is used to create the query.\nexport function createBaseQuery<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey extends QueryKey,\n>(\n options: Accessor<\n CreateBaseQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>\n >,\n Observer: typeof QueryObserver,\n queryClient?: Accessor<QueryClient>,\n) {\n const client = createMemo(() => useQueryClient(queryClient?.()))\n\n const defaultedOptions = client().defaultQueryOptions(options())\n defaultedOptions._optimisticResults = 'optimistic'\n defaultedOptions.structuralSharing = false\n if (isServer) {\n defaultedOptions.retry = false\n defaultedOptions.throwErrors = true\n }\n const observer = new Observer(client(), defaultedOptions)\n\n const [state, setState] = createStore<QueryObserverResult<TData, TError>>(\n observer.getOptimisticResult(defaultedOptions),\n )\n\n const createServerSubscriber = (\n resolve: (\n data:\n | QueryObserverResult<TData, TError>\n | PromiseLike<QueryObserverResult<TData, TError> | undefined>\n | undefined,\n ) => void,\n reject: (reason?: any) => void,\n ) => {\n return observer.subscribe((result) => {\n notifyManager.batchCalls(() => {\n const query = observer.getCurrentQuery()\n const { refetch, ...rest } = unwrap(result)\n const unwrappedResult = {\n ...rest,\n\n // hydrate() expects a QueryState object, which is similar but not\n // quite the same as a QueryObserverResult object. Thus, for now, we're\n // copying over the missing properties from state in order to support hydration\n dataUpdateCount: query.state.dataUpdateCount,\n fetchFailureCount: query.state.fetchFailureCount,\n // Removing these properties since they might not be serializable\n // fetchFailureReason: query.state.fetchFailureReason,\n // fetchMeta: query.state.fetchMeta,\n isInvalidated: query.state.isInvalidated,\n }\n\n if (unwrappedResult.isError) {\n if (process.env['NODE_ENV'] === 'development') {\n console.error(unwrappedResult.error)\n }\n reject(unwrappedResult.error)\n }\n if (unwrappedResult.isSuccess) {\n // Use of any here is fine\n // We cannot include refetch since it is not serializable\n resolve(unwrappedResult as any)\n }\n })()\n })\n }\n\n const createClientSubscriber = () => {\n return observer.subscribe((result) => {\n notifyManager.batchCalls(() => {\n // @ts-expect-error - This will error because the reconcile option does not\n // exist on the query-core QueryObserverResult type\n const reconcileOptions = observer.options.reconcile\n // If the query has data we dont suspend but instead mutate the resource\n // This could happen when placeholderData/initialData is defined\n if (queryResource()?.data && result.data && !queryResource.loading) {\n setState((store) => {\n return reconcileFn(\n store,\n result,\n reconcileOptions === undefined ? 'id' : reconcileOptions,\n )\n })\n mutate(state)\n } else {\n setState((store) => {\n return reconcileFn(\n store,\n result,\n reconcileOptions === undefined ? 'id' : reconcileOptions,\n )\n })\n refetch()\n }\n })()\n })\n }\n\n /**\n * Unsubscribe is set lazily, so that we can subscribe after hydration when needed.\n */\n let unsubscribe: (() => void) | null = null\n\n const [queryResource, { refetch, mutate }] = createResource<\n QueryObserverResult<TData, TError> | undefined\n >(\n () => {\n return new Promise((resolve, reject) => {\n if (isServer) {\n unsubscribe = createServerSubscriber(resolve, reject)\n } else {\n if (!unsubscribe) {\n unsubscribe = createClientSubscriber()\n }\n }\n if (!state.isLoading) {\n resolve(state)\n }\n })\n },\n {\n initialValue: state,\n\n // If initialData is provided, we resolve the resource immediately\n ssrLoadFrom: options().initialData ? 'initial' : 'server',\n\n get deferStream() {\n return options().deferStream\n },\n\n /**\n * If this resource was populated on the server (either sync render, or streamed in over time), onHydrated\n * will be called. This is the point at which we can hydrate the query cache state, and setup the query subscriber.\n *\n * Leveraging onHydrated allows us to plug into the async and streaming support that solidjs resources already support.\n *\n * Note that this is only invoked on the client, for queries that were originally run on the server.\n */\n onHydrated(_k, info) {\n if (info.value) {\n hydrate(client(), {\n queries: [\n {\n queryKey: defaultedOptions.queryKey,\n queryHash: defaultedOptions.queryHash,\n state: info.value,\n },\n ],\n })\n }\n\n if (!unsubscribe) {\n /**\n * Do not refetch query on mount if query was fetched on server,\n * even if `staleTime` is not set.\n */\n const newOptions = { ...defaultedOptions }\n if (defaultedOptions.staleTime || !defaultedOptions.initialData) {\n newOptions.refetchOnMount = false\n }\n // Setting the options as an immutable object to prevent\n // wonky behavior with observer subscriptions\n observer.setOptions(newOptions)\n setState(observer.getOptimisticResult(newOptions))\n unsubscribe = createClientSubscriber()\n }\n },\n },\n )\n\n onCleanup(() => {\n if (unsubscribe) {\n unsubscribe()\n unsubscribe = null\n }\n })\n\n createComputed(\n on(\n () => client().defaultQueryOptions(options()),\n () => observer.setOptions(client().defaultQueryOptions(options())),\n {\n // Defer because we don't need to trigger on first render\n // This only cares about changes to options after the observer is created\n defer: true,\n },\n ),\n )\n\n createComputed(\n on(\n () => state.status,\n () => {\n if (\n state.isError &&\n !state.isFetching &&\n shouldThrowError(observer.options.throwErrors, [\n state.error,\n observer.getCurrentQuery(),\n ])\n ) {\n throw state.error\n }\n },\n ),\n )\n\n const handler = {\n get(\n target: QueryObserverResult<TData, TError>,\n prop: keyof QueryObserverResult<TData, TError>,\n ): any {\n const val = queryResource()?.[prop]\n return val !== undefined ? val : Reflect.get(target, prop)\n },\n }\n\n return new Proxy(state, handler)\n}\n","import type { DefaultError } from '@tanstack/query-core'\nimport type { QueryClient } from './QueryClient'\nimport { MutationObserver } from '@tanstack/query-core'\nimport { useQueryClient } from './QueryClientProvider'\nimport type {\n CreateMutateFunction,\n CreateMutationOptions,\n CreateMutationResult,\n} from './types'\nimport type { Accessor } from 'solid-js'\nimport { createComputed, onCleanup, on } from 'solid-js'\nimport { createStore } from 'solid-js/store'\nimport { shouldThrowError } from './utils'\n\n// HOOK\nexport function createMutation<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n>(\n options: CreateMutationOptions<TData, TError, TVariables, TContext>,\n queryClient?: Accessor<QueryClient>,\n): CreateMutationResult<TData, TError, TVariables, TContext> {\n const client = useQueryClient(queryClient?.())\n\n const observer = new MutationObserver<TData, TError, TVariables, TContext>(\n client,\n options(),\n )\n\n const mutate: CreateMutateFunction<TData, TError, TVariables, TContext> = (\n variables,\n mutateOptions,\n ) => {\n observer.mutate(variables, mutateOptions).catch(noop)\n }\n\n const [state, setState] = createStore<\n CreateMutationResult<TData, TError, TVariables, TContext>\n >({\n ...observer.getCurrentResult(),\n mutate,\n mutateAsync: observer.getCurrentResult().mutate,\n })\n\n createComputed(() => {\n observer.setOptions(options())\n })\n\n createComputed(\n on(\n () => state.status,\n () => {\n if (\n state.isError &&\n shouldThrowError(observer.options.throwErrors, [state.error])\n ) {\n throw state.error\n }\n },\n ),\n )\n\n const unsubscribe = observer.subscribe((result) => {\n setState({\n ...result,\n mutate,\n mutateAsync: result.mutate,\n })\n })\n\n onCleanup(unsubscribe)\n\n return state\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction noop() {}\n","import type {\n QueryObserver,\n QueryKey,\n DefaultError,\n InfiniteData,\n} from '@tanstack/query-core'\nimport type { QueryClient } from './QueryClient'\nimport { InfiniteQueryObserver } from '@tanstack/query-core'\nimport type {\n CreateInfiniteQueryOptions,\n CreateInfiniteQueryResult,\n} from './types'\nimport { createBaseQuery } from './createBaseQuery'\nimport { createMemo } from 'solid-js'\nimport type { Accessor } from 'solid-js'\n\nexport function createInfiniteQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: CreateInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n queryClient?: Accessor<QueryClient>,\n): CreateInfiniteQueryResult<TData, TError> {\n return createBaseQuery(\n createMemo(() => options()),\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n InfiniteQueryObserver as typeof QueryObserver,\n queryClient,\n ) as CreateInfiniteQueryResult<TData, TError>\n}\n","import type {\n QueriesPlaceholderDataFunction,\n QueryFunction,\n QueryKey,\n DefaultError,\n} from '@tanstack/query-core'\nimport { notifyManager, QueriesObserver } from '@tanstack/query-core'\nimport type { QueryClient } from './QueryClient'\nimport type { Accessor } from 'solid-js'\nimport { createComputed, onCleanup, onMount } from 'solid-js'\nimport { createStore, unwrap } from 'solid-js/store'\nimport { useQueryClient } from './QueryClientProvider'\nimport type { CreateQueryResult, SolidQueryOptions } from './types'\n\n// This defines the `UseQueryOptions` that are accepted in `QueriesOptions` & `GetOptions`.\n// `placeholderData` function does not have a parameter\ntype CreateQueryOptionsForCreateQueries<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = Omit<\n SolidQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n 'placeholderData'\n> & {\n placeholderData?: TQueryFnData | QueriesPlaceholderDataFunction<TQueryFnData>\n}\n\n// Avoid TS depth-limit error in case of large array literal\ntype MAXIMUM_DEPTH = 20\n\ntype GetOptions<T> =\n // Part 1: responsible for applying explicit type parameter to function arguments, if object { queryFnData: TQueryFnData, error: TError, data: TData }\n T extends {\n queryFnData: infer TQueryFnData\n error?: infer TError\n data: infer TData\n }\n ? CreateQueryOptionsForCreateQueries<TQueryFnData, TError, TData>\n : T extends { queryFnData: infer TQueryFnData; error?: infer TError }\n ? CreateQueryOptionsForCreateQueries<TQueryFnData, TError>\n : T extends { data: infer TData; error?: infer TError }\n ? CreateQueryOptionsForCreateQueries<unknown, TError, TData>\n : // Part 2: responsible for applying explicit type parameter to function arguments, if tuple [TQueryFnData, TError, TData]\n T extends [infer TQueryFnData, infer TError, infer TData]\n ? CreateQueryOptionsForCreateQueries<TQueryFnData, TError, TData>\n : T extends [infer TQueryFnData, infer TError]\n ? CreateQueryOptionsForCreateQueries<TQueryFnData, TError>\n : T extends [infer TQueryFnData]\n ? CreateQueryOptionsForCreateQueries<TQueryFnData>\n : // Part 3: responsible for inferring and enforcing type if no explicit parameter was provided\n T extends {\n queryFn?: QueryFunction<infer TQueryFnData, infer TQueryKey>\n select: (data: any) => infer TData\n }\n ? CreateQueryOptionsForCreateQueries<TQueryFnData, Error, TData, TQueryKey>\n : T extends { queryFn?: QueryFunction<infer TQueryFnData, infer TQueryKey> }\n ? CreateQueryOptionsForCreateQueries<\n TQueryFnData,\n Error,\n TQueryFnData,\n TQueryKey\n >\n : // Fallback\n CreateQueryOptionsForCreateQueries\n\ntype GetResults<T> =\n // Part 1: responsible for mapping explicit type parameter to function result, if object\n T extends { queryFnData: any; error?: infer TError; data: infer TData }\n ? CreateQueryResult<TData, TError>\n : T extends { queryFnData: infer TQueryFnData; error?: infer TError }\n ? CreateQueryResult<TQueryFnData, TError>\n : T extends { data: infer TData; error?: infer TError }\n ? CreateQueryResult<TData, TError>\n : // Part 2: responsible for mapping explicit type parameter to function result, if tuple\n T extends [any, infer TError, infer TData]\n ? CreateQueryResult<TData, TError>\n : T extends [infer TQueryFnData, infer TError]\n ? CreateQueryResult<TQueryFnData, TError>\n : T extends [infer TQueryFnData]\n ? CreateQueryResult<TQueryFnData>\n : // Part 3: responsible for mapping inferred type to results, if no explicit parameter was provided\n T extends {\n queryFn?: QueryFunction<unknown, any>\n select: (data: any) => infer TData\n }\n ? CreateQueryResult<TData>\n : T extends { queryFn?: QueryFunction<infer TQueryFnData, any> }\n ? CreateQueryResult<TQueryFnData>\n : // Fallback\n CreateQueryResult\n\n/**\n * QueriesOptions reducer recursively unwraps function arguments to infer/enforce type param\n */\nexport type QueriesOptions<\n T extends any[],\n Result extends any[] = [],\n Depth extends ReadonlyArray<number> = [],\n> = Depth['length'] extends MAXIMUM_DEPTH\n ? CreateQueryOptionsForCreateQueries[]\n : T extends []\n ? []\n : T extends [infer Head]\n ? [...Result, GetOptions<Head>]\n : T extends [infer Head, ...infer Tail]\n ? QueriesOptions<[...Tail], [...Result, GetOptions<Head>], [...Depth, 1]>\n : unknown[] extends T\n ? T\n : // If T is *some* array but we couldn't assign unknown[] to it, then it must hold some known/homogenous type!\n // use this to infer the param types in the case of Array.map() argument\n T extends CreateQueryOptionsForCreateQueries<\n infer TQueryFnData,\n infer TError,\n infer TData,\n infer TQueryKey\n >[]\n ? CreateQueryOptionsForCreateQueries<TQueryFnData, TError, TData, TQueryKey>[]\n : // Fallback\n CreateQueryOptionsForCreateQueries[]\n\n/**\n * QueriesResults reducer recursively maps type param to results\n */\nexport type QueriesResults<\n T extends any[],\n Result extends any[] = [],\n Depth extends ReadonlyArray<number> = [],\n> = Depth['length'] extends MAXIMUM_DEPTH\n ? CreateQueryResult[]\n : T extends []\n ? []\n : T extends [infer Head]\n ? [...Result, GetResults<Head>]\n : T extends [infer Head, ...infer Tail]\n ? QueriesResults<[...Tail], [...Result, GetResults<Head>], [...Depth, 1]>\n : T extends CreateQueryOptionsForCreateQueries<\n infer TQueryFnData,\n infer TError,\n infer TData,\n any\n >[]\n ? // Dynamic-size (homogenous) UseQueryOptions array: map directly to array of results\n CreateQueryResult<\n unknown extends TData ? TQueryFnData : TData,\n unknown extends TError ? DefaultError : TError\n >[]\n : // Fallback\n CreateQueryResult[]\n\nexport function createQueries<T extends any[]>(\n queriesOptions: Accessor<{\n queries: readonly [...QueriesOptions<T>]\n }>,\n queryClient?: Accessor<QueryClient>,\n): QueriesResults<T> {\n const client = useQueryClient(queryClient?.())\n\n const defaultedQueries = queriesOptions().queries.map((options) => {\n const defaultedOptions = client.defaultQueryOptions(options)\n defaultedOptions._optimisticResults = 'optimistic'\n return defaultedOptions\n })\n\n const observer = new QueriesObserver(client, defaultedQueries)\n\n const [state, setState] = createStore(\n observer.getOptimisticResult(defaultedQueries),\n )\n\n const unsubscribe = observer.subscribe((result) => {\n notifyManager.batchCalls(() => {\n setState(unwrap(result))\n })()\n })\n\n onCleanup(unsubscribe)\n\n onMount(() => {\n observer.setQueries(defaultedQueries, { listeners: false })\n })\n\n createComputed(() => {\n const updatedQueries = queriesOptions().queries.map((options) => {\n const defaultedOptions = client.defaultQueryOptions(options)\n defaultedOptions._optimisticResults = 'optimistic'\n return defaultedOptions\n })\n observer.setQueries(updatedQueries)\n })\n\n return state as QueriesResults<T>\n}\n","import type { QueryKey, DefaultError } from '@tanstack/query-core'\nimport { QueryObserver } from '@tanstack/query-core'\nimport type { QueryClient } from './QueryClient'\nimport type { Accessor } from 'solid-js'\nimport { createMemo } from 'solid-js'\nimport { createBaseQuery } from './createBaseQuery'\nimport type {\n CreateQueryOptions,\n CreateQueryResult,\n DefinedCreateQueryResult,\n FunctionedParams,\n SolidQueryOptions,\n} from './types'\n\ntype UndefinedInitialDataOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = FunctionedParams<\n SolidQueryOptions<TQueryFnData, TError, TData, TQueryKey> & {\n initialData?: undefined\n }\n>\n\ntype DefinedInitialDataOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = FunctionedParams<\n SolidQueryOptions<TQueryFnData, TError, TData, TQueryKey> & {\n initialData: TQueryFnData | (() => TQueryFnData)\n }\n>\n\nexport function createQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: () => QueryClient,\n): CreateQueryResult<TData, TError>\n\nexport function createQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: () => QueryClient,\n): DefinedCreateQueryResult<TData, TError>\nexport function createQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: Accessor<QueryClient>,\n) {\n return createBaseQuery(\n createMemo(() => options()),\n QueryObserver,\n queryClient,\n )\n}\n","import type { QueryFilters } from '@tanstack/query-core'\nimport type { QueryClient } from './QueryClient'\nimport type { Accessor } from 'solid-js'\nimport { createMemo, createSignal, onCleanup } from 'solid-js'\nimport { useQueryClient } from './QueryClientProvider'\n\nexport function useIsFetching(\n filters?: Accessor<QueryFilters>,\n queryClient?: Accessor<QueryClient>,\n): Accessor<number> {\n const client = createMemo(() => useQueryClient(queryClient?.()))\n const queryCache = createMemo(() => client().getQueryCache())\n\n const [fetches, setFetches] = createSignal(client().isFetching(filters?.()))\n\n const unsubscribe = queryCache().subscribe(() => {\n setFetches(client().isFetching(filters?.()))\n })\n\n onCleanup(unsubscribe)\n\n return fetches\n}\n","import type { MutationFilters } from '@tanstack/query-core'\nimport type { QueryClient } from './QueryClient'\nimport { useQueryClient } from './QueryClientProvider'\nimport type { Accessor } from 'solid-js'\nimport { createSignal, onCleanup, createMemo } from 'solid-js'\n\nexport function useIsMutating(\n filters?: Accessor<MutationFilters>,\n queryClient?: Accessor<QueryClient>,\n): Accessor<number> {\n const client = createMemo(() => useQueryClient(queryClient?.()))\n const mutationCache = createMemo(() => client().getMutationCache())\n\n const [mutations, setMutations] = createSignal(\n client().isMutating(filters?.()),\n )\n\n const unsubscribe = mutationCache().subscribe((_result) => {\n setMutations(client().isMutating(filters?.()))\n })\n\n onCleanup(unsubscribe)\n\n return mutations\n}\n"],"names":["notifyManager","setBatchNotifyFunction","batch","QueryClient","QueryCoreClient","constructor","config","super","QueryClientContext","createContext","undefined","useQueryClient","queryClient","client","useContext","Error","shouldThrowError","throwError","params","reconcileFn","store","result","reconcileOption","newData","data","reconcile","key","createBaseQuery","options","Observer","createMemo","defaultedOptions","defaultQueryOptions","_optimisticResults","structuralSharing","isServer","retry","throwErrors","observer","state","setState","createStore","getOptimisticResult","createClientSubscriber","subscribe","batchCalls","reconcileOptions","queryResource","loading","mutate","refetch","unsubscribe","createResource","Promise","resolve","reject","query","getCurrentQuery","rest","unwrap","unwrappedResult","dataUpdateCount","fetchFailureCount","isInvalidated","isError","process","env","console","error","isSuccess","createServerSubscriber","isLoading","initialValue","ssrLoadFrom","initialData","deferStream","onHydrated","_k","info","value","hydrate","queries","queryKey","queryHash","newOptions","staleTime","refetchOnMount","setOptions","onCleanup","createComputed","on","defer","status","isFetching","Proxy","get","target","prop","val","Reflect","noop","props","onMount","mount","unmount","_$createComponent","createComponent","Provider","children","InfiniteQueryObserver","MutationObserver","variables","mutateOptions","catch","getCurrentResult","mutateAsync","queriesOptions","defaultedQueries","map","QueriesObserver","setQueries","listeners","updatedQueries","QueryObserver","filters","queryCache","getQueryCache","fetches","setFetches","createSignal","mutationCache","getMutationCache","mutations","setMutations","isMutating","_result"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/setBatchUpdatesFn.ts","../../src/QueryClient.ts","../../src/QueryClientProvider.tsx","../../src/utils.ts","../../src/createBaseQuery.ts","../../src/createMutation.ts","../../src/createInfiniteQuery.ts","../../src/createQueries.ts","../../src/createQuery.ts","../../src/useIsFetching.ts","../../src/useIsMutating.ts"],"sourcesContent":["import { notifyManager } from '@tanstack/query-core'\nimport { batch } from 'solid-js'\n\nnotifyManager.setBatchNotifyFunction(batch)\n","import type {\n QueryClientConfig as QueryCoreClientConfig,\n DefaultOptions as CoreDefaultOptions,\n QueryObserverOptions as QueryCoreObserverOptions,\n InfiniteQueryObserverOptions as QueryCoreInfiniteQueryObserverOptions,\n DefaultError,\n QueryKey,\n} from '@tanstack/query-core'\nimport { QueryClient as QueryCoreClient } from '@tanstack/query-core'\n\nexport interface QueryObserverOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = never,\n> extends Omit<\n QueryCoreObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey,\n TPageParam\n >,\n 'structuralSharing'\n > {\n /**\n * Set this to a reconciliation key to enable reconciliation between query results.\n * Set this to `false` to disable reconciliation between query results.\n * Set this to a function which accepts the old and new data and returns resolved data of the same type to implement custom reconciliation logic.\n * Defaults reconciliation key to `id`.\n */\n reconcile?:\n | string\n | false\n | ((oldData: TData | undefined, newData: TData) => TData)\n}\n\nexport interface InfiniteQueryObserverOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> extends Omit<\n QueryCoreInfiniteQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey,\n TPageParam\n >,\n 'structuralSharing'\n > {\n /**\n * Set this to a reconciliation key to enable reconciliation between query results.\n * Set this to `false` to disable reconciliation between query results.\n * Set this to a function which accepts the old and new data and returns resolved data of the same type to implement custom reconciliation logic.\n * Defaults reconciliation key to `id`.\n */\n reconcile?:\n | string\n | false\n | ((oldData: TData | undefined, newData: TData) => TData)\n}\n\nexport interface DefaultOptions<TError = DefaultError>\n extends CoreDefaultOptions<TError> {\n queries?: QueryObserverOptions<unknown, TError>\n}\n\nexport interface QueryClientConfig extends QueryCoreClientConfig {\n defaultOptions?: DefaultOptions\n}\n\nexport class QueryClient extends QueryCoreClient {\n constructor(config: QueryClientConfig = {}) {\n super(config)\n }\n}\n","import type { QueryClient } from './QueryClient'\nimport type { JSX } from 'solid-js'\nimport { createContext, useContext, onMount, onCleanup } from 'solid-js'\n\nexport const QueryClientContext = createContext<QueryClient | undefined>(\n undefined,\n)\n\nexport const useQueryClient = (queryClient?: QueryClient) => {\n const client = useContext(QueryClientContext)\n\n if (queryClient) {\n return queryClient\n }\n\n if (!client) {\n throw new Error('No QueryClient set, use QueryClientProvider to set one')\n }\n\n return client\n}\n\nexport type QueryClientProviderProps = {\n client: QueryClient\n children?: JSX.Element\n}\n\nexport const QueryClientProvider = (\n props: QueryClientProviderProps,\n): JSX.Element => {\n onMount(() => {\n props.client.mount()\n })\n onCleanup(() => props.client.unmount())\n\n return (\n <QueryClientContext.Provider value={props.client}>\n {props.children}\n </QueryClientContext.Provider>\n )\n}\n","export function shouldThrowError<T extends (...args: any[]) => boolean>(\n throwError: boolean | T | undefined,\n params: Parameters<T>,\n): boolean {\n // Allow throwError function to override throwing behavior on a per-error basis\n if (typeof throwError === 'function') {\n return throwError(...params)\n }\n\n return !!throwError\n}\n","/* eslint-disable @typescript-eslint/no-unnecessary-condition */\n// Had to disable the lint rule because isServer type is defined as false\n// in solid-js/web package. I'll create a GitHub issue with them to see\n// why that happens.\nimport type {\n QueryKey,\n QueryObserver,\n QueryObserverResult,\n} from '@tanstack/query-core'\nimport type { QueryClient } from './QueryClient'\nimport { hydrate } from '@tanstack/query-core'\nimport { notifyManager } from '@tanstack/query-core'\nimport type { Accessor } from 'solid-js'\nimport { isServer } from 'solid-js/web'\nimport {\n createComputed,\n createMemo,\n createResource,\n on,\n onCleanup,\n} from 'solid-js'\nimport { createStore, reconcile, unwrap } from 'solid-js/store'\nimport { useQueryClient } from './QueryClientProvider'\nimport type { CreateBaseQueryOptions } from './types'\nimport { shouldThrowError } from './utils'\n\nfunction reconcileFn<TData, TError>(\n store: QueryObserverResult<TData, TError>,\n result: QueryObserverResult<TData, TError>,\n reconcileOption:\n | string\n | false\n | ((oldData: TData | undefined, newData: TData) => TData),\n): QueryObserverResult<TData, TError> {\n if (reconcileOption === false) return result\n if (typeof reconcileOption === 'function') {\n const newData = reconcileOption(store.data, result.data as TData)\n return { ...result, data: newData } as typeof result\n }\n const newData = reconcile(result.data, { key: reconcileOption })(store.data)\n return { ...result, data: newData } as typeof result\n}\n\n// Base Query Function that is used to create the query.\nexport function createBaseQuery<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey extends QueryKey,\n>(\n options: Accessor<\n CreateBaseQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>\n >,\n Observer: typeof QueryObserver,\n queryClient?: Accessor<QueryClient>,\n) {\n const client = createMemo(() => useQueryClient(queryClient?.()))\n\n const defaultedOptions = client().defaultQueryOptions(options())\n defaultedOptions._optimisticResults = 'optimistic'\n defaultedOptions.structuralSharing = false\n if (isServer) {\n defaultedOptions.retry = false\n defaultedOptions.throwOnError = true\n }\n const observer = new Observer(client(), defaultedOptions)\n\n const [state, setState] = createStore<QueryObserverResult<TData, TError>>(\n observer.getOptimisticResult(defaultedOptions),\n )\n\n const createServerSubscriber = (\n resolve: (\n data:\n | QueryObserverResult<TData, TError>\n | PromiseLike<QueryObserverResult<TData, TError> | undefined>\n | undefined,\n ) => void,\n reject: (reason?: any) => void,\n ) => {\n return observer.subscribe((result) => {\n notifyManager.batchCalls(() => {\n const query = observer.getCurrentQuery()\n const { refetch, ...rest } = unwrap(result)\n const unwrappedResult = {\n ...rest,\n\n // hydrate() expects a QueryState object, which is similar but not\n // quite the same as a QueryObserverResult object. Thus, for now, we're\n // copying over the missing properties from state in order to support hydration\n dataUpdateCount: query.state.dataUpdateCount,\n fetchFailureCount: query.state.fetchFailureCount,\n // Removing these properties since they might not be serializable\n // fetchFailureReason: query.state.fetchFailureReason,\n // fetchMeta: query.state.fetchMeta,\n isInvalidated: query.state.isInvalidated,\n }\n\n if (unwrappedResult.isError) {\n if (process.env['NODE_ENV'] === 'development') {\n console.error(unwrappedResult.error)\n }\n reject(unwrappedResult.error)\n }\n if (unwrappedResult.isSuccess) {\n // Use of any here is fine\n // We cannot include refetch since it is not serializable\n resolve(unwrappedResult as any)\n }\n })()\n })\n }\n\n const createClientSubscriber = () => {\n return observer.subscribe((result) => {\n notifyManager.batchCalls(() => {\n // @ts-expect-error - This will error because the reconcile option does not\n // exist on the query-core QueryObserverResult type\n const reconcileOptions = observer.options.reconcile\n // If the query has data we dont suspend but instead mutate the resource\n // This could happen when placeholderData/initialData is defined\n if (queryResource()?.data && result.data && !queryResource.loading) {\n setState((store) => {\n return reconcileFn(\n store,\n result,\n reconcileOptions === undefined ? 'id' : reconcileOptions,\n )\n })\n mutate(state)\n } else {\n setState((store) => {\n return reconcileFn(\n store,\n result,\n reconcileOptions === undefined ? 'id' : reconcileOptions,\n )\n })\n refetch()\n }\n })()\n })\n }\n\n /**\n * Unsubscribe is set lazily, so that we can subscribe after hydration when needed.\n */\n let unsubscribe: (() => void) | null = null\n\n const [queryResource, { refetch, mutate }] = createResource<\n QueryObserverResult<TData, TError> | undefined\n >(\n () => {\n return new Promise((resolve, reject) => {\n if (isServer) {\n unsubscribe = createServerSubscriber(resolve, reject)\n } else {\n if (!unsubscribe) {\n unsubscribe = createClientSubscriber()\n }\n }\n if (!state.isLoading) {\n resolve(state)\n }\n })\n },\n {\n initialValue: state,\n\n // If initialData is provided, we resolve the resource immediately\n ssrLoadFrom: options().initialData ? 'initial' : 'server',\n\n get deferStream() {\n return options().deferStream\n },\n\n /**\n * If this resource was populated on the server (either sync render, or streamed in over time), onHydrated\n * will be called. This is the point at which we can hydrate the query cache state, and setup the query subscriber.\n *\n * Leveraging onHydrated allows us to plug into the async and streaming support that solidjs resources already support.\n *\n * Note that this is only invoked on the client, for queries that were originally run on the server.\n */\n onHydrated(_k, info) {\n if (info.value) {\n hydrate(client(), {\n queries: [\n {\n queryKey: defaultedOptions.queryKey,\n queryHash: defaultedOptions.queryHash,\n state: info.value,\n },\n ],\n })\n }\n\n if (!unsubscribe) {\n /**\n * Do not refetch query on mount if query was fetched on server,\n * even if `staleTime` is not set.\n */\n const newOptions = { ...defaultedOptions }\n if (defaultedOptions.staleTime || !defaultedOptions.initialData) {\n newOptions.refetchOnMount = false\n }\n // Setting the options as an immutable object to prevent\n // wonky behavior with observer subscriptions\n observer.setOptions(newOptions)\n setState(observer.getOptimisticResult(newOptions))\n unsubscribe = createClientSubscriber()\n }\n },\n },\n )\n\n onCleanup(() => {\n if (unsubscribe) {\n unsubscribe()\n unsubscribe = null\n }\n })\n\n createComputed(\n on(\n () => client().defaultQueryOptions(options()),\n () => observer.setOptions(client().defaultQueryOptions(options())),\n {\n // Defer because we don't need to trigger on first render\n // This only cares about changes to options after the observer is created\n defer: true,\n },\n ),\n )\n\n createComputed(\n on(\n () => state.status,\n () => {\n if (\n state.isError &&\n !state.isFetching &&\n shouldThrowError(observer.options.throwOnError, [\n state.error,\n observer.getCurrentQuery(),\n ])\n ) {\n throw state.error\n }\n },\n ),\n )\n\n const handler = {\n get(\n target: QueryObserverResult<TData, TError>,\n prop: keyof QueryObserverResult<TData, TError>,\n ): any {\n const val = queryResource()?.[prop]\n return val !== undefined ? val : Reflect.get(target, prop)\n },\n }\n\n return new Proxy(state, handler)\n}\n","import type { DefaultError } from '@tanstack/query-core'\nimport type { QueryClient } from './QueryClient'\nimport { MutationObserver } from '@tanstack/query-core'\nimport { useQueryClient } from './QueryClientProvider'\nimport type {\n CreateMutateFunction,\n CreateMutationOptions,\n CreateMutationResult,\n} from './types'\nimport type { Accessor } from 'solid-js'\nimport { createComputed, onCleanup, on } from 'solid-js'\nimport { createStore } from 'solid-js/store'\nimport { shouldThrowError } from './utils'\n\n// HOOK\nexport function createMutation<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n>(\n options: CreateMutationOptions<TData, TError, TVariables, TContext>,\n queryClient?: Accessor<QueryClient>,\n): CreateMutationResult<TData, TError, TVariables, TContext> {\n const client = useQueryClient(queryClient?.())\n\n const observer = new MutationObserver<TData, TError, TVariables, TContext>(\n client,\n options(),\n )\n\n const mutate: CreateMutateFunction<TData, TError, TVariables, TContext> = (\n variables,\n mutateOptions,\n ) => {\n observer.mutate(variables, mutateOptions).catch(noop)\n }\n\n const [state, setState] = createStore<\n CreateMutationResult<TData, TError, TVariables, TContext>\n >({\n ...observer.getCurrentResult(),\n mutate,\n mutateAsync: observer.getCurrentResult().mutate,\n })\n\n createComputed(() => {\n observer.setOptions(options())\n })\n\n createComputed(\n on(\n () => state.status,\n () => {\n if (\n state.isError &&\n shouldThrowError(observer.options.throwOnError, [state.error])\n ) {\n throw state.error\n }\n },\n ),\n )\n\n const unsubscribe = observer.subscribe((result) => {\n setState({\n ...result,\n mutate,\n mutateAsync: result.mutate,\n })\n })\n\n onCleanup(unsubscribe)\n\n return state\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction noop() {}\n","import type {\n QueryObserver,\n QueryKey,\n DefaultError,\n InfiniteData,\n} from '@tanstack/query-core'\nimport type { QueryClient } from './QueryClient'\nimport { InfiniteQueryObserver } from '@tanstack/query-core'\nimport type {\n CreateInfiniteQueryOptions,\n CreateInfiniteQueryResult,\n} from './types'\nimport { createBaseQuery } from './createBaseQuery'\nimport { createMemo } from 'solid-js'\nimport type { Accessor } from 'solid-js'\n\nexport function createInfiniteQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: CreateInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n queryClient?: Accessor<QueryClient>,\n): CreateInfiniteQueryResult<TData, TError> {\n return createBaseQuery(\n createMemo(() => options()),\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n InfiniteQueryObserver as typeof QueryObserver,\n queryClient,\n ) as CreateInfiniteQueryResult<TData, TError>\n}\n","import type {\n QueriesPlaceholderDataFunction,\n QueryFunction,\n QueryKey,\n DefaultError,\n} from '@tanstack/query-core'\nimport { notifyManager, QueriesObserver } from '@tanstack/query-core'\nimport type { QueryClient } from './QueryClient'\nimport type { Accessor } from 'solid-js'\nimport { createComputed, onCleanup, onMount } from 'solid-js'\nimport { createStore, unwrap } from 'solid-js/store'\nimport { useQueryClient } from './QueryClientProvider'\nimport type { CreateQueryResult, SolidQueryOptions } from './types'\n\n// This defines the `UseQueryOptions` that are accepted in `QueriesOptions` & `GetOptions`.\n// `placeholderData` function does not have a parameter\ntype CreateQueryOptionsForCreateQueries<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = Omit<\n SolidQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n 'placeholderData'\n> & {\n placeholderData?: TQueryFnData | QueriesPlaceholderDataFunction<TQueryFnData>\n}\n\n// Avoid TS depth-limit error in case of large array literal\ntype MAXIMUM_DEPTH = 20\n\ntype GetOptions<T> =\n // Part 1: responsible for applying explicit type parameter to function arguments, if object { queryFnData: TQueryFnData, error: TError, data: TData }\n T extends {\n queryFnData: infer TQueryFnData\n error?: infer TError\n data: infer TData\n }\n ? CreateQueryOptionsForCreateQueries<TQueryFnData, TError, TData>\n : T extends { queryFnData: infer TQueryFnData; error?: infer TError }\n ? CreateQueryOptionsForCreateQueries<TQueryFnData, TError>\n : T extends { data: infer TData; error?: infer TError }\n ? CreateQueryOptionsForCreateQueries<unknown, TError, TData>\n : // Part 2: responsible for applying explicit type parameter to function arguments, if tuple [TQueryFnData, TError, TData]\n T extends [infer TQueryFnData, infer TError, infer TData]\n ? CreateQueryOptionsForCreateQueries<TQueryFnData, TError, TData>\n : T extends [infer TQueryFnData, infer TError]\n ? CreateQueryOptionsForCreateQueries<TQueryFnData, TError>\n : T extends [infer TQueryFnData]\n ? CreateQueryOptionsForCreateQueries<TQueryFnData>\n : // Part 3: responsible for inferring and enforcing type if no explicit parameter was provided\n T extends {\n queryFn?: QueryFunction<infer TQueryFnData, infer TQueryKey>\n select: (data: any) => infer TData\n }\n ? CreateQueryOptionsForCreateQueries<TQueryFnData, Error, TData, TQueryKey>\n : T extends { queryFn?: QueryFunction<infer TQueryFnData, infer TQueryKey> }\n ? CreateQueryOptionsForCreateQueries<\n TQueryFnData,\n Error,\n TQueryFnData,\n TQueryKey\n >\n : // Fallback\n CreateQueryOptionsForCreateQueries\n\ntype GetResults<T> =\n // Part 1: responsible for mapping explicit type parameter to function result, if object\n T extends { queryFnData: any; error?: infer TError; data: infer TData }\n ? CreateQueryResult<TData, TError>\n : T extends { queryFnData: infer TQueryFnData; error?: infer TError }\n ? CreateQueryResult<TQueryFnData, TError>\n : T extends { data: infer TData; error?: infer TError }\n ? CreateQueryResult<TData, TError>\n : // Part 2: responsible for mapping explicit type parameter to function result, if tuple\n T extends [any, infer TError, infer TData]\n ? CreateQueryResult<TData, TError>\n : T extends [infer TQueryFnData, infer TError]\n ? CreateQueryResult<TQueryFnData, TError>\n : T extends [infer TQueryFnData]\n ? CreateQueryResult<TQueryFnData>\n : // Part 3: responsible for mapping inferred type to results, if no explicit parameter was provided\n T extends {\n queryFn?: QueryFunction<unknown, any>\n select: (data: any) => infer TData\n }\n ? CreateQueryResult<TData>\n : T extends { queryFn?: QueryFunction<infer TQueryFnData, any> }\n ? CreateQueryResult<TQueryFnData>\n : // Fallback\n CreateQueryResult\n\n/**\n * QueriesOptions reducer recursively unwraps function arguments to infer/enforce type param\n */\nexport type QueriesOptions<\n T extends any[],\n Result extends any[] = [],\n Depth extends ReadonlyArray<number> = [],\n> = Depth['length'] extends MAXIMUM_DEPTH\n ? CreateQueryOptionsForCreateQueries[]\n : T extends []\n ? []\n : T extends [infer Head]\n ? [...Result, GetOptions<Head>]\n : T extends [infer Head, ...infer Tail]\n ? QueriesOptions<[...Tail], [...Result, GetOptions<Head>], [...Depth, 1]>\n : unknown[] extends T\n ? T\n : // If T is *some* array but we couldn't assign unknown[] to it, then it must hold some known/homogenous type!\n // use this to infer the param types in the case of Array.map() argument\n T extends CreateQueryOptionsForCreateQueries<\n infer TQueryFnData,\n infer TError,\n infer TData,\n infer TQueryKey\n >[]\n ? CreateQueryOptionsForCreateQueries<TQueryFnData, TError, TData, TQueryKey>[]\n : // Fallback\n CreateQueryOptionsForCreateQueries[]\n\n/**\n * QueriesResults reducer recursively maps type param to results\n */\nexport type QueriesResults<\n T extends any[],\n Result extends any[] = [],\n Depth extends ReadonlyArray<number> = [],\n> = Depth['length'] extends MAXIMUM_DEPTH\n ? CreateQueryResult[]\n : T extends []\n ? []\n : T extends [infer Head]\n ? [...Result, GetResults<Head>]\n : T extends [infer Head, ...infer Tail]\n ? QueriesResults<[...Tail], [...Result, GetResults<Head>], [...Depth, 1]>\n : T extends CreateQueryOptionsForCreateQueries<\n infer TQueryFnData,\n infer TError,\n infer TData,\n any\n >[]\n ? // Dynamic-size (homogenous) UseQueryOptions array: map directly to array of results\n CreateQueryResult<\n unknown extends TData ? TQueryFnData : TData,\n unknown extends TError ? DefaultError : TError\n >[]\n : // Fallback\n CreateQueryResult[]\n\nexport function createQueries<T extends any[]>(\n queriesOptions: Accessor<{\n queries: readonly [...QueriesOptions<T>]\n }>,\n queryClient?: Accessor<QueryClient>,\n): QueriesResults<T> {\n const client = useQueryClient(queryClient?.())\n\n const defaultedQueries = queriesOptions().queries.map((options) => {\n const defaultedOptions = client.defaultQueryOptions(options)\n defaultedOptions._optimisticResults = 'optimistic'\n return defaultedOptions\n })\n\n const observer = new QueriesObserver(client, defaultedQueries)\n\n const [state, setState] = createStore(\n observer.getOptimisticResult(defaultedQueries),\n )\n\n const unsubscribe = observer.subscribe((result) => {\n notifyManager.batchCalls(() => {\n setState(unwrap(result))\n })()\n })\n\n onCleanup(unsubscribe)\n\n onMount(() => {\n observer.setQueries(defaultedQueries, { listeners: false })\n })\n\n createComputed(() => {\n const updatedQueries = queriesOptions().queries.map((options) => {\n const defaultedOptions = client.defaultQueryOptions(options)\n defaultedOptions._optimisticResults = 'optimistic'\n return defaultedOptions\n })\n observer.setQueries(updatedQueries)\n })\n\n return state as QueriesResults<T>\n}\n","import type { QueryKey, DefaultError } from '@tanstack/query-core'\nimport { QueryObserver } from '@tanstack/query-core'\nimport type { QueryClient } from './QueryClient'\nimport type { Accessor } from 'solid-js'\nimport { createMemo } from 'solid-js'\nimport { createBaseQuery } from './createBaseQuery'\nimport type {\n CreateQueryOptions,\n CreateQueryResult,\n DefinedCreateQueryResult,\n FunctionedParams,\n SolidQueryOptions,\n} from './types'\n\ntype UndefinedInitialDataOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = FunctionedParams<\n SolidQueryOptions<TQueryFnData, TError, TData, TQueryKey> & {\n initialData?: undefined\n }\n>\n\ntype DefinedInitialDataOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = FunctionedParams<\n SolidQueryOptions<TQueryFnData, TError, TData, TQueryKey> & {\n initialData: TQueryFnData | (() => TQueryFnData)\n }\n>\n\nexport function createQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: () => QueryClient,\n): CreateQueryResult<TData, TError>\n\nexport function createQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: () => QueryClient,\n): DefinedCreateQueryResult<TData, TError>\nexport function createQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: Accessor<QueryClient>,\n) {\n return createBaseQuery(\n createMemo(() => options()),\n QueryObserver,\n queryClient,\n )\n}\n","import type { QueryFilters } from '@tanstack/query-core'\nimport type { QueryClient } from './QueryClient'\nimport type { Accessor } from 'solid-js'\nimport { createMemo, createSignal, onCleanup } from 'solid-js'\nimport { useQueryClient } from './QueryClientProvider'\n\nexport function useIsFetching(\n filters?: Accessor<QueryFilters>,\n queryClient?: Accessor<QueryClient>,\n): Accessor<number> {\n const client = createMemo(() => useQueryClient(queryClient?.()))\n const queryCache = createMemo(() => client().getQueryCache())\n\n const [fetches, setFetches] = createSignal(client().isFetching(filters?.()))\n\n const unsubscribe = queryCache().subscribe(() => {\n setFetches(client().isFetching(filters?.()))\n })\n\n onCleanup(unsubscribe)\n\n return fetches\n}\n","import type { MutationFilters } from '@tanstack/query-core'\nimport type { QueryClient } from './QueryClient'\nimport { useQueryClient } from './QueryClientProvider'\nimport type { Accessor } from 'solid-js'\nimport { createSignal, onCleanup, createMemo } from 'solid-js'\n\nexport function useIsMutating(\n filters?: Accessor<MutationFilters>,\n queryClient?: Accessor<QueryClient>,\n): Accessor<number> {\n const client = createMemo(() => useQueryClient(queryClient?.()))\n const mutationCache = createMemo(() => client().getMutationCache())\n\n const [mutations, setMutations] = createSignal(\n client().isMutating(filters?.()),\n )\n\n const unsubscribe = mutationCache().subscribe((_result) => {\n setMutations(client().isMutating(filters?.()))\n })\n\n onCleanup(unsubscribe)\n\n return mutations\n}\n"],"names":["notifyManager","setBatchNotifyFunction","batch","QueryClient","QueryCoreClient","constructor","config","super","QueryClientContext","createContext","undefined","useQueryClient","queryClient","client","useContext","Error","shouldThrowError","throwError","params","reconcileFn","store","result","reconcileOption","newData","data","reconcile","key","createBaseQuery","options","Observer","createMemo","defaultedOptions","defaultQueryOptions","_optimisticResults","structuralSharing","isServer","retry","throwOnError","observer","state","setState","createStore","getOptimisticResult","createClientSubscriber","subscribe","batchCalls","reconcileOptions","queryResource","loading","mutate","refetch","unsubscribe","createResource","Promise","resolve","reject","query","getCurrentQuery","rest","unwrap","unwrappedResult","dataUpdateCount","fetchFailureCount","isInvalidated","isError","process","env","console","error","isSuccess","createServerSubscriber","isLoading","initialValue","ssrLoadFrom","initialData","deferStream","onHydrated","_k","info","value","hydrate","queries","queryKey","queryHash","newOptions","staleTime","refetchOnMount","setOptions","onCleanup","createComputed","on","defer","status","isFetching","Proxy","get","target","prop","val","Reflect","noop","props","onMount","mount","unmount","_$createComponent","createComponent","Provider","children","InfiniteQueryObserver","MutationObserver","variables","mutateOptions","catch","getCurrentResult","mutateAsync","queriesOptions","defaultedQueries","map","QueriesObserver","setQueries","listeners","updatedQueries","QueryObserver","filters","queryCache","getQueryCache","fetches","setFetches","createSignal","mutationCache","getMutationCache","mutations","setMutations","isMutating","_result"],"mappings":"ycAGAA,EAAAA,cAAcC,uBAAuBC,EAAAA,OC4E9B,MAAMC,UAAoBC,EAAAA,YAC/BC,YAAYC,EAA4B,IACtCC,MAAMD,EACR,QC9EWE,EAAqBC,EAAaA,mBAC7CC,GAGWC,EAAkBC,IAC7B,MAAMC,EAASC,aAAWN,GAE1B,GAAII,EACF,OAAOA,EAGT,IAAKC,EACH,MAAM,IAAIE,MAAM,0DAGlB,OAAOF,CAAM,ECnBR,SAASG,EACdC,EACAC,GAGA,MAA0B,mBAAfD,EACFA,KAAcC,KAGdD,CACX,CCgBA,SAASE,EACPC,EACAC,EACAC,GAKA,IAAwB,IAApBA,EAA2B,OAAOD,EACtC,GAA+B,mBAApBC,EAAgC,CACzC,MAAMC,EAAUD,EAAgBF,EAAMI,KAAMH,EAAOG,MACnD,MAAO,IAAKH,EAAQG,KAAMD,EAC5B,CACA,MAAMA,EAAUE,EAAAA,UAAUJ,EAAOG,KAAM,CAAEE,IAAKJ,GAA9BG,CAAiDL,EAAMI,MACvE,MAAO,IAAKH,EAAQG,KAAMD,EAC5B,CAGO,SAASI,EAOdC,EAGAC,EACAjB,GAEA,MAAMC,EAASiB,EAAAA,YAAW,IAAMnB,EAAeC,SAEzCmB,EAAmBlB,IAASmB,oBAAoBJ,KACtDG,EAAiBE,mBAAqB,aACtCF,EAAiBG,mBAAoB,EACjCC,aACFJ,EAAiBK,OAAQ,EACzBL,EAAiBM,cAAe,GAElC,MAAMC,EAAW,IAAIT,EAAShB,IAAUkB,IAEjCQ,EAAOC,GAAYC,EAAAA,YACxBH,EAASI,oBAAoBX,IA6CzBY,EAAyB,IACtBL,EAASM,WAAWvB,IACzBrB,EAAaA,cAAC6C,YAAW,KAGvB,MAAMC,EAAmBR,EAASV,QAAQH,UAGtCsB,KAAiBvB,MAAQH,EAAOG,OAASuB,EAAcC,SACzDR,GAAUpB,GACDD,EACLC,EACAC,OACqBX,IAArBoC,EAAiC,KAAOA,KAG5CG,EAAOV,KAEPC,GAAUpB,GACDD,EACLC,EACAC,OACqBX,IAArBoC,EAAiC,KAAOA,KAG5CI,IACF,GAxBFlD,EAyBI,IAOR,IAAImD,EAAmC,KAEvC,MAAOJ,GAAeG,QAAEA,EAAOD,OAAEA,IAAYG,EAAcA,gBAGzD,IACS,IAAIC,SAAQ,CAACC,EAASC,KACvBpB,WACFgB,EApFuB,EAC7BG,EAMAC,IAEOjB,EAASM,WAAWvB,IACzBrB,EAAaA,cAAC6C,YAAW,KACvB,MAAMW,EAAQlB,EAASmB,mBACjBP,QAAEA,KAAYQ,GAASC,EAAAA,OAAOtC,GAC9BuC,EAAkB,IACnBF,EAKHG,gBAAiBL,EAAMjB,MAAMsB,gBAC7BC,kBAAmBN,EAAMjB,MAAMuB,kBAI/BC,cAAeP,EAAMjB,MAAMwB,eAGzBH,EAAgBI,UACc,gBAA5BC,QAAQC,IAAc,UACxBC,QAAQC,MAAMR,EAAgBQ,OAEhCb,EAAOK,EAAgBQ,QAErBR,EAAgBS,WAGlBf,EAAQM,EACV,GA3BF5D,EA4BI,IA8CcsE,CAAuBhB,EAASC,GAEzCJ,IACHA,EAAcR,KAGbJ,EAAMgC,WACTjB,EAAQf,EACV,KAGJ,CACEiC,aAAcjC,EAGdkC,YAAa7C,IAAU8C,YAAc,UAAY,SAE7CC,kBACF,OAAO/C,IAAU+C,WAClB,EAUDC,WAAWC,EAAIC,GAab,GAZIA,EAAKC,OACPC,EAAOA,QAACnE,IAAU,CAChBoE,QAAS,CACP,CACEC,SAAUnD,EAAiBmD,SAC3BC,UAAWpD,EAAiBoD,UAC5B5C,MAAOuC,EAAKC,WAMf5B,EAAa,CAKhB,MAAMiC,EAAa,IAAKrD,IACpBA,EAAiBsD,WAActD,EAAiB2C,cAClDU,EAAWE,gBAAiB,GAI9BhD,EAASiD,WAAWH,GACpB5C,EAASF,EAASI,oBAAoB0C,IACtCjC,EAAcR,GAChB,CACF,IAIJ6C,EAAAA,WAAU,KACJrC,IACFA,IACAA,EAAc,KAChB,IAGFsC,EAAcA,eACZC,EAAEA,IACA,IAAM7E,IAASmB,oBAAoBJ,OACnC,IAAMU,EAASiD,WAAW1E,IAASmB,oBAAoBJ,OACvD,CAGE+D,OAAO,KAKbF,EAAAA,eACEC,EAAEA,IACA,IAAMnD,EAAMqD,SACZ,KACE,GACErD,EAAMyB,UACLzB,EAAMsD,YACP7E,EAAiBsB,EAASV,QAAQS,aAAc,CAC9CE,EAAM6B,MACN9B,EAASmB,oBAGX,MAAMlB,EAAM6B,KACd,KAeN,OAAO,IAAI0B,MAAMvD,EAVD,CACdwD,IACEC,EACAC,GAEA,MAAMC,EAAMnD,MAAkBkD,GAC9B,YAAevF,IAARwF,EAAoBA,EAAMC,QAAQJ,IAAIC,EAAQC,EACvD,GAIJ,CC3LA,SAASG,IAAO,8DHlDdC,IAEAC,EAAAA,SAAQ,KACND,EAAMxF,OAAO0F,OAAO,IAEtBf,EAAAA,WAAU,IAAMa,EAAMxF,OAAO2F,YAG1BC,EAAAC,gBAAAlG,EAAmBmG,SAAQ,CAAC5B,YAAK,OAAEsB,EAAMxF,MAAM,EAAA+F,eAAA,OAC7CP,EAAMO,QAAQ,2BIrBd,SAOLhF,EAOAhB,GAEA,OAAOe,EACLG,EAAAA,YAAW,IAAMF,MAEjBiF,EAAqBA,sBACrBjG,EAEJ,mBDvBO,SAMLgB,EACAhB,GAEA,MAAMC,EAASF,EAAeC,OAExB0B,EAAW,IAAIwE,EAAAA,iBACnBjG,EACAe,KAGIqB,EAAoE,CACxE8D,EACAC,KAEA1E,EAASW,OAAO8D,EAAWC,GAAeC,MAAMb,EAAK,GAGhD7D,EAAOC,GAAYC,cAExB,IACGH,EAAS4E,mBACZjE,SACAkE,YAAa7E,EAAS4E,mBAAmBjE,SAG3CwC,EAAAA,gBAAe,KACbnD,EAASiD,WAAW3D,IAAU,IAGhC6D,EAAAA,eACEC,EAAEA,IACA,IAAMnD,EAAMqD,SACZ,KACE,GACErD,EAAMyB,SACNhD,EAAiBsB,EAASV,QAAQS,aAAc,CAACE,EAAM6B,QAEvD,MAAM7B,EAAM6B,KACd,KAKN,MAAMjB,EAAcb,EAASM,WAAWvB,IACtCmB,EAAS,IACJnB,EACH4B,SACAkE,YAAa9F,EAAO4B,QACpB,IAKJ,OAFAuC,EAASA,UAACrC,GAEHZ,CACT,kBE2EO,SACL6E,EAGAxG,GAEA,MAAMC,EAASF,EAAeC,OAExByG,EAAmBD,IAAiBnC,QAAQqC,KAAK1F,IACrD,MAAMG,EAAmBlB,EAAOmB,oBAAoBJ,GAEpD,OADAG,EAAiBE,mBAAqB,aAC/BF,CAAgB,IAGnBO,EAAW,IAAIiF,EAAAA,gBAAgB1G,EAAQwG,IAEtC9E,EAAOC,GAAYC,EAAAA,YACxBH,EAASI,oBAAoB2E,IAGzBlE,EAAcb,EAASM,WAAWvB,IACtCrB,EAAaA,cAAC6C,YAAW,KACvBL,EAASmB,EAAAA,OAAOtC,GAAQ,GAD1BrB,EAEI,IAkBN,OAfAwF,EAASA,UAACrC,GAEVmD,EAAAA,SAAQ,KACNhE,EAASkF,WAAWH,EAAkB,CAAEI,WAAW,GAAQ,IAG7DhC,EAAAA,gBAAe,KACb,MAAMiC,EAAiBN,IAAiBnC,QAAQqC,KAAK1F,IACnD,MAAMG,EAAmBlB,EAAOmB,oBAAoBJ,GAEpD,OADAG,EAAiBE,mBAAqB,aAC/BF,CAAgB,IAEzBO,EAASkF,WAAWE,EAAe,IAG9BnF,CACT,gBCzIO,SAMLX,EACAhB,GAEA,OAAOe,EACLG,EAAAA,YAAW,IAAMF,MACjB+F,EAAAA,cACA/G,EAEJ,kBC/DO,SACLgH,EACAhH,GAEA,MAAMC,EAASiB,EAAAA,YAAW,IAAMnB,EAAeC,SACzCiH,EAAa/F,EAAAA,YAAW,IAAMjB,IAASiH,mBAEtCC,EAASC,GAAcC,EAAYA,aAACpH,IAASgF,WAAW+B,QAEzDzE,EAAc0E,IAAajF,WAAU,KACzCoF,EAAWnH,IAASgF,WAAW+B,OAAa,IAK9C,OAFApC,EAASA,UAACrC,GAEH4E,CACT,kBChBO,SACLH,EACAhH,GAEA,MAAMC,EAASiB,EAAAA,YAAW,IAAMnB,EAAeC,SACzCsH,EAAgBpG,EAAAA,YAAW,IAAMjB,IAASsH,sBAEzCC,EAAWC,GAAgBJ,EAAYA,aAC5CpH,IAASyH,WAAWV,QAGhBzE,EAAc+E,IAAgBtF,WAAW2F,IAC7CF,EAAaxH,IAASyH,WAAWV,OAAa,IAKhD,OAFApC,EAASA,UAACrC,GAEHiF,CACT"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/solid-query",
3
- "version": "5.0.0-alpha.22",
3
+ "version": "5.0.0-alpha.23",
4
4
  "description": "Primitives for managing, caching and syncing asynchronous and remote data in Solid",
5
5
  "author": "tannerlinsley",
6
6
  "license": "MIT",
@@ -43,7 +43,7 @@
43
43
  "vite-plugin-solid": "^2.3.9"
44
44
  },
45
45
  "dependencies": {
46
- "@tanstack/query-core": "5.0.0-alpha.21"
46
+ "@tanstack/query-core": "5.0.0-alpha.23"
47
47
  },
48
48
  "peerDependencies": {
49
49
  "solid-js": "^1.6.13"
@@ -781,7 +781,7 @@ describe('createMutation', () => {
781
781
  fireEvent.click(screen.getByText('unmount'))
782
782
  })
783
783
 
784
- it('should be able to throw an error when throwErrors is set to true', async () => {
784
+ it('should be able to throw an error when throwOnError is set to true', async () => {
785
785
  function Page() {
786
786
  const mutation = createMutation<string, Error>(() => ({
787
787
  mutationFn: () => {
@@ -789,7 +789,7 @@ describe('createMutation', () => {
789
789
  err.stack = ''
790
790
  return Promise.reject(err)
791
791
  },
792
- throwErrors: true,
792
+ throwOnError: true,
793
793
  }))
794
794
 
795
795
  return (
@@ -820,7 +820,7 @@ describe('createMutation', () => {
820
820
  })
821
821
  })
822
822
 
823
- it('should be able to throw an error when throwErrors is a function that returns true', async () => {
823
+ it('should be able to throw an error when throwOnError is a function that returns true', async () => {
824
824
  let boundary = false
825
825
  function Page() {
826
826
  const mutation = createMutation<string, Error>(() => ({
@@ -829,7 +829,7 @@ describe('createMutation', () => {
829
829
  err.stack = ''
830
830
  return Promise.reject(err)
831
831
  },
832
- throwErrors: () => {
832
+ throwOnError: () => {
833
833
  boundary = !boundary
834
834
  return !boundary
835
835
  },
@@ -2506,7 +2506,7 @@ describe('createQuery', () => {
2506
2506
  await waitFor(() => screen.getByText('Error test jaylen'))
2507
2507
  })
2508
2508
 
2509
- it('should throw error if queryFn throws and throwErrors is in use', async () => {
2509
+ it('should throw error if queryFn throws and throwOnError is in use', async () => {
2510
2510
  const key = queryKey()
2511
2511
 
2512
2512
  function Page() {
@@ -2514,7 +2514,7 @@ describe('createQuery', () => {
2514
2514
  queryKey: key,
2515
2515
  queryFn: () => Promise.reject(new Error('Error test jaylen')),
2516
2516
  retry: false,
2517
- throwErrors: true,
2517
+ throwOnError: true,
2518
2518
  }))
2519
2519
 
2520
2520
  return (
@@ -2536,7 +2536,7 @@ describe('createQuery', () => {
2536
2536
  await waitFor(() => screen.getByText('error boundary'))
2537
2537
  })
2538
2538
 
2539
- it('should update with data if we observe no properties and throwErrors', async () => {
2539
+ it('should update with data if we observe no properties and throwOnError', async () => {
2540
2540
  const key = queryKey()
2541
2541
 
2542
2542
  let result: CreateQueryResult<string> | undefined
@@ -2545,7 +2545,7 @@ describe('createQuery', () => {
2545
2545
  const query = createQuery(() => ({
2546
2546
  queryKey: key,
2547
2547
  queryFn: () => Promise.resolve('data'),
2548
- throwErrors: true,
2548
+ throwOnError: true,
2549
2549
  }))
2550
2550
 
2551
2551
  createEffect(() => {
@@ -2574,7 +2574,7 @@ describe('createQuery', () => {
2574
2574
  queryKey: key,
2575
2575
  queryFn: () => Promise.reject(new Error('Local Error')),
2576
2576
  retry: false,
2577
- throwErrors: (err) => err.message !== 'Local Error',
2577
+ throwOnError: (err) => err.message !== 'Local Error',
2578
2578
  }))
2579
2579
 
2580
2580
  return (
@@ -2605,7 +2605,7 @@ describe('createQuery', () => {
2605
2605
  queryKey: key,
2606
2606
  queryFn: () => Promise.reject(new Error('Remote Error')),
2607
2607
  retry: false,
2608
- throwErrors: (err) => err.message !== 'Local Error',
2608
+ throwOnError: (err) => err.message !== 'Local Error',
2609
2609
  }))
2610
2610
 
2611
2611
  return (
@@ -499,7 +499,7 @@ describe("useQuery's in Suspense mode", () => {
499
499
  await waitFor(() => screen.getByText('error boundary'))
500
500
  })
501
501
 
502
- it('should not throw errors to the error boundary when throwErrors: false', async () => {
502
+ it('should not throw errors to the error boundary when throwOnError: false', async () => {
503
503
  const key = queryKey()
504
504
 
505
505
  function Page() {
@@ -510,7 +510,7 @@ describe("useQuery's in Suspense mode", () => {
510
510
  throw new Error('Suspense Error a2x')
511
511
  },
512
512
  retry: false,
513
- throwErrors: false,
513
+ throwOnError: false,
514
514
  }))
515
515
 
516
516
  // read state.data to trigger suspense.
@@ -548,7 +548,7 @@ describe("useQuery's in Suspense mode", () => {
548
548
  await waitFor(() => screen.getByText('rendered'))
549
549
  })
550
550
 
551
- it('should throw errors to the error boundary when a throwErrors function returns true', async () => {
551
+ it('should throw errors to the error boundary when a throwOnError function returns true', async () => {
552
552
  const key = queryKey()
553
553
 
554
554
  function Page() {
@@ -559,7 +559,7 @@ describe("useQuery's in Suspense mode", () => {
559
559
  return Promise.reject(new Error('Remote Error'))
560
560
  },
561
561
  retry: false,
562
- throwErrors: (err) => err.message !== 'Local Error',
562
+ throwOnError: (err) => err.message !== 'Local Error',
563
563
  }))
564
564
 
565
565
  // read state.data to trigger suspense.
@@ -597,7 +597,7 @@ describe("useQuery's in Suspense mode", () => {
597
597
  await waitFor(() => screen.getByText('error boundary'))
598
598
  })
599
599
 
600
- it('should not throw errors to the error boundary when a throwErrors function returns false', async () => {
600
+ it('should not throw errors to the error boundary when a throwOnError function returns false', async () => {
601
601
  const key = queryKey()
602
602
 
603
603
  function Page() {
@@ -610,7 +610,7 @@ describe("useQuery's in Suspense mode", () => {
610
610
 
611
611
  retry: false,
612
612
  suspense: true,
613
- throwErrors: (err) => err.message !== 'Local Error',
613
+ throwOnError: (err) => err.message !== 'Local Error',
614
614
  }))
615
615
 
616
616
  // read state.data to trigger suspense.
@@ -62,7 +62,7 @@ export function createBaseQuery<
62
62
  defaultedOptions.structuralSharing = false
63
63
  if (isServer) {
64
64
  defaultedOptions.retry = false
65
- defaultedOptions.throwErrors = true
65
+ defaultedOptions.throwOnError = true
66
66
  }
67
67
  const observer = new Observer(client(), defaultedOptions)
68
68
 
@@ -241,7 +241,7 @@ export function createBaseQuery<
241
241
  if (
242
242
  state.isError &&
243
243
  !state.isFetching &&
244
- shouldThrowError(observer.options.throwErrors, [
244
+ shouldThrowError(observer.options.throwOnError, [
245
245
  state.error,
246
246
  observer.getCurrentQuery(),
247
247
  ])
@@ -54,7 +54,7 @@ export function createMutation<
54
54
  () => {
55
55
  if (
56
56
  state.isError &&
57
- shouldThrowError(observer.options.throwErrors, [state.error])
57
+ shouldThrowError(observer.options.throwOnError, [state.error])
58
58
  ) {
59
59
  throw state.error
60
60
  }
@@ -1,6 +0,0 @@
1
- import { QueryClient as QueryCoreClient } from '@tanstack/query-core';
2
- export class QueryClient extends QueryCoreClient {
3
- constructor(config = {}) {
4
- super(config);
5
- }
6
- }
@@ -1,21 +0,0 @@
1
- import { createContext, useContext, onMount, onCleanup } from 'solid-js';
2
- export const QueryClientContext = createContext(undefined);
3
- export const useQueryClient = (queryClient) => {
4
- const client = useContext(QueryClientContext);
5
- if (queryClient) {
6
- return queryClient;
7
- }
8
- if (!client) {
9
- throw new Error('No QueryClient set, use QueryClientProvider to set one');
10
- }
11
- return client;
12
- };
13
- export const QueryClientProvider = (props) => {
14
- onMount(() => {
15
- props.client.mount();
16
- });
17
- onCleanup(() => props.client.unmount());
18
- return (<QueryClientContext.Provider value={props.client}>
19
- {props.children}
20
- </QueryClientContext.Provider>);
21
- };
@@ -1,121 +0,0 @@
1
- import { render, screen, waitFor } from 'solid-testing-library';
2
- import { queryKey } from './utils';
3
- import { QueryCache } from '@tanstack/query-core';
4
- import { createQuery, QueryClientProvider, useQueryClient } from '..';
5
- import { createQueryClient, sleep } from './utils';
6
- import { vi } from 'vitest';
7
- describe('QueryClientProvider', () => {
8
- it('sets a specific cache for all queries to use', async () => {
9
- const key = queryKey();
10
- const queryCache = new QueryCache();
11
- const queryClient = createQueryClient({ queryCache });
12
- function Page() {
13
- const query = createQuery(() => ({
14
- queryKey: key,
15
- queryFn: async () => {
16
- await sleep(10);
17
- return 'test';
18
- },
19
- }));
20
- return (<div>
21
- <h1>{query.data}</h1>
22
- </div>);
23
- }
24
- render(() => (<QueryClientProvider client={queryClient}>
25
- <Page />
26
- </QueryClientProvider>));
27
- await waitFor(() => {
28
- return screen.getByText('test');
29
- });
30
- expect(queryCache.find({ queryKey: key })).toBeDefined();
31
- });
32
- it('allows multiple caches to be partitioned', async () => {
33
- const key1 = queryKey();
34
- const key2 = queryKey();
35
- const queryCache1 = new QueryCache();
36
- const queryCache2 = new QueryCache();
37
- const queryClient1 = createQueryClient({ queryCache: queryCache1 });
38
- const queryClient2 = createQueryClient({ queryCache: queryCache2 });
39
- function Page1() {
40
- const query = createQuery(() => ({
41
- queryKey: key1,
42
- queryFn: async () => {
43
- await sleep(10);
44
- return 'test1';
45
- },
46
- }));
47
- return (<div>
48
- <h1>{query.data}</h1>
49
- </div>);
50
- }
51
- function Page2() {
52
- const query = createQuery(() => ({
53
- queryKey: key2,
54
- queryFn: async () => {
55
- await sleep(10);
56
- return 'test2';
57
- },
58
- }));
59
- return (<div>
60
- <h1>{query.data}</h1>
61
- </div>);
62
- }
63
- render(() => (<>
64
- <QueryClientProvider client={queryClient1}>
65
- <Page1 />
66
- </QueryClientProvider>
67
- <QueryClientProvider client={queryClient2}>
68
- <Page2 />
69
- </QueryClientProvider>
70
- </>));
71
- await waitFor(() => screen.getByText('test1'));
72
- await waitFor(() => screen.getByText('test2'));
73
- expect(queryCache1.find({ queryKey: key1 })).toBeDefined();
74
- expect(queryCache1.find({ queryKey: key2 })).not.toBeDefined();
75
- expect(queryCache2.find({ queryKey: key1 })).not.toBeDefined();
76
- expect(queryCache2.find({ queryKey: key2 })).toBeDefined();
77
- });
78
- it("uses defaultOptions for queries when they don't provide their own config", async () => {
79
- const key = queryKey();
80
- const queryCache = new QueryCache();
81
- const queryClient = createQueryClient({
82
- queryCache,
83
- defaultOptions: {
84
- queries: {
85
- gcTime: Infinity,
86
- },
87
- },
88
- });
89
- function Page() {
90
- const query = createQuery(() => ({
91
- queryKey: key,
92
- queryFn: async () => {
93
- await sleep(10);
94
- return 'test';
95
- },
96
- }));
97
- return (<div>
98
- <h1>{query.data}</h1>
99
- </div>);
100
- }
101
- render(() => (<QueryClientProvider client={queryClient}>
102
- <Page />
103
- </QueryClientProvider>));
104
- await waitFor(() => screen.getByText('test'));
105
- expect(queryCache.find({ queryKey: key })).toBeDefined();
106
- expect(queryCache.find({ queryKey: key })?.options.gcTime).toBe(Infinity);
107
- });
108
- describe('useQueryClient', () => {
109
- it('should throw an error if no query client has been set', () => {
110
- const consoleMock = vi
111
- .spyOn(console, 'error')
112
- .mockImplementation(() => undefined);
113
- function Page() {
114
- useQueryClient();
115
- return null;
116
- }
117
- expect(() => render(() => <Page />)).toThrow('No QueryClient set, use QueryClientProvider to set one');
118
- consoleMock.mockRestore();
119
- });
120
- });
121
- });