| 7 | const JSON5 = require('json5') |
| 8 | |
| 9 | function stringifyQuery (obj, useJSON) { |
| 10 | if (useJSON) return `?${JSON5.stringify(obj)}` |
| 11 | |
| 12 | const res = obj |
| 13 | ? Object.keys(obj).sort().map(key => { |
| 14 | const val = obj[key] |
| 15 | |
| 16 | if (val === undefined) { |
| 17 | return val |
| 18 | } |
| 19 | |
| 20 | if (val === true) { |
| 21 | return key |
| 22 | } |
| 23 | |
| 24 | if (Array.isArray(val)) { |
| 25 | const key2 = `${key}[]` |
| 26 | const result = [] |
| 27 | val.slice().forEach(val2 => { |
| 28 | if (val2 === undefined) { |
| 29 | return |
| 30 | } |
| 31 | result.push(`${key2}=${encodeURIComponent(val2)}`) |
| 32 | }) |
| 33 | return result.join('&') |
| 34 | } |
| 35 | |
| 36 | return `${key}=${encodeURIComponent(val)}` |
| 37 | }).filter(x => x).join('&') |
| 38 | : null |
| 39 | return res ? `?${res}` : '' |
| 40 | } |
| 41 | |
| 42 | module.exports = stringifyQuery |