query.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. var trim = require('./trim');
  2. var each = require('./each');
  3. var isUndef = require('./isUndef');
  4. var isArr = require('./isArr');
  5. var map = require('./map');
  6. var isEmpty = require('./isEmpty');
  7. var filter = require('./filter');
  8. var isObj = require('./isObj');
  9. exports = {
  10. parse: function(str) {
  11. var ret = {};
  12. str = trim(str).replace(regIllegalChars, '');
  13. each(str.split('&'), function(param) {
  14. var parts = param.split('=');
  15. var key = parts.shift(),
  16. val = parts.length > 0 ? parts.join('=') : null;
  17. key = decodeURIComponent(key);
  18. val = decodeURIComponent(val);
  19. if (isUndef(ret[key])) {
  20. ret[key] = val;
  21. } else if (isArr(ret[key])) {
  22. ret[key].push(val);
  23. } else {
  24. ret[key] = [ret[key], val];
  25. }
  26. });
  27. return ret;
  28. },
  29. stringify: function(obj, arrKey) {
  30. return filter(
  31. map(obj, function(val, key) {
  32. if (isObj(val) && isEmpty(val)) return '';
  33. if (isArr(val)) return exports.stringify(val, key);
  34. return (
  35. (arrKey
  36. ? encodeURIComponent(arrKey)
  37. : encodeURIComponent(key)) +
  38. '=' +
  39. encodeURIComponent(val)
  40. );
  41. }),
  42. function(str) {
  43. return str.length > 0;
  44. }
  45. ).join('&');
  46. }
  47. };
  48. var regIllegalChars = /^(\?|#|&)/g;
  49. module.exports = exports;