code: def get_field_def(schema, parent_type, field_ast):
      """Not exactly the same as the executor's definition of get_field_def, in this
      statically evaluated environment we do not always have an Object type,
      and need to handle Interface and Union types."""
      name = field_ast.name.value
      if name == "__schema" and schema.get_query_type() == parent_type:
          return SchemaMetaFieldDef
  
      elif name == "__type" and schema.get_query_type() == parent_type:
          return TypeMetaFieldDef
  
      elif name == "__typename" and isinstance(
          parent_type,
          (
              GraphQLObjectType,
              GraphQLInterfaceType,
              GraphQLUnionType,
          ),
      ):
          return TypeNameMetaFieldDef
  
      elif isinstance(
          parent_type, (GraphQLObjectType, GraphQLInterfaceType)
      ):
          return parent_type.fields.get(name)
  
label_desc: Use image node_id 1 for calling a global function with example usage: get_field_def(schema, parent_type, field_ast) and returns: SchemaMetaFieldDef, TypeMetaFieldDef, TypeNameMetaFieldDef, parent_type