You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

128 lines
3.5 KiB
Markdown

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<div align="center">
<img src="logo.png" alt="mrmime" width="320" />
</div>
<div align="center">
<a href="https://npmjs.org/package/mrmime">
<img src="https://badgen.now.sh/npm/v/mrmime" alt="version" />
</a>
<a href="https://github.com/lukeed/mrmime/actions">
<img src="https://github.com/lukeed/mrmime/workflows/CI/badge.svg" alt="CI" />
</a>
<a href="https://npmjs.org/package/mrmime">
<img src="https://badgen.now.sh/npm/dm/mrmime" alt="downloads" />
</a>
<a href="https://packagephobia.now.sh/result?p=mrmime">
<img src="https://packagephobia.now.sh/badge?p=mrmime" alt="install size" />
</a>
</div>
<div align="center">
A tiny (2.8kB) and fast utility for getting a MIME type from an extension or filename
</div>
## Features
* Lightweight 2.8kB gzip<br>
_Only includes standard mime types; all experimental and vendor-specific mimetypes removed._
* [Performant](#benchmarks)<br>
_All lookups are O(1) with minimal processing._
* Comprehensive Dictionary<br>
_Generated from [`mime-db`](https://github.com/jshttp/mime-db), which aggregates the IANA, NGINX, and Apache datasets._
* Customizable<br>
_Exposes the `mimes` dictionary for easy additions or overrides._
* Supports Native ESM and [Deno](https://deno.land/x/mrmime)<br>
_Ships with CommonJS and ESM support!_
## Install
```
$ npm install --save mrmime
```
## Usage
```js
import { lookup, mimes } from 'mrmime';
// Get a MIME type
// ---
lookup('txt'); //=> "text/plain"
lookup('.txt'); //=> "text/plain"
lookup('a.txt'); //=> "text/plain"
// Unknown extension
// ---
lookup('.xyz'); //=> undefined
// Add extension to dictionary
// ---
mimes['xyz'] = 'hello/world';
lookup('xyz'); //=> "hello/world"
```
## API
### lookup(input)
Returns: `string` or `undefined`
#### input
Type: `string`
The extension or filename to lookup.
> **Important:**
> * Any `input` value is cast to string, lowercased, and trimmed.
> * If a filename or filepath is provided, only the extension will be used.
## Benchmarks
> Running on Node v16.8.0
```
Load times:
mrmime 0.963ms
mime/lite 3.281ms
mime 6.751ms
Benchmark :: plain ("ext")
mime x 598,849 ops/sec ±0.28% (94 runs sampled)
mime/lite x 536,643 ops/sec ±0.11% (97 runs sampled)
mrmime x 835,885 ops/sec ±0.20% (97 runs sampled)
Benchmark :: leading (".ext")
mime x 368,656 ops/sec ±0.19% (99 runs sampled)
mime/lite x 368,318 ops/sec ±0.13% (97 runs sampled)
mrmime x 533,643 ops/sec ±0.10% (96 runs sampled)
Benchmark :: filename ("file.ext")
mime x 326,907 ops/sec ±0.17% (95 runs sampled)
mime/lite x 327,479 ops/sec ±0.12% (98 runs sampled)
mrmime x 512,823 ops/sec ±0.12% (99 runs sampled)
```
## Credits
Of course, a thank-you to [`mime`](https://github.com/broofa/mime) serving the community all these years & for being a all-encompassing MIME type library. I've only ever needed lookup/`getType` functionality  and now ESM support so `mrmime` can only ever support 1/3 of what `mime` offers, at best.
This would not be possible without the team behind [`mime-db`](https://github.com/jshttp/mime-db), who have painstakingly maintained an amazing database for 7+ years.
Artwork created by [mintinol](https://www.deviantart.com/mintinol), which I found [here](https://www.deviantart.com/mintinol/art/Mr-Mime-373927920).
Finally, thanks to [Tim Branyen](https://github.com/tbranyen) for donating the package name :)
## License
MIT © [Luke Edwards](https://lukeed.com)