qs 5.2.0 → 6.0.2
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/.eslintrc +17 -0
- package/.travis.yml +66 -5
- package/CHANGELOG.md +86 -75
- package/README.md +85 -81
- package/bower.json +1 -1
- package/component.json +1 -1
- package/dist/qs.js +108 -177
- package/lib/index.js +1 -7
- package/lib/parse.js +26 -49
- package/lib/stringify.js +22 -46
- package/lib/utils.js +45 -73
- package/package.json +28 -11
- package/test/index.js +5 -0
- package/test/parse.js +236 -321
- package/test/stringify.js +139 -197
- package/test/utils.js +6 -25
package/dist/qs.js
CHANGED
|
@@ -1,28 +1,19 @@
|
|
|
1
1
|
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Qs = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
|
|
2
|
-
|
|
2
|
+
'use strict';
|
|
3
3
|
|
|
4
4
|
var Stringify = require('./stringify');
|
|
5
5
|
var Parse = require('./parse');
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
// Declare internals
|
|
9
|
-
|
|
10
|
-
var internals = {};
|
|
11
|
-
|
|
12
|
-
|
|
13
7
|
module.exports = {
|
|
14
8
|
stringify: Stringify,
|
|
15
9
|
parse: Parse
|
|
16
10
|
};
|
|
17
11
|
|
|
18
12
|
},{"./parse":2,"./stringify":3}],2:[function(require,module,exports){
|
|
19
|
-
|
|
13
|
+
'use strict';
|
|
20
14
|
|
|
21
15
|
var Utils = require('./utils');
|
|
22
16
|
|
|
23
|
-
|
|
24
|
-
// Declare internals
|
|
25
|
-
|
|
26
17
|
var internals = {
|
|
27
18
|
delimiter: '&',
|
|
28
19
|
depth: 5,
|
|
@@ -34,13 +25,11 @@ var internals = {
|
|
|
34
25
|
allowDots: false
|
|
35
26
|
};
|
|
36
27
|
|
|
37
|
-
|
|
38
28
|
internals.parseValues = function (str, options) {
|
|
39
|
-
|
|
40
29
|
var obj = {};
|
|
41
30
|
var parts = str.split(options.delimiter, options.parameterLimit === Infinity ? undefined : options.parameterLimit);
|
|
42
31
|
|
|
43
|
-
for (var i = 0
|
|
32
|
+
for (var i = 0; i < parts.length; ++i) {
|
|
44
33
|
var part = parts[i];
|
|
45
34
|
var pos = part.indexOf(']=') === -1 ? part.indexOf('=') : part.indexOf(']=') + 1;
|
|
46
35
|
|
|
@@ -50,16 +39,14 @@ internals.parseValues = function (str, options) {
|
|
|
50
39
|
if (options.strictNullHandling) {
|
|
51
40
|
obj[Utils.decode(part)] = null;
|
|
52
41
|
}
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
42
|
+
} else {
|
|
55
43
|
var key = Utils.decode(part.slice(0, pos));
|
|
56
44
|
var val = Utils.decode(part.slice(pos + 1));
|
|
57
45
|
|
|
58
|
-
if (
|
|
59
|
-
obj[key] = val;
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
46
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
62
47
|
obj[key] = [].concat(obj[key]).concat(val);
|
|
48
|
+
} else {
|
|
49
|
+
obj[key] = val;
|
|
63
50
|
}
|
|
64
51
|
}
|
|
65
52
|
}
|
|
@@ -67,9 +54,7 @@ internals.parseValues = function (str, options) {
|
|
|
67
54
|
return obj;
|
|
68
55
|
};
|
|
69
56
|
|
|
70
|
-
|
|
71
57
|
internals.parseObject = function (chain, val, options) {
|
|
72
|
-
|
|
73
58
|
if (!chain.length) {
|
|
74
59
|
return val;
|
|
75
60
|
}
|
|
@@ -80,23 +65,20 @@ internals.parseObject = function (chain, val, options) {
|
|
|
80
65
|
if (root === '[]') {
|
|
81
66
|
obj = [];
|
|
82
67
|
obj = obj.concat(internals.parseObject(chain, val, options));
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
68
|
+
} else {
|
|
85
69
|
obj = options.plainObjects ? Object.create(null) : {};
|
|
86
70
|
var cleanRoot = root[0] === '[' && root[root.length - 1] === ']' ? root.slice(1, root.length - 1) : root;
|
|
87
71
|
var index = parseInt(cleanRoot, 10);
|
|
88
|
-
|
|
89
|
-
|
|
72
|
+
if (
|
|
73
|
+
!isNaN(index) &&
|
|
90
74
|
root !== cleanRoot &&
|
|
91
|
-
|
|
75
|
+
String(index) === cleanRoot &&
|
|
92
76
|
index >= 0 &&
|
|
93
|
-
(options.parseArrays &&
|
|
94
|
-
|
|
95
|
-
|
|
77
|
+
(options.parseArrays && index <= options.arrayLimit)
|
|
78
|
+
) {
|
|
96
79
|
obj = [];
|
|
97
80
|
obj[index] = internals.parseObject(chain, val, options);
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
81
|
+
} else {
|
|
100
82
|
obj[cleanRoot] = internals.parseObject(chain, val, options);
|
|
101
83
|
}
|
|
102
84
|
}
|
|
@@ -104,18 +86,13 @@ internals.parseObject = function (chain, val, options) {
|
|
|
104
86
|
return obj;
|
|
105
87
|
};
|
|
106
88
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
if (!key) {
|
|
89
|
+
internals.parseKeys = function (givenKey, val, options) {
|
|
90
|
+
if (!givenKey) {
|
|
111
91
|
return;
|
|
112
92
|
}
|
|
113
93
|
|
|
114
94
|
// Transform dot notation to bracket notation
|
|
115
|
-
|
|
116
|
-
if (options.allowDots) {
|
|
117
|
-
key = key.replace(/\.([^\.\[]+)/g, '[$1]');
|
|
118
|
-
}
|
|
95
|
+
var key = options.allowDots ? givenKey.replace(/\.([^\.\[]+)/g, '[$1]') : givenKey;
|
|
119
96
|
|
|
120
97
|
// The regex chunks
|
|
121
98
|
|
|
@@ -132,9 +109,7 @@ internals.parseKeys = function (key, val, options) {
|
|
|
132
109
|
if (segment[1]) {
|
|
133
110
|
// If we aren't using plain objects, optionally prefix keys
|
|
134
111
|
// that would overwrite object prototype properties
|
|
135
|
-
if (!options.plainObjects &&
|
|
136
|
-
Object.prototype.hasOwnProperty(segment[1])) {
|
|
137
|
-
|
|
112
|
+
if (!options.plainObjects && Object.prototype.hasOwnProperty(segment[1])) {
|
|
138
113
|
if (!options.allowPrototypes) {
|
|
139
114
|
return;
|
|
140
115
|
}
|
|
@@ -147,11 +122,8 @@ internals.parseKeys = function (key, val, options) {
|
|
|
147
122
|
|
|
148
123
|
var i = 0;
|
|
149
124
|
while ((segment = child.exec(key)) !== null && i < options.depth) {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
if (!options.plainObjects &&
|
|
153
|
-
Object.prototype.hasOwnProperty(segment[1].replace(/\[|\]/g, ''))) {
|
|
154
|
-
|
|
125
|
+
i += 1;
|
|
126
|
+
if (!options.plainObjects && Object.prototype.hasOwnProperty(segment[1].replace(/\[|\]/g, ''))) {
|
|
155
127
|
if (!options.allowPrototypes) {
|
|
156
128
|
continue;
|
|
157
129
|
}
|
|
@@ -168,10 +140,8 @@ internals.parseKeys = function (key, val, options) {
|
|
|
168
140
|
return internals.parseObject(keys, val, options);
|
|
169
141
|
};
|
|
170
142
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
options = options || {};
|
|
143
|
+
module.exports = function (str, opts) {
|
|
144
|
+
var options = opts || {};
|
|
175
145
|
options.delimiter = typeof options.delimiter === 'string' || Utils.isRegExp(options.delimiter) ? options.delimiter : internals.delimiter;
|
|
176
146
|
options.depth = typeof options.depth === 'number' ? options.depth : internals.depth;
|
|
177
147
|
options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : internals.arrayLimit;
|
|
@@ -182,10 +152,11 @@ module.exports = function (str, options) {
|
|
|
182
152
|
options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : internals.parameterLimit;
|
|
183
153
|
options.strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : internals.strictNullHandling;
|
|
184
154
|
|
|
185
|
-
if (
|
|
155
|
+
if (
|
|
156
|
+
str === '' ||
|
|
186
157
|
str === null ||
|
|
187
|
-
typeof str === 'undefined'
|
|
188
|
-
|
|
158
|
+
typeof str === 'undefined'
|
|
159
|
+
) {
|
|
189
160
|
return options.plainObjects ? Object.create(null) : {};
|
|
190
161
|
}
|
|
191
162
|
|
|
@@ -195,7 +166,7 @@ module.exports = function (str, options) {
|
|
|
195
166
|
// Iterate over the keys and setup the new object
|
|
196
167
|
|
|
197
168
|
var keys = Object.keys(tempObj);
|
|
198
|
-
for (var i = 0
|
|
169
|
+
for (var i = 0; i < keys.length; ++i) {
|
|
199
170
|
var key = keys[i];
|
|
200
171
|
var newObj = internals.parseKeys(key, tempObj[key], options);
|
|
201
172
|
obj = Utils.merge(obj, newObj, options);
|
|
@@ -205,26 +176,20 @@ module.exports = function (str, options) {
|
|
|
205
176
|
};
|
|
206
177
|
|
|
207
178
|
},{"./utils":4}],3:[function(require,module,exports){
|
|
208
|
-
|
|
179
|
+
'use strict';
|
|
209
180
|
|
|
210
181
|
var Utils = require('./utils');
|
|
211
182
|
|
|
212
|
-
|
|
213
|
-
// Declare internals
|
|
214
|
-
|
|
215
183
|
var internals = {
|
|
216
184
|
delimiter: '&',
|
|
217
185
|
arrayPrefixGenerators: {
|
|
218
|
-
brackets: function (prefix
|
|
219
|
-
|
|
186
|
+
brackets: function (prefix) {
|
|
220
187
|
return prefix + '[]';
|
|
221
188
|
},
|
|
222
189
|
indices: function (prefix, key) {
|
|
223
|
-
|
|
224
190
|
return prefix + '[' + key + ']';
|
|
225
191
|
},
|
|
226
|
-
repeat: function (prefix
|
|
227
|
-
|
|
192
|
+
repeat: function (prefix) {
|
|
228
193
|
return prefix;
|
|
229
194
|
}
|
|
230
195
|
},
|
|
@@ -233,19 +198,15 @@ var internals = {
|
|
|
233
198
|
encode: true
|
|
234
199
|
};
|
|
235
200
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
201
|
+
internals.stringify = function (object, prefix, generateArrayPrefix, strictNullHandling, skipNulls, encode, filter, sort) {
|
|
202
|
+
var obj = object;
|
|
239
203
|
if (typeof filter === 'function') {
|
|
240
204
|
obj = filter(prefix, obj);
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
}
|
|
245
|
-
else if (obj instanceof Date) {
|
|
205
|
+
} else if (Utils.isBuffer(obj)) {
|
|
206
|
+
obj = String(obj);
|
|
207
|
+
} else if (obj instanceof Date) {
|
|
246
208
|
obj = obj.toISOString();
|
|
247
|
-
}
|
|
248
|
-
else if (obj === null) {
|
|
209
|
+
} else if (obj === null) {
|
|
249
210
|
if (strictNullHandling) {
|
|
250
211
|
return encode ? Utils.encode(prefix) : prefix;
|
|
251
212
|
}
|
|
@@ -253,10 +214,7 @@ internals.stringify = function (obj, prefix, generateArrayPrefix, strictNullHand
|
|
|
253
214
|
obj = '';
|
|
254
215
|
}
|
|
255
216
|
|
|
256
|
-
if (typeof obj === 'string' ||
|
|
257
|
-
typeof obj === 'number' ||
|
|
258
|
-
typeof obj === 'boolean') {
|
|
259
|
-
|
|
217
|
+
if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean') {
|
|
260
218
|
if (encode) {
|
|
261
219
|
return [Utils.encode(prefix) + '=' + Utils.encode(obj)];
|
|
262
220
|
}
|
|
@@ -269,20 +227,24 @@ internals.stringify = function (obj, prefix, generateArrayPrefix, strictNullHand
|
|
|
269
227
|
return values;
|
|
270
228
|
}
|
|
271
229
|
|
|
272
|
-
var objKeys
|
|
273
|
-
|
|
274
|
-
|
|
230
|
+
var objKeys;
|
|
231
|
+
if (Array.isArray(filter)) {
|
|
232
|
+
objKeys = filter;
|
|
233
|
+
} else {
|
|
234
|
+
var keys = Object.keys(obj);
|
|
235
|
+
objKeys = sort ? keys.sort(sort) : keys;
|
|
236
|
+
}
|
|
275
237
|
|
|
276
|
-
|
|
277
|
-
|
|
238
|
+
for (var i = 0; i < objKeys.length; ++i) {
|
|
239
|
+
var key = objKeys[i];
|
|
278
240
|
|
|
241
|
+
if (skipNulls && obj[key] === null) {
|
|
279
242
|
continue;
|
|
280
243
|
}
|
|
281
244
|
|
|
282
245
|
if (Array.isArray(obj)) {
|
|
283
246
|
values = values.concat(internals.stringify(obj[key], generateArrayPrefix(prefix, key), generateArrayPrefix, strictNullHandling, skipNulls, encode, filter));
|
|
284
|
-
}
|
|
285
|
-
else {
|
|
247
|
+
} else {
|
|
286
248
|
values = values.concat(internals.stringify(obj[key], prefix + '[' + key + ']', generateArrayPrefix, strictNullHandling, skipNulls, encode, filter));
|
|
287
249
|
}
|
|
288
250
|
}
|
|
@@ -290,40 +252,35 @@ internals.stringify = function (obj, prefix, generateArrayPrefix, strictNullHand
|
|
|
290
252
|
return values;
|
|
291
253
|
};
|
|
292
254
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
options = options || {};
|
|
255
|
+
module.exports = function (object, opts) {
|
|
256
|
+
var obj = object;
|
|
257
|
+
var options = opts || {};
|
|
297
258
|
var delimiter = typeof options.delimiter === 'undefined' ? internals.delimiter : options.delimiter;
|
|
298
259
|
var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : internals.strictNullHandling;
|
|
299
260
|
var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : internals.skipNulls;
|
|
300
261
|
var encode = typeof options.encode === 'boolean' ? options.encode : internals.encode;
|
|
262
|
+
var sort = typeof options.sort === 'function' ? options.sort : null;
|
|
301
263
|
var objKeys;
|
|
302
264
|
var filter;
|
|
303
265
|
if (typeof options.filter === 'function') {
|
|
304
266
|
filter = options.filter;
|
|
305
267
|
obj = filter('', obj);
|
|
306
|
-
}
|
|
307
|
-
else if (Array.isArray(options.filter)) {
|
|
268
|
+
} else if (Array.isArray(options.filter)) {
|
|
308
269
|
objKeys = filter = options.filter;
|
|
309
270
|
}
|
|
310
271
|
|
|
311
272
|
var keys = [];
|
|
312
273
|
|
|
313
|
-
if (typeof obj !== 'object' ||
|
|
314
|
-
obj === null) {
|
|
315
|
-
|
|
274
|
+
if (typeof obj !== 'object' || obj === null) {
|
|
316
275
|
return '';
|
|
317
276
|
}
|
|
318
277
|
|
|
319
278
|
var arrayFormat;
|
|
320
279
|
if (options.arrayFormat in internals.arrayPrefixGenerators) {
|
|
321
280
|
arrayFormat = options.arrayFormat;
|
|
322
|
-
}
|
|
323
|
-
else if ('indices' in options) {
|
|
281
|
+
} else if ('indices' in options) {
|
|
324
282
|
arrayFormat = options.indices ? 'indices' : 'repeat';
|
|
325
|
-
}
|
|
326
|
-
else {
|
|
283
|
+
} else {
|
|
327
284
|
arrayFormat = 'indices';
|
|
328
285
|
}
|
|
329
286
|
|
|
@@ -333,40 +290,39 @@ module.exports = function (obj, options) {
|
|
|
333
290
|
objKeys = Object.keys(obj);
|
|
334
291
|
}
|
|
335
292
|
|
|
336
|
-
|
|
337
|
-
|
|
293
|
+
if (sort) {
|
|
294
|
+
objKeys.sort(sort);
|
|
295
|
+
}
|
|
338
296
|
|
|
339
|
-
|
|
340
|
-
|
|
297
|
+
for (var i = 0; i < objKeys.length; ++i) {
|
|
298
|
+
var key = objKeys[i];
|
|
341
299
|
|
|
300
|
+
if (skipNulls && obj[key] === null) {
|
|
342
301
|
continue;
|
|
343
302
|
}
|
|
344
303
|
|
|
345
|
-
keys = keys.concat(internals.stringify(obj[key], key, generateArrayPrefix, strictNullHandling, skipNulls, encode, filter));
|
|
304
|
+
keys = keys.concat(internals.stringify(obj[key], key, generateArrayPrefix, strictNullHandling, skipNulls, encode, filter, sort));
|
|
346
305
|
}
|
|
347
306
|
|
|
348
307
|
return keys.join(delimiter);
|
|
349
308
|
};
|
|
350
309
|
|
|
351
310
|
},{"./utils":4}],4:[function(require,module,exports){
|
|
352
|
-
|
|
353
|
-
|
|
311
|
+
'use strict';
|
|
354
312
|
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
var
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
internals.hexTable[h] = '%' + ((h < 16 ? '0' : '') + h.toString(16)).toUpperCase();
|
|
361
|
-
}
|
|
313
|
+
var hexTable = (function () {
|
|
314
|
+
var array = new Array(256);
|
|
315
|
+
for (var i = 0; i < 256; ++i) {
|
|
316
|
+
array[i] = '%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase();
|
|
317
|
+
}
|
|
362
318
|
|
|
319
|
+
return array;
|
|
320
|
+
}());
|
|
363
321
|
|
|
364
322
|
exports.arrayToObject = function (source, options) {
|
|
365
|
-
|
|
366
323
|
var obj = options.plainObjects ? Object.create(null) : {};
|
|
367
|
-
for (var i = 0
|
|
324
|
+
for (var i = 0; i < source.length; ++i) {
|
|
368
325
|
if (typeof source[i] !== 'undefined') {
|
|
369
|
-
|
|
370
326
|
obj[i] = source[i];
|
|
371
327
|
}
|
|
372
328
|
}
|
|
@@ -374,9 +330,7 @@ exports.arrayToObject = function (source, options) {
|
|
|
374
330
|
return obj;
|
|
375
331
|
};
|
|
376
332
|
|
|
377
|
-
|
|
378
333
|
exports.merge = function (target, source, options) {
|
|
379
|
-
|
|
380
334
|
if (!source) {
|
|
381
335
|
return target;
|
|
382
336
|
}
|
|
@@ -384,47 +338,37 @@ exports.merge = function (target, source, options) {
|
|
|
384
338
|
if (typeof source !== 'object') {
|
|
385
339
|
if (Array.isArray(target)) {
|
|
386
340
|
target.push(source);
|
|
387
|
-
}
|
|
388
|
-
else if (typeof target === 'object') {
|
|
341
|
+
} else if (typeof target === 'object') {
|
|
389
342
|
target[source] = true;
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
target = [target, source];
|
|
343
|
+
} else {
|
|
344
|
+
return [target, source];
|
|
393
345
|
}
|
|
394
346
|
|
|
395
347
|
return target;
|
|
396
348
|
}
|
|
397
349
|
|
|
398
350
|
if (typeof target !== 'object') {
|
|
399
|
-
|
|
400
|
-
return target;
|
|
351
|
+
return [target].concat(source);
|
|
401
352
|
}
|
|
402
353
|
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
target = exports.arrayToObject(target, options);
|
|
354
|
+
var mergeTarget = target;
|
|
355
|
+
if (Array.isArray(target) && !Array.isArray(source)) {
|
|
356
|
+
mergeTarget = exports.arrayToObject(target, options);
|
|
407
357
|
}
|
|
408
358
|
|
|
409
|
-
|
|
410
|
-
for (var k = 0, kl = keys.length; k < kl; ++k) {
|
|
411
|
-
var key = keys[k];
|
|
359
|
+
return Object.keys(source).reduce(function (acc, key) {
|
|
412
360
|
var value = source[key];
|
|
413
361
|
|
|
414
|
-
if (
|
|
415
|
-
|
|
362
|
+
if (Object.prototype.hasOwnProperty.call(acc, key)) {
|
|
363
|
+
acc[key] = exports.merge(acc[key], value, options);
|
|
364
|
+
} else {
|
|
365
|
+
acc[key] = value;
|
|
416
366
|
}
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
return target;
|
|
367
|
+
return acc;
|
|
368
|
+
}, mergeTarget);
|
|
423
369
|
};
|
|
424
370
|
|
|
425
|
-
|
|
426
371
|
exports.decode = function (str) {
|
|
427
|
-
|
|
428
372
|
try {
|
|
429
373
|
return decodeURIComponent(str.replace(/\+/g, ' '));
|
|
430
374
|
} catch (e) {
|
|
@@ -433,65 +377,60 @@ exports.decode = function (str) {
|
|
|
433
377
|
};
|
|
434
378
|
|
|
435
379
|
exports.encode = function (str) {
|
|
436
|
-
|
|
437
380
|
// This code was originally written by Brian White (mscdex) for the io.js core querystring library.
|
|
438
381
|
// It has been adapted here for stricter adherence to RFC 3986
|
|
439
382
|
if (str.length === 0) {
|
|
440
383
|
return str;
|
|
441
384
|
}
|
|
442
385
|
|
|
443
|
-
|
|
444
|
-
str = '' + str;
|
|
445
|
-
}
|
|
386
|
+
var string = typeof str === 'string' ? str : String(str);
|
|
446
387
|
|
|
447
388
|
var out = '';
|
|
448
|
-
for (var i = 0
|
|
449
|
-
var c =
|
|
389
|
+
for (var i = 0; i < string.length; ++i) {
|
|
390
|
+
var c = string.charCodeAt(i);
|
|
450
391
|
|
|
451
|
-
if (
|
|
392
|
+
if (
|
|
393
|
+
c === 0x2D || // -
|
|
452
394
|
c === 0x2E || // .
|
|
453
395
|
c === 0x5F || // _
|
|
454
396
|
c === 0x7E || // ~
|
|
455
397
|
(c >= 0x30 && c <= 0x39) || // 0-9
|
|
456
398
|
(c >= 0x41 && c <= 0x5A) || // a-z
|
|
457
|
-
(c >= 0x61 && c <= 0x7A)
|
|
458
|
-
|
|
459
|
-
out +=
|
|
399
|
+
(c >= 0x61 && c <= 0x7A) // A-Z
|
|
400
|
+
) {
|
|
401
|
+
out += string.charAt(i);
|
|
460
402
|
continue;
|
|
461
403
|
}
|
|
462
404
|
|
|
463
405
|
if (c < 0x80) {
|
|
464
|
-
out
|
|
406
|
+
out = out + hexTable[c];
|
|
465
407
|
continue;
|
|
466
408
|
}
|
|
467
409
|
|
|
468
410
|
if (c < 0x800) {
|
|
469
|
-
out
|
|
411
|
+
out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]);
|
|
470
412
|
continue;
|
|
471
413
|
}
|
|
472
414
|
|
|
473
415
|
if (c < 0xD800 || c >= 0xE000) {
|
|
474
|
-
out
|
|
416
|
+
out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]);
|
|
475
417
|
continue;
|
|
476
418
|
}
|
|
477
419
|
|
|
478
|
-
|
|
479
|
-
c = 0x10000 + (((c & 0x3FF) << 10) | (
|
|
480
|
-
out +=
|
|
420
|
+
i += 1;
|
|
421
|
+
c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF));
|
|
422
|
+
out += (hexTable[0xF0 | (c >> 18)] + hexTable[0x80 | ((c >> 12) & 0x3F)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]);
|
|
481
423
|
}
|
|
482
424
|
|
|
483
425
|
return out;
|
|
484
426
|
};
|
|
485
427
|
|
|
486
|
-
exports.compact = function (obj,
|
|
487
|
-
|
|
488
|
-
if (typeof obj !== 'object' ||
|
|
489
|
-
obj === null) {
|
|
490
|
-
|
|
428
|
+
exports.compact = function (obj, references) {
|
|
429
|
+
if (typeof obj !== 'object' || obj === null) {
|
|
491
430
|
return obj;
|
|
492
431
|
}
|
|
493
432
|
|
|
494
|
-
refs =
|
|
433
|
+
var refs = references || [];
|
|
495
434
|
var lookup = refs.indexOf(obj);
|
|
496
435
|
if (lookup !== -1) {
|
|
497
436
|
return refs[lookup];
|
|
@@ -502,7 +441,7 @@ exports.compact = function (obj, refs) {
|
|
|
502
441
|
if (Array.isArray(obj)) {
|
|
503
442
|
var compacted = [];
|
|
504
443
|
|
|
505
|
-
for (var i = 0
|
|
444
|
+
for (var i = 0; i < obj.length; ++i) {
|
|
506
445
|
if (typeof obj[i] !== 'undefined') {
|
|
507
446
|
compacted.push(obj[i]);
|
|
508
447
|
}
|
|
@@ -512,32 +451,24 @@ exports.compact = function (obj, refs) {
|
|
|
512
451
|
}
|
|
513
452
|
|
|
514
453
|
var keys = Object.keys(obj);
|
|
515
|
-
for (
|
|
516
|
-
var key = keys[
|
|
454
|
+
for (var j = 0; j < keys.length; ++j) {
|
|
455
|
+
var key = keys[j];
|
|
517
456
|
obj[key] = exports.compact(obj[key], refs);
|
|
518
457
|
}
|
|
519
458
|
|
|
520
459
|
return obj;
|
|
521
460
|
};
|
|
522
461
|
|
|
523
|
-
|
|
524
462
|
exports.isRegExp = function (obj) {
|
|
525
|
-
|
|
526
463
|
return Object.prototype.toString.call(obj) === '[object RegExp]';
|
|
527
464
|
};
|
|
528
465
|
|
|
529
|
-
|
|
530
466
|
exports.isBuffer = function (obj) {
|
|
531
|
-
|
|
532
|
-
if (obj === null ||
|
|
533
|
-
typeof obj === 'undefined') {
|
|
534
|
-
|
|
467
|
+
if (obj === null || typeof obj === 'undefined') {
|
|
535
468
|
return false;
|
|
536
469
|
}
|
|
537
470
|
|
|
538
|
-
return !!(obj.constructor &&
|
|
539
|
-
obj.constructor.isBuffer &&
|
|
540
|
-
obj.constructor.isBuffer(obj));
|
|
471
|
+
return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));
|
|
541
472
|
};
|
|
542
473
|
|
|
543
474
|
},{}]},{},[1])(1)
|
package/lib/index.js
CHANGED