Skip to content

Latest commit

 

History

80 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

fast-content-type-parse

NPM version NPM downloads CI neostandard javascript style Security Responsible Disclosure

Parse HTTP Content-Type header according to RFC 9110.

Installation

npm install fast-content-type-parse

Usage

const fastContentTypeParse = require('fast-content-type-parse')

fastContentTypeParse.parse(string)

const contentType = fastContentTypeParse.parse('application/json; charset=utf-8')

Parse a Content-Type header. Throws a TypeError if the string is invalid.

It will return an object with the following properties (examples are shown for the string 'application/json; charset=utf-8'):

  • type: The media type (the type and subtype, always lowercase). Example: 'application/json'

  • parameters: An object of the parameters in the media type (name of parameter always lowercase). Example: {charset: 'utf-8'}

fastContentTypeParse.safeParse(string)

const contentType = fastContentTypeParse.safeParse('application/json; charset=utf-8')

Parse a Content-Type header. It will not throw an Error if the header is invalid.

This will return an object with the following properties (examples are shown for the string 'application/json; charset=utf-8'):

  • type: The media type (the type and subtype, always lowercase). Example: 'application/json'

  • parameters: An object of the parameters in the media type (name of parameter always lowercase). Example: {charset: 'utf-8'}

In case the header is invalid, it will return an object with an empty string '' as type and an empty Object for parameters.

Grammar

The parser implements the media-type grammar of RFC 9110 Section 8.3.1 exactly, without extensions:

media-type      = type "/" subtype parameters
type            = token
subtype         = token
parameters      = *( OWS ";" OWS [ parameter ] )
parameter       = parameter-name "=" parameter-value
parameter-name  = token
parameter-value = ( token / quoted-string )
OWS             = *( SP / HTAB )

In particular:

  • Only spaces and horizontal tabs (OWS) are accepted around the media type and the ; separators. Any other whitespace, including CR, LF and Unicode whitespace, is rejected.
  • Empty parameters (text/html;, text/html; ; charset=utf-8) are accepted, as allowed by RFC 9110.
  • type, subtype and parameter names are case-insensitive and are lower-cased. Parameter values are returned as-is.
  • Quoted-pairs in quoted-string values are unescaped.
  • When a parameter appears more than once, the first occurrence wins, matching util.MIMEType, the WHATWG MIME Sniffing Standard and the content-type package.
  • parameters is a null-prototype object, so parameter names such as __proto__ or constructor are ordinary keys.

Benchmarks

npm run benchmark

Benchmarking: "application/json; charset=utf-8"
util#MIMEType x 2,637,188 ops/sec ±0.95% (93 runs sampled)
fast-content-type-parse#parse x 5,165,077 ops/sec ±0.75% (95 runs sampled)
fast-content-type-parse#safeParse x 5,189,599 ops/sec ±0.72% (94 runs sampled)
content-type#parse x 4,227,069 ops/sec ±0.79% (96 runs sampled)
busboy#parseContentType x 777,787 ops/sec ±0.75% (91 runs sampled)
Fastest is fast-content-type-parse#safeParse,fast-content-type-parse#parse

Credits

Based on the npm package content-type.

License

Licensed under MIT.

About

Parse HTTP Content-Type header according to RFC 7231

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

8 stars

Watchers

4 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

Generated from fastify/skeleton