coerceVariableValues method
Map<String, dynamic>
coerceVariableValues(
- GraphQLSchema schema,
- OperationDefinitionContext operation,
- Map<String, dynamic> variableValues
)
Implementation
Map<String, dynamic> coerceVariableValues(
GraphQLSchema schema,
OperationDefinitionContext operation,
Map<String, dynamic> variableValues) {
var coercedValues = <String, dynamic>{};
var variableDefinitions =
operation.variableDefinitions?.variableDefinitions ?? [];
for (var variableDefinition in variableDefinitions) {
var variableName = variableDefinition.variable.name;
var variableType = variableDefinition.type;
var defaultValue = variableDefinition.defaultValue;
//if (variableName == null) {
// continue;
//}
var value = variableValues[variableName];
dynamic toSet;
final jp = getDirectiveValue(
'jsonpath', 'path', variableDefinition, variableValues);
if (value == null) {
if (defaultValue != null) {
toSet = defaultValue.value.computeValue(variableValues);
} else if (!variableType.isNullable && jp == null) {
throw GraphQLException.fromSourceSpan(
'Missing required variable "$variableName".',
variableDefinition.span);
}
} else {
var type = convertType(variableType);
var validation = type.validate(variableName, value);
if (!validation.successful) {
throw GraphQLException(validation.errors
.map((e) => GraphQLExceptionError(e, locations: [
GraphExceptionErrorLocation.fromSourceLocation(
variableDefinition.span.start)
]))
.toList());
} else {
toSet = type.deserialize(value);
}
}
if (jp != null) {
toSet = JsonPathArgument(jp, variableDefinition, toSet, coercedValues);
}
coercedValues[variableName] = toSet;
}
return coercedValues;
}