UNPKG

@devgrid/messagepack

Version:
98 lines 3.34 kB
import Long from 'long'; import Serializer from './serializer'; import { createError, getStdErrorId } from './errors'; export const registerCommonTypesFor = (s) => { s.register(126, Error, (obj, buf) => { buf.writeUInt16BE(getStdErrorId(obj)); s.encode(obj.name, buf); s.encode(obj.stack, buf); s.encode(obj.message, buf); const customFields = Object.keys(obj).filter((key) => !['stack', 'message', 'name'].includes(key) && obj[key] !== undefined); buf.writeUInt16BE(customFields.length); for (const key of customFields) { s.encode(key, buf); s.encode(obj[key], buf); } }, (buf) => { const id = buf.readUInt16BE(); const name = s.decode(buf); const stack = s.decode(buf); const message = s.decode(buf); const error = createError(id, message, stack); error.name = name; const customFieldsCount = buf.readUInt16BE(); for (let i = 0; i < customFieldsCount; i++) { const key = s.decode(buf); const value = s.decode(buf); error[key] = value; } return error; }); s.register(125, Date, (obj, buf) => { buf.writeUInt64BE(obj.getTime()); }, (buf) => new Date(buf.readUInt64BE().toNumber())); s.register(124, Map, (obj, buf) => { buf.writeUInt32BE(obj.size); for (const [key, val] of obj.entries()) { s.encode(key, buf); s.encode(val, buf); } }, (buf) => { const map = new Map(); const size = buf.readUInt32BE(); for (let i = 0; i < size; i++) { const key = s.decode(buf); const val = s.decode(buf); map.set(key, val); } return map; }); s.register(123, Set, (obj, buf) => { buf.writeUInt32BE(obj.size); for (const val of obj.values()) { s.encode(val, buf); } }, (buf) => { const set = new Set(); const size = buf.readUInt32BE(); for (let i = 0; i < size; i++) { const val = s.decode(buf); set.add(val); } return set; }); s.register(121, RegExp, (obj, buf) => { s.encode(obj.source, buf); s.encode(obj.flags, buf); }, (buf) => { const source = s.decode(buf); const flags = s.decode(buf); return new RegExp(source, flags); }); s.register(120, BigInt, (obj, buf) => { const str = obj.toString(); s.encode(str, buf); }, (buf) => { const str = s.decode(buf); return BigInt(str); }); s.register(119, Long, (obj, buf) => { buf.writeInt8(obj.unsigned ? 1 : 0); if (obj.unsigned) { buf.writeUInt64BE(obj); } else { buf.writeInt64BE(obj); } }, (buf) => { const unsigned = Boolean(buf.readInt8()); return unsigned ? buf.readUInt64BE() : buf.readInt64BE(); }); }; export { Serializer }; export const serializer = new Serializer(); registerCommonTypesFor(serializer); export const encode = (obj) => serializer.encode(obj).toBuffer(); export const decode = (buf) => serializer.decode(buf); export const tryDecode = (buf) => serializer.decoder.tryDecode(buf); //# sourceMappingURL=index.js.map