Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/joshuawise/negotiated
A low-level, standards-compliant utility for parsing HTTP content negotiation headers
https://github.com/joshuawise/negotiated
accept content-negotiation http
Last synced: 26 days ago
JSON representation
A low-level, standards-compliant utility for parsing HTTP content negotiation headers
- Host: GitHub
- URL: https://github.com/joshuawise/negotiated
- Owner: JoshuaWise
- License: mit
- Created: 2018-07-12T15:55:08.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2020-12-31T16:26:52.000Z (almost 4 years ago)
- Last Synced: 2024-11-14T11:44:19.453Z (about 1 month ago)
- Topics: accept, content-negotiation, http
- Language: JavaScript
- Homepage:
- Size: 16.6 KB
- Stars: 2
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# negotiated [![Build Status](https://travis-ci.org/JoshuaWise/negotiated.svg?branch=master)](https://travis-ci.org/JoshuaWise/negotiated)
This is a low-level utility for correctly parsing the HTTP content negotiation headers. It doesn't interpret the parsed values in any way, except for ensuring that they are syntactically correct.
## Installation
```bash
npm install --save negotiated
```## Usage
```js
const negotiated = require('negotiated');const best = Array.from(negotiated.languages('fr;q=0.4, ja-JP;q=0.2, de-DE;q=0.7, en;q=0.5'))
.reduce((a, b) => a.weight >= b.weight ? a : b);console.log(best.language); // => "de-de"
```This package exports six functions:
- `mediaTypes()`: parses the Accept header, emitting `{ type, params, weight, extensions }`
- `charsets()`: parses the Accept-Charset header, emitting `{ charset, weight }`
- `encodings()`: parses the Accept-Encoding header, emitting `{ encoding, weight }`
- `languages()`: parses the Accept-Language header, emitting `{ language, weight }`
- `transferEncodings()`: parses the TE header, emitting `{ encoding, params, weight }`
- `parameters()`: parses the `params` and `extensions` found above, emitting `{ key, value }`Each of the exported functions takes a string as the only argument. An iterator is returned, which parses one comma-separated item at a time. If the input string is invalid (according to [RFC 7230](https://tools.ietf.org/html/rfc7230) or [RFC 7231](https://tools.ietf.org/html/rfc7231)), an error will be thrown mid-iteration.
## Examples
#### Iterating over the Accept-Encoding header
```js
const negotiated = require('negotiated');for (const { encoding, weight } of negotiated.encodings('gzip;q=0.5, my-custom-encoding;q=1')) {
if (weight > 0.8) console.log(`${encoding} is desired`);
}// => "my-custom-encoding is desired"
```#### Parsing media parameters
```js
const negotiated = require('negotiated');const [{ params }] = Array.from(negotiated.mediaTypes('application/json; CHARSET="utf-8"'));
console.log(Array.from(negotiated.parameters(params))); // => [{ key: 'charset', value: 'utf-8' }]
```