code: function frozenWrapper(propType) {
    const checkFrozen = (obj, propName, componentName) => {
      if (!Object.isFrozen(obj)) {
        throw new Error(
          `the property "${propName}" provided to component ` +
          `"${componentName}" is not frozen`
        );
      }
      forEachKeyValue(obj, (name, prop) => {
        const type = typeof obj;
        if (prop !== null && (type === 'object' || type === 'function')) {
          checkFrozen(prop, `${propName}.${name}`, componentName);
        }
      });
    };
  
    const frozen = (props, propName, componentName, ...rest) => {
      const propValue = props[propName];
      if (!propValue) {
        return null;
      }
      try {
        checkFrozen(propValue, propName, componentName);
      } catch (err) {
        return err;
      }
      return propType(props, propName, componentName, ...rest);
    };
    frozen[SHAPE] = propType[SHAPE];
    return frozen;
  }
docs: Return a frozen wrapper for the given propType validator.
  The resulting validator checks that the provided property is deeply frozen.
  
  @param {Function} propType A shape validator.
  @return {Function} The frozen validator.