qs 6.0.1 → 6.1.0
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 +115 -0
- package/README.md +85 -81
- package/bower.json +0 -1
- package/component.json +1 -1
- package/dist/qs.js +98 -178
- package/lib/index.js +6 -12
- package/lib/parse.js +47 -72
- package/lib/stringify.js +43 -69
- package/lib/utils.js +48 -85
- package/package.json +26 -11
- package/test/index.js +5 -0
- package/test/parse.js +249 -336
- package/test/stringify.js +170 -202
- package/test/utils.js +5 -26
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, allowDots) {
|
|
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
|
}
|
|
@@ -277,61 +235,53 @@ internals.stringify = function (obj, prefix, generateArrayPrefix, strictNullHand
|
|
|
277
235
|
objKeys = sort ? keys.sort(sort) : keys;
|
|
278
236
|
}
|
|
279
237
|
|
|
280
|
-
for (var i = 0
|
|
238
|
+
for (var i = 0; i < objKeys.length; ++i) {
|
|
281
239
|
var key = objKeys[i];
|
|
282
240
|
|
|
283
|
-
if (skipNulls &&
|
|
284
|
-
obj[key] === null) {
|
|
285
|
-
|
|
241
|
+
if (skipNulls && obj[key] === null) {
|
|
286
242
|
continue;
|
|
287
243
|
}
|
|
288
244
|
|
|
289
245
|
if (Array.isArray(obj)) {
|
|
290
|
-
values = values.concat(internals.stringify(obj[key], generateArrayPrefix(prefix, key), generateArrayPrefix, strictNullHandling, skipNulls, encode, filter));
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
values = values.concat(internals.stringify(obj[key], prefix + '[' + key + ']', generateArrayPrefix, strictNullHandling, skipNulls, encode, filter));
|
|
246
|
+
values = values.concat(internals.stringify(obj[key], generateArrayPrefix(prefix, key), generateArrayPrefix, strictNullHandling, skipNulls, encode, filter, sort, allowDots));
|
|
247
|
+
} else {
|
|
248
|
+
values = values.concat(internals.stringify(obj[key], prefix + (allowDots ? '.' + key : '[' + key + ']'), generateArrayPrefix, strictNullHandling, skipNulls, encode, filter, sort, allowDots));
|
|
294
249
|
}
|
|
295
250
|
}
|
|
296
251
|
|
|
297
252
|
return values;
|
|
298
253
|
};
|
|
299
254
|
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
options = options || {};
|
|
255
|
+
module.exports = function (object, opts) {
|
|
256
|
+
var obj = object;
|
|
257
|
+
var options = opts || {};
|
|
304
258
|
var delimiter = typeof options.delimiter === 'undefined' ? internals.delimiter : options.delimiter;
|
|
305
259
|
var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : internals.strictNullHandling;
|
|
306
260
|
var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : internals.skipNulls;
|
|
307
261
|
var encode = typeof options.encode === 'boolean' ? options.encode : internals.encode;
|
|
308
262
|
var sort = typeof options.sort === 'function' ? options.sort : null;
|
|
263
|
+
var allowDots = typeof options.allowDots === 'undefined' ? false : options.allowDots;
|
|
309
264
|
var objKeys;
|
|
310
265
|
var filter;
|
|
311
266
|
if (typeof options.filter === 'function') {
|
|
312
267
|
filter = options.filter;
|
|
313
268
|
obj = filter('', obj);
|
|
314
|
-
}
|
|
315
|
-
else if (Array.isArray(options.filter)) {
|
|
269
|
+
} else if (Array.isArray(options.filter)) {
|
|
316
270
|
objKeys = filter = options.filter;
|
|
317
271
|
}
|
|
318
272
|
|
|
319
273
|
var keys = [];
|
|
320
274
|
|
|
321
|
-
if (typeof obj !== 'object' ||
|
|
322
|
-
obj === null) {
|
|
323
|
-
|
|
275
|
+
if (typeof obj !== 'object' || obj === null) {
|
|
324
276
|
return '';
|
|
325
277
|
}
|
|
326
278
|
|
|
327
279
|
var arrayFormat;
|
|
328
280
|
if (options.arrayFormat in internals.arrayPrefixGenerators) {
|
|
329
281
|
arrayFormat = options.arrayFormat;
|
|
330
|
-
}
|
|
331
|
-
else if ('indices' in options) {
|
|
282
|
+
} else if ('indices' in options) {
|
|
332
283
|
arrayFormat = options.indices ? 'indices' : 'repeat';
|
|
333
|
-
}
|
|
334
|
-
else {
|
|
284
|
+
} else {
|
|
335
285
|
arrayFormat = 'indices';
|
|
336
286
|
}
|
|
337
287
|
|
|
@@ -345,40 +295,35 @@ module.exports = function (obj, options) {
|
|
|
345
295
|
objKeys.sort(sort);
|
|
346
296
|
}
|
|
347
297
|
|
|
348
|
-
for (var i = 0
|
|
298
|
+
for (var i = 0; i < objKeys.length; ++i) {
|
|
349
299
|
var key = objKeys[i];
|
|
350
300
|
|
|
351
|
-
if (skipNulls &&
|
|
352
|
-
obj[key] === null) {
|
|
353
|
-
|
|
301
|
+
if (skipNulls && obj[key] === null) {
|
|
354
302
|
continue;
|
|
355
303
|
}
|
|
356
304
|
|
|
357
|
-
keys = keys.concat(internals.stringify(obj[key], key, generateArrayPrefix, strictNullHandling, skipNulls, encode, filter, sort));
|
|
305
|
+
keys = keys.concat(internals.stringify(obj[key], key, generateArrayPrefix, strictNullHandling, skipNulls, encode, filter, sort, allowDots));
|
|
358
306
|
}
|
|
359
307
|
|
|
360
308
|
return keys.join(delimiter);
|
|
361
309
|
};
|
|
362
310
|
|
|
363
311
|
},{"./utils":4}],4:[function(require,module,exports){
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
// Declare internals
|
|
312
|
+
'use strict';
|
|
368
313
|
|
|
369
|
-
var
|
|
370
|
-
|
|
371
|
-
for (var
|
|
372
|
-
|
|
373
|
-
}
|
|
314
|
+
var hexTable = (function () {
|
|
315
|
+
var array = new Array(256);
|
|
316
|
+
for (var i = 0; i < 256; ++i) {
|
|
317
|
+
array[i] = '%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase();
|
|
318
|
+
}
|
|
374
319
|
|
|
320
|
+
return array;
|
|
321
|
+
}());
|
|
375
322
|
|
|
376
323
|
exports.arrayToObject = function (source, options) {
|
|
377
|
-
|
|
378
324
|
var obj = options.plainObjects ? Object.create(null) : {};
|
|
379
|
-
for (var i = 0
|
|
325
|
+
for (var i = 0; i < source.length; ++i) {
|
|
380
326
|
if (typeof source[i] !== 'undefined') {
|
|
381
|
-
|
|
382
327
|
obj[i] = source[i];
|
|
383
328
|
}
|
|
384
329
|
}
|
|
@@ -386,9 +331,7 @@ exports.arrayToObject = function (source, options) {
|
|
|
386
331
|
return obj;
|
|
387
332
|
};
|
|
388
333
|
|
|
389
|
-
|
|
390
334
|
exports.merge = function (target, source, options) {
|
|
391
|
-
|
|
392
335
|
if (!source) {
|
|
393
336
|
return target;
|
|
394
337
|
}
|
|
@@ -396,47 +339,37 @@ exports.merge = function (target, source, options) {
|
|
|
396
339
|
if (typeof source !== 'object') {
|
|
397
340
|
if (Array.isArray(target)) {
|
|
398
341
|
target.push(source);
|
|
399
|
-
}
|
|
400
|
-
else if (typeof target === 'object') {
|
|
342
|
+
} else if (typeof target === 'object') {
|
|
401
343
|
target[source] = true;
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
target = [target, source];
|
|
344
|
+
} else {
|
|
345
|
+
return [target, source];
|
|
405
346
|
}
|
|
406
347
|
|
|
407
348
|
return target;
|
|
408
349
|
}
|
|
409
350
|
|
|
410
351
|
if (typeof target !== 'object') {
|
|
411
|
-
|
|
412
|
-
return target;
|
|
352
|
+
return [target].concat(source);
|
|
413
353
|
}
|
|
414
354
|
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
target = exports.arrayToObject(target, options);
|
|
355
|
+
var mergeTarget = target;
|
|
356
|
+
if (Array.isArray(target) && !Array.isArray(source)) {
|
|
357
|
+
mergeTarget = exports.arrayToObject(target, options);
|
|
419
358
|
}
|
|
420
359
|
|
|
421
|
-
|
|
422
|
-
for (var k = 0, kl = keys.length; k < kl; ++k) {
|
|
423
|
-
var key = keys[k];
|
|
360
|
+
return Object.keys(source).reduce(function (acc, key) {
|
|
424
361
|
var value = source[key];
|
|
425
362
|
|
|
426
|
-
if (
|
|
427
|
-
|
|
363
|
+
if (Object.prototype.hasOwnProperty.call(acc, key)) {
|
|
364
|
+
acc[key] = exports.merge(acc[key], value, options);
|
|
365
|
+
} else {
|
|
366
|
+
acc[key] = value;
|
|
428
367
|
}
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
}
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
return target;
|
|
368
|
+
return acc;
|
|
369
|
+
}, mergeTarget);
|
|
435
370
|
};
|
|
436
371
|
|
|
437
|
-
|
|
438
372
|
exports.decode = function (str) {
|
|
439
|
-
|
|
440
373
|
try {
|
|
441
374
|
return decodeURIComponent(str.replace(/\+/g, ' '));
|
|
442
375
|
} catch (e) {
|
|
@@ -445,65 +378,60 @@ exports.decode = function (str) {
|
|
|
445
378
|
};
|
|
446
379
|
|
|
447
380
|
exports.encode = function (str) {
|
|
448
|
-
|
|
449
381
|
// This code was originally written by Brian White (mscdex) for the io.js core querystring library.
|
|
450
382
|
// It has been adapted here for stricter adherence to RFC 3986
|
|
451
383
|
if (str.length === 0) {
|
|
452
384
|
return str;
|
|
453
385
|
}
|
|
454
386
|
|
|
455
|
-
|
|
456
|
-
str = '' + str;
|
|
457
|
-
}
|
|
387
|
+
var string = typeof str === 'string' ? str : String(str);
|
|
458
388
|
|
|
459
389
|
var out = '';
|
|
460
|
-
for (var i = 0
|
|
461
|
-
var c =
|
|
390
|
+
for (var i = 0; i < string.length; ++i) {
|
|
391
|
+
var c = string.charCodeAt(i);
|
|
462
392
|
|
|
463
|
-
if (
|
|
393
|
+
if (
|
|
394
|
+
c === 0x2D || // -
|
|
464
395
|
c === 0x2E || // .
|
|
465
396
|
c === 0x5F || // _
|
|
466
397
|
c === 0x7E || // ~
|
|
467
398
|
(c >= 0x30 && c <= 0x39) || // 0-9
|
|
468
399
|
(c >= 0x41 && c <= 0x5A) || // a-z
|
|
469
|
-
(c >= 0x61 && c <= 0x7A)
|
|
470
|
-
|
|
471
|
-
out +=
|
|
400
|
+
(c >= 0x61 && c <= 0x7A) // A-Z
|
|
401
|
+
) {
|
|
402
|
+
out += string.charAt(i);
|
|
472
403
|
continue;
|
|
473
404
|
}
|
|
474
405
|
|
|
475
406
|
if (c < 0x80) {
|
|
476
|
-
out
|
|
407
|
+
out = out + hexTable[c];
|
|
477
408
|
continue;
|
|
478
409
|
}
|
|
479
410
|
|
|
480
411
|
if (c < 0x800) {
|
|
481
|
-
out
|
|
412
|
+
out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]);
|
|
482
413
|
continue;
|
|
483
414
|
}
|
|
484
415
|
|
|
485
416
|
if (c < 0xD800 || c >= 0xE000) {
|
|
486
|
-
out
|
|
417
|
+
out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]);
|
|
487
418
|
continue;
|
|
488
419
|
}
|
|
489
420
|
|
|
490
|
-
|
|
491
|
-
c = 0x10000 + (((c & 0x3FF) << 10) | (
|
|
492
|
-
out +=
|
|
421
|
+
i += 1;
|
|
422
|
+
c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF));
|
|
423
|
+
out += (hexTable[0xF0 | (c >> 18)] + hexTable[0x80 | ((c >> 12) & 0x3F)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]);
|
|
493
424
|
}
|
|
494
425
|
|
|
495
426
|
return out;
|
|
496
427
|
};
|
|
497
428
|
|
|
498
|
-
exports.compact = function (obj,
|
|
499
|
-
|
|
500
|
-
if (typeof obj !== 'object' ||
|
|
501
|
-
obj === null) {
|
|
502
|
-
|
|
429
|
+
exports.compact = function (obj, references) {
|
|
430
|
+
if (typeof obj !== 'object' || obj === null) {
|
|
503
431
|
return obj;
|
|
504
432
|
}
|
|
505
433
|
|
|
506
|
-
refs =
|
|
434
|
+
var refs = references || [];
|
|
507
435
|
var lookup = refs.indexOf(obj);
|
|
508
436
|
if (lookup !== -1) {
|
|
509
437
|
return refs[lookup];
|
|
@@ -514,7 +442,7 @@ exports.compact = function (obj, refs) {
|
|
|
514
442
|
if (Array.isArray(obj)) {
|
|
515
443
|
var compacted = [];
|
|
516
444
|
|
|
517
|
-
for (var i = 0
|
|
445
|
+
for (var i = 0; i < obj.length; ++i) {
|
|
518
446
|
if (typeof obj[i] !== 'undefined') {
|
|
519
447
|
compacted.push(obj[i]);
|
|
520
448
|
}
|
|
@@ -524,32 +452,24 @@ exports.compact = function (obj, refs) {
|
|
|
524
452
|
}
|
|
525
453
|
|
|
526
454
|
var keys = Object.keys(obj);
|
|
527
|
-
for (
|
|
528
|
-
var key = keys[
|
|
455
|
+
for (var j = 0; j < keys.length; ++j) {
|
|
456
|
+
var key = keys[j];
|
|
529
457
|
obj[key] = exports.compact(obj[key], refs);
|
|
530
458
|
}
|
|
531
459
|
|
|
532
460
|
return obj;
|
|
533
461
|
};
|
|
534
462
|
|
|
535
|
-
|
|
536
463
|
exports.isRegExp = function (obj) {
|
|
537
|
-
|
|
538
464
|
return Object.prototype.toString.call(obj) === '[object RegExp]';
|
|
539
465
|
};
|
|
540
466
|
|
|
541
|
-
|
|
542
467
|
exports.isBuffer = function (obj) {
|
|
543
|
-
|
|
544
|
-
if (obj === null ||
|
|
545
|
-
typeof obj === 'undefined') {
|
|
546
|
-
|
|
468
|
+
if (obj === null || typeof obj === 'undefined') {
|
|
547
469
|
return false;
|
|
548
470
|
}
|
|
549
471
|
|
|
550
|
-
return !!(obj.constructor &&
|
|
551
|
-
obj.constructor.isBuffer &&
|
|
552
|
-
obj.constructor.isBuffer(obj));
|
|
472
|
+
return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));
|
|
553
473
|
};
|
|
554
474
|
|
|
555
475
|
},{}]},{},[1])(1)
|
package/lib/index.js
CHANGED
|
@@ -1,15 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
var Stringify = require('./stringify');
|
|
4
|
+
var Parse = require('./parse');
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
// Declare internals
|
|
10
|
-
|
|
11
|
-
const internals = {};
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
exports.stringify = Stringify;
|
|
15
|
-
exports.parse = Parse;
|
|
6
|
+
module.exports = {
|
|
7
|
+
stringify: Stringify,
|
|
8
|
+
parse: Parse
|
|
9
|
+
};
|