SPB Git forge

spb/spb-cloud

Public
10commits 1branches 0releases
3.2 MBsize
maindefault branch
1 h agolast push
JavaScript 56.7% TypeScript 42.6%
4.6 KB · 162 lines typescript
Raw Blame History
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