0.1.0 • Published 3 years ago

@91codes/adonis-graphql v0.1.0

Weekly downloads
-
License
MIT
Repository
-
Last release
3 years ago

Adonis GraphQL

This is a thin layer that glues apollo server and Adonis v5. It allows you to have one or more GraphQL endpoints in your application. I strongly recommend using TypeGraphQL in combination with this package. While it's possible to use it in other ways, the documentation here will assume you are going to use TypeGraphQL.

Installation

yarn add @91codes/adonis-graphql
# or if you are using npm
npm i @91codes/adonis-graphql

Usage

Build your GraphQL schema. More documentation at https://typegraphql.com/docs/getting-started.html

Generate a GraphQL provider

node ace make:provider graphql

Build the schema, create a GraphQL instance, and attach it as a singleton in the provider's boot method.

export default class GraphqlProvider {
  constructor(protected app: ApplicationContract) {
  }

  public async boot() {
    // Import all of your resolvers
    const { default: MyResolver } = await import('App/GraphQL/MyResolver')
    const schema = await buildSchema({ resolvers: [MyResolver] })
    const server = new GraphQLServer({ schema })
    await server.start()
    this.app.container.singleton('App/GraphQL/Server', () => server)
  }
}

Create contracts/graphql-server.ts with the following content to add typings for Adonis IOC

declare module '@ioc:App/GraphQL/Server' {
  import { GraphQLServer } from '@91codes/adonis-graphql'
  const server: GraphQLServer
  export default server
}

Generate a controller

node ace make:controller GraphQLController

Update the controller to serve GraphQL responses

import server from '@ioc:App/GraphQL/Server'

export default class GraphQLController {
  public async serve(ctx: HttpContextContract) {
    return server.handle(
      ctx,
      ctx.request.method() === 'GET' || ctx.request.types().includes('text/html') // Show landing screen in this case
    )
  }
}

Register the route in start/routes.ts

Route.any('graphql', 'GraphQLController.serve')