| @@ 4225-4414 (lines=190) @@ | ||
| 4222 | return utils.compact(obj); |
|
| 4223 | }; |
|
| 4224 | ||
| 4225 | },{"./utils":16}],15:[function(require,module,exports){ |
|
| 4226 | 'use strict'; |
|
| 4227 | ||
| 4228 | var utils = require('./utils'); |
|
| 4229 | var formats = require('./formats'); |
|
| 4230 | ||
| 4231 | var arrayPrefixGenerators = { |
|
| 4232 | brackets: function brackets(prefix) { |
|
| 4233 | return prefix + '[]'; |
|
| 4234 | }, |
|
| 4235 | indices: function indices(prefix, key) { |
|
| 4236 | return prefix + '[' + key + ']'; |
|
| 4237 | }, |
|
| 4238 | repeat: function repeat(prefix) { |
|
| 4239 | return prefix; |
|
| 4240 | } |
|
| 4241 | }; |
|
| 4242 | ||
| 4243 | var toISO = Date.prototype.toISOString; |
|
| 4244 | ||
| 4245 | var defaults = { |
|
| 4246 | delimiter: '&', |
|
| 4247 | encode: true, |
|
| 4248 | encoder: utils.encode, |
|
| 4249 | serializeDate: function serializeDate(date) { |
|
| 4250 | return toISO.call(date); |
|
| 4251 | }, |
|
| 4252 | skipNulls: false, |
|
| 4253 | strictNullHandling: false |
|
| 4254 | }; |
|
| 4255 | ||
| 4256 | var stringify = function stringify(object, prefix, generateArrayPrefix, strictNullHandling, skipNulls, encoder, filter, sort, allowDots, serializeDate, formatter) { |
|
| 4257 | var obj = object; |
|
| 4258 | if (typeof filter === 'function') { |
|
| 4259 | obj = filter(prefix, obj); |
|
| 4260 | } else if (obj instanceof Date) { |
|
| 4261 | obj = serializeDate(obj); |
|
| 4262 | } else if (obj === null) { |
|
| 4263 | if (strictNullHandling) { |
|
| 4264 | return encoder ? encoder(prefix) : prefix; |
|
| 4265 | } |
|
| 4266 | ||
| 4267 | obj = ''; |
|
| 4268 | } |
|
| 4269 | ||
| 4270 | if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || utils.isBuffer(obj)) { |
|
| 4271 | if (encoder) { |
|
| 4272 | return [formatter(encoder(prefix)) + '=' + formatter(encoder(obj))]; |
|
| 4273 | } |
|
| 4274 | return [formatter(prefix) + '=' + formatter(String(obj))]; |
|
| 4275 | } |
|
| 4276 | ||
| 4277 | var values = []; |
|
| 4278 | ||
| 4279 | if (typeof obj === 'undefined') { |
|
| 4280 | return values; |
|
| 4281 | } |
|
| 4282 | ||
| 4283 | var objKeys; |
|
| 4284 | if (Array.isArray(filter)) { |
|
| 4285 | objKeys = filter; |
|
| 4286 | } else { |
|
| 4287 | var keys = Object.keys(obj); |
|
| 4288 | objKeys = sort ? keys.sort(sort) : keys; |
|
| 4289 | } |
|
| 4290 | ||
| 4291 | for (var i = 0; i < objKeys.length; ++i) { |
|
| 4292 | var key = objKeys[i]; |
|
| 4293 | ||
| 4294 | if (skipNulls && obj[key] === null) { |
|
| 4295 | continue; |
|
| 4296 | } |
|
| 4297 | ||
| 4298 | if (Array.isArray(obj)) { |
|
| 4299 | values = values.concat(stringify( |
|
| 4300 | obj[key], |
|
| 4301 | generateArrayPrefix(prefix, key), |
|
| 4302 | generateArrayPrefix, |
|
| 4303 | strictNullHandling, |
|
| 4304 | skipNulls, |
|
| 4305 | encoder, |
|
| 4306 | filter, |
|
| 4307 | sort, |
|
| 4308 | allowDots, |
|
| 4309 | serializeDate, |
|
| 4310 | formatter |
|
| 4311 | )); |
|
| 4312 | } else { |
|
| 4313 | values = values.concat(stringify( |
|
| 4314 | obj[key], |
|
| 4315 | prefix + (allowDots ? '.' + key : '[' + key + ']'), |
|
| 4316 | generateArrayPrefix, |
|
| 4317 | strictNullHandling, |
|
| 4318 | skipNulls, |
|
| 4319 | encoder, |
|
| 4320 | filter, |
|
| 4321 | sort, |
|
| 4322 | allowDots, |
|
| 4323 | serializeDate, |
|
| 4324 | formatter |
|
| 4325 | )); |
|
| 4326 | } |
|
| 4327 | } |
|
| 4328 | ||
| 4329 | return values; |
|
| 4330 | }; |
|
| 4331 | ||
| 4332 | module.exports = function (object, opts) { |
|
| 4333 | var obj = object; |
|
| 4334 | var options = opts || {}; |
|
| 4335 | var delimiter = typeof options.delimiter === 'undefined' ? defaults.delimiter : options.delimiter; |
|
| 4336 | var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling; |
|
| 4337 | var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : defaults.skipNulls; |
|
| 4338 | var encode = typeof options.encode === 'boolean' ? options.encode : defaults.encode; |
|
| 4339 | var encoder = encode ? (typeof options.encoder === 'function' ? options.encoder : defaults.encoder) : null; |
|
| 4340 | var sort = typeof options.sort === 'function' ? options.sort : null; |
|
| 4341 | var allowDots = typeof options.allowDots === 'undefined' ? false : options.allowDots; |
|
| 4342 | var serializeDate = typeof options.serializeDate === 'function' ? options.serializeDate : defaults.serializeDate; |
|
| 4343 | if (typeof options.format === 'undefined') { |
|
| 4344 | options.format = formats.default; |
|
| 4345 | } else if (!Object.prototype.hasOwnProperty.call(formats.formatters, options.format)) { |
|
| 4346 | throw new TypeError('Unknown format option provided.'); |
|
| 4347 | } |
|
| 4348 | var formatter = formats.formatters[options.format]; |
|
| 4349 | var objKeys; |
|
| 4350 | var filter; |
|
| 4351 | ||
| 4352 | if (options.encoder !== null && options.encoder !== undefined && typeof options.encoder !== 'function') { |
|
| 4353 | throw new TypeError('Encoder has to be a function.'); |
|
| 4354 | } |
|
| 4355 | ||
| 4356 | if (typeof options.filter === 'function') { |
|
| 4357 | filter = options.filter; |
|
| 4358 | obj = filter('', obj); |
|
| 4359 | } else if (Array.isArray(options.filter)) { |
|
| 4360 | filter = options.filter; |
|
| 4361 | objKeys = filter; |
|
| 4362 | } |
|
| 4363 | ||
| 4364 | var keys = []; |
|
| 4365 | ||
| 4366 | if (typeof obj !== 'object' || obj === null) { |
|
| 4367 | return ''; |
|
| 4368 | } |
|
| 4369 | ||
| 4370 | var arrayFormat; |
|
| 4371 | if (options.arrayFormat in arrayPrefixGenerators) { |
|
| 4372 | arrayFormat = options.arrayFormat; |
|
| 4373 | } else if ('indices' in options) { |
|
| 4374 | arrayFormat = options.indices ? 'indices' : 'repeat'; |
|
| 4375 | } else { |
|
| 4376 | arrayFormat = 'indices'; |
|
| 4377 | } |
|
| 4378 | ||
| 4379 | var generateArrayPrefix = arrayPrefixGenerators[arrayFormat]; |
|
| 4380 | ||
| 4381 | if (!objKeys) { |
|
| 4382 | objKeys = Object.keys(obj); |
|
| 4383 | } |
|
| 4384 | ||
| 4385 | if (sort) { |
|
| 4386 | objKeys.sort(sort); |
|
| 4387 | } |
|
| 4388 | ||
| 4389 | for (var i = 0; i < objKeys.length; ++i) { |
|
| 4390 | var key = objKeys[i]; |
|
| 4391 | ||
| 4392 | if (skipNulls && obj[key] === null) { |
|
| 4393 | continue; |
|
| 4394 | } |
|
| 4395 | ||
| 4396 | keys = keys.concat(stringify( |
|
| 4397 | obj[key], |
|
| 4398 | key, |
|
| 4399 | generateArrayPrefix, |
|
| 4400 | strictNullHandling, |
|
| 4401 | skipNulls, |
|
| 4402 | encoder, |
|
| 4403 | filter, |
|
| 4404 | sort, |
|
| 4405 | allowDots, |
|
| 4406 | serializeDate, |
|
| 4407 | formatter |
|
| 4408 | )); |
|
| 4409 | } |
|
| 4410 | ||
| 4411 | return keys.join(delimiter); |
|
| 4412 | }; |
|
| 4413 | ||
| 4414 | },{"./formats":12,"./utils":16}],16:[function(require,module,exports){ |
|
| 4415 | 'use strict'; |
|
| 4416 | ||
| 4417 | var has = Object.prototype.hasOwnProperty; |
|
| @@ 315-504 (lines=190) @@ | ||
| 312 | return utils.compact(obj); |
|
| 313 | }; |
|
| 314 | ||
| 315 | },{"./utils":6}],5:[function(require,module,exports){ |
|
| 316 | 'use strict'; |
|
| 317 | ||
| 318 | var utils = require('./utils'); |
|
| 319 | var formats = require('./formats'); |
|
| 320 | ||
| 321 | var arrayPrefixGenerators = { |
|
| 322 | brackets: function brackets(prefix) { |
|
| 323 | return prefix + '[]'; |
|
| 324 | }, |
|
| 325 | indices: function indices(prefix, key) { |
|
| 326 | return prefix + '[' + key + ']'; |
|
| 327 | }, |
|
| 328 | repeat: function repeat(prefix) { |
|
| 329 | return prefix; |
|
| 330 | } |
|
| 331 | }; |
|
| 332 | ||
| 333 | var toISO = Date.prototype.toISOString; |
|
| 334 | ||
| 335 | var defaults = { |
|
| 336 | delimiter: '&', |
|
| 337 | encode: true, |
|
| 338 | encoder: utils.encode, |
|
| 339 | serializeDate: function serializeDate(date) { |
|
| 340 | return toISO.call(date); |
|
| 341 | }, |
|
| 342 | skipNulls: false, |
|
| 343 | strictNullHandling: false |
|
| 344 | }; |
|
| 345 | ||
| 346 | var stringify = function stringify(object, prefix, generateArrayPrefix, strictNullHandling, skipNulls, encoder, filter, sort, allowDots, serializeDate, formatter) { |
|
| 347 | var obj = object; |
|
| 348 | if (typeof filter === 'function') { |
|
| 349 | obj = filter(prefix, obj); |
|
| 350 | } else if (obj instanceof Date) { |
|
| 351 | obj = serializeDate(obj); |
|
| 352 | } else if (obj === null) { |
|
| 353 | if (strictNullHandling) { |
|
| 354 | return encoder ? encoder(prefix) : prefix; |
|
| 355 | } |
|
| 356 | ||
| 357 | obj = ''; |
|
| 358 | } |
|
| 359 | ||
| 360 | if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || utils.isBuffer(obj)) { |
|
| 361 | if (encoder) { |
|
| 362 | return [formatter(encoder(prefix)) + '=' + formatter(encoder(obj))]; |
|
| 363 | } |
|
| 364 | return [formatter(prefix) + '=' + formatter(String(obj))]; |
|
| 365 | } |
|
| 366 | ||
| 367 | var values = []; |
|
| 368 | ||
| 369 | if (typeof obj === 'undefined') { |
|
| 370 | return values; |
|
| 371 | } |
|
| 372 | ||
| 373 | var objKeys; |
|
| 374 | if (Array.isArray(filter)) { |
|
| 375 | objKeys = filter; |
|
| 376 | } else { |
|
| 377 | var keys = Object.keys(obj); |
|
| 378 | objKeys = sort ? keys.sort(sort) : keys; |
|
| 379 | } |
|
| 380 | ||
| 381 | for (var i = 0; i < objKeys.length; ++i) { |
|
| 382 | var key = objKeys[i]; |
|
| 383 | ||
| 384 | if (skipNulls && obj[key] === null) { |
|
| 385 | continue; |
|
| 386 | } |
|
| 387 | ||
| 388 | if (Array.isArray(obj)) { |
|
| 389 | values = values.concat(stringify( |
|
| 390 | obj[key], |
|
| 391 | generateArrayPrefix(prefix, key), |
|
| 392 | generateArrayPrefix, |
|
| 393 | strictNullHandling, |
|
| 394 | skipNulls, |
|
| 395 | encoder, |
|
| 396 | filter, |
|
| 397 | sort, |
|
| 398 | allowDots, |
|
| 399 | serializeDate, |
|
| 400 | formatter |
|
| 401 | )); |
|
| 402 | } else { |
|
| 403 | values = values.concat(stringify( |
|
| 404 | obj[key], |
|
| 405 | prefix + (allowDots ? '.' + key : '[' + key + ']'), |
|
| 406 | generateArrayPrefix, |
|
| 407 | strictNullHandling, |
|
| 408 | skipNulls, |
|
| 409 | encoder, |
|
| 410 | filter, |
|
| 411 | sort, |
|
| 412 | allowDots, |
|
| 413 | serializeDate, |
|
| 414 | formatter |
|
| 415 | )); |
|
| 416 | } |
|
| 417 | } |
|
| 418 | ||
| 419 | return values; |
|
| 420 | }; |
|
| 421 | ||
| 422 | module.exports = function (object, opts) { |
|
| 423 | var obj = object; |
|
| 424 | var options = opts || {}; |
|
| 425 | var delimiter = typeof options.delimiter === 'undefined' ? defaults.delimiter : options.delimiter; |
|
| 426 | var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling; |
|
| 427 | var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : defaults.skipNulls; |
|
| 428 | var encode = typeof options.encode === 'boolean' ? options.encode : defaults.encode; |
|
| 429 | var encoder = encode ? (typeof options.encoder === 'function' ? options.encoder : defaults.encoder) : null; |
|
| 430 | var sort = typeof options.sort === 'function' ? options.sort : null; |
|
| 431 | var allowDots = typeof options.allowDots === 'undefined' ? false : options.allowDots; |
|
| 432 | var serializeDate = typeof options.serializeDate === 'function' ? options.serializeDate : defaults.serializeDate; |
|
| 433 | if (typeof options.format === 'undefined') { |
|
| 434 | options.format = formats.default; |
|
| 435 | } else if (!Object.prototype.hasOwnProperty.call(formats.formatters, options.format)) { |
|
| 436 | throw new TypeError('Unknown format option provided.'); |
|
| 437 | } |
|
| 438 | var formatter = formats.formatters[options.format]; |
|
| 439 | var objKeys; |
|
| 440 | var filter; |
|
| 441 | ||
| 442 | if (options.encoder !== null && options.encoder !== undefined && typeof options.encoder !== 'function') { |
|
| 443 | throw new TypeError('Encoder has to be a function.'); |
|
| 444 | } |
|
| 445 | ||
| 446 | if (typeof options.filter === 'function') { |
|
| 447 | filter = options.filter; |
|
| 448 | obj = filter('', obj); |
|
| 449 | } else if (Array.isArray(options.filter)) { |
|
| 450 | filter = options.filter; |
|
| 451 | objKeys = filter; |
|
| 452 | } |
|
| 453 | ||
| 454 | var keys = []; |
|
| 455 | ||
| 456 | if (typeof obj !== 'object' || obj === null) { |
|
| 457 | return ''; |
|
| 458 | } |
|
| 459 | ||
| 460 | var arrayFormat; |
|
| 461 | if (options.arrayFormat in arrayPrefixGenerators) { |
|
| 462 | arrayFormat = options.arrayFormat; |
|
| 463 | } else if ('indices' in options) { |
|
| 464 | arrayFormat = options.indices ? 'indices' : 'repeat'; |
|
| 465 | } else { |
|
| 466 | arrayFormat = 'indices'; |
|
| 467 | } |
|
| 468 | ||
| 469 | var generateArrayPrefix = arrayPrefixGenerators[arrayFormat]; |
|
| 470 | ||
| 471 | if (!objKeys) { |
|
| 472 | objKeys = Object.keys(obj); |
|
| 473 | } |
|
| 474 | ||
| 475 | if (sort) { |
|
| 476 | objKeys.sort(sort); |
|
| 477 | } |
|
| 478 | ||
| 479 | for (var i = 0; i < objKeys.length; ++i) { |
|
| 480 | var key = objKeys[i]; |
|
| 481 | ||
| 482 | if (skipNulls && obj[key] === null) { |
|
| 483 | continue; |
|
| 484 | } |
|
| 485 | ||
| 486 | keys = keys.concat(stringify( |
|
| 487 | obj[key], |
|
| 488 | key, |
|
| 489 | generateArrayPrefix, |
|
| 490 | strictNullHandling, |
|
| 491 | skipNulls, |
|
| 492 | encoder, |
|
| 493 | filter, |
|
| 494 | sort, |
|
| 495 | allowDots, |
|
| 496 | serializeDate, |
|
| 497 | formatter |
|
| 498 | )); |
|
| 499 | } |
|
| 500 | ||
| 501 | return keys.join(delimiter); |
|
| 502 | }; |
|
| 503 | ||
| 504 | },{"./formats":2,"./utils":6}],6:[function(require,module,exports){ |
|
| 505 | 'use strict'; |
|
| 506 | ||
| 507 | var has = Object.prototype.hasOwnProperty; |
|