1
>
/*---------------------------------------------------------------------------------------------
mime.ts
2
>
* Copyright (c) Microsoft Corporation. All rights reserved.
3
>
* Licensed under the MIT License. See License.txt in the project root for license information.
4
>
*--------------------------------------------------------------------------------------------*/
5
>
6
>
import { extname } from './path.js';
7
>
8
>
export const Mimes = Object.freeze({
9
>
text: 'text/plain',
10
>
binary: 'application/octet-stream',
11
>
unknown: 'application/unknown',
12
>
markdown: 'text/markdown',
13
>
latex: 'text/latex',
14
>
uriList: 'text/uri-list',
15
>
html: 'text/html',
16
>
});
17
>
18
>
interface MapExtToMediaMimes {
19
>
[index: string]: string | string[];
20
>
}
21
>
22
>
const mapExtToTextMimes: Record<string, string> = {
23
>
'.css': 'text/css',
24
>
'.csv': 'text/csv',
25
>
'.htm': 'text/html',
26
>
'.html': 'text/html',
27
>
'.ics': 'text/calendar',
28
>
'.js': 'text/javascript',
29
>
'.mjs': 'text/javascript',
30
>
'.txt': 'text/plain',
31
>
'.xml': 'text/xml'
32
>
};
33
>
34
>
// Known media mimes that we can handle
35
>
const mapExtToMediaMimes: MapExtToMediaMimes = {
36
>
'.aac': 'audio/x-aac',
37
>
'.avi': 'video/x-msvideo',
38
>
'.bmp': 'image/bmp',
39
>
'.flv': 'video/x-flv',
40
>
'.gif': 'image/gif',
41
>
'.ico': 'image/x-icon',
42
>
'.jpe': ['image/jpg', 'image/jpeg'],
43
>
'.jpeg': ['image/jpg', 'image/jpeg'],
44
>
'.jpg': ['image/jpg', 'image/jpeg'],
45
>
'.m1v': 'video/mpeg',
46
>
'.m2a': 'audio/mpeg',
47
>
'.m2v': 'video/mpeg',
48
>
'.m3a': 'audio/mpeg',
49
>
'.mid': 'audio/midi',
50
>
'.midi': 'audio/midi',
51
>
'.mk3d': 'video/x-matroska',
52
>
'.mks': 'video/x-matroska',
53
>
'.mkv': 'video/x-matroska',
54
>
'.mov': 'video/quicktime',
55
>
'.movie': 'video/x-sgi-movie',
56
>
'.mp2': 'audio/mpeg',
57
>
'.mp2a': 'audio/mpeg',
58
>
'.mp3': 'audio/mpeg',
59
>
'.mp4': 'video/mp4',
60
>
'.mp4a': 'audio/mp4',
61
>
'.mp4v': 'video/mp4',
62
>
'.mpe': 'video/mpeg',
63
>
'.mpeg': 'video/mpeg',
64
>
'.mpg': 'video/mpeg',
65
>
'.mpg4': 'video/mp4',
66
>
'.mpga': 'audio/mpeg',
67
>
'.oga': 'audio/ogg',
68
>
'.ogg': 'audio/ogg',
69
>
'.opus': 'audio/opus',
70
>
'.ogv': 'video/ogg',
71
>
'.png': 'image/png',
72
>
'.psd': 'image/vnd.adobe.photoshop',
73
>
'.qt': 'video/quicktime',
74
>
'.spx': 'audio/ogg',
75
>
'.svg': 'image/svg+xml',
76
>
'.tga': 'image/x-tga',
77
>
'.tif': 'image/tiff',
78
>
'.tiff': 'image/tiff',
79
>
'.wav': 'audio/x-wav',
80
>
'.webm': 'video/webm',
81
>
'.webp': 'image/webp',
82
>
'.wma': 'audio/x-ms-wma',
83
>
'.wmv': 'video/x-ms-wmv',
84
>
'.woff': 'application/font-woff',
85
>
};
86
>
87
>
export function getMediaOrTextMime(path: string): string | undefined {
88
const ext = extname(path);
89
const textMime = mapExtToTextMimes[ext.toLowerCase()];