next
Version:
The React Framework
27 lines (26 loc) • 1.05 kB
JavaScript
/**
* Recursively freezes an object and all of its properties. This prevents the
* object from being modified at runtime. When the JS runtime is running in
* strict mode, any attempts to modify a frozen object will throw an error.
*
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze
* @param obj The object to freeze.
*/ export function deepFreeze(obj) {
// If the object is already frozen, there's no need to freeze it again.
if (Object.isFrozen(obj)) return obj;
// An array is an object, but we also want to freeze each element in the array
// as well.
if (Array.isArray(obj)) {
for (const item of obj){
if (!item || typeof item !== 'object') continue;
deepFreeze(item);
}
return Object.freeze(obj);
}
for (const value of Object.values(obj)){
if (!value || typeof value !== 'object') continue;
deepFreeze(value);
}
return Object.freeze(obj);
}
//# sourceMappingURL=deep-freeze.js.map