UNPKG

@supabase/realtime-js

Version:

Listen to realtime updates to your PostgreSQL database

50 lines (41 loc) 1.45 kB
// This file draws heavily from https://github.com/phoenixframework/phoenix/commit/cf098e9cf7a44ee6479d31d911a97d3c7430c6fe // License: https://github.com/phoenixframework/phoenix/blob/master/LICENSE.md export default class Serializer { HEADER_LENGTH = 1 decode(rawPayload: ArrayBuffer | string, callback: Function) { if (rawPayload.constructor === ArrayBuffer) { return callback(this._binaryDecode(rawPayload)) } if (typeof rawPayload === 'string') { return callback(JSON.parse(rawPayload)) } return callback({}) } private _binaryDecode(buffer: ArrayBuffer) { const view = new DataView(buffer) const decoder = new TextDecoder() return this._decodeBroadcast(buffer, view, decoder) } private _decodeBroadcast( buffer: ArrayBuffer, view: DataView, decoder: TextDecoder ): { ref: null topic: string event: string payload: { [key: string]: any } } { const topicSize = view.getUint8(1) const eventSize = view.getUint8(2) let offset = this.HEADER_LENGTH + 2 const topic = decoder.decode(buffer.slice(offset, offset + topicSize)) offset = offset + topicSize const event = decoder.decode(buffer.slice(offset, offset + eventSize)) offset = offset + eventSize const data = JSON.parse( decoder.decode(buffer.slice(offset, buffer.byteLength)) ) return { ref: null, topic: topic, event: event, payload: data } } }