apollo-server-micro-pluto
Version:
Production-ready Node.js GraphQL server for Micro(for xsky pluto project)
61 lines • 2.39 kB
JavaScript
;
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