aboutsummaryrefslogtreecommitdiff
path: root/src/handlers/apollo.js
diff options
context:
space:
mode:
authorFuwn <[email protected]>2022-03-20 01:28:42 -0700
committerFuwn <[email protected]>2022-03-20 01:28:42 -0700
commit03f2c8e35ba70c9d9496fd5ad5403520f7ebdc53 (patch)
tree568e508aff6db6325719abcb2c601520264c5de4 /src/handlers/apollo.js
downloadgraphql-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.js36
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;