UNPKG

cmd-notepad

Version:

脚本命令记事本,管理多个可执行的脚本

157 lines (156 loc) 4.93 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ValidateCMDList = exports.isObject = exports.RemoveScript = exports.RunDestroyScript = exports.ResetDestroy = exports.RunScript = exports.RunExec = exports.CopyFileToPath = exports.WriteToFile = exports.exit = exports.isPathExist = void 0; const fs_1 = __importDefault(require("fs")); const child_process_1 = require("child_process"); const chalk_1 = __importDefault(require("chalk")); const cmdList_json_1 = __importDefault(require("../cmdList.json")); const destroyScript_json_1 = __importDefault(require("../destroyScript.json")); const common_1 = require("./common"); /** * 校验文件/路径是否存在 */ const isPathExist = (path) => { return fs_1.default.existsSync(path); }; exports.isPathExist = isPathExist; // 退出程序,由于有catch输出错误信息,需要阻止后续代码执行,这里参考了nrm源码 const exit = (error) => { if (error) { console.error(chalk_1.default.red(error)); } process.exit(1); }; exports.exit = exit; /** * 写入对象到指定路径 */ const WriteToFile = (obj, path) => { try { fs_1.default.writeFileSync(path, JSON.stringify(obj, null, 4)); } catch (e) { (0, exports.exit)(e); } }; exports.WriteToFile = WriteToFile; const CopyFileToPath = (src, dest) => { try { fs_1.default.copyFileSync(src, dest); } catch (e) { (0, exports.exit)(e); } }; exports.CopyFileToPath = CopyFileToPath; /** * 执行命令 */ const RunExec = (cmd) => { try { const result = (0, child_process_1.execSync)(cmd); console.log(`执行 -> ${cmd}`); console.log(result.toString("utf-8")); } catch (e) { (0, exports.exit)(e); } }; exports.RunExec = RunExec; /** * 执行脚本 */ const RunScript = (scName) => { var _a; if (!scName) { return; } const _cmdList = cmdList_json_1.default; const _destroyScript = destroyScript_json_1.default; // 执行脚本之前先执行上一个需要销毁的脚本 if (_destroyScript.current) { (0, exports.RunExec)(_destroyScript.current); } const scriptObj = _cmdList[scName]; const scriptContent = scriptObj.main; const scripts = scriptContent.split(","); let idx = 0; while (idx !== scripts.length) { const script = scripts[idx].trim(); (0, exports.RunExec)(script); idx++; } console.log(chalk_1.default.green("执行完成!")); // 记录需要销毁的脚本 _destroyScript.current = (_a = scriptObj.onDestroy) !== null && _a !== void 0 ? _a : ""; (0, exports.WriteToFile)(_destroyScript, common_1.DESTROYSCRIPTPATH); }; exports.RunScript = RunScript; /** * 重置销毁脚本 */ const ResetDestroy = () => { const _destroyScript = destroyScript_json_1.default; if (!_destroyScript.current) { return; } _destroyScript.current = ""; (0, exports.WriteToFile)(_destroyScript, common_1.DESTROYSCRIPTPATH); }; exports.ResetDestroy = ResetDestroy; /** * 执行销毁方法,前提是当前指向的销毁脚本和传入一致才会执行 * 思考了一下,不应该说没有运行过脚本,而remove掉不应该执行销毁脚本 */ const RunDestroyScript = (script) => { if (!script) { return; } const _destroyScript = destroyScript_json_1.default; // 判断传入的script和当前指向的destroyScript是否一致,一致才去销毁 if (_destroyScript.current === script) { (0, exports.RunExec)(_destroyScript.current); (0, exports.ResetDestroy)(); } }; exports.RunDestroyScript = RunDestroyScript; /** * 移除脚本 */ const RemoveScript = (scName) => { const _cmdList = cmdList_json_1.default; if (!_cmdList[scName]) { console.log(chalk_1.default.red(`没有这个脚本 ${scName}`)); return; } const currentDestroyScript = _cmdList[scName].onDestroy; delete _cmdList[scName]; (0, exports.WriteToFile)(_cmdList, common_1.CMDLISTPATH); (0, exports.RunDestroyScript)(currentDestroyScript); console.log(chalk_1.default.red.green("移除成功")); }; exports.RemoveScript = RemoveScript; /** * 判断对象,强用于TS类型校验 */ const isObject = (obj) => { return Object.prototype.toString.call(obj) === "[object Object]"; }; exports.isObject = isObject; /** * 校验对象是否符合CMDListType约束 */ const ValidateCMDList = (obj) => { if (!(0, exports.isObject)(obj)) { return false; } const keys = Object.keys(obj); // 空对象也算 return keys.every((k) => { return (0, exports.isObject)(obj[k]) && typeof obj[k].main === "string"; }); }; exports.ValidateCMDList = ValidateCMDList;