Repository URL to install this package:
|
Version:
1.2.9 ▾
|
"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;