Make objects immutable.
This commit is contained in:
parent
bb1ea4e4d0
commit
f83737b538
@ -103,7 +103,8 @@ function parseUrl (url) {
|
||||
const {
|
||||
create: createObject,
|
||||
defineProperties,
|
||||
defineProperty
|
||||
defineProperty,
|
||||
freeze: freezeObject
|
||||
} = Object
|
||||
|
||||
const noop = () => {}
|
||||
@ -127,7 +128,7 @@ const OPAQUE_REF_RE = /^OpaqueRef:/
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
const EMPTY_ARRAY = []
|
||||
const EMPTY_ARRAY = freezeObject([])
|
||||
|
||||
// ===================================================================
|
||||
|
||||
@ -399,11 +400,15 @@ export class Xapi extends EventEmitter {
|
||||
} else if (OPAQUE_REF_RE.test(value)) {
|
||||
// This is an array of refs.
|
||||
defineProperty(object, '$' + key, {
|
||||
get: () => map(value, (ref) => objectsByRefs[ref])
|
||||
get: () => freezeObject(map(value, (ref) => objectsByRefs[ref]))
|
||||
})
|
||||
|
||||
freezeObject(value)
|
||||
}
|
||||
} else if (isObject(value)) {
|
||||
forEach(value, resolveObject)
|
||||
|
||||
freezeObject(value)
|
||||
} else if (OPAQUE_REF_RE.test(value)) {
|
||||
defineProperty(object, '$' + key, {
|
||||
get: () => objectsByRefs[value]
|
||||
@ -419,6 +424,9 @@ export class Xapi extends EventEmitter {
|
||||
$type: { value: type }
|
||||
})
|
||||
|
||||
// Finally freezes the object.
|
||||
freezeObject(object)
|
||||
|
||||
this._objects.set(object)
|
||||
objectsByRefs[ref] = object
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user