UNPKG

t-comm

Version:

专业、稳定、纯粹的工具库

247 lines (244 loc) 6.52 kB
import * as fs from 'fs'; import * as path from 'path'; import { writeFileSync, readFileSync } from '../fs/fs.mjs'; import { timeStampFormat } from '../time/time.mjs'; var LOG_DIR = 'log'; function innerCopy(src, dist) { if (fs.statSync(src).isFile()) { return; } var paths = fs.readdirSync(src); paths.forEach(function (p) { var tSrc = "".concat(src, "/").concat(p); var tDist = "".concat(dist, "/").concat(p); var stat = fs.statSync(tSrc); if (stat.isFile()) { // 判断是文件还是目录 writeFileSync(tDist, readFileSync(tSrc)); } else if (stat.isDirectory()) { innerCopyDir(tSrc, tDist); // 当是目录是,递归复制 } }); } /** * 复制目录、子目录,及其中的文件 * @param src {String} 要复制的目录 * @param dist {String} 复制到目标目录 */ function innerCopyDir(src, dist) { var b = fs.existsSync(dist); if (!b) { mkDirsSync(dist); // 创建目录 } innerCopy(src, dist); } // 递归创建目录 同步方法 function mkDirsSync(dirname) { if (fs.existsSync(dirname)) { return true; } if (mkDirsSync(path.dirname(dirname))) { fs.mkdirSync(dirname); return true; } } /** * 拷贝目录以及子文件 * @param {Object} src * @param {Object} dist * @param {Object} callback */ function copyDir(src, dist, callback) { innerCopyDir(src, dist); if (callback) { callback(); } } /** * 删除目录 * @param {Object} path */ function deleteFolder(tPath) { var files = []; if (fs.existsSync(tPath)) { files = fs.readdirSync(tPath); files.forEach(function (file) { var curPath = "".concat(tPath, "/").concat(file); if (fs.statSync(curPath).isDirectory()) { deleteFolder(curPath); } else { fs.unlinkSync(curPath); } }); fs.rmdirSync(tPath); } } /** * 递归删除空目录 * @param path 路径 * @param level 层级 */ function rmEmptyDir(tPath, level) { if (level === void 0) { level = 0; } var files = fs.readdirSync(tPath); if (files.length > 0) { var tempFile_1 = 0; files.forEach(function (file) { tempFile_1 += 1; rmEmptyDir("".concat(tPath, "/").concat(file), level + 1); }); if (tempFile_1 === files.length && level !== 0) { fs.rmdirSync(tPath); } } else { level !== 0 && fs.rmdirSync(tPath); } } function deleteFolderRecursive(path, options) { var _a, _b; if (options === void 0) { options = { deleteFile: false, log: false }; } var deleteFile = (_a = options.deleteFile) !== null && _a !== void 0 ? _a : false; var log = (_b = options.log) !== null && _b !== void 0 ? _b : false; if (fs.existsSync(path)) { var list = fs.readdirSync(path); list.forEach(function (file) { var curPath = "".concat(path, "/").concat(file); if (fs.statSync(curPath).isDirectory()) { // recurse deleteFolderRecursive(curPath); } else { // delete file if (deleteFile) { fs.unlinkSync(curPath); } } }); if (!list.length) { if (log) { console.log('>>> delete: ', path); } fs.rmdirSync(path); } } } /** * 拷贝文件 * @param {Object} from 文件来自那里 * @param {Object} to 拷贝到那里 */ function copyFile(from, to) { return writeFileSync(to, readFileSync(from)); } /** * 递归遍历文件夹,并执行某操作 * @param {Function} cb 回调参数 * @param {String} path 文件夹或文件路径 */ function traverseFolder(cb, tPath) { if (fs.statSync(tPath).isDirectory()) { var files = fs.readdirSync(tPath); files.forEach(function (file) { var curPath = path.resolve(tPath, file); // `${tPath}/${file}`; traverseFolder(cb, curPath); }); } else { cb(tPath); } } function readJsonLog(file, defaultContent) { if (defaultContent === void 0) { defaultContent = '{}'; } var filePath = "./".concat(LOG_DIR, "/").concat(file); if (!fs.existsSync(filePath)) { createLogDir(); return defaultContent; } return readFileSync(filePath) || defaultContent; } function getJsonLogDir() { return path.resolve(process.cwd(), './log'); } function saveJsonToLog(content, file, needLog) { if (needLog === void 0) { needLog = true; } if (!needLog) return; createLogDir(); writeFileSync("./".concat(LOG_DIR, "/").concat(file), content, true); } function saveJsonToLogMore(content, file, options) { var _a, _b; var needLog = (_a = options === null || options === void 0 ? void 0 : options.needLog) !== null && _a !== void 0 ? _a : true; var max = (_b = options === null || options === void 0 ? void 0 : options.max) !== null && _b !== void 0 ? _b : 10; if (!needLog) return; createLogDir(); var filePath = "./log/".concat(file); var beforeContent = []; var newContent = [{ logTime: timeStampFormat(Date.now(), 'yyyy-MM-dd hh:mm:ss'), data: content }]; if (fs.existsSync(filePath)) { try { beforeContent = readFileSync(filePath, true).logList || []; } catch (err) { beforeContent = []; } } if (beforeContent && Array.isArray(beforeContent)) { newContent.push.apply(newContent, beforeContent); } newContent = newContent.slice(0, max); try { fs.writeFile(filePath, JSON.stringify({ logList: newContent }, null, 2), { encoding: 'utf-8' }, function () {}); } catch (err) {} } function getJsonFromLog(file) { var filePath = "./".concat(LOG_DIR, "/").concat(file); var data = {}; if (!fs.existsSync(filePath)) { console.log('[getJsonFromLog] no exist'); } else { var originFile = fs.readFileSync(filePath, { encoding: 'utf-8' }); try { data = JSON.parse(originFile); } catch (err) {} } return data; } function createLogDir() { if (!fs.existsSync("./".concat(LOG_DIR))) { fs.mkdirSync("./".concat(LOG_DIR)); } } function getFileName(file) { var basename = path.basename(file); var extname = path.extname(file); var fileName = basename.replace(new RegExp("".concat(extname, "$")), ''); return fileName; } function readJson(content, file) { var data = {}; try { data = JSON.parse(content); } catch (e) { console.error('>>> read json error: ', file); } return data; } export { copyDir, copyFile, deleteFolder, deleteFolderRecursive, getFileName, getJsonFromLog, getJsonLogDir, mkDirsSync, readJson, readJsonLog, rmEmptyDir, saveJsonToLog, saveJsonToLogMore, traverseFolder };