export default function isReactBuiltinCall()

in src/utils/isReactBuiltinCall.ts [14:56]


export default function isReactBuiltinCall(
  path: NodePath,
  name: string,
  importer: Importer,
): boolean {
  if (t.ExpressionStatement.check(path.node)) {
    path = path.get('expression');
  }

  if (match(path.node, { callee: { property: { name } } })) {
    const module = resolveToModule(path.get('callee', 'object'), importer);
    return Boolean(module && isReactModuleName(module));
  }

  if (t.CallExpression.check(path.node)) {
    const value = resolveToValue(path.get('callee'), importer);
    if (value === path.get('callee')) return false;

    // Check if this is a destructuring assignment
    // const { x } = require('react')
    if (isDestructuringAssignment(value, name)) {
      const module = resolveToModule(value, importer);
      return Boolean(module && isReactModuleName(module));
    } else if (
      // `require('react').createElement`
      (t.MemberExpression.check(value.node) &&
        t.Identifier.check(value.get('property').node) &&
        value.get('property').node.name === name) ||
      // `import { createElement } from 'react'`
      (t.ImportDeclaration.check(value.node) &&
        value.node.specifiers &&
        value.node.specifiers.some(
          // @ts-ignore
          specifier => specifier.imported && specifier.imported.name === name,
        ))
    ) {
      const module = resolveToModule(value, importer);
      return Boolean(module && isReactModuleName(module));
    }
  }

  return false;
}