qs 0.6.2 → 0.6.6

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.
Files changed (2) hide show
  1. package/index.js +34 -20
  2. 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
  */
@@ -32,7 +37,11 @@ var isArray = Array.isArray || function(arr) {
32
37
 
33
38
  var objectKeys = Object.keys || function(obj) {
34
39
  var ret = [];
35
- for (var key in obj) ret.push(key);
40
+ for (var key in obj) {
41
+ if (obj.hasOwnProperty(key)) {
42
+ ret.push(key);
43
+ }
44
+ }
36
45
  return ret;
37
46
  };
38
47
 
@@ -57,16 +66,6 @@ var reduce = function(arr, fn, initial) {
57
66
  return res;
58
67
  };
59
68
 
60
- /**
61
- * Create a nullary object if possible
62
- */
63
-
64
- function createObject() {
65
- return Object.create
66
- ? Object.create(null)
67
- : {};
68
- }
69
-
70
69
  /**
71
70
  * Cache non-integer test regexp.
72
71
  */
@@ -74,15 +73,23 @@ function createObject() {
74
73
  var isint = /^[0-9]+$/;
75
74
 
76
75
  function promote(parent, key) {
77
- if (parent[key].length == 0) return parent[key] = createObject();
78
- var t = createObject();
79
- for (var i in parent[key]) t[i] = parent[key][i];
76
+ if (parent[key].length == 0) return parent[key] = {}
77
+ var t = {};
78
+ for (var i in parent[key]) {
79
+ if (hasOwnProperty.call(parent[key], i)) {
80
+ t[i] = parent[key][i];
81
+ }
82
+ }
80
83
  parent[key] = t;
81
84
  return t;
82
85
  }
83
86
 
84
87
  function parse(parts, parent, key, val) {
85
88
  var part = parts.shift();
89
+
90
+ // illegal
91
+ if (Object.getOwnPropertyDescriptor(Object.prototype, key)) return;
92
+
86
93
  // end
87
94
  if (!part) {
88
95
  if (isArray(parent[key])) {
@@ -131,7 +138,7 @@ function merge(parent, key, val){
131
138
  // optimize
132
139
  } else {
133
140
  if (!isint.test(key) && isArray(parent.base)) {
134
- var t = createObject();
141
+ var t = {};
135
142
  for (var k in parent.base) t[k] = parent.base[k];
136
143
  parent.base = t;
137
144
  }
@@ -142,7 +149,7 @@ function merge(parent, key, val){
142
149
  }
143
150
 
144
151
  /**
145
- * Compact sparse arrays
152
+ * Compact sparse arrays.
146
153
  */
147
154
 
148
155
  function compact(obj) {
@@ -150,7 +157,13 @@ function compact(obj) {
150
157
 
151
158
  if (isArray(obj)) {
152
159
  var ret = [];
153
- for (var i in obj) ret.push(obj[i]);
160
+
161
+ for (var i in obj) {
162
+ if (hasOwnProperty.call(obj, i)) {
163
+ ret.push(obj[i]);
164
+ }
165
+ }
166
+
154
167
  return ret;
155
168
  }
156
169
 
@@ -161,13 +174,13 @@ function compact(obj) {
161
174
  return obj;
162
175
  }
163
176
 
164
-
165
177
  /**
166
178
  * Parse the given obj.
167
179
  */
168
180
 
169
181
  function parseObject(obj){
170
182
  var ret = { base: {} };
183
+
171
184
  forEach(objectKeys(obj), function(name){
172
185
  merge(ret, name, obj[name]);
173
186
  });
@@ -192,7 +205,7 @@ function parseString(str){
192
205
  if ('' == key) return ret;
193
206
 
194
207
  return merge(ret, decode(key), decode(val));
195
- }, { base: createObject() }).base;
208
+ }, { base: {} }).base;
196
209
 
197
210
  return compact(ret);
198
211
  }
@@ -306,6 +319,7 @@ function stringifyObject(obj, prefix) {
306
319
 
307
320
  function set(obj, key, val) {
308
321
  var v = obj[key];
322
+ if (Object.getOwnPropertyDescriptor(Object.prototype, key)) return;
309
323
  if (undefined === v) {
310
324
  obj[key] = val;
311
325
  } else if (isArray(v)) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "qs",
3
3
  "description": "querystring parser",
4
- "version": "0.6.2",
4
+ "version": "0.6.6",
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": "*" }