@covenant-rpc/react 0.5.0 → 1.0.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/dist/index.d.ts +84 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +178 -105
- package/dist/index.js.map +1 -1
- package/package.json +8 -1
- package/dist/helpers.d.ts +0 -8
- package/dist/helpers.d.ts.map +0 -1
- package/dist/helpers.js +0 -73
- package/dist/helpers.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,14 +1,26 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import { CovenantClient, type QueryKey, type MutationKey } from "@covenant-rpc/client";
|
|
2
|
+
import type { ChannelMap, Covenant, ProcedureMap } from "@covenant-rpc/core";
|
|
3
3
|
import type { InferProcedureInputs, InferProcedureOutputs } from "@covenant-rpc/core/procedure";
|
|
4
|
+
import type { ClientToServerConnection, ClientToSidekickConnection } from "@covenant-rpc/core/interfaces";
|
|
5
|
+
/**
|
|
6
|
+
* Error type returned by React hooks
|
|
7
|
+
*/
|
|
4
8
|
export interface ReactProcedureError {
|
|
5
9
|
code: number;
|
|
6
10
|
message: string;
|
|
7
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* Async state type returned by hooks
|
|
14
|
+
* Discriminated union representing loading, success, or error states
|
|
15
|
+
*/
|
|
8
16
|
export type AsyncHook<T> = {
|
|
9
17
|
loading: true;
|
|
10
18
|
data: null;
|
|
11
19
|
error: null;
|
|
20
|
+
} | {
|
|
21
|
+
loading: true;
|
|
22
|
+
data: T;
|
|
23
|
+
error: null;
|
|
12
24
|
} | {
|
|
13
25
|
loading: false;
|
|
14
26
|
data: T;
|
|
@@ -17,17 +29,79 @@ export type AsyncHook<T> = {
|
|
|
17
29
|
loading: false;
|
|
18
30
|
data: null;
|
|
19
31
|
error: ReactProcedureError;
|
|
32
|
+
} | {
|
|
33
|
+
loading: false;
|
|
34
|
+
data: null;
|
|
35
|
+
error: null;
|
|
20
36
|
};
|
|
37
|
+
/**
|
|
38
|
+
* Mutation state and execute function
|
|
39
|
+
*/
|
|
40
|
+
export type MutationHook<TInput, TOutput> = [
|
|
41
|
+
(input: TInput) => Promise<void>,
|
|
42
|
+
AsyncHook<TOutput>
|
|
43
|
+
];
|
|
44
|
+
/**
|
|
45
|
+
* Options for optimistic updates
|
|
46
|
+
*/
|
|
47
|
+
export interface OptimisticUpdateOptions<TInput, TOutput> {
|
|
48
|
+
/**
|
|
49
|
+
* Generate optimistic data based on mutation input
|
|
50
|
+
*/
|
|
51
|
+
optimisticData?: (input: TInput) => TOutput;
|
|
52
|
+
/**
|
|
53
|
+
* Called when mutation succeeds
|
|
54
|
+
*/
|
|
55
|
+
onSuccess?: (data: TOutput) => void;
|
|
56
|
+
/**
|
|
57
|
+
* Called when mutation fails (optimistic update is rolled back)
|
|
58
|
+
*/
|
|
59
|
+
onError?: (error: ReactProcedureError) => void;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* React client extending CovenantClient with React hooks
|
|
63
|
+
*/
|
|
21
64
|
export declare class CovenantReactClient<P extends ProcedureMap, C extends ChannelMap> extends CovenantClient<P, C> {
|
|
22
65
|
private cache;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
66
|
+
constructor(covenant: Covenant<P, C>, connections: {
|
|
67
|
+
serverConnection: ClientToServerConnection;
|
|
68
|
+
sidekickConnection: ClientToSidekickConnection;
|
|
69
|
+
});
|
|
70
|
+
/**
|
|
71
|
+
* Hook for executing queries
|
|
72
|
+
* Automatically executes on mount and when inputs change
|
|
73
|
+
*/
|
|
74
|
+
useQuery<Q extends QueryKey<P>>(procedure: Q, inputs: InferProcedureInputs<P[Q]>): AsyncHook<InferProcedureOutputs<P[Q]>>;
|
|
75
|
+
/**
|
|
76
|
+
* Hook for executing mutations
|
|
77
|
+
* Returns [mutate, state] pattern - mutation is called manually
|
|
78
|
+
*/
|
|
79
|
+
useMutation<M extends MutationKey<P>>(procedure: M, options?: OptimisticUpdateOptions<InferProcedureInputs<P[M]>, InferProcedureOutputs<P[M]>>): MutationHook<InferProcedureInputs<P[M]>, InferProcedureOutputs<P[M]>>;
|
|
80
|
+
/**
|
|
81
|
+
* Hook for queries with automatic refetch on resource invalidation
|
|
82
|
+
* Uses client.listen() for resource tracking
|
|
83
|
+
*/
|
|
84
|
+
useListenedQuery<Q extends QueryKey<P>>(procedure: Q, inputs: InferProcedureInputs<P[Q]>, remote?: boolean): AsyncHook<InferProcedureOutputs<P[Q]>>;
|
|
85
|
+
/**
|
|
86
|
+
* Hook for cached queries with shared state across component instances
|
|
87
|
+
* All components using the same procedure+inputs share the same cache entry
|
|
88
|
+
*/
|
|
89
|
+
useCachedQuery<Q extends QueryKey<P>>(procedure: Q, inputs: InferProcedureInputs<P[Q]>, remote?: boolean): AsyncHook<InferProcedureOutputs<P[Q]>>;
|
|
90
|
+
/**
|
|
91
|
+
* Invalidate a specific cache entry
|
|
92
|
+
*/
|
|
93
|
+
invalidateCache<Q extends QueryKey<P>>(procedure: Q, inputs: InferProcedureInputs<P[Q]>): void;
|
|
94
|
+
/**
|
|
95
|
+
* Clear all cache entries
|
|
96
|
+
*/
|
|
97
|
+
clearCache(): void;
|
|
98
|
+
/**
|
|
99
|
+
* Generate a cache key from procedure name and inputs
|
|
100
|
+
*/
|
|
101
|
+
private generateCacheKey;
|
|
102
|
+
/**
|
|
103
|
+
* Create a new cached query entry with listener
|
|
104
|
+
*/
|
|
27
105
|
private createCachedQuery;
|
|
28
|
-
private getCacheKey;
|
|
29
|
-
private addCacheListener;
|
|
30
|
-
private removeCacheListener;
|
|
31
|
-
useCachedQuery<Q extends QueryKey<P>>(procedureName: Q, inputs: InferProcedureInputs<P[Q]>): AsyncHook<InferProcedureOutputs<P[Q]>>;
|
|
32
106
|
}
|
|
33
107
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,154 +1,227 @@
|
|
|
1
|
+
import { useState, useEffect, useCallback, useRef } from "react";
|
|
1
2
|
import { CovenantClient } from "@covenant-rpc/client";
|
|
2
|
-
|
|
3
|
+
/**
|
|
4
|
+
* React client extending CovenantClient with React hooks
|
|
5
|
+
*/
|
|
3
6
|
export class CovenantReactClient extends CovenantClient {
|
|
4
|
-
// this is any becuse we have no other choice. You just gotta trust me on this one.
|
|
5
7
|
cache = new Map();
|
|
6
|
-
|
|
7
|
-
|
|
8
|
+
constructor(covenant, connections) {
|
|
9
|
+
super(covenant, connections);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Hook for executing queries
|
|
13
|
+
* Automatically executes on mount and when inputs change
|
|
14
|
+
*/
|
|
15
|
+
useQuery(procedure, inputs) {
|
|
8
16
|
const [state, setState] = useState({
|
|
9
17
|
loading: true,
|
|
10
18
|
data: null,
|
|
11
19
|
error: null,
|
|
12
20
|
});
|
|
21
|
+
const isMountedRef = useRef(true);
|
|
13
22
|
useEffect(() => {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
setState({
|
|
23
|
-
loading: false,
|
|
24
|
-
data: response.data,
|
|
25
|
-
error: null,
|
|
26
|
-
});
|
|
23
|
+
isMountedRef.current = true;
|
|
24
|
+
let cancelled = false;
|
|
25
|
+
setState({ loading: true, data: null, error: null });
|
|
26
|
+
this.query(procedure, inputs).then((result) => {
|
|
27
|
+
if (cancelled || !isMountedRef.current)
|
|
28
|
+
return;
|
|
29
|
+
if (result.success) {
|
|
30
|
+
setState({ loading: false, data: result.data, error: null });
|
|
27
31
|
}
|
|
28
32
|
else {
|
|
29
33
|
setState({
|
|
30
34
|
loading: false,
|
|
31
35
|
data: null,
|
|
32
|
-
error:
|
|
36
|
+
error: {
|
|
37
|
+
code: result.error.code,
|
|
38
|
+
message: result.error.message,
|
|
39
|
+
},
|
|
33
40
|
});
|
|
34
41
|
}
|
|
42
|
+
});
|
|
43
|
+
return () => {
|
|
44
|
+
cancelled = true;
|
|
35
45
|
};
|
|
36
|
-
|
|
37
|
-
|
|
46
|
+
}, [procedure, JSON.stringify(inputs)]);
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
return () => {
|
|
49
|
+
isMountedRef.current = false;
|
|
50
|
+
};
|
|
51
|
+
}, []);
|
|
38
52
|
return state;
|
|
39
53
|
}
|
|
40
|
-
|
|
54
|
+
/**
|
|
55
|
+
* Hook for executing mutations
|
|
56
|
+
* Returns [mutate, state] pattern - mutation is called manually
|
|
57
|
+
*/
|
|
58
|
+
useMutation(procedure, options) {
|
|
41
59
|
const [state, setState] = useState({
|
|
42
|
-
loading:
|
|
60
|
+
loading: false,
|
|
43
61
|
data: null,
|
|
44
62
|
error: null,
|
|
45
63
|
});
|
|
64
|
+
const isMountedRef = useRef(true);
|
|
46
65
|
useEffect(() => {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
loading: true,
|
|
50
|
-
data: null,
|
|
51
|
-
error: null,
|
|
52
|
-
});
|
|
53
|
-
const response = await this.mutate(procedureName, inputs);
|
|
54
|
-
if (response.success) {
|
|
55
|
-
setState({
|
|
56
|
-
loading: false,
|
|
57
|
-
data: response.data,
|
|
58
|
-
error: null,
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
setState({
|
|
63
|
-
loading: false,
|
|
64
|
-
data: null,
|
|
65
|
-
error: response.error,
|
|
66
|
-
});
|
|
67
|
-
}
|
|
66
|
+
return () => {
|
|
67
|
+
isMountedRef.current = false;
|
|
68
68
|
};
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
69
|
+
}, []);
|
|
70
|
+
const mutate = useCallback(async (input) => {
|
|
71
|
+
// Apply optimistic update if provided
|
|
72
|
+
if (options?.optimisticData) {
|
|
73
|
+
const optimisticData = options.optimisticData(input);
|
|
74
|
+
setState({ loading: true, data: optimisticData, error: null });
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
setState({ loading: true, data: null, error: null });
|
|
78
|
+
}
|
|
79
|
+
const result = await this.mutate(procedure, input);
|
|
80
|
+
if (!isMountedRef.current)
|
|
81
|
+
return;
|
|
82
|
+
if (result.success) {
|
|
83
|
+
setState({ loading: false, data: result.data, error: null });
|
|
84
|
+
options?.onSuccess?.(result.data);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
const error = {
|
|
88
|
+
code: result.error.code,
|
|
89
|
+
message: result.error.message,
|
|
90
|
+
};
|
|
91
|
+
setState({ loading: false, data: null, error });
|
|
92
|
+
options?.onError?.(error);
|
|
93
|
+
}
|
|
94
|
+
}, [procedure, options]);
|
|
95
|
+
return [mutate, state];
|
|
72
96
|
}
|
|
73
|
-
|
|
97
|
+
/**
|
|
98
|
+
* Hook for queries with automatic refetch on resource invalidation
|
|
99
|
+
* Uses client.listen() for resource tracking
|
|
100
|
+
*/
|
|
101
|
+
useListenedQuery(procedure, inputs, remote = false) {
|
|
74
102
|
const [state, setState] = useState({
|
|
75
103
|
loading: true,
|
|
76
104
|
data: null,
|
|
77
105
|
error: null,
|
|
78
106
|
});
|
|
107
|
+
const isMountedRef = useRef(true);
|
|
79
108
|
useEffect(() => {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
});
|
|
109
|
+
isMountedRef.current = true;
|
|
110
|
+
setState({ loading: true, data: null, error: null });
|
|
111
|
+
const unsubscribe = this.listen(procedure, inputs, (result) => {
|
|
112
|
+
if (!isMountedRef.current)
|
|
113
|
+
return;
|
|
114
|
+
if (result.success) {
|
|
115
|
+
setState({ loading: false, data: result.data, error: null });
|
|
87
116
|
}
|
|
88
117
|
else {
|
|
89
118
|
setState({
|
|
90
119
|
loading: false,
|
|
91
|
-
|
|
92
|
-
|
|
120
|
+
data: null,
|
|
121
|
+
error: {
|
|
122
|
+
code: result.error.code,
|
|
123
|
+
message: result.error.message,
|
|
124
|
+
},
|
|
93
125
|
});
|
|
94
126
|
}
|
|
95
|
-
});
|
|
96
|
-
|
|
127
|
+
}, remote);
|
|
128
|
+
return () => {
|
|
129
|
+
unsubscribe();
|
|
130
|
+
};
|
|
131
|
+
}, [procedure, JSON.stringify(inputs), remote]);
|
|
132
|
+
useEffect(() => {
|
|
133
|
+
return () => {
|
|
134
|
+
isMountedRef.current = false;
|
|
135
|
+
};
|
|
136
|
+
}, []);
|
|
97
137
|
return state;
|
|
98
138
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
139
|
+
/**
|
|
140
|
+
* Hook for cached queries with shared state across component instances
|
|
141
|
+
* All components using the same procedure+inputs share the same cache entry
|
|
142
|
+
*/
|
|
143
|
+
useCachedQuery(procedure, inputs, remote = false) {
|
|
144
|
+
const cacheKey = this.generateCacheKey(procedure, inputs);
|
|
145
|
+
// Get or create cache entry
|
|
146
|
+
if (!this.cache.has(cacheKey)) {
|
|
147
|
+
this.createCachedQuery(procedure, inputs, remote);
|
|
148
|
+
}
|
|
149
|
+
const cacheEntry = this.cache.get(cacheKey);
|
|
150
|
+
const [state, setState] = useState(cacheEntry.data);
|
|
151
|
+
useEffect(() => {
|
|
152
|
+
// Subscribe to cache updates
|
|
153
|
+
const listener = (newData) => {
|
|
154
|
+
setState(newData);
|
|
109
155
|
};
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
156
|
+
cacheEntry.listeners.add(listener);
|
|
157
|
+
// Update state to current cache value in case it changed
|
|
158
|
+
setState(cacheEntry.data);
|
|
159
|
+
return () => {
|
|
160
|
+
cacheEntry.listeners.delete(listener);
|
|
161
|
+
// Clean up cache entry if no more listeners
|
|
162
|
+
if (cacheEntry.listeners.size === 0) {
|
|
163
|
+
cacheEntry.unsubscribe?.();
|
|
164
|
+
this.cache.delete(cacheKey);
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
}, [cacheKey]);
|
|
168
|
+
return state;
|
|
120
169
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
170
|
+
/**
|
|
171
|
+
* Invalidate a specific cache entry
|
|
172
|
+
*/
|
|
173
|
+
invalidateCache(procedure, inputs) {
|
|
174
|
+
const cacheKey = this.generateCacheKey(procedure, inputs);
|
|
175
|
+
const cacheEntry = this.cache.get(cacheKey);
|
|
176
|
+
if (cacheEntry) {
|
|
177
|
+
cacheEntry.unsubscribe?.();
|
|
178
|
+
this.cache.delete(cacheKey);
|
|
179
|
+
}
|
|
125
180
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
181
|
+
/**
|
|
182
|
+
* Clear all cache entries
|
|
183
|
+
*/
|
|
184
|
+
clearCache() {
|
|
185
|
+
for (const [, entry] of this.cache) {
|
|
186
|
+
entry.unsubscribe?.();
|
|
132
187
|
}
|
|
188
|
+
this.cache.clear();
|
|
133
189
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
190
|
+
/**
|
|
191
|
+
* Generate a cache key from procedure name and inputs
|
|
192
|
+
*/
|
|
193
|
+
generateCacheKey(procedure, inputs) {
|
|
194
|
+
return `${procedure}:${JSON.stringify(inputs)}`;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Create a new cached query entry with listener
|
|
198
|
+
*/
|
|
199
|
+
createCachedQuery(procedure, inputs, remote) {
|
|
200
|
+
const cacheKey = this.generateCacheKey(procedure, inputs);
|
|
201
|
+
const cacheEntry = {
|
|
202
|
+
data: { loading: true, data: null, error: null },
|
|
203
|
+
listeners: new Set(),
|
|
204
|
+
};
|
|
205
|
+
this.cache.set(cacheKey, cacheEntry);
|
|
206
|
+
// Set up listener for automatic refetch
|
|
207
|
+
const unsubscribe = this.listen(procedure, inputs, (result) => {
|
|
208
|
+
const newData = result.success
|
|
209
|
+
? { loading: false, data: result.data, error: null }
|
|
210
|
+
: {
|
|
211
|
+
loading: false,
|
|
212
|
+
data: null,
|
|
213
|
+
error: {
|
|
214
|
+
code: result.error.code,
|
|
215
|
+
message: result.error.message,
|
|
216
|
+
},
|
|
217
|
+
};
|
|
218
|
+
cacheEntry.data = newData;
|
|
219
|
+
// Notify all listeners
|
|
220
|
+
for (const listener of cacheEntry.listeners) {
|
|
221
|
+
listener(newData);
|
|
146
222
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
return () => this.removeCacheListener(l);
|
|
150
|
-
}, [setState, inputs]);
|
|
151
|
-
return state;
|
|
223
|
+
}, remote);
|
|
224
|
+
cacheEntry.unsubscribe = unsubscribe;
|
|
152
225
|
}
|
|
153
226
|
}
|
|
154
227
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@covenant-rpc/react",
|
|
3
3
|
"module": "./dist/index.js",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "1.0.0",
|
|
6
6
|
"exports": {
|
|
7
7
|
".": {
|
|
8
8
|
"types": "./dist/index.d.ts",
|
|
@@ -23,6 +23,13 @@
|
|
|
23
23
|
"@covenant-rpc/core": "^0.5.0",
|
|
24
24
|
"@covenant-rpc/client": "^0.5.0"
|
|
25
25
|
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"@covenant-rpc/server": "workspace:*",
|
|
28
|
+
"@testing-library/react": "^14.2.1",
|
|
29
|
+
"@types/jsdom": "^27.0.0",
|
|
30
|
+
"jsdom": "^27.4.0",
|
|
31
|
+
"zod": "^3.22.4"
|
|
32
|
+
},
|
|
26
33
|
"types": "./dist/index.d.ts",
|
|
27
34
|
"files": [
|
|
28
35
|
"dist"
|
package/dist/helpers.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { AsyncHook } from ".";
|
|
2
|
-
export type CallbackFunction<T> = () => T;
|
|
3
|
-
export declare function useDataStream<T>({ initialFetch, connect, disconnect }: {
|
|
4
|
-
initialFetch: () => Promise<T[]>;
|
|
5
|
-
connect: (callback: CallbackFunction<T>) => Promise<void>;
|
|
6
|
-
disconnect: () => void;
|
|
7
|
-
}): AsyncHook<T[]>;
|
|
8
|
-
//# sourceMappingURL=helpers.d.ts.map
|
package/dist/helpers.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,GAAG,CAAC;AAkBnC,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;AAY1C,wBAAgB,aAAa,CAAC,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE;IACtE,YAAY,EAAE,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IACjC,OAAO,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,UAAU,EAAE,MAAM,IAAI,CAAA;CACvB,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,CAsEjB"}
|
package/dist/helpers.js
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { useEffect, useState } from "react";
|
|
2
|
-
// useDataStream is best described by an example. Let's say we have a chatFunction which has two methods:
|
|
3
|
-
//
|
|
4
|
-
// getCurrentMessages: () => Promise<Message[]>
|
|
5
|
-
// connectToUpdates: (onUpdate: () => Message): Promise<void>
|
|
6
|
-
// disconnect: () => void
|
|
7
|
-
//
|
|
8
|
-
// We want to fetch all messages as well as continue to listen to them. useDataStream should handle this
|
|
9
|
-
// as well as various race conditions
|
|
10
|
-
export function useDataStream({ initialFetch, connect, disconnect }) {
|
|
11
|
-
const [state, setState] = useState({
|
|
12
|
-
loading: true,
|
|
13
|
-
data: null,
|
|
14
|
-
error: null
|
|
15
|
-
});
|
|
16
|
-
useEffect(() => {
|
|
17
|
-
let isMounted = true;
|
|
18
|
-
let items = [];
|
|
19
|
-
let isConnecting = false;
|
|
20
|
-
const handleNewItem = (newItem) => {
|
|
21
|
-
if (!isMounted)
|
|
22
|
-
return;
|
|
23
|
-
// Add new item to the list
|
|
24
|
-
items = [...items, newItem];
|
|
25
|
-
setState({
|
|
26
|
-
loading: false,
|
|
27
|
-
data: items,
|
|
28
|
-
error: null
|
|
29
|
-
});
|
|
30
|
-
};
|
|
31
|
-
const initialize = async () => {
|
|
32
|
-
try {
|
|
33
|
-
// Fetch initial data first
|
|
34
|
-
const initialData = await initialFetch();
|
|
35
|
-
if (!isMounted)
|
|
36
|
-
return;
|
|
37
|
-
items = initialData;
|
|
38
|
-
setState({
|
|
39
|
-
loading: false,
|
|
40
|
-
data: items,
|
|
41
|
-
error: null
|
|
42
|
-
});
|
|
43
|
-
// Connect to updates
|
|
44
|
-
// Note: The type signature indicates CallbackFunction<T> = () => T,
|
|
45
|
-
// but the practical use case requires (newItem: T) => void
|
|
46
|
-
// Using type assertion to work with the expected runtime behavior
|
|
47
|
-
isConnecting = true;
|
|
48
|
-
await connect(handleNewItem);
|
|
49
|
-
}
|
|
50
|
-
catch (error) {
|
|
51
|
-
if (!isMounted)
|
|
52
|
-
return;
|
|
53
|
-
setState({
|
|
54
|
-
loading: false,
|
|
55
|
-
data: null,
|
|
56
|
-
error: {
|
|
57
|
-
code: 500,
|
|
58
|
-
message: error instanceof Error ? error.message : 'Unknown error'
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
initialize();
|
|
64
|
-
return () => {
|
|
65
|
-
isMounted = false;
|
|
66
|
-
if (isConnecting) {
|
|
67
|
-
disconnect();
|
|
68
|
-
}
|
|
69
|
-
};
|
|
70
|
-
}, [initialFetch, connect, disconnect]);
|
|
71
|
-
return state;
|
|
72
|
-
}
|
|
73
|
-
//# sourceMappingURL=helpers.js.map
|
package/dist/helpers.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAoB5C,yGAAyG;AACzG,EAAE;AACF,+CAA+C;AAC/C,8DAA8D;AAC9D,yBAAyB;AACzB,EAAE;AACF,wGAAwG;AACxG,qCAAqC;AAErC,MAAM,UAAU,aAAa,CAAI,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAInE;IACC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAiB;QACjD,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,IAAI,KAAK,GAAQ,EAAE,CAAC;QACpB,IAAI,YAAY,GAAG,KAAK,CAAC;QAEzB,MAAM,aAAa,GAAG,CAAC,OAAU,EAAE,EAAE;YACnC,IAAI,CAAC,SAAS;gBAAE,OAAO;YAEvB,2BAA2B;YAC3B,KAAK,GAAG,CAAC,GAAG,KAAK,EAAE,OAAO,CAAC,CAAC;YAC5B,QAAQ,CAAC;gBACP,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,IAAI;aACZ,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;YAC5B,IAAI,CAAC;gBACH,2BAA2B;gBAC3B,MAAM,WAAW,GAAG,MAAM,YAAY,EAAE,CAAC;gBAEzC,IAAI,CAAC,SAAS;oBAAE,OAAO;gBAEvB,KAAK,GAAG,WAAW,CAAC;gBACpB,QAAQ,CAAC;oBACP,OAAO,EAAE,KAAK;oBACd,IAAI,EAAE,KAAK;oBACX,KAAK,EAAE,IAAI;iBACZ,CAAC,CAAC;gBAEH,qBAAqB;gBACrB,oEAAoE;gBACpE,2DAA2D;gBAC3D,kEAAkE;gBAClE,YAAY,GAAG,IAAI,CAAC;gBACpB,MAAM,OAAO,CAAC,aAAoB,CAAC,CAAC;YAEtC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,SAAS;oBAAE,OAAO;gBAEvB,QAAQ,CAAC;oBACP,OAAO,EAAE,KAAK;oBACd,IAAI,EAAE,IAAI;oBACV,KAAK,EAAE;wBACL,IAAI,EAAE,GAAG;wBACT,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;qBAClE;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC;QAEF,UAAU,EAAE,CAAC;QAEb,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,KAAK,CAAC;YAClB,IAAI,YAAY,EAAE,CAAC;gBACjB,UAAU,EAAE,CAAC;YACf,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;IAExC,OAAO,KAAK,CAAC;AACf,CAAC"}
|