diff --git a/plugins/graphql-backend/package.json b/plugins/graphql-backend/package.json index c0ef3f399c..f63cccd5d2 100644 --- a/plugins/graphql-backend/package.json +++ b/plugins/graphql-backend/package.json @@ -34,13 +34,13 @@ "@backstage/backend-common": "^0.10.0", "@backstage/config": "^0.1.8", "@backstage/plugin-catalog-graphql": "^0.2.14", - "@graphql-modules/core": "^0.7.17", + "graphql-modules": "^1.0.0", "@types/express": "^4.17.6", - "apollo-server": "^2.16.1", - "apollo-server-express": "^2.16.1", + "apollo-server": "^3.0.0", + "apollo-server-express": "^3.0.0", "express": "^4.17.1", "express-promise-router": "^4.1.0", - "graphql": "^15.3.0", + "graphql": "^16.0.0", "helmet": "^4.0.0", "reflect-metadata": "^0.1.13", "winston": "^3.2.1", diff --git a/plugins/graphql-backend/src/service/router.ts b/plugins/graphql-backend/src/service/router.ts index 2bc436d93f..581a007360 100644 --- a/plugins/graphql-backend/src/service/router.ts +++ b/plugins/graphql-backend/src/service/router.ts @@ -14,22 +14,16 @@ * limitations under the License. */ -import { errorHandler, resolvePackagePath } from '@backstage/backend-common'; +import { errorHandler } from '@backstage/backend-common'; import express from 'express'; import Router from 'express-promise-router'; import { Logger } from 'winston'; -import fs from 'fs'; -import { GraphQLModule } from '@graphql-modules/core'; +import { createApplication } from 'graphql-modules'; import { ApolloServer } from 'apollo-server-express'; import { createModule as createCatalogModule } from '@backstage/plugin-catalog-graphql'; import { Config } from '@backstage/config'; import helmet from 'helmet'; -const schemaPath = resolvePackagePath( - '@backstage/plugin-graphql-backend', - 'schema.gql', -); - export interface RouterOptions { logger: Logger; config: Config; @@ -38,22 +32,19 @@ export interface RouterOptions { export async function createRouter( options: RouterOptions, ): Promise { - const typeDefs = await fs.promises.readFile(schemaPath, 'utf-8'); - const catalogModule = await createCatalogModule(options); - const { schema } = new GraphQLModule({ - imports: [catalogModule], - typeDefs, + const { createSchemaForApollo } = createApplication({ + modules: [catalogModule], }); const server = new ApolloServer({ - schema, + schema: createSchemaForApollo(), logger: options.logger, introspection: true, - playground: process.env.NODE_ENV === 'development', }); + await server.start(); const router = Router(); router.get('/health', (_, response) => {