memor/src/handlers.js

35 lines
880 B
JavaScript

import { compareSymbols } from './compareSymbols.js'
export let handlers = new Map()
let OBJECT_START = {}
let OBJECT_END = {}
let REGEXP = {}
let DATE = {}
let BUFFER = {}
export let defaultHandler = (obj, push, recurse) => {
push(OBJECT_START, Object.getPrototypeOf(obj))
for (let property of Object.getOwnPropertyNames(obj)
.sort()
.concat(Object.getOwnPropertySymbols(obj).sort(compareSymbols))) {
push(property)
recurse(obj[property])
}
push(OBJECT_END)
}
handlers.set(Array.prototype, defaultHandler)
handlers.set(Object.prototype, defaultHandler)
handlers.set(null, defaultHandler)
handlers.set(RegExp.prototype, (obj, push) => push(REGEXP, obj.toString()))
handlers.set(Date.prototype, (obj, push) => push(DATE, obj.getTime()))
if (typeof Buffer === 'function') {
handlers.set(Buffer.prototype, (obj, push) => push(BUFFER, obj.toString('binary')))
}