git-off

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

query.js (2833B)


      1 var AWS = require('../core');
      2 var util = require('../util');
      3 var QueryParamSerializer = require('../query/query_param_serializer');
      4 var Shape = require('../model/shape');
      5 
      6 function buildRequest(req) {
      7   var operation = req.service.api.operations[req.operation];
      8   var httpRequest = req.httpRequest;
      9   httpRequest.headers['Content-Type'] =
     10     'application/x-www-form-urlencoded; charset=utf-8';
     11   httpRequest.params = {
     12     Version: req.service.api.apiVersion,
     13     Action: operation.name
     14   };
     15 
     16   // convert the request parameters into a list of query params,
     17   // e.g. Deeply.NestedParam.0.Name=value
     18   var builder = new QueryParamSerializer();
     19   builder.serialize(req.params, operation.input, function(name, value) {
     20     httpRequest.params[name] = value;
     21   });
     22   httpRequest.body = util.queryParamsToString(httpRequest.params);
     23 }
     24 
     25 function extractError(resp) {
     26   var data, body = resp.httpResponse.body.toString();
     27   if (body.match('<UnknownOperationException')) {
     28     data = {
     29       Code: 'UnknownOperation',
     30       Message: 'Unknown operation ' + resp.request.operation
     31     };
     32   } else {
     33     data = new AWS.XML.Parser().parse(body);
     34   }
     35 
     36   if (data.requestId && !resp.requestId) resp.requestId = data.requestId;
     37   if (data.Errors) data = data.Errors;
     38   if (data.Error) data = data.Error;
     39   if (data.Code) {
     40     resp.error = util.error(new Error(), {
     41       code: data.Code,
     42       message: data.Message
     43     });
     44   } else {
     45     resp.error = util.error(new Error(), {
     46       code: resp.httpResponse.statusCode,
     47       message: null
     48     });
     49   }
     50 }
     51 
     52 function extractData(resp) {
     53   var req = resp.request;
     54   var operation = req.service.api.operations[req.operation];
     55   var shape = operation.output || {};
     56   var origRules = shape;
     57 
     58   if (origRules.resultWrapper) {
     59     var tmp = Shape.create({type: 'structure'});
     60     tmp.members[origRules.resultWrapper] = shape;
     61     tmp.memberNames = [origRules.resultWrapper];
     62     util.property(shape, 'name', shape.resultWrapper);
     63     shape = tmp;
     64   }
     65 
     66   var parser = new AWS.XML.Parser();
     67 
     68   // TODO: Refactor XML Parser to parse RequestId from response.
     69   if (shape && shape.members && !shape.members._XAMZRequestId) {
     70     var requestIdShape = Shape.create(
     71       { type: 'string' },
     72       { api: { protocol: 'query' } },
     73       'requestId'
     74     );
     75     shape.members._XAMZRequestId = requestIdShape;
     76   }
     77 
     78   var data = parser.parse(resp.httpResponse.body.toString(), shape);
     79   resp.requestId = data._XAMZRequestId || data.requestId;
     80 
     81   if (data._XAMZRequestId) delete data._XAMZRequestId;
     82 
     83   if (origRules.resultWrapper) {
     84     if (data[origRules.resultWrapper]) {
     85       util.update(data, data[origRules.resultWrapper]);
     86       delete data[origRules.resultWrapper];
     87     }
     88   }
     89 
     90   resp.data = data;
     91 }
     92 
     93 module.exports = {
     94   buildRequest: buildRequest,
     95   extractError: extractError,
     96   extractData: extractData
     97 };