/** * Publish XEa ... * a node js based application for publishing x-ea Expert ... * * Maintainer * * Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) */ // //#region Imports ... const XFileTools = require("./Node/x-file.tools"); const XArgsParser = require("./Node/x-arg.parser"); const XValueTools = require("./Node/x-value.tools"); const XLoggerTools = require("./Node/x-logger.tools"); //#endregion // //#region Constants / Variables ... const MESSAGES = { // // Errors ... InvalidArgs: "invalid arg ...", ActionFailed: "action failed ...", DuplicateName: "duplicate name ...", // // Messages ... CheckNameValue: "checking pack name value ...", CheckPackExists: "checking given pack name exists or not ...", CreatePackFolder: "creating publish destination folder ...", StartPacking: "start packing ...", Succeed: "packing successfully finished ...", }; //#endregion // //#region Actions ... //#endregion // //#region Startup ... const args = process.argv; const packName = process.argv[2]; const packFolderPath = XFileTools.joinPath(__dirname, "Publishes"); // // Startup function ... async function startup() { // // Check pack name contains value ... XLoggerTools.simpleInfoLog(MESSAGES.CheckNameValue); if (!XValueTools.isValidArg(packName)) { // XLoggerTools.simpleErrorLog(MESSAGES.InvalidArgs); exit(); } // // Check Pack Path Exists ... if (!XFileTools.isDirectoryExists(packFolderPath)) { // // Create Pack Folder ... const isCreated = XFileTools.createDirectory(packFolderPath); if (!isCreated) { // XLoggerTools.simpleErrorLog(MESSAGES.ActionFailed); exit(); } } // // Prepare Pack Dest Folder Path ... const packPath = XFileTools.joinPath(packFolderPath, packName); // // Check Existance ... XLoggerTools.simpleInfoLog(MESSAGES.CheckPackExists); if (XFileTools.isDirectoryExists(packPath)) { // XLoggerTools.simpleErrorLog(MESSAGES.DuplicateName); exit(); } // // Create Dest Pack Path Folder ... XLoggerTools.simpleInfoLog(MESSAGES.CreatePackFolder); let isCreated = XFileTools.createDirectory(packPath); if (!isCreated) { // XLoggerTools.simpleErrorLog(MESSAGES.ActionFailed); exit(); } // // Generate a List of Files ... // // Ex4 Files ... let ex4FilesList = await XFileTools.getRecursiveFilesList( __dirname, [".ex4"] ); // // MQ4 Files ... let mq4FilesList = await XFileTools.getRecursiveFilesList( __dirname, [".mq4"] ); // // Filter BKP files ... // // From Ex4 ... ex4FilesList = ex4FilesList.filter(f => !f.toLowerCase().includes("bkp") && f.toLowerCase().includes("x-saherelm.") ); // // From MQ4 ... mq4FilesList = mq4FilesList.filter(f => !f.toLowerCase().includes("bkp") && f.toLowerCase().includes("x-saherelm.") ); // // Create required Dest Folders on Pack Dest ... XLoggerTools.simpleInfoLog(MESSAGES.StartPacking); // const packEx4Folder = XFileTools.joinPath(packPath, "Ex4"); isCreated = XFileTools.createDirectory(packEx4Folder); if (!isCreated) { // XLoggerTools.simpleErrorLog(MESSAGES.ActionFailed()); exit(); } // const packMQ4Folder = XFileTools.joinPath(packPath, "MQ4"); isCreated = XFileTools.createDirectory(packMQ4Folder); if (!isCreated) { // XLoggerTools.simpleErrorLog(MESSAGES.ActionFailed()); exit(); } // const packReportsFolder = XFileTools.joinPath(packPath, "Reports"); isCreated = XFileTools.createDirectory(packReportsFolder); if (!isCreated) { // XLoggerTools.simpleErrorLog(MESSAGES.ActionFailed()); exit(); } // // Transfer Files ... for(let idx = 0; idx < ex4FilesList.length; idx++) { // const ex4 = ex4FilesList[idx]; const mq4 = mq4FilesList[idx]; // // Clear Current Dir and File Name to found Path ... const clearEx4FilePath = ex4.replace(__dirname, ""); const clearMQ4FilePath = mq4.replace(__dirname, ""); // const ex4FileName = XFileTools.basename(clearEx4FilePath); const mq4FileName = XFileTools.basename(clearMQ4FilePath); // let ex4FilePath = clearEx4FilePath.replace(ex4FileName, ""); if (ex4FilePath.startsWith(XFileTools.PathSeparator)) { ex4FilePath = ex4FilePath.substring(1); } if (ex4FilePath.endsWith(XFileTools.PathSeparator)) { ex4FilePath = ex4FilePath.substring(0, ex4FilePath.length - 1); } ex4FilePath = XFileTools.joinPath(packEx4Folder, ex4FilePath); if (!XFileTools.isDirectoryExists(ex4FilePath)) { // isCreated = XFileTools.createDirectory(ex4FilePath); if (!isCreated) { // XLoggerTools.simpleErrorLog(MESSAGES.ActionFailed); exit(); } } let isTransfered = await XFileTools.copyFile(ex4, ex4FilePath); if (!isTransfered) { // XLoggerTools.simpleErrorLog(MESSAGES.ActionFailed); exit(); } // let mq4FilePath = clearMQ4FilePath.replace(mq4FileName, ""); if (mq4FilePath.startsWith(XFileTools.PathSeparator)) { mq4FilePath = mq4FilePath.substring(1); } if (mq4FilePath.endsWith(XFileTools.PathSeparator)) { mq4FilePath = mq4FilePath.substring(0, mq4FilePath.length - 1); } mq4FilePath = XFileTools.joinPath(packMQ4Folder, mq4FilePath); if (!XFileTools.isDirectoryExists(mq4FilePath)) { // isCreated = XFileTools.createDirectory(mq4FilePath); if (!isCreated) { // XLoggerTools.simpleErrorLog(MESSAGES.ActionFailed); exit(); } } isTransfered = await XFileTools.copyFile(mq4, mq4FilePath); if (!isTransfered) { // XLoggerTools.simpleErrorLog(MESSAGES.ActionFailed); exit(); } } // // Adding Pack Time ... const packVersionFile = XFileTools.joinPath(packPath, "Version.txt"); const packVersionContent = `packed at: ${new Date()}`; isCreated = await XFileTools.writeFile( packVersionFile, packVersionContent ); if (!isCreated) { // XLoggerTools.simpleErrorLog(MESSAGES.ActionFailed); exit(); } // // Succeed the Action ... XLoggerTools.simpleInfoLog(MESSAGES.Succeed); exit(); } /** * exit from app ... */ function exit() { process.exit(); } // // Startup Application ... startup(); //#endregion