url.ts 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /**
  2. * @preserve jquery-param (c) 2015 KNOWLEDGECODE | MIT
  3. */
  4. export function toUrlParams(a) {
  5. let s = [];
  6. let rbracket = /\[\]$/;
  7. let isArray = function(obj) {
  8. return Object.prototype.toString.call(obj) === '[object Array]';
  9. };
  10. let add = function(k, v) {
  11. v = typeof v === 'function' ? v() : v === null ? '' : v === undefined ? '' : v;
  12. if (typeof v !== 'boolean') {
  13. s[s.length] = encodeURIComponent(k) + '=' + encodeURIComponent(v);
  14. } else {
  15. s[s.length] = encodeURIComponent(k);
  16. }
  17. };
  18. let buildParams = function(prefix, obj) {
  19. var i, len, key;
  20. if (prefix) {
  21. if (isArray(obj)) {
  22. for (i = 0, len = obj.length; i < len; i++) {
  23. if (rbracket.test(prefix)) {
  24. add(prefix, obj[i]);
  25. } else {
  26. buildParams(prefix, obj[i]);
  27. }
  28. }
  29. } else if (obj && String(obj) === '[object Object]') {
  30. for (key in obj) {
  31. buildParams(prefix + '[' + key + ']', obj[key]);
  32. }
  33. } else {
  34. add(prefix, obj);
  35. }
  36. } else if (isArray(obj)) {
  37. for (i = 0, len = obj.length; i < len; i++) {
  38. add(obj[i].name, obj[i].value);
  39. }
  40. } else {
  41. for (key in obj) {
  42. buildParams(key, obj[key]);
  43. }
  44. }
  45. return s;
  46. };
  47. return buildParams('', a)
  48. .join('&')
  49. .replace(/%20/g, '+');
  50. }