* Get the extended query parser. * * @param {object} options
(options)
| 130 | */ |
| 131 | |
| 132 | function extendedparser (options) { |
| 133 | var parameterLimit = options.parameterLimit !== undefined |
| 134 | ? options.parameterLimit |
| 135 | : 1000 |
| 136 | var parse = parser('qs') |
| 137 | |
| 138 | if (isNaN(parameterLimit) || parameterLimit < 1) { |
| 139 | throw new TypeError('option parameterLimit must be a positive number') |
| 140 | } |
| 141 | |
| 142 | if (isFinite(parameterLimit)) { |
| 143 | parameterLimit = parameterLimit | 0 |
| 144 | } |
| 145 | |
| 146 | return function queryparse (body) { |
| 147 | var paramCount = parameterCount(body, parameterLimit) |
| 148 | |
| 149 | if (paramCount === undefined) { |
| 150 | debug('too many parameters') |
| 151 | throw createError(413, 'too many parameters', { |
| 152 | type: 'parameters.too.many' |
| 153 | }) |
| 154 | } |
| 155 | |
| 156 | var arrayLimit = Math.max(100, paramCount) |
| 157 | |
| 158 | debug('parse extended urlencoding') |
| 159 | return parse(body, { |
| 160 | allowPrototypes: true, |
| 161 | arrayLimit: arrayLimit, |
| 162 | depth: Infinity, |
| 163 | parameterLimit: parameterLimit |
| 164 | }) |
| 165 | } |
| 166 | } |
| 167 | |
| 168 | /** |
| 169 | * Get the charset of a request. |
no test coverage detected