UNPKG

1.23 kBJavaScriptView Raw
1const debug = require('debug')('upward-js:buildResponse');
2const { isPlainObject } = require('lodash');
3const ResolverVisitor = require('./ResolverVisitor');
4const Context = require('./Context');
5
6async function buildResponse(io, env, rootDefinition, request, upwardPath) {
7 debug('creating Context');
8 const requestContext = Context.fromRequest(env, request);
9 debug('creating ResolverVisitor');
10 const visitor = new ResolverVisitor(
11 io,
12 rootDefinition,
13 requestContext,
14 upwardPath
15 );
16 debug('visiting for status, headers, and body');
17 try {
18 const responseData = await visitor.downward([
19 'status',
20 'headers',
21 'body'
22 ]);
23 if (isPlainObject(responseData)) {
24 debug('successfully built response, %O', responseData);
25 return {
26 status: Number(responseData.status),
27 headers: responseData.headers,
28 body: responseData.body
29 };
30 } else {
31 debug('visitor returned request-handling middleware');
32 return responseData;
33 }
34 } catch (e) {
35 throw new Error(e.stack);
36 }
37}
38
39module.exports = buildResponse;