Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions packages/graphql_codegen/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# 1.2.3

- Support `setOperationName`.

# 1.2.2

- Support `allowMissingNullableKeysInFromJson`.
Expand Down
1 change: 1 addition & 0 deletions packages/graphql_codegen/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -298,6 +298,7 @@ targets:
| `extraKeywords` | [] | A way to specify fields that are also keywords | [Extra keywords](#extra-keywords) |
| `disableCopyWithGeneration` | `false` | Allow you to disable generation of copy-with classes and methods | |
| `allowMissingNullableKeysInFromJson` | `false` | Support passing objects with missing entries for nullable fields. | |
| `setOperationName` | `false` | Set the operation name. fields. | |

---

Expand Down
2 changes: 2 additions & 0 deletions packages/graphql_codegen/lib/src/config/config.dart
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ class GraphQLCodegenConfig {
final bool disableContextReplacement;
final bool disableCopyWithGeneration;
final bool allowMissingNullableKeysInFromJson;
final bool setOperationName;

@JsonKey(name: 'EXPERIMENTAL_enable_input_builders')
final bool enableInputBuilders;
Expand All @@ -88,6 +89,7 @@ class GraphQLCodegenConfig {
this.disableCopyWithGeneration = false,
this.enableInputBuilders = false,
this.allowMissingNullableKeysInFromJson = false,
this.setOperationName = false,
});

@override
Expand Down
2 changes: 2 additions & 0 deletions packages/graphql_codegen/lib/src/config/config.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

18 changes: 14 additions & 4 deletions packages/graphql_codegen/lib/src/printer/clients/graphql.dart
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ Spec printQueryOptions(PrintContext<ContextOperation> c) {
'variables': refer('variables')
.nullSafeProperty('toJson')
.call([]).ifNullThen(literalMap({})),
'operationName': refer('operationName'),
'operationName': _printOperationName(c),
'fetchPolicy': refer('fetchPolicy'),
'errorPolicy': refer('errorPolicy'),
'cacheRereadPolicy': refer('cacheRereadPolicy'),
Expand All @@ -199,6 +199,16 @@ Spec printQueryOptions(PrintContext<ContextOperation> c) {
);
}

Expression _printOperationName(PrintContext<ContextOperation> c) {
final operationName = c.context.operation?.name?.value;
if (!c.context.config.setOperationName || operationName == null) {
return refer('operationName');
}
return refer('operationName').ifNullThen(
literalString(operationName),
);
}

Spec printSubscriptionOptions(PrintContext<ContextOperation> c) {
final context = c.context;
return Class(
Expand Down Expand Up @@ -257,7 +267,7 @@ Spec printSubscriptionOptions(PrintContext<ContextOperation> c) {
'variables': refer('variables')
.nullSafeProperty('toJson')
.call([]).ifNullThen(literalMap({})),
'operationName': refer('operationName'),
'operationName': _printOperationName(c),
'fetchPolicy': refer('fetchPolicy'),
'errorPolicy': refer('errorPolicy'),
'cacheRereadPolicy': refer('cacheRereadPolicy'),
Expand Down Expand Up @@ -544,7 +554,7 @@ Spec printMutationOptions(
'variables': refer('variables')
.nullSafeProperty('toJson')
.call([]).ifNullThen(literalMap({})),
'operationName': refer('operationName'),
'operationName': _printOperationName(c),
'fetchPolicy': refer('fetchPolicy'),
'errorPolicy': refer('errorPolicy'),
'cacheRereadPolicy': refer('cacheRereadPolicy'),
Expand Down Expand Up @@ -648,7 +658,7 @@ Spec printWatchOptions(
'variables': refer('variables')
.nullSafeProperty('toJson')
.call([]).ifNullThen(literalMap({})),
'operationName': refer('operationName'),
'operationName': _printOperationName(c),
'fetchPolicy': refer('fetchPolicy'),
'errorPolicy': refer('errorPolicy'),
'cacheRereadPolicy': refer('cacheRereadPolicy'),
Expand Down
2 changes: 1 addition & 1 deletion packages/graphql_codegen/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ description: |
Simple, opinionated, codegen library for GraphQL. It allows you to
generate serializers and client helpers to easily call and parse your data.

version: 1.2.2
version: 1.2.3
homepage: https://github.com/heftapp/graphql_codegen/tree/main/packages/graphql_codegen
repository: https://github.com/heftapp/graphql_codegen/tree/main/packages/graphql_codegen

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
mutation M {
bar
}
232 changes: 232 additions & 0 deletions packages/graphql_codegen/test/assets/issue_191/mutation.graphql.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,232 @@
import 'dart:async';
import 'package:gql/ast.dart';
import 'package:graphql/client.dart' as graphql;

class Mutation$M {
Mutation$M({
this.bar,
this.$__typename = 'Mutation',
});

factory Mutation$M.fromJson(Map<String, dynamic> json) {
final l$bar = json['bar'];
final l$$__typename = json['__typename'];
return Mutation$M(
bar: (l$bar as String?),
$__typename: (l$$__typename as String),
);
}

final String? bar;

final String $__typename;

Map<String, dynamic> toJson() {
final _resultData = <String, dynamic>{};
final l$bar = bar;
_resultData['bar'] = l$bar;
final l$$__typename = $__typename;
_resultData['__typename'] = l$$__typename;
return _resultData;
}

@override
int get hashCode {
final l$bar = bar;
final l$$__typename = $__typename;
return Object.hashAll([
l$bar,
l$$__typename,
]);
}

@override
bool operator ==(Object other) {
if (identical(this, other)) {
return true;
}
if (other is! Mutation$M || runtimeType != other.runtimeType) {
return false;
}
final l$bar = bar;
final lOther$bar = other.bar;
if (l$bar != lOther$bar) {
return false;
}
final l$$__typename = $__typename;
final lOther$$__typename = other.$__typename;
if (l$$__typename != lOther$$__typename) {
return false;
}
return true;
}
}

extension UtilityExtension$Mutation$M on Mutation$M {
CopyWith$Mutation$M<Mutation$M> get copyWith => CopyWith$Mutation$M(
this,
(i) => i,
);
}

abstract class CopyWith$Mutation$M<TRes> {
factory CopyWith$Mutation$M(
Mutation$M instance,
TRes Function(Mutation$M) then,
) = _CopyWithImpl$Mutation$M;

factory CopyWith$Mutation$M.stub(TRes res) = _CopyWithStubImpl$Mutation$M;

TRes call({
String? bar,
String? $__typename,
});
}

class _CopyWithImpl$Mutation$M<TRes> implements CopyWith$Mutation$M<TRes> {
_CopyWithImpl$Mutation$M(
this._instance,
this._then,
);

final Mutation$M _instance;

final TRes Function(Mutation$M) _then;

static const _undefined = <dynamic, dynamic>{};

TRes call({
Object? bar = _undefined,
Object? $__typename = _undefined,
}) =>
_then(Mutation$M(
bar: bar == _undefined ? _instance.bar : (bar as String?),
$__typename: $__typename == _undefined || $__typename == null
? _instance.$__typename
: ($__typename as String),
));
}

class _CopyWithStubImpl$Mutation$M<TRes> implements CopyWith$Mutation$M<TRes> {
_CopyWithStubImpl$Mutation$M(this._res);

TRes _res;

call({
String? bar,
String? $__typename,
}) =>
_res;
}

const documentNodeMutationM = DocumentNode(definitions: [
OperationDefinitionNode(
type: OperationType.mutation,
name: NameNode(value: 'M'),
variableDefinitions: [],
directives: [],
selectionSet: SelectionSetNode(selections: [
FieldNode(
name: NameNode(value: 'bar'),
alias: null,
arguments: [],
directives: [],
selectionSet: null,
),
FieldNode(
name: NameNode(value: '__typename'),
alias: null,
arguments: [],
directives: [],
selectionSet: null,
),
]),
),
]);
Mutation$M _parserFn$Mutation$M(Map<String, dynamic> data) =>
Mutation$M.fromJson(data);
typedef OnMutationCompleted$Mutation$M = FutureOr<void> Function(
Map<String, dynamic>?,
Mutation$M?,
);

class Options$Mutation$M extends graphql.MutationOptions<Mutation$M> {
Options$Mutation$M({
String? operationName,
graphql.FetchPolicy? fetchPolicy,
graphql.ErrorPolicy? errorPolicy,
graphql.CacheRereadPolicy? cacheRereadPolicy,
Object? optimisticResult,
Mutation$M? typedOptimisticResult,
graphql.Context? context,
OnMutationCompleted$Mutation$M? onCompleted,
graphql.OnMutationUpdate<Mutation$M>? update,
graphql.OnError? onError,
}) : onCompletedWithParsed = onCompleted,
super(
operationName: operationName ?? 'M',
fetchPolicy: fetchPolicy,
errorPolicy: errorPolicy,
cacheRereadPolicy: cacheRereadPolicy,
optimisticResult: optimisticResult ?? typedOptimisticResult?.toJson(),
context: context,
onCompleted: onCompleted == null
? null
: (data) => onCompleted(
data,
data == null ? null : _parserFn$Mutation$M(data),
),
update: update,
onError: onError,
document: documentNodeMutationM,
parserFn: _parserFn$Mutation$M,
);

final OnMutationCompleted$Mutation$M? onCompletedWithParsed;

@override
List<Object?> get properties => [
...super.onCompleted == null
? super.properties
: super.properties.where((property) => property != onCompleted),
onCompletedWithParsed,
];
}

class WatchOptions$Mutation$M extends graphql.WatchQueryOptions<Mutation$M> {
WatchOptions$Mutation$M({
String? operationName,
graphql.FetchPolicy? fetchPolicy,
graphql.ErrorPolicy? errorPolicy,
graphql.CacheRereadPolicy? cacheRereadPolicy,
Object? optimisticResult,
Mutation$M? typedOptimisticResult,
graphql.Context? context,
Duration? pollInterval,
bool? eagerlyFetchResults,
bool carryForwardDataOnException = true,
bool fetchResults = false,
}) : super(
operationName: operationName ?? 'M',
fetchPolicy: fetchPolicy,
errorPolicy: errorPolicy,
cacheRereadPolicy: cacheRereadPolicy,
optimisticResult: optimisticResult ?? typedOptimisticResult?.toJson(),
context: context,
document: documentNodeMutationM,
pollInterval: pollInterval,
eagerlyFetchResults: eagerlyFetchResults,
carryForwardDataOnException: carryForwardDataOnException,
fetchResults: fetchResults,
parserFn: _parserFn$Mutation$M,
);
}

extension ClientExtension$Mutation$M on graphql.GraphQLClient {
Future<graphql.QueryResult<Mutation$M>> mutate$M(
[Options$Mutation$M? options]) async =>
await this.mutate(options ?? Options$Mutation$M());
graphql.ObservableQuery<Mutation$M> watchMutation$M(
[WatchOptions$Mutation$M? options]) =>
this.watchMutation(options ?? WatchOptions$Mutation$M());
}
4 changes: 4 additions & 0 deletions packages/graphql_codegen/test/assets/issue_191/options.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"setOperationName": true,
"clients": ["graphql"]
}
3 changes: 3 additions & 0 deletions packages/graphql_codegen/test/assets/issue_191/query.graphql
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
query Q {
foo
}
Loading