Socket
Socket
Sign inDemoInstall

qs

Package Overview
Dependencies
Maintainers
1
Versions
113
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

qs - npm Package Compare versions

Comparing version 0.3.2 to 0.4.0

test/mocha.opts

6

History.md
0.4.0 / 2011-11-21
==================
* Allow parsing of an existing object (for `bodyParser()`) [jackyz]
* Replaced expresso with mocha
0.3.2 / 2011-11-08

@@ -3,0 +9,0 @@ ==================

172

lib/querystring.js

@@ -0,1 +1,2 @@

/*!

@@ -11,3 +12,3 @@ * querystring

exports.version = '0.3.2';
exports.version = '0.4.0';

@@ -26,25 +27,91 @@ /**

function promote(parent, key) {
if (parent[key].length == 0) return parent[key] = {};
var t = {};
for (var i in parent[key]) t[i] = parent[key][i];
parent[key] = t;
return t;
}
function parse(parts, parent, key, val) {
var part = parts.shift();
// end
if (!part) {
if (Array.isArray(parent[key])) {
parent[key].push(val);
} else if ('object' == typeof parent[key]) {
parent[key] = val;
} else if ('undefined' == typeof parent[key]) {
parent[key] = val;
} else {
parent[key] = [parent[key], val];
}
// array
} else {
var obj = parent[key] = parent[key] || [];
if (']' == part) {
if (Array.isArray(obj)) {
if ('' != val) obj.push(val);
} else if ('object' == typeof obj) {
obj[Object.keys(obj).length] = val;
} else {
obj = parent[key] = [parent[key], val];
}
// prop
} else if (~part.indexOf(']')) {
part = part.substr(0, part.length - 1);
if(notint.test(part) && Array.isArray(obj)) obj = promote(parent, key);
parse(parts, obj, part, val);
// key
} else {
if(notint.test(part) && Array.isArray(obj)) obj = promote(parent, key);
parse(parts, obj, part, val);
}
}
}
/**
* Parse the given query `str`, returning an object.
*
* @param {String} str
* @return {Object}
* @api public
* Merge parent key/val pair.
*/
exports.parse = function(str){
if (null == str || '' == str) return {};
function promote(parent, key) {
if (parent[key].length == 0) return parent[key] = {};
var t = {};
for (var i in parent[key]) t[i] = parent[key][i];
parent[key] = t;
return t;
function merge(parent, key, val){
if (~key.indexOf(']')) {
var parts = key.split('[')
, len = parts.length
, last = len - 1;
parse(parts, parent, 'base', val);
// optimize
} else {
if (notint.test(key) && Array.isArray(parent.base)) {
var t = {};
for (var k in parent.base) t[k] = parent.base[k];
parent.base = t;
}
set(parent.base, key, val);
}
return parent;
}
/**
* Parse the given obj.
*/
function parseObject(obj){
var ret = { base: {} };
Object.keys(obj).forEach(function(name){
merge(ret, name, obj[name]);
});
return ret.base;
}
/**
* Parse the given str.
*/
function parseString(str){
return String(str)
.split('&')
.reduce(function(ret, pair){
try{
try{
pair = decodeURIComponent(pair.replace(/\+/g, ' '));

@@ -59,4 +126,3 @@ } catch(e) {

, val = pair.substr(brace || eql, pair.length)
, val = val.substr(val.indexOf('=') + 1, val.length)
, parent = ret;
, val = val.substr(val.indexOf('=') + 1, val.length);

@@ -66,59 +132,19 @@ // ?foo

// nested
if (~key.indexOf(']')) {
var parts = key.split('[')
, len = parts.length
, last = len - 1;
return merge(ret, key, val);
}, { base: {} }).base;
}
function parse(parts, parent, key) {
var part = parts.shift();
/**
* Parse the given query `str` or `obj`, returning an object.
*
* @param {String} str | {Object} obj
* @return {Object}
* @api public
*/
// end
if (!part) {
if (Array.isArray(parent[key])) {
parent[key].push(val);
} else if ('object' == typeof parent[key]) {
parent[key] = val;
} else if ('undefined' == typeof parent[key]) {
parent[key] = val;
} else {
parent[key] = [parent[key], val];
}
// array
} else {
var obj = parent[key] = parent[key] || [];
if (']' == part) {
if (Array.isArray(obj)) {
if ('' != val) obj.push(val);
} else if ('object' == typeof obj) {
obj[Object.keys(obj).length] = val;
} else {
obj = parent[key] = [parent[key], val];
}
// prop
} else if (~part.indexOf(']')) {
part = part.substr(0, part.length - 1);
if(notint.test(part) && Array.isArray(obj)) obj = promote(parent, key);
parse(parts, obj, part);
// key
} else {
if(notint.test(part) && Array.isArray(obj)) obj = promote(parent, key);
parse(parts, obj, part);
}
}
}
parse(parts, parent, 'base');
// optimize
} else {
if (notint.test(key) && Array.isArray(parent.base)) {
var t = {};
for(var k in parent.base) t[k] = parent.base[k];
parent.base = t;
}
set(parent.base, key, val);
}
return ret;
}, {base: {}}).base;
exports.parse = function(str){
if (null == str || '' == str) return {};
return 'object' == typeof str
? parseObject(str)
: parseString(str);
};

@@ -125,0 +151,0 @@

{
"name": "qs",
"description": "querystring parser",
"version": "0.3.2",
"version": "0.4.0",
"repository": {

@@ -10,3 +10,3 @@ "type" : "git",

"devDependencies": {
"expresso": "0.9.2"
"mocha": "*"
, "should": "*"

@@ -13,0 +13,0 @@ },

@@ -9,3 +9,2 @@ # node-querystring

## Examples

@@ -18,6 +17,5 @@

Update git submodules:
Install dev dependencies:
$ git submodule init
$ git submodule update
$ npm install -d

@@ -24,0 +22,0 @@ and execute:

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc