summaryrefslogtreecommitdiff
path: root/lib/querystring.js
diff options
context:
space:
mode:
authorisaacs <i@izs.me>2010-06-14 21:13:09 -0700
committerRyan Dahl <ry@tinyclouds.org>2010-06-15 19:28:09 -0700
commit4ce100fa622d97de51d7cccde2301653ee95bbe7 (patch)
treee444343839119234c17da0175d2bf48ada39ce1a /lib/querystring.js
parented5f4f3a444e155292db2be6b499528c279fdefb (diff)
downloadandroid-node-v8-4ce100fa622d97de51d7cccde2301653ee95bbe7.tar.gz
android-node-v8-4ce100fa622d97de51d7cccde2301653ee95bbe7.tar.bz2
android-node-v8-4ce100fa622d97de51d7cccde2301653ee95bbe7.zip
A replacement for decodeURIComponent that doesn't throw.
And add a few more tests.
Diffstat (limited to 'lib/querystring.js')
-rw-r--r--lib/querystring.js34
1 files changed, 11 insertions, 23 deletions
diff --git a/lib/querystring.js b/lib/querystring.js
index df19123351..eb415bca3b 100644
--- a/lib/querystring.js
+++ b/lib/querystring.js
@@ -1,10 +1,10 @@
// Query String Utilities
var QueryString = exports;
+var urlDecode = process.binding('http_parser').urlDecode;
-QueryString.unescape = function (str, decodeSpaces) {
- return decodeURIComponent(decodeSpaces ? str.replace(/\+/g, " ") : str);
-};
+// a safe fast alternative to decodeURIComponent
+QueryString.unescape = urlDecode;
QueryString.escape = function (str) {
return encodeURIComponent(str);
@@ -25,17 +25,17 @@ var stack = [];
* @param name {String} (optional) Name of the current key, for handling children recursively.
* @static
*/
-QueryString.stringify = function (obj, sep, eq, munge, name) {
+QueryString.stringify = QueryString.encode = function (obj, sep, eq, munge, name) {
munge = typeof(munge) == "undefined" ? true : munge;
sep = sep || "&";
eq = eq || "=";
if (isA(obj, null) || isA(obj, undefined) || typeof(obj) === 'function') {
- return name ? encodeURIComponent(name) + eq : '';
+ return name ? QueryString.escape(name) + eq : '';
}
if (isBool(obj)) obj = +obj;
if (isNumber(obj) || isString(obj)) {
- return encodeURIComponent(name) + eq + encodeURIComponent(obj);
+ return QueryString.escape(name) + eq + QueryString.escape(obj);
}
if (isA(obj, [])) {
var s = [];
@@ -71,11 +71,11 @@ QueryString.stringify = function (obj, sep, eq, munge, name) {
return s;
};
-QueryString.parseQuery = QueryString.parse = function (qs, sep, eq) {
+QueryString.parse = QueryString.decode = function (qs, sep, eq) {
return (qs || '')
.split(sep||"&")
.map(pieceParser(eq||"="))
- .reduce(mergeParams);
+ .reduce(mergeParams)
};
// Parse a key=val string.
@@ -87,26 +87,14 @@ QueryString.parseQuery = QueryString.parse = function (qs, sep, eq) {
// return parse(foo[bar], [{bla:"baz"}])
// return parse(foo, {bar:[{bla:"baz"}]})
// return {foo:{bar:[{bla:"baz"}]}}
-var trimmerPattern = /^\s+|\s+$/g,
- slicerPattern = /(.*)\[([^\]]*)\]$/;
+var slicerPattern = /(.*)\[([^\]]*)\]$/;
var pieceParser = function (eq) {
return function parsePiece (key, val) {
if (arguments.length !== 2) {
// key=val, called from the map/reduce
key = key.split(eq);
- return parsePiece(
- QueryString.unescape(key.shift(), true),
- QueryString.unescape(key.join(eq), true)
- );
- }
- key = key.replace(trimmerPattern, '');
- if (isString(val)) {
- val = val.replace(trimmerPattern, '');
- // convert numerals to numbers
- if (!isNaN(val)) {
- var numVal = +val;
- if (val === numVal.toString(10)) val = numVal;
- }
+ return parsePiece(QueryString.unescape(key.shift(), true),
+ QueryString.unescape(key.join(eq), true));
}
var sliced = slicerPattern.exec(key);
if (!sliced) {