UNPKG

apollo-server-micro-pluto

Version:

Production-ready Node.js GraphQL server for Micro(for xsky pluto project)

61 lines 2.39 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.graphqlMicro = void 0; const apollo_server_core_1 = require("apollo-server-core"); const micro_1 = require("micro"); const url_1 = __importDefault(require("url")); const type_is_1 = __importDefault(require("type-is")); function setHeaders(res, headers) { Object.entries(headers).forEach(([header, value]) => { res.setHeader(header, value); }); } function graphqlMicro(options) { if (!options) { throw new Error('Apollo Server requires options.'); } if (arguments.length > 1) { throw new Error(`Apollo Server expects exactly one argument, got ${arguments.length}`); } const graphqlHandler = async (req, res) => { const contentType = req.headers['content-type']; const query = req.method === 'POST' ? req.filePayload || (contentType && req.headers['content-length'] && req.headers['content-length'] !== '0' && type_is_1.default.is(contentType, 'application/json') && (await micro_1.json(req, { limit: '10mb' }))) : url_1.default.parse(req.url, true).query; try { const { graphqlResponse, responseInit } = await apollo_server_core_1.runHttpQuery([req, res], { method: req.method, options, query: query, request: apollo_server_core_1.convertNodeHttpToRequest(req), }); setHeaders(res, responseInit.headers); const statusCode = responseInit.status || 200; micro_1.send(res, statusCode, graphqlResponse); return undefined; } catch (error) { if ('HttpQueryError' === error.name && error.headers) { setHeaders(res, error.headers); } if (!error.statusCode) { error.statusCode = 500; } micro_1.send(res, error.statusCode, error.message); return undefined; } }; return graphqlHandler; } exports.graphqlMicro = graphqlMicro; //# sourceMappingURL=microApollo.js.map