@ttt-productions/query-core 0.14.28 → 0.14.30

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.
@@ -31,7 +31,7 @@ export { useReadRetryState, useReadRetryStates } from './use-read-retry-state.js
31
31
  export type { ReadRetryEntry } from './use-read-retry-state.js';
32
32
  export type { ReadRetrySource, ReadRetryState } from './read-retry-derivation.js';
33
33
  export { MutationSessionProvider, MutationSessionEndedError, useSessionMutation, } from './session-mutation.js';
34
- export type { MutationSession, MutationSessionProviderProps, SessionMutateOptions, SessionMutationFunctionContext, SessionMutationOptions, SessionMutationResult, } from './session-mutation.js';
34
+ export type { MutationSession, MutationSessionProviderProps, SessionMutateOptions, SessionMutationFunctionContext, SessionMutationOptions, SessionMutationResult, UnknownOutcomePolicy, } from './session-mutation.js';
35
35
  export { createCallables, MAX_RESUMABLE_CALLS } from './callables/create-callables.js';
36
36
  export type { CallableCaptureContext, CallableDeclaration, CallableErrorRouting, CallableMutationOptions, CallablePolicy, Callables, ResumableOutcome, } from './callables/create-callables.js';
37
37
  export { usePendingMutationVariables, pendingMutationVariables, usePendingMutationTargets, hasPendingMutation, duplicateSubmissionError, useDuplicateGuardedMutation, } from './pending-mutations.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGtD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG9C,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG3E,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAE/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AAGtF,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAM7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAE1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEtE,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,2BAA2B,EAC3B,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,4BAA4B,EAAE,MAAM,oDAAoD,CAAC;AAClG,OAAO,EACL,KAAK,EACL,MAAM,EACN,SAAS,EACT,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,uCAAuC,CAAC;AAW/C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAYjD,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAG5F,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAIlF,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAU/B,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAWvF,OAAO,EACL,2BAA2B,EAC3B,wBAAwB,EACxB,yBAAyB,EACzB,kBAAkB,EAClB,wBAAwB,EACxB,2BAA2B,GAC5B,MAAM,wBAAwB,CAAC","sourcesContent":["'use client';\n\nexport { createQueryClient } from './query-client.js';\nexport type { CreateQueryClientOptions } from './query-client.js';\n\nexport { QueryProvider } from './provider.js';\nexport type { QueryProviderProps } from './provider.js';\n\nexport { FirestoreProvider, useFirestoreDb } from './firestore/context.js';\nexport type { FirestoreProviderProps } from './firestore/context.js';\n\nexport { useFirestoreDoc } from './firestore/use-firestore-doc.js';\nexport { useFirestoreCollection } from './firestore/use-firestore-collection.js';\nexport { useFirestoreInfinite } from './firestore/use-firestore-infinite.js';\nexport { useFirestorePaginated } from './firestore/use-firestore-paginated.js';\nexport type { UseFirestorePaginatedResult } from './firestore/use-firestore-paginated.js';\nexport { useFirestoreCount } from './firestore/use-firestore-count.js';\nexport { useFirestoreLiveInfinite } from './firestore/use-firestore-live-infinite.js';\nexport type { FirestoreLiveInfiniteResult } from './firestore/use-firestore-live-infinite.js';\n\nexport {\n useFirestoreSet,\n useFirestoreUpdate,\n useFirestoreDelete,\n useFirestoreBatch,\n} from './firestore/use-firestore-mutations.js';\n\nexport { useBatchFirestoreDocs } from './firestore/useBatchFirestoreDocs.js';\nexport type {\n BatchFirestoreDocsOptions,\n BatchFirestoreDocsResult,\n BatchFirestoreDocsTransport,\n} from './firestore/useBatchFirestoreDocs.js';\nexport { ABSENT_RETRY_DELAYS_MS } from './firestore/absence-scheduler.js';\n\nexport { useFirestoreSearch } from './search/use-firestore-search.js';\n\nexport {\n invalidateByPrefix,\n removeByPrefix,\n updateQueryData,\n paginatedPageKey,\n mapPaginatedItems,\n prependToFirstPaginatedPage,\n placeRowInPages,\n} from './cache-helpers.js';\nexport type { PagedRows } from './cache-helpers.js';\n\nexport { createDomainEventInvalidator } from './domain-events/create-domain-event-invalidator.js';\nexport {\n exact,\n prefix,\n predicate,\n serializeInvalidation,\n applyInvalidations,\n} from './domain-events/cache-invalidation.js';\nexport type {\n DomainEventInvalidator,\n DomainEventInvalidationRegistry,\n} from './domain-events/create-domain-event-invalidator.js';\nexport type {\n CacheAction,\n CacheInvalidation,\n RefetchType,\n} from './domain-events/cache-invalidation.js';\n\nexport { docWithId } from './firestore/types.js';\nexport type {\n FirestoreDocOptions,\n FirestoreCollectionOptions,\n FirestoreInfiniteOptions,\n FirestorePaginatedOptions,\n FirestoreCountOptions,\n FirestoreLiveInfiniteOptions,\n InfinitePage,\n PaginatedPage,\n MutationOperation,\n} from './firestore/types.js';\nexport { flattenInfiniteData, getInfiniteDataCount } from './firestore/infinite-helpers.js';\nexport type { FirestoreSearchOptions } from './search/types.js';\n\nexport { useReadRetryState, useReadRetryStates } from './use-read-retry-state.js';\nexport type { ReadRetryEntry } from './use-read-retry-state.js';\nexport type { ReadRetrySource, ReadRetryState } from './read-retry-derivation.js';\n\nexport {\n MutationSessionProvider,\n MutationSessionEndedError,\n useSessionMutation,\n} from './session-mutation.js';\nexport type {\n MutationSession,\n MutationSessionProviderProps,\n SessionMutateOptions,\n SessionMutationFunctionContext,\n SessionMutationOptions,\n SessionMutationResult,\n} from './session-mutation.js';\n\nexport { createCallables, MAX_RESUMABLE_CALLS } from './callables/create-callables.js';\nexport type {\n CallableCaptureContext,\n CallableDeclaration,\n CallableErrorRouting,\n CallableMutationOptions,\n CallablePolicy,\n Callables,\n ResumableOutcome,\n} from './callables/create-callables.js';\n\nexport {\n usePendingMutationVariables,\n pendingMutationVariables,\n usePendingMutationTargets,\n hasPendingMutation,\n duplicateSubmissionError,\n useDuplicateGuardedMutation,\n} from './pending-mutations.js';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGtD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG9C,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG3E,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAE/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AAGtF,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAM7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAE1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEtE,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,2BAA2B,EAC3B,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,4BAA4B,EAAE,MAAM,oDAAoD,CAAC;AAClG,OAAO,EACL,KAAK,EACL,MAAM,EACN,SAAS,EACT,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,uCAAuC,CAAC;AAW/C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAYjD,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAG5F,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAIlF,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAW/B,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAWvF,OAAO,EACL,2BAA2B,EAC3B,wBAAwB,EACxB,yBAAyB,EACzB,kBAAkB,EAClB,wBAAwB,EACxB,2BAA2B,GAC5B,MAAM,wBAAwB,CAAC","sourcesContent":["'use client';\n\nexport { createQueryClient } from './query-client.js';\nexport type { CreateQueryClientOptions } from './query-client.js';\n\nexport { QueryProvider } from './provider.js';\nexport type { QueryProviderProps } from './provider.js';\n\nexport { FirestoreProvider, useFirestoreDb } from './firestore/context.js';\nexport type { FirestoreProviderProps } from './firestore/context.js';\n\nexport { useFirestoreDoc } from './firestore/use-firestore-doc.js';\nexport { useFirestoreCollection } from './firestore/use-firestore-collection.js';\nexport { useFirestoreInfinite } from './firestore/use-firestore-infinite.js';\nexport { useFirestorePaginated } from './firestore/use-firestore-paginated.js';\nexport type { UseFirestorePaginatedResult } from './firestore/use-firestore-paginated.js';\nexport { useFirestoreCount } from './firestore/use-firestore-count.js';\nexport { useFirestoreLiveInfinite } from './firestore/use-firestore-live-infinite.js';\nexport type { FirestoreLiveInfiniteResult } from './firestore/use-firestore-live-infinite.js';\n\nexport {\n useFirestoreSet,\n useFirestoreUpdate,\n useFirestoreDelete,\n useFirestoreBatch,\n} from './firestore/use-firestore-mutations.js';\n\nexport { useBatchFirestoreDocs } from './firestore/useBatchFirestoreDocs.js';\nexport type {\n BatchFirestoreDocsOptions,\n BatchFirestoreDocsResult,\n BatchFirestoreDocsTransport,\n} from './firestore/useBatchFirestoreDocs.js';\nexport { ABSENT_RETRY_DELAYS_MS } from './firestore/absence-scheduler.js';\n\nexport { useFirestoreSearch } from './search/use-firestore-search.js';\n\nexport {\n invalidateByPrefix,\n removeByPrefix,\n updateQueryData,\n paginatedPageKey,\n mapPaginatedItems,\n prependToFirstPaginatedPage,\n placeRowInPages,\n} from './cache-helpers.js';\nexport type { PagedRows } from './cache-helpers.js';\n\nexport { createDomainEventInvalidator } from './domain-events/create-domain-event-invalidator.js';\nexport {\n exact,\n prefix,\n predicate,\n serializeInvalidation,\n applyInvalidations,\n} from './domain-events/cache-invalidation.js';\nexport type {\n DomainEventInvalidator,\n DomainEventInvalidationRegistry,\n} from './domain-events/create-domain-event-invalidator.js';\nexport type {\n CacheAction,\n CacheInvalidation,\n RefetchType,\n} from './domain-events/cache-invalidation.js';\n\nexport { docWithId } from './firestore/types.js';\nexport type {\n FirestoreDocOptions,\n FirestoreCollectionOptions,\n FirestoreInfiniteOptions,\n FirestorePaginatedOptions,\n FirestoreCountOptions,\n FirestoreLiveInfiniteOptions,\n InfinitePage,\n PaginatedPage,\n MutationOperation,\n} from './firestore/types.js';\nexport { flattenInfiniteData, getInfiniteDataCount } from './firestore/infinite-helpers.js';\nexport type { FirestoreSearchOptions } from './search/types.js';\n\nexport { useReadRetryState, useReadRetryStates } from './use-read-retry-state.js';\nexport type { ReadRetryEntry } from './use-read-retry-state.js';\nexport type { ReadRetrySource, ReadRetryState } from './read-retry-derivation.js';\n\nexport {\n MutationSessionProvider,\n MutationSessionEndedError,\n useSessionMutation,\n} from './session-mutation.js';\nexport type {\n MutationSession,\n MutationSessionProviderProps,\n SessionMutateOptions,\n SessionMutationFunctionContext,\n SessionMutationOptions,\n SessionMutationResult,\n UnknownOutcomePolicy,\n} from './session-mutation.js';\n\nexport { createCallables, MAX_RESUMABLE_CALLS } from './callables/create-callables.js';\nexport type {\n CallableCaptureContext,\n CallableDeclaration,\n CallableErrorRouting,\n CallableMutationOptions,\n CallablePolicy,\n Callables,\n ResumableOutcome,\n} from './callables/create-callables.js';\n\nexport {\n usePendingMutationVariables,\n pendingMutationVariables,\n usePendingMutationTargets,\n hasPendingMutation,\n duplicateSubmissionError,\n useDuplicateGuardedMutation,\n} from './pending-mutations.js';\n"]}
@@ -1,5 +1,5 @@
1
1
  import { type ReactNode } from 'react';
2
- import { type DefaultError, type MutationFunctionContext, type UseMutationOptions, type UseMutationResult } from '@tanstack/react-query';
2
+ import { type DefaultError, type MutationFunctionContext, type QueryClient, type QueryKey, type UseMutationOptions, type UseMutationResult } from '@tanstack/react-query';
3
3
  export interface MutationSession {
4
4
  uid: string | null;
5
5
  isCurrent(): boolean;
@@ -14,7 +14,13 @@ export type SessionMutationOptions<TData = unknown, TError = DefaultError, TVari
14
14
  onSuccess?: (data: TData, variables: TVariables, onMutateResult: TOnMutateResult, context: SessionMutationFunctionContext) => Promise<unknown> | unknown;
15
15
  onError?: (error: TError, variables: TVariables, onMutateResult: TOnMutateResult | undefined, context: SessionMutationFunctionContext) => Promise<unknown> | unknown;
16
16
  onSettled?: (data: TData | undefined, error: TError | null, variables: TVariables, onMutateResult: TOnMutateResult | undefined, context: SessionMutationFunctionContext) => Promise<unknown> | unknown;
17
+ unknownOutcomeReads?: (variables: TVariables) => readonly QueryKey[];
17
18
  };
19
+ export interface UnknownOutcomePolicy {
20
+ isUnknownOutcome: (error: unknown) => boolean;
21
+ rereadAfterMs: readonly number[];
22
+ reread: (queryClient: QueryClient, keys: readonly QueryKey[]) => unknown;
23
+ }
18
24
  export interface SessionMutateOptions<TData, TError, TVariables, TOnMutateResult> {
19
25
  onSuccess?: (data: TData, variables: TVariables, onMutateResult: TOnMutateResult | undefined, context: SessionMutationFunctionContext) => void;
20
26
  onError?: (error: TError, variables: TVariables, onMutateResult: TOnMutateResult | undefined, context: SessionMutationFunctionContext) => void;
@@ -33,9 +39,10 @@ export declare class MutationSessionEndedError extends Error {
33
39
  }
34
40
  export interface MutationSessionProviderProps {
35
41
  currentUid: string | null;
42
+ unknownOutcome?: UnknownOutcomePolicy;
36
43
  children?: ReactNode;
37
44
  }
38
- export declare function MutationSessionProvider({ currentUid, children }: MutationSessionProviderProps): import("react").JSX.Element;
45
+ export declare function MutationSessionProvider({ currentUid, unknownOutcome, children, }: MutationSessionProviderProps): import("react").JSX.Element;
39
46
  export declare function useMutationSessionCapture(): () => MutationSession;
40
47
  export declare function useSessionMutation<TData = unknown, TError = DefaultError, TVariables = void, TOnMutateResult = unknown>(options: SessionMutationOptions<TData, TError, TVariables, TOnMutateResult>): SessionMutationResult<TData, TError, TVariables, TOnMutateResult>;
41
48
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"session-mutation.d.ts","sourceRoot":"","sources":["../../src/react/session-mutation.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-mutation.d.ts","sourceRoot":"","sources":["../../src/react/session-mutation.tsx"],"names":[],"mappings":"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"}
@@ -9,9 +9,10 @@ export class MutationSessionEndedError extends Error {
9
9
  }
10
10
  }
11
11
  const MutationSessionContext = createContext(null);
12
- export function MutationSessionProvider({ currentUid, children }) {
12
+ export function MutationSessionProvider({ currentUid, unknownOutcome, children, }) {
13
13
  const [store] = useState(() => ({
14
14
  current: { uid: currentUid, generation: 0 },
15
+ unknownOutcome: unknownOutcome ?? null,
15
16
  }));
16
17
  // Insertion effects run before any layout effect of the commit, so a child's layout effect
17
18
  // never starts a mutation under the uid this commit ends.
@@ -19,7 +20,8 @@ export function MutationSessionProvider({ currentUid, children }) {
19
20
  if (store.current.uid !== currentUid) {
20
21
  store.current = { uid: currentUid, generation: store.current.generation + 1 };
21
22
  }
22
- }, [store, currentUid]);
23
+ store.unknownOutcome = unknownOutcome ?? null;
24
+ }, [store, currentUid, unknownOutcome]);
23
25
  return (_jsx(MutationSessionContext.Provider, { value: store, children: children }));
24
26
  }
25
27
  const ALWAYS_CURRENT = {
@@ -98,6 +100,20 @@ function fenceCallOptions(session, options) {
98
100
  : undefined,
99
101
  };
100
102
  }
103
+ function rereadOnUnknownOutcome(store, queryClient, reads, error, variables, session) {
104
+ const policy = store?.unknownOutcome;
105
+ if (!policy || !reads || !policy.isUnknownOutcome(error))
106
+ return;
107
+ const keys = reads(variables);
108
+ if (keys.length === 0)
109
+ return;
110
+ for (const delayMs of policy.rereadAfterMs) {
111
+ setTimeout(() => {
112
+ if (session.isCurrent())
113
+ void policy.reread(queryClient, keys);
114
+ }, delayMs);
115
+ }
116
+ }
101
117
  async function settleInSession(session, settled) {
102
118
  let data;
103
119
  try {
@@ -115,7 +131,7 @@ async function settleInSession(session, settled) {
115
131
  export function useSessionMutation(options) {
116
132
  const store = useContext(MutationSessionContext);
117
133
  const queryClient = useQueryClient();
118
- const { mutationFn, onMutate, onSuccess, onError, onSettled, retry, throwOnError, ...rest } = options;
134
+ const { mutationFn, onMutate, onSuccess, onError, onSettled, retry, throwOnError, unknownOutcomeReads, ...rest } = options;
119
135
  const defaults = queryClient.defaultMutationOptions({ mutationKey: options.mutationKey });
120
136
  const baseRetry = (retry ?? defaults.retry);
121
137
  const baseThrowOnError = (throwOnError ?? defaults.throwOnError);
@@ -153,7 +169,9 @@ export function useSessionMutation(options) {
153
169
  onError: (error, variables, onMutateResult, context) => {
154
170
  if (error instanceof MutationSessionEndedError || runHasEnded(store, context))
155
171
  return;
156
- return onError?.(error, variables, onMutateResult, withSession(context, runSession(context)));
172
+ const session = runSession(context);
173
+ rereadOnUnknownOutcome(store, queryClient, unknownOutcomeReads, error, variables, session);
174
+ return onError?.(error, variables, onMutateResult, withSession(context, session));
157
175
  },
158
176
  onSettled: (data, error, variables, onMutateResult, context) => {
159
177
  if (error instanceof MutationSessionEndedError || runHasEnded(store, context))
@@ -1 +1 @@
1
- {"version":3,"file":"session-mutation.js","sourceRoot":"","sources":["../../src/react/session-mutation.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport {\n createContext,\n useCallback,\n useContext,\n useInsertionEffect,\n useState,\n type ReactNode,\n} from 'react';\nimport {\n useMutation,\n useQueryClient,\n type DefaultError,\n type MutateOptions,\n type MutationFunctionContext,\n type UseMutationOptions,\n type UseMutationResult,\n} from '@tanstack/react-query';\n\nexport interface MutationSession {\n uid: string | null;\n isCurrent(): boolean;\n assertCurrent(): void;\n}\n\nexport type SessionMutationFunctionContext = MutationFunctionContext & {\n session: MutationSession;\n};\n\nexport type SessionMutationOptions<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TOnMutateResult = unknown,\n> = Omit<\n UseMutationOptions<TData, TError, TVariables, TOnMutateResult>,\n 'mutationFn' | 'onMutate' | 'onSuccess' | 'onError' | 'onSettled'\n> & {\n mutationFn: (variables: TVariables, context: SessionMutationFunctionContext) => Promise<TData>;\n onMutate?: (\n variables: TVariables,\n context: SessionMutationFunctionContext,\n ) => Promise<TOnMutateResult> | TOnMutateResult;\n onSuccess?: (\n data: TData,\n variables: TVariables,\n onMutateResult: TOnMutateResult,\n context: SessionMutationFunctionContext,\n ) => Promise<unknown> | unknown;\n onError?: (\n error: TError,\n variables: TVariables,\n onMutateResult: TOnMutateResult | undefined,\n context: SessionMutationFunctionContext,\n ) => Promise<unknown> | unknown;\n onSettled?: (\n data: TData | undefined,\n error: TError | null,\n variables: TVariables,\n onMutateResult: TOnMutateResult | undefined,\n context: SessionMutationFunctionContext,\n ) => Promise<unknown> | unknown;\n};\n\nexport interface SessionMutateOptions<TData, TError, TVariables, TOnMutateResult> {\n onSuccess?: (\n data: TData,\n variables: TVariables,\n onMutateResult: TOnMutateResult | undefined,\n context: SessionMutationFunctionContext,\n ) => void;\n onError?: (\n error: TError,\n variables: TVariables,\n onMutateResult: TOnMutateResult | undefined,\n context: SessionMutationFunctionContext,\n ) => void;\n onSettled?: (\n data: TData | undefined,\n error: TError | null,\n variables: TVariables,\n onMutateResult: TOnMutateResult | undefined,\n context: SessionMutationFunctionContext,\n ) => void;\n}\n\ntype DistributiveOmit<T, K extends PropertyKey> = T extends unknown ? Omit<T, K> : never;\n\nexport type SessionMutationResult<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TOnMutateResult = unknown,\n> = DistributiveOmit<\n UseMutationResult<TData, TError, TVariables, TOnMutateResult>,\n 'mutate' | 'mutateAsync'\n> & {\n mutate: (\n variables: TVariables,\n options?: SessionMutateOptions<TData, TError, TVariables, TOnMutateResult>,\n ) => void;\n mutateAsync: (\n variables: TVariables,\n options?: SessionMutateOptions<TData, TError, TVariables, TOnMutateResult>,\n ) => Promise<TData>;\n};\n\nexport class MutationSessionEndedError extends Error {\n override name = 'AbortError';\n\n constructor(options?: { cause?: unknown }) {\n super('The session that started this mutation has ended.', options);\n }\n}\n\ninterface SessionStore {\n current: { uid: string | null; generation: number };\n}\n\nconst MutationSessionContext = createContext<SessionStore | null>(null);\n\nexport interface MutationSessionProviderProps {\n currentUid: string | null;\n children?: ReactNode;\n}\n\nexport function MutationSessionProvider({ currentUid, children }: MutationSessionProviderProps) {\n const [store] = useState<SessionStore>(() => ({\n current: { uid: currentUid, generation: 0 },\n }));\n // Insertion effects run before any layout effect of the commit, so a child's layout effect\n // never starts a mutation under the uid this commit ends.\n useInsertionEffect(() => {\n if (store.current.uid !== currentUid) {\n store.current = { uid: currentUid, generation: store.current.generation + 1 };\n }\n }, [store, currentUid]);\n return (\n <MutationSessionContext.Provider value={store}>{children}</MutationSessionContext.Provider>\n );\n}\n\nconst ALWAYS_CURRENT: MutationSession = {\n uid: null,\n isCurrent: () => true,\n assertCurrent: () => {},\n};\n\nfunction captureSession(store: SessionStore | null): MutationSession {\n if (!store) return ALWAYS_CURRENT;\n const { uid, generation } = store.current;\n const isCurrent = () => store.current.generation === generation;\n return {\n uid,\n isCurrent,\n assertCurrent: () => {\n if (!isCurrent()) throw new MutationSessionEndedError();\n },\n };\n}\n\nexport function useMutationSessionCapture(): () => MutationSession {\n const store = useContext(MutationSessionContext);\n return useCallback(() => captureSession(store), [store]);\n}\n\nconst runSessions = new WeakMap<MutationFunctionContext, MutationSession>();\n\nfunction runHasEnded(store: SessionStore | null, context: MutationFunctionContext): boolean {\n if (!store) return false;\n return !(runSessions.get(context)?.isCurrent() ?? false);\n}\n\ntype Retry<TError> = UseMutationOptions<unknown, TError, unknown, unknown>['retry'];\ntype ThrowOnError<TError> = UseMutationOptions<unknown, TError, unknown, unknown>['throwOnError'];\n\nfunction retriesAfter<TError>(retry: Retry<TError>, failureCount: number, error: TError): boolean {\n if (error instanceof MutationSessionEndedError) return false;\n if (typeof retry === 'function') return retry(failureCount, error);\n if (typeof retry === 'number') return failureCount < retry;\n return retry === true;\n}\n\nfunction throwsToBoundary<TError>(throwOnError: ThrowOnError<TError>, error: TError): boolean {\n if (error instanceof MutationSessionEndedError) return false;\n if (typeof throwOnError === 'function') return throwOnError(error);\n return throwOnError === true;\n}\n\nfunction withSession(\n context: MutationFunctionContext,\n session: MutationSession,\n): SessionMutationFunctionContext {\n return { ...context, session };\n}\n\nfunction fenceCallOptions<TData, TError, TVariables, TOnMutateResult>(\n session: MutationSession,\n options: SessionMutateOptions<TData, TError, TVariables, TOnMutateResult> | undefined,\n): MutateOptions<TData, TError, TVariables, TOnMutateResult> | undefined {\n if (!options) return undefined;\n const { onSuccess, onError, onSettled } = options;\n return {\n onSuccess: onSuccess\n ? (data, variables, onMutateResult, context) => {\n if (session.isCurrent()) {\n onSuccess(data, variables, onMutateResult, withSession(context, session));\n }\n }\n : undefined,\n onError: onError\n ? (error, variables, onMutateResult, context) => {\n if (!(error instanceof MutationSessionEndedError) && session.isCurrent()) {\n onError(error, variables, onMutateResult, withSession(context, session));\n }\n }\n : undefined,\n onSettled: onSettled\n ? (data, error, variables, onMutateResult, context) => {\n if (!(error instanceof MutationSessionEndedError) && session.isCurrent()) {\n onSettled(data, error, variables, onMutateResult, withSession(context, session));\n }\n }\n : undefined,\n };\n}\n\nasync function settleInSession<TData>(\n session: MutationSession,\n settled: Promise<TData>,\n): Promise<TData> {\n let data: TData;\n try {\n data = await settled;\n } catch (error) {\n if (!(error instanceof MutationSessionEndedError) && !session.isCurrent()) {\n throw new MutationSessionEndedError({ cause: error });\n }\n throw error;\n }\n session.assertCurrent();\n return data;\n}\n\nexport function useSessionMutation<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TOnMutateResult = unknown,\n>(\n options: SessionMutationOptions<TData, TError, TVariables, TOnMutateResult>,\n): SessionMutationResult<TData, TError, TVariables, TOnMutateResult> {\n const store = useContext(MutationSessionContext);\n const queryClient = useQueryClient();\n const { mutationFn, onMutate, onSuccess, onError, onSettled, retry, throwOnError, ...rest } =\n options;\n const defaults = queryClient.defaultMutationOptions<\n UseMutationOptions<unknown, TError, unknown, unknown>\n >({ mutationKey: options.mutationKey });\n const baseRetry = (retry ?? defaults.retry) as Retry<TError>;\n const baseThrowOnError = (throwOnError ?? defaults.throwOnError) as ThrowOnError<TError>;\n\n const mutation = useMutation<TData, TError, TVariables, TOnMutateResult>({\n ...rest,\n retry: (failureCount, error) => retriesAfter(baseRetry, failureCount, error),\n throwOnError: (error) => throwsToBoundary(baseThrowOnError, error),\n onMutate: (variables, context) => {\n const session = store ? captureSession(store) : ALWAYS_CURRENT;\n if (store) runSessions.set(context, session);\n return onMutate?.(variables, withSession(context, session)) as\n TOnMutateResult | Promise<TOnMutateResult>;\n },\n mutationFn: async (variables, context) => {\n const session = store ? runSessions.get(context) : ALWAYS_CURRENT;\n if (!session || !session.isCurrent()) throw new MutationSessionEndedError();\n let data: TData;\n try {\n data = await mutationFn(variables, { ...context, session });\n } catch (error) {\n if (!session.isCurrent()) throw new MutationSessionEndedError({ cause: error });\n throw error;\n }\n session.assertCurrent();\n return data;\n },\n onSuccess: (data, variables, onMutateResult, context) => {\n if (runHasEnded(store, context)) return;\n return onSuccess?.(\n data,\n variables,\n onMutateResult,\n withSession(context, runSession(context)),\n );\n },\n onError: (error, variables, onMutateResult, context) => {\n if (error instanceof MutationSessionEndedError || runHasEnded(store, context)) return;\n return onError?.(error, variables, onMutateResult, withSession(context, runSession(context)));\n },\n onSettled: (data, error, variables, onMutateResult, context) => {\n if (error instanceof MutationSessionEndedError || runHasEnded(store, context)) return;\n return onSettled?.(\n data,\n error,\n variables,\n onMutateResult,\n withSession(context, runSession(context)),\n );\n },\n });\n\n function runSession(context: MutationFunctionContext): MutationSession {\n return (store && runSessions.get(context)) || ALWAYS_CURRENT;\n }\n\n const { mutate: rawMutate, mutateAsync: rawMutateAsync } = mutation;\n const mutate = useCallback(\n (\n variables: TVariables,\n callOptions?: SessionMutateOptions<TData, TError, TVariables, TOnMutateResult>,\n ) => rawMutate(variables, fenceCallOptions(captureSession(store), callOptions)),\n [rawMutate, store],\n );\n const mutateAsync = useCallback(\n (\n variables: TVariables,\n callOptions?: SessionMutateOptions<TData, TError, TVariables, TOnMutateResult>,\n ) => {\n const session = captureSession(store);\n return settleInSession(\n session,\n rawMutateAsync(variables, fenceCallOptions(session, callOptions)),\n );\n },\n [rawMutateAsync, store],\n );\n return { ...mutation, mutate, mutateAsync } as SessionMutationResult<\n TData,\n TError,\n TVariables,\n TOnMutateResult\n >;\n}\n"]}
1
+ {"version":3,"file":"session-mutation.js","sourceRoot":"","sources":["../../src/react/session-mutation.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport {\n createContext,\n useCallback,\n useContext,\n useInsertionEffect,\n useState,\n type ReactNode,\n} from 'react';\nimport {\n useMutation,\n useQueryClient,\n type DefaultError,\n type MutateOptions,\n type MutationFunctionContext,\n type QueryClient,\n type QueryKey,\n type UseMutationOptions,\n type UseMutationResult,\n} from '@tanstack/react-query';\n\nexport interface MutationSession {\n uid: string | null;\n isCurrent(): boolean;\n assertCurrent(): void;\n}\n\nexport type SessionMutationFunctionContext = MutationFunctionContext & {\n session: MutationSession;\n};\n\nexport type SessionMutationOptions<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TOnMutateResult = unknown,\n> = Omit<\n UseMutationOptions<TData, TError, TVariables, TOnMutateResult>,\n 'mutationFn' | 'onMutate' | 'onSuccess' | 'onError' | 'onSettled'\n> & {\n mutationFn: (variables: TVariables, context: SessionMutationFunctionContext) => Promise<TData>;\n onMutate?: (\n variables: TVariables,\n context: SessionMutationFunctionContext,\n ) => Promise<TOnMutateResult> | TOnMutateResult;\n onSuccess?: (\n data: TData,\n variables: TVariables,\n onMutateResult: TOnMutateResult,\n context: SessionMutationFunctionContext,\n ) => Promise<unknown> | unknown;\n onError?: (\n error: TError,\n variables: TVariables,\n onMutateResult: TOnMutateResult | undefined,\n context: SessionMutationFunctionContext,\n ) => Promise<unknown> | unknown;\n onSettled?: (\n data: TData | undefined,\n error: TError | null,\n variables: TVariables,\n onMutateResult: TOnMutateResult | undefined,\n context: SessionMutationFunctionContext,\n ) => Promise<unknown> | unknown;\n unknownOutcomeReads?: (variables: TVariables) => readonly QueryKey[];\n};\n\nexport interface UnknownOutcomePolicy {\n isUnknownOutcome: (error: unknown) => boolean;\n rereadAfterMs: readonly number[];\n reread: (queryClient: QueryClient, keys: readonly QueryKey[]) => unknown;\n}\n\nexport interface SessionMutateOptions<TData, TError, TVariables, TOnMutateResult> {\n onSuccess?: (\n data: TData,\n variables: TVariables,\n onMutateResult: TOnMutateResult | undefined,\n context: SessionMutationFunctionContext,\n ) => void;\n onError?: (\n error: TError,\n variables: TVariables,\n onMutateResult: TOnMutateResult | undefined,\n context: SessionMutationFunctionContext,\n ) => void;\n onSettled?: (\n data: TData | undefined,\n error: TError | null,\n variables: TVariables,\n onMutateResult: TOnMutateResult | undefined,\n context: SessionMutationFunctionContext,\n ) => void;\n}\n\ntype DistributiveOmit<T, K extends PropertyKey> = T extends unknown ? Omit<T, K> : never;\n\nexport type SessionMutationResult<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TOnMutateResult = unknown,\n> = DistributiveOmit<\n UseMutationResult<TData, TError, TVariables, TOnMutateResult>,\n 'mutate' | 'mutateAsync'\n> & {\n mutate: (\n variables: TVariables,\n options?: SessionMutateOptions<TData, TError, TVariables, TOnMutateResult>,\n ) => void;\n mutateAsync: (\n variables: TVariables,\n options?: SessionMutateOptions<TData, TError, TVariables, TOnMutateResult>,\n ) => Promise<TData>;\n};\n\nexport class MutationSessionEndedError extends Error {\n override name = 'AbortError';\n\n constructor(options?: { cause?: unknown }) {\n super('The session that started this mutation has ended.', options);\n }\n}\n\ninterface SessionStore {\n current: { uid: string | null; generation: number };\n unknownOutcome: UnknownOutcomePolicy | null;\n}\n\nconst MutationSessionContext = createContext<SessionStore | null>(null);\n\nexport interface MutationSessionProviderProps {\n currentUid: string | null;\n unknownOutcome?: UnknownOutcomePolicy;\n children?: ReactNode;\n}\n\nexport function MutationSessionProvider({\n currentUid,\n unknownOutcome,\n children,\n}: MutationSessionProviderProps) {\n const [store] = useState<SessionStore>(() => ({\n current: { uid: currentUid, generation: 0 },\n unknownOutcome: unknownOutcome ?? null,\n }));\n // Insertion effects run before any layout effect of the commit, so a child's layout effect\n // never starts a mutation under the uid this commit ends.\n useInsertionEffect(() => {\n if (store.current.uid !== currentUid) {\n store.current = { uid: currentUid, generation: store.current.generation + 1 };\n }\n store.unknownOutcome = unknownOutcome ?? null;\n }, [store, currentUid, unknownOutcome]);\n return (\n <MutationSessionContext.Provider value={store}>{children}</MutationSessionContext.Provider>\n );\n}\n\nconst ALWAYS_CURRENT: MutationSession = {\n uid: null,\n isCurrent: () => true,\n assertCurrent: () => {},\n};\n\nfunction captureSession(store: SessionStore | null): MutationSession {\n if (!store) return ALWAYS_CURRENT;\n const { uid, generation } = store.current;\n const isCurrent = () => store.current.generation === generation;\n return {\n uid,\n isCurrent,\n assertCurrent: () => {\n if (!isCurrent()) throw new MutationSessionEndedError();\n },\n };\n}\n\nexport function useMutationSessionCapture(): () => MutationSession {\n const store = useContext(MutationSessionContext);\n return useCallback(() => captureSession(store), [store]);\n}\n\nconst runSessions = new WeakMap<MutationFunctionContext, MutationSession>();\n\nfunction runHasEnded(store: SessionStore | null, context: MutationFunctionContext): boolean {\n if (!store) return false;\n return !(runSessions.get(context)?.isCurrent() ?? false);\n}\n\ntype Retry<TError> = UseMutationOptions<unknown, TError, unknown, unknown>['retry'];\ntype ThrowOnError<TError> = UseMutationOptions<unknown, TError, unknown, unknown>['throwOnError'];\n\nfunction retriesAfter<TError>(retry: Retry<TError>, failureCount: number, error: TError): boolean {\n if (error instanceof MutationSessionEndedError) return false;\n if (typeof retry === 'function') return retry(failureCount, error);\n if (typeof retry === 'number') return failureCount < retry;\n return retry === true;\n}\n\nfunction throwsToBoundary<TError>(throwOnError: ThrowOnError<TError>, error: TError): boolean {\n if (error instanceof MutationSessionEndedError) return false;\n if (typeof throwOnError === 'function') return throwOnError(error);\n return throwOnError === true;\n}\n\nfunction withSession(\n context: MutationFunctionContext,\n session: MutationSession,\n): SessionMutationFunctionContext {\n return { ...context, session };\n}\n\nfunction fenceCallOptions<TData, TError, TVariables, TOnMutateResult>(\n session: MutationSession,\n options: SessionMutateOptions<TData, TError, TVariables, TOnMutateResult> | undefined,\n): MutateOptions<TData, TError, TVariables, TOnMutateResult> | undefined {\n if (!options) return undefined;\n const { onSuccess, onError, onSettled } = options;\n return {\n onSuccess: onSuccess\n ? (data, variables, onMutateResult, context) => {\n if (session.isCurrent()) {\n onSuccess(data, variables, onMutateResult, withSession(context, session));\n }\n }\n : undefined,\n onError: onError\n ? (error, variables, onMutateResult, context) => {\n if (!(error instanceof MutationSessionEndedError) && session.isCurrent()) {\n onError(error, variables, onMutateResult, withSession(context, session));\n }\n }\n : undefined,\n onSettled: onSettled\n ? (data, error, variables, onMutateResult, context) => {\n if (!(error instanceof MutationSessionEndedError) && session.isCurrent()) {\n onSettled(data, error, variables, onMutateResult, withSession(context, session));\n }\n }\n : undefined,\n };\n}\n\nfunction rereadOnUnknownOutcome<TVariables>(\n store: SessionStore | null,\n queryClient: QueryClient,\n reads: ((variables: TVariables) => readonly QueryKey[]) | undefined,\n error: unknown,\n variables: TVariables,\n session: MutationSession,\n): void {\n const policy = store?.unknownOutcome;\n if (!policy || !reads || !policy.isUnknownOutcome(error)) return;\n const keys = reads(variables);\n if (keys.length === 0) return;\n for (const delayMs of policy.rereadAfterMs) {\n setTimeout(() => {\n if (session.isCurrent()) void policy.reread(queryClient, keys);\n }, delayMs);\n }\n}\n\nasync function settleInSession<TData>(\n session: MutationSession,\n settled: Promise<TData>,\n): Promise<TData> {\n let data: TData;\n try {\n data = await settled;\n } catch (error) {\n if (!(error instanceof MutationSessionEndedError) && !session.isCurrent()) {\n throw new MutationSessionEndedError({ cause: error });\n }\n throw error;\n }\n session.assertCurrent();\n return data;\n}\n\nexport function useSessionMutation<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TOnMutateResult = unknown,\n>(\n options: SessionMutationOptions<TData, TError, TVariables, TOnMutateResult>,\n): SessionMutationResult<TData, TError, TVariables, TOnMutateResult> {\n const store = useContext(MutationSessionContext);\n const queryClient = useQueryClient();\n const {\n mutationFn,\n onMutate,\n onSuccess,\n onError,\n onSettled,\n retry,\n throwOnError,\n unknownOutcomeReads,\n ...rest\n } = options;\n const defaults = queryClient.defaultMutationOptions<\n UseMutationOptions<unknown, TError, unknown, unknown>\n >({ mutationKey: options.mutationKey });\n const baseRetry = (retry ?? defaults.retry) as Retry<TError>;\n const baseThrowOnError = (throwOnError ?? defaults.throwOnError) as ThrowOnError<TError>;\n\n const mutation = useMutation<TData, TError, TVariables, TOnMutateResult>({\n ...rest,\n retry: (failureCount, error) => retriesAfter(baseRetry, failureCount, error),\n throwOnError: (error) => throwsToBoundary(baseThrowOnError, error),\n onMutate: (variables, context) => {\n const session = store ? captureSession(store) : ALWAYS_CURRENT;\n if (store) runSessions.set(context, session);\n return onMutate?.(variables, withSession(context, session)) as\n TOnMutateResult | Promise<TOnMutateResult>;\n },\n mutationFn: async (variables, context) => {\n const session = store ? runSessions.get(context) : ALWAYS_CURRENT;\n if (!session || !session.isCurrent()) throw new MutationSessionEndedError();\n let data: TData;\n try {\n data = await mutationFn(variables, { ...context, session });\n } catch (error) {\n if (!session.isCurrent()) throw new MutationSessionEndedError({ cause: error });\n throw error;\n }\n session.assertCurrent();\n return data;\n },\n onSuccess: (data, variables, onMutateResult, context) => {\n if (runHasEnded(store, context)) return;\n return onSuccess?.(\n data,\n variables,\n onMutateResult,\n withSession(context, runSession(context)),\n );\n },\n onError: (error, variables, onMutateResult, context) => {\n if (error instanceof MutationSessionEndedError || runHasEnded(store, context)) return;\n const session = runSession(context);\n rereadOnUnknownOutcome(store, queryClient, unknownOutcomeReads, error, variables, session);\n return onError?.(error, variables, onMutateResult, withSession(context, session));\n },\n onSettled: (data, error, variables, onMutateResult, context) => {\n if (error instanceof MutationSessionEndedError || runHasEnded(store, context)) return;\n return onSettled?.(\n data,\n error,\n variables,\n onMutateResult,\n withSession(context, runSession(context)),\n );\n },\n });\n\n function runSession(context: MutationFunctionContext): MutationSession {\n return (store && runSessions.get(context)) || ALWAYS_CURRENT;\n }\n\n const { mutate: rawMutate, mutateAsync: rawMutateAsync } = mutation;\n const mutate = useCallback(\n (\n variables: TVariables,\n callOptions?: SessionMutateOptions<TData, TError, TVariables, TOnMutateResult>,\n ) => rawMutate(variables, fenceCallOptions(captureSession(store), callOptions)),\n [rawMutate, store],\n );\n const mutateAsync = useCallback(\n (\n variables: TVariables,\n callOptions?: SessionMutateOptions<TData, TError, TVariables, TOnMutateResult>,\n ) => {\n const session = captureSession(store);\n return settleInSession(\n session,\n rawMutateAsync(variables, fenceCallOptions(session, callOptions)),\n );\n },\n [rawMutateAsync, store],\n );\n return { ...mutation, mutate, mutateAsync } as SessionMutationResult<\n TData,\n TError,\n TVariables,\n TOnMutateResult\n >;\n}\n"]}
@@ -18,7 +18,7 @@ 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> & {
@@ -37,6 +37,9 @@ export declare const answeredThenFailedInfiniteRead: <TPage, TParam, TData = Inf
37
37
  export declare const retryingAnsweredInfiniteRead: <TPage, TParam, TData = InfiniteData<TPage, TParam>>(spec: InfiniteReadSpec<TPage, TParam, TData> & {
38
38
  pages: TPage[];
39
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>;
40
43
  export declare const fetchingNextPageRead: <TPage, TParam, TData = InfiniteData<TPage, TParam>>(spec: InfiniteReadSpec<TPage, TParam, TData> & {
41
44
  pages: TPage[];
42
45
  }) => BuiltInfiniteRead<TData>;
@@ -1 +1 @@
1
- {"version":3,"file":"read-builders.d.ts","sourceRoot":"","sources":["../../../src/react/testing/read-builders.ts"],"names":[],"mappings":"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"}
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);
@@ -89,6 +90,7 @@ export const retryingInfiniteRead = (spec, error) => observedInfinite(spec, { st
89
90
  export const fetchingInfiniteRead = (spec) => observedInfinite(spec, { fetchStatus: 'fetching' });
90
91
  export const answeredThenFailedInfiniteRead = (spec, error) => observedInfinite(spec, failure(error));
91
92
  export const retryingAnsweredInfiniteRead = (spec, error) => observedInfinite(spec, { ...failure(error), fetchStatus: 'fetching' });
93
+ export const pausedRetryingAnsweredInfiniteRead = (spec, error) => observedInfinite(spec, { ...failure(error), fetchStatus: 'paused' });
92
94
  export const fetchingNextPageRead = (spec) => observedInfinite(spec, { fetchStatus: 'fetching', fetchMeta: FORWARD });
93
95
  export const nextPageFailedRead = (spec, error) => observedInfinite(spec, { ...failure(error), fetchMeta: FORWARD });
94
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":"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,MAAwE,EACxE,IAAkB;IAElB,MAAM,MAAM,GAAG;QACb,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,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;AAUjF,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,CAAC,CAAC;QACpE,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,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 },\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 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 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":"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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; 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.28",
3
+ "version": "0.14.30",
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.20"
67
+ "@ttt-productions/firebase-helpers": "^0.12.22"
68
68
  },
69
69
  "devDependencies": {
70
70
  "@tanstack/react-query": "^5.90.0",