comigor / artemis

Build dart types from GraphQL schemas and queries
MIT License
495 stars 119 forks source link

@include in graphql-schema not working #343

Open Nealsoni00 opened 3 years ago

Nealsoni00 commented 3 years ago

Bug description

I have an @include (if: $detailed) in my fragment. When that $detailed is set to false, and the schema is returned without the property, parsing the response with the generated type file does not work.

The fragment is included using fragment_glob in build.yml

image

fragment propertyFields on Property {
    id
    optionallyIncludedProperty(first: $number, after: $cursor) @include(if: $detailed) {
        ...someConnectionFields
    }
}

line that errors:

SomeMixin$Property _$SomeMixin$PropertyFromJson(
    Map<String, dynamic> json) {
  return SomeMixin$Property()
    ..id = json['id'] as String
    ..optionallyIncludedProperty = SomeMixin$SomeConnection.fromJson(
        json['optionallyIncludedProperty'] as Map<String, dynamic>) \\<----
}

Specs

artemis: ^7.0.0-beta.3

build.yaml: ```yaml targets: $default: sources: - lib/** builders: artemis: options: fragments_glob: lib/graphql/operations/fragments/*.graphql schema_mapping: - schema: lib/graphql/schema.graphql queries_glob: lib/graphql/operations/api.graphql output: lib/graphql/api.dart scalar_mapping: - graphql_type: JSON dart_type: Map - graphql_type: ISO8601DateTime dart_type: DateTime ```
Artemis output: ```bash builds successfully ```
kmcgill88 commented 2 years ago

I ran into the same issue with artemis: 7.8.0-beta. In my case the graph query executes correctly but conditionally some data isn't return,...hence the parsing error. Same thing for @skip.

cfsbhawkins commented 1 year ago

Yeah this seems to be related to the model builder, @include will work just fine if the Schema says field could be nullable, but if it's something that reports back as not nullable then includes will fail, such as a connection or node.

sarp86 commented 1 year ago

Any updates? We have the same problem? This ticket is open over one year?

pdegand commented 1 year ago

@comigor As a solution for this issue, could this be an acceptable behavior to generate a Dart nullable field if a non-nullable GraphQL field marked with the @include directive ?