@tanstack/query-core 4.3.4 → 4.3.7

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 (84) hide show
  1. package/build/lib/focusManager.esm.js +86 -0
  2. package/build/lib/focusManager.esm.js.map +1 -0
  3. package/build/lib/hydration.esm.js +97 -0
  4. package/build/lib/hydration.esm.js.map +1 -0
  5. package/build/lib/index.d.ts +1 -1
  6. package/build/lib/index.esm.js +14 -0
  7. package/build/lib/index.esm.js.map +1 -0
  8. package/build/lib/index.js +1 -0
  9. package/build/lib/index.js.map +1 -1
  10. package/build/lib/index.mjs +1 -1
  11. package/build/lib/infiniteQueryBehavior.esm.js +142 -0
  12. package/build/lib/infiniteQueryBehavior.esm.js.map +1 -0
  13. package/build/lib/infiniteQueryObserver.esm.js +78 -0
  14. package/build/lib/infiniteQueryObserver.esm.js.map +1 -0
  15. package/build/lib/logger.esm.js +4 -0
  16. package/build/lib/logger.esm.js.map +1 -0
  17. package/build/lib/logger.native.esm.js +12 -0
  18. package/build/lib/logger.native.esm.js.map +1 -0
  19. package/build/lib/mutation.esm.js +243 -0
  20. package/build/lib/mutation.esm.js.map +1 -0
  21. package/build/lib/mutationCache.esm.js +85 -0
  22. package/build/lib/mutationCache.esm.js.map +1 -0
  23. package/build/lib/mutationObserver.esm.js +126 -0
  24. package/build/lib/mutationObserver.esm.js.map +1 -0
  25. package/build/lib/notifyManager.esm.js +99 -0
  26. package/build/lib/notifyManager.esm.js.map +1 -0
  27. package/build/lib/onlineManager.esm.js +85 -0
  28. package/build/lib/onlineManager.esm.js.map +1 -0
  29. package/build/lib/queriesObserver.esm.js +156 -0
  30. package/build/lib/queriesObserver.esm.js.map +1 -0
  31. package/build/lib/query.esm.js +460 -0
  32. package/build/lib/query.esm.js.map +1 -0
  33. package/build/lib/queryCache.esm.js +126 -0
  34. package/build/lib/queryCache.esm.js.map +1 -0
  35. package/build/lib/queryClient.esm.js +339 -0
  36. package/build/lib/queryClient.esm.js.map +1 -0
  37. package/build/lib/queryObserver.esm.js +515 -0
  38. package/build/lib/queryObserver.esm.js.map +1 -0
  39. package/build/lib/removable.esm.js +33 -0
  40. package/build/lib/removable.esm.js.map +1 -0
  41. package/build/lib/retryer.esm.js +160 -0
  42. package/build/lib/retryer.esm.js.map +1 -0
  43. package/build/lib/subscribable.esm.js +29 -0
  44. package/build/lib/subscribable.esm.js.map +1 -0
  45. package/build/lib/tests/focusManager.test.d.ts +1 -0
  46. package/build/lib/tests/hydration.test.d.ts +1 -0
  47. package/build/lib/tests/infiniteQueryBehavior.test.d.ts +1 -0
  48. package/build/lib/tests/infiniteQueryObserver.test.d.ts +1 -0
  49. package/build/lib/tests/mutationCache.test.d.ts +1 -0
  50. package/build/lib/tests/mutationObserver.test.d.ts +1 -0
  51. package/build/lib/tests/mutations.test.d.ts +1 -0
  52. package/build/lib/tests/notifyManager.test.d.ts +1 -0
  53. package/build/lib/tests/onlineManager.test.d.ts +1 -0
  54. package/build/lib/tests/queriesObserver.test.d.ts +1 -0
  55. package/build/lib/tests/query.test.d.ts +1 -0
  56. package/build/lib/tests/queryCache.test.d.ts +1 -0
  57. package/build/lib/tests/queryClient.test.d.ts +1 -0
  58. package/build/lib/tests/queryObserver.test.d.ts +1 -0
  59. package/build/lib/tests/utils.d.ts +24 -0
  60. package/build/lib/tests/utils.test.d.ts +1 -0
  61. package/build/lib/utils.esm.js +318 -0
  62. package/build/lib/utils.esm.js.map +1 -0
  63. package/build/umd/index.development.js +1 -0
  64. package/build/umd/index.development.js.map +1 -1
  65. package/build/umd/index.production.js +1 -1
  66. package/build/umd/index.production.js.map +1 -1
  67. package/package.json +2 -1
  68. package/src/index.ts +1 -0
  69. package/src/tests/focusManager.test.tsx +1 -1
  70. package/src/tests/hydration.test.tsx +1 -1
  71. package/src/tests/infiniteQueryBehavior.test.tsx +1 -1
  72. package/src/tests/infiniteQueryObserver.test.tsx +1 -1
  73. package/src/tests/mutationCache.test.tsx +1 -6
  74. package/src/tests/mutationObserver.test.tsx +1 -1
  75. package/src/tests/mutations.test.tsx +1 -6
  76. package/src/tests/notifyManager.test.tsx +1 -1
  77. package/src/tests/onlineManager.test.tsx +1 -1
  78. package/src/tests/queriesObserver.test.tsx +1 -6
  79. package/src/tests/query.test.tsx +1 -1
  80. package/src/tests/queryCache.test.tsx +1 -1
  81. package/src/tests/queryClient.test.tsx +1 -6
  82. package/src/tests/queryObserver.test.tsx +1 -1
  83. package/src/tests/utils.test.tsx +1 -1
  84. package/src/tests/utils.ts +78 -0
@@ -0,0 +1,460 @@
1
+ import { replaceData, noop, timeUntilStale, getAbortController } from './utils.esm.js';
2
+ import { defaultLogger } from './logger.esm.js';
3
+ import { notifyManager } from './notifyManager.esm.js';
4
+ import { createRetryer, isCancelledError, canFetch } from './retryer.esm.js';
5
+ import { Removable } from './removable.esm.js';
6
+
7
+ // CLASS
8
+ class Query extends Removable {
9
+ constructor(config) {
10
+ super();
11
+ this.abortSignalConsumed = false;
12
+ this.defaultOptions = config.defaultOptions;
13
+ this.setOptions(config.options);
14
+ this.observers = [];
15
+ this.cache = config.cache;
16
+ this.logger = config.logger || defaultLogger;
17
+ this.queryKey = config.queryKey;
18
+ this.queryHash = config.queryHash;
19
+ this.initialState = config.state || getDefaultState(this.options);
20
+ this.state = this.initialState;
21
+ this.meta = config.meta;
22
+ }
23
+
24
+ setOptions(options) {
25
+ this.options = { ...this.defaultOptions,
26
+ ...options
27
+ };
28
+ this.meta = options == null ? void 0 : options.meta;
29
+ this.updateCacheTime(this.options.cacheTime);
30
+ }
31
+
32
+ optionalRemove() {
33
+ if (!this.observers.length && this.state.fetchStatus === 'idle') {
34
+ this.cache.remove(this);
35
+ }
36
+ }
37
+
38
+ setData(newData, options) {
39
+ const data = replaceData(this.state.data, newData, this.options); // Set data and mark it as cached
40
+
41
+ this.dispatch({
42
+ data,
43
+ type: 'success',
44
+ dataUpdatedAt: options == null ? void 0 : options.updatedAt,
45
+ manual: options == null ? void 0 : options.manual
46
+ });
47
+ return data;
48
+ }
49
+
50
+ setState(state, setStateOptions) {
51
+ this.dispatch({
52
+ type: 'setState',
53
+ state,
54
+ setStateOptions
55
+ });
56
+ }
57
+
58
+ cancel(options) {
59
+ var _this$retryer;
60
+
61
+ const promise = this.promise;
62
+ (_this$retryer = this.retryer) == null ? void 0 : _this$retryer.cancel(options);
63
+ return promise ? promise.then(noop).catch(noop) : Promise.resolve();
64
+ }
65
+
66
+ destroy() {
67
+ super.destroy();
68
+ this.cancel({
69
+ silent: true
70
+ });
71
+ }
72
+
73
+ reset() {
74
+ this.destroy();
75
+ this.setState(this.initialState);
76
+ }
77
+
78
+ isActive() {
79
+ return this.observers.some(observer => observer.options.enabled !== false);
80
+ }
81
+
82
+ isDisabled() {
83
+ return this.getObserversCount() > 0 && !this.isActive();
84
+ }
85
+
86
+ isStale() {
87
+ return this.state.isInvalidated || !this.state.dataUpdatedAt || this.observers.some(observer => observer.getCurrentResult().isStale);
88
+ }
89
+
90
+ isStaleByTime(staleTime = 0) {
91
+ return this.state.isInvalidated || !this.state.dataUpdatedAt || !timeUntilStale(this.state.dataUpdatedAt, staleTime);
92
+ }
93
+
94
+ onFocus() {
95
+ var _this$retryer2;
96
+
97
+ const observer = this.observers.find(x => x.shouldFetchOnWindowFocus());
98
+
99
+ if (observer) {
100
+ observer.refetch({
101
+ cancelRefetch: false
102
+ });
103
+ } // Continue fetch if currently paused
104
+
105
+
106
+ (_this$retryer2 = this.retryer) == null ? void 0 : _this$retryer2.continue();
107
+ }
108
+
109
+ onOnline() {
110
+ var _this$retryer3;
111
+
112
+ const observer = this.observers.find(x => x.shouldFetchOnReconnect());
113
+
114
+ if (observer) {
115
+ observer.refetch({
116
+ cancelRefetch: false
117
+ });
118
+ } // Continue fetch if currently paused
119
+
120
+
121
+ (_this$retryer3 = this.retryer) == null ? void 0 : _this$retryer3.continue();
122
+ }
123
+
124
+ addObserver(observer) {
125
+ if (this.observers.indexOf(observer) === -1) {
126
+ this.observers.push(observer); // Stop the query from being garbage collected
127
+
128
+ this.clearGcTimeout();
129
+ this.cache.notify({
130
+ type: 'observerAdded',
131
+ query: this,
132
+ observer
133
+ });
134
+ }
135
+ }
136
+
137
+ removeObserver(observer) {
138
+ if (this.observers.indexOf(observer) !== -1) {
139
+ this.observers = this.observers.filter(x => x !== observer);
140
+
141
+ if (!this.observers.length) {
142
+ // If the transport layer does not support cancellation
143
+ // we'll let the query continue so the result can be cached
144
+ if (this.retryer) {
145
+ if (this.abortSignalConsumed) {
146
+ this.retryer.cancel({
147
+ revert: true
148
+ });
149
+ } else {
150
+ this.retryer.cancelRetry();
151
+ }
152
+ }
153
+
154
+ this.scheduleGc();
155
+ }
156
+
157
+ this.cache.notify({
158
+ type: 'observerRemoved',
159
+ query: this,
160
+ observer
161
+ });
162
+ }
163
+ }
164
+
165
+ getObserversCount() {
166
+ return this.observers.length;
167
+ }
168
+
169
+ invalidate() {
170
+ if (!this.state.isInvalidated) {
171
+ this.dispatch({
172
+ type: 'invalidate'
173
+ });
174
+ }
175
+ }
176
+
177
+ fetch(options, fetchOptions) {
178
+ var _this$options$behavio, _context$fetchOptions;
179
+
180
+ if (this.state.fetchStatus !== 'idle') {
181
+ if (this.state.dataUpdatedAt && fetchOptions != null && fetchOptions.cancelRefetch) {
182
+ // Silently cancel current fetch if the user wants to cancel refetches
183
+ this.cancel({
184
+ silent: true
185
+ });
186
+ } else if (this.promise) {
187
+ var _this$retryer4;
188
+
189
+ // make sure that retries that were potentially cancelled due to unmounts can continue
190
+ (_this$retryer4 = this.retryer) == null ? void 0 : _this$retryer4.continueRetry(); // Return current promise if we are already fetching
191
+
192
+ return this.promise;
193
+ }
194
+ } // Update config if passed, otherwise the config from the last execution is used
195
+
196
+
197
+ if (options) {
198
+ this.setOptions(options);
199
+ } // Use the options from the first observer with a query function if no function is found.
200
+ // This can happen when the query is hydrated or created with setQueryData.
201
+
202
+
203
+ if (!this.options.queryFn) {
204
+ const observer = this.observers.find(x => x.options.queryFn);
205
+
206
+ if (observer) {
207
+ this.setOptions(observer.options);
208
+ }
209
+ }
210
+
211
+ if (!Array.isArray(this.options.queryKey)) {
212
+ if (process.env.NODE_ENV !== 'production') {
213
+ this.logger.error("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']");
214
+ }
215
+ }
216
+
217
+ const abortController = getAbortController(); // Create query function context
218
+
219
+ const queryFnContext = {
220
+ queryKey: this.queryKey,
221
+ pageParam: undefined,
222
+ meta: this.meta
223
+ }; // Adds an enumerable signal property to the object that
224
+ // which sets abortSignalConsumed to true when the signal
225
+ // is read.
226
+
227
+ const addSignalProperty = object => {
228
+ Object.defineProperty(object, 'signal', {
229
+ enumerable: true,
230
+ get: () => {
231
+ if (abortController) {
232
+ this.abortSignalConsumed = true;
233
+ return abortController.signal;
234
+ }
235
+
236
+ return undefined;
237
+ }
238
+ });
239
+ };
240
+
241
+ addSignalProperty(queryFnContext); // Create fetch function
242
+
243
+ const fetchFn = () => {
244
+ if (!this.options.queryFn) {
245
+ return Promise.reject('Missing queryFn');
246
+ }
247
+
248
+ this.abortSignalConsumed = false;
249
+ return this.options.queryFn(queryFnContext);
250
+ }; // Trigger behavior hook
251
+
252
+
253
+ const context = {
254
+ fetchOptions,
255
+ options: this.options,
256
+ queryKey: this.queryKey,
257
+ state: this.state,
258
+ fetchFn,
259
+ meta: this.meta
260
+ };
261
+ addSignalProperty(context);
262
+ (_this$options$behavio = this.options.behavior) == null ? void 0 : _this$options$behavio.onFetch(context); // Store state in case the current fetch needs to be reverted
263
+
264
+ this.revertState = this.state; // Set to fetching state if not already in it
265
+
266
+ if (this.state.fetchStatus === 'idle' || this.state.fetchMeta !== ((_context$fetchOptions = context.fetchOptions) == null ? void 0 : _context$fetchOptions.meta)) {
267
+ var _context$fetchOptions2;
268
+
269
+ this.dispatch({
270
+ type: 'fetch',
271
+ meta: (_context$fetchOptions2 = context.fetchOptions) == null ? void 0 : _context$fetchOptions2.meta
272
+ });
273
+ }
274
+
275
+ const onError = error => {
276
+ // Optimistically update state if needed
277
+ if (!(isCancelledError(error) && error.silent)) {
278
+ this.dispatch({
279
+ type: 'error',
280
+ error: error
281
+ });
282
+ }
283
+
284
+ if (!isCancelledError(error)) {
285
+ var _this$cache$config$on, _this$cache$config;
286
+
287
+ // Notify cache callback
288
+ (_this$cache$config$on = (_this$cache$config = this.cache.config).onError) == null ? void 0 : _this$cache$config$on.call(_this$cache$config, error, this);
289
+
290
+ if (process.env.NODE_ENV !== 'production') {
291
+ this.logger.error(error);
292
+ }
293
+ }
294
+
295
+ if (!this.isFetchingOptimistic) {
296
+ // Schedule query gc after fetching
297
+ this.scheduleGc();
298
+ }
299
+
300
+ this.isFetchingOptimistic = false;
301
+ }; // Try to fetch the data
302
+
303
+
304
+ this.retryer = createRetryer({
305
+ fn: context.fetchFn,
306
+ abort: abortController == null ? void 0 : abortController.abort.bind(abortController),
307
+ onSuccess: data => {
308
+ var _this$cache$config$on2, _this$cache$config2;
309
+
310
+ if (typeof data === 'undefined') {
311
+ onError(new Error('Query data cannot be undefined'));
312
+ return;
313
+ }
314
+
315
+ this.setData(data); // Notify cache callback
316
+
317
+ (_this$cache$config$on2 = (_this$cache$config2 = this.cache.config).onSuccess) == null ? void 0 : _this$cache$config$on2.call(_this$cache$config2, data, this);
318
+
319
+ if (!this.isFetchingOptimistic) {
320
+ // Schedule query gc after fetching
321
+ this.scheduleGc();
322
+ }
323
+
324
+ this.isFetchingOptimistic = false;
325
+ },
326
+ onError,
327
+ onFail: () => {
328
+ this.dispatch({
329
+ type: 'failed'
330
+ });
331
+ },
332
+ onPause: () => {
333
+ this.dispatch({
334
+ type: 'pause'
335
+ });
336
+ },
337
+ onContinue: () => {
338
+ this.dispatch({
339
+ type: 'continue'
340
+ });
341
+ },
342
+ retry: context.options.retry,
343
+ retryDelay: context.options.retryDelay,
344
+ networkMode: context.options.networkMode
345
+ });
346
+ this.promise = this.retryer.promise;
347
+ return this.promise;
348
+ }
349
+
350
+ dispatch(action) {
351
+ const reducer = state => {
352
+ var _action$meta, _action$dataUpdatedAt;
353
+
354
+ switch (action.type) {
355
+ case 'failed':
356
+ return { ...state,
357
+ fetchFailureCount: state.fetchFailureCount + 1
358
+ };
359
+
360
+ case 'pause':
361
+ return { ...state,
362
+ fetchStatus: 'paused'
363
+ };
364
+
365
+ case 'continue':
366
+ return { ...state,
367
+ fetchStatus: 'fetching'
368
+ };
369
+
370
+ case 'fetch':
371
+ return { ...state,
372
+ fetchFailureCount: 0,
373
+ fetchMeta: (_action$meta = action.meta) != null ? _action$meta : null,
374
+ fetchStatus: canFetch(this.options.networkMode) ? 'fetching' : 'paused',
375
+ ...(!state.dataUpdatedAt && {
376
+ error: null,
377
+ status: 'loading'
378
+ })
379
+ };
380
+
381
+ case 'success':
382
+ return { ...state,
383
+ data: action.data,
384
+ dataUpdateCount: state.dataUpdateCount + 1,
385
+ dataUpdatedAt: (_action$dataUpdatedAt = action.dataUpdatedAt) != null ? _action$dataUpdatedAt : Date.now(),
386
+ error: null,
387
+ isInvalidated: false,
388
+ status: 'success',
389
+ ...(!action.manual && {
390
+ fetchStatus: 'idle',
391
+ fetchFailureCount: 0
392
+ })
393
+ };
394
+
395
+ case 'error':
396
+ const error = action.error;
397
+
398
+ if (isCancelledError(error) && error.revert && this.revertState) {
399
+ return { ...this.revertState
400
+ };
401
+ }
402
+
403
+ return { ...state,
404
+ error: error,
405
+ errorUpdateCount: state.errorUpdateCount + 1,
406
+ errorUpdatedAt: Date.now(),
407
+ fetchFailureCount: state.fetchFailureCount + 1,
408
+ fetchStatus: 'idle',
409
+ status: 'error'
410
+ };
411
+
412
+ case 'invalidate':
413
+ return { ...state,
414
+ isInvalidated: true
415
+ };
416
+
417
+ case 'setState':
418
+ return { ...state,
419
+ ...action.state
420
+ };
421
+ }
422
+ };
423
+
424
+ this.state = reducer(this.state);
425
+ notifyManager.batch(() => {
426
+ this.observers.forEach(observer => {
427
+ observer.onQueryUpdate(action);
428
+ });
429
+ this.cache.notify({
430
+ query: this,
431
+ type: 'updated',
432
+ action
433
+ });
434
+ });
435
+ }
436
+
437
+ }
438
+
439
+ function getDefaultState(options) {
440
+ const data = typeof options.initialData === 'function' ? options.initialData() : options.initialData;
441
+ const hasInitialData = typeof options.initialData !== 'undefined';
442
+ const initialDataUpdatedAt = hasInitialData ? typeof options.initialDataUpdatedAt === 'function' ? options.initialDataUpdatedAt() : options.initialDataUpdatedAt : 0;
443
+ const hasData = typeof data !== 'undefined';
444
+ return {
445
+ data,
446
+ dataUpdateCount: 0,
447
+ dataUpdatedAt: hasData ? initialDataUpdatedAt != null ? initialDataUpdatedAt : Date.now() : 0,
448
+ error: null,
449
+ errorUpdateCount: 0,
450
+ errorUpdatedAt: 0,
451
+ fetchFailureCount: 0,
452
+ fetchMeta: null,
453
+ isInvalidated: false,
454
+ status: hasData ? 'success' : 'loading',
455
+ fetchStatus: 'idle'
456
+ };
457
+ }
458
+
459
+ export { Query };
460
+ //# sourceMappingURL=query.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.esm.js","sources":["../../src/query.ts"],"sourcesContent":["import { getAbortController, noop, replaceData, timeUntilStale } from './utils'\nimport type {\n InitialDataFunction,\n QueryKey,\n QueryOptions,\n QueryStatus,\n QueryFunctionContext,\n QueryMeta,\n CancelOptions,\n SetDataOptions,\n FetchStatus,\n} from './types'\nimport type { QueryCache } from './queryCache'\nimport type { QueryObserver } from './queryObserver'\nimport { defaultLogger, Logger } from './logger'\nimport { notifyManager } from './notifyManager'\nimport { Retryer, isCancelledError, canFetch, createRetryer } from './retryer'\nimport { Removable } from './removable'\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 logger?: Logger\n options?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>\n defaultOptions?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>\n state?: QueryState<TData, TError>\n meta: QueryMeta | undefined\n}\n\nexport interface QueryState<TData = unknown, TError = unknown> {\n data: TData | undefined\n dataUpdateCount: number\n dataUpdatedAt: number\n error: TError | null\n errorUpdateCount: number\n errorUpdatedAt: number\n fetchFailureCount: number\n fetchMeta: any\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 meta: QueryMeta | undefined\n}\n\nexport interface QueryBehavior<\n TQueryFnData = unknown,\n TError = unknown,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> {\n onFetch: (\n context: FetchContext<TQueryFnData, TError, TData, TQueryKey>,\n ) => void\n}\n\nexport interface FetchOptions {\n cancelRefetch?: boolean\n meta?: any\n}\n\ninterface FailedAction {\n type: 'failed'\n}\n\ninterface FetchAction {\n type: 'fetch'\n meta?: any\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: QueryState<TData, TError>\n setStateOptions?: SetStateOptions\n}\n\nexport type Action<TData, TError> =\n | ContinueAction\n | ErrorAction<TError>\n | FailedAction\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 = unknown,\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 initialState: QueryState<TData, TError>\n revertState?: QueryState<TData, TError>\n state: QueryState<TData, TError>\n meta: QueryMeta | undefined\n isFetchingOptimistic?: boolean\n\n private cache: QueryCache\n private logger: Logger\n private promise?: Promise<TData>\n private retryer?: Retryer<TData>\n private observers: QueryObserver<any, any, any, any, any>[]\n private defaultOptions?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>\n private 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.logger = config.logger || defaultLogger\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.meta = config.meta\n }\n\n private setOptions(\n options?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n ): void {\n this.options = { ...this.defaultOptions, ...options }\n\n this.meta = options?.meta\n\n this.updateCacheTime(this.options.cacheTime)\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: 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.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((observer) => observer.options.enabled !== false)\n }\n\n isDisabled(): boolean {\n return this.getObserversCount() > 0 && !this.isActive()\n }\n\n isStale(): boolean {\n return (\n this.state.isInvalidated ||\n !this.state.dataUpdatedAt ||\n this.observers.some((observer) => observer.getCurrentResult().isStale)\n )\n }\n\n isStaleByTime(staleTime = 0): boolean {\n return (\n this.state.isInvalidated ||\n !this.state.dataUpdatedAt ||\n !timeUntilStale(this.state.dataUpdatedAt, staleTime)\n )\n }\n\n onFocus(): void {\n const observer = this.observers.find((x) => x.shouldFetchOnWindowFocus())\n\n if (observer) {\n observer.refetch({ cancelRefetch: false })\n }\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 if (observer) {\n observer.refetch({ cancelRefetch: false })\n }\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.indexOf(observer) === -1) {\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.indexOf(observer) !== -1) {\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.dataUpdatedAt && fetchOptions?.cancelRefetch) {\n // Silently cancel current fetch if the user wants to cancel refetches\n this.cancel({ silent: true })\n } else if (this.promise) {\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.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 (!Array.isArray(this.options.queryKey)) {\n if (process.env.NODE_ENV !== 'production') {\n this.logger.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 = getAbortController()\n\n // Create query function context\n const queryFnContext: QueryFunctionContext<TQueryKey> = {\n queryKey: this.queryKey,\n pageParam: undefined,\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 if (abortController) {\n this.abortSignalConsumed = true\n return abortController.signal\n }\n return undefined\n },\n })\n }\n\n addSignalProperty(queryFnContext)\n\n // Create fetch function\n const fetchFn = () => {\n if (!this.options.queryFn) {\n return Promise.reject('Missing queryFn')\n }\n this.abortSignalConsumed = false\n return this.options.queryFn(queryFnContext)\n }\n\n // Trigger behavior hook\n const context: FetchContext<TQueryFnData, TError, TData, TQueryKey> = {\n fetchOptions,\n options: this.options,\n queryKey: this.queryKey,\n state: this.state,\n fetchFn,\n meta: this.meta,\n }\n\n addSignalProperty(context)\n\n this.options.behavior?.onFetch(context)\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?.(error, this as Query<any, any, any, any>)\n\n if (process.env.NODE_ENV !== 'production') {\n this.logger.error(error)\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 () => TData,\n abort: abortController?.abort.bind(abortController),\n onSuccess: (data) => {\n if (typeof data === 'undefined') {\n onError(new Error('Query data cannot be undefined') as any)\n return\n }\n\n this.setData(data as TData)\n\n // Notify cache callback\n this.cache.config.onSuccess?.(data, this as Query<any, any, any, any>)\n\n if (!this.isFetchingOptimistic) {\n // Schedule query gc after fetching\n this.scheduleGc()\n }\n this.isFetchingOptimistic = false\n },\n onError,\n onFail: () => {\n this.dispatch({ type: 'failed' })\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 this.promise = this.retryer.promise\n\n return this.promise\n }\n\n private 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: state.fetchFailureCount + 1,\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 fetchFailureCount: 0,\n fetchMeta: action.meta ?? null,\n fetchStatus: canFetch(this.options.networkMode)\n ? 'fetching'\n : 'paused',\n ...(!state.dataUpdatedAt && {\n error: null,\n status: 'loading',\n }),\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 }),\n }\n case 'error':\n const error = action.error as unknown\n\n if (isCancelledError(error) && error.revert && this.revertState) {\n return { ...this.revertState }\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 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(action)\n })\n\n this.cache.notify({ query: this, type: 'updated', action })\n })\n }\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 hasInitialData = typeof options.initialData !== 'undefined'\n\n const initialDataUpdatedAt = hasInitialData\n ? typeof options.initialDataUpdatedAt === 'function'\n ? (options.initialDataUpdatedAt as () => number | undefined)()\n : options.initialDataUpdatedAt\n : 0\n\n const hasData = typeof data !== 'undefined'\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 fetchMeta: null,\n isInvalidated: false,\n status: hasData ? 'success' : 'loading',\n fetchStatus: 'idle',\n }\n}\n"],"names":["Query","Removable","constructor","config","abortSignalConsumed","defaultOptions","setOptions","options","observers","cache","logger","defaultLogger","queryKey","queryHash","initialState","state","getDefaultState","meta","updateCacheTime","cacheTime","optionalRemove","length","fetchStatus","remove","setData","newData","data","replaceData","dispatch","type","dataUpdatedAt","updatedAt","manual","setState","setStateOptions","cancel","promise","retryer","then","noop","catch","Promise","resolve","destroy","silent","reset","isActive","some","observer","enabled","isDisabled","getObserversCount","isStale","isInvalidated","getCurrentResult","isStaleByTime","staleTime","timeUntilStale","onFocus","find","x","shouldFetchOnWindowFocus","refetch","cancelRefetch","continue","onOnline","shouldFetchOnReconnect","addObserver","indexOf","push","clearGcTimeout","notify","query","removeObserver","filter","revert","cancelRetry","scheduleGc","invalidate","fetch","fetchOptions","continueRetry","queryFn","Array","isArray","process","env","NODE_ENV","error","abortController","getAbortController","queryFnContext","pageParam","undefined","addSignalProperty","object","Object","defineProperty","enumerable","get","signal","fetchFn","reject","context","behavior","onFetch","revertState","fetchMeta","onError","isCancelledError","isFetchingOptimistic","createRetryer","fn","abort","bind","onSuccess","Error","onFail","onPause","onContinue","retry","retryDelay","networkMode","action","reducer","fetchFailureCount","canFetch","status","dataUpdateCount","Date","now","errorUpdateCount","errorUpdatedAt","notifyManager","batch","forEach","onQueryUpdate","initialData","hasInitialData","initialDataUpdatedAt","hasData"],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ import { hashQueryKeyByOptions, parseFilterArgs, matchQuery } from './utils.esm.js';
2
+ import { Query } from './query.esm.js';
3
+ import { notifyManager } from './notifyManager.esm.js';
4
+ import { Subscribable } from './subscribable.esm.js';
5
+
6
+ // CLASS
7
+ class QueryCache extends Subscribable {
8
+ constructor(config) {
9
+ super();
10
+ this.config = config || {};
11
+ this.queries = [];
12
+ this.queriesMap = {};
13
+ }
14
+
15
+ build(client, options, state) {
16
+ var _options$queryHash;
17
+
18
+ const queryKey = options.queryKey;
19
+ const queryHash = (_options$queryHash = options.queryHash) != null ? _options$queryHash : hashQueryKeyByOptions(queryKey, options);
20
+ let query = this.get(queryHash);
21
+
22
+ if (!query) {
23
+ query = new Query({
24
+ cache: this,
25
+ logger: client.getLogger(),
26
+ queryKey,
27
+ queryHash,
28
+ options: client.defaultQueryOptions(options),
29
+ state,
30
+ defaultOptions: client.getQueryDefaults(queryKey),
31
+ meta: options.meta
32
+ });
33
+ this.add(query);
34
+ }
35
+
36
+ return query;
37
+ }
38
+
39
+ add(query) {
40
+ if (!this.queriesMap[query.queryHash]) {
41
+ this.queriesMap[query.queryHash] = query;
42
+ this.queries.push(query);
43
+ this.notify({
44
+ type: 'added',
45
+ query
46
+ });
47
+ }
48
+ }
49
+
50
+ remove(query) {
51
+ const queryInMap = this.queriesMap[query.queryHash];
52
+
53
+ if (queryInMap) {
54
+ query.destroy();
55
+ this.queries = this.queries.filter(x => x !== query);
56
+
57
+ if (queryInMap === query) {
58
+ delete this.queriesMap[query.queryHash];
59
+ }
60
+
61
+ this.notify({
62
+ type: 'removed',
63
+ query
64
+ });
65
+ }
66
+ }
67
+
68
+ clear() {
69
+ notifyManager.batch(() => {
70
+ this.queries.forEach(query => {
71
+ this.remove(query);
72
+ });
73
+ });
74
+ }
75
+
76
+ get(queryHash) {
77
+ return this.queriesMap[queryHash];
78
+ }
79
+
80
+ getAll() {
81
+ return this.queries;
82
+ }
83
+
84
+ find(arg1, arg2) {
85
+ const [filters] = parseFilterArgs(arg1, arg2);
86
+
87
+ if (typeof filters.exact === 'undefined') {
88
+ filters.exact = true;
89
+ }
90
+
91
+ return this.queries.find(query => matchQuery(filters, query));
92
+ }
93
+
94
+ findAll(arg1, arg2) {
95
+ const [filters] = parseFilterArgs(arg1, arg2);
96
+ return Object.keys(filters).length > 0 ? this.queries.filter(query => matchQuery(filters, query)) : this.queries;
97
+ }
98
+
99
+ notify(event) {
100
+ notifyManager.batch(() => {
101
+ this.listeners.forEach(listener => {
102
+ listener(event);
103
+ });
104
+ });
105
+ }
106
+
107
+ onFocus() {
108
+ notifyManager.batch(() => {
109
+ this.queries.forEach(query => {
110
+ query.onFocus();
111
+ });
112
+ });
113
+ }
114
+
115
+ onOnline() {
116
+ notifyManager.batch(() => {
117
+ this.queries.forEach(query => {
118
+ query.onOnline();
119
+ });
120
+ });
121
+ }
122
+
123
+ }
124
+
125
+ export { QueryCache };
126
+ //# sourceMappingURL=queryCache.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryCache.esm.js","sources":["../../src/queryCache.ts"],"sourcesContent":["import {\n QueryFilters,\n hashQueryKeyByOptions,\n matchQuery,\n parseFilterArgs,\n} from './utils'\nimport { Action, Query, QueryState } from './query'\nimport type { QueryKey, QueryOptions } from './types'\nimport { notifyManager } from './notifyManager'\nimport type { QueryClient } from './queryClient'\nimport { Subscribable } from './subscribable'\nimport { QueryObserver } from './queryObserver'\n\n// TYPES\n\ninterface QueryCacheConfig {\n onError?: (error: unknown, query: Query<unknown, unknown, unknown>) => void\n onSuccess?: (data: unknown, query: Query<unknown, unknown, unknown>) => void\n}\n\ninterface QueryHashMap {\n [hash: string]: Query<any, any, any, any>\n}\n\ninterface NotifyEventQueryAdded {\n type: 'added'\n query: Query<any, any, any, any>\n}\n\ninterface NotifyEventQueryRemoved {\n type: 'removed'\n query: Query<any, any, any, any>\n}\n\ninterface NotifyEventQueryUpdated {\n type: 'updated'\n query: Query<any, any, any, any>\n action: Action<any, any>\n}\n\ninterface NotifyEventQueryObserverAdded {\n type: 'observerAdded'\n query: Query<any, any, any, any>\n observer: QueryObserver<any, any, any, any, any>\n}\n\ninterface NotifyEventQueryObserverRemoved {\n type: 'observerRemoved'\n query: Query<any, any, any, any>\n observer: QueryObserver<any, any, any, any, any>\n}\n\ninterface NotifyEventQueryObserverResultsUpdated {\n type: 'observerResultsUpdated'\n query: Query<any, any, any, any>\n}\n\ninterface NotifyEventQueryObserverOptionsUpdated {\n type: 'observerOptionsUpdated'\n query: Query<any, any, any, any>\n observer: QueryObserver<any, any, any, any, any>\n}\n\ntype QueryCacheNotifyEvent =\n | NotifyEventQueryAdded\n | NotifyEventQueryRemoved\n | NotifyEventQueryUpdated\n | NotifyEventQueryObserverAdded\n | NotifyEventQueryObserverRemoved\n | NotifyEventQueryObserverResultsUpdated\n | NotifyEventQueryObserverOptionsUpdated\n\ntype QueryCacheListener = (event: QueryCacheNotifyEvent) => void\n\n// CLASS\n\nexport class QueryCache extends Subscribable<QueryCacheListener> {\n config: QueryCacheConfig\n\n private queries: Query<any, any, any, any>[]\n private queriesMap: QueryHashMap\n\n constructor(config?: QueryCacheConfig) {\n super()\n this.config = config || {}\n this.queries = []\n this.queriesMap = {}\n }\n\n build<TQueryFnData, TError, TData, TQueryKey extends QueryKey>(\n client: QueryClient,\n options: QueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n state?: QueryState<TData, TError>,\n ): Query<TQueryFnData, TError, TData, TQueryKey> {\n const queryKey = options.queryKey!\n const queryHash =\n options.queryHash ?? hashQueryKeyByOptions(queryKey, options)\n let query = this.get<TQueryFnData, TError, TData, TQueryKey>(queryHash)\n\n if (!query) {\n query = new Query({\n cache: this,\n logger: client.getLogger(),\n queryKey,\n queryHash,\n options: client.defaultQueryOptions(options),\n state,\n defaultOptions: client.getQueryDefaults(queryKey),\n meta: options.meta,\n })\n this.add(query)\n }\n\n return query\n }\n\n add(query: Query<any, any, any, any>): void {\n if (!this.queriesMap[query.queryHash]) {\n this.queriesMap[query.queryHash] = query\n this.queries.push(query)\n this.notify({\n type: 'added',\n query,\n })\n }\n }\n\n remove(query: Query<any, any, any, any>): void {\n const queryInMap = this.queriesMap[query.queryHash]\n\n if (queryInMap) {\n query.destroy()\n\n this.queries = this.queries.filter((x) => x !== query)\n\n if (queryInMap === query) {\n delete this.queriesMap[query.queryHash]\n }\n\n this.notify({ type: 'removed', query })\n }\n }\n\n clear(): void {\n notifyManager.batch(() => {\n this.queries.forEach((query) => {\n this.remove(query)\n })\n })\n }\n\n get<\n TQueryFnData = unknown,\n TError = unknown,\n TData = TQueryFnData,\n TQueyKey extends QueryKey = QueryKey,\n >(\n queryHash: string,\n ): Query<TQueryFnData, TError, TData, TQueyKey> | undefined {\n return this.queriesMap[queryHash]\n }\n\n getAll(): Query[] {\n return this.queries\n }\n\n find<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData>(\n arg1: QueryKey,\n arg2?: QueryFilters,\n ): Query<TQueryFnData, TError, TData> | undefined {\n const [filters] = parseFilterArgs(arg1, arg2)\n\n if (typeof filters.exact === 'undefined') {\n filters.exact = true\n }\n\n return this.queries.find((query) => matchQuery(filters, query))\n }\n\n findAll(queryKey?: QueryKey, filters?: QueryFilters): Query[]\n findAll(filters?: QueryFilters): Query[]\n findAll(arg1?: QueryKey | QueryFilters, arg2?: QueryFilters): Query[]\n findAll(arg1?: QueryKey | QueryFilters, arg2?: QueryFilters): Query[] {\n const [filters] = parseFilterArgs(arg1, arg2)\n return Object.keys(filters).length > 0\n ? this.queries.filter((query) => matchQuery(filters, query))\n : this.queries\n }\n\n notify(event: QueryCacheNotifyEvent) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event)\n })\n })\n }\n\n onFocus(): void {\n notifyManager.batch(() => {\n this.queries.forEach((query) => {\n query.onFocus()\n })\n })\n }\n\n onOnline(): void {\n notifyManager.batch(() => {\n this.queries.forEach((query) => {\n query.onOnline()\n })\n })\n }\n}\n"],"names":["QueryCache","Subscribable","constructor","config","queries","queriesMap","build","client","options","state","queryKey","queryHash","hashQueryKeyByOptions","query","get","Query","cache","logger","getLogger","defaultQueryOptions","defaultOptions","getQueryDefaults","meta","add","push","notify","type","remove","queryInMap","destroy","filter","x","clear","notifyManager","batch","forEach","getAll","find","arg1","arg2","filters","parseFilterArgs","exact","matchQuery","findAll","Object","keys","length","event","listeners","listener","onFocus","onOnline"],"mappings":"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"}