git-off

git off handles large files in git repos
git clone https://noulin.net/git/git-off.git
Log | Files | Refs | README

rest_json.js (1847B)


      1 var util = require('../util');
      2 var Rest = require('./rest');
      3 var Json = require('./json');
      4 var JsonBuilder = require('../json/builder');
      5 var JsonParser = require('../json/parser');
      6 
      7 function populateBody(req) {
      8   var builder = new JsonBuilder();
      9   var input = req.service.api.operations[req.operation].input;
     10 
     11   if (input.payload) {
     12     var params = {};
     13     var payloadShape = input.members[input.payload];
     14     params = req.params[input.payload];
     15     if (params === undefined) return;
     16 
     17     if (payloadShape.type === 'structure') {
     18       req.httpRequest.body = builder.build(params, payloadShape);
     19     } else { // non-JSON payload
     20       req.httpRequest.body = params;
     21     }
     22   } else {
     23     req.httpRequest.body = builder.build(req.params, input);
     24   }
     25 }
     26 
     27 function buildRequest(req) {
     28   Rest.buildRequest(req);
     29 
     30   // never send body payload on GET/HEAD/DELETE
     31   if (['GET', 'HEAD', 'DELETE'].indexOf(req.httpRequest.method) < 0) {
     32     populateBody(req);
     33   }
     34 }
     35 
     36 function extractError(resp) {
     37   Json.extractError(resp);
     38 }
     39 
     40 function extractData(resp) {
     41   Rest.extractData(resp);
     42 
     43   var req = resp.request;
     44   var rules = req.service.api.operations[req.operation].output || {};
     45   if (rules.payload) {
     46     var payloadMember = rules.members[rules.payload];
     47     var body = resp.httpResponse.body;
     48     if (payloadMember.isStreaming) {
     49       resp.data[rules.payload] = body;
     50     } else if (payloadMember.type === 'structure' || payloadMember.type === 'list') {
     51       var parser = new JsonParser();
     52       resp.data[rules.payload] = parser.parse(body, payloadMember);
     53     } else {
     54       resp.data[rules.payload] = body.toString();
     55     }
     56   } else {
     57     var data = resp.data;
     58     Json.extractData(resp);
     59     resp.data = util.merge(data, resp.data);
     60   }
     61 }
     62 
     63 module.exports = {
     64   buildRequest: buildRequest,
     65   extractError: extractError,
     66   extractData: extractData
     67 };