parseBody.js 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. "use strict";
  2. var _ = require('../../../lodash'), sanitize = require('./sanitize').sanitize;
  3. /**
  4. * Used to parse the body of the postman SDK-request and return in the desired format
  5. *
  6. * @param {Object} request - postman SDK-request object
  7. * @param {Boolean} trimRequestBody - whether to trim request body fields
  8. * @param {String} indentation - used for indenting snippet's structure
  9. * @returns {String} - request body
  10. */
  11. module.exports = function (request, trimRequestBody, indentation) {
  12. // used to check whether body is present in the request and return accordingly
  13. if (request.body) {
  14. var requestBody = '', bodyMap, enabledBodyList;
  15. switch (request.body.mode) {
  16. case 'raw':
  17. if (!_.isEmpty(request.body[request.body.mode])) {
  18. requestBody += `${indentation}CURLOPT_POSTFIELDS =>` +
  19. `'${sanitize(request.body[request.body.mode], request.body.mode, trimRequestBody)}',\n`;
  20. }
  21. return requestBody;
  22. case 'graphql':
  23. // eslint-disable-next-line no-case-declarations
  24. let query = request.body[request.body.mode].query, graphqlVariables;
  25. try {
  26. graphqlVariables = JSON.parse(request.body[request.body.mode].variables);
  27. }
  28. catch (e) {
  29. graphqlVariables = {};
  30. }
  31. requestBody += `${indentation}CURLOPT_POSTFIELDS =>` +
  32. `'${sanitize(JSON.stringify({
  33. query: query,
  34. variables: graphqlVariables
  35. }), 'raw', trimRequestBody)}',\n`;
  36. return requestBody;
  37. case 'urlencoded':
  38. enabledBodyList = _.reject(request.body[request.body.mode], 'disabled');
  39. if (!_.isEmpty(enabledBodyList)) {
  40. bodyMap = _.map(enabledBodyList, function (value) {
  41. return `${sanitize(value.key, request.body.mode, trimRequestBody)}=` +
  42. `${sanitize(value.value, request.body.mode, trimRequestBody)}`;
  43. });
  44. requestBody = `${indentation}CURLOPT_POSTFIELDS => '${bodyMap.join('&')}',\n`;
  45. }
  46. return requestBody;
  47. case 'formdata':
  48. enabledBodyList = _.reject(request.body[request.body.mode], 'disabled');
  49. if (!_.isEmpty(enabledBodyList)) {
  50. bodyMap = _.map(enabledBodyList, function (value) {
  51. if (value.type === 'text') {
  52. return (`'${sanitize(value.key, request.body.mode, trimRequestBody)}' => '` +
  53. `${sanitize(value.value, request.body.mode, trimRequestBody)}'`);
  54. }
  55. else if (value.type === 'file') {
  56. return `'${sanitize(value.key, request.body.mode, trimRequestBody)}'=> ` +
  57. `new CURLFILE('${sanitize(value.src, request.body.mode, trimRequestBody)}')`;
  58. }
  59. });
  60. requestBody = `${indentation}CURLOPT_POSTFIELDS => [${bodyMap.join(',')}],\n`;
  61. }
  62. return requestBody;
  63. case 'file':
  64. // requestBody = `${indentation}CURLOPT_POSTFIELDS => array('file' => '@'`;
  65. // requestBody += `${sanitize(request.body[request.body.mode].src,
  66. // request.body.mode, trimRequestBody)}'),\n`;
  67. requestBody = `${indentation}CURLOPT_POSTFIELDS => "<file contents here>",\n`;
  68. return requestBody;
  69. default:
  70. return requestBody;
  71. }
  72. }
  73. return '';
  74. };