orionsoft-react-scripts
Version:
Orionsoft Configuration and scripts for Create React App.
61 lines (37 loc) • 2.84 kB
Markdown
# Parse `Content-Type` Header Strings
This package will parse the [`Content-Type`](https://tools.ietf.org/html/rfc7231#section-3.1.1.1) header field into an introspectable data structure, whose parameters can be manipulated:
```js
const contentTypeParser = require("content-type-parser");
const contentType = contentTypeParser(`Text/HTML;Charset="utf-8"`);
console.assert(contentType.toString() === "text/html;charset=utf-8");
console.assert(contentType.type === "text");
console.assert(contentType.subtype === "html");
console.assert(contentType.get("charset") === "utf-8");
contentType.set("charset", "windows-1252");
console.assert(contentType.get("charset") === "windows-1252");
console.assert(contentType.toString() === "text/html;charset=windows-1252");
console.assert(contentType.isHTML() === true);
console.assert(contentType.isXML() === false);
console.assert(contentType.isText() === true);
```
Note how parsing will lowercase the type, subtype, and parameter name tokens (but not parameter values).
If the passed string cannot be parsed as a content-type, `contentTypeParser` will return `null`.
## `ContentType` instance API
This package's main module's default export will return an instance of the `ContentType` class, which has the following public APIs:
### Properties
- `type`: the top-level media type, e.g. `"text"`
- `subtype`: the subtype, e.g. `"html"`
- `parameterList`: an array of `{ separator, key, value }` pairs representing the parameters. The `separator` field contains any whitespace, not just the `;` character.
### Parameter manipulation
In general you should not directly manipulate `parameterList`. Instead, use the following APIs:
- `get("key")`: returns the value of the parameter with the given key, or `undefined` if no such parameter is present
- `set("key", "value")`: adds the given key/value pair to the parameter list, or overwrites the existing value if an entry already existed
Both of these will lowercase the keys.
### MIME type tests
- `isHTML()`: returns true if this instance's MIME type is [the HTML MIME type](https://html.spec.whatwg.org/multipage/infrastructure.html#html-mime-type), `"text/html"`
- `isXML()`: returns true if this instance's MIME type is [an XML MIME type](https://html.spec.whatwg.org/multipage/infrastructure.html#xml-mime-type)
- `isText()`: returns true if this instance's top-level media type is `"text"`
### Serialization
- `toString()` will return a canonicalized representation of the content-type, re-built from the parsed components
## Credits
This package was originally based on the excellent work of [ ](https://github.com/nicolashenry), [in jsdom](https://github.com/tmpvar/jsdom/blob/16fd85618f2705d181232f6552125872a37164bc/lib/jsdom/living/helpers/headers.js). It has since been pulled out into this separate package.