1 | const debug = require('debug')('upward-js:buildResponse');
|
2 | const { isPlainObject } = require('lodash');
|
3 | const ResolverVisitor = require('./ResolverVisitor');
|
4 | const Context = require('./Context');
|
5 |
|
6 | async 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 |
|
39 | module.exports = buildResponse;
|