# http-querystring-stringify

> Create querystrings

Latest version **2.1.0** (published 2021-11-09) · MIT license · 0 weekly downloads

## Install

```sh
npm install http-querystring-stringify
pnpm add http-querystring-stringify
yarn add http-querystring-stringify
bun add http-querystring-stringify
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.1.0 |
| Published | 2021-11-09 |
| First published | 2016-12-29 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 12.7 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Maintainers | thomas-jensen |

## Links

- npm: https://www.npmjs.com/package/http-querystring-stringify
- Repository: https://github.com/srcagency/http-querystring-stringify
- Homepage: https://github.com/srcagency/http-querystring-stringify#readme
- Issues: https://github.com/srcagency/http-querystring-stringify/issues
- npm.io page: https://npm.io/package/http-querystring-stringify

## Recent versions

- 2.1.0 (latest) — 2021-11-09
- 2.0.0 — 2018-09-25
- 1.0.0 — 2016-12-29

## README

# http-querystring-stringify

Simple, small and correct querystring serialization-only for the browser or
server.

This package is intended for client side code or input data which structure is
defined by the application. It has no DoS protection and simplicity and
correctness is prioritized over performance.

If you need extreme performance you should consider
https://github.com/petkaantonov/querystringparser.

This package was written because serialization seems to happen most often on the
client as a single operation and similar performance-focused libraries had
trade-offs and bugs while others carried huge dependencies.

```js
const {stringify, appendToUrl} = require('http-querystring-stringify')

stringify({
	first: 'John',
	last: 'Wayne',
})
// -> first=John&last=Wayne

stringify({
	brands: ['KitKat', 'Snickers', 'Bounty'],
})
// -> brands[]=KitKat&brands[]=Snickers&brands[]=Bounty

stringify({
	sites: [{name: 'facebook', color: 'blue'}],
})
// -> sites[0][name]=facebook&sites[0][color]=blue

appendToUrl('https://google.com', {
	first: 'John',
	last: 'Wayne',
})
// -> https://google.com?first=John&last=Wayne
appendToUrl('https://google.com', {
	key: undefined,
})
// -> https://google.com
```

- `toJSON` is respected (like `JSON.stringify` does)
- `true` and `false` are converted to `y` or `n` respectively
- `null` is represented by an empty string
- `undefined` values will be skipped completely (like `JSON.stringify` does)
- arrays will be numbered only if they contain arrays or objects themselves

## Compatibility with parsers

Generally there are two types of parsers: those supporting extended nesting and
those that just support repeated keys.

### Perfect support (extended nesting):

- [querystringparser](https://github.com/petkaantonov/querystringparser) (read
  open issues)
- [qs](https://github.com/ljharb/qs)

```js
const input = {
	a: '',
	b: 's',
	c: ['1', '2', '3'],
	d: '&=[]',
	e: ['1', '2', ['3', '4']],
	f: ['1', {a: '1'}],
}

// deepEqual(parse(stringify(input)), input)
// 	-> true
```

### Will flatten:

- [Node.js built-in](https://nodejs.org/api/url.html)
- [URI.js](https://github.com/medialize/URI.js)

```js
parse(
	stringify({
		a: '',
		b: 's',
		c: ['1', '2', '3'],
		d: '&=[]',
		e: ['1', '2', ['3', '4']],
		f: ['1', {a: '1'}],
	})
)
// -> {
// 	a: '',
// 	b: 's',
// 	d: '&=[]',

// 	// expect arrays to be collapsed like this
// 	'c[]': [ '1', '2', '3' ],

// 	// expect objects and multi-level arrays to be flattened like this
// 	'e[0]': '1',
// 	'e[1]': '2',
// 	'e[2][]': [ '3', '4' ],
// 	'f[0]': '1',
// 	'f[1][a]': '1',
// }
```

---
_Source: https://npm.io/package/http-querystring-stringify · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
