UNPKG

react-native-mosquito-transport

Version:

React native javascript sdk for mosquito-transport (https://github.com/brainbehindx/mosquito-transport)

58 lines (50 loc) 1.86 kB
import { deserialize, serialize } from "../../vendor/bson"; import { Buffer } from "buffer"; import { basicClone } from "../../helpers/basic_clone"; export const deserializeBSON = (data, cast) => { if (typeof data === 'string') data = Buffer.from(data, 'base64'); return deserialize(data, { bsonRegExp: !cast, promoteLongs: !!cast, promoteValues: !!cast, promoteBuffers: !!cast }); }; export const serializeToBase64 = doc => Buffer.from(serialize(doc)).toString('base64'); export const DatastoreParser = { encode: (obj) => { obj = basicClone(obj); const { command, config } = obj; const serializeQuery = (e) => ['find', 'findOne'].forEach(n => { if (e?.[n]) e[n] = serializeToBase64({ _: e[n] }); }); if (command) serializeQuery(command); if (config) { if (config.extraction) (Array.isArray(config.extraction) ? config.extraction : [config.extraction]).forEach(e => { serializeQuery(e); }); } if (obj.data) obj.data = serializeToBase64({ _: obj.data }); return obj; }, decode: (obj, cast = true) => { obj = basicClone(obj); const { command, config } = obj; const serializeQuery = (e) => ['find', 'findOne'].forEach(n => { if (e?.[n]) e[n] = deserializeBSON(e[n], cast)._; }); if (command) serializeQuery(command); if (config) { if (config.extraction) (Array.isArray(config.extraction) ? config.extraction : [config.extraction]).forEach(e => { serializeQuery(e); }); } if (obj.data) obj.data = deserializeBSON(obj.data, cast)._; return obj; } };