Initial Commit ...
This commit is contained in:
+253
@@ -0,0 +1,253 @@
|
||||
/**
|
||||
* Publish XEa ...
|
||||
* a node js based application for publishing x-ea Expert ...
|
||||
*
|
||||
* Maintainer
|
||||
*
|
||||
* Hadi Khazaee Asl <https://saherelm.ir> (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
|
||||
Reference in New Issue
Block a user