Socket
Book a DemoInstallSign in
Socket

http-media-type

Package Overview
Dependencies
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Socket logo

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.

1.3.3
latest
Source
npmnpm
Version published
Weekly downloads
0
Maintainers
1
Weekly downloads
 
Created
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

media-type

FAQs

Package last updated on 07 Feb 2023

Did you know?

Socket

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

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.