cmd-notepad
Version:
脚本命令记事本,管理多个可执行的脚本
157 lines (156 loc) • 4.93 kB
JavaScript
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;
;