UNPKG

@socketsupply/socket

Version:

A Cross-Platform, Native Runtime for Desktop and Mobile Apps — Create apps using HTML, CSS, and JavaScript. Written from the ground up to be small and maintainable.

49 lines (40 loc) 1.1 kB
import Buffer from '../buffer.js' export default function serialize (value) { if (!value || typeof value !== 'object') { return value } return map(value, (value) => { if (Buffer.isBuffer(value)) return value if (typeof value[Symbol.serialize] === 'function') { return value[Symbol.serialize]() } if (typeof value.toJSON === 'function') { return value.toJSON() } return value }) } function map (object, callback, seen = new Set()) { if (seen.has(object)) { return object } if (Array.isArray(object)) { for (let i = 0; i < object.length; ++i) { object[i] = map(object[i], callback, seen) } } else if (object && typeof object === 'object') { object = callback(object) for (const key in object) { const descriptor = Object.getOwnPropertyDescriptor(object, key) if (descriptor && descriptor.writable) { object[key] = map(object[key], callback, seen) } } } seen.add(object) if (object && typeof object === 'object') { return callback(object) } else { return object } }