Giter VIP home page Giter VIP logo

Comments (3)

martinbonnin avatar martinbonnin commented on April 28, 2024 1

necromancer_mode_on

Can we revive this discussion?

allowing a field to be tersely deprecated and avoiding less good cases like using empty strings to indicate deprecation or something along those lines

Since the current @deprecated directive definition has a default value, feels like terseness is not a problem anymore? One can always deprecate using just the directive:

type Query {
  foo: Int @deprecated
}

We could make reason non-nullable in SDL:

directive @deprecated(
  # note how reason is non-nullable here
  reason: String! = "No longer supported"
) on FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION | ENUM_VALUE

This will also forbid such possibly confusing declarations:

type Query {
  # is this deprecated? If yes, why? how is it different than the default "No longer supported"?
  foo: Int @deprecated(reason: null) 
}

Introspection would keep nullable deprecationReason:

type __Field {
  name: String!
  description: String
  args(includeDeprecated: Boolean = false): [__InputValue!]!
  type: __Type!
  # remove (or deprecate 😄 `isDeprecated`)
  # isDeprecated: Boolean!

  # keep the current behaviour for deprecationReason
  "the deprecation reason if the field is deprecated or null if the field is not deprecated"
  deprecationReason: String
}

Looks like graphql-js is also taking that route and deprecating isDeprecated internally: graphql/graphql-js#2700

Thoughts?

from graphql-spec.

leebyron avatar leebyron commented on April 28, 2024

The current reason for this is that deprecationReason is optional, regardless of if a field is deprecated or not, allowing a field to be tersely deprecated and avoiding less good cases like using empty strings to indicate deprecation or something along those lines.

I also felt like it was more clear to have the isDeprecated field, otherwise it seemed easy to misread the list of fields and assume deprecation was always possible.

If we decide to change this though, I would expect that decision to also include making description non-nullable. It's non-nullable for the same reason this semi-redundancy exists.

from graphql-spec.

leebyron avatar leebyron commented on April 28, 2024

Closing this aging issue.

from graphql-spec.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.