| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 | // based on the qs module, but handles null objects as expected// fixes by Tomas Pollak.var toString = Object.prototype.toString;function stringify(obj, prefix) {  if (prefix && (obj === null || typeof obj == 'undefined')) {    return prefix + '=';  } else if (toString.call(obj) == '[object Array]') {    return stringifyArray(obj, prefix);  } else if (toString.call(obj) == '[object Object]') {    return stringifyObject(obj, prefix);  } else if (toString.call(obj) == '[object Date]') {    return obj.toISOString();  } else if (prefix) { // string inside array or hash    return prefix + '=' + encodeURIComponent(String(obj));  } else if (String(obj).indexOf('=') !== -1) { // string with equal sign    return String(obj);  } else {    throw new TypeError('Cannot build a querystring out of: ' + obj);  }};function stringifyArray(arr, prefix) {  var ret = [];  for (var i = 0, len = arr.length; i < len; i++) {    if (prefix)      ret.push(stringify(arr[i], prefix + '[]'));    else      ret.push(stringify(arr[i]));  }  return ret.join('&');}function stringifyObject(obj, prefix) {  var ret = [];  Object.keys(obj).forEach(function(key) {    ret.push(stringify(obj[key], prefix      ? prefix + '[' + encodeURIComponent(key) + ']'      : encodeURIComponent(key)));  })  return ret.join('&');}exports.build = stringify;
 |