getDirectiveValue method

dynamic getDirectiveValue(
  1. String name,
  2. String argumentName,
  3. Directives holder,
  4. Map<String?, dynamic> variableValues,
)

Implementation

dynamic getDirectiveValue(String name, String argumentName, Directives holder,
    Map<String?, dynamic> variableValues) {
  var directive = holder.directives.firstWhereOrNull((d) {
    var vv = d.value;

    if (vv is VariableContext) {
      return vv.name == name;
    } else if (vv == null) {
      return d.nameToken?.text == name;
    } else {
      return vv.computeValue(variableValues as Map<String, dynamic>) == name;
    }
  });

  if (directive == null) return null;
  if (directive.argument?.name != argumentName) return null;

  var vv = directive.argument!.value;
  if (vv is VariableContext) {
    var vname = vv.name;
    if (!variableValues.containsKey(vname)) {
      throw GraphQLException.fromSourceSpan(
          'Unknown variable: "$vname"', vv.span);
    }
    return variableValues[vname];
  }
  return vv.computeValue(variableValues as Map<String, dynamic>);
}