Code Monkey home page Code Monkey logo

graphql-tools-merge-resolver-fragment-issue's Introduction

Reproduction of graphql-tools issue

In summary, when adding resolvers between schemas, the fragment type must match the query type, it does not honour interfaces.

https://www.graphql-tools.com/docs/schema-stitching#adding-resolvers-between-schemas

Running

nvm use
npm install
npm run dev

Visit: http://localhost:4000

Query

{
  # PASS
  s1: collections {
    name
    products {
      title
      stockRecordViaConcrete {
        stock
      }
    }
  }

  # FAIL
  s2: collections {
    name
    products {
      ... on IProduct {
        title
        stockRecordViaConcrete {
          stock
        }
      }
    }
  }

  # PASS
  s3: collections {
    name
    products {
      ...InterfaceFragmentViaInterface
    }
  }

  # FAIL
  s4: collections {
    name
    products {
      ...InterfaceFragmentViaConcrete
    }
  }

  # FAIL
  s5: collections {
    name
    products {
      title
      stockRecordViaInterface {
        stock
      }
    }
  }

  # PASS
  s6: collections {
    name
    products {
      ... on IProduct {
        title
        stockRecordViaInterface {
          stock
        }
      }
    }
  }

  # FAIL
  s7: collections {
    name
    products {
      ...ConcreteFragmentViaInterface
    }
  }

  # PASS
  s8: collections {
    name
    products {
      ...ConcreteFragmentViaConcrete
    }
  }
}

fragment InterfaceFragmentViaInterface on IProduct {
  title
  stockRecordViaInterface {
    stock
  }
}

fragment InterfaceFragmentViaConcrete on IProduct {
  title
  stockRecordViaConcrete {
    stock
  }
}

fragment ConcreteFragmentViaInterface on Product {
  title
  stockRecordViaInterface {
    stock
  }
}

fragment ConcreteFragmentViaConcrete on Product {
  title
  stockRecordViaConcrete {
    stock
  }
}

Result

{
  "errors": [
    {
      "message": "Variable \"$_v0_id\" got invalid value undefined; Expected non-nullable type ID! not to be null.",
      "locations": [],
      "path": [
        "s2",
        0,
        "products",
        0,
        "stockRecordViaConcrete"
      ],
      "extensions": {
        "code": "INTERNAL_SERVER_ERROR",
        "exception": {
          "message": "Variable \"$_v0_id\" got invalid value undefined; Expected non-nullable type ID! not to be null.",
          "locations": [],
          "stacktrace": [
            "GraphQLError: Variable \"$_v0_id\" got invalid value undefined; Expected non-nullable type ID! not to be null.",
            "    at combineErrors (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/stitch/errors.ts:84:12)",
            "    at handleNull (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/delegate/results/handleNull.ts:16:29)",
            "    at handleResult (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/delegate/checkResultAndHandleErrors.ts:56:12)",
            "    at checkResultAndHandleErrors (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/delegate/checkResultAndHandleErrors.ts:33:10)",
            "    at CheckResultAndHandleErrors.transformResult (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/wrap/transforms/CheckResultAndHandleErrors.ts:35:12)",
            "    at /Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/wrap/transforms.ts:40:21",
            "    at Array.reduceRight (<anonymous>)",
            "    at applyResultTransforms (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/wrap/transforms.ts:37:21)",
            "    at delegateRequest (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/delegate/delegateToSchema.ts:216:12)",
            "    at delegateToSchema (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/delegate/delegateToSchema.ts:70:10)"
          ]
        }
      }
    },
    {
      "message": "Variable \"$_v0_id\" got invalid value undefined; Expected non-nullable type ID! not to be null.",
      "locations": [],
      "path": [
        "s4",
        0,
        "products",
        0,
        "stockRecordViaConcrete"
      ],
      "extensions": {
        "code": "INTERNAL_SERVER_ERROR",
        "exception": {
          "message": "Variable \"$_v0_id\" got invalid value undefined; Expected non-nullable type ID! not to be null.",
          "locations": [],
          "stacktrace": [
            "GraphQLError: Variable \"$_v0_id\" got invalid value undefined; Expected non-nullable type ID! not to be null.",
            "    at combineErrors (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/stitch/errors.ts:84:12)",
            "    at handleNull (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/delegate/results/handleNull.ts:16:29)",
            "    at handleResult (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/delegate/checkResultAndHandleErrors.ts:56:12)",
            "    at checkResultAndHandleErrors (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/delegate/checkResultAndHandleErrors.ts:33:10)",
            "    at CheckResultAndHandleErrors.transformResult (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/wrap/transforms/CheckResultAndHandleErrors.ts:35:12)",
            "    at /Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/wrap/transforms.ts:40:21",
            "    at Array.reduceRight (<anonymous>)",
            "    at applyResultTransforms (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/wrap/transforms.ts:37:21)",
            "    at delegateRequest (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/delegate/delegateToSchema.ts:216:12)",
            "    at delegateToSchema (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/delegate/delegateToSchema.ts:70:10)"
          ]
        }
      }
    },
    {
      "message": "Variable \"$_v0_id\" got invalid value undefined; Expected non-nullable type ID! not to be null.",
      "locations": [],
      "path": [
        "s5",
        0,
        "products",
        0,
        "stockRecordViaInterface"
      ],
      "extensions": {
        "code": "INTERNAL_SERVER_ERROR",
        "exception": {
          "message": "Variable \"$_v0_id\" got invalid value undefined; Expected non-nullable type ID! not to be null.",
          "locations": [],
          "stacktrace": [
            "GraphQLError: Variable \"$_v0_id\" got invalid value undefined; Expected non-nullable type ID! not to be null.",
            "    at combineErrors (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/stitch/errors.ts:84:12)",
            "    at handleNull (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/delegate/results/handleNull.ts:16:29)",
            "    at handleResult (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/delegate/checkResultAndHandleErrors.ts:56:12)",
            "    at checkResultAndHandleErrors (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/delegate/checkResultAndHandleErrors.ts:33:10)",
            "    at CheckResultAndHandleErrors.transformResult (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/wrap/transforms/CheckResultAndHandleErrors.ts:35:12)",
            "    at /Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/wrap/transforms.ts:40:21",
            "    at Array.reduceRight (<anonymous>)",
            "    at applyResultTransforms (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/wrap/transforms.ts:37:21)",
            "    at delegateRequest (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/delegate/delegateToSchema.ts:216:12)",
            "    at delegateToSchema (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/delegate/delegateToSchema.ts:70:10)"
          ]
        }
      }
    },
    {
      "message": "Variable \"$_v0_id\" got invalid value undefined; Expected non-nullable type ID! not to be null.",
      "locations": [],
      "path": [
        "s7",
        0,
        "products",
        0,
        "stockRecordViaInterface"
      ],
      "extensions": {
        "code": "INTERNAL_SERVER_ERROR",
        "exception": {
          "message": "Variable \"$_v0_id\" got invalid value undefined; Expected non-nullable type ID! not to be null.",
          "locations": [],
          "stacktrace": [
            "GraphQLError: Variable \"$_v0_id\" got invalid value undefined; Expected non-nullable type ID! not to be null.",
            "    at combineErrors (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/stitch/errors.ts:84:12)",
            "    at handleNull (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/delegate/results/handleNull.ts:16:29)",
            "    at handleResult (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/delegate/checkResultAndHandleErrors.ts:56:12)",
            "    at checkResultAndHandleErrors (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/delegate/checkResultAndHandleErrors.ts:33:10)",
            "    at CheckResultAndHandleErrors.transformResult (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/wrap/transforms/CheckResultAndHandleErrors.ts:35:12)",
            "    at /Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/wrap/transforms.ts:40:21",
            "    at Array.reduceRight (<anonymous>)",
            "    at applyResultTransforms (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/wrap/transforms.ts:37:21)",
            "    at delegateRequest (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/delegate/delegateToSchema.ts:216:12)",
            "    at delegateToSchema (/Users/msanders/code/graphql-tools-merge-resolver-fragment-issue/node_modules/src/delegate/delegateToSchema.ts:70:10)"
          ]
        }
      }
    }
  ],
  "data": {
    "s1": [
      {
        "name": "Apparel",
        "products": [
          {
            "title": "T-Shirt",
            "stockRecordViaConcrete": {
              "stock": 100
            }
          }
        ]
      }
    ],
    "s2": [
      {
        "name": "Apparel",
        "products": [
          {
            "title": "T-Shirt",
            "stockRecordViaConcrete": null
          }
        ]
      }
    ],
    "s3": [
      {
        "name": "Apparel",
        "products": [
          {
            "title": "T-Shirt",
            "stockRecordViaInterface": {
              "stock": 100
            }
          }
        ]
      }
    ],
    "s4": [
      {
        "name": "Apparel",
        "products": [
          {
            "title": "T-Shirt",
            "stockRecordViaConcrete": null
          }
        ]
      }
    ],
    "s5": [
      {
        "name": "Apparel",
        "products": [
          {
            "title": "T-Shirt",
            "stockRecordViaInterface": null
          }
        ]
      }
    ],
    "s6": [
      {
        "name": "Apparel",
        "products": [
          {
            "title": "T-Shirt",
            "stockRecordViaInterface": {
              "stock": 100
            }
          }
        ]
      }
    ],
    "s7": [
      {
        "name": "Apparel",
        "products": [
          {
            "title": "T-Shirt",
            "stockRecordViaInterface": null
          }
        ]
      }
    ],
    "s8": [
      {
        "name": "Apparel",
        "products": [
          {
            "title": "T-Shirt",
            "stockRecordViaConcrete": {
              "stock": 100
            }
          }
        ]
      }
    ]
  }
}

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.