@effector-tanstack-query/core 0.2.0 → 0.3.0

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/createInfiniteQuery.ts"],"names":["warnMissingName","resolveReactiveRefetchInterval","createBaseQuery","InfiniteQueryObserver","createEvent","createStore","sidConfig","attach","sample","scopeBind","result","enabled"],"mappings":"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","file":"createInfiniteQuery.cjs","sourcesContent":["import { attach, createEvent, createStore, sample, scopeBind } from 'effector'\nimport { InfiniteQueryObserver } from '@tanstack/query-core'\nimport type {\n InfiniteData,\n QueryClient,\n QueryKey,\n} from '@tanstack/query-core'\nimport { createBaseQuery, sidConfig, warnMissingName } from './createBaseQuery'\nimport { resolveReactiveRefetchInterval } from './resolve'\nimport type {\n CreateInfiniteQueryOptions,\n InfiniteQueryResult,\n} from './types'\n\ntype Observer<TQueryFnData, TError, TData, TPageParam> = InfiniteQueryObserver<\n TQueryFnData,\n TError,\n TData,\n QueryKey,\n TPageParam\n>\n\ntype ObserverResult<TQueryFnData, TError, TData, TPageParam> = ReturnType<\n Observer<TQueryFnData, TError, TData, TPageParam>['getCurrentResult']\n>\n\nexport function createInfiniteQuery<\n TQueryFnData = unknown,\n TError = Error,\n TPageParam = unknown,\n TData = InfiniteData<TQueryFnData, TPageParam>,\n>(\n options: CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData>,\n): InfiniteQueryResult<TData, TError, TPageParam>\nexport function createInfiniteQuery<\n TQueryFnData = unknown,\n TError = Error,\n TPageParam = unknown,\n TData = InfiniteData<TQueryFnData, TPageParam>,\n>(\n queryClient: QueryClient,\n options: CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData>,\n): InfiniteQueryResult<TData, TError, TPageParam>\nexport function createInfiniteQuery<\n TQueryFnData = unknown,\n TError = Error,\n TPageParam = unknown,\n TData = InfiniteData<TQueryFnData, TPageParam>,\n>(\n arg1:\n | QueryClient\n | CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData>,\n arg2?: CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData>,\n): InfiniteQueryResult<TData, TError, TPageParam> {\n const [explicitClient, options] = parseInfiniteArgs<\n TQueryFnData,\n TError,\n TPageParam,\n TData\n >(arg1, arg2)\n const { queryKey, enabled, name, ...restOptions } = options\n\n if (!name) warnMissingName('createInfiniteQuery')\n\n const reactiveRefetchInterval = resolveReactiveRefetchInterval(\n (restOptions as { refetchInterval?: unknown }).refetchInterval,\n )\n if (reactiveRefetchInterval) {\n delete (restOptions as { refetchInterval?: unknown }).refetchInterval\n }\n\n const base = createBaseQuery<\n TData,\n TError,\n ObserverResult<TQueryFnData, TError, TData, TPageParam>,\n Observer<TQueryFnData, TError, TData, TPageParam>,\n {\n $hasNextPage: ReturnType<typeof createStore<boolean>>\n $hasPreviousPage: ReturnType<typeof createStore<boolean>>\n $isFetchingNextPage: ReturnType<typeof createStore<boolean>>\n $isFetchingPreviousPage: ReturnType<typeof createStore<boolean>>\n $isFetchNextPageError: ReturnType<typeof createStore<boolean>>\n $isFetchPreviousPageError: ReturnType<typeof createStore<boolean>>\n fetchNextPage: ReturnType<typeof createEvent<void>>\n fetchPreviousPage: ReturnType<typeof createEvent<void>>\n }\n >(\n explicitClient,\n { queryKey, enabled, name, reactiveRefetchInterval },\n {\n createObserver: (qc, { queryKey: key, enabled: isEnabled }) =>\n new InfiniteQueryObserver<\n TQueryFnData,\n TError,\n TData,\n QueryKey,\n TPageParam\n >(qc, {\n ...restOptions,\n queryKey: key,\n enabled: isEnabled,\n } as any),\n setupExtras: () => {\n const hasNextPageUpdated = createEvent<boolean>()\n const hasPreviousPageUpdated = createEvent<boolean>()\n const isFetchingNextPageUpdated = createEvent<boolean>()\n const isFetchingPreviousPageUpdated = createEvent<boolean>()\n const isFetchNextPageErrorUpdated = createEvent<boolean>()\n const isFetchPreviousPageErrorUpdated = createEvent<boolean>()\n\n const $hasNextPage = createStore(false, {\n ...sidConfig(name, '$hasNextPage'),\n }).on(hasNextPageUpdated, (_, v) => v)\n const $hasPreviousPage = createStore(false, {\n ...sidConfig(name, '$hasPreviousPage'),\n }).on(hasPreviousPageUpdated, (_, v) => v)\n const $isFetchingNextPage = createStore(false, {\n ...sidConfig(name, '$isFetchingNextPage'),\n }).on(isFetchingNextPageUpdated, (_, v) => v)\n const $isFetchingPreviousPage = createStore(false, {\n ...sidConfig(name, '$isFetchingPreviousPage'),\n }).on(isFetchingPreviousPageUpdated, (_, v) => v)\n const $isFetchNextPageError = createStore(false, {\n ...sidConfig(name, '$isFetchNextPageError'),\n }).on(isFetchNextPageErrorUpdated, (_, v) => v)\n const $isFetchPreviousPageError = createStore(false, {\n ...sidConfig(name, '$isFetchPreviousPageError'),\n }).on(isFetchPreviousPageErrorUpdated, (_, v) => v)\n\n const fetchNextPage = createEvent<void>()\n const fetchPreviousPage = createEvent<void>()\n\n return {\n stores: {\n $hasNextPage,\n $hasPreviousPage,\n $isFetchingNextPage,\n $isFetchingPreviousPage,\n $isFetchNextPageError,\n $isFetchPreviousPageError,\n fetchNextPage,\n fetchPreviousPage,\n },\n // Wire fetchNextPage / fetchPreviousPage as scope-aware effects via\n // attach over $observer — same pattern as the rest of createBaseQuery.\n setupEffects: ({ $observer }) => {\n const fetchNextPageFx = attach({\n source: $observer,\n effect: (observer) => {\n if (!observer) return\n observer.fetchNextPage()\n },\n })\n sample({ clock: fetchNextPage, target: fetchNextPageFx })\n\n const fetchPreviousPageFx = attach({\n source: $observer,\n effect: (observer) => {\n if (!observer) return\n observer.fetchPreviousPage()\n },\n })\n sample({ clock: fetchPreviousPage, target: fetchPreviousPageFx })\n },\n bindDispatcher: () => {\n const dispatchHasNextPage = scopeBind(hasNextPageUpdated, {\n safe: true,\n })\n const dispatchHasPreviousPage = scopeBind(hasPreviousPageUpdated, {\n safe: true,\n })\n const dispatchIsFetchingNextPage = scopeBind(\n isFetchingNextPageUpdated,\n { safe: true },\n )\n const dispatchIsFetchingPreviousPage = scopeBind(\n isFetchingPreviousPageUpdated,\n { safe: true },\n )\n const dispatchIsFetchNextPageError = scopeBind(\n isFetchNextPageErrorUpdated,\n { safe: true },\n )\n const dispatchIsFetchPreviousPageError = scopeBind(\n isFetchPreviousPageErrorUpdated,\n { safe: true },\n )\n\n return (result) => {\n dispatchHasNextPage(result.hasNextPage)\n dispatchHasPreviousPage(result.hasPreviousPage)\n dispatchIsFetchingNextPage(result.isFetchingNextPage)\n dispatchIsFetchingPreviousPage(result.isFetchingPreviousPage)\n dispatchIsFetchNextPageError(result.isFetchNextPageError)\n dispatchIsFetchPreviousPageError(result.isFetchPreviousPageError)\n }\n },\n }\n },\n },\n )\n\n // See createQuery.prefetch — same contract, but uses fetchInfiniteQuery so\n // the first page is fetched + cached on the server.\n const prefetch = createEvent<void>()\n const prefetchFx = attach({\n source: {\n qc: base.$queryClient,\n key: base.$resolvedKey,\n enabled: base.$enabled,\n },\n effect: ({ qc, key, enabled }) => {\n if (!qc || !enabled) return\n return qc.fetchInfiniteQuery({\n ...restOptions,\n queryKey: key,\n } as any)\n },\n })\n sample({ clock: prefetch, target: prefetchFx })\n\n const result: InfiniteQueryResult<TData, TError, TPageParam> = {\n $data: base.$data,\n $error: base.$error,\n $status: base.$status,\n $isPending: base.$isPending,\n $isFetching: base.$isFetching,\n $isSuccess: base.$isSuccess,\n $isError: base.$isError,\n $isPlaceholderData: base.$isPlaceholderData,\n $fetchStatus: base.$fetchStatus,\n $hasNextPage: base.$hasNextPage,\n $hasPreviousPage: base.$hasPreviousPage,\n $isFetchingNextPage: base.$isFetchingNextPage,\n $isFetchingPreviousPage: base.$isFetchingPreviousPage,\n $isFetchNextPageError: base.$isFetchNextPageError,\n $isFetchPreviousPageError: base.$isFetchPreviousPageError,\n $observer: base.$observer,\n $queryClient: base.$queryClient,\n fetchNextPage: base.fetchNextPage,\n fetchPreviousPage: base.fetchPreviousPage,\n refresh: base.refresh,\n prefetch,\n mounted: base.mounted,\n unmounted: base.unmounted,\n }\n\n Object.defineProperty(result, '__createObserver', {\n enumerable: false,\n value: (qc: QueryClient, init: { queryKey: any; enabled: boolean }) =>\n new InfiniteQueryObserver<\n TQueryFnData,\n TError,\n TData,\n QueryKey,\n TPageParam\n >(qc, {\n ...restOptions,\n queryKey: init.queryKey,\n enabled: init.enabled,\n } as any),\n })\n Object.defineProperty(result, '__resolvedKey', {\n enumerable: false,\n value: base.$resolvedKey,\n })\n Object.defineProperty(result, '__enabled', {\n enumerable: false,\n value: base.$enabled,\n })\n\n return result\n}\n\nfunction parseInfiniteArgs<TQueryFnData, TError, TPageParam, TData>(\n arg1:\n | QueryClient\n | CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData>,\n arg2?: CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData>,\n): [\n QueryClient | null,\n CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData>,\n] {\n if (arg2 !== undefined) {\n return [arg1 as QueryClient, arg2]\n }\n return [\n null,\n arg1 as CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData>,\n ]\n}\n"]}
1
+ {"version":3,"sources":["../src/createInfiniteQuery.ts"],"names":["warnMissingName","resolveReactiveRefetchInterval","createBaseQuery","InfiniteQueryObserver","createEvent","createStore","sidConfig","attach","sample","scopeBind","result","enabled"],"mappings":"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","file":"createInfiniteQuery.cjs","sourcesContent":["import { attach, createEvent, createStore, sample, scopeBind } from 'effector'\nimport { InfiniteQueryObserver } from '@tanstack/query-core'\nimport type {\n InfiniteData,\n QueryClient,\n QueryKey,\n} from '@tanstack/query-core'\nimport { createBaseQuery, sidConfig, warnMissingName } from './createBaseQuery'\nimport { resolveReactiveRefetchInterval } from './resolve'\nimport type {\n CreateInfiniteQueryOptions,\n EffectorQueryKey,\n InfiniteQueryResult,\n} from './types'\n\ntype Observer<TQueryFnData, TError, TData, TPageParam> = InfiniteQueryObserver<\n TQueryFnData,\n TError,\n TData,\n QueryKey,\n TPageParam\n>\n\ntype ObserverResult<TQueryFnData, TError, TData, TPageParam> = ReturnType<\n Observer<TQueryFnData, TError, TData, TPageParam>['getCurrentResult']\n>\n\nexport function createInfiniteQuery<\n TQueryFnData = unknown,\n TError = Error,\n TPageParam = unknown,\n TData = InfiniteData<TQueryFnData, TPageParam>,\n const TQueryKey extends EffectorQueryKey = EffectorQueryKey,\n>(\n options: CreateInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TPageParam,\n TData,\n TQueryKey\n >,\n): InfiniteQueryResult<TData, TError, TPageParam>\nexport function createInfiniteQuery<\n TQueryFnData = unknown,\n TError = Error,\n TPageParam = unknown,\n TData = InfiniteData<TQueryFnData, TPageParam>,\n const TQueryKey extends EffectorQueryKey = EffectorQueryKey,\n>(\n queryClient: QueryClient,\n options: CreateInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TPageParam,\n TData,\n TQueryKey\n >,\n): InfiniteQueryResult<TData, TError, TPageParam>\nexport function createInfiniteQuery<\n TQueryFnData = unknown,\n TError = Error,\n TPageParam = unknown,\n TData = InfiniteData<TQueryFnData, TPageParam>,\n const TQueryKey extends EffectorQueryKey = EffectorQueryKey,\n>(\n arg1:\n | QueryClient\n | CreateInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TPageParam,\n TData,\n TQueryKey\n >,\n arg2?: CreateInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TPageParam,\n TData,\n TQueryKey\n >,\n): InfiniteQueryResult<TData, TError, TPageParam> {\n const [explicitClient, options] = parseInfiniteArgs<\n TQueryFnData,\n TError,\n TPageParam,\n TData,\n TQueryKey\n >(arg1, arg2)\n const { queryKey, enabled, name, ...restOptions } = options\n\n if (!name) warnMissingName('createInfiniteQuery')\n\n const reactiveRefetchInterval = resolveReactiveRefetchInterval(\n (restOptions as { refetchInterval?: unknown }).refetchInterval,\n )\n if (reactiveRefetchInterval) {\n delete (restOptions as { refetchInterval?: unknown }).refetchInterval\n }\n\n const base = createBaseQuery<\n TData,\n TError,\n ObserverResult<TQueryFnData, TError, TData, TPageParam>,\n Observer<TQueryFnData, TError, TData, TPageParam>,\n {\n $hasNextPage: ReturnType<typeof createStore<boolean>>\n $hasPreviousPage: ReturnType<typeof createStore<boolean>>\n $isFetchingNextPage: ReturnType<typeof createStore<boolean>>\n $isFetchingPreviousPage: ReturnType<typeof createStore<boolean>>\n $isFetchNextPageError: ReturnType<typeof createStore<boolean>>\n $isFetchPreviousPageError: ReturnType<typeof createStore<boolean>>\n fetchNextPage: ReturnType<typeof createEvent<void>>\n fetchPreviousPage: ReturnType<typeof createEvent<void>>\n }\n >(\n explicitClient,\n { queryKey, enabled, name, reactiveRefetchInterval },\n {\n createObserver: (qc, { queryKey: key, enabled: isEnabled }) =>\n new InfiniteQueryObserver<\n TQueryFnData,\n TError,\n TData,\n QueryKey,\n TPageParam\n >(qc, {\n ...restOptions,\n queryKey: key,\n enabled: isEnabled,\n } as any),\n setupExtras: () => {\n const hasNextPageUpdated = createEvent<boolean>()\n const hasPreviousPageUpdated = createEvent<boolean>()\n const isFetchingNextPageUpdated = createEvent<boolean>()\n const isFetchingPreviousPageUpdated = createEvent<boolean>()\n const isFetchNextPageErrorUpdated = createEvent<boolean>()\n const isFetchPreviousPageErrorUpdated = createEvent<boolean>()\n\n const $hasNextPage = createStore(false, {\n ...sidConfig(name, '$hasNextPage'),\n }).on(hasNextPageUpdated, (_, v) => v)\n const $hasPreviousPage = createStore(false, {\n ...sidConfig(name, '$hasPreviousPage'),\n }).on(hasPreviousPageUpdated, (_, v) => v)\n const $isFetchingNextPage = createStore(false, {\n ...sidConfig(name, '$isFetchingNextPage'),\n }).on(isFetchingNextPageUpdated, (_, v) => v)\n const $isFetchingPreviousPage = createStore(false, {\n ...sidConfig(name, '$isFetchingPreviousPage'),\n }).on(isFetchingPreviousPageUpdated, (_, v) => v)\n const $isFetchNextPageError = createStore(false, {\n ...sidConfig(name, '$isFetchNextPageError'),\n }).on(isFetchNextPageErrorUpdated, (_, v) => v)\n const $isFetchPreviousPageError = createStore(false, {\n ...sidConfig(name, '$isFetchPreviousPageError'),\n }).on(isFetchPreviousPageErrorUpdated, (_, v) => v)\n\n const fetchNextPage = createEvent<void>()\n const fetchPreviousPage = createEvent<void>()\n\n return {\n stores: {\n $hasNextPage,\n $hasPreviousPage,\n $isFetchingNextPage,\n $isFetchingPreviousPage,\n $isFetchNextPageError,\n $isFetchPreviousPageError,\n fetchNextPage,\n fetchPreviousPage,\n },\n // Wire fetchNextPage / fetchPreviousPage as scope-aware effects via\n // attach over $observer — same pattern as the rest of createBaseQuery.\n setupEffects: ({ $observer }) => {\n const fetchNextPageFx = attach({\n source: $observer,\n effect: (observer) => {\n if (!observer) return\n observer.fetchNextPage()\n },\n })\n sample({ clock: fetchNextPage, target: fetchNextPageFx })\n\n const fetchPreviousPageFx = attach({\n source: $observer,\n effect: (observer) => {\n if (!observer) return\n observer.fetchPreviousPage()\n },\n })\n sample({ clock: fetchPreviousPage, target: fetchPreviousPageFx })\n },\n bindDispatcher: () => {\n const dispatchHasNextPage = scopeBind(hasNextPageUpdated, {\n safe: true,\n })\n const dispatchHasPreviousPage = scopeBind(hasPreviousPageUpdated, {\n safe: true,\n })\n const dispatchIsFetchingNextPage = scopeBind(\n isFetchingNextPageUpdated,\n { safe: true },\n )\n const dispatchIsFetchingPreviousPage = scopeBind(\n isFetchingPreviousPageUpdated,\n { safe: true },\n )\n const dispatchIsFetchNextPageError = scopeBind(\n isFetchNextPageErrorUpdated,\n { safe: true },\n )\n const dispatchIsFetchPreviousPageError = scopeBind(\n isFetchPreviousPageErrorUpdated,\n { safe: true },\n )\n\n return (result) => {\n dispatchHasNextPage(result.hasNextPage)\n dispatchHasPreviousPage(result.hasPreviousPage)\n dispatchIsFetchingNextPage(result.isFetchingNextPage)\n dispatchIsFetchingPreviousPage(result.isFetchingPreviousPage)\n dispatchIsFetchNextPageError(result.isFetchNextPageError)\n dispatchIsFetchPreviousPageError(result.isFetchPreviousPageError)\n }\n },\n }\n },\n },\n )\n\n // See createQuery.prefetch — same contract, but uses fetchInfiniteQuery so\n // the first page is fetched + cached on the server.\n const prefetch = createEvent<void>()\n const prefetchFx = attach({\n source: {\n qc: base.$queryClient,\n key: base.$resolvedKey,\n enabled: base.$enabled,\n },\n effect: ({ qc, key, enabled }) => {\n if (!qc || !enabled) return\n return qc.fetchInfiniteQuery({\n ...restOptions,\n queryKey: key,\n } as any)\n },\n })\n sample({ clock: prefetch, target: prefetchFx })\n\n const result: InfiniteQueryResult<TData, TError, TPageParam> = {\n $data: base.$data,\n $error: base.$error,\n $status: base.$status,\n $isPending: base.$isPending,\n $isFetching: base.$isFetching,\n $isSuccess: base.$isSuccess,\n $isError: base.$isError,\n $isPlaceholderData: base.$isPlaceholderData,\n $fetchStatus: base.$fetchStatus,\n $hasNextPage: base.$hasNextPage,\n $hasPreviousPage: base.$hasPreviousPage,\n $isFetchingNextPage: base.$isFetchingNextPage,\n $isFetchingPreviousPage: base.$isFetchingPreviousPage,\n $isFetchNextPageError: base.$isFetchNextPageError,\n $isFetchPreviousPageError: base.$isFetchPreviousPageError,\n $observer: base.$observer,\n $queryClient: base.$queryClient,\n fetchNextPage: base.fetchNextPage,\n fetchPreviousPage: base.fetchPreviousPage,\n refresh: base.refresh,\n prefetch,\n mounted: base.mounted,\n unmounted: base.unmounted,\n }\n\n Object.defineProperty(result, '__createObserver', {\n enumerable: false,\n value: (qc: QueryClient, init: { queryKey: any; enabled: boolean }) =>\n new InfiniteQueryObserver<\n TQueryFnData,\n TError,\n TData,\n QueryKey,\n TPageParam\n >(qc, {\n ...restOptions,\n queryKey: init.queryKey,\n enabled: init.enabled,\n } as any),\n })\n Object.defineProperty(result, '__resolvedKey', {\n enumerable: false,\n value: base.$resolvedKey,\n })\n Object.defineProperty(result, '__enabled', {\n enumerable: false,\n value: base.$enabled,\n })\n\n return result\n}\n\nfunction parseInfiniteArgs<\n TQueryFnData,\n TError,\n TPageParam,\n TData,\n TQueryKey extends EffectorQueryKey,\n>(\n arg1:\n | QueryClient\n | CreateInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TPageParam,\n TData,\n TQueryKey\n >,\n arg2?: CreateInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TPageParam,\n TData,\n TQueryKey\n >,\n): [\n QueryClient | null,\n CreateInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TPageParam,\n TData,\n TQueryKey\n >,\n] {\n if (arg2 !== undefined) {\n return [arg1 as QueryClient, arg2]\n }\n return [\n null,\n arg1 as CreateInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TPageParam,\n TData,\n TQueryKey\n >,\n ]\n}\n"]}
@@ -1,8 +1,8 @@
1
1
  import { InfiniteData, QueryClient } from '@tanstack/query-core';
2
- import { CreateInfiniteQueryOptions, InfiniteQueryResult } from './types.cjs';
2
+ import { EffectorQueryKey, CreateInfiniteQueryOptions, InfiniteQueryResult } from './types.cjs';
3
3
  import 'effector';
4
4
 
5
- declare function createInfiniteQuery<TQueryFnData = unknown, TError = Error, TPageParam = unknown, TData = InfiniteData<TQueryFnData, TPageParam>>(options: CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData>): InfiniteQueryResult<TData, TError, TPageParam>;
6
- declare function createInfiniteQuery<TQueryFnData = unknown, TError = Error, TPageParam = unknown, TData = InfiniteData<TQueryFnData, TPageParam>>(queryClient: QueryClient, options: CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData>): InfiniteQueryResult<TData, TError, TPageParam>;
5
+ declare function createInfiniteQuery<TQueryFnData = unknown, TError = Error, TPageParam = unknown, TData = InfiniteData<TQueryFnData, TPageParam>, const TQueryKey extends EffectorQueryKey = EffectorQueryKey>(options: CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData, TQueryKey>): InfiniteQueryResult<TData, TError, TPageParam>;
6
+ declare function createInfiniteQuery<TQueryFnData = unknown, TError = Error, TPageParam = unknown, TData = InfiniteData<TQueryFnData, TPageParam>, const TQueryKey extends EffectorQueryKey = EffectorQueryKey>(queryClient: QueryClient, options: CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData, TQueryKey>): InfiniteQueryResult<TData, TError, TPageParam>;
7
7
 
8
8
  export { createInfiniteQuery };
@@ -1,8 +1,8 @@
1
1
  import { InfiniteData, QueryClient } from '@tanstack/query-core';
2
- import { CreateInfiniteQueryOptions, InfiniteQueryResult } from './types.js';
2
+ import { EffectorQueryKey, CreateInfiniteQueryOptions, InfiniteQueryResult } from './types.js';
3
3
  import 'effector';
4
4
 
5
- declare function createInfiniteQuery<TQueryFnData = unknown, TError = Error, TPageParam = unknown, TData = InfiniteData<TQueryFnData, TPageParam>>(options: CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData>): InfiniteQueryResult<TData, TError, TPageParam>;
6
- declare function createInfiniteQuery<TQueryFnData = unknown, TError = Error, TPageParam = unknown, TData = InfiniteData<TQueryFnData, TPageParam>>(queryClient: QueryClient, options: CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData>): InfiniteQueryResult<TData, TError, TPageParam>;
5
+ declare function createInfiniteQuery<TQueryFnData = unknown, TError = Error, TPageParam = unknown, TData = InfiniteData<TQueryFnData, TPageParam>, const TQueryKey extends EffectorQueryKey = EffectorQueryKey>(options: CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData, TQueryKey>): InfiniteQueryResult<TData, TError, TPageParam>;
6
+ declare function createInfiniteQuery<TQueryFnData = unknown, TError = Error, TPageParam = unknown, TData = InfiniteData<TQueryFnData, TPageParam>, const TQueryKey extends EffectorQueryKey = EffectorQueryKey>(queryClient: QueryClient, options: CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData, TQueryKey>): InfiniteQueryResult<TData, TError, TPageParam>;
7
7
 
8
8
  export { createInfiniteQuery };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/createInfiniteQuery.ts"],"names":["result","enabled"],"mappings":"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","file":"createInfiniteQuery.js","sourcesContent":["import { attach, createEvent, createStore, sample, scopeBind } from 'effector'\nimport { InfiniteQueryObserver } from '@tanstack/query-core'\nimport type {\n InfiniteData,\n QueryClient,\n QueryKey,\n} from '@tanstack/query-core'\nimport { createBaseQuery, sidConfig, warnMissingName } from './createBaseQuery'\nimport { resolveReactiveRefetchInterval } from './resolve'\nimport type {\n CreateInfiniteQueryOptions,\n InfiniteQueryResult,\n} from './types'\n\ntype Observer<TQueryFnData, TError, TData, TPageParam> = InfiniteQueryObserver<\n TQueryFnData,\n TError,\n TData,\n QueryKey,\n TPageParam\n>\n\ntype ObserverResult<TQueryFnData, TError, TData, TPageParam> = ReturnType<\n Observer<TQueryFnData, TError, TData, TPageParam>['getCurrentResult']\n>\n\nexport function createInfiniteQuery<\n TQueryFnData = unknown,\n TError = Error,\n TPageParam = unknown,\n TData = InfiniteData<TQueryFnData, TPageParam>,\n>(\n options: CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData>,\n): InfiniteQueryResult<TData, TError, TPageParam>\nexport function createInfiniteQuery<\n TQueryFnData = unknown,\n TError = Error,\n TPageParam = unknown,\n TData = InfiniteData<TQueryFnData, TPageParam>,\n>(\n queryClient: QueryClient,\n options: CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData>,\n): InfiniteQueryResult<TData, TError, TPageParam>\nexport function createInfiniteQuery<\n TQueryFnData = unknown,\n TError = Error,\n TPageParam = unknown,\n TData = InfiniteData<TQueryFnData, TPageParam>,\n>(\n arg1:\n | QueryClient\n | CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData>,\n arg2?: CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData>,\n): InfiniteQueryResult<TData, TError, TPageParam> {\n const [explicitClient, options] = parseInfiniteArgs<\n TQueryFnData,\n TError,\n TPageParam,\n TData\n >(arg1, arg2)\n const { queryKey, enabled, name, ...restOptions } = options\n\n if (!name) warnMissingName('createInfiniteQuery')\n\n const reactiveRefetchInterval = resolveReactiveRefetchInterval(\n (restOptions as { refetchInterval?: unknown }).refetchInterval,\n )\n if (reactiveRefetchInterval) {\n delete (restOptions as { refetchInterval?: unknown }).refetchInterval\n }\n\n const base = createBaseQuery<\n TData,\n TError,\n ObserverResult<TQueryFnData, TError, TData, TPageParam>,\n Observer<TQueryFnData, TError, TData, TPageParam>,\n {\n $hasNextPage: ReturnType<typeof createStore<boolean>>\n $hasPreviousPage: ReturnType<typeof createStore<boolean>>\n $isFetchingNextPage: ReturnType<typeof createStore<boolean>>\n $isFetchingPreviousPage: ReturnType<typeof createStore<boolean>>\n $isFetchNextPageError: ReturnType<typeof createStore<boolean>>\n $isFetchPreviousPageError: ReturnType<typeof createStore<boolean>>\n fetchNextPage: ReturnType<typeof createEvent<void>>\n fetchPreviousPage: ReturnType<typeof createEvent<void>>\n }\n >(\n explicitClient,\n { queryKey, enabled, name, reactiveRefetchInterval },\n {\n createObserver: (qc, { queryKey: key, enabled: isEnabled }) =>\n new InfiniteQueryObserver<\n TQueryFnData,\n TError,\n TData,\n QueryKey,\n TPageParam\n >(qc, {\n ...restOptions,\n queryKey: key,\n enabled: isEnabled,\n } as any),\n setupExtras: () => {\n const hasNextPageUpdated = createEvent<boolean>()\n const hasPreviousPageUpdated = createEvent<boolean>()\n const isFetchingNextPageUpdated = createEvent<boolean>()\n const isFetchingPreviousPageUpdated = createEvent<boolean>()\n const isFetchNextPageErrorUpdated = createEvent<boolean>()\n const isFetchPreviousPageErrorUpdated = createEvent<boolean>()\n\n const $hasNextPage = createStore(false, {\n ...sidConfig(name, '$hasNextPage'),\n }).on(hasNextPageUpdated, (_, v) => v)\n const $hasPreviousPage = createStore(false, {\n ...sidConfig(name, '$hasPreviousPage'),\n }).on(hasPreviousPageUpdated, (_, v) => v)\n const $isFetchingNextPage = createStore(false, {\n ...sidConfig(name, '$isFetchingNextPage'),\n }).on(isFetchingNextPageUpdated, (_, v) => v)\n const $isFetchingPreviousPage = createStore(false, {\n ...sidConfig(name, '$isFetchingPreviousPage'),\n }).on(isFetchingPreviousPageUpdated, (_, v) => v)\n const $isFetchNextPageError = createStore(false, {\n ...sidConfig(name, '$isFetchNextPageError'),\n }).on(isFetchNextPageErrorUpdated, (_, v) => v)\n const $isFetchPreviousPageError = createStore(false, {\n ...sidConfig(name, '$isFetchPreviousPageError'),\n }).on(isFetchPreviousPageErrorUpdated, (_, v) => v)\n\n const fetchNextPage = createEvent<void>()\n const fetchPreviousPage = createEvent<void>()\n\n return {\n stores: {\n $hasNextPage,\n $hasPreviousPage,\n $isFetchingNextPage,\n $isFetchingPreviousPage,\n $isFetchNextPageError,\n $isFetchPreviousPageError,\n fetchNextPage,\n fetchPreviousPage,\n },\n // Wire fetchNextPage / fetchPreviousPage as scope-aware effects via\n // attach over $observer — same pattern as the rest of createBaseQuery.\n setupEffects: ({ $observer }) => {\n const fetchNextPageFx = attach({\n source: $observer,\n effect: (observer) => {\n if (!observer) return\n observer.fetchNextPage()\n },\n })\n sample({ clock: fetchNextPage, target: fetchNextPageFx })\n\n const fetchPreviousPageFx = attach({\n source: $observer,\n effect: (observer) => {\n if (!observer) return\n observer.fetchPreviousPage()\n },\n })\n sample({ clock: fetchPreviousPage, target: fetchPreviousPageFx })\n },\n bindDispatcher: () => {\n const dispatchHasNextPage = scopeBind(hasNextPageUpdated, {\n safe: true,\n })\n const dispatchHasPreviousPage = scopeBind(hasPreviousPageUpdated, {\n safe: true,\n })\n const dispatchIsFetchingNextPage = scopeBind(\n isFetchingNextPageUpdated,\n { safe: true },\n )\n const dispatchIsFetchingPreviousPage = scopeBind(\n isFetchingPreviousPageUpdated,\n { safe: true },\n )\n const dispatchIsFetchNextPageError = scopeBind(\n isFetchNextPageErrorUpdated,\n { safe: true },\n )\n const dispatchIsFetchPreviousPageError = scopeBind(\n isFetchPreviousPageErrorUpdated,\n { safe: true },\n )\n\n return (result) => {\n dispatchHasNextPage(result.hasNextPage)\n dispatchHasPreviousPage(result.hasPreviousPage)\n dispatchIsFetchingNextPage(result.isFetchingNextPage)\n dispatchIsFetchingPreviousPage(result.isFetchingPreviousPage)\n dispatchIsFetchNextPageError(result.isFetchNextPageError)\n dispatchIsFetchPreviousPageError(result.isFetchPreviousPageError)\n }\n },\n }\n },\n },\n )\n\n // See createQuery.prefetch — same contract, but uses fetchInfiniteQuery so\n // the first page is fetched + cached on the server.\n const prefetch = createEvent<void>()\n const prefetchFx = attach({\n source: {\n qc: base.$queryClient,\n key: base.$resolvedKey,\n enabled: base.$enabled,\n },\n effect: ({ qc, key, enabled }) => {\n if (!qc || !enabled) return\n return qc.fetchInfiniteQuery({\n ...restOptions,\n queryKey: key,\n } as any)\n },\n })\n sample({ clock: prefetch, target: prefetchFx })\n\n const result: InfiniteQueryResult<TData, TError, TPageParam> = {\n $data: base.$data,\n $error: base.$error,\n $status: base.$status,\n $isPending: base.$isPending,\n $isFetching: base.$isFetching,\n $isSuccess: base.$isSuccess,\n $isError: base.$isError,\n $isPlaceholderData: base.$isPlaceholderData,\n $fetchStatus: base.$fetchStatus,\n $hasNextPage: base.$hasNextPage,\n $hasPreviousPage: base.$hasPreviousPage,\n $isFetchingNextPage: base.$isFetchingNextPage,\n $isFetchingPreviousPage: base.$isFetchingPreviousPage,\n $isFetchNextPageError: base.$isFetchNextPageError,\n $isFetchPreviousPageError: base.$isFetchPreviousPageError,\n $observer: base.$observer,\n $queryClient: base.$queryClient,\n fetchNextPage: base.fetchNextPage,\n fetchPreviousPage: base.fetchPreviousPage,\n refresh: base.refresh,\n prefetch,\n mounted: base.mounted,\n unmounted: base.unmounted,\n }\n\n Object.defineProperty(result, '__createObserver', {\n enumerable: false,\n value: (qc: QueryClient, init: { queryKey: any; enabled: boolean }) =>\n new InfiniteQueryObserver<\n TQueryFnData,\n TError,\n TData,\n QueryKey,\n TPageParam\n >(qc, {\n ...restOptions,\n queryKey: init.queryKey,\n enabled: init.enabled,\n } as any),\n })\n Object.defineProperty(result, '__resolvedKey', {\n enumerable: false,\n value: base.$resolvedKey,\n })\n Object.defineProperty(result, '__enabled', {\n enumerable: false,\n value: base.$enabled,\n })\n\n return result\n}\n\nfunction parseInfiniteArgs<TQueryFnData, TError, TPageParam, TData>(\n arg1:\n | QueryClient\n | CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData>,\n arg2?: CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData>,\n): [\n QueryClient | null,\n CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData>,\n] {\n if (arg2 !== undefined) {\n return [arg1 as QueryClient, arg2]\n }\n return [\n null,\n arg1 as CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData>,\n ]\n}\n"]}
1
+ {"version":3,"sources":["../src/createInfiniteQuery.ts"],"names":["result","enabled"],"mappings":"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","file":"createInfiniteQuery.js","sourcesContent":["import { attach, createEvent, createStore, sample, scopeBind } from 'effector'\nimport { InfiniteQueryObserver } from '@tanstack/query-core'\nimport type {\n InfiniteData,\n QueryClient,\n QueryKey,\n} from '@tanstack/query-core'\nimport { createBaseQuery, sidConfig, warnMissingName } from './createBaseQuery'\nimport { resolveReactiveRefetchInterval } from './resolve'\nimport type {\n CreateInfiniteQueryOptions,\n EffectorQueryKey,\n InfiniteQueryResult,\n} from './types'\n\ntype Observer<TQueryFnData, TError, TData, TPageParam> = InfiniteQueryObserver<\n TQueryFnData,\n TError,\n TData,\n QueryKey,\n TPageParam\n>\n\ntype ObserverResult<TQueryFnData, TError, TData, TPageParam> = ReturnType<\n Observer<TQueryFnData, TError, TData, TPageParam>['getCurrentResult']\n>\n\nexport function createInfiniteQuery<\n TQueryFnData = unknown,\n TError = Error,\n TPageParam = unknown,\n TData = InfiniteData<TQueryFnData, TPageParam>,\n const TQueryKey extends EffectorQueryKey = EffectorQueryKey,\n>(\n options: CreateInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TPageParam,\n TData,\n TQueryKey\n >,\n): InfiniteQueryResult<TData, TError, TPageParam>\nexport function createInfiniteQuery<\n TQueryFnData = unknown,\n TError = Error,\n TPageParam = unknown,\n TData = InfiniteData<TQueryFnData, TPageParam>,\n const TQueryKey extends EffectorQueryKey = EffectorQueryKey,\n>(\n queryClient: QueryClient,\n options: CreateInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TPageParam,\n TData,\n TQueryKey\n >,\n): InfiniteQueryResult<TData, TError, TPageParam>\nexport function createInfiniteQuery<\n TQueryFnData = unknown,\n TError = Error,\n TPageParam = unknown,\n TData = InfiniteData<TQueryFnData, TPageParam>,\n const TQueryKey extends EffectorQueryKey = EffectorQueryKey,\n>(\n arg1:\n | QueryClient\n | CreateInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TPageParam,\n TData,\n TQueryKey\n >,\n arg2?: CreateInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TPageParam,\n TData,\n TQueryKey\n >,\n): InfiniteQueryResult<TData, TError, TPageParam> {\n const [explicitClient, options] = parseInfiniteArgs<\n TQueryFnData,\n TError,\n TPageParam,\n TData,\n TQueryKey\n >(arg1, arg2)\n const { queryKey, enabled, name, ...restOptions } = options\n\n if (!name) warnMissingName('createInfiniteQuery')\n\n const reactiveRefetchInterval = resolveReactiveRefetchInterval(\n (restOptions as { refetchInterval?: unknown }).refetchInterval,\n )\n if (reactiveRefetchInterval) {\n delete (restOptions as { refetchInterval?: unknown }).refetchInterval\n }\n\n const base = createBaseQuery<\n TData,\n TError,\n ObserverResult<TQueryFnData, TError, TData, TPageParam>,\n Observer<TQueryFnData, TError, TData, TPageParam>,\n {\n $hasNextPage: ReturnType<typeof createStore<boolean>>\n $hasPreviousPage: ReturnType<typeof createStore<boolean>>\n $isFetchingNextPage: ReturnType<typeof createStore<boolean>>\n $isFetchingPreviousPage: ReturnType<typeof createStore<boolean>>\n $isFetchNextPageError: ReturnType<typeof createStore<boolean>>\n $isFetchPreviousPageError: ReturnType<typeof createStore<boolean>>\n fetchNextPage: ReturnType<typeof createEvent<void>>\n fetchPreviousPage: ReturnType<typeof createEvent<void>>\n }\n >(\n explicitClient,\n { queryKey, enabled, name, reactiveRefetchInterval },\n {\n createObserver: (qc, { queryKey: key, enabled: isEnabled }) =>\n new InfiniteQueryObserver<\n TQueryFnData,\n TError,\n TData,\n QueryKey,\n TPageParam\n >(qc, {\n ...restOptions,\n queryKey: key,\n enabled: isEnabled,\n } as any),\n setupExtras: () => {\n const hasNextPageUpdated = createEvent<boolean>()\n const hasPreviousPageUpdated = createEvent<boolean>()\n const isFetchingNextPageUpdated = createEvent<boolean>()\n const isFetchingPreviousPageUpdated = createEvent<boolean>()\n const isFetchNextPageErrorUpdated = createEvent<boolean>()\n const isFetchPreviousPageErrorUpdated = createEvent<boolean>()\n\n const $hasNextPage = createStore(false, {\n ...sidConfig(name, '$hasNextPage'),\n }).on(hasNextPageUpdated, (_, v) => v)\n const $hasPreviousPage = createStore(false, {\n ...sidConfig(name, '$hasPreviousPage'),\n }).on(hasPreviousPageUpdated, (_, v) => v)\n const $isFetchingNextPage = createStore(false, {\n ...sidConfig(name, '$isFetchingNextPage'),\n }).on(isFetchingNextPageUpdated, (_, v) => v)\n const $isFetchingPreviousPage = createStore(false, {\n ...sidConfig(name, '$isFetchingPreviousPage'),\n }).on(isFetchingPreviousPageUpdated, (_, v) => v)\n const $isFetchNextPageError = createStore(false, {\n ...sidConfig(name, '$isFetchNextPageError'),\n }).on(isFetchNextPageErrorUpdated, (_, v) => v)\n const $isFetchPreviousPageError = createStore(false, {\n ...sidConfig(name, '$isFetchPreviousPageError'),\n }).on(isFetchPreviousPageErrorUpdated, (_, v) => v)\n\n const fetchNextPage = createEvent<void>()\n const fetchPreviousPage = createEvent<void>()\n\n return {\n stores: {\n $hasNextPage,\n $hasPreviousPage,\n $isFetchingNextPage,\n $isFetchingPreviousPage,\n $isFetchNextPageError,\n $isFetchPreviousPageError,\n fetchNextPage,\n fetchPreviousPage,\n },\n // Wire fetchNextPage / fetchPreviousPage as scope-aware effects via\n // attach over $observer — same pattern as the rest of createBaseQuery.\n setupEffects: ({ $observer }) => {\n const fetchNextPageFx = attach({\n source: $observer,\n effect: (observer) => {\n if (!observer) return\n observer.fetchNextPage()\n },\n })\n sample({ clock: fetchNextPage, target: fetchNextPageFx })\n\n const fetchPreviousPageFx = attach({\n source: $observer,\n effect: (observer) => {\n if (!observer) return\n observer.fetchPreviousPage()\n },\n })\n sample({ clock: fetchPreviousPage, target: fetchPreviousPageFx })\n },\n bindDispatcher: () => {\n const dispatchHasNextPage = scopeBind(hasNextPageUpdated, {\n safe: true,\n })\n const dispatchHasPreviousPage = scopeBind(hasPreviousPageUpdated, {\n safe: true,\n })\n const dispatchIsFetchingNextPage = scopeBind(\n isFetchingNextPageUpdated,\n { safe: true },\n )\n const dispatchIsFetchingPreviousPage = scopeBind(\n isFetchingPreviousPageUpdated,\n { safe: true },\n )\n const dispatchIsFetchNextPageError = scopeBind(\n isFetchNextPageErrorUpdated,\n { safe: true },\n )\n const dispatchIsFetchPreviousPageError = scopeBind(\n isFetchPreviousPageErrorUpdated,\n { safe: true },\n )\n\n return (result) => {\n dispatchHasNextPage(result.hasNextPage)\n dispatchHasPreviousPage(result.hasPreviousPage)\n dispatchIsFetchingNextPage(result.isFetchingNextPage)\n dispatchIsFetchingPreviousPage(result.isFetchingPreviousPage)\n dispatchIsFetchNextPageError(result.isFetchNextPageError)\n dispatchIsFetchPreviousPageError(result.isFetchPreviousPageError)\n }\n },\n }\n },\n },\n )\n\n // See createQuery.prefetch — same contract, but uses fetchInfiniteQuery so\n // the first page is fetched + cached on the server.\n const prefetch = createEvent<void>()\n const prefetchFx = attach({\n source: {\n qc: base.$queryClient,\n key: base.$resolvedKey,\n enabled: base.$enabled,\n },\n effect: ({ qc, key, enabled }) => {\n if (!qc || !enabled) return\n return qc.fetchInfiniteQuery({\n ...restOptions,\n queryKey: key,\n } as any)\n },\n })\n sample({ clock: prefetch, target: prefetchFx })\n\n const result: InfiniteQueryResult<TData, TError, TPageParam> = {\n $data: base.$data,\n $error: base.$error,\n $status: base.$status,\n $isPending: base.$isPending,\n $isFetching: base.$isFetching,\n $isSuccess: base.$isSuccess,\n $isError: base.$isError,\n $isPlaceholderData: base.$isPlaceholderData,\n $fetchStatus: base.$fetchStatus,\n $hasNextPage: base.$hasNextPage,\n $hasPreviousPage: base.$hasPreviousPage,\n $isFetchingNextPage: base.$isFetchingNextPage,\n $isFetchingPreviousPage: base.$isFetchingPreviousPage,\n $isFetchNextPageError: base.$isFetchNextPageError,\n $isFetchPreviousPageError: base.$isFetchPreviousPageError,\n $observer: base.$observer,\n $queryClient: base.$queryClient,\n fetchNextPage: base.fetchNextPage,\n fetchPreviousPage: base.fetchPreviousPage,\n refresh: base.refresh,\n prefetch,\n mounted: base.mounted,\n unmounted: base.unmounted,\n }\n\n Object.defineProperty(result, '__createObserver', {\n enumerable: false,\n value: (qc: QueryClient, init: { queryKey: any; enabled: boolean }) =>\n new InfiniteQueryObserver<\n TQueryFnData,\n TError,\n TData,\n QueryKey,\n TPageParam\n >(qc, {\n ...restOptions,\n queryKey: init.queryKey,\n enabled: init.enabled,\n } as any),\n })\n Object.defineProperty(result, '__resolvedKey', {\n enumerable: false,\n value: base.$resolvedKey,\n })\n Object.defineProperty(result, '__enabled', {\n enumerable: false,\n value: base.$enabled,\n })\n\n return result\n}\n\nfunction parseInfiniteArgs<\n TQueryFnData,\n TError,\n TPageParam,\n TData,\n TQueryKey extends EffectorQueryKey,\n>(\n arg1:\n | QueryClient\n | CreateInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TPageParam,\n TData,\n TQueryKey\n >,\n arg2?: CreateInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TPageParam,\n TData,\n TQueryKey\n >,\n): [\n QueryClient | null,\n CreateInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TPageParam,\n TData,\n TQueryKey\n >,\n] {\n if (arg2 !== undefined) {\n return [arg1 as QueryClient, arg2]\n }\n return [\n null,\n arg1 as CreateInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TPageParam,\n TData,\n TQueryKey\n >,\n ]\n}\n"]}
@@ -7,10 +7,7 @@ var resolve_cjs = require('./resolve.cjs');
7
7
 
8
8
  // src/createQuery.ts
9
9
  function createQuery(arg1, arg2) {
10
- const [explicitClient, options] = parseQueryArgs(
11
- arg1,
12
- arg2
13
- );
10
+ const [explicitClient, options] = parseQueryArgs(arg1, arg2);
14
11
  const { queryKey, enabled, name, ...restOptions } = options;
15
12
  if (!name) createBaseQuery_cjs.warnMissingName("createQuery");
16
13
  const reactiveRefetchInterval = resolve_cjs.resolveReactiveRefetchInterval(
@@ -90,7 +87,10 @@ function parseQueryArgs(arg1, arg2) {
90
87
  if (arg2 !== void 0) {
91
88
  return [arg1, arg2];
92
89
  }
93
- return [null, arg1];
90
+ return [
91
+ null,
92
+ arg1
93
+ ];
94
94
  }
95
95
 
96
96
  exports.createQuery = createQuery;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/createQuery.ts"],"names":["warnMissingName","resolveReactiveRefetchInterval","createBaseQuery","QueryObserver","createEvent","attach","enabled","sample"],"mappings":";;;;;;;;AAsBO,SAAS,WAAA,CAKd,MAGA,IAAA,EAC4B;AAC5B,EAAA,MAAM,CAAC,cAAA,EAAgB,OAAO,CAAA,GAAI,cAAA;AAAA,IAChC,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,EAAE,QAAA,EAAU,OAAA,EAAS,IAAA,EAAM,GAAG,aAAY,GAAI,OAAA;AAEpD,EAAA,IAAI,CAAC,IAAA,EAAMA,mCAAA,CAAgB,aAAa,CAAA;AAKxC,EAAA,MAAM,uBAAA,GAA0BC,0CAAA;AAAA,IAC7B,WAAA,CAA8C;AAAA,GACjD;AACA,EAAA,IAAI,uBAAA,EAAyB;AAC3B,IAAA,OAAQ,WAAA,CAA8C,eAAA;AAAA,EACxD;AAEA,EAAA,MAAM,IAAA,GAAOC,mCAAA;AAAA,IAMX,cAAA;AAAA,IACA,EAAE,QAAA,EAAU,OAAA,EAAS,IAAA,EAAM,uBAAA,EAAwB;AAAA,IACnD;AAAA,MACE,gBAAgB,CAAC,EAAA,EAAI,EAAE,QAAA,EAAU,GAAA,EAAK,SAAS,SAAA,EAAU;AAAA;AAAA;AAAA;AAAA,QAIvD,IAAIC,wBAA2C,EAAA,EAAI;AAAA,UACjD,GAAG,WAAA;AAAA,UACH,QAAA,EAAU,GAAA;AAAA,UACV,OAAA,EAAS;AAAA,SACH;AAAA;AAAA;AACZ,GACF;AAQA,EAAA,MAAM,WAAWC,oBAAA,EAAkB;AACnC,EAAA,MAAM,aAAaC,eAAA,CAAO;AAAA,IACxB,MAAA,EAAQ;AAAA,MACN,IAAI,IAAA,CAAK,YAAA;AAAA,MACT,KAAK,IAAA,CAAK,YAAA;AAAA,MACV,SAAS,IAAA,CAAK;AAAA,KAChB;AAAA,IACA,QAAQ,CAAC,EAAE,IAAI,GAAA,EAAK,OAAA,EAAAC,UAAQ,KAAM;AAChC,MAAA,IAAI,CAAC,EAAA,IAAM,CAACA,QAAAA,EAAS;AACrB,MAAA,OAAO,GAAG,UAAA,CAAW;AAAA,QACnB,GAAG,WAAA;AAAA,QACH,QAAA,EAAU;AAAA,OACJ,CAAA;AAAA,IACV;AAAA,GACD,CAAA;AACD,EAAAC,eAAA,CAAO,EAAE,KAAA,EAAO,QAAA,EAAU,MAAA,EAAQ,YAAY,CAAA;AAM9C,EAAA,MAAM,MAAA,GAAqC;AAAA,IACzC,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,aAAa,IAAA,CAAK,WAAA;AAAA,IAClB,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,oBAAoB,IAAA,CAAK,kBAAA;AAAA,IACzB,cAAc,IAAA,CAAK,YAAA;AAAA,IACnB,WAAW,IAAA,CAAK,SAAA;AAAA,IAIhB,cAAc,IAAA,CAAK,YAAA;AAAA,IACnB,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,QAAA;AAAA,IACA,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,WAAW,IAAA,CAAK;AAAA,GAClB;AAMA,EAAA,MAAA,CAAO,cAAA,CAAe,QAAQ,kBAAA,EAAoB;AAAA,IAChD,UAAA,EAAY,KAAA;AAAA,IACZ,OAAO,CAAC,EAAA,EAAiB,IAAA,KACvB,IAAIJ,wBAA2C,EAAA,EAAI;AAAA,MACjD,GAAG,WAAA;AAAA,MACH,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,SAAS,IAAA,CAAK;AAAA,KACR;AAAA,GACX,CAAA;AACD,EAAA,MAAA,CAAO,cAAA,CAAe,QAAQ,eAAA,EAAiB;AAAA,IAC7C,UAAA,EAAY,KAAA;AAAA,IACZ,OAAO,IAAA,CAAK;AAAA,GACb,CAAA;AACD,EAAA,MAAA,CAAO,cAAA,CAAe,QAAQ,WAAA,EAAa;AAAA,IACzC,UAAA,EAAY,KAAA;AAAA,IACZ,OAAO,IAAA,CAAK;AAAA,GACb,CAAA;AAED,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,cAAA,CACP,MAGA,IAAA,EACuE;AACvE,EAAA,IAAI,SAAS,MAAA,EAAW;AACtB,IAAA,OAAO,CAAC,MAAqB,IAAI,CAAA;AAAA,EACnC;AACA,EAAA,OAAO,CAAC,MAAM,IAAuD,CAAA;AACvE","file":"createQuery.cjs","sourcesContent":["import { attach, createEvent, sample } from 'effector'\nimport { QueryObserver } from '@tanstack/query-core'\nimport type { QueryClient } from '@tanstack/query-core'\nimport { createBaseQuery, warnMissingName } from './createBaseQuery'\nimport { resolveReactiveRefetchInterval } from './resolve'\nimport type { CreateQueryOptions, QueryResult } from './types'\n\nexport function createQuery<\n TQueryFnData = unknown,\n TError = Error,\n TData = TQueryFnData,\n>(\n options: CreateQueryOptions<TQueryFnData, TError, TData>,\n): QueryResult<TData, TError>\nexport function createQuery<\n TQueryFnData = unknown,\n TError = Error,\n TData = TQueryFnData,\n>(\n queryClient: QueryClient,\n options: CreateQueryOptions<TQueryFnData, TError, TData>,\n): QueryResult<TData, TError>\nexport function createQuery<\n TQueryFnData = unknown,\n TError = Error,\n TData = TQueryFnData,\n>(\n arg1:\n | QueryClient\n | CreateQueryOptions<TQueryFnData, TError, TData>,\n arg2?: CreateQueryOptions<TQueryFnData, TError, TData>,\n): QueryResult<TData, TError> {\n const [explicitClient, options] = parseQueryArgs<TQueryFnData, TError, TData>(\n arg1,\n arg2,\n )\n const { queryKey, enabled, name, ...restOptions } = options\n\n if (!name) warnMissingName('createQuery')\n\n // If `refetchInterval` is a Store, pull it out for reactive wiring in\n // createBaseQuery — otherwise leave it in restOptions for the observer\n // constructor (handles plain values and function forms unchanged).\n const reactiveRefetchInterval = resolveReactiveRefetchInterval(\n (restOptions as { refetchInterval?: unknown }).refetchInterval,\n )\n if (reactiveRefetchInterval) {\n delete (restOptions as { refetchInterval?: unknown }).refetchInterval\n }\n\n const base = createBaseQuery<\n TData,\n TError,\n ReturnType<QueryObserver<TQueryFnData, TError, TData>['getCurrentResult']>,\n QueryObserver<TQueryFnData, TError, TData>\n >(\n explicitClient,\n { queryKey, enabled, name, reactiveRefetchInterval },\n {\n createObserver: (qc, { queryKey: key, enabled: isEnabled }) =>\n // Cast: restOptions's `refetchInterval` may still type as\n // `Store | number | false | fn`; the Store form is deleted at runtime\n // above, but TS can't narrow that here.\n new QueryObserver<TQueryFnData, TError, TData>(qc, {\n ...restOptions,\n queryKey: key,\n enabled: isEnabled,\n } as any),\n },\n )\n\n // Prefetch event: drives `queryClient.fetchQuery` directly (no Observer)\n // and **awaits** the result, so `allSettled(query.prefetch, { scope })` on\n // the server returns only after the cache has the data. Unlike `mounted`,\n // which kicks off a background subscription and resolves immediately, this\n // is the right primitive for SSR / route loaders. The current resolved key\n // + enabled is read from the scope via attach — reactive keys work.\n const prefetch = createEvent<void>()\n const prefetchFx = attach({\n source: {\n qc: base.$queryClient,\n key: base.$resolvedKey,\n enabled: base.$enabled,\n },\n effect: ({ qc, key, enabled }) => {\n if (!qc || !enabled) return\n return qc.fetchQuery({\n ...restOptions,\n queryKey: key,\n } as any)\n },\n })\n sample({ clock: prefetch, target: prefetchFx })\n\n // Lazy `observer` field for backward compatibility — returns the\n // default-scope observer (non-fork). Tests and advanced consumers that read\n // `query.observer` after `query.mounted()` see the live observer. For\n // fork-aware consumers, use `query.$observer` via `useUnit`.\n const result: QueryResult<TData, TError> = {\n $data: base.$data,\n $error: base.$error,\n $status: base.$status,\n $isPending: base.$isPending,\n $isFetching: base.$isFetching,\n $isSuccess: base.$isSuccess,\n $isError: base.$isError,\n $isPlaceholderData: base.$isPlaceholderData,\n $fetchStatus: base.$fetchStatus,\n $observer: base.$observer as unknown as QueryResult<\n TData,\n TError\n >['$observer'],\n $queryClient: base.$queryClient,\n refresh: base.refresh,\n prefetch,\n mounted: base.mounted,\n unmounted: base.unmounted,\n }\n\n // Internal: used by useSuspenseQuery to construct a transient observer\n // when the suspense hook renders before mountFx has populated the scope's\n // $observer (mountFx runs from useEffect, which is skipped while\n // suspended). Not part of the public API; not in TS types.\n Object.defineProperty(result, '__createObserver', {\n enumerable: false,\n value: (qc: QueryClient, init: { queryKey: any; enabled: boolean }) =>\n new QueryObserver<TQueryFnData, TError, TData>(qc, {\n ...restOptions,\n queryKey: init.queryKey,\n enabled: init.enabled,\n } as any),\n })\n Object.defineProperty(result, '__resolvedKey', {\n enumerable: false,\n value: base.$resolvedKey,\n })\n Object.defineProperty(result, '__enabled', {\n enumerable: false,\n value: base.$enabled,\n })\n\n return result\n}\n\nfunction parseQueryArgs<TQueryFnData, TError, TData>(\n arg1:\n | QueryClient\n | CreateQueryOptions<TQueryFnData, TError, TData>,\n arg2?: CreateQueryOptions<TQueryFnData, TError, TData>,\n): [QueryClient | null, CreateQueryOptions<TQueryFnData, TError, TData>] {\n if (arg2 !== undefined) {\n return [arg1 as QueryClient, arg2]\n }\n return [null, arg1 as CreateQueryOptions<TQueryFnData, TError, TData>]\n}\n"]}
1
+ {"version":3,"sources":["../src/createQuery.ts"],"names":["warnMissingName","resolveReactiveRefetchInterval","createBaseQuery","QueryObserver","createEvent","attach","enabled","sample"],"mappings":";;;;;;;;AA4BO,SAAS,WAAA,CAMd,MAGA,IAAA,EAC4B;AAC5B,EAAA,MAAM,CAAC,cAAA,EAAgB,OAAO,CAAA,GAAI,cAAA,CAKhC,MAAM,IAAI,CAAA;AACZ,EAAA,MAAM,EAAE,QAAA,EAAU,OAAA,EAAS,IAAA,EAAM,GAAG,aAAY,GAAI,OAAA;AAEpD,EAAA,IAAI,CAAC,IAAA,EAAMA,mCAAA,CAAgB,aAAa,CAAA;AAKxC,EAAA,MAAM,uBAAA,GAA0BC,0CAAA;AAAA,IAC7B,WAAA,CAA8C;AAAA,GACjD;AACA,EAAA,IAAI,uBAAA,EAAyB;AAC3B,IAAA,OAAQ,WAAA,CAA8C,eAAA;AAAA,EACxD;AAEA,EAAA,MAAM,IAAA,GAAOC,mCAAA;AAAA,IAMX,cAAA;AAAA,IACA,EAAE,QAAA,EAAU,OAAA,EAAS,IAAA,EAAM,uBAAA,EAAwB;AAAA,IACnD;AAAA,MACE,gBAAgB,CAAC,EAAA,EAAI,EAAE,QAAA,EAAU,GAAA,EAAK,SAAS,SAAA,EAAU;AAAA;AAAA;AAAA;AAAA,QAIvD,IAAIC,wBAA2C,EAAA,EAAI;AAAA,UACjD,GAAG,WAAA;AAAA,UACH,QAAA,EAAU,GAAA;AAAA,UACV,OAAA,EAAS;AAAA,SACH;AAAA;AAAA;AACZ,GACF;AAQA,EAAA,MAAM,WAAWC,oBAAA,EAAkB;AACnC,EAAA,MAAM,aAAaC,eAAA,CAAO;AAAA,IACxB,MAAA,EAAQ;AAAA,MACN,IAAI,IAAA,CAAK,YAAA;AAAA,MACT,KAAK,IAAA,CAAK,YAAA;AAAA,MACV,SAAS,IAAA,CAAK;AAAA,KAChB;AAAA,IACA,QAAQ,CAAC,EAAE,IAAI,GAAA,EAAK,OAAA,EAAAC,UAAQ,KAAM;AAChC,MAAA,IAAI,CAAC,EAAA,IAAM,CAACA,QAAAA,EAAS;AACrB,MAAA,OAAO,GAAG,UAAA,CAAW;AAAA,QACnB,GAAG,WAAA;AAAA,QACH,QAAA,EAAU;AAAA,OACJ,CAAA;AAAA,IACV;AAAA,GACD,CAAA;AACD,EAAAC,eAAA,CAAO,EAAE,KAAA,EAAO,QAAA,EAAU,MAAA,EAAQ,YAAY,CAAA;AAM9C,EAAA,MAAM,MAAA,GAAqC;AAAA,IACzC,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,aAAa,IAAA,CAAK,WAAA;AAAA,IAClB,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,oBAAoB,IAAA,CAAK,kBAAA;AAAA,IACzB,cAAc,IAAA,CAAK,YAAA;AAAA,IACnB,WAAW,IAAA,CAAK,SAAA;AAAA,IAIhB,cAAc,IAAA,CAAK,YAAA;AAAA,IACnB,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,QAAA;AAAA,IACA,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,WAAW,IAAA,CAAK;AAAA,GAClB;AAMA,EAAA,MAAA,CAAO,cAAA,CAAe,QAAQ,kBAAA,EAAoB;AAAA,IAChD,UAAA,EAAY,KAAA;AAAA,IACZ,OAAO,CAAC,EAAA,EAAiB,IAAA,KACvB,IAAIJ,wBAA2C,EAAA,EAAI;AAAA,MACjD,GAAG,WAAA;AAAA,MACH,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,SAAS,IAAA,CAAK;AAAA,KACR;AAAA,GACX,CAAA;AACD,EAAA,MAAA,CAAO,cAAA,CAAe,QAAQ,eAAA,EAAiB;AAAA,IAC7C,UAAA,EAAY,KAAA;AAAA,IACZ,OAAO,IAAA,CAAK;AAAA,GACb,CAAA;AACD,EAAA,MAAA,CAAO,cAAA,CAAe,QAAQ,WAAA,EAAa;AAAA,IACzC,UAAA,EAAY,KAAA;AAAA,IACZ,OAAO,IAAA,CAAK;AAAA,GACb,CAAA;AAED,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,cAAA,CAMP,MAGA,IAAA,EAIA;AACA,EAAA,IAAI,SAAS,MAAA,EAAW;AACtB,IAAA,OAAO,CAAC,MAAqB,IAAI,CAAA;AAAA,EACnC;AACA,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA;AAAA,GACF;AACF","file":"createQuery.cjs","sourcesContent":["import { attach, createEvent, sample } from 'effector'\nimport { QueryObserver } from '@tanstack/query-core'\nimport type { QueryClient } from '@tanstack/query-core'\nimport { createBaseQuery, warnMissingName } from './createBaseQuery'\nimport { resolveReactiveRefetchInterval } from './resolve'\nimport type {\n CreateQueryOptions,\n EffectorQueryKey,\n QueryResult,\n} from './types'\n\nexport function createQuery<\n TQueryFnData = unknown,\n TError = Error,\n TData = TQueryFnData,\n const TQueryKey extends EffectorQueryKey = EffectorQueryKey,\n>(\n options: CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n): QueryResult<TData, TError>\nexport function createQuery<\n TQueryFnData = unknown,\n TError = Error,\n TData = TQueryFnData,\n const TQueryKey extends EffectorQueryKey = EffectorQueryKey,\n>(\n queryClient: QueryClient,\n options: CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n): QueryResult<TData, TError>\nexport function createQuery<\n TQueryFnData = unknown,\n TError = Error,\n TData = TQueryFnData,\n const TQueryKey extends EffectorQueryKey = EffectorQueryKey,\n>(\n arg1:\n | QueryClient\n | CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n arg2?: CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n): QueryResult<TData, TError> {\n const [explicitClient, options] = parseQueryArgs<\n TQueryFnData,\n TError,\n TData,\n TQueryKey\n >(arg1, arg2)\n const { queryKey, enabled, name, ...restOptions } = options\n\n if (!name) warnMissingName('createQuery')\n\n // If `refetchInterval` is a Store, pull it out for reactive wiring in\n // createBaseQuery — otherwise leave it in restOptions for the observer\n // constructor (handles plain values and function forms unchanged).\n const reactiveRefetchInterval = resolveReactiveRefetchInterval(\n (restOptions as { refetchInterval?: unknown }).refetchInterval,\n )\n if (reactiveRefetchInterval) {\n delete (restOptions as { refetchInterval?: unknown }).refetchInterval\n }\n\n const base = createBaseQuery<\n TData,\n TError,\n ReturnType<QueryObserver<TQueryFnData, TError, TData>['getCurrentResult']>,\n QueryObserver<TQueryFnData, TError, TData>\n >(\n explicitClient,\n { queryKey, enabled, name, reactiveRefetchInterval },\n {\n createObserver: (qc, { queryKey: key, enabled: isEnabled }) =>\n // Cast: restOptions's `refetchInterval` may still type as\n // `Store | number | false | fn`; the Store form is deleted at runtime\n // above, but TS can't narrow that here.\n new QueryObserver<TQueryFnData, TError, TData>(qc, {\n ...restOptions,\n queryKey: key,\n enabled: isEnabled,\n } as any),\n },\n )\n\n // Prefetch event: drives `queryClient.fetchQuery` directly (no Observer)\n // and **awaits** the result, so `allSettled(query.prefetch, { scope })` on\n // the server returns only after the cache has the data. Unlike `mounted`,\n // which kicks off a background subscription and resolves immediately, this\n // is the right primitive for SSR / route loaders. The current resolved key\n // + enabled is read from the scope via attach — reactive keys work.\n const prefetch = createEvent<void>()\n const prefetchFx = attach({\n source: {\n qc: base.$queryClient,\n key: base.$resolvedKey,\n enabled: base.$enabled,\n },\n effect: ({ qc, key, enabled }) => {\n if (!qc || !enabled) return\n return qc.fetchQuery({\n ...restOptions,\n queryKey: key,\n } as any)\n },\n })\n sample({ clock: prefetch, target: prefetchFx })\n\n // Lazy `observer` field for backward compatibility — returns the\n // default-scope observer (non-fork). Tests and advanced consumers that read\n // `query.observer` after `query.mounted()` see the live observer. For\n // fork-aware consumers, use `query.$observer` via `useUnit`.\n const result: QueryResult<TData, TError> = {\n $data: base.$data,\n $error: base.$error,\n $status: base.$status,\n $isPending: base.$isPending,\n $isFetching: base.$isFetching,\n $isSuccess: base.$isSuccess,\n $isError: base.$isError,\n $isPlaceholderData: base.$isPlaceholderData,\n $fetchStatus: base.$fetchStatus,\n $observer: base.$observer as unknown as QueryResult<\n TData,\n TError\n >['$observer'],\n $queryClient: base.$queryClient,\n refresh: base.refresh,\n prefetch,\n mounted: base.mounted,\n unmounted: base.unmounted,\n }\n\n // Internal: used by useSuspenseQuery to construct a transient observer\n // when the suspense hook renders before mountFx has populated the scope's\n // $observer (mountFx runs from useEffect, which is skipped while\n // suspended). Not part of the public API; not in TS types.\n Object.defineProperty(result, '__createObserver', {\n enumerable: false,\n value: (qc: QueryClient, init: { queryKey: any; enabled: boolean }) =>\n new QueryObserver<TQueryFnData, TError, TData>(qc, {\n ...restOptions,\n queryKey: init.queryKey,\n enabled: init.enabled,\n } as any),\n })\n Object.defineProperty(result, '__resolvedKey', {\n enumerable: false,\n value: base.$resolvedKey,\n })\n Object.defineProperty(result, '__enabled', {\n enumerable: false,\n value: base.$enabled,\n })\n\n return result\n}\n\nfunction parseQueryArgs<\n TQueryFnData,\n TError,\n TData,\n TQueryKey extends EffectorQueryKey,\n>(\n arg1:\n | QueryClient\n | CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n arg2?: CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n): [\n QueryClient | null,\n CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n] {\n if (arg2 !== undefined) {\n return [arg1 as QueryClient, arg2]\n }\n return [\n null,\n arg1 as CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n ]\n}\n"]}
@@ -1,8 +1,8 @@
1
1
  import { QueryClient } from '@tanstack/query-core';
2
- import { CreateQueryOptions, QueryResult } from './types.cjs';
2
+ import { EffectorQueryKey, CreateQueryOptions, QueryResult } from './types.cjs';
3
3
  import 'effector';
4
4
 
5
- declare function createQuery<TQueryFnData = unknown, TError = Error, TData = TQueryFnData>(options: CreateQueryOptions<TQueryFnData, TError, TData>): QueryResult<TData, TError>;
6
- declare function createQuery<TQueryFnData = unknown, TError = Error, TData = TQueryFnData>(queryClient: QueryClient, options: CreateQueryOptions<TQueryFnData, TError, TData>): QueryResult<TData, TError>;
5
+ declare function createQuery<TQueryFnData = unknown, TError = Error, TData = TQueryFnData, const TQueryKey extends EffectorQueryKey = EffectorQueryKey>(options: CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>): QueryResult<TData, TError>;
6
+ declare function createQuery<TQueryFnData = unknown, TError = Error, TData = TQueryFnData, const TQueryKey extends EffectorQueryKey = EffectorQueryKey>(queryClient: QueryClient, options: CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>): QueryResult<TData, TError>;
7
7
 
8
8
  export { createQuery };
@@ -1,8 +1,8 @@
1
1
  import { QueryClient } from '@tanstack/query-core';
2
- import { CreateQueryOptions, QueryResult } from './types.js';
2
+ import { EffectorQueryKey, CreateQueryOptions, QueryResult } from './types.js';
3
3
  import 'effector';
4
4
 
5
- declare function createQuery<TQueryFnData = unknown, TError = Error, TData = TQueryFnData>(options: CreateQueryOptions<TQueryFnData, TError, TData>): QueryResult<TData, TError>;
6
- declare function createQuery<TQueryFnData = unknown, TError = Error, TData = TQueryFnData>(queryClient: QueryClient, options: CreateQueryOptions<TQueryFnData, TError, TData>): QueryResult<TData, TError>;
5
+ declare function createQuery<TQueryFnData = unknown, TError = Error, TData = TQueryFnData, const TQueryKey extends EffectorQueryKey = EffectorQueryKey>(options: CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>): QueryResult<TData, TError>;
6
+ declare function createQuery<TQueryFnData = unknown, TError = Error, TData = TQueryFnData, const TQueryKey extends EffectorQueryKey = EffectorQueryKey>(queryClient: QueryClient, options: CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>): QueryResult<TData, TError>;
7
7
 
8
8
  export { createQuery };
@@ -5,10 +5,7 @@ import { resolveReactiveRefetchInterval } from './resolve.js';
5
5
 
6
6
  // src/createQuery.ts
7
7
  function createQuery(arg1, arg2) {
8
- const [explicitClient, options] = parseQueryArgs(
9
- arg1,
10
- arg2
11
- );
8
+ const [explicitClient, options] = parseQueryArgs(arg1, arg2);
12
9
  const { queryKey, enabled, name, ...restOptions } = options;
13
10
  if (!name) warnMissingName("createQuery");
14
11
  const reactiveRefetchInterval = resolveReactiveRefetchInterval(
@@ -88,7 +85,10 @@ function parseQueryArgs(arg1, arg2) {
88
85
  if (arg2 !== void 0) {
89
86
  return [arg1, arg2];
90
87
  }
91
- return [null, arg1];
88
+ return [
89
+ null,
90
+ arg1
91
+ ];
92
92
  }
93
93
 
94
94
  export { createQuery };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/createQuery.ts"],"names":["enabled"],"mappings":"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","file":"createQuery.js","sourcesContent":["import { attach, createEvent, sample } from 'effector'\nimport { QueryObserver } from '@tanstack/query-core'\nimport type { QueryClient } from '@tanstack/query-core'\nimport { createBaseQuery, warnMissingName } from './createBaseQuery'\nimport { resolveReactiveRefetchInterval } from './resolve'\nimport type { CreateQueryOptions, QueryResult } from './types'\n\nexport function createQuery<\n TQueryFnData = unknown,\n TError = Error,\n TData = TQueryFnData,\n>(\n options: CreateQueryOptions<TQueryFnData, TError, TData>,\n): QueryResult<TData, TError>\nexport function createQuery<\n TQueryFnData = unknown,\n TError = Error,\n TData = TQueryFnData,\n>(\n queryClient: QueryClient,\n options: CreateQueryOptions<TQueryFnData, TError, TData>,\n): QueryResult<TData, TError>\nexport function createQuery<\n TQueryFnData = unknown,\n TError = Error,\n TData = TQueryFnData,\n>(\n arg1:\n | QueryClient\n | CreateQueryOptions<TQueryFnData, TError, TData>,\n arg2?: CreateQueryOptions<TQueryFnData, TError, TData>,\n): QueryResult<TData, TError> {\n const [explicitClient, options] = parseQueryArgs<TQueryFnData, TError, TData>(\n arg1,\n arg2,\n )\n const { queryKey, enabled, name, ...restOptions } = options\n\n if (!name) warnMissingName('createQuery')\n\n // If `refetchInterval` is a Store, pull it out for reactive wiring in\n // createBaseQuery — otherwise leave it in restOptions for the observer\n // constructor (handles plain values and function forms unchanged).\n const reactiveRefetchInterval = resolveReactiveRefetchInterval(\n (restOptions as { refetchInterval?: unknown }).refetchInterval,\n )\n if (reactiveRefetchInterval) {\n delete (restOptions as { refetchInterval?: unknown }).refetchInterval\n }\n\n const base = createBaseQuery<\n TData,\n TError,\n ReturnType<QueryObserver<TQueryFnData, TError, TData>['getCurrentResult']>,\n QueryObserver<TQueryFnData, TError, TData>\n >(\n explicitClient,\n { queryKey, enabled, name, reactiveRefetchInterval },\n {\n createObserver: (qc, { queryKey: key, enabled: isEnabled }) =>\n // Cast: restOptions's `refetchInterval` may still type as\n // `Store | number | false | fn`; the Store form is deleted at runtime\n // above, but TS can't narrow that here.\n new QueryObserver<TQueryFnData, TError, TData>(qc, {\n ...restOptions,\n queryKey: key,\n enabled: isEnabled,\n } as any),\n },\n )\n\n // Prefetch event: drives `queryClient.fetchQuery` directly (no Observer)\n // and **awaits** the result, so `allSettled(query.prefetch, { scope })` on\n // the server returns only after the cache has the data. Unlike `mounted`,\n // which kicks off a background subscription and resolves immediately, this\n // is the right primitive for SSR / route loaders. The current resolved key\n // + enabled is read from the scope via attach — reactive keys work.\n const prefetch = createEvent<void>()\n const prefetchFx = attach({\n source: {\n qc: base.$queryClient,\n key: base.$resolvedKey,\n enabled: base.$enabled,\n },\n effect: ({ qc, key, enabled }) => {\n if (!qc || !enabled) return\n return qc.fetchQuery({\n ...restOptions,\n queryKey: key,\n } as any)\n },\n })\n sample({ clock: prefetch, target: prefetchFx })\n\n // Lazy `observer` field for backward compatibility — returns the\n // default-scope observer (non-fork). Tests and advanced consumers that read\n // `query.observer` after `query.mounted()` see the live observer. For\n // fork-aware consumers, use `query.$observer` via `useUnit`.\n const result: QueryResult<TData, TError> = {\n $data: base.$data,\n $error: base.$error,\n $status: base.$status,\n $isPending: base.$isPending,\n $isFetching: base.$isFetching,\n $isSuccess: base.$isSuccess,\n $isError: base.$isError,\n $isPlaceholderData: base.$isPlaceholderData,\n $fetchStatus: base.$fetchStatus,\n $observer: base.$observer as unknown as QueryResult<\n TData,\n TError\n >['$observer'],\n $queryClient: base.$queryClient,\n refresh: base.refresh,\n prefetch,\n mounted: base.mounted,\n unmounted: base.unmounted,\n }\n\n // Internal: used by useSuspenseQuery to construct a transient observer\n // when the suspense hook renders before mountFx has populated the scope's\n // $observer (mountFx runs from useEffect, which is skipped while\n // suspended). Not part of the public API; not in TS types.\n Object.defineProperty(result, '__createObserver', {\n enumerable: false,\n value: (qc: QueryClient, init: { queryKey: any; enabled: boolean }) =>\n new QueryObserver<TQueryFnData, TError, TData>(qc, {\n ...restOptions,\n queryKey: init.queryKey,\n enabled: init.enabled,\n } as any),\n })\n Object.defineProperty(result, '__resolvedKey', {\n enumerable: false,\n value: base.$resolvedKey,\n })\n Object.defineProperty(result, '__enabled', {\n enumerable: false,\n value: base.$enabled,\n })\n\n return result\n}\n\nfunction parseQueryArgs<TQueryFnData, TError, TData>(\n arg1:\n | QueryClient\n | CreateQueryOptions<TQueryFnData, TError, TData>,\n arg2?: CreateQueryOptions<TQueryFnData, TError, TData>,\n): [QueryClient | null, CreateQueryOptions<TQueryFnData, TError, TData>] {\n if (arg2 !== undefined) {\n return [arg1 as QueryClient, arg2]\n }\n return [null, arg1 as CreateQueryOptions<TQueryFnData, TError, TData>]\n}\n"]}
1
+ {"version":3,"sources":["../src/createQuery.ts"],"names":["enabled"],"mappings":"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","file":"createQuery.js","sourcesContent":["import { attach, createEvent, sample } from 'effector'\nimport { QueryObserver } from '@tanstack/query-core'\nimport type { QueryClient } from '@tanstack/query-core'\nimport { createBaseQuery, warnMissingName } from './createBaseQuery'\nimport { resolveReactiveRefetchInterval } from './resolve'\nimport type {\n CreateQueryOptions,\n EffectorQueryKey,\n QueryResult,\n} from './types'\n\nexport function createQuery<\n TQueryFnData = unknown,\n TError = Error,\n TData = TQueryFnData,\n const TQueryKey extends EffectorQueryKey = EffectorQueryKey,\n>(\n options: CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n): QueryResult<TData, TError>\nexport function createQuery<\n TQueryFnData = unknown,\n TError = Error,\n TData = TQueryFnData,\n const TQueryKey extends EffectorQueryKey = EffectorQueryKey,\n>(\n queryClient: QueryClient,\n options: CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n): QueryResult<TData, TError>\nexport function createQuery<\n TQueryFnData = unknown,\n TError = Error,\n TData = TQueryFnData,\n const TQueryKey extends EffectorQueryKey = EffectorQueryKey,\n>(\n arg1:\n | QueryClient\n | CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n arg2?: CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n): QueryResult<TData, TError> {\n const [explicitClient, options] = parseQueryArgs<\n TQueryFnData,\n TError,\n TData,\n TQueryKey\n >(arg1, arg2)\n const { queryKey, enabled, name, ...restOptions } = options\n\n if (!name) warnMissingName('createQuery')\n\n // If `refetchInterval` is a Store, pull it out for reactive wiring in\n // createBaseQuery — otherwise leave it in restOptions for the observer\n // constructor (handles plain values and function forms unchanged).\n const reactiveRefetchInterval = resolveReactiveRefetchInterval(\n (restOptions as { refetchInterval?: unknown }).refetchInterval,\n )\n if (reactiveRefetchInterval) {\n delete (restOptions as { refetchInterval?: unknown }).refetchInterval\n }\n\n const base = createBaseQuery<\n TData,\n TError,\n ReturnType<QueryObserver<TQueryFnData, TError, TData>['getCurrentResult']>,\n QueryObserver<TQueryFnData, TError, TData>\n >(\n explicitClient,\n { queryKey, enabled, name, reactiveRefetchInterval },\n {\n createObserver: (qc, { queryKey: key, enabled: isEnabled }) =>\n // Cast: restOptions's `refetchInterval` may still type as\n // `Store | number | false | fn`; the Store form is deleted at runtime\n // above, but TS can't narrow that here.\n new QueryObserver<TQueryFnData, TError, TData>(qc, {\n ...restOptions,\n queryKey: key,\n enabled: isEnabled,\n } as any),\n },\n )\n\n // Prefetch event: drives `queryClient.fetchQuery` directly (no Observer)\n // and **awaits** the result, so `allSettled(query.prefetch, { scope })` on\n // the server returns only after the cache has the data. Unlike `mounted`,\n // which kicks off a background subscription and resolves immediately, this\n // is the right primitive for SSR / route loaders. The current resolved key\n // + enabled is read from the scope via attach — reactive keys work.\n const prefetch = createEvent<void>()\n const prefetchFx = attach({\n source: {\n qc: base.$queryClient,\n key: base.$resolvedKey,\n enabled: base.$enabled,\n },\n effect: ({ qc, key, enabled }) => {\n if (!qc || !enabled) return\n return qc.fetchQuery({\n ...restOptions,\n queryKey: key,\n } as any)\n },\n })\n sample({ clock: prefetch, target: prefetchFx })\n\n // Lazy `observer` field for backward compatibility — returns the\n // default-scope observer (non-fork). Tests and advanced consumers that read\n // `query.observer` after `query.mounted()` see the live observer. For\n // fork-aware consumers, use `query.$observer` via `useUnit`.\n const result: QueryResult<TData, TError> = {\n $data: base.$data,\n $error: base.$error,\n $status: base.$status,\n $isPending: base.$isPending,\n $isFetching: base.$isFetching,\n $isSuccess: base.$isSuccess,\n $isError: base.$isError,\n $isPlaceholderData: base.$isPlaceholderData,\n $fetchStatus: base.$fetchStatus,\n $observer: base.$observer as unknown as QueryResult<\n TData,\n TError\n >['$observer'],\n $queryClient: base.$queryClient,\n refresh: base.refresh,\n prefetch,\n mounted: base.mounted,\n unmounted: base.unmounted,\n }\n\n // Internal: used by useSuspenseQuery to construct a transient observer\n // when the suspense hook renders before mountFx has populated the scope's\n // $observer (mountFx runs from useEffect, which is skipped while\n // suspended). Not part of the public API; not in TS types.\n Object.defineProperty(result, '__createObserver', {\n enumerable: false,\n value: (qc: QueryClient, init: { queryKey: any; enabled: boolean }) =>\n new QueryObserver<TQueryFnData, TError, TData>(qc, {\n ...restOptions,\n queryKey: init.queryKey,\n enabled: init.enabled,\n } as any),\n })\n Object.defineProperty(result, '__resolvedKey', {\n enumerable: false,\n value: base.$resolvedKey,\n })\n Object.defineProperty(result, '__enabled', {\n enumerable: false,\n value: base.$enabled,\n })\n\n return result\n}\n\nfunction parseQueryArgs<\n TQueryFnData,\n TError,\n TData,\n TQueryKey extends EffectorQueryKey,\n>(\n arg1:\n | QueryClient\n | CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n arg2?: CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n): [\n QueryClient | null,\n CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n] {\n if (arg2 !== undefined) {\n return [arg1 as QueryClient, arg2]\n }\n return [\n null,\n arg1 as CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n ]\n}\n"]}
package/dist/types.d.cts CHANGED
@@ -11,8 +11,32 @@ type StoreOrValue<T> = Store<T> | T;
11
11
  * queryKey: ['user', $userId, 'details']
12
12
  */
13
13
  type EffectorQueryKey = ReadonlyArray<StoreOrValue<string | number | bigint | boolean | null | undefined | object>>;
14
- interface CreateQueryOptions<TQueryFnData = unknown, TError = Error, TData = TQueryFnData> extends Omit<QueryObserverOptions<TQueryFnData, TError, TData>, 'queryKey' | 'enabled' | 'refetchInterval'> {
15
- queryKey: EffectorQueryKey;
14
+ /**
15
+ * Resolves a single `EffectorQueryKey` element to its runtime value type:
16
+ * `Store<T>` → `T`, everything else is left as-is. Used by `ResolvedQueryKey`
17
+ * so `queryFn`'s context can present `queryKey` with stores already unwrapped.
18
+ */
19
+ type ResolveQueryKeyElement<T> = T extends Store<infer U> ? U : T;
20
+ /**
21
+ * Tuple-aware mapping that walks an `EffectorQueryKey` and replaces each
22
+ * `Store<T>` with `T`, preserving tuple shape (length, readonly-ness, element
23
+ * positions). Drives the `TQueryKey` generic of `CreateQueryOptions` so the
24
+ * `queryFn({ queryKey })` parameter is typed with the resolved values:
25
+ *
26
+ * ```ts
27
+ * const $name = createStore<string>('pikachu')
28
+ * createQuery({
29
+ * queryKey: ['pokemon', $name],
30
+ * queryFn: ({ queryKey }) => fetchByName(queryKey[1]),
31
+ * // ^ string — no cast needed
32
+ * })
33
+ * ```
34
+ */
35
+ type ResolvedQueryKey<T extends ReadonlyArray<unknown>> = {
36
+ readonly [K in keyof T]: ResolveQueryKeyElement<T[K]>;
37
+ };
38
+ interface CreateQueryOptions<TQueryFnData = unknown, TError = Error, TData = TQueryFnData, TQueryKey extends EffectorQueryKey = EffectorQueryKey> extends Omit<QueryObserverOptions<TQueryFnData, TError, TData, TQueryFnData, ResolvedQueryKey<TQueryKey>>, 'queryKey' | 'enabled' | 'refetchInterval'> {
39
+ queryKey: TQueryKey;
16
40
  enabled?: StoreOrValue<boolean>;
17
41
  /**
18
42
  * Polling interval in milliseconds, `false` to disable, or a Store for
@@ -21,7 +45,7 @@ interface CreateQueryOptions<TQueryFnData = unknown, TError = Error, TData = TQu
21
45
  * `setOptions` on every store change. The function form (`(query) => …`)
22
46
  * from TanStack Query is also still supported.
23
47
  */
24
- refetchInterval?: QueryObserverOptions<TQueryFnData, TError, TData>['refetchInterval'] | Store<number | false | undefined>;
48
+ refetchInterval?: QueryObserverOptions<TQueryFnData, TError, TData, TQueryFnData, ResolvedQueryKey<TQueryKey>>['refetchInterval'] | Store<number | false | undefined>;
25
49
  /**
26
50
  * Stable name used to derive SIDs for the internal effector stores so that
27
51
  * `serialize(scope)` / `fork({ values })` round-trip works for SSR. Without
@@ -95,11 +119,11 @@ interface QueryResult<TData, TError = Error> {
95
119
  */
96
120
  $queryClient: Store<QueryClient | null>;
97
121
  }
98
- interface CreateInfiniteQueryOptions<TQueryFnData = unknown, TError = Error, TPageParam = unknown, TData = InfiniteData<TQueryFnData, TPageParam>> extends Omit<InfiniteQueryObserverOptions<TQueryFnData, TError, TData, ReadonlyArray<unknown>, TPageParam>, 'queryKey' | 'enabled' | 'refetchInterval'> {
99
- queryKey: EffectorQueryKey;
122
+ interface CreateInfiniteQueryOptions<TQueryFnData = unknown, TError = Error, TPageParam = unknown, TData = InfiniteData<TQueryFnData, TPageParam>, TQueryKey extends EffectorQueryKey = EffectorQueryKey> extends Omit<InfiniteQueryObserverOptions<TQueryFnData, TError, TData, ResolvedQueryKey<TQueryKey>, TPageParam>, 'queryKey' | 'enabled' | 'refetchInterval'> {
123
+ queryKey: TQueryKey;
100
124
  enabled?: StoreOrValue<boolean>;
101
125
  /** See {@link CreateQueryOptions.refetchInterval}. */
102
- refetchInterval?: InfiniteQueryObserverOptions<TQueryFnData, TError, TData, ReadonlyArray<unknown>, TPageParam>['refetchInterval'] | Store<number | false | undefined>;
126
+ refetchInterval?: InfiniteQueryObserverOptions<TQueryFnData, TError, TData, ResolvedQueryKey<TQueryKey>, TPageParam>['refetchInterval'] | Store<number | false | undefined>;
103
127
  /** See {@link CreateQueryOptions.name}. */
104
128
  name?: string;
105
129
  }
@@ -206,4 +230,4 @@ interface MutationResult<TData = unknown, TError = Error, TVariables = void> {
206
230
  };
207
231
  }
208
232
 
209
- export type { CreateInfiniteQueryOptions, CreateMutationOptions, CreateQueryOptions, EffectorQueryKey, InfiniteQueryResult, MutationResult, MutationStatus, QueryResult, StoreOrValue };
233
+ export type { CreateInfiniteQueryOptions, CreateMutationOptions, CreateQueryOptions, EffectorQueryKey, InfiniteQueryResult, MutationResult, MutationStatus, QueryResult, ResolveQueryKeyElement, ResolvedQueryKey, StoreOrValue };
package/dist/types.d.ts CHANGED
@@ -11,8 +11,32 @@ type StoreOrValue<T> = Store<T> | T;
11
11
  * queryKey: ['user', $userId, 'details']
12
12
  */
13
13
  type EffectorQueryKey = ReadonlyArray<StoreOrValue<string | number | bigint | boolean | null | undefined | object>>;
14
- interface CreateQueryOptions<TQueryFnData = unknown, TError = Error, TData = TQueryFnData> extends Omit<QueryObserverOptions<TQueryFnData, TError, TData>, 'queryKey' | 'enabled' | 'refetchInterval'> {
15
- queryKey: EffectorQueryKey;
14
+ /**
15
+ * Resolves a single `EffectorQueryKey` element to its runtime value type:
16
+ * `Store<T>` → `T`, everything else is left as-is. Used by `ResolvedQueryKey`
17
+ * so `queryFn`'s context can present `queryKey` with stores already unwrapped.
18
+ */
19
+ type ResolveQueryKeyElement<T> = T extends Store<infer U> ? U : T;
20
+ /**
21
+ * Tuple-aware mapping that walks an `EffectorQueryKey` and replaces each
22
+ * `Store<T>` with `T`, preserving tuple shape (length, readonly-ness, element
23
+ * positions). Drives the `TQueryKey` generic of `CreateQueryOptions` so the
24
+ * `queryFn({ queryKey })` parameter is typed with the resolved values:
25
+ *
26
+ * ```ts
27
+ * const $name = createStore<string>('pikachu')
28
+ * createQuery({
29
+ * queryKey: ['pokemon', $name],
30
+ * queryFn: ({ queryKey }) => fetchByName(queryKey[1]),
31
+ * // ^ string — no cast needed
32
+ * })
33
+ * ```
34
+ */
35
+ type ResolvedQueryKey<T extends ReadonlyArray<unknown>> = {
36
+ readonly [K in keyof T]: ResolveQueryKeyElement<T[K]>;
37
+ };
38
+ interface CreateQueryOptions<TQueryFnData = unknown, TError = Error, TData = TQueryFnData, TQueryKey extends EffectorQueryKey = EffectorQueryKey> extends Omit<QueryObserverOptions<TQueryFnData, TError, TData, TQueryFnData, ResolvedQueryKey<TQueryKey>>, 'queryKey' | 'enabled' | 'refetchInterval'> {
39
+ queryKey: TQueryKey;
16
40
  enabled?: StoreOrValue<boolean>;
17
41
  /**
18
42
  * Polling interval in milliseconds, `false` to disable, or a Store for
@@ -21,7 +45,7 @@ interface CreateQueryOptions<TQueryFnData = unknown, TError = Error, TData = TQu
21
45
  * `setOptions` on every store change. The function form (`(query) => …`)
22
46
  * from TanStack Query is also still supported.
23
47
  */
24
- refetchInterval?: QueryObserverOptions<TQueryFnData, TError, TData>['refetchInterval'] | Store<number | false | undefined>;
48
+ refetchInterval?: QueryObserverOptions<TQueryFnData, TError, TData, TQueryFnData, ResolvedQueryKey<TQueryKey>>['refetchInterval'] | Store<number | false | undefined>;
25
49
  /**
26
50
  * Stable name used to derive SIDs for the internal effector stores so that
27
51
  * `serialize(scope)` / `fork({ values })` round-trip works for SSR. Without
@@ -95,11 +119,11 @@ interface QueryResult<TData, TError = Error> {
95
119
  */
96
120
  $queryClient: Store<QueryClient | null>;
97
121
  }
98
- interface CreateInfiniteQueryOptions<TQueryFnData = unknown, TError = Error, TPageParam = unknown, TData = InfiniteData<TQueryFnData, TPageParam>> extends Omit<InfiniteQueryObserverOptions<TQueryFnData, TError, TData, ReadonlyArray<unknown>, TPageParam>, 'queryKey' | 'enabled' | 'refetchInterval'> {
99
- queryKey: EffectorQueryKey;
122
+ interface CreateInfiniteQueryOptions<TQueryFnData = unknown, TError = Error, TPageParam = unknown, TData = InfiniteData<TQueryFnData, TPageParam>, TQueryKey extends EffectorQueryKey = EffectorQueryKey> extends Omit<InfiniteQueryObserverOptions<TQueryFnData, TError, TData, ResolvedQueryKey<TQueryKey>, TPageParam>, 'queryKey' | 'enabled' | 'refetchInterval'> {
123
+ queryKey: TQueryKey;
100
124
  enabled?: StoreOrValue<boolean>;
101
125
  /** See {@link CreateQueryOptions.refetchInterval}. */
102
- refetchInterval?: InfiniteQueryObserverOptions<TQueryFnData, TError, TData, ReadonlyArray<unknown>, TPageParam>['refetchInterval'] | Store<number | false | undefined>;
126
+ refetchInterval?: InfiniteQueryObserverOptions<TQueryFnData, TError, TData, ResolvedQueryKey<TQueryKey>, TPageParam>['refetchInterval'] | Store<number | false | undefined>;
103
127
  /** See {@link CreateQueryOptions.name}. */
104
128
  name?: string;
105
129
  }
@@ -206,4 +230,4 @@ interface MutationResult<TData = unknown, TError = Error, TVariables = void> {
206
230
  };
207
231
  }
208
232
 
209
- export type { CreateInfiniteQueryOptions, CreateMutationOptions, CreateQueryOptions, EffectorQueryKey, InfiniteQueryResult, MutationResult, MutationStatus, QueryResult, StoreOrValue };
233
+ export type { CreateInfiniteQueryOptions, CreateMutationOptions, CreateQueryOptions, EffectorQueryKey, InfiniteQueryResult, MutationResult, MutationStatus, QueryResult, ResolveQueryKeyElement, ResolvedQueryKey, StoreOrValue };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effector-tanstack-query/core",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Effector bindings for TanStack Query — core factories (createQuery, createMutation, createInfiniteQuery)",
5
5
  "license": "MIT",
6
6
  "author": "Ilya Agarkov <ilya.al.ag@gmail.com>",
@@ -44,7 +44,7 @@
44
44
  ],
45
45
  "sideEffects": false,
46
46
  "dependencies": {
47
- "@tanstack/query-core": "^5.0.0"
47
+ "@tanstack/query-core": "^5.100.10"
48
48
  },
49
49
  "peerDependencies": {
50
50
  "effector": ">=23.0.0"
@@ -9,6 +9,7 @@ import { createBaseQuery, sidConfig, warnMissingName } from './createBaseQuery'
9
9
  import { resolveReactiveRefetchInterval } from './resolve'
10
10
  import type {
11
11
  CreateInfiniteQueryOptions,
12
+ EffectorQueryKey,
12
13
  InfiniteQueryResult,
13
14
  } from './types'
14
15
 
@@ -29,34 +30,62 @@ export function createInfiniteQuery<
29
30
  TError = Error,
30
31
  TPageParam = unknown,
31
32
  TData = InfiniteData<TQueryFnData, TPageParam>,
33
+ const TQueryKey extends EffectorQueryKey = EffectorQueryKey,
32
34
  >(
33
- options: CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData>,
35
+ options: CreateInfiniteQueryOptions<
36
+ TQueryFnData,
37
+ TError,
38
+ TPageParam,
39
+ TData,
40
+ TQueryKey
41
+ >,
34
42
  ): InfiniteQueryResult<TData, TError, TPageParam>
35
43
  export function createInfiniteQuery<
36
44
  TQueryFnData = unknown,
37
45
  TError = Error,
38
46
  TPageParam = unknown,
39
47
  TData = InfiniteData<TQueryFnData, TPageParam>,
48
+ const TQueryKey extends EffectorQueryKey = EffectorQueryKey,
40
49
  >(
41
50
  queryClient: QueryClient,
42
- options: CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData>,
51
+ options: CreateInfiniteQueryOptions<
52
+ TQueryFnData,
53
+ TError,
54
+ TPageParam,
55
+ TData,
56
+ TQueryKey
57
+ >,
43
58
  ): InfiniteQueryResult<TData, TError, TPageParam>
44
59
  export function createInfiniteQuery<
45
60
  TQueryFnData = unknown,
46
61
  TError = Error,
47
62
  TPageParam = unknown,
48
63
  TData = InfiniteData<TQueryFnData, TPageParam>,
64
+ const TQueryKey extends EffectorQueryKey = EffectorQueryKey,
49
65
  >(
50
66
  arg1:
51
67
  | QueryClient
52
- | CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData>,
53
- arg2?: CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData>,
68
+ | CreateInfiniteQueryOptions<
69
+ TQueryFnData,
70
+ TError,
71
+ TPageParam,
72
+ TData,
73
+ TQueryKey
74
+ >,
75
+ arg2?: CreateInfiniteQueryOptions<
76
+ TQueryFnData,
77
+ TError,
78
+ TPageParam,
79
+ TData,
80
+ TQueryKey
81
+ >,
54
82
  ): InfiniteQueryResult<TData, TError, TPageParam> {
55
83
  const [explicitClient, options] = parseInfiniteArgs<
56
84
  TQueryFnData,
57
85
  TError,
58
86
  TPageParam,
59
- TData
87
+ TData,
88
+ TQueryKey
60
89
  >(arg1, arg2)
61
90
  const { queryKey, enabled, name, ...restOptions } = options
62
91
 
@@ -272,20 +301,50 @@ export function createInfiniteQuery<
272
301
  return result
273
302
  }
274
303
 
275
- function parseInfiniteArgs<TQueryFnData, TError, TPageParam, TData>(
304
+ function parseInfiniteArgs<
305
+ TQueryFnData,
306
+ TError,
307
+ TPageParam,
308
+ TData,
309
+ TQueryKey extends EffectorQueryKey,
310
+ >(
276
311
  arg1:
277
312
  | QueryClient
278
- | CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData>,
279
- arg2?: CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData>,
313
+ | CreateInfiniteQueryOptions<
314
+ TQueryFnData,
315
+ TError,
316
+ TPageParam,
317
+ TData,
318
+ TQueryKey
319
+ >,
320
+ arg2?: CreateInfiniteQueryOptions<
321
+ TQueryFnData,
322
+ TError,
323
+ TPageParam,
324
+ TData,
325
+ TQueryKey
326
+ >,
280
327
  ): [
281
328
  QueryClient | null,
282
- CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData>,
329
+ CreateInfiniteQueryOptions<
330
+ TQueryFnData,
331
+ TError,
332
+ TPageParam,
333
+ TData,
334
+ TQueryKey
335
+ >,
283
336
  ] {
284
337
  if (arg2 !== undefined) {
285
338
  return [arg1 as QueryClient, arg2]
286
339
  }
287
340
  return [
288
341
  null,
289
- arg1 as CreateInfiniteQueryOptions<TQueryFnData, TError, TPageParam, TData>,
342
+ arg1 as CreateInfiniteQueryOptions<
343
+ TQueryFnData,
344
+ TError,
345
+ TPageParam,
346
+ TData,
347
+ TQueryKey
348
+ >,
290
349
  ]
291
350
  }
@@ -3,37 +3,46 @@ import { QueryObserver } from '@tanstack/query-core'
3
3
  import type { QueryClient } from '@tanstack/query-core'
4
4
  import { createBaseQuery, warnMissingName } from './createBaseQuery'
5
5
  import { resolveReactiveRefetchInterval } from './resolve'
6
- import type { CreateQueryOptions, QueryResult } from './types'
6
+ import type {
7
+ CreateQueryOptions,
8
+ EffectorQueryKey,
9
+ QueryResult,
10
+ } from './types'
7
11
 
8
12
  export function createQuery<
9
13
  TQueryFnData = unknown,
10
14
  TError = Error,
11
15
  TData = TQueryFnData,
16
+ const TQueryKey extends EffectorQueryKey = EffectorQueryKey,
12
17
  >(
13
- options: CreateQueryOptions<TQueryFnData, TError, TData>,
18
+ options: CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
14
19
  ): QueryResult<TData, TError>
15
20
  export function createQuery<
16
21
  TQueryFnData = unknown,
17
22
  TError = Error,
18
23
  TData = TQueryFnData,
24
+ const TQueryKey extends EffectorQueryKey = EffectorQueryKey,
19
25
  >(
20
26
  queryClient: QueryClient,
21
- options: CreateQueryOptions<TQueryFnData, TError, TData>,
27
+ options: CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
22
28
  ): QueryResult<TData, TError>
23
29
  export function createQuery<
24
30
  TQueryFnData = unknown,
25
31
  TError = Error,
26
32
  TData = TQueryFnData,
33
+ const TQueryKey extends EffectorQueryKey = EffectorQueryKey,
27
34
  >(
28
35
  arg1:
29
36
  | QueryClient
30
- | CreateQueryOptions<TQueryFnData, TError, TData>,
31
- arg2?: CreateQueryOptions<TQueryFnData, TError, TData>,
37
+ | CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
38
+ arg2?: CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
32
39
  ): QueryResult<TData, TError> {
33
- const [explicitClient, options] = parseQueryArgs<TQueryFnData, TError, TData>(
34
- arg1,
35
- arg2,
36
- )
40
+ const [explicitClient, options] = parseQueryArgs<
41
+ TQueryFnData,
42
+ TError,
43
+ TData,
44
+ TQueryKey
45
+ >(arg1, arg2)
37
46
  const { queryKey, enabled, name, ...restOptions } = options
38
47
 
39
48
  if (!name) warnMissingName('createQuery')
@@ -142,14 +151,25 @@ export function createQuery<
142
151
  return result
143
152
  }
144
153
 
145
- function parseQueryArgs<TQueryFnData, TError, TData>(
154
+ function parseQueryArgs<
155
+ TQueryFnData,
156
+ TError,
157
+ TData,
158
+ TQueryKey extends EffectorQueryKey,
159
+ >(
146
160
  arg1:
147
161
  | QueryClient
148
- | CreateQueryOptions<TQueryFnData, TError, TData>,
149
- arg2?: CreateQueryOptions<TQueryFnData, TError, TData>,
150
- ): [QueryClient | null, CreateQueryOptions<TQueryFnData, TError, TData>] {
162
+ | CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
163
+ arg2?: CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
164
+ ): [
165
+ QueryClient | null,
166
+ CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
167
+ ] {
151
168
  if (arg2 !== undefined) {
152
169
  return [arg1 as QueryClient, arg2]
153
170
  }
154
- return [null, arg1 as CreateQueryOptions<TQueryFnData, TError, TData>]
171
+ return [
172
+ null,
173
+ arg1 as CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
174
+ ]
155
175
  }
package/src/types.ts CHANGED
@@ -28,15 +28,48 @@ export type EffectorQueryKey = ReadonlyArray<
28
28
  StoreOrValue<string | number | bigint | boolean | null | undefined | object>
29
29
  >
30
30
 
31
+ /**
32
+ * Resolves a single `EffectorQueryKey` element to its runtime value type:
33
+ * `Store<T>` → `T`, everything else is left as-is. Used by `ResolvedQueryKey`
34
+ * so `queryFn`'s context can present `queryKey` with stores already unwrapped.
35
+ */
36
+ export type ResolveQueryKeyElement<T> = T extends Store<infer U> ? U : T
37
+
38
+ /**
39
+ * Tuple-aware mapping that walks an `EffectorQueryKey` and replaces each
40
+ * `Store<T>` with `T`, preserving tuple shape (length, readonly-ness, element
41
+ * positions). Drives the `TQueryKey` generic of `CreateQueryOptions` so the
42
+ * `queryFn({ queryKey })` parameter is typed with the resolved values:
43
+ *
44
+ * ```ts
45
+ * const $name = createStore<string>('pikachu')
46
+ * createQuery({
47
+ * queryKey: ['pokemon', $name],
48
+ * queryFn: ({ queryKey }) => fetchByName(queryKey[1]),
49
+ * // ^ string — no cast needed
50
+ * })
51
+ * ```
52
+ */
53
+ export type ResolvedQueryKey<T extends ReadonlyArray<unknown>> = {
54
+ readonly [K in keyof T]: ResolveQueryKeyElement<T[K]>
55
+ }
56
+
31
57
  export interface CreateQueryOptions<
32
58
  TQueryFnData = unknown,
33
59
  TError = Error,
34
60
  TData = TQueryFnData,
61
+ TQueryKey extends EffectorQueryKey = EffectorQueryKey,
35
62
  > extends Omit<
36
- QueryObserverOptions<TQueryFnData, TError, TData>,
63
+ QueryObserverOptions<
64
+ TQueryFnData,
65
+ TError,
66
+ TData,
67
+ TQueryFnData,
68
+ ResolvedQueryKey<TQueryKey>
69
+ >,
37
70
  'queryKey' | 'enabled' | 'refetchInterval'
38
71
  > {
39
- queryKey: EffectorQueryKey
72
+ queryKey: TQueryKey
40
73
  enabled?: StoreOrValue<boolean>
41
74
  /**
42
75
  * Polling interval in milliseconds, `false` to disable, or a Store for
@@ -46,7 +79,13 @@ export interface CreateQueryOptions<
46
79
  * from TanStack Query is also still supported.
47
80
  */
48
81
  refetchInterval?:
49
- | QueryObserverOptions<TQueryFnData, TError, TData>['refetchInterval']
82
+ | QueryObserverOptions<
83
+ TQueryFnData,
84
+ TError,
85
+ TData,
86
+ TQueryFnData,
87
+ ResolvedQueryKey<TQueryKey>
88
+ >['refetchInterval']
50
89
  | Store<number | false | undefined>
51
90
  /**
52
91
  * Stable name used to derive SIDs for the internal effector stores so that
@@ -128,17 +167,18 @@ export interface CreateInfiniteQueryOptions<
128
167
  TError = Error,
129
168
  TPageParam = unknown,
130
169
  TData = InfiniteData<TQueryFnData, TPageParam>,
170
+ TQueryKey extends EffectorQueryKey = EffectorQueryKey,
131
171
  > extends Omit<
132
172
  InfiniteQueryObserverOptions<
133
173
  TQueryFnData,
134
174
  TError,
135
175
  TData,
136
- ReadonlyArray<unknown>,
176
+ ResolvedQueryKey<TQueryKey>,
137
177
  TPageParam
138
178
  >,
139
179
  'queryKey' | 'enabled' | 'refetchInterval'
140
180
  > {
141
- queryKey: EffectorQueryKey
181
+ queryKey: TQueryKey
142
182
  enabled?: StoreOrValue<boolean>
143
183
  /** See {@link CreateQueryOptions.refetchInterval}. */
144
184
  refetchInterval?:
@@ -146,7 +186,7 @@ export interface CreateInfiniteQueryOptions<
146
186
  TQueryFnData,
147
187
  TError,
148
188
  TData,
149
- ReadonlyArray<unknown>,
189
+ ResolvedQueryKey<TQueryKey>,
150
190
  TPageParam
151
191
  >['refetchInterval']
152
192
  | Store<number | false | undefined>