import ByteBuffer from 'bytebuffer'; /** * Converts any object to a valid ts protobuf object. * * This is needed because there's a very jarring difference between `protobufjs` and `protobufts`. * `protobufjs` returns all `bytes` as `ByteBuffer` where as `protobufts` returns all `bytes` as `Uint8Array`. */ export function convertToTS(object: any): any { // No idea why js `ByteBuffer` and ts `ByteBuffer` differ ... if (object instanceof Uint8Array) { return object; } else if (object && object.constructor && object.constructor.name === 'ByteBuffer') { return new Uint8Array(object.toArrayBuffer()); } else if ( object instanceof ByteBuffer || object instanceof Buffer || object instanceof ArrayBuffer || object instanceof SharedArrayBuffer ) { const arrayBuffer = ByteBuffer.wrap(object).toArrayBuffer(); return new Uint8Array(arrayBuffer); } else if (Array.isArray(object)) { return object.map(convertToTS); } else if (object && typeof object === 'object') { const keys = Object.keys(object); const values: { [key: string]: any } = {}; for (const key of keys) { values[key] = convertToTS(object[key]); } return values; } return object; }