@zohodesk/docs-builder
Version:
docs-builder is used to build your own docs
72 lines (61 loc) • 2.1 kB
JavaScript
import PropTypes from 'prop-types';
PropTypes.array.hookType = 'array';
PropTypes.bool.hookType = 'bool';
PropTypes.func.hookType = 'func';
PropTypes.number.hookType = 'number';
PropTypes.object.hookType = 'object';
PropTypes.string.hookType = 'string';
PropTypes.symbol.hookType = 'symbol';
PropTypes.element.hookType = 'element';
PropTypes.any.hookType = 'any';
PropTypes.elementType.hookType = 'elementType';
PropTypes.node.hookType = 'node';
PropTypes.array.isRequired.hookType = 'array';
PropTypes.bool.isRequired.hookType = 'bool';
PropTypes.func.isRequired.hookType = 'func';
PropTypes.number.isRequired.hookType = 'number';
PropTypes.object.isRequired.hookType = 'object';
PropTypes.string.isRequired.hookType = 'string';
PropTypes.symbol.isRequired.hookType = 'symbol';
PropTypes.element.isRequired.hookType = 'element';
PropTypes.elementType.isRequired.hookType = 'elementType';
PropTypes.node.isRequired.hookType = 'node';
PropTypes.any.isRequired.hookType = 'any';
function proxy(fn, type) {
let oneOf = fn;
return (...args) => {
let a = oneOf(...args);
let type1 =
Array.isArray(args) && Array.isArray(args[0])
? `${type
}[${
args[0].map(data => typeof data === 'function'
? data.hookType //arrayOf shape complex type not mention
: JSON.stringify(data))
}]`
: type;
a.hookType = type1;
if (a.isRequired) {
a.isRequired.hookType = type1;
}
return a;
};
}
function newProxy(fn, type) {
return (...args) => {
let a = fn(...args);
a.hookType = type;
if (a.isRequired) {
a.isRequired.hookType = type;
}
return a;
};
}
PropTypes.oneOf = proxy(PropTypes.oneOf, 'enum');
PropTypes.oneOfType = proxy(PropTypes.oneOfType, 'union');
PropTypes.arrayOf = proxy(PropTypes.arrayOf, 'arrayOf');
PropTypes.shape = proxy(PropTypes.shape, 'shape');
PropTypes.exact = proxy(PropTypes.exact, 'exact');
PropTypes.objectOf = proxy(PropTypes.objectOf, 'objectOf');
PropTypes.instanceOf = newProxy(PropTypes.instanceOf, 'instanceOf');
// export default PropTypes;