@ttt-productions/query-core 0.14.27 → 0.14.29
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/react/testing/mutation-builders.d.ts +15 -12
- package/dist/react/testing/mutation-builders.d.ts.map +1 -1
- package/dist/react/testing/mutation-builders.js +26 -13
- package/dist/react/testing/mutation-builders.js.map +1 -1
- package/dist/react/testing/read-builders.d.ts +5 -1
- package/dist/react/testing/read-builders.d.ts.map +1 -1
- package/dist/react/testing/read-builders.js +4 -1
- package/dist/react/testing/read-builders.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
import { type UseMutationResult } from '@tanstack/react-query';
|
|
2
|
-
import type { SessionMutationResult } from '../session-mutation.js';
|
|
3
|
-
export interface MutationHandlers<TData, TVariables> {
|
|
4
|
-
mutate?: UseMutationResult<TData,
|
|
5
|
-
mutateAsync?: UseMutationResult<TData,
|
|
1
|
+
import { type DefaultError, type UseMutationResult } from '@tanstack/react-query';
|
|
2
|
+
import type { SessionMutationFunctionContext, SessionMutationResult } from '../session-mutation.js';
|
|
3
|
+
export interface MutationHandlers<TData, TVariables, TOnMutateResult = unknown, TError = DefaultError> {
|
|
4
|
+
mutate?: UseMutationResult<TData, TError, TVariables, TOnMutateResult>['mutate'];
|
|
5
|
+
mutateAsync?: UseMutationResult<TData, TError, TVariables, TOnMutateResult>['mutateAsync'];
|
|
6
6
|
}
|
|
7
|
-
export interface SessionMutationHandlers<TData, TVariables> {
|
|
8
|
-
mutate?: SessionMutationResult<TData,
|
|
9
|
-
mutateAsync?: SessionMutationResult<TData,
|
|
7
|
+
export interface SessionMutationHandlers<TData, TVariables, TOnMutateResult = unknown, TError = DefaultError> {
|
|
8
|
+
mutate?: SessionMutationResult<TData, TError, TVariables, TOnMutateResult>['mutate'];
|
|
9
|
+
mutateAsync?: SessionMutationResult<TData, TError, TVariables, TOnMutateResult>['mutateAsync'];
|
|
10
10
|
}
|
|
11
|
-
export declare function idleMutation<TData, TVariables>(handlers?: MutationHandlers<TData, TVariables>): UseMutationResult<TData,
|
|
12
|
-
export declare function pendingMutation<TData, TVariables>(variables: TVariables, handlers?: MutationHandlers<TData, TVariables>): UseMutationResult<TData,
|
|
13
|
-
export declare
|
|
14
|
-
export declare const
|
|
11
|
+
export declare function idleMutation<TData, TVariables, TOnMutateResult = unknown, TError = DefaultError>(handlers?: MutationHandlers<TData, TVariables, TOnMutateResult, TError>): UseMutationResult<TData, TError, TVariables, TOnMutateResult>;
|
|
12
|
+
export declare function pendingMutation<TData, TVariables, TOnMutateResult = unknown, TError = DefaultError>(variables: TVariables, handlers?: MutationHandlers<TData, TVariables, TOnMutateResult, TError>): UseMutationResult<TData, TError, TVariables, TOnMutateResult>;
|
|
13
|
+
export declare function failedMutation<TData, TVariables, TOnMutateResult = unknown, TError = DefaultError>(error: TError, variables: TVariables, handlers?: MutationHandlers<TData, TVariables, TOnMutateResult, TError>): Promise<UseMutationResult<TData, TError, TVariables, TOnMutateResult>>;
|
|
14
|
+
export declare const idleSessionMutation: <TData, TVariables, TOnMutateResult = unknown, TError = DefaultError>(handlers?: SessionMutationHandlers<TData, TVariables, TOnMutateResult, TError>) => SessionMutationResult<TData, TError, TVariables, TOnMutateResult>;
|
|
15
|
+
export declare const pendingSessionMutation: <TData, TVariables, TOnMutateResult = unknown, TError = DefaultError>(variables: TVariables, handlers?: SessionMutationHandlers<TData, TVariables, TOnMutateResult, TError>) => SessionMutationResult<TData, TError, TVariables, TOnMutateResult>;
|
|
16
|
+
export declare const failedSessionMutation: <TData, TVariables, TOnMutateResult = unknown, TError = DefaultError>(error: TError, variables: TVariables, handlers?: SessionMutationHandlers<TData, TVariables, TOnMutateResult, TError>) => Promise<SessionMutationResult<TData, TError, TVariables, TOnMutateResult>>;
|
|
17
|
+
export declare function sessionMutationContext(uid: string | null): SessionMutationFunctionContext;
|
|
15
18
|
//# sourceMappingURL=mutation-builders.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutation-builders.d.ts","sourceRoot":"","sources":["../../../src/react/testing/mutation-builders.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"mutation-builders.d.ts","sourceRoot":"","sources":["../../../src/react/testing/mutation-builders.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +1,29 @@
|
|
|
1
|
-
import { MutationObserver, QueryClient } from '@tanstack/react-query';
|
|
1
|
+
import { MutationObserver, QueryClient, } from '@tanstack/react-query';
|
|
2
2
|
const notRunInTest = () => Promise.reject(new Error('this mutation is not run in the test; pass the case its own handler'));
|
|
3
|
-
function
|
|
4
|
-
|
|
5
|
-
if (variables)
|
|
6
|
-
void observer.mutate(variables.value);
|
|
7
|
-
return observer.getCurrentResult();
|
|
3
|
+
function observer(mutationFn) {
|
|
4
|
+
return new MutationObserver(new QueryClient(), mutationFn ? { mutationFn } : {});
|
|
8
5
|
}
|
|
9
|
-
|
|
6
|
+
function withHandlers(result, handlers) {
|
|
10
7
|
return {
|
|
11
|
-
...
|
|
8
|
+
...result,
|
|
12
9
|
mutate: handlers.mutate ?? (() => { }),
|
|
13
10
|
mutateAsync: handlers.mutateAsync ?? notRunInTest,
|
|
14
11
|
};
|
|
15
12
|
}
|
|
13
|
+
export function idleMutation(handlers = {}) {
|
|
14
|
+
const idle = observer();
|
|
15
|
+
return withHandlers(idle.getCurrentResult(), handlers);
|
|
16
|
+
}
|
|
16
17
|
export function pendingMutation(variables, handlers = {}) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
const running = observer(() => new Promise(() => { }));
|
|
19
|
+
void running.mutate(variables);
|
|
20
|
+
return withHandlers(running.getCurrentResult(), handlers);
|
|
21
|
+
}
|
|
22
|
+
export async function failedMutation(error, variables, handlers = {}) {
|
|
23
|
+
const failing = observer(() => Promise.reject(error));
|
|
24
|
+
// The rejection is the failed state this builder returns.
|
|
25
|
+
await failing.mutate(variables).catch(() => undefined);
|
|
26
|
+
return withHandlers(failing.getCurrentResult(), handlers);
|
|
22
27
|
}
|
|
23
28
|
function asSession(result, handlers) {
|
|
24
29
|
return {
|
|
@@ -29,4 +34,12 @@ function asSession(result, handlers) {
|
|
|
29
34
|
}
|
|
30
35
|
export const idleSessionMutation = (handlers = {}) => asSession(idleMutation(), handlers);
|
|
31
36
|
export const pendingSessionMutation = (variables, handlers = {}) => asSession(pendingMutation(variables), handlers);
|
|
37
|
+
export const failedSessionMutation = async (error, variables, handlers = {}) => asSession(await failedMutation(error, variables), handlers);
|
|
38
|
+
export function sessionMutationContext(uid) {
|
|
39
|
+
return {
|
|
40
|
+
client: new QueryClient(),
|
|
41
|
+
meta: undefined,
|
|
42
|
+
session: { uid, isCurrent: () => true, assertCurrent: () => { } },
|
|
43
|
+
};
|
|
44
|
+
}
|
|
32
45
|
//# sourceMappingURL=mutation-builders.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutation-builders.js","sourceRoot":"","sources":["../../../src/react/testing/mutation-builders.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"mutation-builders.js","sourceRoot":"","sources":["../../../src/react/testing/mutation-builders.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n MutationObserver,\n QueryClient,\n type DefaultError,\n type MutationObserverResult,\n type UseMutationResult,\n} from '@tanstack/react-query';\nimport type { SessionMutationFunctionContext, SessionMutationResult } from '../session-mutation.js';\n\nexport interface MutationHandlers<\n TData,\n TVariables,\n TOnMutateResult = unknown,\n TError = DefaultError,\n> {\n mutate?: UseMutationResult<TData, TError, TVariables, TOnMutateResult>['mutate'];\n mutateAsync?: UseMutationResult<TData, TError, TVariables, TOnMutateResult>['mutateAsync'];\n}\n\nexport interface SessionMutationHandlers<\n TData,\n TVariables,\n TOnMutateResult = unknown,\n TError = DefaultError,\n> {\n mutate?: SessionMutationResult<TData, TError, TVariables, TOnMutateResult>['mutate'];\n mutateAsync?: SessionMutationResult<TData, TError, TVariables, TOnMutateResult>['mutateAsync'];\n}\n\nconst notRunInTest = (): Promise<never> =>\n Promise.reject(new Error('this mutation is not run in the test; pass the case its own handler'));\n\nfunction observer<TData, TVariables, TOnMutateResult, TError>(mutationFn?: () => Promise<TData>) {\n return new MutationObserver<TData, TError, TVariables, TOnMutateResult>(\n new QueryClient(),\n mutationFn ? { mutationFn } : {},\n );\n}\n\nfunction withHandlers<TData, TVariables, TOnMutateResult, TError>(\n result: MutationObserverResult<TData, TError, TVariables, TOnMutateResult>,\n handlers: MutationHandlers<TData, TVariables, TOnMutateResult, TError>,\n): UseMutationResult<TData, TError, TVariables, TOnMutateResult> {\n return {\n ...result,\n mutate: handlers.mutate ?? (() => {}),\n mutateAsync: handlers.mutateAsync ?? notRunInTest,\n };\n}\n\nexport function idleMutation<TData, TVariables, TOnMutateResult = unknown, TError = DefaultError>(\n handlers: MutationHandlers<TData, TVariables, TOnMutateResult, TError> = {},\n): UseMutationResult<TData, TError, TVariables, TOnMutateResult> {\n const idle = observer<TData, TVariables, TOnMutateResult, TError>();\n return withHandlers(idle.getCurrentResult(), handlers);\n}\n\nexport function pendingMutation<\n TData,\n TVariables,\n TOnMutateResult = unknown,\n TError = DefaultError,\n>(\n variables: TVariables,\n handlers: MutationHandlers<TData, TVariables, TOnMutateResult, TError> = {},\n): UseMutationResult<TData, TError, TVariables, TOnMutateResult> {\n const running = observer<TData, TVariables, TOnMutateResult, TError>(\n () => new Promise<TData>(() => {}),\n );\n void running.mutate(variables);\n return withHandlers(running.getCurrentResult(), handlers);\n}\n\nexport async function failedMutation<\n TData,\n TVariables,\n TOnMutateResult = unknown,\n TError = DefaultError,\n>(\n error: TError,\n variables: TVariables,\n handlers: MutationHandlers<TData, TVariables, TOnMutateResult, TError> = {},\n): Promise<UseMutationResult<TData, TError, TVariables, TOnMutateResult>> {\n const failing = observer<TData, TVariables, TOnMutateResult, TError>(() => Promise.reject(error));\n // The rejection is the failed state this builder returns.\n await failing.mutate(variables).catch(() => undefined);\n return withHandlers(failing.getCurrentResult(), handlers);\n}\n\nfunction asSession<TData, TVariables, TOnMutateResult, TError>(\n result: UseMutationResult<TData, TError, TVariables, TOnMutateResult>,\n handlers: SessionMutationHandlers<TData, TVariables, TOnMutateResult, TError>,\n): SessionMutationResult<TData, TError, TVariables, TOnMutateResult> {\n return {\n ...result,\n mutate: handlers.mutate ?? (() => {}),\n mutateAsync: handlers.mutateAsync ?? notRunInTest,\n };\n}\n\nexport const idleSessionMutation = <\n TData,\n TVariables,\n TOnMutateResult = unknown,\n TError = DefaultError,\n>(\n handlers: SessionMutationHandlers<TData, TVariables, TOnMutateResult, TError> = {},\n): SessionMutationResult<TData, TError, TVariables, TOnMutateResult> =>\n asSession(idleMutation<TData, TVariables, TOnMutateResult, TError>(), handlers);\n\nexport const pendingSessionMutation = <\n TData,\n TVariables,\n TOnMutateResult = unknown,\n TError = DefaultError,\n>(\n variables: TVariables,\n handlers: SessionMutationHandlers<TData, TVariables, TOnMutateResult, TError> = {},\n): SessionMutationResult<TData, TError, TVariables, TOnMutateResult> =>\n asSession(pendingMutation<TData, TVariables, TOnMutateResult, TError>(variables), handlers);\n\nexport const failedSessionMutation = async <\n TData,\n TVariables,\n TOnMutateResult = unknown,\n TError = DefaultError,\n>(\n error: TError,\n variables: TVariables,\n handlers: SessionMutationHandlers<TData, TVariables, TOnMutateResult, TError> = {},\n): Promise<SessionMutationResult<TData, TError, TVariables, TOnMutateResult>> =>\n asSession(\n await failedMutation<TData, TVariables, TOnMutateResult, TError>(error, variables),\n handlers,\n );\n\nexport function sessionMutationContext(uid: string | null): SessionMutationFunctionContext {\n return {\n client: new QueryClient(),\n meta: undefined,\n session: { uid, isCurrent: () => true, assertCurrent: () => {} },\n };\n}\n"]}
|
|
@@ -18,12 +18,13 @@ export interface InfiniteReadSpec<TPage, TParam, TData = InfiniteData<TPage, TPa
|
|
|
18
18
|
pages?: TPage[];
|
|
19
19
|
pageParams?: TParam[];
|
|
20
20
|
initialPageParam: TParam;
|
|
21
|
-
getNextPageParam: (lastPage: TPage, allPages: TPage[]) => TParam | undefined | null;
|
|
21
|
+
getNextPageParam: (lastPage: TPage, allPages: TPage[], lastPageParam: TParam, allPageParams: TParam[]) => TParam | undefined | null;
|
|
22
22
|
select?: (data: InfiniteData<TPage, TParam>) => TData;
|
|
23
23
|
}
|
|
24
24
|
export declare const infiniteRead: <TPage, TParam, TData = InfiniteData<TPage, TParam>>(spec: InfiniteReadSpec<TPage, TParam, TData> & {
|
|
25
25
|
pages: TPage[];
|
|
26
26
|
}) => BuiltInfiniteRead<TData>;
|
|
27
|
+
export declare const idleInfiniteRead: <TPage, TParam, TData = InfiniteData<TPage, TParam>>(spec: Omit<InfiniteReadSpec<TPage, TParam, TData>, "pages">) => BuiltInfiniteRead<TData>;
|
|
27
28
|
export declare const loadingInfiniteRead: <TPage, TParam, TData = InfiniteData<TPage, TParam>>(spec: Omit<InfiniteReadSpec<TPage, TParam, TData>, "pages">) => BuiltInfiniteRead<TData>;
|
|
28
29
|
export declare const failedInfiniteRead: <TPage, TParam, TData = InfiniteData<TPage, TParam>>(spec: Omit<InfiniteReadSpec<TPage, TParam, TData>, "pages">, error: Error) => BuiltInfiniteRead<TData>;
|
|
29
30
|
export declare const retryingInfiniteRead: <TPage, TParam, TData = InfiniteData<TPage, TParam>>(spec: Omit<InfiniteReadSpec<TPage, TParam, TData>, "pages">, error: Error) => BuiltInfiniteRead<TData>;
|
|
@@ -36,6 +37,9 @@ export declare const answeredThenFailedInfiniteRead: <TPage, TParam, TData = Inf
|
|
|
36
37
|
export declare const retryingAnsweredInfiniteRead: <TPage, TParam, TData = InfiniteData<TPage, TParam>>(spec: InfiniteReadSpec<TPage, TParam, TData> & {
|
|
37
38
|
pages: TPage[];
|
|
38
39
|
}, error: Error) => BuiltInfiniteRead<TData>;
|
|
40
|
+
export declare const pausedRetryingAnsweredInfiniteRead: <TPage, TParam, TData = InfiniteData<TPage, TParam>>(spec: InfiniteReadSpec<TPage, TParam, TData> & {
|
|
41
|
+
pages: TPage[];
|
|
42
|
+
}, error: Error) => BuiltInfiniteRead<TData>;
|
|
39
43
|
export declare const fetchingNextPageRead: <TPage, TParam, TData = InfiniteData<TPage, TParam>>(spec: InfiniteReadSpec<TPage, TParam, TData> & {
|
|
40
44
|
pages: TPage[];
|
|
41
45
|
}) => BuiltInfiniteRead<TData>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-builders.d.ts","sourceRoot":"","sources":["../../../src/react/testing/read-builders.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,2BAA2B,EAEhC,KAAK,mBAAmB,EAEzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAiC,KAAK,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAEjG,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,mBAAmB,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG;IAAE,UAAU,EAAE,cAAc,CAAC,KAAK,CAAC,CAAA;CAAE,CAAC;AAEjG,MAAM,MAAM,iBAAiB,CAAC,KAAK,IAAI,2BAA2B,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG;IACjF,UAAU,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC;CACnC,CAAC;
|
|
1
|
+
{"version":3,"file":"read-builders.d.ts","sourceRoot":"","sources":["../../../src/react/testing/read-builders.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ function retryStateOf(result, held) {
|
|
|
7
7
|
error: result.error,
|
|
8
8
|
isFetching: result.isFetching,
|
|
9
9
|
isLoading: result.isLoading,
|
|
10
|
+
isPaused: result.isPaused,
|
|
10
11
|
};
|
|
11
12
|
return toRetryState(source, nextHeldFailure(held ? { error: held } : undefined, source));
|
|
12
13
|
}
|
|
@@ -44,7 +45,7 @@ export const retryingAnsweredRead = (data, error) => observed({ ...answered(data
|
|
|
44
45
|
function pageParamsOf(spec, pages) {
|
|
45
46
|
const params = [spec.initialPageParam];
|
|
46
47
|
for (let i = 1; i < pages.length; i++) {
|
|
47
|
-
const next = spec.getNextPageParam(pages[i - 1], pages.slice(0, i));
|
|
48
|
+
const next = spec.getNextPageParam(pages[i - 1], pages.slice(0, i), params[i - 1], [...params]);
|
|
48
49
|
if (next === undefined || next === null)
|
|
49
50
|
throw new Error(`page ${i} has no page param: getNextPageParam ends the list before it`);
|
|
50
51
|
params.push(next);
|
|
@@ -82,12 +83,14 @@ function observedInfinite(spec, state, held = null) {
|
|
|
82
83
|
}
|
|
83
84
|
const FORWARD = { fetchMore: { direction: 'forward' } };
|
|
84
85
|
export const infiniteRead = (spec) => observedInfinite(spec, {});
|
|
86
|
+
export const idleInfiniteRead = (spec) => observedInfinite(spec, {});
|
|
85
87
|
export const loadingInfiniteRead = (spec) => observedInfinite(spec, { fetchStatus: 'fetching' });
|
|
86
88
|
export const failedInfiniteRead = (spec, error) => observedInfinite(spec, failure(error));
|
|
87
89
|
export const retryingInfiniteRead = (spec, error) => observedInfinite(spec, { status: 'pending', fetchStatus: 'fetching', error: null }, error);
|
|
88
90
|
export const fetchingInfiniteRead = (spec) => observedInfinite(spec, { fetchStatus: 'fetching' });
|
|
89
91
|
export const answeredThenFailedInfiniteRead = (spec, error) => observedInfinite(spec, failure(error));
|
|
90
92
|
export const retryingAnsweredInfiniteRead = (spec, error) => observedInfinite(spec, { ...failure(error), fetchStatus: 'fetching' });
|
|
93
|
+
export const pausedRetryingAnsweredInfiniteRead = (spec, error) => observedInfinite(spec, { ...failure(error), fetchStatus: 'paused' });
|
|
91
94
|
export const fetchingNextPageRead = (spec) => observedInfinite(spec, { fetchStatus: 'fetching', fetchMeta: FORWARD });
|
|
92
95
|
export const nextPageFailedRead = (spec, error) => observedInfinite(spec, { ...failure(error), fetchMeta: FORWARD });
|
|
93
96
|
export const retryingNextPageRead = (spec, error) => observedInfinite(spec, { ...failure(error), fetchStatus: 'fetching', fetchMeta: FORWARD });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-builders.js","sourceRoot":"","sources":["../../../src/react/testing/read-builders.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n InfiniteQueryObserver,\n QueryClient,\n QueryObserver,\n type InfiniteData,\n type InfiniteQueryObserverResult,\n type QueryKey,\n type QueryObserverResult,\n type QueryState,\n} from '@tanstack/react-query';\nimport { nextHeldFailure, toRetryState, type ReadRetryState } from '../read-retry-derivation.js';\n\nexport type BuiltRead<T> = QueryObserverResult<T, Error> & { retryState: ReadRetryState<Error> };\n\nexport type BuiltInfiniteRead<TData> = InfiniteQueryObserverResult<TData, Error> & {\n retryState: ReadRetryState<Error>;\n};\n\nconst KEY: QueryKey = ['built-read'];\n\nconst notFetchedInTest = (): Promise<never> =>\n Promise.reject(new Error('this read is not fetched in the test; pass the case its own refetch'));\n\nfunction retryStateOf(\n result: { error: Error | null; isFetching: boolean; isLoading: boolean },\n held: Error | null,\n): ReadRetryState<Error> {\n const source = {\n error: result.error,\n isFetching: result.isFetching,\n isLoading: result.isLoading,\n };\n return toRetryState(source, nextHeldFailure(held ? { error: held } : undefined, source));\n}\n\nfunction observed<T>(\n state: Partial<QueryState<T, Error>>,\n held: Error | null = null,\n): BuiltRead<T> {\n const client = new QueryClient({ defaultOptions: { queries: { retry: false } } });\n client.getQueryCache().build<T, Error>(client, { queryKey: KEY }).setState(state);\n const result = new QueryObserver<T, Error>(client, {\n queryKey: KEY,\n queryFn: notFetchedInTest,\n enabled: false,\n }).getCurrentResult();\n return { ...result, retryState: retryStateOf(result, held) };\n}\n\nconst answered = <T>(data: T): Partial<QueryState<T, Error>> => ({\n data,\n dataUpdatedAt: 1,\n status: 'success',\n});\n\nconst failure = (error: Error): Partial<QueryState<never, Error>> => ({\n error,\n errorUpdatedAt: 2,\n errorUpdateCount: 1,\n fetchFailureCount: 1,\n fetchFailureReason: error,\n status: 'error',\n});\n\nexport const answeredRead = <T>(data: T): BuiltRead<T> => observed<T>(answered(data));\n\nexport const idleRead = <T>(): BuiltRead<T> => observed<T>({});\n\nexport const loadingRead = <T>(): BuiltRead<T> => observed<T>({ fetchStatus: 'fetching' });\n\nexport const failedRead = <T>(error: Error): BuiltRead<T> => observed<T>(failure(error));\n\nexport const retryingRead = <T>(error: Error): BuiltRead<T> =>\n observed<T>({ status: 'pending', fetchStatus: 'fetching', error: null }, error);\n\nexport const fetchingRead = <T>(data: T): BuiltRead<T> =>\n observed<T>({ ...answered(data), fetchStatus: 'fetching' });\n\nexport const answeredThenFailedRead = <T>(data: T, error: Error): BuiltRead<T> =>\n observed<T>({ ...answered(data), ...failure(error) });\n\nexport const retryingAnsweredRead = <T>(data: T, error: Error): BuiltRead<T> =>\n observed<T>({ ...answered(data), ...failure(error), fetchStatus: 'fetching' });\n\nexport interface InfiniteReadSpec<TPage, TParam, TData = InfiniteData<TPage, TParam>> {\n pages?: TPage[];\n pageParams?: TParam[];\n initialPageParam: TParam;\n getNextPageParam: (lastPage: TPage, allPages: TPage[]) => TParam | undefined | null;\n select?: (data: InfiniteData<TPage, TParam>) => TData;\n}\n\nfunction pageParamsOf<TPage, TParam, TData>(\n spec: InfiniteReadSpec<TPage, TParam, TData>,\n pages: TPage[],\n): TParam[] {\n const params = [spec.initialPageParam];\n for (let i = 1; i < pages.length; i++) {\n const next = spec.getNextPageParam(pages[i - 1], pages.slice(0, i));\n if (next === undefined || next === null)\n throw new Error(`page ${i} has no page param: getNextPageParam ends the list before it`);\n params.push(next);\n }\n return params;\n}\n\nfunction observedInfinite<TPage, TParam, TData>(\n spec: InfiniteReadSpec<TPage, TParam, TData>,\n state: Partial<QueryState<InfiniteData<TPage, TParam>, Error>>,\n held: Error | null = null,\n): BuiltInfiniteRead<TData> {\n const client = new QueryClient({ defaultOptions: { queries: { retry: false } } });\n const pages = spec.pages;\n client\n .getQueryCache()\n .build<InfiniteData<TPage, TParam>, Error>(client, { queryKey: KEY })\n .setState({\n ...(pages\n ? {\n data: {\n pages,\n pageParams: spec.pageParams ?? pageParamsOf(spec, pages),\n },\n dataUpdatedAt: 1,\n status: 'success',\n }\n : {}),\n ...state,\n });\n const result = new InfiniteQueryObserver<TPage, Error, TData, QueryKey, TParam>(client, {\n queryKey: KEY,\n queryFn: notFetchedInTest,\n initialPageParam: spec.initialPageParam,\n getNextPageParam: spec.getNextPageParam,\n ...(spec.select ? { select: spec.select } : {}),\n enabled: false,\n }).getCurrentResult();\n return { ...result, retryState: retryStateOf(result, held) };\n}\n\nconst FORWARD = { fetchMore: { direction: 'forward' } } as const;\n\nexport const infiniteRead = <TPage, TParam, TData = InfiniteData<TPage, TParam>>(\n spec: InfiniteReadSpec<TPage, TParam, TData> & { pages: TPage[] },\n): BuiltInfiniteRead<TData> => observedInfinite(spec, {});\n\nexport const loadingInfiniteRead = <TPage, TParam, TData = InfiniteData<TPage, TParam>>(\n spec: Omit<InfiniteReadSpec<TPage, TParam, TData>, 'pages'>,\n): BuiltInfiniteRead<TData> => observedInfinite(spec, { fetchStatus: 'fetching' });\n\nexport const failedInfiniteRead = <TPage, TParam, TData = InfiniteData<TPage, TParam>>(\n spec: Omit<InfiniteReadSpec<TPage, TParam, TData>, 'pages'>,\n error: Error,\n): BuiltInfiniteRead<TData> => observedInfinite(spec, failure(error));\n\nexport const retryingInfiniteRead = <TPage, TParam, TData = InfiniteData<TPage, TParam>>(\n spec: Omit<InfiniteReadSpec<TPage, TParam, TData>, 'pages'>,\n error: Error,\n): BuiltInfiniteRead<TData> =>\n observedInfinite(spec, { status: 'pending', fetchStatus: 'fetching', error: null }, error);\n\nexport const fetchingInfiniteRead = <TPage, TParam, TData = InfiniteData<TPage, TParam>>(\n spec: InfiniteReadSpec<TPage, TParam, TData> & { pages: TPage[] },\n): BuiltInfiniteRead<TData> => observedInfinite(spec, { fetchStatus: 'fetching' });\n\nexport const answeredThenFailedInfiniteRead = <TPage, TParam, TData = InfiniteData<TPage, TParam>>(\n spec: InfiniteReadSpec<TPage, TParam, TData> & { pages: TPage[] },\n error: Error,\n): BuiltInfiniteRead<TData> => observedInfinite(spec, failure(error));\n\nexport const retryingAnsweredInfiniteRead = <TPage, TParam, TData = InfiniteData<TPage, TParam>>(\n spec: InfiniteReadSpec<TPage, TParam, TData> & { pages: TPage[] },\n error: Error,\n): BuiltInfiniteRead<TData> =>\n observedInfinite(spec, { ...failure(error), fetchStatus: 'fetching' });\n\nexport const fetchingNextPageRead = <TPage, TParam, TData = InfiniteData<TPage, TParam>>(\n spec: InfiniteReadSpec<TPage, TParam, TData> & { pages: TPage[] },\n): BuiltInfiniteRead<TData> =>\n observedInfinite(spec, { fetchStatus: 'fetching', fetchMeta: FORWARD });\n\nexport const nextPageFailedRead = <TPage, TParam, TData = InfiniteData<TPage, TParam>>(\n spec: InfiniteReadSpec<TPage, TParam, TData> & { pages: TPage[] },\n error: Error,\n): BuiltInfiniteRead<TData> => observedInfinite(spec, { ...failure(error), fetchMeta: FORWARD });\n\nexport const retryingNextPageRead = <TPage, TParam, TData = InfiniteData<TPage, TParam>>(\n spec: InfiniteReadSpec<TPage, TParam, TData> & { pages: TPage[] },\n error: Error,\n): BuiltInfiniteRead<TData> =>\n observedInfinite(spec, { ...failure(error), fetchStatus: 'fetching', fetchMeta: FORWARD });\n"]}
|
|
1
|
+
{"version":3,"file":"read-builders.js","sourceRoot":"","sources":["../../../src/react/testing/read-builders.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,WAAW,EACX,aAAa,GAMd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,YAAY,EAAuB,MAAM,6BAA6B,CAAC;AAQjG,MAAM,GAAG,GAAa,CAAC,YAAY,CAAC,CAAC;AAErC,MAAM,gBAAgB,GAAG,GAAmB,EAAE,CAC5C,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC,CAAC;AAEnG,SAAS,YAAY,CACnB,MAA2F,EAC3F,IAAkB;IAElB,MAAM,MAAM,GAAG;QACb,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC;IACF,OAAO,YAAY,CAAC,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;AAC3F,CAAC;AAED,SAAS,QAAQ,CACf,KAAoC,EACpC,OAAqB,IAAI;IAEzB,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IAClF,MAAM,CAAC,aAAa,EAAE,CAAC,KAAK,CAAW,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClF,MAAM,MAAM,GAAG,IAAI,aAAa,CAAW,MAAM,EAAE;QACjD,QAAQ,EAAE,GAAG;QACb,OAAO,EAAE,gBAAgB;QACzB,OAAO,EAAE,KAAK;KACf,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACtB,OAAO,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED,MAAM,QAAQ,GAAG,CAAI,IAAO,EAAiC,EAAE,CAAC,CAAC;IAC/D,IAAI;IACJ,aAAa,EAAE,CAAC;IAChB,MAAM,EAAE,SAAS;CAClB,CAAC,CAAC;AAEH,MAAM,OAAO,GAAG,CAAC,KAAY,EAAqC,EAAE,CAAC,CAAC;IACpE,KAAK;IACL,cAAc,EAAE,CAAC;IACjB,gBAAgB,EAAE,CAAC;IACnB,iBAAiB,EAAE,CAAC;IACpB,kBAAkB,EAAE,KAAK;IACzB,MAAM,EAAE,OAAO;CAChB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAI,IAAO,EAAgB,EAAE,CAAC,QAAQ,CAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAEtF,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAoB,EAAE,CAAC,QAAQ,CAAI,EAAE,CAAC,CAAC;AAE/D,MAAM,CAAC,MAAM,WAAW,GAAG,GAAoB,EAAE,CAAC,QAAQ,CAAI,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;AAE3F,MAAM,CAAC,MAAM,UAAU,GAAG,CAAI,KAAY,EAAgB,EAAE,CAAC,QAAQ,CAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AAEzF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAI,KAAY,EAAgB,EAAE,CAC5D,QAAQ,CAAI,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;AAElF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAI,IAAO,EAAgB,EAAE,CACvD,QAAQ,CAAI,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;AAE9D,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAI,IAAO,EAAE,KAAY,EAAgB,EAAE,CAC/E,QAAQ,CAAI,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAExD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAI,IAAO,EAAE,KAAY,EAAgB,EAAE,CAC7E,QAAQ,CAAI,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;AAejF,SAAS,YAAY,CACnB,IAA4C,EAC5C,KAAc;IAEd,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QAChG,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI;YACrC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,8DAA8D,CAAC,CAAC;QAC3F,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CACvB,IAA4C,EAC5C,KAA8D,EAC9D,OAAqB,IAAI;IAEzB,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IAClF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACzB,MAAM;SACH,aAAa,EAAE;SACf,KAAK,CAAqC,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;SACpE,QAAQ,CAAC;QACR,GAAG,CAAC,KAAK;YACP,CAAC,CAAC;gBACE,IAAI,EAAE;oBACJ,KAAK;oBACL,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC;iBACzD;gBACD,aAAa,EAAE,CAAC;gBAChB,MAAM,EAAE,SAAS;aAClB;YACH,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,KAAK;KACT,CAAC,CAAC;IACL,MAAM,MAAM,GAAG,IAAI,qBAAqB,CAAwC,MAAM,EAAE;QACtF,QAAQ,EAAE,GAAG;QACb,OAAO,EAAE,gBAAgB;QACzB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,OAAO,EAAE,KAAK;KACf,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACtB,OAAO,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED,MAAM,OAAO,GAAG,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,EAAW,CAAC;AAEjE,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,IAAiE,EACvC,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAE1D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,IAA2D,EACjC,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAE1D,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,IAA2D,EACjC,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;AAEnF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,IAA2D,EAC3D,KAAY,EACc,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AAEtE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,IAA2D,EAC3D,KAAY,EACc,EAAE,CAC5B,gBAAgB,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;AAE7F,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,IAAiE,EACvC,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;AAEnF,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAC5C,IAAiE,EACjE,KAAY,EACc,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AAEtE,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC1C,IAAiE,EACjE,KAAY,EACc,EAAE,CAC5B,gBAAgB,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;AAEzE,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAKhD,IAAiE,EACjE,KAAY,EACc,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC;AAEpG,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,IAAiE,EACvC,EAAE,CAC5B,gBAAgB,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;AAE1E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,IAAiE,EACjE,KAAY,EACc,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;AAEjG,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,IAAiE,EACjE,KAAY,EACc,EAAE,CAC5B,gBAAgB,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC","sourcesContent":["import {\n InfiniteQueryObserver,\n QueryClient,\n QueryObserver,\n type InfiniteData,\n type InfiniteQueryObserverResult,\n type QueryKey,\n type QueryObserverResult,\n type QueryState,\n} from '@tanstack/react-query';\nimport { nextHeldFailure, toRetryState, type ReadRetryState } from '../read-retry-derivation.js';\n\nexport type BuiltRead<T> = QueryObserverResult<T, Error> & { retryState: ReadRetryState<Error> };\n\nexport type BuiltInfiniteRead<TData> = InfiniteQueryObserverResult<TData, Error> & {\n retryState: ReadRetryState<Error>;\n};\n\nconst KEY: QueryKey = ['built-read'];\n\nconst notFetchedInTest = (): Promise<never> =>\n Promise.reject(new Error('this read is not fetched in the test; pass the case its own refetch'));\n\nfunction retryStateOf(\n result: { error: Error | null; isFetching: boolean; isLoading: boolean; isPaused: boolean },\n held: Error | null,\n): ReadRetryState<Error> {\n const source = {\n error: result.error,\n isFetching: result.isFetching,\n isLoading: result.isLoading,\n isPaused: result.isPaused,\n };\n return toRetryState(source, nextHeldFailure(held ? { error: held } : undefined, source));\n}\n\nfunction observed<T>(\n state: Partial<QueryState<T, Error>>,\n held: Error | null = null,\n): BuiltRead<T> {\n const client = new QueryClient({ defaultOptions: { queries: { retry: false } } });\n client.getQueryCache().build<T, Error>(client, { queryKey: KEY }).setState(state);\n const result = new QueryObserver<T, Error>(client, {\n queryKey: KEY,\n queryFn: notFetchedInTest,\n enabled: false,\n }).getCurrentResult();\n return { ...result, retryState: retryStateOf(result, held) };\n}\n\nconst answered = <T>(data: T): Partial<QueryState<T, Error>> => ({\n data,\n dataUpdatedAt: 1,\n status: 'success',\n});\n\nconst failure = (error: Error): Partial<QueryState<never, Error>> => ({\n error,\n errorUpdatedAt: 2,\n errorUpdateCount: 1,\n fetchFailureCount: 1,\n fetchFailureReason: error,\n status: 'error',\n});\n\nexport const answeredRead = <T>(data: T): BuiltRead<T> => observed<T>(answered(data));\n\nexport const idleRead = <T>(): BuiltRead<T> => observed<T>({});\n\nexport const loadingRead = <T>(): BuiltRead<T> => observed<T>({ fetchStatus: 'fetching' });\n\nexport const failedRead = <T>(error: Error): BuiltRead<T> => observed<T>(failure(error));\n\nexport const retryingRead = <T>(error: Error): BuiltRead<T> =>\n observed<T>({ status: 'pending', fetchStatus: 'fetching', error: null }, error);\n\nexport const fetchingRead = <T>(data: T): BuiltRead<T> =>\n observed<T>({ ...answered(data), fetchStatus: 'fetching' });\n\nexport const answeredThenFailedRead = <T>(data: T, error: Error): BuiltRead<T> =>\n observed<T>({ ...answered(data), ...failure(error) });\n\nexport const retryingAnsweredRead = <T>(data: T, error: Error): BuiltRead<T> =>\n observed<T>({ ...answered(data), ...failure(error), fetchStatus: 'fetching' });\n\nexport interface InfiniteReadSpec<TPage, TParam, TData = InfiniteData<TPage, TParam>> {\n pages?: TPage[];\n pageParams?: TParam[];\n initialPageParam: TParam;\n getNextPageParam: (\n lastPage: TPage,\n allPages: TPage[],\n lastPageParam: TParam,\n allPageParams: TParam[],\n ) => TParam | undefined | null;\n select?: (data: InfiniteData<TPage, TParam>) => TData;\n}\n\nfunction pageParamsOf<TPage, TParam, TData>(\n spec: InfiniteReadSpec<TPage, TParam, TData>,\n pages: TPage[],\n): TParam[] {\n const params = [spec.initialPageParam];\n for (let i = 1; i < pages.length; i++) {\n const next = spec.getNextPageParam(pages[i - 1], pages.slice(0, i), params[i - 1], [...params]);\n if (next === undefined || next === null)\n throw new Error(`page ${i} has no page param: getNextPageParam ends the list before it`);\n params.push(next);\n }\n return params;\n}\n\nfunction observedInfinite<TPage, TParam, TData>(\n spec: InfiniteReadSpec<TPage, TParam, TData>,\n state: Partial<QueryState<InfiniteData<TPage, TParam>, Error>>,\n held: Error | null = null,\n): BuiltInfiniteRead<TData> {\n const client = new QueryClient({ defaultOptions: { queries: { retry: false } } });\n const pages = spec.pages;\n client\n .getQueryCache()\n .build<InfiniteData<TPage, TParam>, Error>(client, { queryKey: KEY })\n .setState({\n ...(pages\n ? {\n data: {\n pages,\n pageParams: spec.pageParams ?? pageParamsOf(spec, pages),\n },\n dataUpdatedAt: 1,\n status: 'success',\n }\n : {}),\n ...state,\n });\n const result = new InfiniteQueryObserver<TPage, Error, TData, QueryKey, TParam>(client, {\n queryKey: KEY,\n queryFn: notFetchedInTest,\n initialPageParam: spec.initialPageParam,\n getNextPageParam: spec.getNextPageParam,\n ...(spec.select ? { select: spec.select } : {}),\n enabled: false,\n }).getCurrentResult();\n return { ...result, retryState: retryStateOf(result, held) };\n}\n\nconst FORWARD = { fetchMore: { direction: 'forward' } } as const;\n\nexport const infiniteRead = <TPage, TParam, TData = InfiniteData<TPage, TParam>>(\n spec: InfiniteReadSpec<TPage, TParam, TData> & { pages: TPage[] },\n): BuiltInfiniteRead<TData> => observedInfinite(spec, {});\n\nexport const idleInfiniteRead = <TPage, TParam, TData = InfiniteData<TPage, TParam>>(\n spec: Omit<InfiniteReadSpec<TPage, TParam, TData>, 'pages'>,\n): BuiltInfiniteRead<TData> => observedInfinite(spec, {});\n\nexport const loadingInfiniteRead = <TPage, TParam, TData = InfiniteData<TPage, TParam>>(\n spec: Omit<InfiniteReadSpec<TPage, TParam, TData>, 'pages'>,\n): BuiltInfiniteRead<TData> => observedInfinite(spec, { fetchStatus: 'fetching' });\n\nexport const failedInfiniteRead = <TPage, TParam, TData = InfiniteData<TPage, TParam>>(\n spec: Omit<InfiniteReadSpec<TPage, TParam, TData>, 'pages'>,\n error: Error,\n): BuiltInfiniteRead<TData> => observedInfinite(spec, failure(error));\n\nexport const retryingInfiniteRead = <TPage, TParam, TData = InfiniteData<TPage, TParam>>(\n spec: Omit<InfiniteReadSpec<TPage, TParam, TData>, 'pages'>,\n error: Error,\n): BuiltInfiniteRead<TData> =>\n observedInfinite(spec, { status: 'pending', fetchStatus: 'fetching', error: null }, error);\n\nexport const fetchingInfiniteRead = <TPage, TParam, TData = InfiniteData<TPage, TParam>>(\n spec: InfiniteReadSpec<TPage, TParam, TData> & { pages: TPage[] },\n): BuiltInfiniteRead<TData> => observedInfinite(spec, { fetchStatus: 'fetching' });\n\nexport const answeredThenFailedInfiniteRead = <TPage, TParam, TData = InfiniteData<TPage, TParam>>(\n spec: InfiniteReadSpec<TPage, TParam, TData> & { pages: TPage[] },\n error: Error,\n): BuiltInfiniteRead<TData> => observedInfinite(spec, failure(error));\n\nexport const retryingAnsweredInfiniteRead = <TPage, TParam, TData = InfiniteData<TPage, TParam>>(\n spec: InfiniteReadSpec<TPage, TParam, TData> & { pages: TPage[] },\n error: Error,\n): BuiltInfiniteRead<TData> =>\n observedInfinite(spec, { ...failure(error), fetchStatus: 'fetching' });\n\nexport const pausedRetryingAnsweredInfiniteRead = <\n TPage,\n TParam,\n TData = InfiniteData<TPage, TParam>,\n>(\n spec: InfiniteReadSpec<TPage, TParam, TData> & { pages: TPage[] },\n error: Error,\n): BuiltInfiniteRead<TData> => observedInfinite(spec, { ...failure(error), fetchStatus: 'paused' });\n\nexport const fetchingNextPageRead = <TPage, TParam, TData = InfiniteData<TPage, TParam>>(\n spec: InfiniteReadSpec<TPage, TParam, TData> & { pages: TPage[] },\n): BuiltInfiniteRead<TData> =>\n observedInfinite(spec, { fetchStatus: 'fetching', fetchMeta: FORWARD });\n\nexport const nextPageFailedRead = <TPage, TParam, TData = InfiniteData<TPage, TParam>>(\n spec: InfiniteReadSpec<TPage, TParam, TData> & { pages: TPage[] },\n error: Error,\n): BuiltInfiniteRead<TData> => observedInfinite(spec, { ...failure(error), fetchMeta: FORWARD });\n\nexport const retryingNextPageRead = <TPage, TParam, TData = InfiniteData<TPage, TParam>>(\n spec: InfiniteReadSpec<TPage, TParam, TData> & { pages: TPage[] },\n error: Error,\n): BuiltInfiniteRead<TData> =>\n observedInfinite(spec, { ...failure(error), fetchStatus: 'fetching', fetchMeta: FORWARD });\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ttt-productions/query-core",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.29",
|
|
4
4
|
"description": "Shared TanStack Query (React Query) client defaults, query key helpers, and Firestore integration hooks for TTT Productions apps",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
}
|
|
65
65
|
},
|
|
66
66
|
"dependencies": {
|
|
67
|
-
"@ttt-productions/firebase-helpers": "^0.12.
|
|
67
|
+
"@ttt-productions/firebase-helpers": "^0.12.20"
|
|
68
68
|
},
|
|
69
69
|
"devDependencies": {
|
|
70
70
|
"@tanstack/react-query": "^5.90.0",
|