@tanstack/query-core 5.0.0-alpha.3 → 5.0.0-alpha.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/lib/_virtual/_rollupPluginBabelHelpers.esm.js +13 -0
- package/build/lib/_virtual/_rollupPluginBabelHelpers.esm.js.map +1 -0
- package/build/lib/_virtual/_rollupPluginBabelHelpers.js +16 -0
- package/build/lib/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
- package/build/lib/focusManager.esm.js +31 -15
- package/build/lib/focusManager.esm.js.map +1 -1
- package/build/lib/focusManager.js +31 -15
- package/build/lib/focusManager.js.map +1 -1
- package/build/lib/hydration.esm.js +4 -2
- package/build/lib/hydration.esm.js.map +1 -1
- package/build/lib/hydration.js +4 -2
- package/build/lib/hydration.js.map +1 -1
- package/build/lib/infiniteQueryBehavior.d.ts +2 -2
- package/build/lib/infiniteQueryBehavior.esm.js +52 -48
- package/build/lib/infiniteQueryBehavior.esm.js.map +1 -1
- package/build/lib/infiniteQueryBehavior.js +52 -48
- package/build/lib/infiniteQueryBehavior.js.map +1 -1
- package/build/lib/infiniteQueryBehavior.mjs +48 -45
- package/build/lib/infiniteQueryBehavior.mjs.map +1 -1
- package/build/lib/infiniteQueryObserver.d.ts +6 -6
- package/build/lib/infiniteQueryObserver.esm.js +7 -8
- package/build/lib/infiniteQueryObserver.esm.js.map +1 -1
- package/build/lib/infiniteQueryObserver.js +7 -8
- package/build/lib/infiniteQueryObserver.js.map +1 -1
- package/build/lib/infiniteQueryObserver.mjs +4 -6
- package/build/lib/infiniteQueryObserver.mjs.map +1 -1
- package/build/lib/mutation.esm.js +127 -102
- package/build/lib/mutation.esm.js.map +1 -1
- package/build/lib/mutation.js +127 -102
- package/build/lib/mutation.js.map +1 -1
- package/build/lib/mutationCache.esm.js +30 -17
- package/build/lib/mutationCache.esm.js.map +1 -1
- package/build/lib/mutationCache.js +30 -17
- package/build/lib/mutationCache.js.map +1 -1
- package/build/lib/mutationObserver.esm.js +81 -51
- package/build/lib/mutationObserver.esm.js.map +1 -1
- package/build/lib/mutationObserver.js +81 -51
- package/build/lib/mutationObserver.js.map +1 -1
- package/build/lib/onlineManager.esm.js +29 -14
- package/build/lib/onlineManager.esm.js.map +1 -1
- package/build/lib/onlineManager.js +29 -14
- package/build/lib/onlineManager.js.map +1 -1
- package/build/lib/queriesObserver.esm.js +94 -65
- package/build/lib/queriesObserver.esm.js.map +1 -1
- package/build/lib/queriesObserver.js +94 -65
- package/build/lib/queriesObserver.js.map +1 -1
- package/build/lib/query.d.ts +4 -3
- package/build/lib/query.esm.js +210 -161
- package/build/lib/query.esm.js.map +1 -1
- package/build/lib/query.js +210 -161
- package/build/lib/query.js.map +1 -1
- package/build/lib/query.mjs.map +1 -1
- package/build/lib/queryCache.esm.js +16 -9
- package/build/lib/queryCache.esm.js.map +1 -1
- package/build/lib/queryCache.js +16 -9
- package/build/lib/queryCache.js.map +1 -1
- package/build/lib/queryClient.esm.js +103 -63
- package/build/lib/queryClient.esm.js.map +1 -1
- package/build/lib/queryClient.js +103 -63
- package/build/lib/queryClient.js.map +1 -1
- package/build/lib/queryObserver.esm.js +308 -207
- package/build/lib/queryObserver.esm.js.map +1 -1
- package/build/lib/queryObserver.js +307 -206
- package/build/lib/queryObserver.js.map +1 -1
- package/build/lib/removable.esm.js +13 -6
- package/build/lib/removable.esm.js.map +1 -1
- package/build/lib/removable.js +13 -6
- package/build/lib/removable.js.map +1 -1
- package/build/lib/retryer.esm.js +15 -14
- package/build/lib/retryer.esm.js.map +1 -1
- package/build/lib/retryer.js +15 -14
- package/build/lib/retryer.js.map +1 -1
- package/build/lib/tests/utils.d.ts +4 -5
- package/build/lib/types.d.ts +5 -3
- package/build/lib/utils.esm.js +1 -1
- package/build/lib/utils.esm.js.map +1 -1
- package/build/lib/utils.js +1 -1
- package/build/lib/utils.js.map +1 -1
- package/build/umd/index.development.js +52 -51
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +2 -2
- package/src/infiniteQueryBehavior.ts +52 -60
- package/src/infiniteQueryObserver.ts +15 -10
- package/src/query.ts +6 -4
- package/src/tests/focusManager.test.tsx +12 -14
- package/src/tests/hydration.test.tsx +15 -14
- package/src/tests/infiniteQueryBehavior.test.tsx +16 -9
- package/src/tests/infiniteQueryObserver.test.tsx +62 -1
- package/src/tests/mutationCache.test.tsx +11 -10
- package/src/tests/mutationObserver.test.tsx +3 -2
- package/src/tests/mutations.test.tsx +11 -10
- package/src/tests/notifyManager.test.tsx +7 -6
- package/src/tests/onlineManager.test.tsx +12 -17
- package/src/tests/queriesObserver.test.tsx +18 -17
- package/src/tests/query.test.tsx +18 -17
- package/src/tests/queryCache.test.tsx +14 -13
- package/src/tests/queryClient.test.tsx +49 -48
- package/src/tests/queryObserver.test.tsx +10 -9
- package/src/tests/utils.test.tsx +2 -1
- package/src/tests/utils.ts +5 -4
- package/src/types.ts +9 -1
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
var id = 0;
|
|
2
|
+
function _classPrivateFieldLooseKey(name) {
|
|
3
|
+
return "__private_" + id++ + "_" + name;
|
|
4
|
+
}
|
|
5
|
+
function _classPrivateFieldLooseBase(receiver, privateKey) {
|
|
6
|
+
if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {
|
|
7
|
+
throw new TypeError("attempted to use private field on non-instance");
|
|
8
|
+
}
|
|
9
|
+
return receiver;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export { _classPrivateFieldLooseBase as classPrivateFieldLooseBase, _classPrivateFieldLooseKey as classPrivateFieldLooseKey };
|
|
13
|
+
//# sourceMappingURL=_rollupPluginBabelHelpers.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_rollupPluginBabelHelpers.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var id = 0;
|
|
4
|
+
function _classPrivateFieldLooseKey(name) {
|
|
5
|
+
return "__private_" + id++ + "_" + name;
|
|
6
|
+
}
|
|
7
|
+
function _classPrivateFieldLooseBase(receiver, privateKey) {
|
|
8
|
+
if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {
|
|
9
|
+
throw new TypeError("attempted to use private field on non-instance");
|
|
10
|
+
}
|
|
11
|
+
return receiver;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
exports.classPrivateFieldLooseBase = _classPrivateFieldLooseBase;
|
|
15
|
+
exports.classPrivateFieldLooseKey = _classPrivateFieldLooseKey;
|
|
16
|
+
//# sourceMappingURL=_rollupPluginBabelHelpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_rollupPluginBabelHelpers.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;"}
|
|
@@ -1,13 +1,26 @@
|
|
|
1
|
+
import { classPrivateFieldLooseBase as _classPrivateFieldLooseBase, classPrivateFieldLooseKey as _classPrivateFieldLooseKey } from './_virtual/_rollupPluginBabelHelpers.esm.js';
|
|
1
2
|
import { Subscribable } from './subscribable.esm.js';
|
|
2
3
|
import { isServer } from './utils.esm.js';
|
|
3
4
|
|
|
5
|
+
var _focused = /*#__PURE__*/_classPrivateFieldLooseKey("focused");
|
|
6
|
+
var _cleanup = /*#__PURE__*/_classPrivateFieldLooseKey("cleanup");
|
|
7
|
+
var _setup = /*#__PURE__*/_classPrivateFieldLooseKey("setup");
|
|
4
8
|
class FocusManager extends Subscribable {
|
|
5
|
-
#focused;
|
|
6
|
-
#cleanup;
|
|
7
|
-
#setup;
|
|
8
9
|
constructor() {
|
|
9
10
|
super();
|
|
10
|
-
this
|
|
11
|
+
Object.defineProperty(this, _focused, {
|
|
12
|
+
writable: true,
|
|
13
|
+
value: void 0
|
|
14
|
+
});
|
|
15
|
+
Object.defineProperty(this, _cleanup, {
|
|
16
|
+
writable: true,
|
|
17
|
+
value: void 0
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(this, _setup, {
|
|
20
|
+
writable: true,
|
|
21
|
+
value: void 0
|
|
22
|
+
});
|
|
23
|
+
_classPrivateFieldLooseBase(this, _setup)[_setup] = onFocus => {
|
|
11
24
|
// addEventListener does not exist in React Native, but window does
|
|
12
25
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
13
26
|
if (!isServer && window.addEventListener) {
|
|
@@ -23,20 +36,22 @@ class FocusManager extends Subscribable {
|
|
|
23
36
|
};
|
|
24
37
|
}
|
|
25
38
|
onSubscribe() {
|
|
26
|
-
if (!this
|
|
27
|
-
this.setEventListener(this
|
|
39
|
+
if (!_classPrivateFieldLooseBase(this, _cleanup)[_cleanup]) {
|
|
40
|
+
this.setEventListener(_classPrivateFieldLooseBase(this, _setup)[_setup]);
|
|
28
41
|
}
|
|
29
42
|
}
|
|
30
43
|
onUnsubscribe() {
|
|
31
44
|
if (!this.hasListeners()) {
|
|
32
|
-
|
|
33
|
-
|
|
45
|
+
var _classPrivateFieldLoo, _classPrivateFieldLoo2;
|
|
46
|
+
(_classPrivateFieldLoo = (_classPrivateFieldLoo2 = _classPrivateFieldLooseBase(this, _cleanup))[_cleanup]) == null ? void 0 : _classPrivateFieldLoo.call(_classPrivateFieldLoo2);
|
|
47
|
+
_classPrivateFieldLooseBase(this, _cleanup)[_cleanup] = undefined;
|
|
34
48
|
}
|
|
35
49
|
}
|
|
36
50
|
setEventListener(setup) {
|
|
37
|
-
|
|
38
|
-
this
|
|
39
|
-
|
|
51
|
+
var _classPrivateFieldLoo3, _classPrivateFieldLoo4;
|
|
52
|
+
_classPrivateFieldLooseBase(this, _setup)[_setup] = setup;
|
|
53
|
+
(_classPrivateFieldLoo3 = (_classPrivateFieldLoo4 = _classPrivateFieldLooseBase(this, _cleanup))[_cleanup]) == null ? void 0 : _classPrivateFieldLoo3.call(_classPrivateFieldLoo4);
|
|
54
|
+
_classPrivateFieldLooseBase(this, _cleanup)[_cleanup] = setup(focused => {
|
|
40
55
|
if (typeof focused === 'boolean') {
|
|
41
56
|
this.setFocused(focused);
|
|
42
57
|
} else {
|
|
@@ -45,7 +60,7 @@ class FocusManager extends Subscribable {
|
|
|
45
60
|
});
|
|
46
61
|
}
|
|
47
62
|
setFocused(focused) {
|
|
48
|
-
this
|
|
63
|
+
_classPrivateFieldLooseBase(this, _focused)[_focused] = focused;
|
|
49
64
|
if (focused) {
|
|
50
65
|
this.onFocus();
|
|
51
66
|
}
|
|
@@ -56,13 +71,14 @@ class FocusManager extends Subscribable {
|
|
|
56
71
|
});
|
|
57
72
|
}
|
|
58
73
|
isFocused() {
|
|
59
|
-
|
|
60
|
-
|
|
74
|
+
var _globalThis$document;
|
|
75
|
+
if (typeof _classPrivateFieldLooseBase(this, _focused)[_focused] === 'boolean') {
|
|
76
|
+
return _classPrivateFieldLooseBase(this, _focused)[_focused];
|
|
61
77
|
}
|
|
62
78
|
|
|
63
79
|
// document global can be unavailable in react native
|
|
64
80
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
65
|
-
return globalThis.document
|
|
81
|
+
return ((_globalThis$document = globalThis.document) == null ? void 0 : _globalThis$document.visibilityState) !== 'hidden';
|
|
66
82
|
}
|
|
67
83
|
}
|
|
68
84
|
const focusManager = new FocusManager();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focusManager.esm.js","sources":["../../src/focusManager.ts"],"sourcesContent":["import { Subscribable } from './subscribable'\nimport { isServer } from './utils'\n\ntype SetupFn = (\n setFocused: (focused?: boolean) => void,\n) => (() => void) | undefined\n\nexport class FocusManager extends Subscribable {\n #focused?: boolean\n #cleanup?: () => void\n\n #setup: SetupFn\n\n constructor() {\n super()\n this.#setup = (onFocus) => {\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 = () => onFocus()\n // Listen to visibilitychange\n window.addEventListener('visibilitychange', listener, false)\n\n return () => {\n // Be sure to unsubscribe if a new handler is set\n window.removeEventListener('visibilitychange', listener)\n }\n }\n return\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((focused) => {\n if (typeof focused === 'boolean') {\n this.setFocused(focused)\n } else {\n this.onFocus()\n }\n })\n }\n\n setFocused(focused?: boolean): void {\n this.#focused = focused\n\n if (focused) {\n this.onFocus()\n }\n }\n\n onFocus(): void {\n this.listeners.forEach((listener) => {\n listener()\n })\n }\n\n isFocused(): boolean {\n if (typeof this.#focused === 'boolean') {\n return this.#focused\n }\n\n // document global can be unavailable in react native\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return globalThis.document?.visibilityState !== 'hidden'\n }\n}\n\nexport const focusManager = new FocusManager()\n"],"names":["FocusManager","Subscribable","constructor","onFocus","isServer","window","addEventListener","listener","removeEventListener","onSubscribe","setEventListener","onUnsubscribe","hasListeners","undefined","setup","focused","setFocused","listeners","forEach","isFocused","globalThis","document","visibilityState","focusManager"],"mappings":"
|
|
1
|
+
{"version":3,"file":"focusManager.esm.js","sources":["../../src/focusManager.ts"],"sourcesContent":["import { Subscribable } from './subscribable'\nimport { isServer } from './utils'\n\ntype SetupFn = (\n setFocused: (focused?: boolean) => void,\n) => (() => void) | undefined\n\nexport class FocusManager extends Subscribable {\n #focused?: boolean\n #cleanup?: () => void\n\n #setup: SetupFn\n\n constructor() {\n super()\n this.#setup = (onFocus) => {\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 = () => onFocus()\n // Listen to visibilitychange\n window.addEventListener('visibilitychange', listener, false)\n\n return () => {\n // Be sure to unsubscribe if a new handler is set\n window.removeEventListener('visibilitychange', listener)\n }\n }\n return\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((focused) => {\n if (typeof focused === 'boolean') {\n this.setFocused(focused)\n } else {\n this.onFocus()\n }\n })\n }\n\n setFocused(focused?: boolean): void {\n this.#focused = focused\n\n if (focused) {\n this.onFocus()\n }\n }\n\n onFocus(): void {\n this.listeners.forEach((listener) => {\n listener()\n })\n }\n\n isFocused(): boolean {\n if (typeof this.#focused === 'boolean') {\n return this.#focused\n }\n\n // document global can be unavailable in react native\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return globalThis.document?.visibilityState !== 'hidden'\n }\n}\n\nexport const focusManager = new FocusManager()\n"],"names":["FocusManager","Subscribable","constructor","onFocus","isServer","window","addEventListener","listener","removeEventListener","onSubscribe","setEventListener","onUnsubscribe","hasListeners","undefined","setup","focused","setFocused","listeners","forEach","isFocused","globalThis","document","visibilityState","focusManager"],"mappings":"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"}
|
|
@@ -1,15 +1,28 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var _rollupPluginBabelHelpers = require('./_virtual/_rollupPluginBabelHelpers.js');
|
|
3
4
|
var subscribable = require('./subscribable.js');
|
|
4
5
|
var utils = require('./utils.js');
|
|
5
6
|
|
|
7
|
+
var _focused = /*#__PURE__*/_rollupPluginBabelHelpers.classPrivateFieldLooseKey("focused");
|
|
8
|
+
var _cleanup = /*#__PURE__*/_rollupPluginBabelHelpers.classPrivateFieldLooseKey("cleanup");
|
|
9
|
+
var _setup = /*#__PURE__*/_rollupPluginBabelHelpers.classPrivateFieldLooseKey("setup");
|
|
6
10
|
class FocusManager extends subscribable.Subscribable {
|
|
7
|
-
#focused;
|
|
8
|
-
#cleanup;
|
|
9
|
-
#setup;
|
|
10
11
|
constructor() {
|
|
11
12
|
super();
|
|
12
|
-
this
|
|
13
|
+
Object.defineProperty(this, _focused, {
|
|
14
|
+
writable: true,
|
|
15
|
+
value: void 0
|
|
16
|
+
});
|
|
17
|
+
Object.defineProperty(this, _cleanup, {
|
|
18
|
+
writable: true,
|
|
19
|
+
value: void 0
|
|
20
|
+
});
|
|
21
|
+
Object.defineProperty(this, _setup, {
|
|
22
|
+
writable: true,
|
|
23
|
+
value: void 0
|
|
24
|
+
});
|
|
25
|
+
_rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _setup)[_setup] = onFocus => {
|
|
13
26
|
// addEventListener does not exist in React Native, but window does
|
|
14
27
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
15
28
|
if (!utils.isServer && window.addEventListener) {
|
|
@@ -25,20 +38,22 @@ class FocusManager extends subscribable.Subscribable {
|
|
|
25
38
|
};
|
|
26
39
|
}
|
|
27
40
|
onSubscribe() {
|
|
28
|
-
if (!this
|
|
29
|
-
this.setEventListener(this
|
|
41
|
+
if (!_rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _cleanup)[_cleanup]) {
|
|
42
|
+
this.setEventListener(_rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _setup)[_setup]);
|
|
30
43
|
}
|
|
31
44
|
}
|
|
32
45
|
onUnsubscribe() {
|
|
33
46
|
if (!this.hasListeners()) {
|
|
34
|
-
|
|
35
|
-
|
|
47
|
+
var _classPrivateFieldLoo, _classPrivateFieldLoo2;
|
|
48
|
+
(_classPrivateFieldLoo = (_classPrivateFieldLoo2 = _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _cleanup))[_cleanup]) == null ? void 0 : _classPrivateFieldLoo.call(_classPrivateFieldLoo2);
|
|
49
|
+
_rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _cleanup)[_cleanup] = undefined;
|
|
36
50
|
}
|
|
37
51
|
}
|
|
38
52
|
setEventListener(setup) {
|
|
39
|
-
|
|
40
|
-
this
|
|
41
|
-
|
|
53
|
+
var _classPrivateFieldLoo3, _classPrivateFieldLoo4;
|
|
54
|
+
_rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _setup)[_setup] = setup;
|
|
55
|
+
(_classPrivateFieldLoo3 = (_classPrivateFieldLoo4 = _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _cleanup))[_cleanup]) == null ? void 0 : _classPrivateFieldLoo3.call(_classPrivateFieldLoo4);
|
|
56
|
+
_rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _cleanup)[_cleanup] = setup(focused => {
|
|
42
57
|
if (typeof focused === 'boolean') {
|
|
43
58
|
this.setFocused(focused);
|
|
44
59
|
} else {
|
|
@@ -47,7 +62,7 @@ class FocusManager extends subscribable.Subscribable {
|
|
|
47
62
|
});
|
|
48
63
|
}
|
|
49
64
|
setFocused(focused) {
|
|
50
|
-
this
|
|
65
|
+
_rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _focused)[_focused] = focused;
|
|
51
66
|
if (focused) {
|
|
52
67
|
this.onFocus();
|
|
53
68
|
}
|
|
@@ -58,13 +73,14 @@ class FocusManager extends subscribable.Subscribable {
|
|
|
58
73
|
});
|
|
59
74
|
}
|
|
60
75
|
isFocused() {
|
|
61
|
-
|
|
62
|
-
|
|
76
|
+
var _globalThis$document;
|
|
77
|
+
if (typeof _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _focused)[_focused] === 'boolean') {
|
|
78
|
+
return _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _focused)[_focused];
|
|
63
79
|
}
|
|
64
80
|
|
|
65
81
|
// document global can be unavailable in react native
|
|
66
82
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
67
|
-
return globalThis.document
|
|
83
|
+
return ((_globalThis$document = globalThis.document) == null ? void 0 : _globalThis$document.visibilityState) !== 'hidden';
|
|
68
84
|
}
|
|
69
85
|
}
|
|
70
86
|
const focusManager = new FocusManager();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focusManager.js","sources":["../../src/focusManager.ts"],"sourcesContent":["import { Subscribable } from './subscribable'\nimport { isServer } from './utils'\n\ntype SetupFn = (\n setFocused: (focused?: boolean) => void,\n) => (() => void) | undefined\n\nexport class FocusManager extends Subscribable {\n #focused?: boolean\n #cleanup?: () => void\n\n #setup: SetupFn\n\n constructor() {\n super()\n this.#setup = (onFocus) => {\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 = () => onFocus()\n // Listen to visibilitychange\n window.addEventListener('visibilitychange', listener, false)\n\n return () => {\n // Be sure to unsubscribe if a new handler is set\n window.removeEventListener('visibilitychange', listener)\n }\n }\n return\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((focused) => {\n if (typeof focused === 'boolean') {\n this.setFocused(focused)\n } else {\n this.onFocus()\n }\n })\n }\n\n setFocused(focused?: boolean): void {\n this.#focused = focused\n\n if (focused) {\n this.onFocus()\n }\n }\n\n onFocus(): void {\n this.listeners.forEach((listener) => {\n listener()\n })\n }\n\n isFocused(): boolean {\n if (typeof this.#focused === 'boolean') {\n return this.#focused\n }\n\n // document global can be unavailable in react native\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return globalThis.document?.visibilityState !== 'hidden'\n }\n}\n\nexport const focusManager = new FocusManager()\n"],"names":["FocusManager","Subscribable","constructor","onFocus","isServer","window","addEventListener","listener","removeEventListener","onSubscribe","setEventListener","onUnsubscribe","hasListeners","undefined","setup","focused","setFocused","listeners","forEach","isFocused","globalThis","document","visibilityState","focusManager"],"mappings":"
|
|
1
|
+
{"version":3,"file":"focusManager.js","sources":["../../src/focusManager.ts"],"sourcesContent":["import { Subscribable } from './subscribable'\nimport { isServer } from './utils'\n\ntype SetupFn = (\n setFocused: (focused?: boolean) => void,\n) => (() => void) | undefined\n\nexport class FocusManager extends Subscribable {\n #focused?: boolean\n #cleanup?: () => void\n\n #setup: SetupFn\n\n constructor() {\n super()\n this.#setup = (onFocus) => {\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 = () => onFocus()\n // Listen to visibilitychange\n window.addEventListener('visibilitychange', listener, false)\n\n return () => {\n // Be sure to unsubscribe if a new handler is set\n window.removeEventListener('visibilitychange', listener)\n }\n }\n return\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((focused) => {\n if (typeof focused === 'boolean') {\n this.setFocused(focused)\n } else {\n this.onFocus()\n }\n })\n }\n\n setFocused(focused?: boolean): void {\n this.#focused = focused\n\n if (focused) {\n this.onFocus()\n }\n }\n\n onFocus(): void {\n this.listeners.forEach((listener) => {\n listener()\n })\n }\n\n isFocused(): boolean {\n if (typeof this.#focused === 'boolean') {\n return this.#focused\n }\n\n // document global can be unavailable in react native\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return globalThis.document?.visibilityState !== 'hidden'\n }\n}\n\nexport const focusManager = new FocusManager()\n"],"names":["_classPrivateFieldLooseKey","FocusManager","Subscribable","constructor","_classPrivateFieldLooseBase","onFocus","isServer","window","addEventListener","listener","removeEventListener","onSubscribe","setEventListener","onUnsubscribe","hasListeners","undefined","setup","focused","setFocused","listeners","forEach","isFocused","globalThis","document","visibilityState","focusManager"],"mappings":"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"}
|
|
@@ -62,12 +62,14 @@ function hydrate(client, dehydratedState, options) {
|
|
|
62
62
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
63
63
|
const queries = dehydratedState.queries || [];
|
|
64
64
|
mutations.forEach(dehydratedMutation => {
|
|
65
|
+
var _options$defaultOptio;
|
|
65
66
|
mutationCache.build(client, {
|
|
66
|
-
...options
|
|
67
|
+
...(options == null ? void 0 : (_options$defaultOptio = options.defaultOptions) == null ? void 0 : _options$defaultOptio.mutations),
|
|
67
68
|
mutationKey: dehydratedMutation.mutationKey
|
|
68
69
|
}, dehydratedMutation.state);
|
|
69
70
|
});
|
|
70
71
|
queries.forEach(dehydratedQuery => {
|
|
72
|
+
var _options$defaultOptio2;
|
|
71
73
|
const query = queryCache.get(dehydratedQuery.queryHash);
|
|
72
74
|
|
|
73
75
|
// Reset fetch status to idle in the dehydrated state to avoid
|
|
@@ -87,7 +89,7 @@ function hydrate(client, dehydratedState, options) {
|
|
|
87
89
|
|
|
88
90
|
// Restore query
|
|
89
91
|
queryCache.build(client, {
|
|
90
|
-
...options
|
|
92
|
+
...(options == null ? void 0 : (_options$defaultOptio2 = options.defaultOptions) == null ? void 0 : _options$defaultOptio2.queries),
|
|
91
93
|
queryKey: dehydratedQuery.queryKey,
|
|
92
94
|
queryHash: dehydratedQuery.queryHash
|
|
93
95
|
}, dehydratedQueryState);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydration.esm.js","sources":["../../src/hydration.ts"],"sourcesContent":["import type { QueryClient } from './queryClient'\nimport type { Query, QueryState } from './query'\nimport type {\n MutationKey,\n MutationOptions,\n QueryKey,\n QueryOptions,\n} from './types'\nimport type { Mutation, MutationState } from './mutation'\n\n// TYPES\n\nexport interface DehydrateOptions {\n dehydrateMutations?: boolean\n dehydrateQueries?: boolean\n shouldDehydrateMutation?: ShouldDehydrateMutationFunction\n shouldDehydrateQuery?: ShouldDehydrateQueryFunction\n}\n\nexport interface HydrateOptions {\n defaultOptions?: {\n queries?: QueryOptions\n mutations?: MutationOptions\n }\n}\n\ninterface DehydratedMutation {\n mutationKey?: MutationKey\n state: MutationState\n}\n\ninterface DehydratedQuery {\n queryHash: string\n queryKey: QueryKey\n state: QueryState\n}\n\nexport interface DehydratedState {\n mutations: DehydratedMutation[]\n queries: DehydratedQuery[]\n}\n\nexport type ShouldDehydrateQueryFunction = (query: Query) => boolean\n\nexport type ShouldDehydrateMutationFunction = (mutation: Mutation) => boolean\n\n// FUNCTIONS\n\nfunction dehydrateMutation(mutation: Mutation): DehydratedMutation {\n return {\n mutationKey: mutation.options.mutationKey,\n state: mutation.state,\n }\n}\n\n// Most config is not dehydrated but instead meant to configure again when\n// consuming the de/rehydrated data, typically with useQuery on the client.\n// Sometimes it might make sense to prefetch data on the server and include\n// in the html-payload, but not consume it on the initial render.\nfunction dehydrateQuery(query: Query): DehydratedQuery {\n return {\n state: query.state,\n queryKey: query.queryKey,\n queryHash: query.queryHash,\n }\n}\n\nexport function defaultShouldDehydrateMutation(mutation: Mutation) {\n return mutation.state.isPaused\n}\n\nexport function defaultShouldDehydrateQuery(query: Query) {\n return query.state.status === 'success'\n}\n\nexport function dehydrate(\n client: QueryClient,\n options: DehydrateOptions = {},\n): DehydratedState {\n const mutations: DehydratedMutation[] = []\n const queries: DehydratedQuery[] = []\n\n if (options.dehydrateMutations !== false) {\n const shouldDehydrateMutation =\n options.shouldDehydrateMutation || defaultShouldDehydrateMutation\n\n client\n .getMutationCache()\n .getAll()\n .forEach((mutation) => {\n if (shouldDehydrateMutation(mutation)) {\n mutations.push(dehydrateMutation(mutation))\n }\n })\n }\n\n if (options.dehydrateQueries !== false) {\n const shouldDehydrateQuery =\n options.shouldDehydrateQuery || defaultShouldDehydrateQuery\n\n client\n .getQueryCache()\n .getAll()\n .forEach((query) => {\n if (shouldDehydrateQuery(query)) {\n queries.push(dehydrateQuery(query))\n }\n })\n }\n\n return { mutations, queries }\n}\n\nexport function hydrate(\n client: QueryClient,\n dehydratedState: unknown,\n options?: HydrateOptions,\n): void {\n if (typeof dehydratedState !== 'object' || dehydratedState === null) {\n return\n }\n\n const mutationCache = client.getMutationCache()\n const queryCache = client.getQueryCache()\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const mutations = (dehydratedState as DehydratedState).mutations || []\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const queries = (dehydratedState as DehydratedState).queries || []\n\n mutations.forEach((dehydratedMutation) => {\n mutationCache.build(\n client,\n {\n ...options?.defaultOptions?.mutations,\n mutationKey: dehydratedMutation.mutationKey,\n },\n dehydratedMutation.state,\n )\n })\n\n queries.forEach((dehydratedQuery) => {\n const query = queryCache.get(dehydratedQuery.queryHash)\n\n // Reset fetch status to idle in the dehydrated state to avoid\n // query being stuck in fetching state upon hydration\n const dehydratedQueryState = {\n ...dehydratedQuery.state,\n fetchStatus: 'idle' as const,\n }\n\n // Do not hydrate if an existing query exists with newer data\n if (query) {\n if (query.state.dataUpdatedAt < dehydratedQueryState.dataUpdatedAt) {\n query.setState(dehydratedQueryState)\n }\n return\n }\n\n // Restore query\n queryCache.build(\n client,\n {\n ...options?.defaultOptions?.queries,\n queryKey: dehydratedQuery.queryKey,\n queryHash: dehydratedQuery.queryHash,\n },\n dehydratedQueryState,\n )\n })\n}\n"],"names":["dehydrateMutation","mutation","mutationKey","options","state","dehydrateQuery","query","queryKey","queryHash","defaultShouldDehydrateMutation","isPaused","defaultShouldDehydrateQuery","status","dehydrate","client","mutations","queries","dehydrateMutations","shouldDehydrateMutation","getMutationCache","getAll","forEach","push","dehydrateQueries","shouldDehydrateQuery","getQueryCache","hydrate","dehydratedState","mutationCache","queryCache","dehydratedMutation","build","defaultOptions","dehydratedQuery","get","dehydratedQueryState","fetchStatus","dataUpdatedAt","setState"],"mappings":"AAUA;;AAoCA;;AAEA,SAASA,iBAAiB,CAACC,QAAkB,EAAsB;EACjE,OAAO;AACLC,IAAAA,WAAW,EAAED,QAAQ,CAACE,OAAO,CAACD,WAAW;IACzCE,KAAK,EAAEH,QAAQ,CAACG,KAAAA;GACjB,CAAA;AACH,CAAA;;AAEA;AACA;AACA;AACA;AACA,SAASC,cAAc,CAACC,KAAY,EAAmB;EACrD,OAAO;IACLF,KAAK,EAAEE,KAAK,CAACF,KAAK;IAClBG,QAAQ,EAAED,KAAK,CAACC,QAAQ;IACxBC,SAAS,EAAEF,KAAK,CAACE,SAAAA;GAClB,CAAA;AACH,CAAA;AAEO,SAASC,8BAA8B,CAACR,QAAkB,EAAE;AACjE,EAAA,OAAOA,QAAQ,CAACG,KAAK,CAACM,QAAQ,CAAA;AAChC,CAAA;AAEO,SAASC,2BAA2B,CAACL,KAAY,EAAE;AACxD,EAAA,OAAOA,KAAK,CAACF,KAAK,CAACQ,MAAM,KAAK,SAAS,CAAA;AACzC,CAAA;AAEO,SAASC,SAAS,CACvBC,MAAmB,EACnBX,OAAyB,GAAG,EAAE,EACb;EACjB,MAAMY,SAA+B,GAAG,EAAE,CAAA;EAC1C,MAAMC,OAA0B,GAAG,EAAE,CAAA;AAErC,EAAA,IAAIb,OAAO,CAACc,kBAAkB,KAAK,KAAK,EAAE;AACxC,IAAA,MAAMC,uBAAuB,GAC3Bf,OAAO,CAACe,uBAAuB,IAAIT,8BAA8B,CAAA;IAEnEK,MAAM,CACHK,gBAAgB,EAAE,CAClBC,MAAM,EAAE,CACRC,OAAO,CAAEpB,QAAQ,IAAK;AACrB,MAAA,IAAIiB,uBAAuB,CAACjB,QAAQ,CAAC,EAAE;AACrCc,QAAAA,SAAS,CAACO,IAAI,CAACtB,iBAAiB,CAACC,QAAQ,CAAC,CAAC,CAAA;AAC7C,OAAA;AACF,KAAC,CAAC,CAAA;AACN,GAAA;AAEA,EAAA,IAAIE,OAAO,CAACoB,gBAAgB,KAAK,KAAK,EAAE;AACtC,IAAA,MAAMC,oBAAoB,GACxBrB,OAAO,CAACqB,oBAAoB,IAAIb,2BAA2B,CAAA;IAE7DG,MAAM,CACHW,aAAa,EAAE,CACfL,MAAM,EAAE,CACRC,OAAO,CAAEf,KAAK,IAAK;AAClB,MAAA,IAAIkB,oBAAoB,CAAClB,KAAK,CAAC,EAAE;AAC/BU,QAAAA,OAAO,CAACM,IAAI,CAACjB,cAAc,CAACC,KAAK,CAAC,CAAC,CAAA;AACrC,OAAA;AACF,KAAC,CAAC,CAAA;AACN,GAAA;EAEA,OAAO;IAAES,SAAS;AAAEC,IAAAA,OAAAA;GAAS,CAAA;AAC/B,CAAA;AAEO,SAASU,OAAO,CACrBZ,MAAmB,EACnBa,eAAwB,EACxBxB,OAAwB,EAClB;EACN,IAAI,OAAOwB,eAAe,KAAK,QAAQ,IAAIA,eAAe,KAAK,IAAI,EAAE;AACnE,IAAA,OAAA;AACF,GAAA;AAEA,EAAA,MAAMC,aAAa,GAAGd,MAAM,CAACK,gBAAgB,EAAE,CAAA;AAC/C,EAAA,MAAMU,UAAU,GAAGf,MAAM,CAACW,aAAa,EAAE,CAAA;;AAEzC;AACA,EAAA,MAAMV,SAAS,GAAIY,eAAe,CAAqBZ,SAAS,IAAI,EAAE,CAAA;AACtE;AACA,EAAA,MAAMC,OAAO,GAAIW,eAAe,CAAqBX,OAAO,IAAI,EAAE,CAAA;AAElED,EAAAA,SAAS,CAACM,OAAO,CAAES,kBAAkB,IAAK;AACxCF,IAAAA,aAAa,CAACG,KAAK,CACjBjB,MAAM,EACN;AACE,MAAA,
|
|
1
|
+
{"version":3,"file":"hydration.esm.js","sources":["../../src/hydration.ts"],"sourcesContent":["import type { QueryClient } from './queryClient'\nimport type { Query, QueryState } from './query'\nimport type {\n MutationKey,\n MutationOptions,\n QueryKey,\n QueryOptions,\n} from './types'\nimport type { Mutation, MutationState } from './mutation'\n\n// TYPES\n\nexport interface DehydrateOptions {\n dehydrateMutations?: boolean\n dehydrateQueries?: boolean\n shouldDehydrateMutation?: ShouldDehydrateMutationFunction\n shouldDehydrateQuery?: ShouldDehydrateQueryFunction\n}\n\nexport interface HydrateOptions {\n defaultOptions?: {\n queries?: QueryOptions\n mutations?: MutationOptions\n }\n}\n\ninterface DehydratedMutation {\n mutationKey?: MutationKey\n state: MutationState\n}\n\ninterface DehydratedQuery {\n queryHash: string\n queryKey: QueryKey\n state: QueryState\n}\n\nexport interface DehydratedState {\n mutations: DehydratedMutation[]\n queries: DehydratedQuery[]\n}\n\nexport type ShouldDehydrateQueryFunction = (query: Query) => boolean\n\nexport type ShouldDehydrateMutationFunction = (mutation: Mutation) => boolean\n\n// FUNCTIONS\n\nfunction dehydrateMutation(mutation: Mutation): DehydratedMutation {\n return {\n mutationKey: mutation.options.mutationKey,\n state: mutation.state,\n }\n}\n\n// Most config is not dehydrated but instead meant to configure again when\n// consuming the de/rehydrated data, typically with useQuery on the client.\n// Sometimes it might make sense to prefetch data on the server and include\n// in the html-payload, but not consume it on the initial render.\nfunction dehydrateQuery(query: Query): DehydratedQuery {\n return {\n state: query.state,\n queryKey: query.queryKey,\n queryHash: query.queryHash,\n }\n}\n\nexport function defaultShouldDehydrateMutation(mutation: Mutation) {\n return mutation.state.isPaused\n}\n\nexport function defaultShouldDehydrateQuery(query: Query) {\n return query.state.status === 'success'\n}\n\nexport function dehydrate(\n client: QueryClient,\n options: DehydrateOptions = {},\n): DehydratedState {\n const mutations: DehydratedMutation[] = []\n const queries: DehydratedQuery[] = []\n\n if (options.dehydrateMutations !== false) {\n const shouldDehydrateMutation =\n options.shouldDehydrateMutation || defaultShouldDehydrateMutation\n\n client\n .getMutationCache()\n .getAll()\n .forEach((mutation) => {\n if (shouldDehydrateMutation(mutation)) {\n mutations.push(dehydrateMutation(mutation))\n }\n })\n }\n\n if (options.dehydrateQueries !== false) {\n const shouldDehydrateQuery =\n options.shouldDehydrateQuery || defaultShouldDehydrateQuery\n\n client\n .getQueryCache()\n .getAll()\n .forEach((query) => {\n if (shouldDehydrateQuery(query)) {\n queries.push(dehydrateQuery(query))\n }\n })\n }\n\n return { mutations, queries }\n}\n\nexport function hydrate(\n client: QueryClient,\n dehydratedState: unknown,\n options?: HydrateOptions,\n): void {\n if (typeof dehydratedState !== 'object' || dehydratedState === null) {\n return\n }\n\n const mutationCache = client.getMutationCache()\n const queryCache = client.getQueryCache()\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const mutations = (dehydratedState as DehydratedState).mutations || []\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const queries = (dehydratedState as DehydratedState).queries || []\n\n mutations.forEach((dehydratedMutation) => {\n mutationCache.build(\n client,\n {\n ...options?.defaultOptions?.mutations,\n mutationKey: dehydratedMutation.mutationKey,\n },\n dehydratedMutation.state,\n )\n })\n\n queries.forEach((dehydratedQuery) => {\n const query = queryCache.get(dehydratedQuery.queryHash)\n\n // Reset fetch status to idle in the dehydrated state to avoid\n // query being stuck in fetching state upon hydration\n const dehydratedQueryState = {\n ...dehydratedQuery.state,\n fetchStatus: 'idle' as const,\n }\n\n // Do not hydrate if an existing query exists with newer data\n if (query) {\n if (query.state.dataUpdatedAt < dehydratedQueryState.dataUpdatedAt) {\n query.setState(dehydratedQueryState)\n }\n return\n }\n\n // Restore query\n queryCache.build(\n client,\n {\n ...options?.defaultOptions?.queries,\n queryKey: dehydratedQuery.queryKey,\n queryHash: dehydratedQuery.queryHash,\n },\n dehydratedQueryState,\n )\n })\n}\n"],"names":["dehydrateMutation","mutation","mutationKey","options","state","dehydrateQuery","query","queryKey","queryHash","defaultShouldDehydrateMutation","isPaused","defaultShouldDehydrateQuery","status","dehydrate","client","mutations","queries","dehydrateMutations","shouldDehydrateMutation","getMutationCache","getAll","forEach","push","dehydrateQueries","shouldDehydrateQuery","getQueryCache","hydrate","dehydratedState","mutationCache","queryCache","dehydratedMutation","build","defaultOptions","dehydratedQuery","get","dehydratedQueryState","fetchStatus","dataUpdatedAt","setState"],"mappings":"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"}
|
package/build/lib/hydration.js
CHANGED
|
@@ -64,12 +64,14 @@ function hydrate(client, dehydratedState, options) {
|
|
|
64
64
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
65
65
|
const queries = dehydratedState.queries || [];
|
|
66
66
|
mutations.forEach(dehydratedMutation => {
|
|
67
|
+
var _options$defaultOptio;
|
|
67
68
|
mutationCache.build(client, {
|
|
68
|
-
...options
|
|
69
|
+
...(options == null ? void 0 : (_options$defaultOptio = options.defaultOptions) == null ? void 0 : _options$defaultOptio.mutations),
|
|
69
70
|
mutationKey: dehydratedMutation.mutationKey
|
|
70
71
|
}, dehydratedMutation.state);
|
|
71
72
|
});
|
|
72
73
|
queries.forEach(dehydratedQuery => {
|
|
74
|
+
var _options$defaultOptio2;
|
|
73
75
|
const query = queryCache.get(dehydratedQuery.queryHash);
|
|
74
76
|
|
|
75
77
|
// Reset fetch status to idle in the dehydrated state to avoid
|
|
@@ -89,7 +91,7 @@ function hydrate(client, dehydratedState, options) {
|
|
|
89
91
|
|
|
90
92
|
// Restore query
|
|
91
93
|
queryCache.build(client, {
|
|
92
|
-
...options
|
|
94
|
+
...(options == null ? void 0 : (_options$defaultOptio2 = options.defaultOptions) == null ? void 0 : _options$defaultOptio2.queries),
|
|
93
95
|
queryKey: dehydratedQuery.queryKey,
|
|
94
96
|
queryHash: dehydratedQuery.queryHash
|
|
95
97
|
}, dehydratedQueryState);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydration.js","sources":["../../src/hydration.ts"],"sourcesContent":["import type { QueryClient } from './queryClient'\nimport type { Query, QueryState } from './query'\nimport type {\n MutationKey,\n MutationOptions,\n QueryKey,\n QueryOptions,\n} from './types'\nimport type { Mutation, MutationState } from './mutation'\n\n// TYPES\n\nexport interface DehydrateOptions {\n dehydrateMutations?: boolean\n dehydrateQueries?: boolean\n shouldDehydrateMutation?: ShouldDehydrateMutationFunction\n shouldDehydrateQuery?: ShouldDehydrateQueryFunction\n}\n\nexport interface HydrateOptions {\n defaultOptions?: {\n queries?: QueryOptions\n mutations?: MutationOptions\n }\n}\n\ninterface DehydratedMutation {\n mutationKey?: MutationKey\n state: MutationState\n}\n\ninterface DehydratedQuery {\n queryHash: string\n queryKey: QueryKey\n state: QueryState\n}\n\nexport interface DehydratedState {\n mutations: DehydratedMutation[]\n queries: DehydratedQuery[]\n}\n\nexport type ShouldDehydrateQueryFunction = (query: Query) => boolean\n\nexport type ShouldDehydrateMutationFunction = (mutation: Mutation) => boolean\n\n// FUNCTIONS\n\nfunction dehydrateMutation(mutation: Mutation): DehydratedMutation {\n return {\n mutationKey: mutation.options.mutationKey,\n state: mutation.state,\n }\n}\n\n// Most config is not dehydrated but instead meant to configure again when\n// consuming the de/rehydrated data, typically with useQuery on the client.\n// Sometimes it might make sense to prefetch data on the server and include\n// in the html-payload, but not consume it on the initial render.\nfunction dehydrateQuery(query: Query): DehydratedQuery {\n return {\n state: query.state,\n queryKey: query.queryKey,\n queryHash: query.queryHash,\n }\n}\n\nexport function defaultShouldDehydrateMutation(mutation: Mutation) {\n return mutation.state.isPaused\n}\n\nexport function defaultShouldDehydrateQuery(query: Query) {\n return query.state.status === 'success'\n}\n\nexport function dehydrate(\n client: QueryClient,\n options: DehydrateOptions = {},\n): DehydratedState {\n const mutations: DehydratedMutation[] = []\n const queries: DehydratedQuery[] = []\n\n if (options.dehydrateMutations !== false) {\n const shouldDehydrateMutation =\n options.shouldDehydrateMutation || defaultShouldDehydrateMutation\n\n client\n .getMutationCache()\n .getAll()\n .forEach((mutation) => {\n if (shouldDehydrateMutation(mutation)) {\n mutations.push(dehydrateMutation(mutation))\n }\n })\n }\n\n if (options.dehydrateQueries !== false) {\n const shouldDehydrateQuery =\n options.shouldDehydrateQuery || defaultShouldDehydrateQuery\n\n client\n .getQueryCache()\n .getAll()\n .forEach((query) => {\n if (shouldDehydrateQuery(query)) {\n queries.push(dehydrateQuery(query))\n }\n })\n }\n\n return { mutations, queries }\n}\n\nexport function hydrate(\n client: QueryClient,\n dehydratedState: unknown,\n options?: HydrateOptions,\n): void {\n if (typeof dehydratedState !== 'object' || dehydratedState === null) {\n return\n }\n\n const mutationCache = client.getMutationCache()\n const queryCache = client.getQueryCache()\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const mutations = (dehydratedState as DehydratedState).mutations || []\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const queries = (dehydratedState as DehydratedState).queries || []\n\n mutations.forEach((dehydratedMutation) => {\n mutationCache.build(\n client,\n {\n ...options?.defaultOptions?.mutations,\n mutationKey: dehydratedMutation.mutationKey,\n },\n dehydratedMutation.state,\n )\n })\n\n queries.forEach((dehydratedQuery) => {\n const query = queryCache.get(dehydratedQuery.queryHash)\n\n // Reset fetch status to idle in the dehydrated state to avoid\n // query being stuck in fetching state upon hydration\n const dehydratedQueryState = {\n ...dehydratedQuery.state,\n fetchStatus: 'idle' as const,\n }\n\n // Do not hydrate if an existing query exists with newer data\n if (query) {\n if (query.state.dataUpdatedAt < dehydratedQueryState.dataUpdatedAt) {\n query.setState(dehydratedQueryState)\n }\n return\n }\n\n // Restore query\n queryCache.build(\n client,\n {\n ...options?.defaultOptions?.queries,\n queryKey: dehydratedQuery.queryKey,\n queryHash: dehydratedQuery.queryHash,\n },\n dehydratedQueryState,\n )\n })\n}\n"],"names":["dehydrateMutation","mutation","mutationKey","options","state","dehydrateQuery","query","queryKey","queryHash","defaultShouldDehydrateMutation","isPaused","defaultShouldDehydrateQuery","status","dehydrate","client","mutations","queries","dehydrateMutations","shouldDehydrateMutation","getMutationCache","getAll","forEach","push","dehydrateQueries","shouldDehydrateQuery","getQueryCache","hydrate","dehydratedState","mutationCache","queryCache","dehydratedMutation","build","defaultOptions","dehydratedQuery","get","dehydratedQueryState","fetchStatus","dataUpdatedAt","setState"],"mappings":";;AAUA;;AAoCA;;AAEA,SAASA,iBAAiB,CAACC,QAAkB,EAAsB;EACjE,OAAO;AACLC,IAAAA,WAAW,EAAED,QAAQ,CAACE,OAAO,CAACD,WAAW;IACzCE,KAAK,EAAEH,QAAQ,CAACG,KAAAA;GACjB,CAAA;AACH,CAAA;;AAEA;AACA;AACA;AACA;AACA,SAASC,cAAc,CAACC,KAAY,EAAmB;EACrD,OAAO;IACLF,KAAK,EAAEE,KAAK,CAACF,KAAK;IAClBG,QAAQ,EAAED,KAAK,CAACC,QAAQ;IACxBC,SAAS,EAAEF,KAAK,CAACE,SAAAA;GAClB,CAAA;AACH,CAAA;AAEO,SAASC,8BAA8B,CAACR,QAAkB,EAAE;AACjE,EAAA,OAAOA,QAAQ,CAACG,KAAK,CAACM,QAAQ,CAAA;AAChC,CAAA;AAEO,SAASC,2BAA2B,CAACL,KAAY,EAAE;AACxD,EAAA,OAAOA,KAAK,CAACF,KAAK,CAACQ,MAAM,KAAK,SAAS,CAAA;AACzC,CAAA;AAEO,SAASC,SAAS,CACvBC,MAAmB,EACnBX,OAAyB,GAAG,EAAE,EACb;EACjB,MAAMY,SAA+B,GAAG,EAAE,CAAA;EAC1C,MAAMC,OAA0B,GAAG,EAAE,CAAA;AAErC,EAAA,IAAIb,OAAO,CAACc,kBAAkB,KAAK,KAAK,EAAE;AACxC,IAAA,MAAMC,uBAAuB,GAC3Bf,OAAO,CAACe,uBAAuB,IAAIT,8BAA8B,CAAA;IAEnEK,MAAM,CACHK,gBAAgB,EAAE,CAClBC,MAAM,EAAE,CACRC,OAAO,CAAEpB,QAAQ,IAAK;AACrB,MAAA,IAAIiB,uBAAuB,CAACjB,QAAQ,CAAC,EAAE;AACrCc,QAAAA,SAAS,CAACO,IAAI,CAACtB,iBAAiB,CAACC,QAAQ,CAAC,CAAC,CAAA;AAC7C,OAAA;AACF,KAAC,CAAC,CAAA;AACN,GAAA;AAEA,EAAA,IAAIE,OAAO,CAACoB,gBAAgB,KAAK,KAAK,EAAE;AACtC,IAAA,MAAMC,oBAAoB,GACxBrB,OAAO,CAACqB,oBAAoB,IAAIb,2BAA2B,CAAA;IAE7DG,MAAM,CACHW,aAAa,EAAE,CACfL,MAAM,EAAE,CACRC,OAAO,CAAEf,KAAK,IAAK;AAClB,MAAA,IAAIkB,oBAAoB,CAAClB,KAAK,CAAC,EAAE;AAC/BU,QAAAA,OAAO,CAACM,IAAI,CAACjB,cAAc,CAACC,KAAK,CAAC,CAAC,CAAA;AACrC,OAAA;AACF,KAAC,CAAC,CAAA;AACN,GAAA;EAEA,OAAO;IAAES,SAAS;AAAEC,IAAAA,OAAAA;GAAS,CAAA;AAC/B,CAAA;AAEO,SAASU,OAAO,CACrBZ,MAAmB,EACnBa,eAAwB,EACxBxB,OAAwB,EAClB;EACN,IAAI,OAAOwB,eAAe,KAAK,QAAQ,IAAIA,eAAe,KAAK,IAAI,EAAE;AACnE,IAAA,OAAA;AACF,GAAA;AAEA,EAAA,MAAMC,aAAa,GAAGd,MAAM,CAACK,gBAAgB,EAAE,CAAA;AAC/C,EAAA,MAAMU,UAAU,GAAGf,MAAM,CAACW,aAAa,EAAE,CAAA;;AAEzC;AACA,EAAA,MAAMV,SAAS,GAAIY,eAAe,CAAqBZ,SAAS,IAAI,EAAE,CAAA;AACtE;AACA,EAAA,MAAMC,OAAO,GAAIW,eAAe,CAAqBX,OAAO,IAAI,EAAE,CAAA;AAElED,EAAAA,SAAS,CAACM,OAAO,CAAES,kBAAkB,IAAK;AACxCF,IAAAA,aAAa,CAACG,KAAK,CACjBjB,MAAM,EACN;AACE,MAAA,
|
|
1
|
+
{"version":3,"file":"hydration.js","sources":["../../src/hydration.ts"],"sourcesContent":["import type { QueryClient } from './queryClient'\nimport type { Query, QueryState } from './query'\nimport type {\n MutationKey,\n MutationOptions,\n QueryKey,\n QueryOptions,\n} from './types'\nimport type { Mutation, MutationState } from './mutation'\n\n// TYPES\n\nexport interface DehydrateOptions {\n dehydrateMutations?: boolean\n dehydrateQueries?: boolean\n shouldDehydrateMutation?: ShouldDehydrateMutationFunction\n shouldDehydrateQuery?: ShouldDehydrateQueryFunction\n}\n\nexport interface HydrateOptions {\n defaultOptions?: {\n queries?: QueryOptions\n mutations?: MutationOptions\n }\n}\n\ninterface DehydratedMutation {\n mutationKey?: MutationKey\n state: MutationState\n}\n\ninterface DehydratedQuery {\n queryHash: string\n queryKey: QueryKey\n state: QueryState\n}\n\nexport interface DehydratedState {\n mutations: DehydratedMutation[]\n queries: DehydratedQuery[]\n}\n\nexport type ShouldDehydrateQueryFunction = (query: Query) => boolean\n\nexport type ShouldDehydrateMutationFunction = (mutation: Mutation) => boolean\n\n// FUNCTIONS\n\nfunction dehydrateMutation(mutation: Mutation): DehydratedMutation {\n return {\n mutationKey: mutation.options.mutationKey,\n state: mutation.state,\n }\n}\n\n// Most config is not dehydrated but instead meant to configure again when\n// consuming the de/rehydrated data, typically with useQuery on the client.\n// Sometimes it might make sense to prefetch data on the server and include\n// in the html-payload, but not consume it on the initial render.\nfunction dehydrateQuery(query: Query): DehydratedQuery {\n return {\n state: query.state,\n queryKey: query.queryKey,\n queryHash: query.queryHash,\n }\n}\n\nexport function defaultShouldDehydrateMutation(mutation: Mutation) {\n return mutation.state.isPaused\n}\n\nexport function defaultShouldDehydrateQuery(query: Query) {\n return query.state.status === 'success'\n}\n\nexport function dehydrate(\n client: QueryClient,\n options: DehydrateOptions = {},\n): DehydratedState {\n const mutations: DehydratedMutation[] = []\n const queries: DehydratedQuery[] = []\n\n if (options.dehydrateMutations !== false) {\n const shouldDehydrateMutation =\n options.shouldDehydrateMutation || defaultShouldDehydrateMutation\n\n client\n .getMutationCache()\n .getAll()\n .forEach((mutation) => {\n if (shouldDehydrateMutation(mutation)) {\n mutations.push(dehydrateMutation(mutation))\n }\n })\n }\n\n if (options.dehydrateQueries !== false) {\n const shouldDehydrateQuery =\n options.shouldDehydrateQuery || defaultShouldDehydrateQuery\n\n client\n .getQueryCache()\n .getAll()\n .forEach((query) => {\n if (shouldDehydrateQuery(query)) {\n queries.push(dehydrateQuery(query))\n }\n })\n }\n\n return { mutations, queries }\n}\n\nexport function hydrate(\n client: QueryClient,\n dehydratedState: unknown,\n options?: HydrateOptions,\n): void {\n if (typeof dehydratedState !== 'object' || dehydratedState === null) {\n return\n }\n\n const mutationCache = client.getMutationCache()\n const queryCache = client.getQueryCache()\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const mutations = (dehydratedState as DehydratedState).mutations || []\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const queries = (dehydratedState as DehydratedState).queries || []\n\n mutations.forEach((dehydratedMutation) => {\n mutationCache.build(\n client,\n {\n ...options?.defaultOptions?.mutations,\n mutationKey: dehydratedMutation.mutationKey,\n },\n dehydratedMutation.state,\n )\n })\n\n queries.forEach((dehydratedQuery) => {\n const query = queryCache.get(dehydratedQuery.queryHash)\n\n // Reset fetch status to idle in the dehydrated state to avoid\n // query being stuck in fetching state upon hydration\n const dehydratedQueryState = {\n ...dehydratedQuery.state,\n fetchStatus: 'idle' as const,\n }\n\n // Do not hydrate if an existing query exists with newer data\n if (query) {\n if (query.state.dataUpdatedAt < dehydratedQueryState.dataUpdatedAt) {\n query.setState(dehydratedQueryState)\n }\n return\n }\n\n // Restore query\n queryCache.build(\n client,\n {\n ...options?.defaultOptions?.queries,\n queryKey: dehydratedQuery.queryKey,\n queryHash: dehydratedQuery.queryHash,\n },\n dehydratedQueryState,\n )\n })\n}\n"],"names":["dehydrateMutation","mutation","mutationKey","options","state","dehydrateQuery","query","queryKey","queryHash","defaultShouldDehydrateMutation","isPaused","defaultShouldDehydrateQuery","status","dehydrate","client","mutations","queries","dehydrateMutations","shouldDehydrateMutation","getMutationCache","getAll","forEach","push","dehydrateQueries","shouldDehydrateQuery","getQueryCache","hydrate","dehydratedState","mutationCache","queryCache","dehydratedMutation","build","defaultOptions","dehydratedQuery","get","dehydratedQueryState","fetchStatus","dataUpdatedAt","setState"],"mappings":"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"}
|
|
@@ -4,8 +4,8 @@ export declare function infiniteQueryBehavior<TQueryFnData, TError, TData>(): Qu
|
|
|
4
4
|
/**
|
|
5
5
|
* Checks if there is a next page.
|
|
6
6
|
*/
|
|
7
|
-
export declare function hasNextPage(options: InfiniteQueryPageParamsOptions<any>,
|
|
7
|
+
export declare function hasNextPage(options: InfiniteQueryPageParamsOptions<any, any>, data?: InfiniteData<unknown>): boolean;
|
|
8
8
|
/**
|
|
9
9
|
* Checks if there is a previous page.
|
|
10
10
|
*/
|
|
11
|
-
export declare function hasPreviousPage(options: InfiniteQueryPageParamsOptions<any>,
|
|
11
|
+
export declare function hasPreviousPage(options: InfiniteQueryPageParamsOptions<any, any>, data?: InfiniteData<unknown>): boolean;
|
|
@@ -3,12 +3,16 @@ import { addToStart, addToEnd } from './utils.esm.js';
|
|
|
3
3
|
function infiniteQueryBehavior() {
|
|
4
4
|
return {
|
|
5
5
|
onFetch: context => {
|
|
6
|
-
context.fetchFn = () => {
|
|
6
|
+
context.fetchFn = async () => {
|
|
7
|
+
var _context$fetchOptions, _context$fetchOptions2, _context$fetchOptions3, _context$state$data, _context$state$data2;
|
|
7
8
|
const options = context.options;
|
|
8
|
-
const direction = context.fetchOptions
|
|
9
|
-
const oldPages = context.state.data
|
|
10
|
-
const oldPageParams = context.state.data
|
|
11
|
-
|
|
9
|
+
const direction = (_context$fetchOptions = context.fetchOptions) == null ? void 0 : (_context$fetchOptions2 = _context$fetchOptions.meta) == null ? void 0 : (_context$fetchOptions3 = _context$fetchOptions2.fetchMore) == null ? void 0 : _context$fetchOptions3.direction;
|
|
10
|
+
const oldPages = ((_context$state$data = context.state.data) == null ? void 0 : _context$state$data.pages) || [];
|
|
11
|
+
const oldPageParams = ((_context$state$data2 = context.state.data) == null ? void 0 : _context$state$data2.pageParams) || [];
|
|
12
|
+
const empty = {
|
|
13
|
+
pages: [],
|
|
14
|
+
pageParams: []
|
|
15
|
+
};
|
|
12
16
|
let cancelled = false;
|
|
13
17
|
const addSignalProperty = object => {
|
|
14
18
|
Object.defineProperty(object, 'signal', {
|
|
@@ -28,95 +32,95 @@ function infiniteQueryBehavior() {
|
|
|
28
32
|
|
|
29
33
|
// Get query function
|
|
30
34
|
const queryFn = context.options.queryFn || (() => Promise.reject(new Error('Missing queryFn')));
|
|
31
|
-
const buildNewPages = (pages, param, page, previous) => {
|
|
32
|
-
const {
|
|
33
|
-
maxPages
|
|
34
|
-
} = context.options;
|
|
35
|
-
if (previous) {
|
|
36
|
-
newPageParams = addToStart(newPageParams, param, maxPages);
|
|
37
|
-
return addToStart(pages, page, maxPages);
|
|
38
|
-
}
|
|
39
|
-
newPageParams = addToEnd(newPageParams, param, maxPages);
|
|
40
|
-
return addToEnd(pages, page, maxPages);
|
|
41
|
-
};
|
|
42
35
|
|
|
43
36
|
// Create function to fetch a page
|
|
44
|
-
const fetchPage = (
|
|
37
|
+
const fetchPage = async (data, param, previous) => {
|
|
45
38
|
if (cancelled) {
|
|
46
39
|
return Promise.reject();
|
|
47
40
|
}
|
|
48
|
-
if (typeof param === 'undefined' && pages.length) {
|
|
49
|
-
return Promise.resolve(
|
|
41
|
+
if (typeof param === 'undefined' && data.pages.length) {
|
|
42
|
+
return Promise.resolve(data);
|
|
50
43
|
}
|
|
51
44
|
const queryFnContext = {
|
|
52
45
|
queryKey: context.queryKey,
|
|
53
46
|
pageParam: param,
|
|
47
|
+
direction: previous ? 'backward' : 'forward',
|
|
54
48
|
meta: context.options.meta
|
|
55
49
|
};
|
|
56
50
|
addSignalProperty(queryFnContext);
|
|
57
|
-
const
|
|
58
|
-
const
|
|
59
|
-
|
|
51
|
+
const page = await queryFn(queryFnContext);
|
|
52
|
+
const {
|
|
53
|
+
maxPages
|
|
54
|
+
} = context.options;
|
|
55
|
+
const addTo = previous ? addToStart : addToEnd;
|
|
56
|
+
return {
|
|
57
|
+
pages: addTo(data.pages, page, maxPages),
|
|
58
|
+
pageParams: addTo(data.pageParams, param, maxPages)
|
|
59
|
+
};
|
|
60
60
|
};
|
|
61
|
-
let
|
|
61
|
+
let result;
|
|
62
62
|
|
|
63
63
|
// Fetch first page?
|
|
64
64
|
if (!oldPages.length) {
|
|
65
|
-
|
|
65
|
+
result = await fetchPage(empty, options.defaultPageParam);
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
// fetch next / previous page?
|
|
69
69
|
else if (direction) {
|
|
70
70
|
const previous = direction === 'backward';
|
|
71
|
-
const
|
|
72
|
-
|
|
71
|
+
const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;
|
|
72
|
+
const oldData = {
|
|
73
|
+
pages: oldPages,
|
|
74
|
+
pageParams: oldPageParams
|
|
75
|
+
};
|
|
76
|
+
const param = pageParamFn(options, oldData);
|
|
77
|
+
result = await fetchPage(oldData, param, previous);
|
|
73
78
|
}
|
|
74
79
|
|
|
75
80
|
// Refetch pages
|
|
76
81
|
else {
|
|
77
|
-
newPageParams = [];
|
|
78
|
-
|
|
79
82
|
// Fetch first page
|
|
80
|
-
|
|
83
|
+
result = await fetchPage(empty, oldPageParams[0]);
|
|
81
84
|
|
|
82
85
|
// Fetch remaining pages
|
|
83
86
|
for (let i = 1; i < oldPages.length; i++) {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
return fetchPage(pages, param);
|
|
87
|
-
});
|
|
87
|
+
const param = getNextPageParam(options, result);
|
|
88
|
+
result = await fetchPage(result, param);
|
|
88
89
|
}
|
|
89
90
|
}
|
|
90
|
-
|
|
91
|
-
pages,
|
|
92
|
-
pageParams: newPageParams
|
|
93
|
-
}));
|
|
94
|
-
return finalPromise;
|
|
91
|
+
return result;
|
|
95
92
|
};
|
|
96
93
|
}
|
|
97
94
|
};
|
|
98
95
|
}
|
|
99
|
-
function getNextPageParam(options,
|
|
100
|
-
|
|
96
|
+
function getNextPageParam(options, {
|
|
97
|
+
pages,
|
|
98
|
+
pageParams
|
|
99
|
+
}) {
|
|
100
|
+
const lastIndex = pages.length - 1;
|
|
101
|
+
return options.getNextPageParam(pages[lastIndex], pages, pageParams[lastIndex], pageParams);
|
|
101
102
|
}
|
|
102
|
-
function getPreviousPageParam(options,
|
|
103
|
-
|
|
103
|
+
function getPreviousPageParam(options, {
|
|
104
|
+
pages,
|
|
105
|
+
pageParams
|
|
106
|
+
}) {
|
|
107
|
+
return options.getPreviousPageParam == null ? void 0 : options.getPreviousPageParam(pages[0], pages, pageParams[0], pageParams);
|
|
104
108
|
}
|
|
105
109
|
|
|
106
110
|
/**
|
|
107
111
|
* Checks if there is a next page.
|
|
108
112
|
*/
|
|
109
|
-
function hasNextPage(options,
|
|
110
|
-
if (!
|
|
111
|
-
return typeof getNextPageParam(options,
|
|
113
|
+
function hasNextPage(options, data) {
|
|
114
|
+
if (!data) return false;
|
|
115
|
+
return typeof getNextPageParam(options, data) !== 'undefined';
|
|
112
116
|
}
|
|
113
117
|
|
|
114
118
|
/**
|
|
115
119
|
* Checks if there is a previous page.
|
|
116
120
|
*/
|
|
117
|
-
function hasPreviousPage(options,
|
|
118
|
-
if (!
|
|
119
|
-
return typeof getPreviousPageParam(options,
|
|
121
|
+
function hasPreviousPage(options, data) {
|
|
122
|
+
if (!data || !options.getPreviousPageParam) return false;
|
|
123
|
+
return typeof getPreviousPageParam(options, data) !== 'undefined';
|
|
120
124
|
}
|
|
121
125
|
|
|
122
126
|
export { hasNextPage, hasPreviousPage, infiniteQueryBehavior };
|