Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@skava/modules / ___dist / view-container / deps / isReactProps.js
Size: Mime:
"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.isReactProps = isReactProps;
exports.isFrozenNotExtensibleObj = isFrozenNotExtensibleObj;
exports.hasReadOnlyRef = hasReadOnlyRef;
exports.default = void 0;

var _exotic = require("../../exotic");

/**
 * @param {Object | *} obj
 * @return {Boolean} ensure object is frozen not extensable
 */
function isFrozenNotExtensibleObj(obj) {
  // ensure obj
  if ((0, _exotic.isObj)(obj)) {
    return true;
  } else if (Object.isFrozen(obj) === false || Object.isExtensible(obj) === true) {
    return true;
  } else {
    return false;
  }
}
/**
 * @description every react props has a @readonly `ref`
 *
 * @example
 *  {
 *    get ref
 *    ref
 *  }
 *
 * @param {Object} props
 * @return {Boolean}
 */


function hasReadOnlyRef(props) {
  // unique refs
  if ((0, _exotic.hasOwnProp)(props, 'ref') === false) {
    return false;
  }

  const ref = Object.getOwnPropertyDescriptor(props, 'ref'); // safety, can return undefined

  if ((0, _exotic.isObj)(ref)) {
    return false;
  }

  if ((0, _exotic.isUndefined)(ref.set) && (0, _exotic.isFunction)(ref.get)) {
    return true;
  }

  return false;
}
/**
 * @see isFrozenNotExtensibleObj
 * @see hasReadOnlyRef
 *
 * @param {React.Props | Object} props
 * @return {Boolean}
 */


function isReactProps(props) {
  return isFrozenNotExtensibleObj(props) && hasReadOnlyRef(props);
}

var _default = hasReadOnlyRef;
exports.default = _default;