in src/utils/getPropType.ts [228:273]
export default function getPropType(
path: NodePath,
importer: Importer,
): PropTypeDescriptor {
let descriptor: PropTypeDescriptor | null = null;
getMembers(path, true).some(member => {
const node = member.path.node;
let name: string | null = null;
if (t.Literal.check(node)) {
name = node.value as string;
} else if (t.Identifier.check(node) && !member.computed) {
name = node.name;
}
if (name) {
if (simplePropTypes.includes(name as typeof simplePropTypes[number])) {
descriptor = { name: name as typeof simplePropTypes[number] };
return true;
} else if (propTypes.has(name) && member.argumentsPath) {
// @ts-ignore
descriptor = propTypes.get(name)(member.argumentsPath.get(0), importer);
return true;
}
}
return;
});
if (!descriptor) {
const node = path.node;
if (
t.Identifier.check(node) &&
simplePropTypes.includes(node.name as typeof simplePropTypes[number])
) {
descriptor = { name: node.name as typeof simplePropTypes[number] };
} else if (
t.CallExpression.check(node) &&
t.Identifier.check(node.callee) &&
propTypes.has(node.callee.name)
) {
// @ts-ignore
descriptor = propTypes.get(node.callee.name)(path.get('arguments', 0));
} else {
descriptor = { name: 'custom', raw: printValue(path) };
}
}
return descriptor;
}