qs 0.6.1 → 0.6.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +63 -4
- package/package.json +1 -6
package/index.js
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
|
|
2
1
|
/**
|
|
3
2
|
* Object#toString() ref for stringify().
|
|
4
3
|
*/
|
|
5
4
|
|
|
6
5
|
var toString = Object.prototype.toString;
|
|
7
6
|
|
|
7
|
+
/**
|
|
8
|
+
* Object#hasOwnProperty ref
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
var hasOwnProperty = Object.prototype.hasOwnProperty;
|
|
12
|
+
|
|
8
13
|
/**
|
|
9
14
|
* Array#indexOf shim.
|
|
10
15
|
*/
|
|
@@ -76,7 +81,11 @@ var isint = /^[0-9]+$/;
|
|
|
76
81
|
function promote(parent, key) {
|
|
77
82
|
if (parent[key].length == 0) return parent[key] = createObject();
|
|
78
83
|
var t = createObject();
|
|
79
|
-
for (var i in parent[key])
|
|
84
|
+
for (var i in parent[key]) {
|
|
85
|
+
if (hasOwnProperty.call(parent[key], i)) {
|
|
86
|
+
t[i] = parent[key][i];
|
|
87
|
+
}
|
|
88
|
+
}
|
|
80
89
|
parent[key] = t;
|
|
81
90
|
return t;
|
|
82
91
|
}
|
|
@@ -141,16 +150,64 @@ function merge(parent, key, val){
|
|
|
141
150
|
return parent;
|
|
142
151
|
}
|
|
143
152
|
|
|
153
|
+
/**
|
|
154
|
+
* Compact sparse arrays.
|
|
155
|
+
*/
|
|
156
|
+
|
|
157
|
+
function compact(obj) {
|
|
158
|
+
if ('object' != typeof obj) return obj;
|
|
159
|
+
|
|
160
|
+
if (isArray(obj)) {
|
|
161
|
+
var ret = [];
|
|
162
|
+
|
|
163
|
+
for (var i in obj) {
|
|
164
|
+
if (hasOwnProperty.call(obj, i)) {
|
|
165
|
+
ret.push(obj[i]);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
return ret;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
for (var key in obj) {
|
|
173
|
+
obj[key] = compact(obj[key]);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
return obj;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Restore Object.prototype.
|
|
181
|
+
* see pull-request #58
|
|
182
|
+
*/
|
|
183
|
+
|
|
184
|
+
function restoreProto(obj) {
|
|
185
|
+
if (!Object.create) return obj;
|
|
186
|
+
if (isArray(obj)) return obj;
|
|
187
|
+
if (obj && 'object' != typeof obj) return obj;
|
|
188
|
+
|
|
189
|
+
for (var key in obj) {
|
|
190
|
+
if (hasOwnProperty.call(obj, key)) {
|
|
191
|
+
obj[key] = restoreProto(obj[key]);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
obj.__proto__ = Object.prototype;
|
|
196
|
+
return obj;
|
|
197
|
+
}
|
|
198
|
+
|
|
144
199
|
/**
|
|
145
200
|
* Parse the given obj.
|
|
146
201
|
*/
|
|
147
202
|
|
|
148
203
|
function parseObject(obj){
|
|
149
204
|
var ret = { base: {} };
|
|
205
|
+
|
|
150
206
|
forEach(objectKeys(obj), function(name){
|
|
151
207
|
merge(ret, name, obj[name]);
|
|
152
208
|
});
|
|
153
|
-
|
|
209
|
+
|
|
210
|
+
return compact(ret.base);
|
|
154
211
|
}
|
|
155
212
|
|
|
156
213
|
/**
|
|
@@ -158,7 +215,7 @@ function parseObject(obj){
|
|
|
158
215
|
*/
|
|
159
216
|
|
|
160
217
|
function parseString(str){
|
|
161
|
-
|
|
218
|
+
var ret = reduce(String(str).split('&'), function(ret, pair){
|
|
162
219
|
var eql = indexOf(pair, '=')
|
|
163
220
|
, brace = lastBraceInKey(pair)
|
|
164
221
|
, key = pair.substr(0, brace || eql)
|
|
@@ -171,6 +228,8 @@ function parseString(str){
|
|
|
171
228
|
|
|
172
229
|
return merge(ret, decode(key), decode(val));
|
|
173
230
|
}, { base: createObject() }).base;
|
|
231
|
+
|
|
232
|
+
return restoreProto(compact(ret));
|
|
174
233
|
}
|
|
175
234
|
|
|
176
235
|
/**
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "qs",
|
|
3
3
|
"description": "querystring parser",
|
|
4
|
-
"version": "0.6.
|
|
4
|
+
"version": "0.6.5",
|
|
5
5
|
"keywords": ["query string", "parser", "component"],
|
|
6
6
|
"repository": {
|
|
7
7
|
"type" : "git",
|
|
@@ -14,11 +14,6 @@
|
|
|
14
14
|
"scripts": {
|
|
15
15
|
"test": "make test"
|
|
16
16
|
},
|
|
17
|
-
"component": {
|
|
18
|
-
"scripts": {
|
|
19
|
-
"querystring": "querystring.js"
|
|
20
|
-
}
|
|
21
|
-
},
|
|
22
17
|
"author": "TJ Holowaychuk <tj@vision-media.ca> (http://tjholowaychuk.com)",
|
|
23
18
|
"main": "index",
|
|
24
19
|
"engines": { "node": "*" }
|