diff options
| author | Fuwn <[email protected]> | 2022-03-20 01:28:42 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2022-03-20 01:28:42 -0700 |
| commit | 03f2c8e35ba70c9d9496fd5ad5403520f7ebdc53 (patch) | |
| tree | 568e508aff6db6325719abcb2c601520264c5de4 /src/handlers/apollo.js | |
| download | graphql-api-03f2c8e35ba70c9d9496fd5ad5403520f7ebdc53.tar.xz graphql-api-03f2c8e35ba70c9d9496fd5ad5403520f7ebdc53.zip | |
feat: 0.1.0 :star:
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; |