|
|
|
@ -1,30 +1,10 @@
|
|
|
|
|
import { compareSymbols } from './compareSymbols.js'
|
|
|
|
|
|
|
|
|
|
export let handlers = new Map()
|
|
|
|
|
export let withDefaultHandler = new Set([Array.prototype, Object.prototype, null])
|
|
|
|
|
|
|
|
|
|
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()))
|
|
|
|
|