UNPKG

@techmely/utils

Version:

Collection of helpful JavaScript / TypeScript utils

133 lines (129 loc) 3.58 kB
/*! * @techmely/utils * Copyright(c) 2021-2024 Techmely <techmely.creation@gmail.com> * MIT Licensed */ import "./chunk-NYLAFCGV.mjs"; // src/file.ts import fs from "fs"; import path from "path"; var MimeType = /* @__PURE__ */ ((MimeType2) => { MimeType2["JPG"] = "image/jpeg"; MimeType2["GIF"] = "image/gif"; MimeType2["PNG"] = "image/png"; MimeType2["MP4"] = "video/mp4"; MimeType2["QuickTime"] = "video/quicktime"; MimeType2["AVI"] = "video/x-msvideo"; MimeType2["WMV"] = "video/x-ms-wmv"; MimeType2["HEIC"] = "image/heic"; return MimeType2; })(MimeType || {}); var mimeTable = [ { ext: ["gif"], type: "image/gif" /* GIF */ }, { ext: ["jpe", "jpeg", "jpg"], type: "image/jpeg" /* JPG */ }, { ext: ["png"], type: "image/png" /* PNG */ }, { ext: ["qt", "mov"], type: "video/quicktime" /* QuickTime */ }, { ext: ["mp4", "mp4v", "mpg4", "m4v"], type: "video/mp4" /* MP4 */ }, { ext: ["avi"], type: "video/x-msvideo" /* AVI */ }, { ext: ["wmv"], type: "video/x-ms-wmv" /* WMV */ }, { ext: ["heic"], type: "image/heic" /* HEIC */ } ]; var getMimeTypeFromExtension = (extension) => { const result = mimeTable.find(({ ext }) => ext.includes(extension)); if (!result) { throw new Error(`'${extension}' is not a valid extension`); } return result.type; }; function writeFile(filename, content) { const dir = path.dirname(filename); if (!fs.existsSync(dir)) { fs.mkdirSync(dir, { recursive: true }); } fs.writeFileSync(filename, content); } function isFileReadable(filename) { try { fs.accessSync(filename, fs.constants.R_OK); return true; } catch { return false; } } function emptyDir(dir, skip) { for (const file of fs.readdirSync(dir)) { if (skip?.includes(file)) { continue; } const abs = path.resolve(dir, file); if (fs.lstatSync(abs).isDirectory()) { emptyDir(abs); fs.rmdirSync(abs); } else { fs.unlinkSync(abs); } } } function copyDir(srcDir, destDir) { fs.mkdirSync(destDir, { recursive: true }); for (const file of fs.readdirSync(srcDir)) { const srcFile = path.resolve(srcDir, file); if (srcFile === destDir) { continue; } const destFile = path.resolve(destDir, file); const stat = fs.statSync(srcFile); if (stat.isDirectory()) { copyDir(srcFile, destFile); } else { fs.copyFileSync(srcFile, destFile); } } } function readFile(filePath) { return new Promise((resolve, reject) => { fs.readFile(filePath, "utf8", (error, result) => { if (error) { reject(error); } else { resolve(result); } }); }); } function readFileSync(filePath) { return fs.readFileSync(filePath, "utf8"); } async function getDataPath(directoryPath, fileName) { const packageJsonPath = path.join(directoryPath, fileName); const pkg = await readFile(packageJsonPath); const packageJsonData = JSON.parse(pkg); return { path: packageJsonPath, data: packageJsonData }; } async function findNearestFile(fileName, directoryPath = path.resolve()) { try { const data = await getDataPath(directoryPath, fileName); return data; } catch (error) { const parentDirectoryPath = path.dirname(directoryPath); if (parentDirectoryPath === directoryPath) { throw new Error(`No ${fileName} files found`); } return findNearestFile(parentDirectoryPath, fileName); } } export { MimeType, copyDir, emptyDir, findNearestFile, getMimeTypeFromExtension, isFileReadable, mimeTable, readFile, readFileSync, writeFile };