function deepFreezeValue()

in packages/shared/util/Recoil_deepFreezeValue.js [74:91]


function deepFreezeValue(value: mixed) {
  if (typeof value !== 'object' || shouldNotBeFrozen(value)) {
    return;
  }

  Object.freeze(value); // Make all properties read-only
  for (const key in value) {
    // $FlowFixMe[method-unbinding] added when improving typing for this parameters
    if (Object.prototype.hasOwnProperty.call(value, key)) {
      const prop = value[key];
      // Prevent infinite recurssion for circular references.
      if (typeof prop === 'object' && prop != null && !Object.isFrozen(prop)) {
        deepFreezeValue(prop);
      }
    }
  }
  Object.seal(value); // This also makes existing properties non-configurable.
}