| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 | 
							- /*!
 
-  * mime-types
 
-  * Copyright(c) 2014 Jonathan Ong
 
-  * Copyright(c) 2015 Douglas Christopher Wilson
 
-  * MIT Licensed
 
-  */
 
- 'use strict'
 
- /**
 
-  * Module dependencies.
 
-  * @private
 
-  */
 
- var db = require('mime-db')
 
- var extname = require('path').extname
 
- /**
 
-  * Module variables.
 
-  * @private
 
-  */
 
- var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/
 
- var TEXT_TYPE_REGEXP = /^text\//i
 
- /**
 
-  * Module exports.
 
-  * @public
 
-  */
 
- exports.charset = charset
 
- exports.charsets = { lookup: charset }
 
- exports.contentType = contentType
 
- exports.extension = extension
 
- exports.extensions = Object.create(null)
 
- exports.lookup = lookup
 
- exports.types = Object.create(null)
 
- // Populate the extensions/types maps
 
- populateMaps(exports.extensions, exports.types)
 
- /**
 
-  * Get the default charset for a MIME type.
 
-  *
 
-  * @param {string} type
 
-  * @return {boolean|string}
 
-  */
 
- function charset (type) {
 
-   if (!type || typeof type !== 'string') {
 
-     return false
 
-   }
 
-   // TODO: use media-typer
 
-   var match = EXTRACT_TYPE_REGEXP.exec(type)
 
-   var mime = match && db[match[1].toLowerCase()]
 
-   if (mime && mime.charset) {
 
-     return mime.charset
 
-   }
 
-   // default text/* to utf-8
 
-   if (match && TEXT_TYPE_REGEXP.test(match[1])) {
 
-     return 'UTF-8'
 
-   }
 
-   return false
 
- }
 
- /**
 
-  * Create a full Content-Type header given a MIME type or extension.
 
-  *
 
-  * @param {string} str
 
-  * @return {boolean|string}
 
-  */
 
- function contentType (str) {
 
-   // TODO: should this even be in this module?
 
-   if (!str || typeof str !== 'string') {
 
-     return false
 
-   }
 
-   var mime = str.indexOf('/') === -1
 
-     ? exports.lookup(str)
 
-     : str
 
-   if (!mime) {
 
-     return false
 
-   }
 
-   // TODO: use content-type or other module
 
-   if (mime.indexOf('charset') === -1) {
 
-     var charset = exports.charset(mime)
 
-     if (charset) mime += '; charset=' + charset.toLowerCase()
 
-   }
 
-   return mime
 
- }
 
- /**
 
-  * Get the default extension for a MIME type.
 
-  *
 
-  * @param {string} type
 
-  * @return {boolean|string}
 
-  */
 
- function extension (type) {
 
-   if (!type || typeof type !== 'string') {
 
-     return false
 
-   }
 
-   // TODO: use media-typer
 
-   var match = EXTRACT_TYPE_REGEXP.exec(type)
 
-   // get extensions
 
-   var exts = match && exports.extensions[match[1].toLowerCase()]
 
-   if (!exts || !exts.length) {
 
-     return false
 
-   }
 
-   return exts[0]
 
- }
 
- /**
 
-  * Lookup the MIME type for a file path/extension.
 
-  *
 
-  * @param {string} path
 
-  * @return {boolean|string}
 
-  */
 
- function lookup (path) {
 
-   if (!path || typeof path !== 'string') {
 
-     return false
 
-   }
 
-   // get the extension ("ext" or ".ext" or full path)
 
-   var extension = extname('x.' + path)
 
-     .toLowerCase()
 
-     .substr(1)
 
-   if (!extension) {
 
-     return false
 
-   }
 
-   return exports.types[extension] || false
 
- }
 
- /**
 
-  * Populate the extensions and types maps.
 
-  * @private
 
-  */
 
- function populateMaps (extensions, types) {
 
-   // source preference (least -> most)
 
-   var preference = ['nginx', 'apache', undefined, 'iana']
 
-   Object.keys(db).forEach(function forEachMimeType (type) {
 
-     var mime = db[type]
 
-     var exts = mime.extensions
 
-     if (!exts || !exts.length) {
 
-       return
 
-     }
 
-     // mime -> extensions
 
-     extensions[type] = exts
 
-     // extension -> mime
 
-     for (var i = 0; i < exts.length; i++) {
 
-       var extension = exts[i]
 
-       if (types[extension]) {
 
-         var from = preference.indexOf(db[types[extension]].source)
 
-         var to = preference.indexOf(mime.source)
 
-         if (types[extension] !== 'application/octet-stream' &&
 
-           (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {
 
-           // skip the remapping
 
-           continue
 
-         }
 
-       }
 
-       // set the extension -> mime
 
-       types[extension] = type
 
-     }
 
-   })
 
- }
 
 
  |