Skip to content
This repository was archived by the owner on Sep 11, 2025. It is now read-only.

Remove extraneous types in graphql schemas#251

Merged
mattjohnsonpint merged 3 commits intomainfrom
mjp/fix-schemagen
Jun 24, 2024
Merged

Remove extraneous types in graphql schemas#251
mattjohnsonpint merged 3 commits intomainfrom
mjp/fix-schemagen

Conversation

@mattjohnsonpint
Copy link
Contributor

Replaces #236, which was reverted in #241

Fixes HYP-1388

@mattjohnsonpint mattjohnsonpint requested a review from a team June 24, 2024 01:05
@linear
Copy link

linear bot commented Jun 24, 2024

HYP-1388 Runtime generates extraneous types in the GraphQL schema

Consider the example project at https://github.com/hypermodeAI/functions-as/tree/main/examples/http

The generated GraphQL schema from the Runtime is:

type Query {
  createGithubIssue(owner: String!, repo: String!, title: String!, body: String!): Issue!
  getExampleHtml: String!
  getRandomImage(width: Int!, height: Int!): Image!
  getRandomQuote: Quote!
}

type Header {
  name: String!
  values: [String!]!
}

type Headers {
  data: [StringHeaderPair!]!
}

type Image {
  contentType: String!
  data: String!
}

type Issue {
  title: String!
  body: String!
  url: String
}

type Quote {
  quote: String!
  author: String!
}

type Request {
  url: String!
  method: String!
  headers: Headers!
  body: String!
}

type Response {
  status: Int!
  statusText: String!
  headers: Headers!
  body: String!
}

type StringHeaderPair {
  key: String!
  value: Header!
}

It should be:

type Query {
  createGithubIssue(owner: String!, repo: String!, title: String!, body: String!): Issue!
  getExampleHtml: String!
  getRandomImage(width: Int!, height: Int!): Image!
  getRandomQuote: Quote!
}

type Image {
  contentType: String!
  data: String!
}

type Issue {
  title: String!
  body: String!
  url: String
}

type Quote {
  quote: String!
  author: String!
}

The extraneous types do indeed need to be extracted from the wasm and included in the metadata, so that the host functions that use them can operate correctly. However, since they aren't used in any types that are inputs or outputs of the query functions, then they shouldn't be be projected to GraphQL.

This could be nuanced. For example, if one actually returned the Response object, then indeed that object and any of its dependencies would need schema.

@mattjohnsonpint mattjohnsonpint enabled auto-merge (squash) June 24, 2024 01:06
@mattjohnsonpint mattjohnsonpint merged commit 5257b4d into main Jun 24, 2024
@mattjohnsonpint mattjohnsonpint deleted the mjp/fix-schemagen branch June 24, 2024 02:04
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants