Skip to content

Commit 42426b5

Browse files
kakeluhmandarini
authored andcommitted
feat(realtime): enhance RealtimeChannel type
1 parent 2d0bd77 commit 42426b5

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

packages/core/realtime-js/src/RealtimeChannel.ts

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,41 @@ export type RealtimeChannelOptions = {
3535
}
3636
}
3737

38+
type RealtimeChangesPayloadBase = {
39+
schema: string
40+
table: string
41+
}
42+
43+
type RealtimeBroadcastChangesPayloadBase = RealtimeChangesPayloadBase & {
44+
id: string
45+
}
46+
47+
export type RealtimeBroadcastInsertPayload<T extends { [key: string]: any }> =
48+
RealtimeBroadcastChangesPayloadBase & {
49+
operation: `${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.INSERT}`
50+
record: T
51+
old_record: null
52+
}
53+
54+
export type RealtimeBroadcastUpdatePayload<T extends { [key: string]: any }> =
55+
RealtimeBroadcastChangesPayloadBase & {
56+
operation: `${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.UPDATE}`
57+
record: T
58+
old_record: T
59+
}
60+
61+
export type RealtimeBroadcastDeletePayload<T extends { [key: string]: any }> =
62+
RealtimeBroadcastChangesPayloadBase & {
63+
operation: `${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE}`
64+
record: null
65+
old_record: T
66+
}
67+
68+
export type RealtimeBroadcastPayload<T extends { [key: string]: any }> =
69+
| RealtimeBroadcastInsertPayload<T>
70+
| RealtimeBroadcastUpdatePayload<T>
71+
| RealtimeBroadcastDeletePayload<T>
72+
3873
type RealtimePostgresChangesPayloadBase = {
3974
schema: string
4075
table: string
@@ -416,6 +451,42 @@ export default class RealtimeChannel {
416451
payload: T
417452
}) => void
418453
): RealtimeChannel
454+
on<T extends Record<string, unknown>>(
455+
type: `${REALTIME_LISTEN_TYPES.BROADCAST}`,
456+
filter: { event: REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.ALL },
457+
callback: (payload: {
458+
type: `${REALTIME_LISTEN_TYPES.BROADCAST}`
459+
event: REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.ALL
460+
payload: RealtimeBroadcastPayload<T>
461+
}) => void
462+
): RealtimeChannel
463+
on<T extends { [key: string]: any }>(
464+
type: `${REALTIME_LISTEN_TYPES.BROADCAST}`,
465+
filter: { event: REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.INSERT },
466+
callback: (payload: {
467+
type: `${REALTIME_LISTEN_TYPES.BROADCAST}`
468+
event: REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.INSERT
469+
payload: RealtimeBroadcastInsertPayload<T>
470+
}) => void
471+
): RealtimeChannel
472+
on<T extends { [key: string]: any }>(
473+
type: `${REALTIME_LISTEN_TYPES.BROADCAST}`,
474+
filter: { event: REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.UPDATE },
475+
callback: (payload: {
476+
type: `${REALTIME_LISTEN_TYPES.BROADCAST}`
477+
event: REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.UPDATE
478+
payload: RealtimeBroadcastUpdatePayload<T>
479+
}) => void
480+
): RealtimeChannel
481+
on<T extends { [key: string]: any }>(
482+
type: `${REALTIME_LISTEN_TYPES.BROADCAST}`,
483+
filter: { event: REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE },
484+
callback: (payload: {
485+
type: `${REALTIME_LISTEN_TYPES.BROADCAST}`
486+
event: REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE
487+
payload: RealtimeBroadcastDeletePayload<T>
488+
}) => void
489+
): RealtimeChannel
419490
on<T extends { [key: string]: any }>(
420491
type: `${REALTIME_LISTEN_TYPES.SYSTEM}`,
421492
filter: {},

0 commit comments

Comments
 (0)