export default function getPropType()

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;
}