JavaScript 56.7%
TypeScript 42.6%
1export function formatFileSize(bytes: number): string {2 if (bytes === 0) return "0 B";3 const k = 1024;4 const sizes = ["B", "KB", "MB", "GB", "TB"];5 const i = Math.floor(Math.log(bytes) / Math.log(k));6 return `${parseFloat((bytes / Math.pow(k, i)).toFixed(1))} ${sizes[i]}`;7}89export function formatDate(date: string | Date): string {10 return new Intl.DateTimeFormat("fr-CA", {11 year: "numeric",12 month: "short",13 day: "numeric",14 hour: "2-digit",15 minute: "2-digit",16 }).format(new Date(date));17}1819export function getFileIcon(mimeType: string): string {20 if (mimeType.startsWith("image/")) return "image";21 if (mimeType.startsWith("video/")) return "video";22 if (mimeType.startsWith("audio/")) return "audio";23 if (mimeType === "application/pdf") return "pdf";24 if (mimeType.includes("spreadsheet") || mimeType === "text/csv") return "spreadsheet";25 if (mimeType.includes("document") || mimeType.includes("word")) return "document";26 if (mimeType.includes("presentation")) return "presentation";27 if (isArchiveMime(mimeType)) return "archive";28 if (mimeType.startsWith("text/") || mimeType.includes("json") || mimeType.includes("xml") || mimeType.includes("javascript") || mimeType.includes("typescript")) return "code";29 return "file";30}3132export function isArchiveMime(mimeType: string): boolean {33 return (34 mimeType === "application/zip" ||35 mimeType === "application/x-zip-compressed" ||36 mimeType === "application/x-rar-compressed" ||37 mimeType === "application/x-7z-compressed" ||38 mimeType === "application/x-tar" ||39 mimeType === "application/gzip" ||40 mimeType.includes("zip") ||41 mimeType.includes("archive") ||42 mimeType.includes("compressed")43 );44}4546export function isPreviewable(mimeType: string): boolean {47 return (48 mimeType.startsWith("image/") ||49 mimeType.startsWith("video/") ||50 mimeType.startsWith("audio/") ||51 mimeType === "application/pdf" ||52 mimeType.startsWith("text/") ||53 mimeType === "text/csv" ||54 mimeType.includes("json") ||55 mimeType.includes("xml") ||56 mimeType.includes("javascript") ||57 mimeType.includes("typescript") ||58 mimeType.includes("markdown") ||59 isArchiveMime(mimeType)60 );61}6263export function isTextMime(mimeType: string): boolean {64 return (65 mimeType.startsWith("text/") ||66 mimeType.includes("json") ||67 mimeType.includes("xml") ||68 mimeType.includes("javascript") ||69 mimeType.includes("typescript") ||70 mimeType.includes("markdown")71 );72}7374export function isCodeMime(mimeType: string): boolean {75 return (76 mimeType.includes("javascript") ||77 mimeType.includes("typescript") ||78 mimeType.includes("json") ||79 mimeType.includes("xml") ||80 mimeType.includes("css") ||81 mimeType.includes("html") ||82 mimeType.includes("python") ||83 mimeType.includes("java") ||84 mimeType.includes("x-c") ||85 mimeType.includes("rust") ||86 mimeType.includes("go") ||87 mimeType.includes("yaml") ||88 mimeType.includes("toml") ||89 mimeType.includes("sql") ||90 mimeType.includes("shell") ||91 mimeType.includes("bash")92 );93}9495export function getLanguageFromMime(mimeType: string): string {96 const map: Record<string, string> = {97 "application/javascript": "javascript",98 "text/javascript": "javascript",99 "application/typescript": "typescript",100 "text/typescript": "typescript",101 "application/json": "json",102 "text/html": "html",103 "text/css": "css",104 "text/xml": "xml",105 "application/xml": "xml",106 "text/markdown": "markdown",107 "text/x-python": "python",108 "text/x-java": "java",109 "text/x-c": "c",110 "text/x-cpp": "cpp",111 "text/x-rust": "rust",112 "text/x-go": "go",113 "text/yaml": "yaml",114 "application/x-yaml": "yaml",115 "text/x-toml": "toml",116 "text/x-sql": "sql",117 "text/x-shellscript": "shell",118 "application/x-sh": "shell",119 };120 return map[mimeType] || "text";121}122123export function getLanguageFromFilename(filename: string): string {124 const ext = filename.split(".").pop()?.toLowerCase() || "";125 const map: Record<string, string> = {126 js: "javascript",127 jsx: "javascript",128 ts: "typescript",129 tsx: "typescript",130 json: "json",131 html: "html",132 htm: "html",133 css: "css",134 scss: "css",135 xml: "xml",136 md: "markdown",137 py: "python",138 java: "java",139 c: "c",140 h: "c",141 cpp: "cpp",142 hpp: "cpp",143 rs: "rust",144 go: "go",145 yaml: "yaml",146 yml: "yaml",147 toml: "toml",148 sql: "sql",149 sh: "shell",150 bash: "shell",151 zsh: "shell",152 rb: "ruby",153 php: "php",154 swift: "swift",155 kt: "kotlin",156 r: "r",157 lua: "lua",158 dockerfile: "dockerfile",159 };160 return map[ext] || "text";161}162