Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Papercut: duplicate type names do not cause an error when building a Schema object

Abierto
#454 10 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
35/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
fsharp
Área
api

Línea de trabajo

Comienza en Schema(schemaType), utilizando los puntos de entrada Define.Object y Executor que se muestran en la reproducción. Traza cómo el esquema recopila los tipos con nombre y determina dónde se aceptan nombres duplicados. El trabajo estará terminado cuando la construcción del esquema falle para las dos definiciones de Book, y la reproducción o una comprobación de validación específica confirme que el error se produce antes de la ejecución.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

This script demonstrates the issue:

#r "nuget: FSharp.Data.GraphQL.Server, 1.0.7"

open FSharp.Data.GraphQL
open FSharp.Data.GraphQL.Execution
open FSharp.Data.GraphQL.Types

type Book =
  {
    Title : string
    Year : int
  }

let bookType1 =
  Define.Object(
    name = "Book",
    description = "Book type 1",
    fields =
      [
        Define.Field(
          "title",
          String,
          fun ctx (x : Book) -> x.Title
        )
      ]
  )

let bookType2 =
  Define.Object(
    name = "Book",
    description = "Book type 2",
    fields =
      [
        Define.Field(
          "title",
          String,
          fun ctx (x : Book) -> x.Title
        )
        Define.Field(
          "year",
          Int,
          fun ctx (x : Book) -> x.Year
        )
      ]
  )

let schemaType : ObjectDef<unit> =
  Define.Object(
    name = "Query",
    fields =
      [
        Define.Field(
          "books1",
          ListOf bookType1,
          fun _ () -> []
        )
        Define.Field(
          "books2",
          ListOf bookType2,
          fun _ () -> []
        )
      ]
  )

let schema = Schema(schemaType)
let executor = Executor(schema)

let query = """
{
  books2 {
    title
    year
  }
}
"""

let result =
  executor.AsyncExecute (query)
  |> Async.RunSynchronously

let output, errors =
  match result.Content with
  | GQLResponseContent.Direct (output, errors) -> output, errors
  | x -> failwith $"Unsupported: %A{x}"

printfn $"Output:\n%A{output}\n"

for error in errors do
  printfn $"Error:\n%A{error}\n"
Output:
map []

Error:
("Field 'year' is not defined in schema type 'Book'.", ["books2"; "year"])

The two book types share a name, and the library silently picks bookType1.

I think that duplicate names should cause schema building to fail, so that this error is caught earlier.

let schema = Schema(schemaType) // Should raise an exception on an invalid schema

Any thoughts?

Lenguaje dominante
F#
Estrellas
406
Forks
74
Merge medio
1 d 8 h
PR fusionados (30 d)
14

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de fsprojects/FSharp.Data.GraphQL

Todos los issues de fsprojects/FSharp.Data.GraphQL

Issues similares

Más issues de Backend & API Design

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.