send_sample_request_utils.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. //this block is used to make this module works with Node (CommonJS module format)
  2. if (typeof define !== 'function') {
  3. var define = require('amdefine')(module)
  4. }
  5. define([], function () {
  6. function handleNestedFields(object, key, params, paramType) {
  7. var attributes = key.split('.');
  8. var field = attributes[0];
  9. params.push(field);
  10. if (attributes.length > 1 && paramType[params.join('.')] == 'Object') {
  11. var nestedField = attributes.slice(1).join('.');
  12. if (!object[field])
  13. object[field] = {};
  14. if (typeof object[field] == 'object') {
  15. object[field][nestedField] = object[key];
  16. delete object[key];
  17. handleNestedFields(object[field], nestedField, params, paramType);
  18. }
  19. }
  20. }
  21. function handleNestedFieldsForAllParams(param, paramType) {
  22. var result = Object.assign({}, param);
  23. Object.keys(result).forEach(function (key) {
  24. handleNestedFields(result, key, [], paramType);
  25. });
  26. return result
  27. }
  28. function handleArraysAndObjectFields(param, paramType) {
  29. var result = Object.assign({}, param);
  30. Object.keys(paramType).forEach(function (key) {
  31. if (result[key] && (paramType[key].endsWith('[]') || paramType[key] === 'Object')) {
  32. try {
  33. result[key] = JSON.parse(result[key]);
  34. } catch (e) {;}
  35. }
  36. });
  37. return result
  38. }
  39. function handleNestedAndParsingFields(param, paramType) {
  40. var result = handleArraysAndObjectFields(param, paramType);
  41. result = handleNestedFieldsForAllParams(result, paramType);
  42. return result;
  43. }
  44. // Converts path params in the {param} format to the accepted :param format, used before inserting the URL params.
  45. function convertPathParams(url) {
  46. return url.replace(/{(.+?)}/g, ':$1');
  47. }
  48. return {handleNestedAndParsingFields,convertPathParams};
  49. });