Socket
Socket
Sign inDemoInstall

http-media-type

Package Overview
Dependencies
0
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    http-media-type

A utility library for processing media types of HTTP requests and responses.


Version published
Weekly downloads
4
increased by300%
Maintainers
1
Created
Weekly downloads
 

Readme

Source

HTTP Media Type

A utility library for processing HTTP and MIME media types.

Key features

  • Parse and format media types according to RFC 7231, RFC 6838.
  • Compare for equality and compatibility with other media types.
  • Custom process media type parameters in parsing and comparison.

Quick guide

Instantiating

A new media type instance can be created either with separate arguments

const mediaType = new MediaType('text', 'plain')
// text/plain

const mediaType = new MediaType('text')
// text/*

const mediaType = new MediaType()
// */*

const mediaType = new MediaType('text', 'plain', {
	charset: 'utf-8'
})
// text/plain; charset=utf-8

... or with a single combined argument.

const mediaType = new MediaType({
	type: 'text',
	subtype: 'plain'
})
// text/plain

const mediaType = new MediaType({
	type: 'application',
	subtype: 'vnd.company.media',
	suffix: 'format',
	parameters: {
		version: 1
	}
})
// application/vnd.company.media+format; version=1

Parsing

A new media type instance can be parsed from a string

const mediaType = MediaType.parse('application/vnd.company.media+format; version=1')

... and with additional parameter processing

const mediaType = MediaType.parse('application/vnd.company.media+format; version=1; embedded=other-content; q=0.9',
	(parameter, value) => {
		switch (parameter) {
			case 'version':
				// convert 'version' to int
				return Number.parseInt(value)
			case 'q':
				// ignore 'q'
				return undefined
			default:
				// store other parmeter values as strings
				return value
		}
	})

Formatting

The formatted property holds the textual representation of a media type instance

const mediaType = ('application', 'vnd.company.media', {
	version: 2,
	embedded: 'other-media'
})

console.log(mediaType.formatted)
// application/vnd.company.media; version=2; embedded=other-media

Parameters

Media type parameters are case-insensitive when individually accessed with property accessors or with in operator

const mediaType = new MediaType('application/json; CharSet=utf-8; VARIANT=HAL')
const charset = mediaType.parameters.charset
// utf-8

const hasVariant = 'Variant' in mediaType.parameters
// true

... but preserve letter case when iterated or retrieved altogether

const mediaType = new MediaType('application/json; CharSet=utf-8; VARIANT=HAL')
for (const parameter in mediaType.parameters) {
	// CharSet
	// VARIANT
}

const prameters = Object.keys(mediaType.parameters)
// ['CharSet', 'VARIANT']

Comparison

Media type instances can be compared for equality using the equals method

const mediaType1 = new MediaType('text', 'plain')
const mediaType2 = MediaType.parse('text/plain')
mediaType1.equals(mediaType2)
// true

const mediaType1 = new MediaType('text', 'plain')
const mediaType2 = MediaType.parse('text/plain; charset=utf-8')
mediaType1.equals(mediaType2)
// false

const mediaType1 = new MediaType('text', 'plain')
const mediaType2 = MediaType.parse('text/*')
mediaType1.equals(mediaType2)
// false

...and with custom parameter value comparison

const mediaType1 = MediaType.parse('text/plain; charset=UTF-8; version=2')
const mediaType2 = MediaType.parse('text/plain; charset=utf-8')

mediaType1.equals(mediaType2)
// false

mediaType1.equals(mediaType2, (parameter, value1, value2) => {
	// ignore 'version' parameter
	// compare other parameters as case-insensitive
	return parameter === 'version'
		|| value1.toLowerCase() === value2.toLowerCase()
})
// true

Comparison with wildcards

Media types can be compared to media types with wildcards (*) using the matches method.

const mediaType1 = MediaType.parse('text/plain; encoding=none')
const mediaType2 = MediaType.parse('text/*; charset=utf-8; encoding=zip')

mediaType1.equals(mediaType2)
// false

mediaType1.matches(mediaType2)
// true

An custom parameter value comparison can be applied, just like in the equals method.

License

MIT

Keywords

FAQs

Last updated on 07 Feb 2023

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc