templates/ApolloServer/index.mjs (37 lines of code) (raw):

import {ApolloServer} from '@apollo/server'; import {startStandaloneServer} from '@apollo/server/standalone'; import {buildSubgraphSchema} from '@apollo/subgraph'; import {readFileSync} from 'fs'; import {gql} from 'graphql-tag'; import {resolveEvent} from './neptune.mjs' import dotenv from 'dotenv'; dotenv.config(); const typeDefs = gql(readFileSync('./output.schema.graphql', 'utf-8')); const queryDefinition = typeDefs.definitions.find( definition => definition.kind === 'ObjectTypeDefinition' && definition.name.value === 'Query' ); const queryNames = queryDefinition ? queryDefinition.fields.map(field => field.name.value) : []; const resolvers = { // only Query is supported for now, no Mutations Query: queryNames.reduce((accumulator, queryName) => { accumulator[queryName] = (parent, args, context, info) => { const event = { field: info.fieldName, arguments: args, selectionSet: info.fieldNodes[0].selectionSet, }; return resolveEvent(event).then((result) => { return result; }); }; return accumulator; }, {}), }; const server = process.env.SUBGRAPH === 'true' ? new ApolloServer({ schema: buildSubgraphSchema([{ typeDefs, resolvers }]) }) : new ApolloServer({typeDefs, resolvers}); const {url} = await startStandaloneServer(server); console.log(`🚀 Server ready at ${url}`);