diff options
Diffstat (limited to 'src/handlers/apollo.js')
| -rw-r--r-- | src/handlers/apollo.js | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/handlers/apollo.js b/src/handlers/apollo.js new file mode 100644 index 0000000..45746e0 --- /dev/null +++ b/src/handlers/apollo.js @@ -0,0 +1,36 @@ +const { ApolloServer } = require("apollo-server-cloudflare"); +const { + graphqlCloudflare, +} = require("apollo-server-cloudflare/dist/cloudflareApollo"); + +const KVCache = require("../kv-cache"); +const SenpyAPI = require("../datasources/senpy"); +const resolvers = require("../resolvers"); +const typeDefs = require("../schema"); + +const dataSources = () => ({ + senpyAPI: new SenpyAPI(), +}); + +const kvCache = { cache: new KVCache() }; + +const createServer = (graphQLOptions) => + new ApolloServer({ + typeDefs, + resolvers, + introspection: true, + dataSources, + ...(graphQLOptions.kvCache ? kvCache : {}), + }); + +const handler = async (request, graphQLOptions) => { + const server = createServer(graphQLOptions); + + await server.start(); + + return graphqlCloudflare(() => server.createGraphQLServerOptions(request))( + request + ); +}; + +module.exports = handler; |