@tanstack/query-core 5.0.0-alpha.85 → 5.0.0-alpha.86
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/onlineManager.cjs +12 -29
- package/build/lib/onlineManager.cjs.map +1 -1
- package/build/lib/onlineManager.d.ts +4 -4
- package/build/lib/onlineManager.d.ts.map +1 -1
- package/build/lib/onlineManager.js +12 -29
- package/build/lib/onlineManager.js.map +1 -1
- package/build/lib/onlineManager.legacy.cjs +12 -29
- package/build/lib/onlineManager.legacy.cjs.map +1 -1
- package/build/lib/onlineManager.legacy.js +12 -29
- package/build/lib/onlineManager.legacy.js.map +1 -1
- package/build/lib/tests/utils.d.ts +1 -1
- package/build/lib/tests/utils.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/onlineManager.ts +16 -41
- package/src/tests/hydration.test.tsx +2 -2
- package/src/tests/onlineManager.test.tsx +6 -10
- package/src/tests/queryClient.test.tsx +9 -9
- package/src/tests/utils.ts +5 -3
|
@@ -3,9 +3,8 @@
|
|
|
3
3
|
var subscribable = require('./subscribable.cjs');
|
|
4
4
|
var utils = require('./utils.cjs');
|
|
5
5
|
|
|
6
|
-
const onlineEvents = ['online', 'offline'];
|
|
7
6
|
class OnlineManager extends subscribable.Subscribable {
|
|
8
|
-
#online;
|
|
7
|
+
#online = true;
|
|
9
8
|
#cleanup;
|
|
10
9
|
#setup;
|
|
11
10
|
constructor() {
|
|
@@ -14,16 +13,15 @@ class OnlineManager extends subscribable.Subscribable {
|
|
|
14
13
|
// addEventListener does not exist in React Native, but window does
|
|
15
14
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
16
15
|
if (!utils.isServer && window.addEventListener) {
|
|
17
|
-
const
|
|
16
|
+
const onlineListener = () => onOnline(true);
|
|
17
|
+
const offlineListener = () => onOnline(false);
|
|
18
18
|
// Listen to online
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
});
|
|
19
|
+
window.addEventListener('online', onlineListener, false);
|
|
20
|
+
window.addEventListener('offline', offlineListener, false);
|
|
22
21
|
return () => {
|
|
23
22
|
// Be sure to unsubscribe if a new handler is set
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
});
|
|
23
|
+
window.removeEventListener('online', onlineListener);
|
|
24
|
+
window.removeEventListener('offline', offlineListener);
|
|
27
25
|
};
|
|
28
26
|
}
|
|
29
27
|
return;
|
|
@@ -43,34 +41,19 @@ class OnlineManager extends subscribable.Subscribable {
|
|
|
43
41
|
setEventListener(setup) {
|
|
44
42
|
this.#setup = setup;
|
|
45
43
|
this.#cleanup?.();
|
|
46
|
-
this.#cleanup = setup(
|
|
47
|
-
if (typeof online === 'boolean') {
|
|
48
|
-
this.setOnline(online);
|
|
49
|
-
} else {
|
|
50
|
-
this.onOnline();
|
|
51
|
-
}
|
|
52
|
-
});
|
|
44
|
+
this.#cleanup = setup(this.setOnline.bind(this));
|
|
53
45
|
}
|
|
54
46
|
setOnline(online) {
|
|
55
47
|
const changed = this.#online !== online;
|
|
56
48
|
if (changed) {
|
|
57
49
|
this.#online = online;
|
|
58
|
-
this.
|
|
50
|
+
this.listeners.forEach(listener => {
|
|
51
|
+
listener(online);
|
|
52
|
+
});
|
|
59
53
|
}
|
|
60
54
|
}
|
|
61
|
-
onOnline() {
|
|
62
|
-
this.listeners.forEach(listener => {
|
|
63
|
-
listener();
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
55
|
isOnline() {
|
|
67
|
-
|
|
68
|
-
return this.#online;
|
|
69
|
-
}
|
|
70
|
-
if (typeof navigator === 'undefined' || typeof navigator.onLine === 'undefined') {
|
|
71
|
-
return true;
|
|
72
|
-
}
|
|
73
|
-
return navigator.onLine;
|
|
56
|
+
return this.#online;
|
|
74
57
|
}
|
|
75
58
|
}
|
|
76
59
|
const onlineManager = new OnlineManager();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onlineManager.cjs","sources":["../../src/onlineManager.ts"],"sourcesContent":["import { Subscribable } from './subscribable'\nimport { isServer } from './utils'\n\ntype
|
|
1
|
+
{"version":3,"file":"onlineManager.cjs","sources":["../../src/onlineManager.ts"],"sourcesContent":["import { Subscribable } from './subscribable'\nimport { isServer } from './utils'\n\ntype Listener = (online: boolean) => void\ntype SetupFn = (setOnline: Listener) => (() => void) | undefined\n\nexport class OnlineManager extends Subscribable<Listener> {\n #online = true\n #cleanup?: () => void\n\n #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 onlineListener = () => onOnline(true)\n const offlineListener = () => onOnline(false)\n // Listen to online\n window.addEventListener('online', onlineListener, false)\n window.addEventListener('offline', offlineListener, false)\n\n return () => {\n // Be sure to unsubscribe if a new handler is set\n window.removeEventListener('online', onlineListener)\n window.removeEventListener('offline', offlineListener)\n }\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(this.setOnline.bind(this))\n }\n\n setOnline(online: boolean): void {\n const changed = this.#online !== online\n\n if (changed) {\n this.#online = online\n this.listeners.forEach((listener) => {\n listener(online)\n })\n }\n }\n\n isOnline(): boolean {\n return this.#online\n }\n}\n\nexport const onlineManager = new OnlineManager()\n"],"names":["OnlineManager","Subscribable","constructor","onOnline","isServer","window","addEventListener","onlineListener","offlineListener","removeEventListener","onSubscribe","setEventListener","onUnsubscribe","hasListeners","undefined","setup","setOnline","bind","online","changed","listeners","forEach","listener","isOnline","onlineManager"],"mappings":";;;;;AAMO,MAAMA,aAAa,SAASC,yBAAY,CAAW;EACxD,OAAO,GAAG,IAAI,CAAA;AACd,EAAA,QAAQ,CAAA;AAER,EAAA,MAAM,CAAA;AAENC,EAAAA,WAAWA,GAAG;AACZ,IAAA,KAAK,EAAE,CAAA;AACP,IAAA,IAAI,CAAC,MAAM,GAAIC,QAAQ,IAAK;AAC1B;AACA;AACA,MAAA,IAAI,CAACC,cAAQ,IAAIC,MAAM,CAACC,gBAAgB,EAAE;AACxC,QAAA,MAAMC,cAAc,GAAGA,MAAMJ,QAAQ,CAAC,IAAI,CAAC,CAAA;AAC3C,QAAA,MAAMK,eAAe,GAAGA,MAAML,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC7C;QACAE,MAAM,CAACC,gBAAgB,CAAC,QAAQ,EAAEC,cAAc,EAAE,KAAK,CAAC,CAAA;QACxDF,MAAM,CAACC,gBAAgB,CAAC,SAAS,EAAEE,eAAe,EAAE,KAAK,CAAC,CAAA;AAE1D,QAAA,OAAO,MAAM;AACX;AACAH,UAAAA,MAAM,CAACI,mBAAmB,CAAC,QAAQ,EAAEF,cAAc,CAAC,CAAA;AACpDF,UAAAA,MAAM,CAACI,mBAAmB,CAAC,SAAS,EAAED,eAAe,CAAC,CAAA;SACvD,CAAA;AACH,OAAA;AAEA,MAAA,OAAA;KACD,CAAA;AACH,GAAA;AAEUE,EAAAA,WAAWA,GAAS;AAC5B,IAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,MAAA,IAAI,CAACC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACpC,KAAA;AACF,GAAA;AAEUC,EAAAA,aAAaA,GAAG;AACxB,IAAA,IAAI,CAAC,IAAI,CAACC,YAAY,EAAE,EAAE;AACxB,MAAA,IAAI,CAAC,QAAQ,IAAI,CAAA;AACjB,MAAA,IAAI,CAAC,QAAQ,GAAGC,SAAS,CAAA;AAC3B,KAAA;AACF,GAAA;EAEAH,gBAAgBA,CAACI,KAAc,EAAQ;AACrC,IAAA,IAAI,CAAC,MAAM,GAAGA,KAAK,CAAA;AACnB,IAAA,IAAI,CAAC,QAAQ,IAAI,CAAA;AACjB,IAAA,IAAI,CAAC,QAAQ,GAAGA,KAAK,CAAC,IAAI,CAACC,SAAS,CAACC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AAClD,GAAA;EAEAD,SAASA,CAACE,MAAe,EAAQ;AAC/B,IAAA,MAAMC,OAAO,GAAG,IAAI,CAAC,OAAO,KAAKD,MAAM,CAAA;AAEvC,IAAA,IAAIC,OAAO,EAAE;AACX,MAAA,IAAI,CAAC,OAAO,GAAGD,MAAM,CAAA;AACrB,MAAA,IAAI,CAACE,SAAS,CAACC,OAAO,CAAEC,QAAQ,IAAK;QACnCA,QAAQ,CAACJ,MAAM,CAAC,CAAA;AAClB,OAAC,CAAC,CAAA;AACJ,KAAA;AACF,GAAA;AAEAK,EAAAA,QAAQA,GAAY;IAClB,OAAO,IAAI,CAAC,OAAO,CAAA;AACrB,GAAA;AACF,CAAA;MAEaC,aAAa,GAAG,IAAIxB,aAAa;;;;;"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Subscribable } from './subscribable';
|
|
2
|
-
type
|
|
3
|
-
|
|
2
|
+
type Listener = (online: boolean) => void;
|
|
3
|
+
type SetupFn = (setOnline: Listener) => (() => void) | undefined;
|
|
4
|
+
export declare class OnlineManager extends Subscribable<Listener> {
|
|
4
5
|
#private;
|
|
5
6
|
constructor();
|
|
6
7
|
protected onSubscribe(): void;
|
|
7
8
|
protected onUnsubscribe(): void;
|
|
8
9
|
setEventListener(setup: SetupFn): void;
|
|
9
|
-
setOnline(online
|
|
10
|
-
onOnline(): void;
|
|
10
|
+
setOnline(online: boolean): void;
|
|
11
11
|
isOnline(): boolean;
|
|
12
12
|
}
|
|
13
13
|
export declare const onlineManager: OnlineManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onlineManager.d.ts","sourceRoot":"","sources":["../../src/onlineManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAG7C,KAAK,
|
|
1
|
+
{"version":3,"file":"onlineManager.d.ts","sourceRoot":"","sources":["../../src/onlineManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAG7C,KAAK,QAAQ,GAAG,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;AACzC,KAAK,OAAO,GAAG,CAAC,SAAS,EAAE,QAAQ,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAA;AAEhE,qBAAa,aAAc,SAAQ,YAAY,CAAC,QAAQ,CAAC;;;IA6BvD,SAAS,CAAC,WAAW,IAAI,IAAI;IAM7B,SAAS,CAAC,aAAa;IAOvB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAMtC,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAWhC,QAAQ,IAAI,OAAO;CAGpB;AAED,eAAO,MAAM,aAAa,eAAsB,CAAA"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { Subscribable } from './subscribable.js';
|
|
2
2
|
import { isServer } from './utils.js';
|
|
3
3
|
|
|
4
|
-
const onlineEvents = ['online', 'offline'];
|
|
5
4
|
class OnlineManager extends Subscribable {
|
|
6
|
-
#online;
|
|
5
|
+
#online = true;
|
|
7
6
|
#cleanup;
|
|
8
7
|
#setup;
|
|
9
8
|
constructor() {
|
|
@@ -12,16 +11,15 @@ class OnlineManager extends Subscribable {
|
|
|
12
11
|
// addEventListener does not exist in React Native, but window does
|
|
13
12
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
14
13
|
if (!isServer && window.addEventListener) {
|
|
15
|
-
const
|
|
14
|
+
const onlineListener = () => onOnline(true);
|
|
15
|
+
const offlineListener = () => onOnline(false);
|
|
16
16
|
// Listen to online
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
});
|
|
17
|
+
window.addEventListener('online', onlineListener, false);
|
|
18
|
+
window.addEventListener('offline', offlineListener, false);
|
|
20
19
|
return () => {
|
|
21
20
|
// Be sure to unsubscribe if a new handler is set
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
});
|
|
21
|
+
window.removeEventListener('online', onlineListener);
|
|
22
|
+
window.removeEventListener('offline', offlineListener);
|
|
25
23
|
};
|
|
26
24
|
}
|
|
27
25
|
return;
|
|
@@ -41,34 +39,19 @@ class OnlineManager extends Subscribable {
|
|
|
41
39
|
setEventListener(setup) {
|
|
42
40
|
this.#setup = setup;
|
|
43
41
|
this.#cleanup?.();
|
|
44
|
-
this.#cleanup = setup(
|
|
45
|
-
if (typeof online === 'boolean') {
|
|
46
|
-
this.setOnline(online);
|
|
47
|
-
} else {
|
|
48
|
-
this.onOnline();
|
|
49
|
-
}
|
|
50
|
-
});
|
|
42
|
+
this.#cleanup = setup(this.setOnline.bind(this));
|
|
51
43
|
}
|
|
52
44
|
setOnline(online) {
|
|
53
45
|
const changed = this.#online !== online;
|
|
54
46
|
if (changed) {
|
|
55
47
|
this.#online = online;
|
|
56
|
-
this.
|
|
48
|
+
this.listeners.forEach(listener => {
|
|
49
|
+
listener(online);
|
|
50
|
+
});
|
|
57
51
|
}
|
|
58
52
|
}
|
|
59
|
-
onOnline() {
|
|
60
|
-
this.listeners.forEach(listener => {
|
|
61
|
-
listener();
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
53
|
isOnline() {
|
|
65
|
-
|
|
66
|
-
return this.#online;
|
|
67
|
-
}
|
|
68
|
-
if (typeof navigator === 'undefined' || typeof navigator.onLine === 'undefined') {
|
|
69
|
-
return true;
|
|
70
|
-
}
|
|
71
|
-
return navigator.onLine;
|
|
54
|
+
return this.#online;
|
|
72
55
|
}
|
|
73
56
|
}
|
|
74
57
|
const onlineManager = new OnlineManager();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onlineManager.js","sources":["../../src/onlineManager.ts"],"sourcesContent":["import { Subscribable } from './subscribable'\nimport { isServer } from './utils'\n\ntype
|
|
1
|
+
{"version":3,"file":"onlineManager.js","sources":["../../src/onlineManager.ts"],"sourcesContent":["import { Subscribable } from './subscribable'\nimport { isServer } from './utils'\n\ntype Listener = (online: boolean) => void\ntype SetupFn = (setOnline: Listener) => (() => void) | undefined\n\nexport class OnlineManager extends Subscribable<Listener> {\n #online = true\n #cleanup?: () => void\n\n #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 onlineListener = () => onOnline(true)\n const offlineListener = () => onOnline(false)\n // Listen to online\n window.addEventListener('online', onlineListener, false)\n window.addEventListener('offline', offlineListener, false)\n\n return () => {\n // Be sure to unsubscribe if a new handler is set\n window.removeEventListener('online', onlineListener)\n window.removeEventListener('offline', offlineListener)\n }\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(this.setOnline.bind(this))\n }\n\n setOnline(online: boolean): void {\n const changed = this.#online !== online\n\n if (changed) {\n this.#online = online\n this.listeners.forEach((listener) => {\n listener(online)\n })\n }\n }\n\n isOnline(): boolean {\n return this.#online\n }\n}\n\nexport const onlineManager = new OnlineManager()\n"],"names":["OnlineManager","Subscribable","constructor","onOnline","isServer","window","addEventListener","onlineListener","offlineListener","removeEventListener","onSubscribe","setEventListener","onUnsubscribe","hasListeners","undefined","setup","setOnline","bind","online","changed","listeners","forEach","listener","isOnline","onlineManager"],"mappings":";;;AAMO,MAAMA,aAAa,SAASC,YAAY,CAAW;EACxD,OAAO,GAAG,IAAI,CAAA;AACd,EAAA,QAAQ,CAAA;AAER,EAAA,MAAM,CAAA;AAENC,EAAAA,WAAWA,GAAG;AACZ,IAAA,KAAK,EAAE,CAAA;AACP,IAAA,IAAI,CAAC,MAAM,GAAIC,QAAQ,IAAK;AAC1B;AACA;AACA,MAAA,IAAI,CAACC,QAAQ,IAAIC,MAAM,CAACC,gBAAgB,EAAE;AACxC,QAAA,MAAMC,cAAc,GAAGA,MAAMJ,QAAQ,CAAC,IAAI,CAAC,CAAA;AAC3C,QAAA,MAAMK,eAAe,GAAGA,MAAML,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC7C;QACAE,MAAM,CAACC,gBAAgB,CAAC,QAAQ,EAAEC,cAAc,EAAE,KAAK,CAAC,CAAA;QACxDF,MAAM,CAACC,gBAAgB,CAAC,SAAS,EAAEE,eAAe,EAAE,KAAK,CAAC,CAAA;AAE1D,QAAA,OAAO,MAAM;AACX;AACAH,UAAAA,MAAM,CAACI,mBAAmB,CAAC,QAAQ,EAAEF,cAAc,CAAC,CAAA;AACpDF,UAAAA,MAAM,CAACI,mBAAmB,CAAC,SAAS,EAAED,eAAe,CAAC,CAAA;SACvD,CAAA;AACH,OAAA;AAEA,MAAA,OAAA;KACD,CAAA;AACH,GAAA;AAEUE,EAAAA,WAAWA,GAAS;AAC5B,IAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,MAAA,IAAI,CAACC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACpC,KAAA;AACF,GAAA;AAEUC,EAAAA,aAAaA,GAAG;AACxB,IAAA,IAAI,CAAC,IAAI,CAACC,YAAY,EAAE,EAAE;AACxB,MAAA,IAAI,CAAC,QAAQ,IAAI,CAAA;AACjB,MAAA,IAAI,CAAC,QAAQ,GAAGC,SAAS,CAAA;AAC3B,KAAA;AACF,GAAA;EAEAH,gBAAgBA,CAACI,KAAc,EAAQ;AACrC,IAAA,IAAI,CAAC,MAAM,GAAGA,KAAK,CAAA;AACnB,IAAA,IAAI,CAAC,QAAQ,IAAI,CAAA;AACjB,IAAA,IAAI,CAAC,QAAQ,GAAGA,KAAK,CAAC,IAAI,CAACC,SAAS,CAACC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AAClD,GAAA;EAEAD,SAASA,CAACE,MAAe,EAAQ;AAC/B,IAAA,MAAMC,OAAO,GAAG,IAAI,CAAC,OAAO,KAAKD,MAAM,CAAA;AAEvC,IAAA,IAAIC,OAAO,EAAE;AACX,MAAA,IAAI,CAAC,OAAO,GAAGD,MAAM,CAAA;AACrB,MAAA,IAAI,CAACE,SAAS,CAACC,OAAO,CAAEC,QAAQ,IAAK;QACnCA,QAAQ,CAACJ,MAAM,CAAC,CAAA;AAClB,OAAC,CAAC,CAAA;AACJ,KAAA;AACF,GAAA;AAEAK,EAAAA,QAAQA,GAAY;IAClB,OAAO,IAAI,CAAC,OAAO,CAAA;AACrB,GAAA;AACF,CAAA;MAEaC,aAAa,GAAG,IAAIxB,aAAa;;;;"}
|
|
@@ -4,7 +4,6 @@ var _rollupPluginBabelHelpers = require('./_virtual/_rollupPluginBabelHelpers.le
|
|
|
4
4
|
var subscribable = require('./subscribable.legacy.cjs');
|
|
5
5
|
var utils = require('./utils.legacy.cjs');
|
|
6
6
|
|
|
7
|
-
const onlineEvents = ['online', 'offline'];
|
|
8
7
|
var _online = /*#__PURE__*/_rollupPluginBabelHelpers.classPrivateFieldLooseKey("online");
|
|
9
8
|
var _cleanup = /*#__PURE__*/_rollupPluginBabelHelpers.classPrivateFieldLooseKey("cleanup");
|
|
10
9
|
var _setup = /*#__PURE__*/_rollupPluginBabelHelpers.classPrivateFieldLooseKey("setup");
|
|
@@ -13,7 +12,7 @@ class OnlineManager extends subscribable.Subscribable {
|
|
|
13
12
|
super();
|
|
14
13
|
Object.defineProperty(this, _online, {
|
|
15
14
|
writable: true,
|
|
16
|
-
value:
|
|
15
|
+
value: true
|
|
17
16
|
});
|
|
18
17
|
Object.defineProperty(this, _cleanup, {
|
|
19
18
|
writable: true,
|
|
@@ -27,16 +26,15 @@ class OnlineManager extends subscribable.Subscribable {
|
|
|
27
26
|
// addEventListener does not exist in React Native, but window does
|
|
28
27
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
29
28
|
if (!utils.isServer && window.addEventListener) {
|
|
30
|
-
const
|
|
29
|
+
const onlineListener = () => onOnline(true);
|
|
30
|
+
const offlineListener = () => onOnline(false);
|
|
31
31
|
// Listen to online
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
});
|
|
32
|
+
window.addEventListener('online', onlineListener, false);
|
|
33
|
+
window.addEventListener('offline', offlineListener, false);
|
|
35
34
|
return () => {
|
|
36
35
|
// Be sure to unsubscribe if a new handler is set
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
});
|
|
36
|
+
window.removeEventListener('online', onlineListener);
|
|
37
|
+
window.removeEventListener('offline', offlineListener);
|
|
40
38
|
};
|
|
41
39
|
}
|
|
42
40
|
return;
|
|
@@ -58,34 +56,19 @@ class OnlineManager extends subscribable.Subscribable {
|
|
|
58
56
|
var _classPrivateFieldLoo3, _classPrivateFieldLoo4;
|
|
59
57
|
_rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _setup)[_setup] = setup;
|
|
60
58
|
(_classPrivateFieldLoo3 = (_classPrivateFieldLoo4 = _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _cleanup))[_cleanup]) == null ? void 0 : _classPrivateFieldLoo3.call(_classPrivateFieldLoo4);
|
|
61
|
-
_rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _cleanup)[_cleanup] = setup(
|
|
62
|
-
if (typeof online === 'boolean') {
|
|
63
|
-
this.setOnline(online);
|
|
64
|
-
} else {
|
|
65
|
-
this.onOnline();
|
|
66
|
-
}
|
|
67
|
-
});
|
|
59
|
+
_rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _cleanup)[_cleanup] = setup(this.setOnline.bind(this));
|
|
68
60
|
}
|
|
69
61
|
setOnline(online) {
|
|
70
62
|
const changed = _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _online)[_online] !== online;
|
|
71
63
|
if (changed) {
|
|
72
64
|
_rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _online)[_online] = online;
|
|
73
|
-
this.
|
|
65
|
+
this.listeners.forEach(listener => {
|
|
66
|
+
listener(online);
|
|
67
|
+
});
|
|
74
68
|
}
|
|
75
69
|
}
|
|
76
|
-
onOnline() {
|
|
77
|
-
this.listeners.forEach(listener => {
|
|
78
|
-
listener();
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
70
|
isOnline() {
|
|
82
|
-
|
|
83
|
-
return _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _online)[_online];
|
|
84
|
-
}
|
|
85
|
-
if (typeof navigator === 'undefined' || typeof navigator.onLine === 'undefined') {
|
|
86
|
-
return true;
|
|
87
|
-
}
|
|
88
|
-
return navigator.onLine;
|
|
71
|
+
return _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _online)[_online];
|
|
89
72
|
}
|
|
90
73
|
}
|
|
91
74
|
const onlineManager = new OnlineManager();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onlineManager.legacy.cjs","sources":["../../src/onlineManager.ts"],"sourcesContent":["import { Subscribable } from './subscribable'\nimport { isServer } from './utils'\n\ntype
|
|
1
|
+
{"version":3,"file":"onlineManager.legacy.cjs","sources":["../../src/onlineManager.ts"],"sourcesContent":["import { Subscribable } from './subscribable'\nimport { isServer } from './utils'\n\ntype Listener = (online: boolean) => void\ntype SetupFn = (setOnline: Listener) => (() => void) | undefined\n\nexport class OnlineManager extends Subscribable<Listener> {\n #online = true\n #cleanup?: () => void\n\n #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 onlineListener = () => onOnline(true)\n const offlineListener = () => onOnline(false)\n // Listen to online\n window.addEventListener('online', onlineListener, false)\n window.addEventListener('offline', offlineListener, false)\n\n return () => {\n // Be sure to unsubscribe if a new handler is set\n window.removeEventListener('online', onlineListener)\n window.removeEventListener('offline', offlineListener)\n }\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(this.setOnline.bind(this))\n }\n\n setOnline(online: boolean): void {\n const changed = this.#online !== online\n\n if (changed) {\n this.#online = online\n this.listeners.forEach((listener) => {\n listener(online)\n })\n }\n }\n\n isOnline(): boolean {\n return this.#online\n }\n}\n\nexport const onlineManager = new OnlineManager()\n"],"names":["_online","_classPrivateFieldLooseKey","_cleanup","_setup","OnlineManager","Subscribable","constructor","Object","defineProperty","writable","value","_classPrivateFieldLooseBase","onOnline","isServer","window","addEventListener","onlineListener","offlineListener","removeEventListener","onSubscribe","setEventListener","onUnsubscribe","hasListeners","_classPrivateFieldLoo","_classPrivateFieldLoo2","call","undefined","setup","_classPrivateFieldLoo3","_classPrivateFieldLoo4","setOnline","bind","online","changed","listeners","forEach","listener","isOnline","onlineManager"],"mappings":"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"}
|
|
@@ -2,7 +2,6 @@ import { classPrivateFieldLooseBase as _classPrivateFieldLooseBase, classPrivate
|
|
|
2
2
|
import { Subscribable } from './subscribable.legacy.js';
|
|
3
3
|
import { isServer } from './utils.legacy.js';
|
|
4
4
|
|
|
5
|
-
const onlineEvents = ['online', 'offline'];
|
|
6
5
|
var _online = /*#__PURE__*/_classPrivateFieldLooseKey("online");
|
|
7
6
|
var _cleanup = /*#__PURE__*/_classPrivateFieldLooseKey("cleanup");
|
|
8
7
|
var _setup = /*#__PURE__*/_classPrivateFieldLooseKey("setup");
|
|
@@ -11,7 +10,7 @@ class OnlineManager extends Subscribable {
|
|
|
11
10
|
super();
|
|
12
11
|
Object.defineProperty(this, _online, {
|
|
13
12
|
writable: true,
|
|
14
|
-
value:
|
|
13
|
+
value: true
|
|
15
14
|
});
|
|
16
15
|
Object.defineProperty(this, _cleanup, {
|
|
17
16
|
writable: true,
|
|
@@ -25,16 +24,15 @@ class OnlineManager extends Subscribable {
|
|
|
25
24
|
// addEventListener does not exist in React Native, but window does
|
|
26
25
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
27
26
|
if (!isServer && window.addEventListener) {
|
|
28
|
-
const
|
|
27
|
+
const onlineListener = () => onOnline(true);
|
|
28
|
+
const offlineListener = () => onOnline(false);
|
|
29
29
|
// Listen to online
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
});
|
|
30
|
+
window.addEventListener('online', onlineListener, false);
|
|
31
|
+
window.addEventListener('offline', offlineListener, false);
|
|
33
32
|
return () => {
|
|
34
33
|
// Be sure to unsubscribe if a new handler is set
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
});
|
|
34
|
+
window.removeEventListener('online', onlineListener);
|
|
35
|
+
window.removeEventListener('offline', offlineListener);
|
|
38
36
|
};
|
|
39
37
|
}
|
|
40
38
|
return;
|
|
@@ -56,34 +54,19 @@ class OnlineManager extends Subscribable {
|
|
|
56
54
|
var _classPrivateFieldLoo3, _classPrivateFieldLoo4;
|
|
57
55
|
_classPrivateFieldLooseBase(this, _setup)[_setup] = setup;
|
|
58
56
|
(_classPrivateFieldLoo3 = (_classPrivateFieldLoo4 = _classPrivateFieldLooseBase(this, _cleanup))[_cleanup]) == null ? void 0 : _classPrivateFieldLoo3.call(_classPrivateFieldLoo4);
|
|
59
|
-
_classPrivateFieldLooseBase(this, _cleanup)[_cleanup] = setup(
|
|
60
|
-
if (typeof online === 'boolean') {
|
|
61
|
-
this.setOnline(online);
|
|
62
|
-
} else {
|
|
63
|
-
this.onOnline();
|
|
64
|
-
}
|
|
65
|
-
});
|
|
57
|
+
_classPrivateFieldLooseBase(this, _cleanup)[_cleanup] = setup(this.setOnline.bind(this));
|
|
66
58
|
}
|
|
67
59
|
setOnline(online) {
|
|
68
60
|
const changed = _classPrivateFieldLooseBase(this, _online)[_online] !== online;
|
|
69
61
|
if (changed) {
|
|
70
62
|
_classPrivateFieldLooseBase(this, _online)[_online] = online;
|
|
71
|
-
this.
|
|
63
|
+
this.listeners.forEach(listener => {
|
|
64
|
+
listener(online);
|
|
65
|
+
});
|
|
72
66
|
}
|
|
73
67
|
}
|
|
74
|
-
onOnline() {
|
|
75
|
-
this.listeners.forEach(listener => {
|
|
76
|
-
listener();
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
68
|
isOnline() {
|
|
80
|
-
|
|
81
|
-
return _classPrivateFieldLooseBase(this, _online)[_online];
|
|
82
|
-
}
|
|
83
|
-
if (typeof navigator === 'undefined' || typeof navigator.onLine === 'undefined') {
|
|
84
|
-
return true;
|
|
85
|
-
}
|
|
86
|
-
return navigator.onLine;
|
|
69
|
+
return _classPrivateFieldLooseBase(this, _online)[_online];
|
|
87
70
|
}
|
|
88
71
|
}
|
|
89
72
|
const onlineManager = new OnlineManager();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onlineManager.legacy.js","sources":["../../src/onlineManager.ts"],"sourcesContent":["import { Subscribable } from './subscribable'\nimport { isServer } from './utils'\n\ntype
|
|
1
|
+
{"version":3,"file":"onlineManager.legacy.js","sources":["../../src/onlineManager.ts"],"sourcesContent":["import { Subscribable } from './subscribable'\nimport { isServer } from './utils'\n\ntype Listener = (online: boolean) => void\ntype SetupFn = (setOnline: Listener) => (() => void) | undefined\n\nexport class OnlineManager extends Subscribable<Listener> {\n #online = true\n #cleanup?: () => void\n\n #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 onlineListener = () => onOnline(true)\n const offlineListener = () => onOnline(false)\n // Listen to online\n window.addEventListener('online', onlineListener, false)\n window.addEventListener('offline', offlineListener, false)\n\n return () => {\n // Be sure to unsubscribe if a new handler is set\n window.removeEventListener('online', onlineListener)\n window.removeEventListener('offline', offlineListener)\n }\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(this.setOnline.bind(this))\n }\n\n setOnline(online: boolean): void {\n const changed = this.#online !== online\n\n if (changed) {\n this.#online = online\n this.listeners.forEach((listener) => {\n listener(online)\n })\n }\n }\n\n isOnline(): boolean {\n return this.#online\n }\n}\n\nexport const onlineManager = new OnlineManager()\n"],"names":["_online","_classPrivateFieldLooseKey","_cleanup","_setup","OnlineManager","Subscribable","constructor","Object","defineProperty","writable","value","_classPrivateFieldLooseBase","onOnline","isServer","window","addEventListener","onlineListener","offlineListener","removeEventListener","onSubscribe","setEventListener","onUnsubscribe","hasListeners","_classPrivateFieldLoo","_classPrivateFieldLoo2","call","undefined","setup","_classPrivateFieldLoo3","_classPrivateFieldLoo4","setOnline","bind","online","changed","listeners","forEach","listener","isOnline","onlineManager"],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import type { SpyInstance } from 'vitest';
|
|
|
4
4
|
import type { MutationOptions, QueryClientConfig } from '..';
|
|
5
5
|
export declare function createQueryClient(config?: QueryClientConfig): QueryClient;
|
|
6
6
|
export declare function mockVisibilityState(value: DocumentVisibilityState): SpyInstance<[], DocumentVisibilityState>;
|
|
7
|
-
export declare function
|
|
7
|
+
export declare function mockOnlineManagerIsOnline(value: boolean): SpyInstance<[], boolean>;
|
|
8
8
|
export declare function queryKey(): Array<string>;
|
|
9
9
|
export declare function sleep(timeout: number): Promise<void>;
|
|
10
10
|
export declare function setActTimeout(fn: () => void, ms?: number): NodeJS.Timeout;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/tests/utils.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/tests/utils.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAiB,MAAM,IAAI,CAAA;AAE/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACzC,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,IAAI,CAAA;AAE5D,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,WAAW,CAEzE;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,uBAAuB,GAC7B,WAAW,CAAC,EAAE,EAAE,uBAAuB,CAAC,CAE1C;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,OAAO,GACb,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,CAE1B;AAGD,wBAAgB,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,CAGxC;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIpD;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC,EAAE,MAAM,kBAMxD;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,eAAc,IAAiB,CAAA;AAEtD,eAAO,MAAM,eAAe,4BACb,WAAW,6FAQzB,CAAA;AAID,wBAAgB,WAAW,CAAC,QAAQ,EAAE,OAAO,cAW5C"}
|
package/package.json
CHANGED
package/src/onlineManager.ts
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
import { Subscribable } from './subscribable'
|
|
2
2
|
import { isServer } from './utils'
|
|
3
3
|
|
|
4
|
-
type
|
|
5
|
-
|
|
6
|
-
) => (() => void) | undefined
|
|
4
|
+
type Listener = (online: boolean) => void
|
|
5
|
+
type SetupFn = (setOnline: Listener) => (() => void) | undefined
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
export class OnlineManager extends Subscribable {
|
|
11
|
-
#online?: boolean
|
|
7
|
+
export class OnlineManager extends Subscribable<Listener> {
|
|
8
|
+
#online = true
|
|
12
9
|
#cleanup?: () => void
|
|
13
10
|
|
|
14
11
|
#setup: SetupFn
|
|
@@ -19,17 +16,16 @@ export class OnlineManager extends Subscribable {
|
|
|
19
16
|
// addEventListener does not exist in React Native, but window does
|
|
20
17
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
21
18
|
if (!isServer && window.addEventListener) {
|
|
22
|
-
const
|
|
19
|
+
const onlineListener = () => onOnline(true)
|
|
20
|
+
const offlineListener = () => onOnline(false)
|
|
23
21
|
// Listen to online
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
})
|
|
22
|
+
window.addEventListener('online', onlineListener, false)
|
|
23
|
+
window.addEventListener('offline', offlineListener, false)
|
|
27
24
|
|
|
28
25
|
return () => {
|
|
29
26
|
// Be sure to unsubscribe if a new handler is set
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
})
|
|
27
|
+
window.removeEventListener('online', onlineListener)
|
|
28
|
+
window.removeEventListener('offline', offlineListener)
|
|
33
29
|
}
|
|
34
30
|
}
|
|
35
31
|
|
|
@@ -53,43 +49,22 @@ export class OnlineManager extends Subscribable {
|
|
|
53
49
|
setEventListener(setup: SetupFn): void {
|
|
54
50
|
this.#setup = setup
|
|
55
51
|
this.#cleanup?.()
|
|
56
|
-
this.#cleanup = setup((
|
|
57
|
-
if (typeof online === 'boolean') {
|
|
58
|
-
this.setOnline(online)
|
|
59
|
-
} else {
|
|
60
|
-
this.onOnline()
|
|
61
|
-
}
|
|
62
|
-
})
|
|
52
|
+
this.#cleanup = setup(this.setOnline.bind(this))
|
|
63
53
|
}
|
|
64
54
|
|
|
65
|
-
setOnline(online
|
|
55
|
+
setOnline(online: boolean): void {
|
|
66
56
|
const changed = this.#online !== online
|
|
67
57
|
|
|
68
58
|
if (changed) {
|
|
69
59
|
this.#online = online
|
|
70
|
-
this.
|
|
60
|
+
this.listeners.forEach((listener) => {
|
|
61
|
+
listener(online)
|
|
62
|
+
})
|
|
71
63
|
}
|
|
72
64
|
}
|
|
73
65
|
|
|
74
|
-
onOnline(): void {
|
|
75
|
-
this.listeners.forEach((listener) => {
|
|
76
|
-
listener()
|
|
77
|
-
})
|
|
78
|
-
}
|
|
79
|
-
|
|
80
66
|
isOnline(): boolean {
|
|
81
|
-
|
|
82
|
-
return this.#online
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
if (
|
|
86
|
-
typeof navigator === 'undefined' ||
|
|
87
|
-
typeof navigator.onLine === 'undefined'
|
|
88
|
-
) {
|
|
89
|
-
return true
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
return navigator.onLine
|
|
67
|
+
return this.#online
|
|
93
68
|
}
|
|
94
69
|
}
|
|
95
70
|
|
|
@@ -5,7 +5,7 @@ import { MutationCache } from '../mutationCache'
|
|
|
5
5
|
import {
|
|
6
6
|
createQueryClient,
|
|
7
7
|
executeMutation,
|
|
8
|
-
|
|
8
|
+
mockOnlineManagerIsOnline,
|
|
9
9
|
sleep,
|
|
10
10
|
} from './utils'
|
|
11
11
|
|
|
@@ -347,7 +347,7 @@ describe('dehydration and rehydration', () => {
|
|
|
347
347
|
test('should be able to dehydrate mutations and continue on hydration', async () => {
|
|
348
348
|
const consoleMock = vi.spyOn(console, 'error')
|
|
349
349
|
consoleMock.mockImplementation(() => undefined)
|
|
350
|
-
const onlineMock =
|
|
350
|
+
const onlineMock = mockOnlineManagerIsOnline(false)
|
|
351
351
|
|
|
352
352
|
const serverAddTodo = vi
|
|
353
353
|
.fn()
|
|
@@ -31,7 +31,7 @@ describe('onlineManager', () => {
|
|
|
31
31
|
test('setEventListener should use online boolean arg', async () => {
|
|
32
32
|
let count = 0
|
|
33
33
|
|
|
34
|
-
const setup = (setOnline: (online
|
|
34
|
+
const setup = (setOnline: (online: boolean) => void) => {
|
|
35
35
|
setTimeout(() => {
|
|
36
36
|
count++
|
|
37
37
|
setOnline(false)
|
|
@@ -154,19 +154,15 @@ describe('onlineManager', () => {
|
|
|
154
154
|
|
|
155
155
|
onlineManager.subscribe(listener)
|
|
156
156
|
|
|
157
|
-
onlineManager.setOnline(true)
|
|
158
|
-
onlineManager.setOnline(true)
|
|
159
|
-
|
|
160
|
-
expect(listener).toHaveBeenCalledTimes(1)
|
|
161
|
-
|
|
162
157
|
onlineManager.setOnline(false)
|
|
163
158
|
onlineManager.setOnline(false)
|
|
164
159
|
|
|
165
|
-
expect(listener).
|
|
160
|
+
expect(listener).toHaveBeenNthCalledWith(1, false)
|
|
166
161
|
|
|
167
|
-
onlineManager.setOnline(
|
|
168
|
-
onlineManager.setOnline(
|
|
162
|
+
onlineManager.setOnline(true)
|
|
163
|
+
onlineManager.setOnline(true)
|
|
169
164
|
|
|
170
|
-
expect(listener).toHaveBeenCalledTimes(
|
|
165
|
+
expect(listener).toHaveBeenCalledTimes(2)
|
|
166
|
+
expect(listener).toHaveBeenNthCalledWith(2, true)
|
|
171
167
|
})
|
|
172
168
|
})
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { waitFor } from '@testing-library/react'
|
|
2
2
|
import '@testing-library/jest-dom'
|
|
3
3
|
|
|
4
|
-
import { vi } from 'vitest'
|
|
5
4
|
import {
|
|
6
5
|
MutationObserver,
|
|
7
6
|
QueryObserver,
|
|
@@ -11,7 +10,7 @@ import {
|
|
|
11
10
|
import { noop } from '../utils'
|
|
12
11
|
import {
|
|
13
12
|
createQueryClient,
|
|
14
|
-
|
|
13
|
+
mockOnlineManagerIsOnline,
|
|
15
14
|
queryKey,
|
|
16
15
|
sleep,
|
|
17
16
|
} from './utils'
|
|
@@ -1074,7 +1073,7 @@ describe('queryClient', () => {
|
|
|
1074
1073
|
const key1 = queryKey()
|
|
1075
1074
|
const queryFn1 = vi.fn<unknown[], string>().mockReturnValue('data1')
|
|
1076
1075
|
await queryClient.fetchQuery({ queryKey: key1, queryFn: queryFn1 })
|
|
1077
|
-
const onlineMock =
|
|
1076
|
+
const onlineMock = mockOnlineManagerIsOnline(false)
|
|
1078
1077
|
|
|
1079
1078
|
await queryClient.refetchQueries({ queryKey: key1 })
|
|
1080
1079
|
|
|
@@ -1088,7 +1087,7 @@ describe('queryClient', () => {
|
|
|
1088
1087
|
queryClient.setQueryDefaults(key1, { networkMode: 'always' })
|
|
1089
1088
|
const queryFn1 = vi.fn<unknown[], string>().mockReturnValue('data1')
|
|
1090
1089
|
await queryClient.fetchQuery({ queryKey: key1, queryFn: queryFn1 })
|
|
1091
|
-
const onlineMock =
|
|
1090
|
+
const onlineMock = mockOnlineManagerIsOnline(false)
|
|
1092
1091
|
|
|
1093
1092
|
await queryClient.refetchQueries({ queryKey: key1 })
|
|
1094
1093
|
|
|
@@ -1394,7 +1393,7 @@ describe('queryClient', () => {
|
|
|
1394
1393
|
queryCacheOnFocusSpy.mockRestore()
|
|
1395
1394
|
queryCacheOnOnlineSpy.mockRestore()
|
|
1396
1395
|
mutationCacheResumePausedMutationsSpy.mockRestore()
|
|
1397
|
-
onlineManager.setOnline(
|
|
1396
|
+
onlineManager.setOnline(true)
|
|
1398
1397
|
})
|
|
1399
1398
|
|
|
1400
1399
|
test('should resume paused mutations when coming online', async () => {
|
|
@@ -1424,7 +1423,7 @@ describe('queryClient', () => {
|
|
|
1424
1423
|
expect(observer1.getCurrentResult().status).toBe('success')
|
|
1425
1424
|
})
|
|
1426
1425
|
|
|
1427
|
-
onlineManager.setOnline(
|
|
1426
|
+
onlineManager.setOnline(true)
|
|
1428
1427
|
})
|
|
1429
1428
|
|
|
1430
1429
|
test('should resume paused mutations one after the other when invoked manually at the same time', async () => {
|
|
@@ -1459,7 +1458,7 @@ describe('queryClient', () => {
|
|
|
1459
1458
|
expect(observer2.getCurrentResult().isPaused).toBeTruthy()
|
|
1460
1459
|
})
|
|
1461
1460
|
|
|
1462
|
-
onlineManager.setOnline(
|
|
1461
|
+
onlineManager.setOnline(true)
|
|
1463
1462
|
void queryClient.resumePausedMutations()
|
|
1464
1463
|
await sleep(5)
|
|
1465
1464
|
await queryClient.resumePausedMutations()
|
|
@@ -1491,6 +1490,7 @@ describe('queryClient', () => {
|
|
|
1491
1490
|
'resumePausedMutations',
|
|
1492
1491
|
)
|
|
1493
1492
|
|
|
1493
|
+
onlineManager.setOnline(false)
|
|
1494
1494
|
onlineManager.setOnline(true)
|
|
1495
1495
|
expect(queryCacheOnOnlineSpy).toHaveBeenCalledTimes(1)
|
|
1496
1496
|
expect(mutationCacheResumePausedMutationsSpy).toHaveBeenCalledTimes(1)
|
|
@@ -1503,7 +1503,7 @@ describe('queryClient', () => {
|
|
|
1503
1503
|
queryCacheOnOnlineSpy.mockRestore()
|
|
1504
1504
|
mutationCacheResumePausedMutationsSpy.mockRestore()
|
|
1505
1505
|
focusManager.setFocused(undefined)
|
|
1506
|
-
onlineManager.setOnline(
|
|
1506
|
+
onlineManager.setOnline(true)
|
|
1507
1507
|
})
|
|
1508
1508
|
|
|
1509
1509
|
test('should not notify queryCache and mutationCache after multiple mounts/unmounts', async () => {
|
|
@@ -1538,7 +1538,7 @@ describe('queryClient', () => {
|
|
|
1538
1538
|
queryCacheOnOnlineSpy.mockRestore()
|
|
1539
1539
|
mutationCacheResumePausedMutationsSpy.mockRestore()
|
|
1540
1540
|
focusManager.setFocused(undefined)
|
|
1541
|
-
onlineManager.setOnline(
|
|
1541
|
+
onlineManager.setOnline(true)
|
|
1542
1542
|
})
|
|
1543
1543
|
})
|
|
1544
1544
|
|
package/src/tests/utils.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { act } from '@testing-library/react'
|
|
2
2
|
import { vi } from 'vitest'
|
|
3
|
-
import { QueryClient } from '..'
|
|
3
|
+
import { QueryClient, onlineManager } from '..'
|
|
4
4
|
import * as utils from '../utils'
|
|
5
5
|
import type { SpyInstance } from 'vitest'
|
|
6
6
|
import type { MutationOptions, QueryClientConfig } from '..'
|
|
@@ -15,8 +15,10 @@ export function mockVisibilityState(
|
|
|
15
15
|
return vi.spyOn(document, 'visibilityState', 'get').mockReturnValue(value)
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
export function
|
|
19
|
-
|
|
18
|
+
export function mockOnlineManagerIsOnline(
|
|
19
|
+
value: boolean,
|
|
20
|
+
): SpyInstance<[], boolean> {
|
|
21
|
+
return vi.spyOn(onlineManager, 'isOnline').mockReturnValue(value)
|
|
20
22
|
}
|
|
21
23
|
|
|
22
24
|
let queryKeyCount = 0
|