]> gerrit.simantics Code Review - simantics/district.git/blob - org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/node_modules/request/node_modules/qs/lib/stringify.js
Adding integrated tile server
[simantics/district.git] / org.simantics.maps.server / node / node-v4.8.0-win-x64 / node_modules / npm / node_modules / request / node_modules / qs / lib / stringify.js
1 'use strict';
2
3 var Utils = require('./utils');
4
5 var arrayPrefixGenerators = {
6     brackets: function brackets(prefix) {
7         return prefix + '[]';
8     },
9     indices: function indices(prefix, key) {
10         return prefix + '[' + key + ']';
11     },
12     repeat: function repeat(prefix) {
13         return prefix;
14     }
15 };
16
17 var defaults = {
18     delimiter: '&',
19     strictNullHandling: false,
20     skipNulls: false,
21     encode: true,
22     encoder: Utils.encode
23 };
24
25 var stringify = function stringify(object, prefix, generateArrayPrefix, strictNullHandling, skipNulls, encoder, filter, sort, allowDots) {
26     var obj = object;
27     if (typeof filter === 'function') {
28         obj = filter(prefix, obj);
29     } else if (obj instanceof Date) {
30         obj = obj.toISOString();
31     } else if (obj === null) {
32         if (strictNullHandling) {
33             return encoder ? encoder(prefix) : prefix;
34         }
35
36         obj = '';
37     }
38
39     if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || Utils.isBuffer(obj)) {
40         if (encoder) {
41             return [encoder(prefix) + '=' + encoder(obj)];
42         }
43         return [prefix + '=' + String(obj)];
44     }
45
46     var values = [];
47
48     if (typeof obj === 'undefined') {
49         return values;
50     }
51
52     var objKeys;
53     if (Array.isArray(filter)) {
54         objKeys = filter;
55     } else {
56         var keys = Object.keys(obj);
57         objKeys = sort ? keys.sort(sort) : keys;
58     }
59
60     for (var i = 0; i < objKeys.length; ++i) {
61         var key = objKeys[i];
62
63         if (skipNulls && obj[key] === null) {
64             continue;
65         }
66
67         if (Array.isArray(obj)) {
68             values = values.concat(stringify(obj[key], generateArrayPrefix(prefix, key), generateArrayPrefix, strictNullHandling, skipNulls, encoder, filter, sort, allowDots));
69         } else {
70             values = values.concat(stringify(obj[key], prefix + (allowDots ? '.' + key : '[' + key + ']'), generateArrayPrefix, strictNullHandling, skipNulls, encoder, filter, sort, allowDots));
71         }
72     }
73
74     return values;
75 };
76
77 module.exports = function (object, opts) {
78     var obj = object;
79     var options = opts || {};
80     var delimiter = typeof options.delimiter === 'undefined' ? defaults.delimiter : options.delimiter;
81     var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling;
82     var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : defaults.skipNulls;
83     var encode = typeof options.encode === 'boolean' ? options.encode : defaults.encode;
84     var encoder = encode ? (typeof options.encoder === 'function' ? options.encoder : defaults.encoder) : null;
85     var sort = typeof options.sort === 'function' ? options.sort : null;
86     var allowDots = typeof options.allowDots === 'undefined' ? false : options.allowDots;
87     var objKeys;
88     var filter;
89
90     if (options.encoder !== null && options.encoder !== undefined && typeof options.encoder !== 'function') {
91         throw new TypeError('Encoder has to be a function.');
92     }
93
94     if (typeof options.filter === 'function') {
95         filter = options.filter;
96         obj = filter('', obj);
97     } else if (Array.isArray(options.filter)) {
98         objKeys = filter = options.filter;
99     }
100
101     var keys = [];
102
103     if (typeof obj !== 'object' || obj === null) {
104         return '';
105     }
106
107     var arrayFormat;
108     if (options.arrayFormat in arrayPrefixGenerators) {
109         arrayFormat = options.arrayFormat;
110     } else if ('indices' in options) {
111         arrayFormat = options.indices ? 'indices' : 'repeat';
112     } else {
113         arrayFormat = 'indices';
114     }
115
116     var generateArrayPrefix = arrayPrefixGenerators[arrayFormat];
117
118     if (!objKeys) {
119         objKeys = Object.keys(obj);
120     }
121
122     if (sort) {
123         objKeys.sort(sort);
124     }
125
126     for (var i = 0; i < objKeys.length; ++i) {
127         var key = objKeys[i];
128
129         if (skipNulls && obj[key] === null) {
130             continue;
131         }
132
133         keys = keys.concat(stringify(obj[key], key, generateArrayPrefix, strictNullHandling, skipNulls, encoder, filter, sort, allowDots));
134     }
135
136     return keys.join(delimiter);
137 };