Skip to content

Rest directive is not defined and throws errors if manually defined #2180

@basicdays

Description

@basicdays

I'm currently using the apollo-link-rest package and using the @rest directive in my gql queries. I'm manually including type definitions for the rest fields to ensure that those fields are correctly defined.

Intended outcome:

I was expecting that would have been all I needed to do to get @rest fields to work correctly without VSCode flagging them as errors.

Actual outcome:

However, when I'm creating a query that includes @rest, VSCode is flagging those directives with Unknown directive "@rest"., and the field that it is attached to as @client directive is missing on local field "< field name >".

I've also tried manually including the @rest directive schema in apollo.config.js in the includes section with "./node_modules/apollo-link-rest/schema.graphql". When I do that, the @rest directive is now correctly typed, however the Apollo GraphQL output tab in VSCode is now throwing out constant errors:

(node:20517) Warning: Setting the NODE_TLS_REJECT_UNAUTHORIZED environment variable to '0' makes TLS connections and HTTPS requests insecure by disabling certificate verification.
(node:20517) UnhandledPromiseRejectionWarning: Error: The type of @rest(bodySerializer:) must be Input Type but got: RestFunctionOrString.

Union type RestFunctionOrString can only include Object types, it cannot include String.

Union type RestFunctionOrString can only include Object types, it cannot include RestFunction.
    at assertValidSchema (/Users/paulsanchez/.vscode/extensions/apollographql.vscode-apollo-1.17.1/node_modules/graphql/type/validate.js:69:11)
    at validate (/Users/paulsanchez/.vscode/extensions/apollographql.vscode-apollo-1.17.1/node_modules/graphql/validation/validate.js:51:35)
    at Object.findDeprecatedUsages (/Users/paulsanchez/.vscode/extensions/apollographql.vscode-apollo-1.17.1/node_modules/graphql/utilities/findDeprecatedUsages.js:26:33)
    at Object.collectExecutableDefinitionDiagnositics (/Users/paulsanchez/.vscode/extensions/apollographql.vscode-apollo-1.17.1/node_modules/apollo-language-server/lib/diagnostics.js:17:35)
    at GraphQLClientProject.validate (/Users/paulsanchez/.vscode/extensions/apollographql.vscode-apollo-1.17.1/node_modules/apollo-language-server/lib/project/client.js:182:65)
    at /Users/paulsanchez/.vscode/extensions/apollographql.vscode-apollo-1.17.1/node_modules/apollo-language-server/lib/workspace.js:58:46
    at processTicksAndRejections (internal/process/task_queues.js:94:5)
(node:20517) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 2)
(node:20517) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

How to reproduce the issue:

For ease of reproduction, I've created a GitHub repository that replicates the issue: https://github.com/basicdays/ghtest
Setup instructions are in that readme. All you need to do is open the folder in VSCode and look at the Apollo GraphQL in the output window. The queries in question are found in ./lib/index.js.

Versions

After installing with the latest tag from npm, looks like I'm using:

  • @apollo/client: ^3.3.3
  • apollo-link-rest: ^0.8.0-beta.0

I also have version 1.17.1 of the Apollo GraphQL VSCode extension

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions