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

100 lines
4.0 KiB

  1. # mime-db
  2. [![NPM Version][npm-version-image]][npm-url]
  3. [![NPM Downloads][npm-downloads-image]][npm-url]
  4. [![Node.js Version][node-image]][node-url]
  5. [![Build Status][ci-image]][ci-url]
  6. [![Coverage Status][coveralls-image]][coveralls-url]
  7. This is a large database of mime types and information about them.
  8. It consists of a single, public JSON file and does not include any logic,
  9. allowing it to remain as un-opinionated as possible with an API.
  10. It aggregates data from the following sources:
  11. - http://www.iana.org/assignments/media-types/media-types.xhtml
  12. - http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
  13. - http://hg.nginx.org/nginx/raw-file/default/conf/mime.types
  14. ## Installation
  15. ```bash
  16. npm install mime-db
  17. ```
  18. ### Database Download
  19. If you're crazy enough to use this in the browser, you can just grab the
  20. JSON file using [jsDelivr](https://www.jsdelivr.com/). It is recommended to
  21. replace `master` with [a release tag](https://github.com/jshttp/mime-db/tags)
  22. as the JSON format may change in the future.
  23. ```
  24. https://cdn.jsdelivr.net/gh/jshttp/mime-db@master/db.json
  25. ```
  26. ## Usage
  27. ```js
  28. var db = require('mime-db')
  29. // grab data on .js files
  30. var data = db['application/javascript']
  31. ```
  32. ## Data Structure
  33. The JSON file is a map lookup for lowercased mime types.
  34. Each mime type has the following properties:
  35. - `.source` - where the mime type is defined.
  36. If not set, it's probably a custom media type.
  37. - `apache` - [Apache common media types](http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types)
  38. - `iana` - [IANA-defined media types](http://www.iana.org/assignments/media-types/media-types.xhtml)
  39. - `nginx` - [nginx media types](http://hg.nginx.org/nginx/raw-file/default/conf/mime.types)
  40. - `.extensions[]` - known extensions associated with this mime type.
  41. - `.compressible` - whether a file of this type can be gzipped.
  42. - `.charset` - the default charset associated with this type, if any.
  43. If unknown, every property could be `undefined`.
  44. ## Contributing
  45. To edit the database, only make PRs against `src/custom-types.json` or
  46. `src/custom-suffix.json`.
  47. The `src/custom-types.json` file is a JSON object with the MIME type as the
  48. keys and the values being an object with the following keys:
  49. - `compressible` - leave out if you don't know, otherwise `true`/`false` to
  50. indicate whether the data represented by the type is typically compressible.
  51. - `extensions` - include an array of file extensions that are associated with
  52. the type.
  53. - `notes` - human-readable notes about the type, typically what the type is.
  54. - `sources` - include an array of URLs of where the MIME type and the associated
  55. extensions are sourced from. This needs to be a [primary source](https://en.wikipedia.org/wiki/Primary_source);
  56. links to type aggregating sites and Wikipedia are _not acceptable_.
  57. To update the build, run `npm run build`.
  58. ### Adding Custom Media Types
  59. The best way to get new media types included in this library is to register
  60. them with the IANA. The community registration procedure is outlined in
  61. [RFC 6838 section 5](http://tools.ietf.org/html/rfc6838#section-5). Types
  62. registered with the IANA are automatically pulled into this library.
  63. If that is not possible / feasible, they can be added directly here as a
  64. "custom" type. To do this, it is required to have a primary source that
  65. definitively lists the media type. If an extension is going to be listed as
  66. associateed with this media type, the source must definitively link the
  67. media type and extension as well.
  68. [ci-image]: https://badgen.net/github/checks/jshttp/mime-db/master?label=ci
  69. [ci-url]: https://github.com/jshttp/mime-db/actions?query=workflow%3Aci
  70. [coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-db/master
  71. [coveralls-url]: https://coveralls.io/r/jshttp/mime-db?branch=master
  72. [node-image]: https://badgen.net/npm/node/mime-db
  73. [node-url]: https://nodejs.org/en/download
  74. [npm-downloads-image]: https://badgen.net/npm/dm/mime-db
  75. [npm-url]: https://npmjs.org/package/mime-db
  76. [npm-version-image]: https://badgen.net/npm/v/mime-db