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, yaml: preview.code, toml: preview.code, txt: 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 }