Sha256: a800573babcf62a26af0ff33244f86073b0e050cbed220570906c71400bb30fa

Contents?: true

Size: 1.31 KB

Versions: 21

Compression:

Stored size: 1.31 KB

Contents

/**
 * Module dependencies.
 */

var encode = encodeURIComponent;
var decode = decodeURIComponent;
var trim = require('trim');
var type = require('type');

/**
 * Parse the given query `str`.
 *
 * @param {String} str
 * @return {Object}
 * @api public
 */

exports.parse = function(str){
  if ('string' != typeof str) return {};

  str = trim(str);
  if ('' == str) return {};
  if ('?' == str.charAt(0)) str = str.slice(1);

  var obj = {};
  var pairs = str.split('&');
  for (var i = 0; i < pairs.length; i++) {
    var parts = pairs[i].split('=');
    var key = decode(parts[0]);
    var m;

    if (m = /(\w+)\[(\d+)\]/.exec(key)) {
      obj[m[1]] = obj[m[1]] || [];
      obj[m[1]][m[2]] = decode(parts[1]);
      continue;
    }

    obj[parts[0]] = null == parts[1]
      ? ''
      : decode(parts[1]);
  }

  return obj;
};

/**
 * Stringify the given `obj`.
 *
 * @param {Object} obj
 * @return {String}
 * @api public
 */

exports.stringify = function(obj){
  if (!obj) return '';
  var pairs = [];

  for (var key in obj) {
    var value = obj[key];

    if ('array' == type(value)) {
      for (var i = 0; i < value.length; ++i) {
        pairs.push(encode(key + '[' + i + ']') + '=' + encode(value[i]));
      }
      continue;
    }

    pairs.push(encode(key) + '=' + encode(obj[key]));
  }

  return pairs.join('&');
};

Version data entries

21 entries across 21 versions & 1 rubygems

Version Path
ende-0.5.22 components/component/querystring/1.3.0/index.js
ende-0.5.21 components/component/querystring/1.3.0/index.js
ende-0.5.20 components/component/querystring/1.3.0/index.js
ende-0.5.19 components/component/querystring/1.3.0/index.js
ende-0.5.18 components/component/querystring/1.3.0/index.js
ende-0.5.17 components/component/querystring/1.3.0/index.js
ende-0.5.16 components/component/querystring/1.3.0/index.js
ende-0.5.15 components/component/querystring/1.3.0/index.js
ende-0.5.14 components/component/querystring/1.3.0/index.js
ende-0.5.13 components/component/querystring/1.3.0/index.js
ende-0.5.12 components/component/querystring/1.3.0/index.js
ende-0.5.10 components/component/querystring/1.3.0/index.js
ende-0.5.9 components/component/querystring/1.3.0/index.js
ende-0.5.8 components/component/querystring/1.3.0/index.js
ende-0.5.7 components/component/querystring/1.3.0/index.js
ende-0.5.6 components/component/querystring/1.3.0/index.js
ende-0.5.5 components/component/querystring/1.3.0/index.js
ende-0.5.4 components/component/querystring/1.3.0/index.js
ende-0.5.3 components/component/querystring/1.3.0/index.js
ende-0.5.2 components/component/querystring/1.3.0/index.js