Blame view

node_modules/needle/lib/querystring.js 1.34 KB
7820380e   “wangming”   1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
  // 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;