0
0
mirror of https://github.com/honojs/hono.git synced 2024-11-25 13:19:30 +01:00
hono/deno_dist/utils/mime.ts

95 lines
2.7 KiB
TypeScript
Raw Normal View History

2022-07-02 08:09:45 +02:00
export const getMimeType = (filename: string): string | undefined => {
const regexp = /\.([a-zA-Z0-9]+?)$/
const match = filename.match(regexp)
if (!match) {
return
}
2022-07-02 08:09:45 +02:00
let mimeType = mimes[match[1]]
if ((mimeType && mimeType.startsWith('text')) || mimeType === 'application/json') {
mimeType += '; charset=utf-8'
}
return mimeType
}
const mimes: Record<string, string> = {
aac: 'audio/aac',
abw: 'application/x-abiword',
arc: 'application/x-freearc',
2022-07-02 08:09:45 +02:00
avi: 'video/x-msvideo',
avif: 'image/avif',
av1: 'video/av1',
azw: 'application/vnd.amazon.ebook',
2022-07-02 08:09:45 +02:00
bin: 'application/octet-stream',
bmp: 'image/bmp',
bz: 'application/x-bzip',
bz2: 'application/x-bzip2',
csh: 'application/x-csh',
2022-07-02 08:09:45 +02:00
css: 'text/css',
csv: 'text/csv',
doc: 'application/msword',
docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
eot: 'application/vnd.ms-fontobject',
epub: 'application/epub+zip',
gif: 'image/gif',
gz: 'application/gzip',
2022-07-02 08:09:45 +02:00
htm: 'text/html',
html: 'text/html',
ico: 'image/x-icon',
2022-07-02 08:09:45 +02:00
ics: 'text/calendar',
jar: 'application/java-archive',
jpeg: 'image/jpeg',
jpg: 'image/jpeg',
js: 'text/javascript',
json: 'application/json',
jsonld: 'application/ld+json',
map: 'application/json',
mid: 'audio/x-midi',
midi: 'audio/x-midi',
mjs: 'text/javascript',
mp3: 'audio/mpeg',
mp4: 'video/mp4',
2022-07-02 08:09:45 +02:00
mpeg: 'video/mpeg',
mpkg: 'application/vnd.apple.installer+xml',
odp: 'application/vnd.oasis.opendocument.presentation',
ods: 'application/vnd.oasis.opendocument.spreadsheet',
odt: 'application/vnd.oasis.opendocument.text',
2022-07-02 08:09:45 +02:00
oga: 'audio/ogg',
ogv: 'video/ogg',
ogx: 'application/ogg',
opus: 'audio/opus',
2022-07-02 08:09:45 +02:00
otf: 'font/otf',
pdf: 'application/pdf',
php: 'application/php',
png: 'image/png',
2022-07-02 08:09:45 +02:00
ppt: 'application/vnd.ms-powerpoint',
pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
rtf: 'application/rtf',
sh: 'application/x-sh',
2022-07-02 08:09:45 +02:00
svg: 'image/svg+xml',
swf: 'application/x-shockwave-flash',
2022-07-02 08:09:45 +02:00
tar: 'application/x-tar',
tif: 'image/tiff',
tiff: 'image/tiff',
ts: 'video/mp2t',
2022-07-02 08:09:45 +02:00
ttf: 'font/ttf',
txt: 'text/plain',
vsd: 'application/vnd.visio',
wasm: 'application/wasm',
2022-07-02 08:09:45 +02:00
webm: 'video/webm',
weba: 'audio/webm',
2022-07-02 08:09:45 +02:00
webp: 'image/webp',
woff: 'font/woff',
woff2: 'font/woff2',
xhtml: 'application/xhtml+xml',
xls: 'application/vnd.ms-excel',
xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
xml: 'application/xml',
xul: 'application/vnd.mozilla.xul+xml',
2022-07-02 08:09:45 +02:00
zip: 'application/zip',
'3gp': 'video/3gpp',
'3g2': 'video/3gpp2',
'7z': 'application/x-7z-compressed',
gltf: 'model/gltf+json',
glb: 'model/gltf-binary',
2022-07-02 08:09:45 +02:00
}