GraphQL Apollo Plugin

Plugin for elysia for using GraphQL Apollo.

Install with:

bun add graphql @elysiajs/apollo @apollo/server

Then use it:

import { Elysia } from "elysia";
import { apollo, gql } from "@elysiajs/apollo";

const app = new Elysia()
  .use(
    apollo({
      typeDefs: gql`
        type Book {
          title: String
          author: String
        }

        type Query {
          books: [Book]
        }
      `,
      resolvers: {
        Query: {
          books: () => {
            return [
              {
                title: "Elysia",
                author: "saltyAom",
              },
            ];
          },
        },
      },
    })
  )
  .listen(8080);

Accessing /graphql should show Apollo GraphQL playground work with.

Context

Because Elysia is based on Web Standard Request and Response which is different from Node's HttpRequest and HttpResponse that Express use, result in req, res being undefined in context.

Because of this, Elysia replace both with context like route parameter.

const app = new Elysia()
  .use(
    apollo({
      typeDefs,
      resolvers,
      context: async ({ request }) => {
        const authorization = request.headers.get("Authorization");

        return {
          authorization,
        };
      },
    })
  )
  .listen(8080);

Config

This plugin extends Apollo's ServerRegistration (which is ApolloServer's' constructor parameter).

Below are the extended parameters for configuring Apollo Server with Elysia.

path

@default "/graphql"

Path to expose Apollo Server.

enablePlayground

@default "process.env.ENV !== 'production'

Determine whether should Apollo should provide Apollo Playground.