@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,85 @@
1
+ import { Subscribable } from './subscribable.esm.js';
2
+ import { isServer } from './utils.esm.js';
3
+
4
+ class OnlineManager extends Subscribable {
5
+ constructor() {
6
+ super();
7
+
8
+ this.setup = onOnline => {
9
+ // addEventListener does not exist in React Native, but window does
10
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
11
+ if (!isServer && window.addEventListener) {
12
+ const listener = () => onOnline(); // Listen to online
13
+
14
+
15
+ window.addEventListener('online', listener, false);
16
+ window.addEventListener('offline', listener, false);
17
+ return () => {
18
+ // Be sure to unsubscribe if a new handler is set
19
+ window.removeEventListener('online', listener);
20
+ window.removeEventListener('offline', listener);
21
+ };
22
+ }
23
+ };
24
+ }
25
+
26
+ onSubscribe() {
27
+ if (!this.cleanup) {
28
+ this.setEventListener(this.setup);
29
+ }
30
+ }
31
+
32
+ onUnsubscribe() {
33
+ if (!this.hasListeners()) {
34
+ var _this$cleanup;
35
+
36
+ (_this$cleanup = this.cleanup) == null ? void 0 : _this$cleanup.call(this);
37
+ this.cleanup = undefined;
38
+ }
39
+ }
40
+
41
+ setEventListener(setup) {
42
+ var _this$cleanup2;
43
+
44
+ this.setup = setup;
45
+ (_this$cleanup2 = this.cleanup) == null ? void 0 : _this$cleanup2.call(this);
46
+ this.cleanup = setup(online => {
47
+ if (typeof online === 'boolean') {
48
+ this.setOnline(online);
49
+ } else {
50
+ this.onOnline();
51
+ }
52
+ });
53
+ }
54
+
55
+ setOnline(online) {
56
+ this.online = online;
57
+
58
+ if (online) {
59
+ this.onOnline();
60
+ }
61
+ }
62
+
63
+ onOnline() {
64
+ this.listeners.forEach(listener => {
65
+ listener();
66
+ });
67
+ }
68
+
69
+ isOnline() {
70
+ if (typeof this.online === 'boolean') {
71
+ return this.online;
72
+ }
73
+
74
+ if (typeof navigator === 'undefined' || typeof navigator.onLine === 'undefined') {
75
+ return true;
76
+ }
77
+
78
+ return navigator.onLine;
79
+ }
80
+
81
+ }
82
+ const onlineManager = new OnlineManager();
83
+
84
+ export { OnlineManager, onlineManager };
85
+ //# sourceMappingURL=onlineManager.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onlineManager.esm.js","sources":["../../src/onlineManager.ts"],"sourcesContent":["import { Subscribable } from './subscribable'\nimport { isServer } from './utils'\n\ntype SetupFn = (\n setOnline: (online?: boolean) => void,\n) => (() => void) | undefined\n\nexport class OnlineManager extends Subscribable {\n private online?: boolean\n private cleanup?: () => void\n\n private setup: SetupFn\n\n constructor() {\n super()\n this.setup = (onOnline) => {\n // addEventListener does not exist in React Native, but window does\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!isServer && window.addEventListener) {\n const listener = () => onOnline()\n // Listen to online\n window.addEventListener('online', listener, false)\n window.addEventListener('offline', listener, false)\n\n return () => {\n // Be sure to unsubscribe if a new handler is set\n window.removeEventListener('online', listener)\n window.removeEventListener('offline', listener)\n }\n }\n }\n }\n\n protected onSubscribe(): void {\n if (!this.cleanup) {\n this.setEventListener(this.setup)\n }\n }\n\n protected onUnsubscribe() {\n if (!this.hasListeners()) {\n this.cleanup?.()\n this.cleanup = undefined\n }\n }\n\n setEventListener(setup: SetupFn): void {\n this.setup = setup\n this.cleanup?.()\n this.cleanup = setup((online?: boolean) => {\n if (typeof online === 'boolean') {\n this.setOnline(online)\n } else {\n this.onOnline()\n }\n })\n }\n\n setOnline(online?: boolean): void {\n this.online = online\n\n if (online) {\n this.onOnline()\n }\n }\n\n onOnline(): void {\n this.listeners.forEach((listener) => {\n listener()\n })\n }\n\n isOnline(): boolean {\n if (typeof this.online === 'boolean') {\n return this.online\n }\n\n if (\n typeof navigator === 'undefined' ||\n typeof navigator.onLine === 'undefined'\n ) {\n return true\n }\n\n return navigator.onLine\n }\n}\n\nexport const onlineManager = new OnlineManager()\n"],"names":["OnlineManager","Subscribable","constructor","setup","onOnline","isServer","window","addEventListener","listener","removeEventListener","onSubscribe","cleanup","setEventListener","onUnsubscribe","hasListeners","undefined","online","setOnline","listeners","forEach","isOnline","navigator","onLine","onlineManager"],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ import { difference, replaceAt } from './utils.esm.js';
2
+ import { notifyManager } from './notifyManager.esm.js';
3
+ import { QueryObserver } from './queryObserver.esm.js';
4
+ import { Subscribable } from './subscribable.esm.js';
5
+
6
+ class QueriesObserver extends Subscribable {
7
+ constructor(client, queries) {
8
+ super();
9
+ this.client = client;
10
+ this.queries = [];
11
+ this.result = [];
12
+ this.observers = [];
13
+ this.observersMap = {};
14
+
15
+ if (queries) {
16
+ this.setQueries(queries);
17
+ }
18
+ }
19
+
20
+ onSubscribe() {
21
+ if (this.listeners.length === 1) {
22
+ this.observers.forEach(observer => {
23
+ observer.subscribe(result => {
24
+ this.onUpdate(observer, result);
25
+ });
26
+ });
27
+ }
28
+ }
29
+
30
+ onUnsubscribe() {
31
+ if (!this.listeners.length) {
32
+ this.destroy();
33
+ }
34
+ }
35
+
36
+ destroy() {
37
+ this.listeners = [];
38
+ this.observers.forEach(observer => {
39
+ observer.destroy();
40
+ });
41
+ }
42
+
43
+ setQueries(queries, notifyOptions) {
44
+ this.queries = queries;
45
+ notifyManager.batch(() => {
46
+ const prevObservers = this.observers;
47
+ const newObserverMatches = this.findMatchingObservers(this.queries); // set options for the new observers to notify of changes
48
+
49
+ newObserverMatches.forEach(match => match.observer.setOptions(match.defaultedQueryOptions, notifyOptions));
50
+ const newObservers = newObserverMatches.map(match => match.observer);
51
+ const newObserversMap = Object.fromEntries(newObservers.map(observer => [observer.options.queryHash, observer]));
52
+ const newResult = newObservers.map(observer => observer.getCurrentResult());
53
+ const hasIndexChange = newObservers.some((observer, index) => observer !== prevObservers[index]);
54
+
55
+ if (prevObservers.length === newObservers.length && !hasIndexChange) {
56
+ return;
57
+ }
58
+
59
+ this.observers = newObservers;
60
+ this.observersMap = newObserversMap;
61
+ this.result = newResult;
62
+
63
+ if (!this.hasListeners()) {
64
+ return;
65
+ }
66
+
67
+ difference(prevObservers, newObservers).forEach(observer => {
68
+ observer.destroy();
69
+ });
70
+ difference(newObservers, prevObservers).forEach(observer => {
71
+ observer.subscribe(result => {
72
+ this.onUpdate(observer, result);
73
+ });
74
+ });
75
+ this.notify();
76
+ });
77
+ }
78
+
79
+ getCurrentResult() {
80
+ return this.result;
81
+ }
82
+
83
+ getOptimisticResult(queries) {
84
+ return this.findMatchingObservers(queries).map(match => match.observer.getOptimisticResult(match.defaultedQueryOptions));
85
+ }
86
+
87
+ findMatchingObservers(queries) {
88
+ const prevObservers = this.observers;
89
+ const defaultedQueryOptions = queries.map(options => this.client.defaultQueryOptions(options));
90
+ const matchingObservers = defaultedQueryOptions.flatMap(defaultedOptions => {
91
+ const match = prevObservers.find(observer => observer.options.queryHash === defaultedOptions.queryHash);
92
+
93
+ if (match != null) {
94
+ return [{
95
+ defaultedQueryOptions: defaultedOptions,
96
+ observer: match
97
+ }];
98
+ }
99
+
100
+ return [];
101
+ });
102
+ const matchedQueryHashes = matchingObservers.map(match => match.defaultedQueryOptions.queryHash);
103
+ const unmatchedQueries = defaultedQueryOptions.filter(defaultedOptions => !matchedQueryHashes.includes(defaultedOptions.queryHash));
104
+ const unmatchedObservers = prevObservers.filter(prevObserver => !matchingObservers.some(match => match.observer === prevObserver));
105
+
106
+ const getObserver = options => {
107
+ const defaultedOptions = this.client.defaultQueryOptions(options);
108
+ const currentObserver = this.observersMap[defaultedOptions.queryHash];
109
+ return currentObserver != null ? currentObserver : new QueryObserver(this.client, defaultedOptions);
110
+ };
111
+
112
+ const newOrReusedObservers = unmatchedQueries.map((options, index) => {
113
+ if (options.keepPreviousData) {
114
+ // return previous data from one of the observers that no longer match
115
+ const previouslyUsedObserver = unmatchedObservers[index];
116
+
117
+ if (previouslyUsedObserver !== undefined) {
118
+ return {
119
+ defaultedQueryOptions: options,
120
+ observer: previouslyUsedObserver
121
+ };
122
+ }
123
+ }
124
+
125
+ return {
126
+ defaultedQueryOptions: options,
127
+ observer: getObserver(options)
128
+ };
129
+ });
130
+
131
+ const sortMatchesByOrderOfQueries = (a, b) => defaultedQueryOptions.indexOf(a.defaultedQueryOptions) - defaultedQueryOptions.indexOf(b.defaultedQueryOptions);
132
+
133
+ return matchingObservers.concat(newOrReusedObservers).sort(sortMatchesByOrderOfQueries);
134
+ }
135
+
136
+ onUpdate(observer, result) {
137
+ const index = this.observers.indexOf(observer);
138
+
139
+ if (index !== -1) {
140
+ this.result = replaceAt(this.result, index, result);
141
+ this.notify();
142
+ }
143
+ }
144
+
145
+ notify() {
146
+ notifyManager.batch(() => {
147
+ this.listeners.forEach(listener => {
148
+ listener(this.result);
149
+ });
150
+ });
151
+ }
152
+
153
+ }
154
+
155
+ export { QueriesObserver };
156
+ //# sourceMappingURL=queriesObserver.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queriesObserver.esm.js","sources":["../../src/queriesObserver.ts"],"sourcesContent":["import { difference, replaceAt } from './utils'\nimport { notifyManager } from './notifyManager'\nimport type {\n QueryObserverOptions,\n QueryObserverResult,\n DefaultedQueryObserverOptions,\n} from './types'\nimport type { QueryClient } from './queryClient'\nimport { NotifyOptions, QueryObserver } from './queryObserver'\nimport { Subscribable } from './subscribable'\n\ntype QueriesObserverListener = (result: QueryObserverResult[]) => void\n\nexport class QueriesObserver extends Subscribable<QueriesObserverListener> {\n private client: QueryClient\n private result: QueryObserverResult[]\n private queries: QueryObserverOptions[]\n private observers: QueryObserver[]\n private observersMap: Record<string, QueryObserver>\n\n constructor(client: QueryClient, queries?: QueryObserverOptions[]) {\n super()\n\n this.client = client\n this.queries = []\n this.result = []\n this.observers = []\n this.observersMap = {}\n\n if (queries) {\n this.setQueries(queries)\n }\n }\n\n protected onSubscribe(): void {\n if (this.listeners.length === 1) {\n this.observers.forEach((observer) => {\n observer.subscribe((result) => {\n this.onUpdate(observer, result)\n })\n })\n }\n }\n\n protected onUnsubscribe(): void {\n if (!this.listeners.length) {\n this.destroy()\n }\n }\n\n destroy(): void {\n this.listeners = []\n this.observers.forEach((observer) => {\n observer.destroy()\n })\n }\n\n setQueries(\n queries: QueryObserverOptions[],\n notifyOptions?: NotifyOptions,\n ): void {\n this.queries = queries\n\n notifyManager.batch(() => {\n const prevObservers = this.observers\n\n const newObserverMatches = this.findMatchingObservers(this.queries)\n\n // set options for the new observers to notify of changes\n newObserverMatches.forEach((match) =>\n match.observer.setOptions(match.defaultedQueryOptions, notifyOptions),\n )\n\n const newObservers = newObserverMatches.map((match) => match.observer)\n const newObserversMap = Object.fromEntries(\n newObservers.map((observer) => [observer.options.queryHash, observer]),\n )\n const newResult = newObservers.map((observer) =>\n observer.getCurrentResult(),\n )\n\n const hasIndexChange = newObservers.some(\n (observer, index) => observer !== prevObservers[index],\n )\n if (prevObservers.length === newObservers.length && !hasIndexChange) {\n return\n }\n\n this.observers = newObservers\n this.observersMap = newObserversMap\n this.result = newResult\n\n if (!this.hasListeners()) {\n return\n }\n\n difference(prevObservers, newObservers).forEach((observer) => {\n observer.destroy()\n })\n\n difference(newObservers, prevObservers).forEach((observer) => {\n observer.subscribe((result) => {\n this.onUpdate(observer, result)\n })\n })\n\n this.notify()\n })\n }\n\n getCurrentResult(): QueryObserverResult[] {\n return this.result\n }\n\n getOptimisticResult(queries: QueryObserverOptions[]): QueryObserverResult[] {\n return this.findMatchingObservers(queries).map((match) =>\n match.observer.getOptimisticResult(match.defaultedQueryOptions),\n )\n }\n\n private findMatchingObservers(\n queries: QueryObserverOptions[],\n ): QueryObserverMatch[] {\n const prevObservers = this.observers\n const defaultedQueryOptions = queries.map((options) =>\n this.client.defaultQueryOptions(options),\n )\n\n const matchingObservers: QueryObserverMatch[] =\n defaultedQueryOptions.flatMap((defaultedOptions) => {\n const match = prevObservers.find(\n (observer) =>\n observer.options.queryHash === defaultedOptions.queryHash,\n )\n if (match != null) {\n return [{ defaultedQueryOptions: defaultedOptions, observer: match }]\n }\n return []\n })\n\n const matchedQueryHashes = matchingObservers.map(\n (match) => match.defaultedQueryOptions.queryHash,\n )\n const unmatchedQueries = defaultedQueryOptions.filter(\n (defaultedOptions) =>\n !matchedQueryHashes.includes(defaultedOptions.queryHash),\n )\n\n const unmatchedObservers = prevObservers.filter(\n (prevObserver) =>\n !matchingObservers.some((match) => match.observer === prevObserver),\n )\n\n const getObserver = (options: QueryObserverOptions): QueryObserver => {\n const defaultedOptions = this.client.defaultQueryOptions(options)\n const currentObserver = this.observersMap[defaultedOptions.queryHash!]\n return currentObserver ?? new QueryObserver(this.client, defaultedOptions)\n }\n\n const newOrReusedObservers: QueryObserverMatch[] = unmatchedQueries.map(\n (options, index) => {\n if (options.keepPreviousData) {\n // return previous data from one of the observers that no longer match\n const previouslyUsedObserver = unmatchedObservers[index]\n if (previouslyUsedObserver !== undefined) {\n return {\n defaultedQueryOptions: options,\n observer: previouslyUsedObserver,\n }\n }\n }\n return {\n defaultedQueryOptions: options,\n observer: getObserver(options),\n }\n },\n )\n\n const sortMatchesByOrderOfQueries = (\n a: QueryObserverMatch,\n b: QueryObserverMatch,\n ): number =>\n defaultedQueryOptions.indexOf(a.defaultedQueryOptions) -\n defaultedQueryOptions.indexOf(b.defaultedQueryOptions)\n\n return matchingObservers\n .concat(newOrReusedObservers)\n .sort(sortMatchesByOrderOfQueries)\n }\n\n private onUpdate(observer: QueryObserver, result: QueryObserverResult): void {\n const index = this.observers.indexOf(observer)\n if (index !== -1) {\n this.result = replaceAt(this.result, index, result)\n this.notify()\n }\n }\n\n private notify(): void {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(this.result)\n })\n })\n }\n}\n\ntype QueryObserverMatch = {\n defaultedQueryOptions: DefaultedQueryObserverOptions\n observer: QueryObserver\n}\n"],"names":["QueriesObserver","Subscribable","constructor","client","queries","result","observers","observersMap","setQueries","onSubscribe","listeners","length","forEach","observer","subscribe","onUpdate","onUnsubscribe","destroy","notifyOptions","notifyManager","batch","prevObservers","newObserverMatches","findMatchingObservers","match","setOptions","defaultedQueryOptions","newObservers","map","newObserversMap","Object","fromEntries","options","queryHash","newResult","getCurrentResult","hasIndexChange","some","index","hasListeners","difference","notify","getOptimisticResult","defaultQueryOptions","matchingObservers","flatMap","defaultedOptions","find","matchedQueryHashes","unmatchedQueries","filter","includes","unmatchedObservers","prevObserver","getObserver","currentObserver","QueryObserver","newOrReusedObservers","keepPreviousData","previouslyUsedObserver","undefined","sortMatchesByOrderOfQueries","a","b","indexOf","concat","sort","replaceAt","listener"],"mappings":"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"}