1 | var util = require('./util/util');
|
2 | var isArray = util.isArray;
|
3 | var isObject = util.isObject;
|
4 | var hasOwn = Object.prototype.hasOwnProperty;
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 | function encode(object, keepArrayIndex) {
|
14 | var key;
|
15 | var keyValueArray = [];
|
16 |
|
17 | keepArrayIndex = !!keepArrayIndex;
|
18 |
|
19 | if ( isObject(object) ) {
|
20 | for ( key in object ) {
|
21 | if ( hasOwn.call(object, key) ) {
|
22 | encodeKey(key, object[key], keyValueArray, keepArrayIndex);
|
23 | }
|
24 | }
|
25 | }
|
26 |
|
27 | return keyValueArray.join('&');
|
28 | }
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 |
|
36 |
|
37 |
|
38 | function encodeKey(key, data, keyValueArray, keepArrayIndex) {
|
39 | var prop;
|
40 | var index;
|
41 | var length;
|
42 | var value;
|
43 | var subKey;
|
44 |
|
45 | if ( isObject(data) ) {
|
46 | for ( prop in data ) {
|
47 | if ( hasOwn.call(data, prop) ) {
|
48 | value = data[prop];
|
49 | subKey = key + '[' + prop + ']';
|
50 | encodeKey(subKey, value, keyValueArray, keepArrayIndex);
|
51 | }
|
52 | }
|
53 | } else if ( isArray(data) ) {
|
54 | index = 0;
|
55 | length = data.length;
|
56 |
|
57 | while (index < length) {
|
58 | value = data[index];
|
59 |
|
60 | if ( keepArrayIndex || isArray(value) || isObject(value) ) {
|
61 | subKey = key + '[' + index + ']';
|
62 | } else {
|
63 | subKey = key + '[]';
|
64 | }
|
65 |
|
66 | encodeKey(subKey, value, keyValueArray, keepArrayIndex);
|
67 |
|
68 | index += 1;
|
69 | }
|
70 | } else {
|
71 | key = encodeURIComponent(key);
|
72 |
|
73 | if (data === null) {
|
74 | value = key;
|
75 | } else {
|
76 |
|
77 | if (data === undefined) {
|
78 | data = '';
|
79 |
|
80 | } else if (typeof data !== 'string') {
|
81 | data = '' + data;
|
82 | }
|
83 | value = key + '=' + encodeURIComponent(data);
|
84 | }
|
85 |
|
86 | keyValueArray.push(value);
|
87 | }
|
88 | }
|
89 |
|
90 | module.exports = encode;
|