Allow deprecating fields
This commit is contained in:
parent
01ad2d26bf
commit
9b9b8018d7
2 changed files with 37 additions and 2 deletions
|
@ -8,14 +8,18 @@ class GraphQLField<Value, Serialized> {
|
||||||
final String name;
|
final String name;
|
||||||
final GraphQLFieldResolver<Value, Serialized> resolve;
|
final GraphQLFieldResolver<Value, Serialized> resolve;
|
||||||
final GraphQLType<Value, Serialized> type;
|
final GraphQLType<Value, Serialized> type;
|
||||||
|
final String deprecationReason;
|
||||||
|
|
||||||
GraphQLField(this.name,
|
GraphQLField(this.name,
|
||||||
{Iterable<GraphQLFieldArgument> arguments: const <GraphQLFieldArgument>[],
|
{Iterable<GraphQLFieldArgument> arguments: const <GraphQLFieldArgument>[],
|
||||||
@required this.resolve,
|
@required this.resolve,
|
||||||
this.type}) {
|
this.type,
|
||||||
|
this.deprecationReason}) {
|
||||||
this.arguments.addAll(arguments ?? <GraphQLFieldArgument>[]);
|
this.arguments.addAll(arguments ?? <GraphQLFieldArgument>[]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool get isDeprecated => deprecationReason?.isNotEmpty == true;
|
||||||
|
|
||||||
FutureOr<Serialized> serialize(Value value) {
|
FutureOr<Serialized> serialize(Value value) {
|
||||||
return type.serialize(value);
|
return type.serialize(value);
|
||||||
}
|
}
|
||||||
|
|
|
@ -161,16 +161,47 @@ GraphQLObjectType _createFieldType() {
|
||||||
type: graphQLString,
|
type: graphQLString,
|
||||||
resolve: (f, _) => (f as GraphQLField).name,
|
resolve: (f, _) => (f as GraphQLField).name,
|
||||||
),
|
),
|
||||||
|
field(
|
||||||
|
'isDeprecated',
|
||||||
|
type: graphQLString,
|
||||||
|
resolve: (f, _) => (f as GraphQLField).isDeprecated,
|
||||||
|
),
|
||||||
|
field(
|
||||||
|
'deprecationReason',
|
||||||
|
type: graphQLString,
|
||||||
|
resolve: (f, _) => (f as GraphQLField).deprecationReason,
|
||||||
|
),
|
||||||
|
field(
|
||||||
|
'args',
|
||||||
|
type: listType(graphQLString.nonNullable()).nonNullable(), // TODO: Input value type
|
||||||
|
resolve: (f, _) => (f as GraphQLField).arguments,
|
||||||
|
),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
GraphQLObjectType _reflectDirectiveType() {
|
GraphQLObjectType _reflectDirectiveType() {
|
||||||
|
// TODO: What actually is this???
|
||||||
return objectType('__Directive', fields: [
|
return objectType('__Directive', fields: [
|
||||||
field(
|
field(
|
||||||
'name',
|
'name',
|
||||||
type: graphQLString,
|
type: graphQLString.nonNullable(),
|
||||||
resolve: (obj, _) => (obj as DirectiveContext).NAME.span.text,
|
resolve: (obj, _) => (obj as DirectiveContext).NAME.span.text,
|
||||||
),
|
),
|
||||||
|
field(
|
||||||
|
'description',
|
||||||
|
type: graphQLString,
|
||||||
|
resolve: (obj, _) => null,
|
||||||
|
),
|
||||||
|
field(
|
||||||
|
'locations',
|
||||||
|
type: listType(graphQLString.nonNullable()).nonNullable(), // TODO: Enum directiveLocation
|
||||||
|
resolve: (obj, _) => [],
|
||||||
|
),
|
||||||
|
field(
|
||||||
|
'args',
|
||||||
|
type: listType(graphQLString.nonNullable()).nonNullable(),
|
||||||
|
resolve: (obj, _) => [],
|
||||||
|
),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue