Go async
This commit is contained in:
parent
4f91c0b6a8
commit
3bf74524e0
7 changed files with 40 additions and 11 deletions
11
angel_graphql/angel_graphql.iml
Normal file
11
angel_graphql/angel_graphql.iml
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="WEB_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
<orderEntry type="library" name="Dart SDK" level="project" />
|
||||||
|
<orderEntry type="library" name="Dart Packages" level="project" />
|
||||||
|
</component>
|
||||||
|
</module>
|
11
graphql.iml
Normal file
11
graphql.iml
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="WEB_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
<orderEntry type="library" name="Dart SDK" level="project" />
|
||||||
|
<orderEntry type="library" name="Dart Packages" level="project" />
|
||||||
|
</component>
|
||||||
|
</module>
|
1
graphql_parser/.dart_tool/pub/bin/sdk-version
Normal file
1
graphql_parser/.dart_tool/pub/bin/sdk-version
Normal file
|
@ -0,0 +1 @@
|
||||||
|
2.0.0-dev.68.0
|
BIN
graphql_parser/.dart_tool/pub/bin/test/test.dart.snapshot.dart2
Normal file
BIN
graphql_parser/.dart_tool/pub/bin/test/test.dart.snapshot.dart2
Normal file
Binary file not shown.
1
graphql_schema/.dart_tool/pub/bin/sdk-version
Normal file
1
graphql_schema/.dart_tool/pub/bin/sdk-version
Normal file
|
@ -0,0 +1 @@
|
||||||
|
2.0.0-dev.68.0
|
BIN
graphql_schema/.dart_tool/pub/bin/test/test.dart.snapshot.dart2
Normal file
BIN
graphql_schema/.dart_tool/pub/bin/test/test.dart.snapshot.dart2
Normal file
Binary file not shown.
|
@ -1,3 +1,5 @@
|
||||||
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:graphql_parser/graphql_parser.dart';
|
import 'package:graphql_parser/graphql_parser.dart';
|
||||||
import 'package:graphql_schema/graphql_schema.dart';
|
import 'package:graphql_schema/graphql_schema.dart';
|
||||||
|
|
||||||
|
@ -42,14 +44,14 @@ class GraphQL {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
executeRequest(
|
Future<GraphQLResult> executeRequest(
|
||||||
GraphQLSchema schema, DocumentContext document, String operationName,
|
GraphQLSchema schema, DocumentContext document, String operationName,
|
||||||
{Map<String, dynamic> variableValues: const {}, initialValue}) {
|
{Map<String, dynamic> variableValues: const {}, initialValue}) async {
|
||||||
var operation = getOperation(document, operationName);
|
var operation = getOperation(document, operationName);
|
||||||
var coercedVariableValues =
|
var coercedVariableValues =
|
||||||
coerceVariableValues(schema, operation, variableValues ?? {});
|
coerceVariableValues(schema, operation, variableValues ?? {});
|
||||||
if (operation.isQuery)
|
if (operation.isQuery)
|
||||||
return executeQuery(
|
return await executeQuery(
|
||||||
document, operation, schema, coercedVariableValues, initialValue);
|
document, operation, schema, coercedVariableValues, initialValue);
|
||||||
else
|
else
|
||||||
return executeMutation(
|
return executeMutation(
|
||||||
|
@ -108,24 +110,24 @@ class GraphQL {
|
||||||
return coercedValues;
|
return coercedValues;
|
||||||
}
|
}
|
||||||
|
|
||||||
GraphQLResult executeQuery(
|
Future<GraphQLResult> executeQuery(
|
||||||
DocumentContext document,
|
DocumentContext document,
|
||||||
OperationDefinitionContext query,
|
OperationDefinitionContext query,
|
||||||
GraphQLSchema schema,
|
GraphQLSchema schema,
|
||||||
Map<String, dynamic> variableValues,
|
Map<String, dynamic> variableValues,
|
||||||
initialValue) {
|
initialValue) async {
|
||||||
var queryType = schema.query;
|
var queryType = schema.query;
|
||||||
var selectionSet = query.selectionSet;
|
var selectionSet = query.selectionSet;
|
||||||
return executeSelectionSet(
|
return await executeSelectionSet(
|
||||||
document, selectionSet, queryType, initialValue, variableValues);
|
document, selectionSet, queryType, initialValue, variableValues);
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<String, dynamic> executeSelectionSet(
|
Future<Map<String, dynamic>> executeSelectionSet(
|
||||||
DocumentContext document,
|
DocumentContext document,
|
||||||
SelectionSetContext selectionSet,
|
SelectionSetContext selectionSet,
|
||||||
GraphQLObjectType objectType,
|
GraphQLObjectType objectType,
|
||||||
objectValue,
|
objectValue,
|
||||||
Map<String, dynamic> variableValues) {
|
Map<String, dynamic> variableValues) async {
|
||||||
var groupedFieldSet =
|
var groupedFieldSet =
|
||||||
collectFields(document, objectType, selectionSet, variableValues);
|
collectFields(document, objectType, selectionSet, variableValues);
|
||||||
var resultMap = <String, dynamic>{};
|
var resultMap = <String, dynamic>{};
|
||||||
|
@ -138,7 +140,7 @@ class GraphQL {
|
||||||
var fieldType =
|
var fieldType =
|
||||||
objectType.fields.firstWhere((f) => f.name == fieldName)?.type;
|
objectType.fields.firstWhere((f) => f.name == fieldName)?.type;
|
||||||
if (fieldType == null) continue;
|
if (fieldType == null) continue;
|
||||||
var responseValue = executeField(
|
var responseValue = await executeField(
|
||||||
objectType, objectValue, fields, fieldType, variableValues);
|
objectType, objectValue, fields, fieldType, variableValues);
|
||||||
resultMap[responseKey] = responseValue;
|
resultMap[responseKey] = responseValue;
|
||||||
}
|
}
|
||||||
|
@ -152,11 +154,11 @@ class GraphQL {
|
||||||
objectValue,
|
objectValue,
|
||||||
List<SelectionContext> fields,
|
List<SelectionContext> fields,
|
||||||
GraphQLType fieldType,
|
GraphQLType fieldType,
|
||||||
Map<String, dynamic> variableValues) {
|
Map<String, dynamic> variableValues) async {
|
||||||
var field = fields[0];
|
var field = fields[0];
|
||||||
var argumentValues =
|
var argumentValues =
|
||||||
coerceArgumentValues(objectType, field, variableValues);
|
coerceArgumentValues(objectType, field, variableValues);
|
||||||
var resolvedValue = resolveFieldValue(
|
var resolvedValue = await resolveFieldValue(
|
||||||
objectType, objectValue, field.field.fieldName.name, argumentValues);
|
objectType, objectValue, field.field.fieldName.name, argumentValues);
|
||||||
return completeValue(fieldType, fields, resolvedValue, variableValues);
|
return completeValue(fieldType, fields, resolvedValue, variableValues);
|
||||||
}
|
}
|
||||||
|
@ -201,6 +203,9 @@ class GraphQL {
|
||||||
return coercedValues;
|
return coercedValues;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<T> resolveFieldValue<T>(GraphQLObjectType objectType, T objectValue,
|
||||||
|
String fieldName, Map<String, dynamic> argumentValues) async {}
|
||||||
|
|
||||||
Map<String, List<SelectionContext>> collectFields(
|
Map<String, List<SelectionContext>> collectFields(
|
||||||
DocumentContext document,
|
DocumentContext document,
|
||||||
GraphQLObjectType objectType,
|
GraphQLObjectType objectType,
|
||||||
|
|
Loading…
Reference in a new issue