Skip to content

Latest commit

 

History

History

mime

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

@thi.ng/mime

npm version npm downloads Mastodon Follow

This project is part of the @thi.ng/umbrella monorepo and anti-framework.

About

650+ file extension to MIME type mappings, based on mime-db.

All MIME type mappings based on mime-db (2022-04-07). For filesize reasons only a small selected number of vendor MIME types (aka */vnd.*) are included. Most of the omitted ones are fairly obscure anyway, so likely not problematic...

Additionally, this package defines several MIME types not included in the original DB, as well as some preference overrides.

Status

STABLE - used in production

Search or submit any issues for this package

Related packages

  • @thi.ng/dl-asset - Canvas, video recording & file asset download helpers for web apps

Installation

yarn add @thi.ng/mime

ES module import:

<script type="module" src="https://cdn.skypack.dev/@thi.ng/mime"></script>

Skypack documentation

For Node.js REPL:

const mime = await import("@thi.ng/mime");

Package sizes (brotli'd, pre-treeshake): ESM: 4.51 KB

Dependencies

None

API

Generated API docs

This package exposes a MIME_TYPES object which provides mappings from file extensions to MIME types. For each extension one or more MIME types are provided, with the default type always in first position.

import { MIME_TYPES } from "@thi.ng/mime";

MIME_TYPES.mp3
// [ 'audio/mpeg', 'audio/mp3' ]

MIME_TYPES.jpg
// [ 'image/jpeg' ]

MIME_TYPES.jpeg
// [ 'image/jpeg' ]

To simplify lookup and support a fallback type, the package also has preferredType() function:

import { preferredType } from "@thi.ng/mime";

preferredType("mp3")
// "audio/mpeg"

// unknown file extension w/ default fallback type
preferredType("foo")
// "application/octet-stream"

// unknown file extension w/ given fallback type
preferredType("foo", "text/plain")
// "text/plain"

Since v0.3.0 reverse lookups are possible too, using preferredExtension() (also supports fallback):

preferredExtension("image/svg+xml");
// "svg"

preferredExtension("image/foo");
// "bin" (default fallback)

preferredExtension("image/foo", "dat");
// "dat" (custom fallback)

Conversion from mime-db

  1. Download the latest version of mime-db's JSON index and save it to [packages/mime/]tools/mime-db.json
  2. Run the following command to build an up-to-date index (assumes the umbrella repo has been pre-built already). Output will always be be written to src/generated.ts.
# from the thi.ng/umbrella repo root
cd packages/mime
yarn tool:convert

Additional configuration options are available in the tools/convert.ts script.

Authors

If this project contributes to an academic publication, please cite it as:

@misc{thing-mime,
  title = "@thi.ng/mime",
  author = "Karsten Schmidt",
  note = "https://thi.ng/mime",
  year = 2020
}

License

© 2020 - 2023 Karsten Schmidt // Apache License 2.0