99 lines
2.9 KiB
TypeScript
99 lines
2.9 KiB
TypeScript
import fs from "fs/promises";
|
|
import path from "path";
|
|
|
|
export const dateFormatter = (date: string | undefined) => {
|
|
const formattedDate = useTimeAgo(date!);
|
|
return formattedDate.value;
|
|
};
|
|
|
|
export const byteFormatter = (bytes: number, decimals = 2) => {
|
|
if (!+bytes) return "0 B";
|
|
|
|
const k = 1024;
|
|
const dm = decimals < 0 ? 0 : decimals;
|
|
const sizes = ["B", "Kb", "Mb", "Gb", "Tb", "Pb", "Eb", "Zb", "Yb"];
|
|
|
|
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
|
|
return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;
|
|
};
|
|
|
|
export const formatAgent = (userAgent: any) => {
|
|
if (userAgent) {
|
|
let os = "";
|
|
let browser = "";
|
|
let browserVersion = "";
|
|
let deviceType = "";
|
|
|
|
// Check for the OS
|
|
if (userAgent.includes("Windows NT")) {
|
|
os = "Windows";
|
|
} else if (userAgent.includes("Mac OS X")) {
|
|
os = "Mac";
|
|
} else if (userAgent.includes("Linux")) {
|
|
os = "Linux";
|
|
} else if (userAgent.includes("Android")) {
|
|
os = "Android";
|
|
} else if (userAgent.includes("iPhone") || userAgent.includes("iPad")) {
|
|
os = "iOS";
|
|
}
|
|
|
|
// Check for browser and version
|
|
if (userAgent.includes("Chrome")) {
|
|
browser = "Chrome";
|
|
browserVersion = userAgent.match(/Chrome\/([\d.]+)/)[1];
|
|
} else if (userAgent.includes("Firefox")) {
|
|
browser = "Firefox";
|
|
browserVersion = userAgent.match(/Firefox\/([\d.]+)/)[1];
|
|
} else if (userAgent.includes("Safari") && !userAgent.includes("Chrome")) {
|
|
browser = "Safari";
|
|
browserVersion = userAgent.match(/Version\/([\d.]+)/)[1];
|
|
} else if (userAgent.includes("Edge")) {
|
|
browser = "Edge";
|
|
browserVersion = userAgent.match(/Edge\/([\d.]+)/)[1];
|
|
}
|
|
|
|
// Check for device type
|
|
if (userAgent.includes("Mobi")) {
|
|
deviceType = "Mobile";
|
|
} else if (userAgent.includes("Tablet")) {
|
|
deviceType = "Tablet";
|
|
} else {
|
|
deviceType = "Desktop";
|
|
}
|
|
|
|
return {
|
|
os: os,
|
|
browser: browser,
|
|
browserVersion: browserVersion,
|
|
deviceType: deviceType,
|
|
};
|
|
}
|
|
|
|
return undefined;
|
|
};
|
|
|
|
export const isImage = (name: string | undefined) => {
|
|
if (name) {
|
|
const types = [".jpg", ".jpeg", ".png", ".svg", ".webp"];
|
|
return types.some((type) => name.toLowerCase().endsWith(type));
|
|
}
|
|
return false;
|
|
};
|
|
|
|
// Ensure Exist
|
|
|
|
export const ensureFileExists = async (filePath: string, initialContent = "") => {
|
|
try {
|
|
await fs.access(filePath);
|
|
} catch (error) {
|
|
const err = error as any;
|
|
if (err.code === "ENOENT") {
|
|
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
await fs.writeFile(filePath, initialContent, "utf-8");
|
|
} else {
|
|
throw err;
|
|
}
|
|
}
|
|
};
|