%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/opti/workflow/node_modules/aws-sdk/lib/protocol/
Upload File :
Create Path :
Current File : /home/opti/workflow/node_modules/aws-sdk/lib/protocol/rest.js

var util = require('../util');

function populateMethod(req) {
  req.httpRequest.method = req.service.api.operations[req.operation].httpMethod;
}

function populateURI(req) {
  var operation = req.service.api.operations[req.operation];
  var input = operation.input;
  var uri = [req.httpRequest.endpoint.path, operation.httpPath].join('/');
  uri = uri.replace(/\/+/g, '/');

  var escapePathParamFn = req.service.escapePathParam || escapePathParam;
  var escapeQuerystringParamFn = req.service.escapeQuerystringParam ||
                                 escapeQuerystringParam;

  var queryString = {}, queryStringSet = false;
  util.each(input.members, function (name, member) {
    var paramValue = req.params[name];
    if (paramValue === null || paramValue === undefined) return;
    if (member.location === 'uri') {
      uri = uri.replace('{' + member.name + '}', escapePathParamFn(paramValue));
    } else if (member.location === 'querystring') {
      queryStringSet = true;
      queryString[member.name] = escapeQuerystringParamFn(paramValue);
    }
  });

  if (queryStringSet) {
    uri += (uri.indexOf('?') >= 0 ? '&' : '?');
    var parts = [];
    util.arrayEach(Object.keys(queryString).sort(), function(key) {
      parts.push(escapeQuerystringParam(key) + '=' + queryString[key]);
    });
    uri += parts.join('&');
  }

  req.httpRequest.path = uri;
}

function escapePathParam(value) {
  return util.uriEscape(String(value));
}

function escapeQuerystringParam(value) {
  return util.uriEscape(String(value));
}

function populateHeaders(req) {
  var operation = req.service.api.operations[req.operation];
  util.each(operation.input.members, function (name, member) {
    var value = req.params[name];
    if (value === null || value === undefined) return;

    if (member.location === 'headers' && member.type === 'map') {
      util.each(value, function(key, value) {
        req.httpRequest.headers[member.name + key] = value;
      });
    } else if (member.location === 'header') {
      value = member.toWireFormat(value).toString();
      req.httpRequest.headers[member.name] = value;
    }
  });
}

function buildRequest(req) {
  populateMethod(req);
  populateURI(req);
  populateHeaders(req);
}

function extractError() {
}

function extractData(resp) {
  var req = resp.request;
  var data = {};
  var r = resp.httpResponse;
  var operation = req.service.api.operations[req.operation];
  var output = operation.output;

  // normalize headers names to lower-cased keys for matching
  var headers = {};
  util.each(r.headers, function (k, v) {
    headers[k.toLowerCase()] = v;
  });

  util.each(output.members, function(name, member) {
    var header = (member.name || name).toLowerCase();
    if (member.location === 'headers' && member.type === 'map') {
      data[name] = {};
      util.each(r.headers, function (k, v) {
        var result = k.match(new RegExp('^' + member.name + '(.+)', 'i'));
        if (result !== null) {
          data[name][result[1]] = v;
        }
      });
    } else if (member.location === 'header') {
      if (headers[header] !== undefined) {
        data[name] = headers[header];
      }
    } else if (member.location === 'status') {
      data[name] = parseInt(r.statusCode, 10);
    }
  });

  resp.data = data;
}

module.exports = {
  buildRequest: buildRequest,
  extractError: extractError,
  extractData: extractData
};

Zerion Mini Shell 1.0