git-off

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

json.js (1956B)


      1 var util = require('../util');
      2 var JsonBuilder = require('../json/builder');
      3 var JsonParser = require('../json/parser');
      4 
      5 function buildRequest(req) {
      6   var httpRequest = req.httpRequest;
      7   var api = req.service.api;
      8   var target = api.targetPrefix + '.' + api.operations[req.operation].name;
      9   var version = api.jsonVersion || '1.0';
     10   var input = api.operations[req.operation].input;
     11   var builder = new JsonBuilder();
     12 
     13   if (version === 1) version = '1.0';
     14   httpRequest.body = builder.build(req.params || {}, input);
     15   httpRequest.headers['Content-Type'] = 'application/x-amz-json-' + version;
     16   httpRequest.headers['X-Amz-Target'] = target;
     17 }
     18 
     19 function extractError(resp) {
     20   var error = {};
     21   var httpResponse = resp.httpResponse;
     22 
     23   error.code = httpResponse.headers['x-amzn-errortype'] || 'UnknownError';
     24   if (typeof error.code === 'string') {
     25     error.code = error.code.split(':')[0];
     26   }
     27 
     28   if (httpResponse.body.length > 0) {
     29     var e = JSON.parse(httpResponse.body.toString());
     30     if (e.__type || e.code) {
     31       error.code = (e.__type || e.code).split('#').pop();
     32     }
     33     if (error.code === 'RequestEntityTooLarge') {
     34       error.message = 'Request body must be less than 1 MB';
     35     } else {
     36       error.message = (e.message || e.Message || null);
     37     }
     38   } else {
     39     error.statusCode = httpResponse.statusCode;
     40     error.message = httpResponse.statusCode.toString();
     41   }
     42 
     43   resp.error = util.error(new Error(), error);
     44 }
     45 
     46 function extractData(resp) {
     47   var body = resp.httpResponse.body.toString() || '{}';
     48   if (resp.request.service.config.convertResponseTypes === false) {
     49     resp.data = JSON.parse(body);
     50   } else {
     51     var operation = resp.request.service.api.operations[resp.request.operation];
     52     var shape = operation.output || {};
     53     var parser = new JsonParser();
     54     resp.data = parser.parse(body, shape);
     55   }
     56 }
     57 
     58 module.exports = {
     59   buildRequest: buildRequest,
     60   extractError: extractError,
     61   extractData: extractData
     62 };