@spoosh/plugin-refetch 0.1.8 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +30 -7
- package/dist/index.mjs +30 -7
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -16,7 +16,7 @@ npm install @spoosh/plugin-refetch
|
|
|
16
16
|
import { Spoosh } from "@spoosh/core";
|
|
17
17
|
import { refetchPlugin } from "@spoosh/plugin-refetch";
|
|
18
18
|
|
|
19
|
-
const
|
|
19
|
+
const spoosh = new Spoosh<ApiSchema, Error>("/api").use([
|
|
20
20
|
refetchPlugin({
|
|
21
21
|
refetchOnFocus: true,
|
|
22
22
|
refetchOnReconnect: true,
|
package/dist/index.d.mts
CHANGED
|
@@ -30,7 +30,7 @@ type RefetchWriteResult = object;
|
|
|
30
30
|
* ```ts
|
|
31
31
|
* import { Spoosh } from "@spoosh/core";
|
|
32
32
|
*
|
|
33
|
-
* const
|
|
33
|
+
* const spoosh = new Spoosh<ApiSchema, Error>("/api")
|
|
34
34
|
* .use([
|
|
35
35
|
* // ... other plugins
|
|
36
36
|
* refetchPlugin({ refetchOnFocus: true, refetchOnReconnect: true }),
|
package/dist/index.d.ts
CHANGED
|
@@ -30,7 +30,7 @@ type RefetchWriteResult = object;
|
|
|
30
30
|
* ```ts
|
|
31
31
|
* import { Spoosh } from "@spoosh/core";
|
|
32
32
|
*
|
|
33
|
-
* const
|
|
33
|
+
* const spoosh = new Spoosh<ApiSchema, Error>("/api")
|
|
34
34
|
* .use([
|
|
35
35
|
* // ... other plugins
|
|
36
36
|
* refetchPlugin({ refetchOnFocus: true, refetchOnReconnect: true }),
|
package/dist/index.js
CHANGED
|
@@ -25,14 +25,19 @@ __export(src_exports, {
|
|
|
25
25
|
module.exports = __toCommonJS(src_exports);
|
|
26
26
|
|
|
27
27
|
// src/plugin.ts
|
|
28
|
+
var PLUGIN_NAME = "spoosh:refetch";
|
|
28
29
|
function refetchPlugin(config = {}) {
|
|
29
30
|
const { refetchOnFocus = false, refetchOnReconnect = false } = config;
|
|
30
31
|
const listenersByHook = /* @__PURE__ */ new Map();
|
|
31
32
|
const isBrowser = typeof window !== "undefined";
|
|
32
|
-
const setupFocusListener = (instanceId, queryKey, eventEmitter) => {
|
|
33
|
+
const setupFocusListener = (instanceId, queryKey, eventEmitter, eventTracer) => {
|
|
33
34
|
if (!isBrowser) return;
|
|
34
35
|
const visibilityHandler = () => {
|
|
35
36
|
if (document.visibilityState === "visible") {
|
|
37
|
+
eventTracer?.emit("Triggered on visibility", {
|
|
38
|
+
queryKey,
|
|
39
|
+
color: "success"
|
|
40
|
+
});
|
|
36
41
|
eventEmitter.emit("refetch", {
|
|
37
42
|
queryKey,
|
|
38
43
|
reason: "focus"
|
|
@@ -40,6 +45,10 @@ function refetchPlugin(config = {}) {
|
|
|
40
45
|
}
|
|
41
46
|
};
|
|
42
47
|
const focusHandler = () => {
|
|
48
|
+
eventTracer?.emit("Triggered on focus", {
|
|
49
|
+
queryKey,
|
|
50
|
+
color: "success"
|
|
51
|
+
});
|
|
43
52
|
eventEmitter.emit("refetch", {
|
|
44
53
|
queryKey,
|
|
45
54
|
reason: "focus"
|
|
@@ -47,6 +56,10 @@ function refetchPlugin(config = {}) {
|
|
|
47
56
|
};
|
|
48
57
|
document.addEventListener("visibilitychange", visibilityHandler);
|
|
49
58
|
window.addEventListener("focus", focusHandler);
|
|
59
|
+
eventTracer?.emit("Focus listener setup", {
|
|
60
|
+
queryKey,
|
|
61
|
+
color: "info"
|
|
62
|
+
});
|
|
50
63
|
const entry = listenersByHook.get(instanceId) ?? { queryKey };
|
|
51
64
|
entry.queryKey = queryKey;
|
|
52
65
|
entry.focusCleanup = () => {
|
|
@@ -55,15 +68,23 @@ function refetchPlugin(config = {}) {
|
|
|
55
68
|
};
|
|
56
69
|
listenersByHook.set(instanceId, entry);
|
|
57
70
|
};
|
|
58
|
-
const setupReconnectListener = (instanceId, queryKey, eventEmitter) => {
|
|
71
|
+
const setupReconnectListener = (instanceId, queryKey, eventEmitter, eventTracer) => {
|
|
59
72
|
if (!isBrowser) return;
|
|
60
73
|
const handler = () => {
|
|
74
|
+
eventTracer?.emit("Triggered on reconnect", {
|
|
75
|
+
queryKey,
|
|
76
|
+
color: "success"
|
|
77
|
+
});
|
|
61
78
|
eventEmitter.emit("refetch", {
|
|
62
79
|
queryKey,
|
|
63
80
|
reason: "reconnect"
|
|
64
81
|
});
|
|
65
82
|
};
|
|
66
83
|
window.addEventListener("online", handler);
|
|
84
|
+
eventTracer?.emit("Reconnect listener setup", {
|
|
85
|
+
queryKey,
|
|
86
|
+
color: "info"
|
|
87
|
+
});
|
|
67
88
|
const entry = listenersByHook.get(instanceId) ?? { queryKey };
|
|
68
89
|
entry.queryKey = queryKey;
|
|
69
90
|
entry.reconnectCleanup = () => {
|
|
@@ -100,24 +121,26 @@ function refetchPlugin(config = {}) {
|
|
|
100
121
|
}
|
|
101
122
|
};
|
|
102
123
|
return {
|
|
103
|
-
name:
|
|
124
|
+
name: PLUGIN_NAME,
|
|
104
125
|
operations: ["read", "infiniteRead"],
|
|
105
126
|
lifecycle: {
|
|
106
127
|
onMount(context) {
|
|
107
128
|
const { queryKey, eventEmitter, instanceId } = context;
|
|
129
|
+
const et = context.eventTracer?.(PLUGIN_NAME);
|
|
108
130
|
if (!instanceId) return;
|
|
109
131
|
const pluginOptions = context.pluginOptions;
|
|
110
132
|
const shouldRefetchOnFocus = pluginOptions?.refetchOnFocus ?? refetchOnFocus;
|
|
111
133
|
const shouldRefetchOnReconnect = pluginOptions?.refetchOnReconnect ?? refetchOnReconnect;
|
|
112
134
|
if (shouldRefetchOnFocus) {
|
|
113
|
-
setupFocusListener(instanceId, queryKey, eventEmitter);
|
|
135
|
+
setupFocusListener(instanceId, queryKey, eventEmitter, et);
|
|
114
136
|
}
|
|
115
137
|
if (shouldRefetchOnReconnect) {
|
|
116
|
-
setupReconnectListener(instanceId, queryKey, eventEmitter);
|
|
138
|
+
setupReconnectListener(instanceId, queryKey, eventEmitter, et);
|
|
117
139
|
}
|
|
118
140
|
},
|
|
119
141
|
onUpdate(context) {
|
|
120
142
|
const { queryKey, eventEmitter, instanceId } = context;
|
|
143
|
+
const et = context.eventTracer?.(PLUGIN_NAME);
|
|
121
144
|
if (!instanceId) return;
|
|
122
145
|
const pluginOptions = context.pluginOptions;
|
|
123
146
|
const shouldRefetchOnFocus = pluginOptions?.refetchOnFocus ?? refetchOnFocus;
|
|
@@ -128,12 +151,12 @@ function refetchPlugin(config = {}) {
|
|
|
128
151
|
cleanupHook(instanceId);
|
|
129
152
|
}
|
|
130
153
|
if (shouldRefetchOnFocus && !hasFocusListener(instanceId)) {
|
|
131
|
-
setupFocusListener(instanceId, queryKey, eventEmitter);
|
|
154
|
+
setupFocusListener(instanceId, queryKey, eventEmitter, et);
|
|
132
155
|
} else if (!shouldRefetchOnFocus && hasFocusListener(instanceId)) {
|
|
133
156
|
removeFocusListener(instanceId);
|
|
134
157
|
}
|
|
135
158
|
if (shouldRefetchOnReconnect && !hasReconnectListener(instanceId)) {
|
|
136
|
-
setupReconnectListener(instanceId, queryKey, eventEmitter);
|
|
159
|
+
setupReconnectListener(instanceId, queryKey, eventEmitter, et);
|
|
137
160
|
} else if (!shouldRefetchOnReconnect && hasReconnectListener(instanceId)) {
|
|
138
161
|
removeReconnectListener(instanceId);
|
|
139
162
|
}
|
package/dist/index.mjs
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
// src/plugin.ts
|
|
2
|
+
var PLUGIN_NAME = "spoosh:refetch";
|
|
2
3
|
function refetchPlugin(config = {}) {
|
|
3
4
|
const { refetchOnFocus = false, refetchOnReconnect = false } = config;
|
|
4
5
|
const listenersByHook = /* @__PURE__ */ new Map();
|
|
5
6
|
const isBrowser = typeof window !== "undefined";
|
|
6
|
-
const setupFocusListener = (instanceId, queryKey, eventEmitter) => {
|
|
7
|
+
const setupFocusListener = (instanceId, queryKey, eventEmitter, eventTracer) => {
|
|
7
8
|
if (!isBrowser) return;
|
|
8
9
|
const visibilityHandler = () => {
|
|
9
10
|
if (document.visibilityState === "visible") {
|
|
11
|
+
eventTracer?.emit("Triggered on visibility", {
|
|
12
|
+
queryKey,
|
|
13
|
+
color: "success"
|
|
14
|
+
});
|
|
10
15
|
eventEmitter.emit("refetch", {
|
|
11
16
|
queryKey,
|
|
12
17
|
reason: "focus"
|
|
@@ -14,6 +19,10 @@ function refetchPlugin(config = {}) {
|
|
|
14
19
|
}
|
|
15
20
|
};
|
|
16
21
|
const focusHandler = () => {
|
|
22
|
+
eventTracer?.emit("Triggered on focus", {
|
|
23
|
+
queryKey,
|
|
24
|
+
color: "success"
|
|
25
|
+
});
|
|
17
26
|
eventEmitter.emit("refetch", {
|
|
18
27
|
queryKey,
|
|
19
28
|
reason: "focus"
|
|
@@ -21,6 +30,10 @@ function refetchPlugin(config = {}) {
|
|
|
21
30
|
};
|
|
22
31
|
document.addEventListener("visibilitychange", visibilityHandler);
|
|
23
32
|
window.addEventListener("focus", focusHandler);
|
|
33
|
+
eventTracer?.emit("Focus listener setup", {
|
|
34
|
+
queryKey,
|
|
35
|
+
color: "info"
|
|
36
|
+
});
|
|
24
37
|
const entry = listenersByHook.get(instanceId) ?? { queryKey };
|
|
25
38
|
entry.queryKey = queryKey;
|
|
26
39
|
entry.focusCleanup = () => {
|
|
@@ -29,15 +42,23 @@ function refetchPlugin(config = {}) {
|
|
|
29
42
|
};
|
|
30
43
|
listenersByHook.set(instanceId, entry);
|
|
31
44
|
};
|
|
32
|
-
const setupReconnectListener = (instanceId, queryKey, eventEmitter) => {
|
|
45
|
+
const setupReconnectListener = (instanceId, queryKey, eventEmitter, eventTracer) => {
|
|
33
46
|
if (!isBrowser) return;
|
|
34
47
|
const handler = () => {
|
|
48
|
+
eventTracer?.emit("Triggered on reconnect", {
|
|
49
|
+
queryKey,
|
|
50
|
+
color: "success"
|
|
51
|
+
});
|
|
35
52
|
eventEmitter.emit("refetch", {
|
|
36
53
|
queryKey,
|
|
37
54
|
reason: "reconnect"
|
|
38
55
|
});
|
|
39
56
|
};
|
|
40
57
|
window.addEventListener("online", handler);
|
|
58
|
+
eventTracer?.emit("Reconnect listener setup", {
|
|
59
|
+
queryKey,
|
|
60
|
+
color: "info"
|
|
61
|
+
});
|
|
41
62
|
const entry = listenersByHook.get(instanceId) ?? { queryKey };
|
|
42
63
|
entry.queryKey = queryKey;
|
|
43
64
|
entry.reconnectCleanup = () => {
|
|
@@ -74,24 +95,26 @@ function refetchPlugin(config = {}) {
|
|
|
74
95
|
}
|
|
75
96
|
};
|
|
76
97
|
return {
|
|
77
|
-
name:
|
|
98
|
+
name: PLUGIN_NAME,
|
|
78
99
|
operations: ["read", "infiniteRead"],
|
|
79
100
|
lifecycle: {
|
|
80
101
|
onMount(context) {
|
|
81
102
|
const { queryKey, eventEmitter, instanceId } = context;
|
|
103
|
+
const et = context.eventTracer?.(PLUGIN_NAME);
|
|
82
104
|
if (!instanceId) return;
|
|
83
105
|
const pluginOptions = context.pluginOptions;
|
|
84
106
|
const shouldRefetchOnFocus = pluginOptions?.refetchOnFocus ?? refetchOnFocus;
|
|
85
107
|
const shouldRefetchOnReconnect = pluginOptions?.refetchOnReconnect ?? refetchOnReconnect;
|
|
86
108
|
if (shouldRefetchOnFocus) {
|
|
87
|
-
setupFocusListener(instanceId, queryKey, eventEmitter);
|
|
109
|
+
setupFocusListener(instanceId, queryKey, eventEmitter, et);
|
|
88
110
|
}
|
|
89
111
|
if (shouldRefetchOnReconnect) {
|
|
90
|
-
setupReconnectListener(instanceId, queryKey, eventEmitter);
|
|
112
|
+
setupReconnectListener(instanceId, queryKey, eventEmitter, et);
|
|
91
113
|
}
|
|
92
114
|
},
|
|
93
115
|
onUpdate(context) {
|
|
94
116
|
const { queryKey, eventEmitter, instanceId } = context;
|
|
117
|
+
const et = context.eventTracer?.(PLUGIN_NAME);
|
|
95
118
|
if (!instanceId) return;
|
|
96
119
|
const pluginOptions = context.pluginOptions;
|
|
97
120
|
const shouldRefetchOnFocus = pluginOptions?.refetchOnFocus ?? refetchOnFocus;
|
|
@@ -102,12 +125,12 @@ function refetchPlugin(config = {}) {
|
|
|
102
125
|
cleanupHook(instanceId);
|
|
103
126
|
}
|
|
104
127
|
if (shouldRefetchOnFocus && !hasFocusListener(instanceId)) {
|
|
105
|
-
setupFocusListener(instanceId, queryKey, eventEmitter);
|
|
128
|
+
setupFocusListener(instanceId, queryKey, eventEmitter, et);
|
|
106
129
|
} else if (!shouldRefetchOnFocus && hasFocusListener(instanceId)) {
|
|
107
130
|
removeFocusListener(instanceId);
|
|
108
131
|
}
|
|
109
132
|
if (shouldRefetchOnReconnect && !hasReconnectListener(instanceId)) {
|
|
110
|
-
setupReconnectListener(instanceId, queryKey, eventEmitter);
|
|
133
|
+
setupReconnectListener(instanceId, queryKey, eventEmitter, et);
|
|
111
134
|
} else if (!shouldRefetchOnReconnect && hasReconnectListener(instanceId)) {
|
|
112
135
|
removeReconnectListener(instanceId);
|
|
113
136
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spoosh/plugin-refetch",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Auto-refetch plugin for Spoosh - refetch on focus and reconnect",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -34,11 +34,11 @@
|
|
|
34
34
|
}
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
37
|
-
"@spoosh/core": ">=0.
|
|
37
|
+
"@spoosh/core": ">=0.13.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@spoosh/core": "0.
|
|
41
|
-
"@spoosh/test-utils": "0.
|
|
40
|
+
"@spoosh/core": "0.13.0",
|
|
41
|
+
"@spoosh/test-utils": "0.2.0"
|
|
42
42
|
},
|
|
43
43
|
"scripts": {
|
|
44
44
|
"dev": "tsup --watch",
|