index.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.expressMiddleware = void 0;
  4. const url_1 = require("url");
  5. const HeaderMap_js_1 = require("../utils/HeaderMap.js");
  6. function expressMiddleware(server, options) {
  7. server.assertStarted('expressMiddleware()');
  8. const defaultContext = async () => ({});
  9. const context = options?.context ?? defaultContext;
  10. return (req, res, next) => {
  11. if (!req.body) {
  12. res.status(500);
  13. res.send('`req.body` is not set; this probably means you forgot to set up the ' +
  14. '`json` middleware before the Apollo Server middleware.');
  15. return;
  16. }
  17. const headers = new HeaderMap_js_1.HeaderMap();
  18. for (const [key, value] of Object.entries(req.headers)) {
  19. if (value !== undefined) {
  20. headers.set(key, Array.isArray(value) ? value.join(', ') : value);
  21. }
  22. }
  23. const httpGraphQLRequest = {
  24. method: req.method.toUpperCase(),
  25. headers,
  26. search: (0, url_1.parse)(req.url).search ?? '',
  27. body: req.body,
  28. };
  29. server
  30. .executeHTTPGraphQLRequest({
  31. httpGraphQLRequest,
  32. context: () => context({ req, res }),
  33. })
  34. .then(async (httpGraphQLResponse) => {
  35. for (const [key, value] of httpGraphQLResponse.headers) {
  36. res.setHeader(key, value);
  37. }
  38. res.statusCode = httpGraphQLResponse.status || 200;
  39. if (httpGraphQLResponse.body.kind === 'complete') {
  40. res.send(httpGraphQLResponse.body.string);
  41. return;
  42. }
  43. for await (const chunk of httpGraphQLResponse.body.asyncIterator) {
  44. res.write(chunk);
  45. if (typeof res.flush === 'function') {
  46. res.flush();
  47. }
  48. }
  49. res.end();
  50. })
  51. .catch(next);
  52. };
  53. }
  54. exports.expressMiddleware = expressMiddleware;
  55. //# sourceMappingURL=index.js.map