shadow-function
Version:
ioing lib - shadow Function, worker Function
43 lines (31 loc) • 956 B
text/typescript
import { getObjectType } from '../objectType/index'
function freeze (object: object, deep = false, exclude = {}) {
if (!object) return
exclude = getObjectType(exclude) === 'Object' ? exclude : {}
if (deep) {
let propNames = Object.getOwnPropertyNames(object)
// Freeze properties before freezing self
for (let name of propNames) {
let value = object[name]
let ignore = exclude[name]
if (!value) break
if (isFrozen(value)) break
if (ignore) break
freeze(value.prototype, true, exclude)
freeze(value.__proto__, true, exclude)
let descriptor = Object.getOwnPropertyDescriptor(object, name) || {}
if (!descriptor.writable) break
object[name] = value && typeof value === 'object' ?
freeze(value, true) : value
}
}
return Object.freeze(object)
}
function isFrozen (obj: object) {
return Object.isFrozen(obj)
}
export {
freeze,
isFrozen
}