reactjrx 2.1.1 → 2.2.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.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/queries/createObservableQueryFn.d.ts +8 -9
- package/dist/lib/queries/lockedLiveQueryOptions.d.ts +11 -0
- package/dist/lib/queries/useLiveQueries$.d.ts +12 -0
- package/dist/lib/queries/useLiveQuery$.d.ts +15 -0
- package/dist/lib/queries/useLiveQuery$.test.d.ts +1 -0
- package/dist/lib/queries/useQueries$.d.ts +7 -6
- package/dist/lib/queries/useQuery$.d.ts +7 -2
- package/package.json +1 -1
|
@@ -5,14 +5,13 @@ export type ObservableQueryFn<TQueryFnData = unknown, TQueryKey extends QueryKey
|
|
|
5
5
|
* Bridges an Observable-based `queryFn` to the Promise-based `queryFn`
|
|
6
6
|
* expected by TanStack Query. Shared by `useQuery$` and `useQueries$`.
|
|
7
7
|
*
|
|
8
|
-
* Every value is written into the query as soon as the stream emits it.
|
|
9
|
-
* fetch TanStack starts (mount, `refetch()`, `invalidateQueries()`...)
|
|
10
|
-
* once the stream has a value in the cache, like a
|
|
11
|
-
* it settles. Right after it, the bridge starts a
|
|
12
|
-
* stream: it keeps the query `fetching` while the
|
|
13
|
-
* the stream completes or errors.
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* the stream.
|
|
8
|
+
* Every value is written into the query as soon as the stream emits it. Each
|
|
9
|
+
* fetch TanStack starts (mount, `refetch()`, `invalidateQueries()`...) runs
|
|
10
|
+
* the `queryFn` and ends once the stream has a value in the cache, like a
|
|
11
|
+
* regular query, so awaiting it settles. Right after it, the bridge starts a
|
|
12
|
+
* fetch that follows the stream: it keeps the query `fetching` while the
|
|
13
|
+
* stream runs and ends when the stream completes or errors. Cancelling the
|
|
14
|
+
* fetch in progress (a refetch replacing it, the last observer unmounting,
|
|
15
|
+
* `cancelQueries`, the query leaving the cache) stops the stream.
|
|
17
16
|
*/
|
|
18
17
|
export declare function createObservableQueryFn<TQueryFnData = unknown, TQueryKey extends QueryKey = QueryKey>(queryFn: ObservableQueryFn<TQueryFnData, TQueryKey> | undefined): typeof skipToken | ((context: QueryFunctionContext<TQueryKey>) => Promise<TQueryFnData>) | undefined;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What `useLiveQuery$` and `useLiveQueries$` lock, so that no default of the
|
|
3
|
+
* `QueryClient` keeps a live query from reopening its stream: its data is
|
|
4
|
+
* stale as soon as no stream backs it, and every mount fetches, which joins a
|
|
5
|
+
* running stream or reopens a stopped one.
|
|
6
|
+
*/
|
|
7
|
+
export declare const lockedLiveQueryOptions: {
|
|
8
|
+
readonly staleTime: 0;
|
|
9
|
+
readonly refetchOnMount: "always";
|
|
10
|
+
};
|
|
11
|
+
export type LockedLiveQueryOption = keyof typeof lockedLiveQueryOptions;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { QueryClient } from '@tanstack/react-query';
|
|
2
|
+
import { LockedLiveQueryOption } from './lockedLiveQueryOptions';
|
|
3
|
+
import { QueriesOptions$, QueriesResults$ } from './useQueries$';
|
|
4
|
+
/**
|
|
5
|
+
* `useQueries$` for streams that stay open. Like `useLiveQuery$`, it locks
|
|
6
|
+
* each query's `staleTime` to 0 and `refetchOnMount` to `"always"`.
|
|
7
|
+
*/
|
|
8
|
+
export declare function useLiveQueries$<T extends Array<any>, TCombinedResult = QueriesResults$<T>>({ queries, ...options }: {
|
|
9
|
+
queries: readonly [...QueriesOptions$<T, [], [], LockedLiveQueryOption>];
|
|
10
|
+
combine?: (result: QueriesResults$<T>) => TCombinedResult;
|
|
11
|
+
subscribed?: boolean;
|
|
12
|
+
}, queryClient?: QueryClient): TCombinedResult;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { DefaultError, QueryClient, QueryKey } from '@tanstack/react-query';
|
|
2
|
+
import { LockedLiveQueryOption } from './lockedLiveQueryOptions';
|
|
3
|
+
import { UseQuery$Options } from './useQuery$';
|
|
4
|
+
/**
|
|
5
|
+
* The options of `useLiveQuery$`: those of `useQuery$`, without the ones it
|
|
6
|
+
* locks.
|
|
7
|
+
*/
|
|
8
|
+
export type UseLiveQuery$Options<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> = Omit<UseQuery$Options<TQueryFnData, TError, TData, TQueryKey>, LockedLiveQueryOption>;
|
|
9
|
+
/**
|
|
10
|
+
* `useQuery$` for a stream that stays open, such as a live database query or
|
|
11
|
+
* a socket. It locks `staleTime` to 0 and `refetchOnMount` to `"always"`, so
|
|
12
|
+
* whatever the `QueryClient`'s defaults, the query reopens its stream
|
|
13
|
+
* whenever a component needs it again.
|
|
14
|
+
*/
|
|
15
|
+
export declare function useLiveQuery$<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: UseLiveQuery$Options<TQueryFnData, TError, TData, TQueryKey>, queryClient?: QueryClient): import('@tanstack/react-query').UseQueryResult<TData, TError>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { DefaultError, QueriesPlaceholderDataFunction, QueryClient, QueryKey, UseQueryOptions, UseQueryResult } from '@tanstack/react-query';
|
|
2
2
|
import { ObservableQueryFn } from './createObservableQueryFn';
|
|
3
3
|
type MAXIMUM_DEPTH = 20;
|
|
4
|
-
type UseQuery$OptionsForUseQueries<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> = Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, "queryFn" | "placeholderData"> & {
|
|
4
|
+
type UseQuery$OptionsForUseQueries<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TOmitted extends PropertyKey = never> = Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, "queryFn" | "placeholderData" | TOmitted> & {
|
|
5
5
|
queryFn?: ObservableQueryFn<TQueryFnData, TQueryKey>;
|
|
6
6
|
placeholderData?: TQueryFnData | QueriesPlaceholderDataFunction<TQueryFnData>;
|
|
7
7
|
};
|
|
8
|
-
type GetUseQuery$Options<T> = T extends {
|
|
8
|
+
type GetUseQuery$Options<T, TOmitted extends PropertyKey> = T extends {
|
|
9
9
|
queryFn?: ObservableQueryFn<infer TQueryFnData, infer TQueryKey>;
|
|
10
10
|
select?: (data: any) => infer TData;
|
|
11
|
-
} ? UseQuery$OptionsForUseQueries<TQueryFnData, DefaultError, unknown extends TData ? TQueryFnData : TData, TQueryKey extends QueryKey ? TQueryKey : QueryKey> : UseQuery$OptionsForUseQueries
|
|
11
|
+
} ? UseQuery$OptionsForUseQueries<TQueryFnData, DefaultError, unknown extends TData ? TQueryFnData : TData, TQueryKey extends QueryKey ? TQueryKey : QueryKey, TOmitted> : UseQuery$OptionsForUseQueries<unknown, DefaultError, unknown, QueryKey, TOmitted>;
|
|
12
12
|
type GetUseQuery$Result<T> = T extends {
|
|
13
13
|
queryFn?: ObservableQueryFn<infer TQueryFnData, any>;
|
|
14
14
|
select?: (data: any) => infer TData;
|
|
@@ -17,16 +17,17 @@ type GetUseQuery$Result<T> = T extends {
|
|
|
17
17
|
* Mirrors TanStack's `QueriesOptions`, but each query takes an Observable-based
|
|
18
18
|
* `queryFn` (see {@link ObservableQueryFn}) instead of a Promise-based one. The
|
|
19
19
|
* recursion preserves per-element tuple inference at the call site.
|
|
20
|
+
* `TOmitted` leaves options out of every query.
|
|
20
21
|
*/
|
|
21
|
-
export type QueriesOptions$<T extends Array<any>, TResults extends Array<any> = [], TDepth extends ReadonlyArray<number> = []> = TDepth["length"] extends MAXIMUM_DEPTH ? Array<UseQuery$OptionsForUseQueries
|
|
22
|
+
export type QueriesOptions$<T extends Array<any>, TResults extends Array<any> = [], TDepth extends ReadonlyArray<number> = [], TOmitted extends PropertyKey = never> = TDepth["length"] extends MAXIMUM_DEPTH ? Array<UseQuery$OptionsForUseQueries<unknown, DefaultError, unknown, QueryKey, TOmitted>> : T extends [] ? [] : T extends [infer Head] ? [...TResults, GetUseQuery$Options<Head, TOmitted>] : T extends [infer Head, ...infer Tails] ? QueriesOptions$<[
|
|
22
23
|
...Tails
|
|
23
24
|
], [
|
|
24
25
|
...TResults,
|
|
25
|
-
GetUseQuery$Options<Head>
|
|
26
|
+
GetUseQuery$Options<Head, TOmitted>
|
|
26
27
|
], [
|
|
27
28
|
...TDepth,
|
|
28
29
|
1
|
|
29
|
-
]> : ReadonlyArray<unknown> extends T ? T : Array<UseQuery$OptionsForUseQueries
|
|
30
|
+
], TOmitted> : ReadonlyArray<unknown> extends T ? T : Array<UseQuery$OptionsForUseQueries<unknown, DefaultError, unknown, QueryKey, TOmitted>>;
|
|
30
31
|
/**
|
|
31
32
|
* Mirrors TanStack's `QueriesResults`, mapping each Observable-based query
|
|
32
33
|
* option to its `UseQueryResult`.
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { DefaultError, QueryClient, QueryKey, UseQueryOptions } from '@tanstack/react-query';
|
|
2
2
|
import { ObservableQueryFn } from './createObservableQueryFn';
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* TanStack's `UseQueryOptions`, with an Observable-based `queryFn` (see
|
|
5
|
+
* {@link ObservableQueryFn}).
|
|
6
|
+
*/
|
|
7
|
+
export type UseQuery$Options<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> = Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, "queryFn"> & {
|
|
4
8
|
queryFn: ObservableQueryFn<TQueryFnData, TQueryKey>;
|
|
5
|
-
}
|
|
9
|
+
};
|
|
10
|
+
export declare function useQuery$<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>({ queryFn, ...options }: UseQuery$Options<TQueryFnData, TError, TData, TQueryKey>, queryClient?: QueryClient): import('@tanstack/react-query').UseQueryResult<TData, TError>;
|