123 lines
2.5 KiB
TypeScript
123 lines
2.5 KiB
TypeScript
import { getExtension } from './getFileIcon'
|
|
|
|
export const preview = {
|
|
markdown: 'markdown',
|
|
image: 'image',
|
|
text: 'text',
|
|
pdf: 'pdf',
|
|
code: 'code',
|
|
video: 'video',
|
|
audio: 'audio',
|
|
office: 'ms-office',
|
|
epub: 'epub',
|
|
url: 'url',
|
|
}
|
|
|
|
export const extensions = {
|
|
gif: preview.image,
|
|
jpeg: preview.image,
|
|
jpg: preview.image,
|
|
png: preview.image,
|
|
webp: preview.image,
|
|
|
|
md: preview.markdown,
|
|
markdown: preview.markdown,
|
|
mdown: preview.markdown,
|
|
|
|
pdf: preview.pdf,
|
|
|
|
doc: preview.office,
|
|
docx: preview.office,
|
|
ppt: preview.office,
|
|
pptx: preview.office,
|
|
xls: preview.office,
|
|
xlsx: preview.office,
|
|
|
|
c: preview.code,
|
|
cpp: preview.code,
|
|
js: preview.code,
|
|
jsx: preview.code,
|
|
java: preview.code,
|
|
sh: preview.code,
|
|
cs: preview.code,
|
|
py: preview.code,
|
|
css: preview.code,
|
|
html: preview.code,
|
|
// typescript or video file, determined below
|
|
ts: preview.code,
|
|
tsx: preview.code,
|
|
rs: preview.code,
|
|
vue: preview.code,
|
|
json: preview.code,
|
|
yml: preview.code,
|
|
yaml: preview.code,
|
|
toml: preview.code,
|
|
|
|
txt: preview.text,
|
|
vtt: preview.text,
|
|
srt: preview.text,
|
|
log: preview.text,
|
|
diff: preview.text,
|
|
|
|
mp4: preview.video,
|
|
flv: preview.video,
|
|
webm: preview.video,
|
|
m3u8: preview.video,
|
|
mkv: preview.video,
|
|
mov: preview.video,
|
|
avi: preview.video, // won't work!
|
|
|
|
mp3: preview.audio,
|
|
m4a: preview.audio,
|
|
aac: preview.audio,
|
|
wav: preview.audio,
|
|
ogg: preview.audio,
|
|
oga: preview.audio,
|
|
opus: preview.audio,
|
|
flac: preview.audio,
|
|
|
|
epub: preview.epub,
|
|
|
|
url: preview.url,
|
|
}
|
|
|
|
export function getPreviewType(extension: string, flags?: { video?: boolean }): string | undefined {
|
|
let previewType = extensions[extension]
|
|
if (!previewType) {
|
|
return previewType
|
|
}
|
|
|
|
// Files with '.ts' extensions may be TypeScript files or TS Video files, we check for the flag 'video'
|
|
// to determine what preview renderer to use for '.ts' files.
|
|
if (extension === 'ts') {
|
|
if (flags?.video) {
|
|
previewType = preview.video
|
|
}
|
|
}
|
|
|
|
return previewType
|
|
}
|
|
|
|
export function getLanguageByFileName(filename: string): string {
|
|
const extension = getExtension(filename)
|
|
switch (extension) {
|
|
case 'ts':
|
|
case 'tsx':
|
|
return 'typescript'
|
|
case 'rs':
|
|
return 'rust'
|
|
case 'js':
|
|
case 'jsx':
|
|
return 'javascript'
|
|
case 'sh':
|
|
return 'shell'
|
|
case 'cs':
|
|
return 'csharp'
|
|
case 'py':
|
|
return 'python'
|
|
case 'yml':
|
|
return 'yaml'
|
|
default:
|
|
return extension
|
|
}
|
|
}
|