Permalink
Cannot retrieve contributors at this time
188 lines (148 sloc)
3.58 KB
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
codeql-action/node_modules/mime-types/index.js
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*! | |
* 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 | |
} | |
}) | |
} |