Skip to content

Commit fe95997

Browse files
fix(web): add generic types
1 parent 8ebcba5 commit fe95997

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

templates/web/src/sdk.ts.twig

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,19 @@ type Headers = {
1111

1212
type RealtimeResponse = {
1313
type: "error"|"event"|"connected"|"response";
14-
data: RealtimeResponseAuthenticated|RealtimeResponseConnected|RealtimeResponseError|RealtimeResponseEvent;
14+
data: RealtimeResponseAuthenticated|RealtimeResponseConnected|RealtimeResponseError|RealtimeResponseEvent<unknown>;
1515
}
1616

1717
type RealtimeRequest = {
1818
type: "authentication";
1919
data: RealtimeRequestAuthenticate;
2020
}
2121

22-
type RealtimeResponseEvent = {
22+
type RealtimeResponseEvent<T extends unknown> = {
2323
event: string;
2424
channels: string[];
2525
timestamp: number;
26-
payload: unknown;
26+
payload: T;
2727
}
2828

2929
type RealtimeResponseError = {
@@ -55,7 +55,7 @@ type Realtime = {
5555
},
5656
createSocket: () => void;
5757
authenticate: (event: MessageEvent) => void;
58-
onMessage: (channel: string, callback: (response: RealtimeResponseEvent) => void) => (event: MessageEvent) => void;
58+
onMessage: <T extends unknown>(channel: string, callback: (response: RealtimeResponseEvent<T>) => void) => (event: MessageEvent) => void;
5959
}
6060

6161
class {{spec.title | caseUcfirst}}Exception extends Error {
@@ -185,13 +185,13 @@ class {{ spec.title | caseUcfirst }} {
185185
}
186186
}
187187
},
188-
onMessage: (channel, callback) =>
188+
onMessage: <T extends unknown>(channel: string, callback: (response: RealtimeResponseEvent<T>) => void) =>
189189
(event) => {
190190
try {
191191
const message: RealtimeResponse = JSON.parse(event.data);
192192
this.realtime.lastMessage = message;
193193
if (message.type === 'event') {
194-
let data = <RealtimeResponseEvent>message.data;
194+
let data = <RealtimeResponseEvent<T>>message.data;
195195
if (data.channels && data.channels.includes(channel)) {
196196
callback(data);
197197
}
@@ -229,7 +229,7 @@ class {{ spec.title | caseUcfirst }} {
229229
* @param {(payload: RealtimeMessage) => void} callback Is called on every realtime update.
230230
* @returns {() => void} Unsubscribes from events.
231231
*/
232-
subscribe(channels: string | string[], callback: (payload: RealtimeResponseEvent) => void): () => void {
232+
subscribe<T extends unknown>(channels: string | string[], callback: (payload: RealtimeResponseEvent<T>) => void): () => void {
233233
let channelArray = typeof channels === 'string' ? [channels] : channels;
234234
let savedChannels: {
235235
name: string;
@@ -241,7 +241,7 @@ class {{ spec.title | caseUcfirst }} {
241241
}
242242
savedChannels[index] = {
243243
name: channel,
244-
index: (this.realtime.channels[channel].push(this.realtime.onMessage(channel, callback)) - 1)
244+
index: (this.realtime.channels[channel].push(this.realtime.onMessage<T>(channel, callback)) - 1)
245245
};
246246
clearTimeout(this.realtime.timeout);
247247
this.realtime.timeout = window?.setTimeout(() => {

0 commit comments

Comments
 (0)