heroku-debug
Version:
debugging plugin for the CLI
68 lines (58 loc) • 1.85 kB
JavaScript
var util = require('../util');
var Rest = require('./rest');
var Json = require('./json');
var JsonBuilder = require('../json/builder');
var JsonParser = require('../json/parser');
function populateBody(req) {
var builder = new JsonBuilder();
var input = req.service.api.operations[req.operation].input;
if (input.payload) {
var params = {};
var payloadShape = input.members[input.payload];
params = req.params[input.payload];
if (params === undefined) return;
if (payloadShape.type === 'structure') {
req.httpRequest.body = builder.build(params, payloadShape);
} else { // non-JSON payload
req.httpRequest.body = params;
}
} else {
req.httpRequest.body = builder.build(req.params, input);
}
}
function buildRequest(req) {
Rest.buildRequest(req);
// never send body payload on GET/HEAD/DELETE
if (['GET', 'HEAD', 'DELETE'].indexOf(req.httpRequest.method) < 0) {
populateBody(req);
}
}
function extractError(resp) {
Json.extractError(resp);
}
function extractData(resp) {
Rest.extractData(resp);
var req = resp.request;
var rules = req.service.api.operations[req.operation].output || {};
if (rules.payload) {
var payloadMember = rules.members[rules.payload];
var body = resp.httpResponse.body;
if (payloadMember.isStreaming) {
resp.data[rules.payload] = body;
} else if (payloadMember.type === 'structure' || payloadMember.type === 'list') {
var parser = new JsonParser();
resp.data[rules.payload] = parser.parse(body, payloadMember);
} else {
resp.data[rules.payload] = body.toString();
}
} else {
var data = resp.data;
Json.extractData(resp);
resp.data = util.merge(data, resp.data);
}
}
module.exports = {
buildRequest: buildRequest,
extractError: extractError,
extractData: extractData
};