@remix-run/mime
v0.4.0
Published
Utilities for working with MIME types
Maintainers
Readme
mime
MIME type detection and content-type helpers for Remix. This package maps extensions to MIME types and provides utilities for charset and compressibility checks.
Features
- MIME Detection - Detect MIME types from extensions and filenames
- Content-Type Helpers - Build
Content-Typevalues with charset handling - Compression Signals - Check whether a media type is likely compressible
- Generated Data - Built from mime-db
Installation
npm i remixUsage
detectMimeType(extension)
Detects the MIME type for a given file extension or filename.
import { detectMimeType } from 'remix/mime'
detectMimeType('txt') // 'text/plain'
detectMimeType('.txt') // 'text/plain'
detectMimeType('file.txt') // 'text/plain'
detectMimeType('path/to/file.txt') // 'text/plain'
detectMimeType('unknown') // undefineddetectContentType(extension)
Detects the Content-Type header value for a given file extension or filename, including charset for text-based types. See mimeTypeToContentType for charset logic.
import { detectContentType } from 'remix/mime'
detectContentType('css') // 'text/css; charset=utf-8'
detectContentType('.json') // 'application/json; charset=utf-8'
detectContentType('image.png') // 'image/png'
detectContentType('path/to/file.unknown') // undefinedisCompressibleMimeType(mimeType)
Checks if a MIME type is known to be compressible.
import { isCompressibleMimeType } from 'remix/mime'
isCompressibleMimeType('text/html') // true
isCompressibleMimeType('application/json') // true
isCompressibleMimeType('image/png') // false
isCompressibleMimeType('video/mp4') // falseFor convenience, the function also accepts a full Content-Type header value:
import { isCompressibleMimeType } from 'remix/mime'
isCompressibleMimeType('text/html; charset=utf-8') // true
isCompressibleMimeType('application/json; charset=utf-8') // true
isCompressibleMimeType('image/png; charset=utf-8') // false
isCompressibleMimeType('video/mp4; charset=utf-8') // falsemimeTypeToContentType(mimeType)
Converts a MIME type to a Content-Type header value, adding ; charset=utf-8 to text-based MIME types: text/* (except text/xml which has built-in encoding declarations), application/json, application/javascript, and all +json suffixed types. All other types are returned unchanged.
import { mimeTypeToContentType } from 'remix/mime'
mimeTypeToContentType('text/css') // 'text/css; charset=utf-8'
mimeTypeToContentType('application/json') // 'application/json; charset=utf-8'
mimeTypeToContentType('application/ld+json') // 'application/ld+json; charset=utf-8'
mimeTypeToContentType('image/png') // 'image/png'defineMimeType(definition)
Registers or overrides a MIME type for one or more file extensions.
import { defineMimeType } from 'remix/mime'
defineMimeType({
extensions: ['myformat'],
mimeType: 'application/x-myformat',
})You can also optionally configure the charset and whether the MIME type is compressible:
defineMimeType({
extensions: ['myformat'],
mimeType: 'application/x-myformat',
compressible: true,
charset: 'utf-8',
})License
MIT
