UNPKG

@cran/gql.koa

Version:

Cran/GraphQL Koa Server

85 lines (84 loc) 3.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.KoaServer = void 0; const tslib_1 = require("tslib"); const apollo_server_core_1 = require("apollo-server-core"); const koa_1 = (0, tslib_1.__importDefault)(require("koa")); const router_1 = (0, tslib_1.__importDefault)(require("@koa/router")); const koa_bodyparser_1 = (0, tslib_1.__importDefault)(require("koa-bodyparser")); const cors_1 = (0, tslib_1.__importDefault)(require("@koa/cors")); const http_1 = require("http"); const middleware_1 = require("./middleware"); class KoaServer extends koa_1.default { server; apollo; constructor(options) { super(); this.server = options.server || (0, http_1.createServer)(); if (false !== options.cors) { this.use((0, cors_1.default)("object" === typeof options.cors ? options.cors : undefined)); } if (false !== options.options) { this.use(function useOptions(ctx, next) { if ("OPTIONS" === ctx.request.method) { return Object.assign(ctx, { status: 204, body: "", }); } return next(); }); } if (false !== options.bodyParser) { this.use((0, koa_bodyparser_1.default)("object" === typeof options.bodyParser ? options.bodyParser : undefined)); } } getApollo() { return this.apollo; } getServer() { return this.server; } getApolloPlugins() { return [ (0, apollo_server_core_1.ApolloServerPluginDrainHttpServer)({ httpServer: this.server, }), ]; } useRouter(router) { return this.use(router.routes()).use(router.allowedMethods()); } useApollo(apollo, { path = "/graphql", middleware = [], } = {}) { this.apollo = apollo; const router = new router_1.default(); const apolloMiddleware = apollo.getMiddleware(); router.get(path, ...middleware, apolloMiddleware); router.post(path, ...middleware, apolloMiddleware); return this.useRouter(router); } useSystemMiddleware(options = {}) { if (false !== options.sqlPreview) { this.use(middleware_1.sqlPreview); } const router = new router_1.default({ prefix: options.prefix || "/-", }); if (false !== options.health) { router.get("/health", (0, middleware_1.health)("boolean" === typeof options.health ? undefined : options.health)); } if (false !== options.metrics) { router.get("/metrics", middleware_1.metrics); } return this.useRouter(router); } async start(options = { port: Number(process.env.PORT) || 0, }) { if (this.apollo) { await this.apollo.start(); } this.server.on("request", this.callback()); return new Promise((resolve) => { this.server.listen(options, () => { resolve(this); }); }); } } exports.KoaServer = KoaServer;