@tanstack/query-core 5.29.0 → 5.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/build/legacy/hydration.cjs +4 -4
  2. package/build/legacy/hydration.cjs.map +1 -1
  3. package/build/legacy/hydration.d.cts +2 -1
  4. package/build/legacy/hydration.d.ts +2 -1
  5. package/build/legacy/hydration.js +4 -4
  6. package/build/legacy/hydration.js.map +1 -1
  7. package/build/legacy/index.d.cts +1 -1
  8. package/build/legacy/index.d.ts +1 -1
  9. package/build/legacy/infiniteQueryBehavior.d.cts +1 -1
  10. package/build/legacy/infiniteQueryBehavior.d.ts +1 -1
  11. package/build/legacy/infiniteQueryObserver.d.cts +1 -1
  12. package/build/legacy/infiniteQueryObserver.d.ts +1 -1
  13. package/build/legacy/mutation.cjs +31 -32
  14. package/build/legacy/mutation.cjs.map +1 -1
  15. package/build/legacy/mutation.d.cts +1 -1
  16. package/build/legacy/mutation.d.ts +1 -1
  17. package/build/legacy/mutation.js +32 -33
  18. package/build/legacy/mutation.js.map +1 -1
  19. package/build/legacy/mutationCache.cjs +43 -25
  20. package/build/legacy/mutationCache.cjs.map +1 -1
  21. package/build/legacy/mutationCache.d.cts +1 -1
  22. package/build/legacy/mutationCache.d.ts +1 -1
  23. package/build/legacy/mutationCache.js +43 -25
  24. package/build/legacy/mutationCache.js.map +1 -1
  25. package/build/legacy/mutationObserver.d.cts +1 -1
  26. package/build/legacy/mutationObserver.d.ts +1 -1
  27. package/build/legacy/queriesObserver.d.cts +1 -1
  28. package/build/legacy/queriesObserver.d.ts +1 -1
  29. package/build/legacy/query.cjs +3 -2
  30. package/build/legacy/query.cjs.map +1 -1
  31. package/build/legacy/query.d.cts +1 -1
  32. package/build/legacy/query.d.ts +1 -1
  33. package/build/legacy/query.js +3 -2
  34. package/build/legacy/query.js.map +1 -1
  35. package/build/legacy/queryCache.d.cts +1 -1
  36. package/build/legacy/queryCache.d.ts +1 -1
  37. package/build/legacy/queryClient.d.cts +1 -1
  38. package/build/legacy/queryClient.d.ts +1 -1
  39. package/build/legacy/queryObserver.d.cts +1 -1
  40. package/build/legacy/queryObserver.d.ts +1 -1
  41. package/build/legacy/retryer.cjs +16 -16
  42. package/build/legacy/retryer.cjs.map +1 -1
  43. package/build/legacy/retryer.d.cts +1 -1
  44. package/build/legacy/retryer.d.ts +1 -1
  45. package/build/legacy/retryer.js +16 -16
  46. package/build/legacy/retryer.js.map +1 -1
  47. package/build/legacy/{queryClient--tFV-sQG.d.cts → types-5uTf3z3y.d.cts} +275 -266
  48. package/build/legacy/{queryClient-K0zFyarY.d.ts → types-EkjjZlVm.d.ts} +275 -266
  49. package/build/legacy/types.cjs.map +1 -1
  50. package/build/legacy/types.d.cts +1 -1
  51. package/build/legacy/types.d.ts +1 -1
  52. package/build/legacy/utils.d.cts +1 -1
  53. package/build/legacy/utils.d.ts +1 -1
  54. package/build/modern/hydration.cjs +4 -4
  55. package/build/modern/hydration.cjs.map +1 -1
  56. package/build/modern/hydration.d.cts +2 -1
  57. package/build/modern/hydration.d.ts +2 -1
  58. package/build/modern/hydration.js +4 -4
  59. package/build/modern/hydration.js.map +1 -1
  60. package/build/modern/index.d.cts +1 -1
  61. package/build/modern/index.d.ts +1 -1
  62. package/build/modern/infiniteQueryBehavior.d.cts +1 -1
  63. package/build/modern/infiniteQueryBehavior.d.ts +1 -1
  64. package/build/modern/infiniteQueryObserver.d.cts +1 -1
  65. package/build/modern/infiniteQueryObserver.d.ts +1 -1
  66. package/build/modern/mutation.cjs +30 -30
  67. package/build/modern/mutation.cjs.map +1 -1
  68. package/build/modern/mutation.d.cts +1 -1
  69. package/build/modern/mutation.d.ts +1 -1
  70. package/build/modern/mutation.js +31 -31
  71. package/build/modern/mutation.js.map +1 -1
  72. package/build/modern/mutationCache.cjs +38 -23
  73. package/build/modern/mutationCache.cjs.map +1 -1
  74. package/build/modern/mutationCache.d.cts +1 -1
  75. package/build/modern/mutationCache.d.ts +1 -1
  76. package/build/modern/mutationCache.js +38 -23
  77. package/build/modern/mutationCache.js.map +1 -1
  78. package/build/modern/mutationObserver.d.cts +1 -1
  79. package/build/modern/mutationObserver.d.ts +1 -1
  80. package/build/modern/queriesObserver.d.cts +1 -1
  81. package/build/modern/queriesObserver.d.ts +1 -1
  82. package/build/modern/query.cjs +3 -2
  83. package/build/modern/query.cjs.map +1 -1
  84. package/build/modern/query.d.cts +1 -1
  85. package/build/modern/query.d.ts +1 -1
  86. package/build/modern/query.js +3 -2
  87. package/build/modern/query.js.map +1 -1
  88. package/build/modern/queryCache.d.cts +1 -1
  89. package/build/modern/queryCache.d.ts +1 -1
  90. package/build/modern/queryClient.d.cts +1 -1
  91. package/build/modern/queryClient.d.ts +1 -1
  92. package/build/modern/queryObserver.d.cts +1 -1
  93. package/build/modern/queryObserver.d.ts +1 -1
  94. package/build/modern/retryer.cjs +16 -16
  95. package/build/modern/retryer.cjs.map +1 -1
  96. package/build/modern/retryer.d.cts +1 -1
  97. package/build/modern/retryer.d.ts +1 -1
  98. package/build/modern/retryer.js +16 -16
  99. package/build/modern/retryer.js.map +1 -1
  100. package/build/modern/{queryClient--tFV-sQG.d.cts → types-5uTf3z3y.d.cts} +275 -266
  101. package/build/modern/{queryClient-K0zFyarY.d.ts → types-EkjjZlVm.d.ts} +275 -266
  102. package/build/modern/types.cjs.map +1 -1
  103. package/build/modern/types.d.cts +1 -1
  104. package/build/modern/types.d.ts +1 -1
  105. package/build/modern/utils.d.cts +1 -1
  106. package/build/modern/utils.d.ts +1 -1
  107. package/package.json +1 -1
  108. package/src/__tests__/hydration.test.tsx +34 -0
  109. package/src/__tests__/mutations.test.tsx +191 -0
  110. package/src/__tests__/queryClient.test.tsx +96 -4
  111. package/src/hydration.ts +8 -6
  112. package/src/mutation.ts +32 -33
  113. package/src/mutationCache.ts +54 -28
  114. package/src/query.ts +2 -1
  115. package/src/retryer.ts +24 -20
  116. package/src/types.ts +5 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/mutation.ts"],"sourcesContent":["import { notifyManager } from './notifyManager'\nimport { Removable } from './removable'\nimport { canFetch, createRetryer } from './retryer'\nimport type {\n DefaultError,\n MutationMeta,\n MutationOptions,\n MutationStatus,\n} from './types'\nimport type { MutationCache } from './mutationCache'\nimport type { MutationObserver } from './mutationObserver'\nimport type { Retryer } from './retryer'\n\n// TYPES\n\ninterface MutationConfig<TData, TError, TVariables, TContext> {\n mutationId: number\n mutationCache: MutationCache\n options: MutationOptions<TData, TError, TVariables, TContext>\n defaultOptions?: MutationOptions<TData, TError, TVariables, TContext>\n state?: MutationState<TData, TError, TVariables, TContext>\n}\n\nexport interface MutationState<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n> {\n context: TContext | undefined\n data: TData | undefined\n error: TError | null\n failureCount: number\n failureReason: TError | null\n isPaused: boolean\n status: MutationStatus\n variables: TVariables | undefined\n submittedAt: number\n}\n\ninterface FailedAction<TError> {\n type: 'failed'\n failureCount: number\n error: TError | null\n}\n\ninterface PendingAction<TVariables, TContext> {\n type: 'pending'\n variables?: TVariables\n context?: TContext\n}\n\ninterface SuccessAction<TData> {\n type: 'success'\n data: TData\n}\n\ninterface ErrorAction<TError> {\n type: 'error'\n error: TError\n}\n\ninterface PauseAction {\n type: 'pause'\n}\n\ninterface ContinueAction {\n type: 'continue'\n}\n\nexport type Action<TData, TError, TVariables, TContext> =\n | ContinueAction\n | ErrorAction<TError>\n | FailedAction<TError>\n | PendingAction<TVariables, TContext>\n | PauseAction\n | SuccessAction<TData>\n\n// CLASS\n\nexport class Mutation<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n> extends Removable {\n state: MutationState<TData, TError, TVariables, TContext>\n options!: MutationOptions<TData, TError, TVariables, TContext>\n readonly mutationId: number\n\n #observers: Array<MutationObserver<TData, TError, TVariables, TContext>>\n #defaultOptions?: MutationOptions<TData, TError, TVariables, TContext>\n #mutationCache: MutationCache\n #retryer?: Retryer<TData>\n\n constructor(config: MutationConfig<TData, TError, TVariables, TContext>) {\n super()\n\n this.mutationId = config.mutationId\n this.#defaultOptions = config.defaultOptions\n this.#mutationCache = config.mutationCache\n this.#observers = []\n this.state = config.state || getDefaultState()\n\n this.setOptions(config.options)\n this.scheduleGc()\n }\n\n setOptions(\n options?: MutationOptions<TData, TError, TVariables, TContext>,\n ): void {\n this.options = { ...this.#defaultOptions, ...options }\n\n this.updateGcTime(this.options.gcTime)\n }\n\n get meta(): MutationMeta | undefined {\n return this.options.meta\n }\n\n addObserver(observer: MutationObserver<any, any, any, any>): void {\n if (!this.#observers.includes(observer)) {\n this.#observers.push(observer)\n\n // Stop the mutation from being garbage collected\n this.clearGcTimeout()\n\n this.#mutationCache.notify({\n type: 'observerAdded',\n mutation: this,\n observer,\n })\n }\n }\n\n removeObserver(observer: MutationObserver<any, any, any, any>): void {\n this.#observers = this.#observers.filter((x) => x !== observer)\n\n this.scheduleGc()\n\n this.#mutationCache.notify({\n type: 'observerRemoved',\n mutation: this,\n observer,\n })\n }\n\n protected optionalRemove() {\n if (!this.#observers.length) {\n if (this.state.status === 'pending') {\n this.scheduleGc()\n } else {\n this.#mutationCache.remove(this)\n }\n }\n }\n\n continue(): Promise<unknown> {\n return (\n this.#retryer?.continue() ??\n // continuing a mutation assumes that variables are set, mutation must have been dehydrated before\n this.execute(this.state.variables!)\n )\n }\n\n async execute(variables: TVariables): Promise<TData> {\n const executeMutation = () => {\n this.#retryer = createRetryer({\n fn: () => {\n if (!this.options.mutationFn) {\n return Promise.reject(new Error('No mutationFn found'))\n }\n return this.options.mutationFn(variables)\n },\n onFail: (failureCount, error) => {\n this.#dispatch({ type: 'failed', failureCount, error })\n },\n onPause: () => {\n this.#dispatch({ type: 'pause' })\n },\n onContinue: () => {\n this.#dispatch({ type: 'continue' })\n },\n retry: this.options.retry ?? 0,\n retryDelay: this.options.retryDelay,\n networkMode: this.options.networkMode,\n })\n\n return this.#retryer.promise\n }\n\n const restored = this.state.status === 'pending'\n\n try {\n if (!restored) {\n this.#dispatch({ type: 'pending', variables })\n // Notify cache callback\n await this.#mutationCache.config.onMutate?.(\n variables,\n this as Mutation<unknown, unknown, unknown, unknown>,\n )\n const context = await this.options.onMutate?.(variables)\n if (context !== this.state.context) {\n this.#dispatch({\n type: 'pending',\n context,\n variables,\n })\n }\n }\n const data = await executeMutation()\n\n // Notify cache callback\n await this.#mutationCache.config.onSuccess?.(\n data,\n variables,\n this.state.context,\n this as Mutation<unknown, unknown, unknown, unknown>,\n )\n\n await this.options.onSuccess?.(data, variables, this.state.context!)\n\n // Notify cache callback\n await this.#mutationCache.config.onSettled?.(\n data,\n null,\n this.state.variables,\n this.state.context,\n this as Mutation<unknown, unknown, unknown, unknown>,\n )\n\n await this.options.onSettled?.(data, null, variables, this.state.context)\n\n this.#dispatch({ type: 'success', data })\n return data\n } catch (error) {\n try {\n // Notify cache callback\n await this.#mutationCache.config.onError?.(\n error as any,\n variables,\n this.state.context,\n this as Mutation<unknown, unknown, unknown, unknown>,\n )\n\n await this.options.onError?.(\n error as TError,\n variables,\n this.state.context,\n )\n\n // Notify cache callback\n await this.#mutationCache.config.onSettled?.(\n undefined,\n error as any,\n this.state.variables,\n this.state.context,\n this as Mutation<unknown, unknown, unknown, unknown>,\n )\n\n await this.options.onSettled?.(\n undefined,\n error as TError,\n variables,\n this.state.context,\n )\n throw error\n } finally {\n this.#dispatch({ type: 'error', error: error as TError })\n }\n }\n }\n\n #dispatch(action: Action<TData, TError, TVariables, TContext>): void {\n const reducer = (\n state: MutationState<TData, TError, TVariables, TContext>,\n ): MutationState<TData, TError, TVariables, TContext> => {\n switch (action.type) {\n case 'failed':\n return {\n ...state,\n failureCount: action.failureCount,\n failureReason: action.error,\n }\n case 'pause':\n return {\n ...state,\n isPaused: true,\n }\n case 'continue':\n return {\n ...state,\n isPaused: false,\n }\n case 'pending':\n return {\n ...state,\n context: action.context,\n data: undefined,\n failureCount: 0,\n failureReason: null,\n error: null,\n isPaused: !canFetch(this.options.networkMode),\n status: 'pending',\n variables: action.variables,\n submittedAt: Date.now(),\n }\n case 'success':\n return {\n ...state,\n data: action.data,\n failureCount: 0,\n failureReason: null,\n error: null,\n status: 'success',\n isPaused: false,\n }\n case 'error':\n return {\n ...state,\n data: undefined,\n error: action.error,\n failureCount: state.failureCount + 1,\n failureReason: action.error,\n isPaused: false,\n status: 'error',\n }\n }\n }\n this.state = reducer(this.state)\n\n notifyManager.batch(() => {\n this.#observers.forEach((observer) => {\n observer.onMutationUpdate(action)\n })\n this.#mutationCache.notify({\n mutation: this,\n type: 'updated',\n action,\n })\n })\n }\n}\n\nexport function getDefaultState<\n TData,\n TError,\n TVariables,\n TContext,\n>(): MutationState<TData, TError, TVariables, TContext> {\n return {\n context: undefined,\n data: undefined,\n error: null,\n failureCount: 0,\n failureReason: null,\n isPaused: false,\n status: 'idle',\n variables: undefined,\n submittedAt: 0,\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/mutation.ts"],"sourcesContent":["import { notifyManager } from './notifyManager'\nimport { Removable } from './removable'\nimport { createRetryer } from './retryer'\nimport type {\n DefaultError,\n MutationMeta,\n MutationOptions,\n MutationStatus,\n} from './types'\nimport type { MutationCache } from './mutationCache'\nimport type { MutationObserver } from './mutationObserver'\nimport type { Retryer } from './retryer'\n\n// TYPES\n\ninterface MutationConfig<TData, TError, TVariables, TContext> {\n mutationId: number\n mutationCache: MutationCache\n options: MutationOptions<TData, TError, TVariables, TContext>\n state?: MutationState<TData, TError, TVariables, TContext>\n}\n\nexport interface MutationState<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n> {\n context: TContext | undefined\n data: TData | undefined\n error: TError | null\n failureCount: number\n failureReason: TError | null\n isPaused: boolean\n status: MutationStatus\n variables: TVariables | undefined\n submittedAt: number\n}\n\ninterface FailedAction<TError> {\n type: 'failed'\n failureCount: number\n error: TError | null\n}\n\ninterface PendingAction<TVariables, TContext> {\n type: 'pending'\n isPaused: boolean\n variables?: TVariables\n context?: TContext\n}\n\ninterface SuccessAction<TData> {\n type: 'success'\n data: TData\n}\n\ninterface ErrorAction<TError> {\n type: 'error'\n error: TError\n}\n\ninterface PauseAction {\n type: 'pause'\n}\n\ninterface ContinueAction {\n type: 'continue'\n}\n\nexport type Action<TData, TError, TVariables, TContext> =\n | ContinueAction\n | ErrorAction<TError>\n | FailedAction<TError>\n | PendingAction<TVariables, TContext>\n | PauseAction\n | SuccessAction<TData>\n\n// CLASS\n\nexport class Mutation<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n> extends Removable {\n state: MutationState<TData, TError, TVariables, TContext>\n options!: MutationOptions<TData, TError, TVariables, TContext>\n readonly mutationId: number\n\n #observers: Array<MutationObserver<TData, TError, TVariables, TContext>>\n #mutationCache: MutationCache\n #retryer?: Retryer<TData>\n\n constructor(config: MutationConfig<TData, TError, TVariables, TContext>) {\n super()\n\n this.mutationId = config.mutationId\n this.#mutationCache = config.mutationCache\n this.#observers = []\n this.state = config.state || getDefaultState()\n\n this.setOptions(config.options)\n this.scheduleGc()\n }\n\n setOptions(\n options: MutationOptions<TData, TError, TVariables, TContext>,\n ): void {\n this.options = options\n\n this.updateGcTime(this.options.gcTime)\n }\n\n get meta(): MutationMeta | undefined {\n return this.options.meta\n }\n\n addObserver(observer: MutationObserver<any, any, any, any>): void {\n if (!this.#observers.includes(observer)) {\n this.#observers.push(observer)\n\n // Stop the mutation from being garbage collected\n this.clearGcTimeout()\n\n this.#mutationCache.notify({\n type: 'observerAdded',\n mutation: this,\n observer,\n })\n }\n }\n\n removeObserver(observer: MutationObserver<any, any, any, any>): void {\n this.#observers = this.#observers.filter((x) => x !== observer)\n\n this.scheduleGc()\n\n this.#mutationCache.notify({\n type: 'observerRemoved',\n mutation: this,\n observer,\n })\n }\n\n protected optionalRemove() {\n if (!this.#observers.length) {\n if (this.state.status === 'pending') {\n this.scheduleGc()\n } else {\n this.#mutationCache.remove(this)\n }\n }\n }\n\n continue(): Promise<unknown> {\n return (\n this.#retryer?.continue() ??\n // continuing a mutation assumes that variables are set, mutation must have been dehydrated before\n this.execute(this.state.variables!)\n )\n }\n\n async execute(variables: TVariables): Promise<TData> {\n this.#retryer = createRetryer({\n fn: () => {\n if (!this.options.mutationFn) {\n return Promise.reject(new Error('No mutationFn found'))\n }\n return this.options.mutationFn(variables)\n },\n onFail: (failureCount, error) => {\n this.#dispatch({ type: 'failed', failureCount, error })\n },\n onPause: () => {\n this.#dispatch({ type: 'pause' })\n },\n onContinue: () => {\n this.#dispatch({ type: 'continue' })\n },\n retry: this.options.retry ?? 0,\n retryDelay: this.options.retryDelay,\n networkMode: this.options.networkMode,\n canRun: () => this.#mutationCache.canRun(this),\n })\n\n const restored = this.state.status === 'pending'\n const isPaused = !this.#retryer.canStart()\n\n try {\n if (!restored) {\n this.#dispatch({ type: 'pending', variables, isPaused })\n // Notify cache callback\n await this.#mutationCache.config.onMutate?.(\n variables,\n this as Mutation<unknown, unknown, unknown, unknown>,\n )\n const context = await this.options.onMutate?.(variables)\n if (context !== this.state.context) {\n this.#dispatch({\n type: 'pending',\n context,\n variables,\n isPaused,\n })\n }\n }\n const data = await this.#retryer.start()\n\n // Notify cache callback\n await this.#mutationCache.config.onSuccess?.(\n data,\n variables,\n this.state.context,\n this as Mutation<unknown, unknown, unknown, unknown>,\n )\n\n await this.options.onSuccess?.(data, variables, this.state.context!)\n\n // Notify cache callback\n await this.#mutationCache.config.onSettled?.(\n data,\n null,\n this.state.variables,\n this.state.context,\n this as Mutation<unknown, unknown, unknown, unknown>,\n )\n\n await this.options.onSettled?.(data, null, variables, this.state.context)\n\n this.#dispatch({ type: 'success', data })\n return data\n } catch (error) {\n try {\n // Notify cache callback\n await this.#mutationCache.config.onError?.(\n error as any,\n variables,\n this.state.context,\n this as Mutation<unknown, unknown, unknown, unknown>,\n )\n\n await this.options.onError?.(\n error as TError,\n variables,\n this.state.context,\n )\n\n // Notify cache callback\n await this.#mutationCache.config.onSettled?.(\n undefined,\n error as any,\n this.state.variables,\n this.state.context,\n this as Mutation<unknown, unknown, unknown, unknown>,\n )\n\n await this.options.onSettled?.(\n undefined,\n error as TError,\n variables,\n this.state.context,\n )\n throw error\n } finally {\n this.#dispatch({ type: 'error', error: error as TError })\n }\n } finally {\n this.#mutationCache.runNext(this)\n }\n }\n\n #dispatch(action: Action<TData, TError, TVariables, TContext>): void {\n const reducer = (\n state: MutationState<TData, TError, TVariables, TContext>,\n ): MutationState<TData, TError, TVariables, TContext> => {\n switch (action.type) {\n case 'failed':\n return {\n ...state,\n failureCount: action.failureCount,\n failureReason: action.error,\n }\n case 'pause':\n return {\n ...state,\n isPaused: true,\n }\n case 'continue':\n return {\n ...state,\n isPaused: false,\n }\n case 'pending':\n return {\n ...state,\n context: action.context,\n data: undefined,\n failureCount: 0,\n failureReason: null,\n error: null,\n isPaused: action.isPaused,\n status: 'pending',\n variables: action.variables,\n submittedAt: Date.now(),\n }\n case 'success':\n return {\n ...state,\n data: action.data,\n failureCount: 0,\n failureReason: null,\n error: null,\n status: 'success',\n isPaused: false,\n }\n case 'error':\n return {\n ...state,\n data: undefined,\n error: action.error,\n failureCount: state.failureCount + 1,\n failureReason: action.error,\n isPaused: false,\n status: 'error',\n }\n }\n }\n this.state = reducer(this.state)\n\n notifyManager.batch(() => {\n this.#observers.forEach((observer) => {\n observer.onMutationUpdate(action)\n })\n this.#mutationCache.notify({\n mutation: this,\n type: 'updated',\n action,\n })\n })\n }\n}\n\nexport function getDefaultState<\n TData,\n TError,\n TVariables,\n TContext,\n>(): MutationState<TData, TError, TVariables, TContext> {\n return {\n context: undefined,\n data: undefined,\n error: null,\n failureCount: 0,\n failureReason: null,\n isPaused: false,\n status: 'idle',\n variables: undefined,\n submittedAt: 0,\n }\n}\n"],"mappings":"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","names":[]}
@@ -53,16 +53,15 @@ var import_notifyManager = require("./notifyManager.cjs");
53
53
  var import_mutation = require("./mutation.cjs");
54
54
  var import_utils = require("./utils.cjs");
55
55
  var import_subscribable = require("./subscribable.cjs");
56
- var _mutations, _mutationId, _resuming;
56
+ var _mutations, _mutationId;
57
57
  var MutationCache = class extends import_subscribable.Subscribable {
58
58
  constructor(config = {}) {
59
59
  super();
60
60
  this.config = config;
61
61
  __privateAdd(this, _mutations, void 0);
62
62
  __privateAdd(this, _mutationId, void 0);
63
- __privateAdd(this, _resuming, void 0);
64
- __privateSet(this, _mutations, []);
65
- __privateSet(this, _mutationId, 0);
63
+ __privateSet(this, _mutations, /* @__PURE__ */ new Map());
64
+ __privateSet(this, _mutationId, Date.now());
66
65
  }
67
66
  build(client, options, state) {
68
67
  const mutation = new import_mutation.Mutation({
@@ -75,33 +74,55 @@ var MutationCache = class extends import_subscribable.Subscribable {
75
74
  return mutation;
76
75
  }
77
76
  add(mutation) {
78
- __privateGet(this, _mutations).push(mutation);
77
+ const scope = scopeFor(mutation);
78
+ const mutations = __privateGet(this, _mutations).get(scope) ?? [];
79
+ mutations.push(mutation);
80
+ __privateGet(this, _mutations).set(scope, mutations);
79
81
  this.notify({ type: "added", mutation });
80
82
  }
81
83
  remove(mutation) {
82
- __privateSet(this, _mutations, __privateGet(this, _mutations).filter((x) => x !== mutation));
84
+ var _a;
85
+ const scope = scopeFor(mutation);
86
+ if (__privateGet(this, _mutations).has(scope)) {
87
+ const mutations = (_a = __privateGet(this, _mutations).get(scope)) == null ? void 0 : _a.filter((x) => x !== mutation);
88
+ if (mutations) {
89
+ if (mutations.length === 0) {
90
+ __privateGet(this, _mutations).delete(scope);
91
+ } else {
92
+ __privateGet(this, _mutations).set(scope, mutations);
93
+ }
94
+ }
95
+ }
83
96
  this.notify({ type: "removed", mutation });
84
97
  }
98
+ canRun(mutation) {
99
+ var _a;
100
+ const firstPendingMutation = (_a = __privateGet(this, _mutations).get(scopeFor(mutation))) == null ? void 0 : _a.find((m) => m.state.status === "pending");
101
+ return !firstPendingMutation || firstPendingMutation === mutation;
102
+ }
103
+ runNext(mutation) {
104
+ var _a;
105
+ const foundMutation = (_a = __privateGet(this, _mutations).get(scopeFor(mutation))) == null ? void 0 : _a.find((m) => m !== mutation && m.state.isPaused);
106
+ return (foundMutation == null ? void 0 : foundMutation.continue()) ?? Promise.resolve();
107
+ }
85
108
  clear() {
86
109
  import_notifyManager.notifyManager.batch(() => {
87
- __privateGet(this, _mutations).forEach((mutation) => {
110
+ this.getAll().forEach((mutation) => {
88
111
  this.remove(mutation);
89
112
  });
90
113
  });
91
114
  }
92
115
  getAll() {
93
- return __privateGet(this, _mutations);
116
+ return [...__privateGet(this, _mutations).values()].flat();
94
117
  }
95
118
  find(filters) {
96
119
  const defaultedFilters = { exact: true, ...filters };
97
- return __privateGet(this, _mutations).find(
120
+ return this.getAll().find(
98
121
  (mutation) => (0, import_utils.matchMutation)(defaultedFilters, mutation)
99
122
  );
100
123
  }
101
124
  findAll(filters = {}) {
102
- return __privateGet(this, _mutations).filter(
103
- (mutation) => (0, import_utils.matchMutation)(filters, mutation)
104
- );
125
+ return this.getAll().filter((mutation) => (0, import_utils.matchMutation)(filters, mutation));
105
126
  }
106
127
  notify(event) {
107
128
  import_notifyManager.notifyManager.batch(() => {
@@ -111,23 +132,20 @@ var MutationCache = class extends import_subscribable.Subscribable {
111
132
  });
112
133
  }
113
134
  resumePausedMutations() {
114
- __privateSet(this, _resuming, (__privateGet(this, _resuming) ?? Promise.resolve()).then(() => {
115
- const pausedMutations = __privateGet(this, _mutations).filter((x) => x.state.isPaused);
116
- return import_notifyManager.notifyManager.batch(
117
- () => pausedMutations.reduce(
118
- (promise, mutation) => promise.then(() => mutation.continue().catch(import_utils.noop)),
119
- Promise.resolve()
120
- )
121
- );
122
- }).then(() => {
123
- __privateSet(this, _resuming, void 0);
124
- }));
125
- return __privateGet(this, _resuming);
135
+ const pausedMutations = this.getAll().filter((x) => x.state.isPaused);
136
+ return import_notifyManager.notifyManager.batch(
137
+ () => Promise.all(
138
+ pausedMutations.map((mutation) => mutation.continue().catch(import_utils.noop))
139
+ )
140
+ );
126
141
  }
127
142
  };
128
143
  _mutations = new WeakMap();
129
144
  _mutationId = new WeakMap();
130
- _resuming = new WeakMap();
145
+ function scopeFor(mutation) {
146
+ var _a;
147
+ return ((_a = mutation.options.scope) == null ? void 0 : _a.id) ?? String(mutation.mutationId);
148
+ }
131
149
  // Annotate the CommonJS export names for ESM import in node:
132
150
  0 && (module.exports = {
133
151
  MutationCache
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/mutationCache.ts"],"sourcesContent":["import { notifyManager } from './notifyManager'\nimport { Mutation } from './mutation'\nimport { matchMutation, noop } from './utils'\nimport { Subscribable } from './subscribable'\nimport type { MutationObserver } from './mutationObserver'\nimport type { DefaultError, MutationOptions, NotifyEvent } from './types'\nimport type { QueryClient } from './queryClient'\nimport type { Action, MutationState } from './mutation'\nimport type { MutationFilters } from './utils'\n\n// TYPES\n\ninterface MutationCacheConfig {\n onError?: (\n error: DefaultError,\n variables: unknown,\n context: unknown,\n mutation: Mutation<unknown, unknown, unknown>,\n ) => Promise<unknown> | unknown\n onSuccess?: (\n data: unknown,\n variables: unknown,\n context: unknown,\n mutation: Mutation<unknown, unknown, unknown>,\n ) => Promise<unknown> | unknown\n onMutate?: (\n variables: unknown,\n mutation: Mutation<unknown, unknown, unknown>,\n ) => Promise<unknown> | unknown\n onSettled?: (\n data: unknown | undefined,\n error: DefaultError | null,\n variables: unknown,\n context: unknown,\n mutation: Mutation<unknown, unknown, unknown>,\n ) => Promise<unknown> | unknown\n}\n\ninterface NotifyEventMutationAdded extends NotifyEvent {\n type: 'added'\n mutation: Mutation<any, any, any, any>\n}\ninterface NotifyEventMutationRemoved extends NotifyEvent {\n type: 'removed'\n mutation: Mutation<any, any, any, any>\n}\n\ninterface NotifyEventMutationObserverAdded extends NotifyEvent {\n type: 'observerAdded'\n mutation: Mutation<any, any, any, any>\n observer: MutationObserver<any, any, any>\n}\n\ninterface NotifyEventMutationObserverRemoved extends NotifyEvent {\n type: 'observerRemoved'\n mutation: Mutation<any, any, any, any>\n observer: MutationObserver<any, any, any>\n}\n\ninterface NotifyEventMutationObserverOptionsUpdated extends NotifyEvent {\n type: 'observerOptionsUpdated'\n mutation?: Mutation<any, any, any, any>\n observer: MutationObserver<any, any, any, any>\n}\n\ninterface NotifyEventMutationUpdated extends NotifyEvent {\n type: 'updated'\n mutation: Mutation<any, any, any, any>\n action: Action<any, any, any, any>\n}\n\nexport type MutationCacheNotifyEvent =\n | NotifyEventMutationAdded\n | NotifyEventMutationRemoved\n | NotifyEventMutationObserverAdded\n | NotifyEventMutationObserverRemoved\n | NotifyEventMutationObserverOptionsUpdated\n | NotifyEventMutationUpdated\n\ntype MutationCacheListener = (event: MutationCacheNotifyEvent) => void\n\n// CLASS\n\nexport class MutationCache extends Subscribable<MutationCacheListener> {\n #mutations: Array<Mutation<any, any, any, any>>\n #mutationId: number\n #resuming: Promise<unknown> | undefined\n\n constructor(public config: MutationCacheConfig = {}) {\n super()\n this.#mutations = []\n this.#mutationId = 0\n }\n\n build<TData, TError, TVariables, TContext>(\n client: QueryClient,\n options: MutationOptions<TData, TError, TVariables, TContext>,\n state?: MutationState<TData, TError, TVariables, TContext>,\n ): Mutation<TData, TError, TVariables, TContext> {\n const mutation = new Mutation({\n mutationCache: this,\n mutationId: ++this.#mutationId,\n options: client.defaultMutationOptions(options),\n state,\n })\n\n this.add(mutation)\n\n return mutation\n }\n\n add(mutation: Mutation<any, any, any, any>): void {\n this.#mutations.push(mutation)\n this.notify({ type: 'added', mutation })\n }\n\n remove(mutation: Mutation<any, any, any, any>): void {\n this.#mutations = this.#mutations.filter((x) => x !== mutation)\n this.notify({ type: 'removed', mutation })\n }\n\n clear(): void {\n notifyManager.batch(() => {\n this.#mutations.forEach((mutation) => {\n this.remove(mutation)\n })\n })\n }\n\n getAll(): Array<Mutation> {\n return this.#mutations\n }\n\n find<\n TData = unknown,\n TError = DefaultError,\n TVariables = any,\n TContext = unknown,\n >(\n filters: MutationFilters,\n ): Mutation<TData, TError, TVariables, TContext> | undefined {\n const defaultedFilters = { exact: true, ...filters }\n\n return this.#mutations.find((mutation) =>\n matchMutation(defaultedFilters, mutation),\n )\n }\n\n findAll(filters: MutationFilters = {}): Array<Mutation> {\n return this.#mutations.filter((mutation) =>\n matchMutation(filters, mutation),\n )\n }\n\n notify(event: MutationCacheNotifyEvent) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event)\n })\n })\n }\n\n resumePausedMutations(): Promise<unknown> {\n this.#resuming = (this.#resuming ?? Promise.resolve())\n .then(() => {\n const pausedMutations = this.#mutations.filter((x) => x.state.isPaused)\n return notifyManager.batch(() =>\n pausedMutations.reduce(\n (promise, mutation) =>\n promise.then(() => mutation.continue().catch(noop)),\n Promise.resolve() as Promise<unknown>,\n ),\n )\n })\n .then(() => {\n this.#resuming = undefined\n })\n\n return this.#resuming\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAA8B;AAC9B,sBAAyB;AACzB,mBAAoC;AACpC,0BAA6B;AAH7B;AAmFO,IAAM,gBAAN,cAA4B,iCAAoC;AAAA,EAKrE,YAAmB,SAA8B,CAAC,GAAG;AACnD,UAAM;AADW;AAJnB;AACA;AACA;AAIE,uBAAK,YAAa,CAAC;AACnB,uBAAK,aAAc;AAAA,EACrB;AAAA,EAEA,MACE,QACA,SACA,OAC+C;AAC/C,UAAM,WAAW,IAAI,yBAAS;AAAA,MAC5B,eAAe;AAAA,MACf,YAAmB,EAAL,uBAAK,aAAL;AAAA,MACd,SAAS,OAAO,uBAAuB,OAAO;AAAA,MAC9C;AAAA,IACF,CAAC;AAED,SAAK,IAAI,QAAQ;AAEjB,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,UAA8C;AAChD,uBAAK,YAAW,KAAK,QAAQ;AAC7B,SAAK,OAAO,EAAE,MAAM,SAAS,SAAS,CAAC;AAAA,EACzC;AAAA,EAEA,OAAO,UAA8C;AACnD,uBAAK,YAAa,mBAAK,YAAW,OAAO,CAAC,MAAM,MAAM,QAAQ;AAC9D,SAAK,OAAO,EAAE,MAAM,WAAW,SAAS,CAAC;AAAA,EAC3C;AAAA,EAEA,QAAc;AACZ,uCAAc,MAAM,MAAM;AACxB,yBAAK,YAAW,QAAQ,CAAC,aAAa;AACpC,aAAK,OAAO,QAAQ;AAAA,MACtB,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEA,SAA0B;AACxB,WAAO,mBAAK;AAAA,EACd;AAAA,EAEA,KAME,SAC2D;AAC3D,UAAM,mBAAmB,EAAE,OAAO,MAAM,GAAG,QAAQ;AAEnD,WAAO,mBAAK,YAAW;AAAA,MAAK,CAAC,iBAC3B,4BAAc,kBAAkB,QAAQ;AAAA,IAC1C;AAAA,EACF;AAAA,EAEA,QAAQ,UAA2B,CAAC,GAAoB;AACtD,WAAO,mBAAK,YAAW;AAAA,MAAO,CAAC,iBAC7B,4BAAc,SAAS,QAAQ;AAAA,IACjC;AAAA,EACF;AAAA,EAEA,OAAO,OAAiC;AACtC,uCAAc,MAAM,MAAM;AACxB,WAAK,UAAU,QAAQ,CAAC,aAAa;AACnC,iBAAS,KAAK;AAAA,MAChB,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEA,wBAA0C;AACxC,uBAAK,YAAa,mBAAK,cAAa,QAAQ,QAAQ,GACjD,KAAK,MAAM;AACV,YAAM,kBAAkB,mBAAK,YAAW,OAAO,CAAC,MAAM,EAAE,MAAM,QAAQ;AACtE,aAAO,mCAAc;AAAA,QAAM,MACzB,gBAAgB;AAAA,UACd,CAAC,SAAS,aACR,QAAQ,KAAK,MAAM,SAAS,SAAS,EAAE,MAAM,iBAAI,CAAC;AAAA,UACpD,QAAQ,QAAQ;AAAA,QAClB;AAAA,MACF;AAAA,IACF,CAAC,EACA,KAAK,MAAM;AACV,yBAAK,WAAY;AAAA,IACnB,CAAC;AAEH,WAAO,mBAAK;AAAA,EACd;AACF;AAhGE;AACA;AACA;","names":[]}
1
+ {"version":3,"sources":["../../src/mutationCache.ts"],"sourcesContent":["import { notifyManager } from './notifyManager'\nimport { Mutation } from './mutation'\nimport { matchMutation, noop } from './utils'\nimport { Subscribable } from './subscribable'\nimport type { MutationObserver } from './mutationObserver'\nimport type { DefaultError, MutationOptions, NotifyEvent } from './types'\nimport type { QueryClient } from './queryClient'\nimport type { Action, MutationState } from './mutation'\nimport type { MutationFilters } from './utils'\n\n// TYPES\n\ninterface MutationCacheConfig {\n onError?: (\n error: DefaultError,\n variables: unknown,\n context: unknown,\n mutation: Mutation<unknown, unknown, unknown>,\n ) => Promise<unknown> | unknown\n onSuccess?: (\n data: unknown,\n variables: unknown,\n context: unknown,\n mutation: Mutation<unknown, unknown, unknown>,\n ) => Promise<unknown> | unknown\n onMutate?: (\n variables: unknown,\n mutation: Mutation<unknown, unknown, unknown>,\n ) => Promise<unknown> | unknown\n onSettled?: (\n data: unknown | undefined,\n error: DefaultError | null,\n variables: unknown,\n context: unknown,\n mutation: Mutation<unknown, unknown, unknown>,\n ) => Promise<unknown> | unknown\n}\n\ninterface NotifyEventMutationAdded extends NotifyEvent {\n type: 'added'\n mutation: Mutation<any, any, any, any>\n}\ninterface NotifyEventMutationRemoved extends NotifyEvent {\n type: 'removed'\n mutation: Mutation<any, any, any, any>\n}\n\ninterface NotifyEventMutationObserverAdded extends NotifyEvent {\n type: 'observerAdded'\n mutation: Mutation<any, any, any, any>\n observer: MutationObserver<any, any, any>\n}\n\ninterface NotifyEventMutationObserverRemoved extends NotifyEvent {\n type: 'observerRemoved'\n mutation: Mutation<any, any, any, any>\n observer: MutationObserver<any, any, any>\n}\n\ninterface NotifyEventMutationObserverOptionsUpdated extends NotifyEvent {\n type: 'observerOptionsUpdated'\n mutation?: Mutation<any, any, any, any>\n observer: MutationObserver<any, any, any, any>\n}\n\ninterface NotifyEventMutationUpdated extends NotifyEvent {\n type: 'updated'\n mutation: Mutation<any, any, any, any>\n action: Action<any, any, any, any>\n}\n\nexport type MutationCacheNotifyEvent =\n | NotifyEventMutationAdded\n | NotifyEventMutationRemoved\n | NotifyEventMutationObserverAdded\n | NotifyEventMutationObserverRemoved\n | NotifyEventMutationObserverOptionsUpdated\n | NotifyEventMutationUpdated\n\ntype MutationCacheListener = (event: MutationCacheNotifyEvent) => void\n\n// CLASS\n\nexport class MutationCache extends Subscribable<MutationCacheListener> {\n #mutations: Map<string, Array<Mutation<any, any, any, any>>>\n #mutationId: number\n\n constructor(public config: MutationCacheConfig = {}) {\n super()\n this.#mutations = new Map()\n this.#mutationId = Date.now()\n }\n\n build<TData, TError, TVariables, TContext>(\n client: QueryClient,\n options: MutationOptions<TData, TError, TVariables, TContext>,\n state?: MutationState<TData, TError, TVariables, TContext>,\n ): Mutation<TData, TError, TVariables, TContext> {\n const mutation = new Mutation({\n mutationCache: this,\n mutationId: ++this.#mutationId,\n options: client.defaultMutationOptions(options),\n state,\n })\n\n this.add(mutation)\n\n return mutation\n }\n\n add(mutation: Mutation<any, any, any, any>): void {\n const scope = scopeFor(mutation)\n const mutations = this.#mutations.get(scope) ?? []\n mutations.push(mutation)\n this.#mutations.set(scope, mutations)\n this.notify({ type: 'added', mutation })\n }\n\n remove(mutation: Mutation<any, any, any, any>): void {\n const scope = scopeFor(mutation)\n if (this.#mutations.has(scope)) {\n const mutations = this.#mutations\n .get(scope)\n ?.filter((x) => x !== mutation)\n if (mutations) {\n if (mutations.length === 0) {\n this.#mutations.delete(scope)\n } else {\n this.#mutations.set(scope, mutations)\n }\n }\n }\n\n this.notify({ type: 'removed', mutation })\n }\n\n canRun(mutation: Mutation<any, any, any, any>): boolean {\n const firstPendingMutation = this.#mutations\n .get(scopeFor(mutation))\n ?.find((m) => m.state.status === 'pending')\n\n // we can run if there is no current pending mutation (start use-case)\n // or if WE are the first pending mutation (continue use-case)\n return !firstPendingMutation || firstPendingMutation === mutation\n }\n\n runNext(mutation: Mutation<any, any, any, any>): Promise<unknown> {\n const foundMutation = this.#mutations\n .get(scopeFor(mutation))\n ?.find((m) => m !== mutation && m.state.isPaused)\n\n return foundMutation?.continue() ?? Promise.resolve()\n }\n\n clear(): void {\n notifyManager.batch(() => {\n this.getAll().forEach((mutation) => {\n this.remove(mutation)\n })\n })\n }\n\n getAll(): Array<Mutation> {\n return [...this.#mutations.values()].flat()\n }\n\n find<\n TData = unknown,\n TError = DefaultError,\n TVariables = any,\n TContext = unknown,\n >(\n filters: MutationFilters,\n ): Mutation<TData, TError, TVariables, TContext> | undefined {\n const defaultedFilters = { exact: true, ...filters }\n\n return this.getAll().find((mutation) =>\n matchMutation(defaultedFilters, mutation),\n ) as Mutation<TData, TError, TVariables, TContext> | undefined\n }\n\n findAll(filters: MutationFilters = {}): Array<Mutation> {\n return this.getAll().filter((mutation) => matchMutation(filters, mutation))\n }\n\n notify(event: MutationCacheNotifyEvent) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event)\n })\n })\n }\n\n resumePausedMutations(): Promise<unknown> {\n const pausedMutations = this.getAll().filter((x) => x.state.isPaused)\n\n return notifyManager.batch(() =>\n Promise.all(\n pausedMutations.map((mutation) => mutation.continue().catch(noop)),\n ),\n )\n }\n}\n\nfunction scopeFor(mutation: Mutation<any, any, any, any>) {\n return mutation.options.scope?.id ?? String(mutation.mutationId)\n}\n"],"mappings":"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","names":[]}
@@ -1,3 +1,3 @@
1
- export { M as MutationCache, d as MutationCacheNotifyEvent } from './queryClient--tFV-sQG.cjs';
1
+ export { M as MutationCache, d as MutationCacheNotifyEvent } from './types-5uTf3z3y.cjs';
2
2
  import './subscribable.cjs';
3
3
  import './removable.cjs';
@@ -1,3 +1,3 @@
1
- export { M as MutationCache, d as MutationCacheNotifyEvent } from './queryClient-K0zFyarY.js';
1
+ export { M as MutationCache, d as MutationCacheNotifyEvent } from './types-EkjjZlVm.js';
2
2
  import './subscribable.js';
3
3
  import './removable.js';
@@ -10,16 +10,15 @@ import { notifyManager } from "./notifyManager.js";
10
10
  import { Mutation } from "./mutation.js";
11
11
  import { matchMutation, noop } from "./utils.js";
12
12
  import { Subscribable } from "./subscribable.js";
13
- var _mutations, _mutationId, _resuming;
13
+ var _mutations, _mutationId;
14
14
  var MutationCache = class extends Subscribable {
15
15
  constructor(config = {}) {
16
16
  super();
17
17
  this.config = config;
18
18
  __privateAdd(this, _mutations, void 0);
19
19
  __privateAdd(this, _mutationId, void 0);
20
- __privateAdd(this, _resuming, void 0);
21
- __privateSet(this, _mutations, []);
22
- __privateSet(this, _mutationId, 0);
20
+ __privateSet(this, _mutations, /* @__PURE__ */ new Map());
21
+ __privateSet(this, _mutationId, Date.now());
23
22
  }
24
23
  build(client, options, state) {
25
24
  const mutation = new Mutation({
@@ -32,33 +31,55 @@ var MutationCache = class extends Subscribable {
32
31
  return mutation;
33
32
  }
34
33
  add(mutation) {
35
- __privateGet(this, _mutations).push(mutation);
34
+ const scope = scopeFor(mutation);
35
+ const mutations = __privateGet(this, _mutations).get(scope) ?? [];
36
+ mutations.push(mutation);
37
+ __privateGet(this, _mutations).set(scope, mutations);
36
38
  this.notify({ type: "added", mutation });
37
39
  }
38
40
  remove(mutation) {
39
- __privateSet(this, _mutations, __privateGet(this, _mutations).filter((x) => x !== mutation));
41
+ var _a;
42
+ const scope = scopeFor(mutation);
43
+ if (__privateGet(this, _mutations).has(scope)) {
44
+ const mutations = (_a = __privateGet(this, _mutations).get(scope)) == null ? void 0 : _a.filter((x) => x !== mutation);
45
+ if (mutations) {
46
+ if (mutations.length === 0) {
47
+ __privateGet(this, _mutations).delete(scope);
48
+ } else {
49
+ __privateGet(this, _mutations).set(scope, mutations);
50
+ }
51
+ }
52
+ }
40
53
  this.notify({ type: "removed", mutation });
41
54
  }
55
+ canRun(mutation) {
56
+ var _a;
57
+ const firstPendingMutation = (_a = __privateGet(this, _mutations).get(scopeFor(mutation))) == null ? void 0 : _a.find((m) => m.state.status === "pending");
58
+ return !firstPendingMutation || firstPendingMutation === mutation;
59
+ }
60
+ runNext(mutation) {
61
+ var _a;
62
+ const foundMutation = (_a = __privateGet(this, _mutations).get(scopeFor(mutation))) == null ? void 0 : _a.find((m) => m !== mutation && m.state.isPaused);
63
+ return (foundMutation == null ? void 0 : foundMutation.continue()) ?? Promise.resolve();
64
+ }
42
65
  clear() {
43
66
  notifyManager.batch(() => {
44
- __privateGet(this, _mutations).forEach((mutation) => {
67
+ this.getAll().forEach((mutation) => {
45
68
  this.remove(mutation);
46
69
  });
47
70
  });
48
71
  }
49
72
  getAll() {
50
- return __privateGet(this, _mutations);
73
+ return [...__privateGet(this, _mutations).values()].flat();
51
74
  }
52
75
  find(filters) {
53
76
  const defaultedFilters = { exact: true, ...filters };
54
- return __privateGet(this, _mutations).find(
77
+ return this.getAll().find(
55
78
  (mutation) => matchMutation(defaultedFilters, mutation)
56
79
  );
57
80
  }
58
81
  findAll(filters = {}) {
59
- return __privateGet(this, _mutations).filter(
60
- (mutation) => matchMutation(filters, mutation)
61
- );
82
+ return this.getAll().filter((mutation) => matchMutation(filters, mutation));
62
83
  }
63
84
  notify(event) {
64
85
  notifyManager.batch(() => {
@@ -68,23 +89,20 @@ var MutationCache = class extends Subscribable {
68
89
  });
69
90
  }
70
91
  resumePausedMutations() {
71
- __privateSet(this, _resuming, (__privateGet(this, _resuming) ?? Promise.resolve()).then(() => {
72
- const pausedMutations = __privateGet(this, _mutations).filter((x) => x.state.isPaused);
73
- return notifyManager.batch(
74
- () => pausedMutations.reduce(
75
- (promise, mutation) => promise.then(() => mutation.continue().catch(noop)),
76
- Promise.resolve()
77
- )
78
- );
79
- }).then(() => {
80
- __privateSet(this, _resuming, void 0);
81
- }));
82
- return __privateGet(this, _resuming);
92
+ const pausedMutations = this.getAll().filter((x) => x.state.isPaused);
93
+ return notifyManager.batch(
94
+ () => Promise.all(
95
+ pausedMutations.map((mutation) => mutation.continue().catch(noop))
96
+ )
97
+ );
83
98
  }
84
99
  };
85
100
  _mutations = new WeakMap();
86
101
  _mutationId = new WeakMap();
87
- _resuming = new WeakMap();
102
+ function scopeFor(mutation) {
103
+ var _a;
104
+ return ((_a = mutation.options.scope) == null ? void 0 : _a.id) ?? String(mutation.mutationId);
105
+ }
88
106
  export {
89
107
  MutationCache
90
108
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/mutationCache.ts"],"sourcesContent":["import { notifyManager } from './notifyManager'\nimport { Mutation } from './mutation'\nimport { matchMutation, noop } from './utils'\nimport { Subscribable } from './subscribable'\nimport type { MutationObserver } from './mutationObserver'\nimport type { DefaultError, MutationOptions, NotifyEvent } from './types'\nimport type { QueryClient } from './queryClient'\nimport type { Action, MutationState } from './mutation'\nimport type { MutationFilters } from './utils'\n\n// TYPES\n\ninterface MutationCacheConfig {\n onError?: (\n error: DefaultError,\n variables: unknown,\n context: unknown,\n mutation: Mutation<unknown, unknown, unknown>,\n ) => Promise<unknown> | unknown\n onSuccess?: (\n data: unknown,\n variables: unknown,\n context: unknown,\n mutation: Mutation<unknown, unknown, unknown>,\n ) => Promise<unknown> | unknown\n onMutate?: (\n variables: unknown,\n mutation: Mutation<unknown, unknown, unknown>,\n ) => Promise<unknown> | unknown\n onSettled?: (\n data: unknown | undefined,\n error: DefaultError | null,\n variables: unknown,\n context: unknown,\n mutation: Mutation<unknown, unknown, unknown>,\n ) => Promise<unknown> | unknown\n}\n\ninterface NotifyEventMutationAdded extends NotifyEvent {\n type: 'added'\n mutation: Mutation<any, any, any, any>\n}\ninterface NotifyEventMutationRemoved extends NotifyEvent {\n type: 'removed'\n mutation: Mutation<any, any, any, any>\n}\n\ninterface NotifyEventMutationObserverAdded extends NotifyEvent {\n type: 'observerAdded'\n mutation: Mutation<any, any, any, any>\n observer: MutationObserver<any, any, any>\n}\n\ninterface NotifyEventMutationObserverRemoved extends NotifyEvent {\n type: 'observerRemoved'\n mutation: Mutation<any, any, any, any>\n observer: MutationObserver<any, any, any>\n}\n\ninterface NotifyEventMutationObserverOptionsUpdated extends NotifyEvent {\n type: 'observerOptionsUpdated'\n mutation?: Mutation<any, any, any, any>\n observer: MutationObserver<any, any, any, any>\n}\n\ninterface NotifyEventMutationUpdated extends NotifyEvent {\n type: 'updated'\n mutation: Mutation<any, any, any, any>\n action: Action<any, any, any, any>\n}\n\nexport type MutationCacheNotifyEvent =\n | NotifyEventMutationAdded\n | NotifyEventMutationRemoved\n | NotifyEventMutationObserverAdded\n | NotifyEventMutationObserverRemoved\n | NotifyEventMutationObserverOptionsUpdated\n | NotifyEventMutationUpdated\n\ntype MutationCacheListener = (event: MutationCacheNotifyEvent) => void\n\n// CLASS\n\nexport class MutationCache extends Subscribable<MutationCacheListener> {\n #mutations: Array<Mutation<any, any, any, any>>\n #mutationId: number\n #resuming: Promise<unknown> | undefined\n\n constructor(public config: MutationCacheConfig = {}) {\n super()\n this.#mutations = []\n this.#mutationId = 0\n }\n\n build<TData, TError, TVariables, TContext>(\n client: QueryClient,\n options: MutationOptions<TData, TError, TVariables, TContext>,\n state?: MutationState<TData, TError, TVariables, TContext>,\n ): Mutation<TData, TError, TVariables, TContext> {\n const mutation = new Mutation({\n mutationCache: this,\n mutationId: ++this.#mutationId,\n options: client.defaultMutationOptions(options),\n state,\n })\n\n this.add(mutation)\n\n return mutation\n }\n\n add(mutation: Mutation<any, any, any, any>): void {\n this.#mutations.push(mutation)\n this.notify({ type: 'added', mutation })\n }\n\n remove(mutation: Mutation<any, any, any, any>): void {\n this.#mutations = this.#mutations.filter((x) => x !== mutation)\n this.notify({ type: 'removed', mutation })\n }\n\n clear(): void {\n notifyManager.batch(() => {\n this.#mutations.forEach((mutation) => {\n this.remove(mutation)\n })\n })\n }\n\n getAll(): Array<Mutation> {\n return this.#mutations\n }\n\n find<\n TData = unknown,\n TError = DefaultError,\n TVariables = any,\n TContext = unknown,\n >(\n filters: MutationFilters,\n ): Mutation<TData, TError, TVariables, TContext> | undefined {\n const defaultedFilters = { exact: true, ...filters }\n\n return this.#mutations.find((mutation) =>\n matchMutation(defaultedFilters, mutation),\n )\n }\n\n findAll(filters: MutationFilters = {}): Array<Mutation> {\n return this.#mutations.filter((mutation) =>\n matchMutation(filters, mutation),\n )\n }\n\n notify(event: MutationCacheNotifyEvent) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event)\n })\n })\n }\n\n resumePausedMutations(): Promise<unknown> {\n this.#resuming = (this.#resuming ?? Promise.resolve())\n .then(() => {\n const pausedMutations = this.#mutations.filter((x) => x.state.isPaused)\n return notifyManager.batch(() =>\n pausedMutations.reduce(\n (promise, mutation) =>\n promise.then(() => mutation.continue().catch(noop)),\n Promise.resolve() as Promise<unknown>,\n ),\n )\n })\n .then(() => {\n this.#resuming = undefined\n })\n\n return this.#resuming\n }\n}\n"],"mappings":";;;;;;;;AAAA,SAAS,qBAAqB;AAC9B,SAAS,gBAAgB;AACzB,SAAS,eAAe,YAAY;AACpC,SAAS,oBAAoB;AAH7B;AAmFO,IAAM,gBAAN,cAA4B,aAAoC;AAAA,EAKrE,YAAmB,SAA8B,CAAC,GAAG;AACnD,UAAM;AADW;AAJnB;AACA;AACA;AAIE,uBAAK,YAAa,CAAC;AACnB,uBAAK,aAAc;AAAA,EACrB;AAAA,EAEA,MACE,QACA,SACA,OAC+C;AAC/C,UAAM,WAAW,IAAI,SAAS;AAAA,MAC5B,eAAe;AAAA,MACf,YAAmB,EAAL,uBAAK,aAAL;AAAA,MACd,SAAS,OAAO,uBAAuB,OAAO;AAAA,MAC9C;AAAA,IACF,CAAC;AAED,SAAK,IAAI,QAAQ;AAEjB,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,UAA8C;AAChD,uBAAK,YAAW,KAAK,QAAQ;AAC7B,SAAK,OAAO,EAAE,MAAM,SAAS,SAAS,CAAC;AAAA,EACzC;AAAA,EAEA,OAAO,UAA8C;AACnD,uBAAK,YAAa,mBAAK,YAAW,OAAO,CAAC,MAAM,MAAM,QAAQ;AAC9D,SAAK,OAAO,EAAE,MAAM,WAAW,SAAS,CAAC;AAAA,EAC3C;AAAA,EAEA,QAAc;AACZ,kBAAc,MAAM,MAAM;AACxB,yBAAK,YAAW,QAAQ,CAAC,aAAa;AACpC,aAAK,OAAO,QAAQ;AAAA,MACtB,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEA,SAA0B;AACxB,WAAO,mBAAK;AAAA,EACd;AAAA,EAEA,KAME,SAC2D;AAC3D,UAAM,mBAAmB,EAAE,OAAO,MAAM,GAAG,QAAQ;AAEnD,WAAO,mBAAK,YAAW;AAAA,MAAK,CAAC,aAC3B,cAAc,kBAAkB,QAAQ;AAAA,IAC1C;AAAA,EACF;AAAA,EAEA,QAAQ,UAA2B,CAAC,GAAoB;AACtD,WAAO,mBAAK,YAAW;AAAA,MAAO,CAAC,aAC7B,cAAc,SAAS,QAAQ;AAAA,IACjC;AAAA,EACF;AAAA,EAEA,OAAO,OAAiC;AACtC,kBAAc,MAAM,MAAM;AACxB,WAAK,UAAU,QAAQ,CAAC,aAAa;AACnC,iBAAS,KAAK;AAAA,MAChB,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEA,wBAA0C;AACxC,uBAAK,YAAa,mBAAK,cAAa,QAAQ,QAAQ,GACjD,KAAK,MAAM;AACV,YAAM,kBAAkB,mBAAK,YAAW,OAAO,CAAC,MAAM,EAAE,MAAM,QAAQ;AACtE,aAAO,cAAc;AAAA,QAAM,MACzB,gBAAgB;AAAA,UACd,CAAC,SAAS,aACR,QAAQ,KAAK,MAAM,SAAS,SAAS,EAAE,MAAM,IAAI,CAAC;AAAA,UACpD,QAAQ,QAAQ;AAAA,QAClB;AAAA,MACF;AAAA,IACF,CAAC,EACA,KAAK,MAAM;AACV,yBAAK,WAAY;AAAA,IACnB,CAAC;AAEH,WAAO,mBAAK;AAAA,EACd;AACF;AAhGE;AACA;AACA;","names":[]}
1
+ {"version":3,"sources":["../../src/mutationCache.ts"],"sourcesContent":["import { notifyManager } from './notifyManager'\nimport { Mutation } from './mutation'\nimport { matchMutation, noop } from './utils'\nimport { Subscribable } from './subscribable'\nimport type { MutationObserver } from './mutationObserver'\nimport type { DefaultError, MutationOptions, NotifyEvent } from './types'\nimport type { QueryClient } from './queryClient'\nimport type { Action, MutationState } from './mutation'\nimport type { MutationFilters } from './utils'\n\n// TYPES\n\ninterface MutationCacheConfig {\n onError?: (\n error: DefaultError,\n variables: unknown,\n context: unknown,\n mutation: Mutation<unknown, unknown, unknown>,\n ) => Promise<unknown> | unknown\n onSuccess?: (\n data: unknown,\n variables: unknown,\n context: unknown,\n mutation: Mutation<unknown, unknown, unknown>,\n ) => Promise<unknown> | unknown\n onMutate?: (\n variables: unknown,\n mutation: Mutation<unknown, unknown, unknown>,\n ) => Promise<unknown> | unknown\n onSettled?: (\n data: unknown | undefined,\n error: DefaultError | null,\n variables: unknown,\n context: unknown,\n mutation: Mutation<unknown, unknown, unknown>,\n ) => Promise<unknown> | unknown\n}\n\ninterface NotifyEventMutationAdded extends NotifyEvent {\n type: 'added'\n mutation: Mutation<any, any, any, any>\n}\ninterface NotifyEventMutationRemoved extends NotifyEvent {\n type: 'removed'\n mutation: Mutation<any, any, any, any>\n}\n\ninterface NotifyEventMutationObserverAdded extends NotifyEvent {\n type: 'observerAdded'\n mutation: Mutation<any, any, any, any>\n observer: MutationObserver<any, any, any>\n}\n\ninterface NotifyEventMutationObserverRemoved extends NotifyEvent {\n type: 'observerRemoved'\n mutation: Mutation<any, any, any, any>\n observer: MutationObserver<any, any, any>\n}\n\ninterface NotifyEventMutationObserverOptionsUpdated extends NotifyEvent {\n type: 'observerOptionsUpdated'\n mutation?: Mutation<any, any, any, any>\n observer: MutationObserver<any, any, any, any>\n}\n\ninterface NotifyEventMutationUpdated extends NotifyEvent {\n type: 'updated'\n mutation: Mutation<any, any, any, any>\n action: Action<any, any, any, any>\n}\n\nexport type MutationCacheNotifyEvent =\n | NotifyEventMutationAdded\n | NotifyEventMutationRemoved\n | NotifyEventMutationObserverAdded\n | NotifyEventMutationObserverRemoved\n | NotifyEventMutationObserverOptionsUpdated\n | NotifyEventMutationUpdated\n\ntype MutationCacheListener = (event: MutationCacheNotifyEvent) => void\n\n// CLASS\n\nexport class MutationCache extends Subscribable<MutationCacheListener> {\n #mutations: Map<string, Array<Mutation<any, any, any, any>>>\n #mutationId: number\n\n constructor(public config: MutationCacheConfig = {}) {\n super()\n this.#mutations = new Map()\n this.#mutationId = Date.now()\n }\n\n build<TData, TError, TVariables, TContext>(\n client: QueryClient,\n options: MutationOptions<TData, TError, TVariables, TContext>,\n state?: MutationState<TData, TError, TVariables, TContext>,\n ): Mutation<TData, TError, TVariables, TContext> {\n const mutation = new Mutation({\n mutationCache: this,\n mutationId: ++this.#mutationId,\n options: client.defaultMutationOptions(options),\n state,\n })\n\n this.add(mutation)\n\n return mutation\n }\n\n add(mutation: Mutation<any, any, any, any>): void {\n const scope = scopeFor(mutation)\n const mutations = this.#mutations.get(scope) ?? []\n mutations.push(mutation)\n this.#mutations.set(scope, mutations)\n this.notify({ type: 'added', mutation })\n }\n\n remove(mutation: Mutation<any, any, any, any>): void {\n const scope = scopeFor(mutation)\n if (this.#mutations.has(scope)) {\n const mutations = this.#mutations\n .get(scope)\n ?.filter((x) => x !== mutation)\n if (mutations) {\n if (mutations.length === 0) {\n this.#mutations.delete(scope)\n } else {\n this.#mutations.set(scope, mutations)\n }\n }\n }\n\n this.notify({ type: 'removed', mutation })\n }\n\n canRun(mutation: Mutation<any, any, any, any>): boolean {\n const firstPendingMutation = this.#mutations\n .get(scopeFor(mutation))\n ?.find((m) => m.state.status === 'pending')\n\n // we can run if there is no current pending mutation (start use-case)\n // or if WE are the first pending mutation (continue use-case)\n return !firstPendingMutation || firstPendingMutation === mutation\n }\n\n runNext(mutation: Mutation<any, any, any, any>): Promise<unknown> {\n const foundMutation = this.#mutations\n .get(scopeFor(mutation))\n ?.find((m) => m !== mutation && m.state.isPaused)\n\n return foundMutation?.continue() ?? Promise.resolve()\n }\n\n clear(): void {\n notifyManager.batch(() => {\n this.getAll().forEach((mutation) => {\n this.remove(mutation)\n })\n })\n }\n\n getAll(): Array<Mutation> {\n return [...this.#mutations.values()].flat()\n }\n\n find<\n TData = unknown,\n TError = DefaultError,\n TVariables = any,\n TContext = unknown,\n >(\n filters: MutationFilters,\n ): Mutation<TData, TError, TVariables, TContext> | undefined {\n const defaultedFilters = { exact: true, ...filters }\n\n return this.getAll().find((mutation) =>\n matchMutation(defaultedFilters, mutation),\n ) as Mutation<TData, TError, TVariables, TContext> | undefined\n }\n\n findAll(filters: MutationFilters = {}): Array<Mutation> {\n return this.getAll().filter((mutation) => matchMutation(filters, mutation))\n }\n\n notify(event: MutationCacheNotifyEvent) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event)\n })\n })\n }\n\n resumePausedMutations(): Promise<unknown> {\n const pausedMutations = this.getAll().filter((x) => x.state.isPaused)\n\n return notifyManager.batch(() =>\n Promise.all(\n pausedMutations.map((mutation) => mutation.continue().catch(noop)),\n ),\n )\n }\n}\n\nfunction scopeFor(mutation: Mutation<any, any, any, any>) {\n return mutation.options.scope?.id ?? String(mutation.mutationId)\n}\n"],"mappings":"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","names":[]}
@@ -1,3 +1,3 @@
1
1
  import './subscribable.cjs';
2
- export { e as MutationObserver } from './queryClient--tFV-sQG.cjs';
2
+ export { e as MutationObserver } from './types-5uTf3z3y.cjs';
3
3
  import './removable.cjs';
@@ -1,3 +1,3 @@
1
1
  import './subscribable.js';
2
- export { e as MutationObserver } from './queryClient-K0zFyarY.js';
2
+ export { e as MutationObserver } from './types-EkjjZlVm.js';
3
3
  import './removable.js';
@@ -1,4 +1,4 @@
1
- import { ak as QueryObserverResult, b as QueryClient, W as QueryObserverOptions, aP as NotifyOptions, o as Query, t as QueryKey, c as QueryObserver } from './queryClient--tFV-sQG.cjs';
1
+ import { ak as QueryObserverResult, b as QueryClient, W as QueryObserverOptions, aQ as NotifyOptions, o as Query, t as QueryKey, c as QueryObserver } from './types-5uTf3z3y.cjs';
2
2
  import { Subscribable } from './subscribable.cjs';
3
3
  import './removable.cjs';
4
4
 
@@ -1,4 +1,4 @@
1
- import { ak as QueryObserverResult, b as QueryClient, W as QueryObserverOptions, aP as NotifyOptions, o as Query, t as QueryKey, c as QueryObserver } from './queryClient-K0zFyarY.js';
1
+ import { ak as QueryObserverResult, b as QueryClient, W as QueryObserverOptions, aQ as NotifyOptions, o as Query, t as QueryKey, c as QueryObserver } from './types-EkjjZlVm.js';
2
2
  import { Subscribable } from './subscribable.js';
3
3
  import './removable.js';
4
4
 
@@ -324,9 +324,10 @@ var Query = class extends import_removable.Removable {
324
324
  },
325
325
  retry: context.options.retry,
326
326
  retryDelay: context.options.retryDelay,
327
- networkMode: context.options.networkMode
327
+ networkMode: context.options.networkMode,
328
+ canRun: () => true
328
329
  }));
329
- return __privateGet(this, _retryer).promise;
330
+ return __privateGet(this, _retryer).start();
330
331
  }
331
332
  };
332
333
  _initialState = new WeakMap();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/query.ts"],"sourcesContent":["import { noop, replaceData, skipToken, timeUntilStale } from './utils'\nimport { notifyManager } from './notifyManager'\nimport { canFetch, createRetryer, isCancelledError } from './retryer'\nimport { Removable } from './removable'\nimport type {\n CancelOptions,\n DefaultError,\n FetchStatus,\n InitialDataFunction,\n OmitKeyof,\n QueryFunctionContext,\n QueryKey,\n QueryMeta,\n QueryOptions,\n QueryStatus,\n SetDataOptions,\n} from './types'\nimport type { QueryCache } from './queryCache'\nimport type { QueryObserver } from './queryObserver'\nimport type { Retryer } from './retryer'\n\n// TYPES\n\ninterface QueryConfig<\n TQueryFnData,\n TError,\n TData,\n TQueryKey extends QueryKey = QueryKey,\n> {\n cache: QueryCache\n queryKey: TQueryKey\n queryHash: string\n options?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>\n defaultOptions?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>\n state?: QueryState<TData, TError>\n}\n\nexport interface QueryState<TData = unknown, TError = DefaultError> {\n data: TData | undefined\n dataUpdateCount: number\n dataUpdatedAt: number\n error: TError | null\n errorUpdateCount: number\n errorUpdatedAt: number\n fetchFailureCount: number\n fetchFailureReason: TError | null\n fetchMeta: FetchMeta | null\n isInvalidated: boolean\n status: QueryStatus\n fetchStatus: FetchStatus\n}\n\nexport interface FetchContext<\n TQueryFnData,\n TError,\n TData,\n TQueryKey extends QueryKey = QueryKey,\n> {\n fetchFn: () => unknown | Promise<unknown>\n fetchOptions?: FetchOptions\n signal: AbortSignal\n options: QueryOptions<TQueryFnData, TError, TData, any>\n queryKey: TQueryKey\n state: QueryState<TData, TError>\n}\n\nexport interface QueryBehavior<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> {\n onFetch: (\n context: FetchContext<TQueryFnData, TError, TData, TQueryKey>,\n query: Query,\n ) => void\n}\n\nexport type FetchDirection = 'forward' | 'backward'\n\nexport interface FetchMeta {\n fetchMore?: { direction: FetchDirection }\n}\n\nexport interface FetchOptions {\n cancelRefetch?: boolean\n meta?: FetchMeta\n}\n\ninterface FailedAction<TError> {\n type: 'failed'\n failureCount: number\n error: TError\n}\n\ninterface FetchAction {\n type: 'fetch'\n meta?: FetchMeta\n}\n\ninterface SuccessAction<TData> {\n data: TData | undefined\n type: 'success'\n dataUpdatedAt?: number\n manual?: boolean\n}\n\ninterface ErrorAction<TError> {\n type: 'error'\n error: TError\n}\n\ninterface InvalidateAction {\n type: 'invalidate'\n}\n\ninterface PauseAction {\n type: 'pause'\n}\n\ninterface ContinueAction {\n type: 'continue'\n}\n\ninterface SetStateAction<TData, TError> {\n type: 'setState'\n state: Partial<QueryState<TData, TError>>\n setStateOptions?: SetStateOptions\n}\n\nexport type Action<TData, TError> =\n | ContinueAction\n | ErrorAction<TError>\n | FailedAction<TError>\n | FetchAction\n | InvalidateAction\n | PauseAction\n | SetStateAction<TData, TError>\n | SuccessAction<TData>\n\nexport interface SetStateOptions {\n meta?: any\n}\n\n// CLASS\n\nexport class Query<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> extends Removable {\n queryKey: TQueryKey\n queryHash: string\n options!: QueryOptions<TQueryFnData, TError, TData, TQueryKey>\n state: QueryState<TData, TError>\n isFetchingOptimistic?: boolean\n\n #initialState: QueryState<TData, TError>\n #revertState?: QueryState<TData, TError>\n #cache: QueryCache\n #retryer?: Retryer<TData>\n #observers: Array<QueryObserver<any, any, any, any, any>>\n #defaultOptions?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>\n #abortSignalConsumed: boolean\n\n constructor(config: QueryConfig<TQueryFnData, TError, TData, TQueryKey>) {\n super()\n\n this.#abortSignalConsumed = false\n this.#defaultOptions = config.defaultOptions\n this.setOptions(config.options)\n this.#observers = []\n this.#cache = config.cache\n this.queryKey = config.queryKey\n this.queryHash = config.queryHash\n this.#initialState = config.state || getDefaultState(this.options)\n this.state = this.#initialState\n this.scheduleGc()\n }\n get meta(): QueryMeta | undefined {\n return this.options.meta\n }\n\n setOptions(\n options?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n ): void {\n this.options = { ...this.#defaultOptions, ...options }\n\n this.updateGcTime(this.options.gcTime)\n }\n\n protected optionalRemove() {\n if (!this.#observers.length && this.state.fetchStatus === 'idle') {\n this.#cache.remove(this)\n }\n }\n\n setData(\n newData: TData,\n options?: SetDataOptions & { manual: boolean },\n ): TData {\n const data = replaceData(this.state.data, newData, this.options)\n\n // Set data and mark it as cached\n this.#dispatch({\n data,\n type: 'success',\n dataUpdatedAt: options?.updatedAt,\n manual: options?.manual,\n })\n\n return data\n }\n\n setState(\n state: Partial<QueryState<TData, TError>>,\n setStateOptions?: SetStateOptions,\n ): void {\n this.#dispatch({ type: 'setState', state, setStateOptions })\n }\n\n cancel(options?: CancelOptions): Promise<void> {\n const promise = this.#retryer?.promise\n this.#retryer?.cancel(options)\n return promise ? promise.then(noop).catch(noop) : Promise.resolve()\n }\n\n destroy(): void {\n super.destroy()\n\n this.cancel({ silent: true })\n }\n\n reset(): void {\n this.destroy()\n this.setState(this.#initialState)\n }\n\n isActive(): boolean {\n return this.#observers.some(\n (observer) => observer.options.enabled !== false,\n )\n }\n\n isDisabled(): boolean {\n return this.getObserversCount() > 0 && !this.isActive()\n }\n\n isStale(): boolean {\n if (this.state.isInvalidated) {\n return true\n }\n\n if (this.getObserversCount() > 0) {\n return this.#observers.some(\n (observer) => observer.getCurrentResult().isStale,\n )\n }\n\n return this.state.data === undefined\n }\n\n isStaleByTime(staleTime = 0): boolean {\n return (\n this.state.isInvalidated ||\n this.state.data === undefined ||\n !timeUntilStale(this.state.dataUpdatedAt, staleTime)\n )\n }\n\n onFocus(): void {\n const observer = this.#observers.find((x) => x.shouldFetchOnWindowFocus())\n\n observer?.refetch({ cancelRefetch: false })\n\n // Continue fetch if currently paused\n this.#retryer?.continue()\n }\n\n onOnline(): void {\n const observer = this.#observers.find((x) => x.shouldFetchOnReconnect())\n\n observer?.refetch({ cancelRefetch: false })\n\n // Continue fetch if currently paused\n this.#retryer?.continue()\n }\n\n addObserver(observer: QueryObserver<any, any, any, any, any>): void {\n if (!this.#observers.includes(observer)) {\n this.#observers.push(observer)\n\n // Stop the query from being garbage collected\n this.clearGcTimeout()\n\n this.#cache.notify({ type: 'observerAdded', query: this, observer })\n }\n }\n\n removeObserver(observer: QueryObserver<any, any, any, any, any>): void {\n if (this.#observers.includes(observer)) {\n this.#observers = this.#observers.filter((x) => x !== observer)\n\n if (!this.#observers.length) {\n // If the transport layer does not support cancellation\n // we'll let the query continue so the result can be cached\n if (this.#retryer) {\n if (this.#abortSignalConsumed) {\n this.#retryer.cancel({ revert: true })\n } else {\n this.#retryer.cancelRetry()\n }\n }\n\n this.scheduleGc()\n }\n\n this.#cache.notify({ type: 'observerRemoved', query: this, observer })\n }\n }\n\n getObserversCount(): number {\n return this.#observers.length\n }\n\n invalidate(): void {\n if (!this.state.isInvalidated) {\n this.#dispatch({ type: 'invalidate' })\n }\n }\n\n fetch(\n options?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n fetchOptions?: FetchOptions,\n ): Promise<TData> {\n if (this.state.fetchStatus !== 'idle') {\n if (this.state.data !== undefined && fetchOptions?.cancelRefetch) {\n // Silently cancel current fetch if the user wants to cancel refetch\n this.cancel({ silent: true })\n } else if (this.#retryer) {\n // make sure that retries that were potentially cancelled due to unmounts can continue\n this.#retryer.continueRetry()\n // Return current promise if we are already fetching\n return this.#retryer.promise\n }\n }\n\n // Update config if passed, otherwise the config from the last execution is used\n if (options) {\n this.setOptions(options)\n }\n\n // Use the options from the first observer with a query function if no function is found.\n // This can happen when the query is hydrated or created with setQueryData.\n if (!this.options.queryFn) {\n const observer = this.#observers.find((x) => x.options.queryFn)\n if (observer) {\n this.setOptions(observer.options)\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (!Array.isArray(this.options.queryKey)) {\n console.error(\n `As of v4, queryKey needs to be an Array. If you are using a string like 'repoData', please change it to an Array, e.g. ['repoData']`,\n )\n }\n }\n\n const abortController = new AbortController()\n\n // Create query function context\n const queryFnContext: OmitKeyof<\n QueryFunctionContext<TQueryKey>,\n 'signal'\n > = {\n queryKey: this.queryKey,\n meta: this.meta,\n }\n\n // Adds an enumerable signal property to the object that\n // which sets abortSignalConsumed to true when the signal\n // is read.\n const addSignalProperty = (object: unknown) => {\n Object.defineProperty(object, 'signal', {\n enumerable: true,\n get: () => {\n this.#abortSignalConsumed = true\n return abortController.signal\n },\n })\n }\n\n addSignalProperty(queryFnContext)\n\n // Create fetch function\n const fetchFn = () => {\n if (process.env.NODE_ENV !== 'production') {\n if (this.options.queryFn === skipToken) {\n console.error(\n `Attempted to invoke queryFn when set to skipToken. This is likely a configuration error. Query hash: '${this.options.queryHash}'`,\n )\n }\n }\n\n if (!this.options.queryFn || this.options.queryFn === skipToken) {\n return Promise.reject(\n new Error(`Missing queryFn: '${this.options.queryHash}'`),\n )\n }\n\n this.#abortSignalConsumed = false\n if (this.options.persister) {\n return this.options.persister(\n this.options.queryFn,\n queryFnContext as QueryFunctionContext<TQueryKey>,\n this as unknown as Query,\n )\n }\n\n return this.options.queryFn(\n queryFnContext as QueryFunctionContext<TQueryKey>,\n )\n }\n\n // Trigger behavior hook\n const context: OmitKeyof<\n FetchContext<TQueryFnData, TError, TData, TQueryKey>,\n 'signal'\n > = {\n fetchOptions,\n options: this.options,\n queryKey: this.queryKey,\n state: this.state,\n fetchFn,\n }\n\n addSignalProperty(context)\n\n this.options.behavior?.onFetch(\n context as FetchContext<TQueryFnData, TError, TData, TQueryKey>,\n this as unknown as Query,\n )\n\n // Store state in case the current fetch needs to be reverted\n this.#revertState = this.state\n\n // Set to fetching state if not already in it\n if (\n this.state.fetchStatus === 'idle' ||\n this.state.fetchMeta !== context.fetchOptions?.meta\n ) {\n this.#dispatch({ type: 'fetch', meta: context.fetchOptions?.meta })\n }\n\n const onError = (error: TError | { silent?: boolean }) => {\n // Optimistically update state if needed\n if (!(isCancelledError(error) && error.silent)) {\n this.#dispatch({\n type: 'error',\n error: error as TError,\n })\n }\n\n if (!isCancelledError(error)) {\n // Notify cache callback\n this.#cache.config.onError?.(\n error as any,\n this as Query<any, any, any, any>,\n )\n this.#cache.config.onSettled?.(\n this.state.data,\n error as any,\n this as Query<any, any, any, any>,\n )\n }\n\n if (!this.isFetchingOptimistic) {\n // Schedule query gc after fetching\n this.scheduleGc()\n }\n this.isFetchingOptimistic = false\n }\n\n // Try to fetch the data\n this.#retryer = createRetryer({\n fn: context.fetchFn as () => Promise<TData>,\n abort: abortController.abort.bind(abortController),\n onSuccess: (data) => {\n if (data === undefined) {\n if (process.env.NODE_ENV !== 'production') {\n console.error(\n `Query data cannot be undefined. Please make sure to return a value other than undefined from your query function. Affected query key: ${this.queryHash}`,\n )\n }\n onError(new Error(`${this.queryHash} data is undefined`) as any)\n return\n }\n\n this.setData(data)\n\n // Notify cache callback\n this.#cache.config.onSuccess?.(data, this as Query<any, any, any, any>)\n this.#cache.config.onSettled?.(\n data,\n this.state.error as any,\n this as Query<any, any, any, any>,\n )\n\n if (!this.isFetchingOptimistic) {\n // Schedule query gc after fetching\n this.scheduleGc()\n }\n this.isFetchingOptimistic = false\n },\n onError,\n onFail: (failureCount, error) => {\n this.#dispatch({ type: 'failed', failureCount, error })\n },\n onPause: () => {\n this.#dispatch({ type: 'pause' })\n },\n onContinue: () => {\n this.#dispatch({ type: 'continue' })\n },\n retry: context.options.retry,\n retryDelay: context.options.retryDelay,\n networkMode: context.options.networkMode,\n })\n\n return this.#retryer.promise\n }\n\n #dispatch(action: Action<TData, TError>): void {\n const reducer = (\n state: QueryState<TData, TError>,\n ): QueryState<TData, TError> => {\n switch (action.type) {\n case 'failed':\n return {\n ...state,\n fetchFailureCount: action.failureCount,\n fetchFailureReason: action.error,\n }\n case 'pause':\n return {\n ...state,\n fetchStatus: 'paused',\n }\n case 'continue':\n return {\n ...state,\n fetchStatus: 'fetching',\n }\n case 'fetch':\n return {\n ...state,\n ...fetchState(state.data, this.options),\n fetchMeta: action.meta ?? null,\n }\n case 'success':\n return {\n ...state,\n data: action.data,\n dataUpdateCount: state.dataUpdateCount + 1,\n dataUpdatedAt: action.dataUpdatedAt ?? Date.now(),\n error: null,\n isInvalidated: false,\n status: 'success',\n ...(!action.manual && {\n fetchStatus: 'idle',\n fetchFailureCount: 0,\n fetchFailureReason: null,\n }),\n }\n case 'error':\n const error = action.error as unknown\n\n if (isCancelledError(error) && error.revert && this.#revertState) {\n return { ...this.#revertState, fetchStatus: 'idle' }\n }\n\n return {\n ...state,\n error: error as TError,\n errorUpdateCount: state.errorUpdateCount + 1,\n errorUpdatedAt: Date.now(),\n fetchFailureCount: state.fetchFailureCount + 1,\n fetchFailureReason: error as TError,\n fetchStatus: 'idle',\n status: 'error',\n }\n case 'invalidate':\n return {\n ...state,\n isInvalidated: true,\n }\n case 'setState':\n return {\n ...state,\n ...action.state,\n }\n }\n }\n\n this.state = reducer(this.state)\n\n notifyManager.batch(() => {\n this.#observers.forEach((observer) => {\n observer.onQueryUpdate()\n })\n\n this.#cache.notify({ query: this, type: 'updated', action })\n })\n }\n}\n\nexport function fetchState<\n TQueryFnData,\n TError,\n TData,\n TQueryKey extends QueryKey,\n>(\n data: TData | undefined,\n options: QueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n) {\n return {\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchStatus: canFetch(options.networkMode) ? 'fetching' : 'paused',\n ...(data === undefined &&\n ({\n error: null,\n status: 'pending',\n } as const)),\n } as const\n}\n\nfunction getDefaultState<\n TQueryFnData,\n TError,\n TData,\n TQueryKey extends QueryKey,\n>(\n options: QueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n): QueryState<TData, TError> {\n const data =\n typeof options.initialData === 'function'\n ? (options.initialData as InitialDataFunction<TData>)()\n : options.initialData\n\n const hasData = data !== undefined\n\n const initialDataUpdatedAt = hasData\n ? typeof options.initialDataUpdatedAt === 'function'\n ? (options.initialDataUpdatedAt as () => number | undefined)()\n : options.initialDataUpdatedAt\n : 0\n\n return {\n data,\n dataUpdateCount: 0,\n dataUpdatedAt: hasData ? initialDataUpdatedAt ?? Date.now() : 0,\n error: null,\n errorUpdateCount: 0,\n errorUpdatedAt: 0,\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchMeta: null,\n isInvalidated: false,\n status: hasData ? 'success' : 'pending',\n fetchStatus: 'idle',\n }\n}\n"],"mappings":"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","names":["_a","_b","_c"]}
1
+ {"version":3,"sources":["../../src/query.ts"],"sourcesContent":["import { noop, replaceData, skipToken, timeUntilStale } from './utils'\nimport { notifyManager } from './notifyManager'\nimport { canFetch, createRetryer, isCancelledError } from './retryer'\nimport { Removable } from './removable'\nimport type {\n CancelOptions,\n DefaultError,\n FetchStatus,\n InitialDataFunction,\n OmitKeyof,\n QueryFunctionContext,\n QueryKey,\n QueryMeta,\n QueryOptions,\n QueryStatus,\n SetDataOptions,\n} from './types'\nimport type { QueryCache } from './queryCache'\nimport type { QueryObserver } from './queryObserver'\nimport type { Retryer } from './retryer'\n\n// TYPES\n\ninterface QueryConfig<\n TQueryFnData,\n TError,\n TData,\n TQueryKey extends QueryKey = QueryKey,\n> {\n cache: QueryCache\n queryKey: TQueryKey\n queryHash: string\n options?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>\n defaultOptions?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>\n state?: QueryState<TData, TError>\n}\n\nexport interface QueryState<TData = unknown, TError = DefaultError> {\n data: TData | undefined\n dataUpdateCount: number\n dataUpdatedAt: number\n error: TError | null\n errorUpdateCount: number\n errorUpdatedAt: number\n fetchFailureCount: number\n fetchFailureReason: TError | null\n fetchMeta: FetchMeta | null\n isInvalidated: boolean\n status: QueryStatus\n fetchStatus: FetchStatus\n}\n\nexport interface FetchContext<\n TQueryFnData,\n TError,\n TData,\n TQueryKey extends QueryKey = QueryKey,\n> {\n fetchFn: () => unknown | Promise<unknown>\n fetchOptions?: FetchOptions\n signal: AbortSignal\n options: QueryOptions<TQueryFnData, TError, TData, any>\n queryKey: TQueryKey\n state: QueryState<TData, TError>\n}\n\nexport interface QueryBehavior<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> {\n onFetch: (\n context: FetchContext<TQueryFnData, TError, TData, TQueryKey>,\n query: Query,\n ) => void\n}\n\nexport type FetchDirection = 'forward' | 'backward'\n\nexport interface FetchMeta {\n fetchMore?: { direction: FetchDirection }\n}\n\nexport interface FetchOptions {\n cancelRefetch?: boolean\n meta?: FetchMeta\n}\n\ninterface FailedAction<TError> {\n type: 'failed'\n failureCount: number\n error: TError\n}\n\ninterface FetchAction {\n type: 'fetch'\n meta?: FetchMeta\n}\n\ninterface SuccessAction<TData> {\n data: TData | undefined\n type: 'success'\n dataUpdatedAt?: number\n manual?: boolean\n}\n\ninterface ErrorAction<TError> {\n type: 'error'\n error: TError\n}\n\ninterface InvalidateAction {\n type: 'invalidate'\n}\n\ninterface PauseAction {\n type: 'pause'\n}\n\ninterface ContinueAction {\n type: 'continue'\n}\n\ninterface SetStateAction<TData, TError> {\n type: 'setState'\n state: Partial<QueryState<TData, TError>>\n setStateOptions?: SetStateOptions\n}\n\nexport type Action<TData, TError> =\n | ContinueAction\n | ErrorAction<TError>\n | FailedAction<TError>\n | FetchAction\n | InvalidateAction\n | PauseAction\n | SetStateAction<TData, TError>\n | SuccessAction<TData>\n\nexport interface SetStateOptions {\n meta?: any\n}\n\n// CLASS\n\nexport class Query<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> extends Removable {\n queryKey: TQueryKey\n queryHash: string\n options!: QueryOptions<TQueryFnData, TError, TData, TQueryKey>\n state: QueryState<TData, TError>\n isFetchingOptimistic?: boolean\n\n #initialState: QueryState<TData, TError>\n #revertState?: QueryState<TData, TError>\n #cache: QueryCache\n #retryer?: Retryer<TData>\n #observers: Array<QueryObserver<any, any, any, any, any>>\n #defaultOptions?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>\n #abortSignalConsumed: boolean\n\n constructor(config: QueryConfig<TQueryFnData, TError, TData, TQueryKey>) {\n super()\n\n this.#abortSignalConsumed = false\n this.#defaultOptions = config.defaultOptions\n this.setOptions(config.options)\n this.#observers = []\n this.#cache = config.cache\n this.queryKey = config.queryKey\n this.queryHash = config.queryHash\n this.#initialState = config.state || getDefaultState(this.options)\n this.state = this.#initialState\n this.scheduleGc()\n }\n get meta(): QueryMeta | undefined {\n return this.options.meta\n }\n\n setOptions(\n options?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n ): void {\n this.options = { ...this.#defaultOptions, ...options }\n\n this.updateGcTime(this.options.gcTime)\n }\n\n protected optionalRemove() {\n if (!this.#observers.length && this.state.fetchStatus === 'idle') {\n this.#cache.remove(this)\n }\n }\n\n setData(\n newData: TData,\n options?: SetDataOptions & { manual: boolean },\n ): TData {\n const data = replaceData(this.state.data, newData, this.options)\n\n // Set data and mark it as cached\n this.#dispatch({\n data,\n type: 'success',\n dataUpdatedAt: options?.updatedAt,\n manual: options?.manual,\n })\n\n return data\n }\n\n setState(\n state: Partial<QueryState<TData, TError>>,\n setStateOptions?: SetStateOptions,\n ): void {\n this.#dispatch({ type: 'setState', state, setStateOptions })\n }\n\n cancel(options?: CancelOptions): Promise<void> {\n const promise = this.#retryer?.promise\n this.#retryer?.cancel(options)\n return promise ? promise.then(noop).catch(noop) : Promise.resolve()\n }\n\n destroy(): void {\n super.destroy()\n\n this.cancel({ silent: true })\n }\n\n reset(): void {\n this.destroy()\n this.setState(this.#initialState)\n }\n\n isActive(): boolean {\n return this.#observers.some(\n (observer) => observer.options.enabled !== false,\n )\n }\n\n isDisabled(): boolean {\n return this.getObserversCount() > 0 && !this.isActive()\n }\n\n isStale(): boolean {\n if (this.state.isInvalidated) {\n return true\n }\n\n if (this.getObserversCount() > 0) {\n return this.#observers.some(\n (observer) => observer.getCurrentResult().isStale,\n )\n }\n\n return this.state.data === undefined\n }\n\n isStaleByTime(staleTime = 0): boolean {\n return (\n this.state.isInvalidated ||\n this.state.data === undefined ||\n !timeUntilStale(this.state.dataUpdatedAt, staleTime)\n )\n }\n\n onFocus(): void {\n const observer = this.#observers.find((x) => x.shouldFetchOnWindowFocus())\n\n observer?.refetch({ cancelRefetch: false })\n\n // Continue fetch if currently paused\n this.#retryer?.continue()\n }\n\n onOnline(): void {\n const observer = this.#observers.find((x) => x.shouldFetchOnReconnect())\n\n observer?.refetch({ cancelRefetch: false })\n\n // Continue fetch if currently paused\n this.#retryer?.continue()\n }\n\n addObserver(observer: QueryObserver<any, any, any, any, any>): void {\n if (!this.#observers.includes(observer)) {\n this.#observers.push(observer)\n\n // Stop the query from being garbage collected\n this.clearGcTimeout()\n\n this.#cache.notify({ type: 'observerAdded', query: this, observer })\n }\n }\n\n removeObserver(observer: QueryObserver<any, any, any, any, any>): void {\n if (this.#observers.includes(observer)) {\n this.#observers = this.#observers.filter((x) => x !== observer)\n\n if (!this.#observers.length) {\n // If the transport layer does not support cancellation\n // we'll let the query continue so the result can be cached\n if (this.#retryer) {\n if (this.#abortSignalConsumed) {\n this.#retryer.cancel({ revert: true })\n } else {\n this.#retryer.cancelRetry()\n }\n }\n\n this.scheduleGc()\n }\n\n this.#cache.notify({ type: 'observerRemoved', query: this, observer })\n }\n }\n\n getObserversCount(): number {\n return this.#observers.length\n }\n\n invalidate(): void {\n if (!this.state.isInvalidated) {\n this.#dispatch({ type: 'invalidate' })\n }\n }\n\n fetch(\n options?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n fetchOptions?: FetchOptions,\n ): Promise<TData> {\n if (this.state.fetchStatus !== 'idle') {\n if (this.state.data !== undefined && fetchOptions?.cancelRefetch) {\n // Silently cancel current fetch if the user wants to cancel refetch\n this.cancel({ silent: true })\n } else if (this.#retryer) {\n // make sure that retries that were potentially cancelled due to unmounts can continue\n this.#retryer.continueRetry()\n // Return current promise if we are already fetching\n return this.#retryer.promise\n }\n }\n\n // Update config if passed, otherwise the config from the last execution is used\n if (options) {\n this.setOptions(options)\n }\n\n // Use the options from the first observer with a query function if no function is found.\n // This can happen when the query is hydrated or created with setQueryData.\n if (!this.options.queryFn) {\n const observer = this.#observers.find((x) => x.options.queryFn)\n if (observer) {\n this.setOptions(observer.options)\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (!Array.isArray(this.options.queryKey)) {\n console.error(\n `As of v4, queryKey needs to be an Array. If you are using a string like 'repoData', please change it to an Array, e.g. ['repoData']`,\n )\n }\n }\n\n const abortController = new AbortController()\n\n // Create query function context\n const queryFnContext: OmitKeyof<\n QueryFunctionContext<TQueryKey>,\n 'signal'\n > = {\n queryKey: this.queryKey,\n meta: this.meta,\n }\n\n // Adds an enumerable signal property to the object that\n // which sets abortSignalConsumed to true when the signal\n // is read.\n const addSignalProperty = (object: unknown) => {\n Object.defineProperty(object, 'signal', {\n enumerable: true,\n get: () => {\n this.#abortSignalConsumed = true\n return abortController.signal\n },\n })\n }\n\n addSignalProperty(queryFnContext)\n\n // Create fetch function\n const fetchFn = () => {\n if (process.env.NODE_ENV !== 'production') {\n if (this.options.queryFn === skipToken) {\n console.error(\n `Attempted to invoke queryFn when set to skipToken. This is likely a configuration error. Query hash: '${this.options.queryHash}'`,\n )\n }\n }\n\n if (!this.options.queryFn || this.options.queryFn === skipToken) {\n return Promise.reject(\n new Error(`Missing queryFn: '${this.options.queryHash}'`),\n )\n }\n\n this.#abortSignalConsumed = false\n if (this.options.persister) {\n return this.options.persister(\n this.options.queryFn,\n queryFnContext as QueryFunctionContext<TQueryKey>,\n this as unknown as Query,\n )\n }\n\n return this.options.queryFn(\n queryFnContext as QueryFunctionContext<TQueryKey>,\n )\n }\n\n // Trigger behavior hook\n const context: OmitKeyof<\n FetchContext<TQueryFnData, TError, TData, TQueryKey>,\n 'signal'\n > = {\n fetchOptions,\n options: this.options,\n queryKey: this.queryKey,\n state: this.state,\n fetchFn,\n }\n\n addSignalProperty(context)\n\n this.options.behavior?.onFetch(\n context as FetchContext<TQueryFnData, TError, TData, TQueryKey>,\n this as unknown as Query,\n )\n\n // Store state in case the current fetch needs to be reverted\n this.#revertState = this.state\n\n // Set to fetching state if not already in it\n if (\n this.state.fetchStatus === 'idle' ||\n this.state.fetchMeta !== context.fetchOptions?.meta\n ) {\n this.#dispatch({ type: 'fetch', meta: context.fetchOptions?.meta })\n }\n\n const onError = (error: TError | { silent?: boolean }) => {\n // Optimistically update state if needed\n if (!(isCancelledError(error) && error.silent)) {\n this.#dispatch({\n type: 'error',\n error: error as TError,\n })\n }\n\n if (!isCancelledError(error)) {\n // Notify cache callback\n this.#cache.config.onError?.(\n error as any,\n this as Query<any, any, any, any>,\n )\n this.#cache.config.onSettled?.(\n this.state.data,\n error as any,\n this as Query<any, any, any, any>,\n )\n }\n\n if (!this.isFetchingOptimistic) {\n // Schedule query gc after fetching\n this.scheduleGc()\n }\n this.isFetchingOptimistic = false\n }\n\n // Try to fetch the data\n this.#retryer = createRetryer({\n fn: context.fetchFn as () => Promise<TData>,\n abort: abortController.abort.bind(abortController),\n onSuccess: (data) => {\n if (data === undefined) {\n if (process.env.NODE_ENV !== 'production') {\n console.error(\n `Query data cannot be undefined. Please make sure to return a value other than undefined from your query function. Affected query key: ${this.queryHash}`,\n )\n }\n onError(new Error(`${this.queryHash} data is undefined`) as any)\n return\n }\n\n this.setData(data)\n\n // Notify cache callback\n this.#cache.config.onSuccess?.(data, this as Query<any, any, any, any>)\n this.#cache.config.onSettled?.(\n data,\n this.state.error as any,\n this as Query<any, any, any, any>,\n )\n\n if (!this.isFetchingOptimistic) {\n // Schedule query gc after fetching\n this.scheduleGc()\n }\n this.isFetchingOptimistic = false\n },\n onError,\n onFail: (failureCount, error) => {\n this.#dispatch({ type: 'failed', failureCount, error })\n },\n onPause: () => {\n this.#dispatch({ type: 'pause' })\n },\n onContinue: () => {\n this.#dispatch({ type: 'continue' })\n },\n retry: context.options.retry,\n retryDelay: context.options.retryDelay,\n networkMode: context.options.networkMode,\n canRun: () => true,\n })\n\n return this.#retryer.start()\n }\n\n #dispatch(action: Action<TData, TError>): void {\n const reducer = (\n state: QueryState<TData, TError>,\n ): QueryState<TData, TError> => {\n switch (action.type) {\n case 'failed':\n return {\n ...state,\n fetchFailureCount: action.failureCount,\n fetchFailureReason: action.error,\n }\n case 'pause':\n return {\n ...state,\n fetchStatus: 'paused',\n }\n case 'continue':\n return {\n ...state,\n fetchStatus: 'fetching',\n }\n case 'fetch':\n return {\n ...state,\n ...fetchState(state.data, this.options),\n fetchMeta: action.meta ?? null,\n }\n case 'success':\n return {\n ...state,\n data: action.data,\n dataUpdateCount: state.dataUpdateCount + 1,\n dataUpdatedAt: action.dataUpdatedAt ?? Date.now(),\n error: null,\n isInvalidated: false,\n status: 'success',\n ...(!action.manual && {\n fetchStatus: 'idle',\n fetchFailureCount: 0,\n fetchFailureReason: null,\n }),\n }\n case 'error':\n const error = action.error as unknown\n\n if (isCancelledError(error) && error.revert && this.#revertState) {\n return { ...this.#revertState, fetchStatus: 'idle' }\n }\n\n return {\n ...state,\n error: error as TError,\n errorUpdateCount: state.errorUpdateCount + 1,\n errorUpdatedAt: Date.now(),\n fetchFailureCount: state.fetchFailureCount + 1,\n fetchFailureReason: error as TError,\n fetchStatus: 'idle',\n status: 'error',\n }\n case 'invalidate':\n return {\n ...state,\n isInvalidated: true,\n }\n case 'setState':\n return {\n ...state,\n ...action.state,\n }\n }\n }\n\n this.state = reducer(this.state)\n\n notifyManager.batch(() => {\n this.#observers.forEach((observer) => {\n observer.onQueryUpdate()\n })\n\n this.#cache.notify({ query: this, type: 'updated', action })\n })\n }\n}\n\nexport function fetchState<\n TQueryFnData,\n TError,\n TData,\n TQueryKey extends QueryKey,\n>(\n data: TData | undefined,\n options: QueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n) {\n return {\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchStatus: canFetch(options.networkMode) ? 'fetching' : 'paused',\n ...(data === undefined &&\n ({\n error: null,\n status: 'pending',\n } as const)),\n } as const\n}\n\nfunction getDefaultState<\n TQueryFnData,\n TError,\n TData,\n TQueryKey extends QueryKey,\n>(\n options: QueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n): QueryState<TData, TError> {\n const data =\n typeof options.initialData === 'function'\n ? (options.initialData as InitialDataFunction<TData>)()\n : options.initialData\n\n const hasData = data !== undefined\n\n const initialDataUpdatedAt = hasData\n ? typeof options.initialDataUpdatedAt === 'function'\n ? (options.initialDataUpdatedAt as () => number | undefined)()\n : options.initialDataUpdatedAt\n : 0\n\n return {\n data,\n dataUpdateCount: 0,\n dataUpdatedAt: hasData ? initialDataUpdatedAt ?? Date.now() : 0,\n error: null,\n errorUpdateCount: 0,\n errorUpdatedAt: 0,\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchMeta: null,\n isInvalidated: false,\n status: hasData ? 'success' : 'pending',\n fetchStatus: 'idle',\n }\n}\n"],"mappings":"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","names":["_a","_b","_c"]}
@@ -1,3 +1,3 @@
1
1
  import './removable.cjs';
2
- export { bd as Action, b9 as FetchContext, ba as FetchDirection, bb as FetchMeta, bc as FetchOptions, o as Query, aN as QueryBehavior, n as QueryState, be as SetStateOptions, bf as fetchState } from './queryClient--tFV-sQG.cjs';
2
+ export { aV as Action, aR as FetchContext, aS as FetchDirection, aT as FetchMeta, aU as FetchOptions, o as Query, aO as QueryBehavior, n as QueryState, aW as SetStateOptions, aX as fetchState } from './types-5uTf3z3y.cjs';
3
3
  import './subscribable.cjs';
@@ -1,3 +1,3 @@
1
1
  import './removable.js';
2
- export { bd as Action, b9 as FetchContext, ba as FetchDirection, bb as FetchMeta, bc as FetchOptions, o as Query, aN as QueryBehavior, n as QueryState, be as SetStateOptions, bf as fetchState } from './queryClient-K0zFyarY.js';
2
+ export { aV as Action, aR as FetchContext, aS as FetchDirection, aT as FetchMeta, aU as FetchOptions, o as Query, aO as QueryBehavior, n as QueryState, aW as SetStateOptions, aX as fetchState } from './types-EkjjZlVm.js';
3
3
  import './subscribable.js';
@@ -284,9 +284,10 @@ var Query = class extends Removable {
284
284
  },
285
285
  retry: context.options.retry,
286
286
  retryDelay: context.options.retryDelay,
287
- networkMode: context.options.networkMode
287
+ networkMode: context.options.networkMode,
288
+ canRun: () => true
288
289
  }));
289
- return __privateGet(this, _retryer).promise;
290
+ return __privateGet(this, _retryer).start();
290
291
  }
291
292
  };
292
293
  _initialState = new WeakMap();