forked from orbitturner/WURUS-CLI
-
Notifications
You must be signed in to change notification settings - Fork 0
/
orbit.js
147 lines (123 loc) · 5.38 KB
/
orbit.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#! /usr/bin/env node
/***
* ██╗ ██╗██╗ ██╗██████╗ ██╗ ██╗███████╗ ██████╗██╗ ██╗
* ██║ ██║██║ ██║██╔══██╗██║ ██║██╔════╝ ██╔════╝██║ ██║
* ██║ █╗ ██║██║ ██║██████╔╝██║ ██║███████╗█████╗██║ ██║ ██║
* ██║███╗██║██║ ██║██╔══██╗██║ ██║╚════██║╚════╝██║ ██║ ██║
* ╚███╔███╔╝╚██████╔╝██║ ██║╚██████╔╝███████║ ╚██████╗███████╗██║
* ╚══╝╚══╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝ ╚═════╝╚══════╝╚═╝
*
*/
import chalk from 'chalk';
import inquirer from 'inquirer';
import gradient from 'gradient-string';
import chalkAnimation from 'chalk-animation';
import figlet from 'figlet';
import { Command } from 'commander';
import { createSpinner } from 'nanospinner';
import { mainMenuStream, menuChoice, moduleList } from "./core/main-menu.js";
import { InitDeployModule } from "./core/deploy/deployer.js";
import { CliName, isEmpty, sleep } from './core/helpers/utils.js';
import { OrbitLogger } from './core/helpers/orbit-logger.js';
// ===============================
// INITIALIZATION
// ===============================
process.title = CliName;
// Args Pass Initialization
let APP_REPO = '';
let APP_NAME = '';
let APP_PATH = '';
const program = new Command();
await BootStrap();
// ===============================
// ====================================================
// BOOT PARAMS HANDLING
// ====================================================
async function BootStrap() {
program
.name(CliName)
.description('A CLI that helps you deploy, update & monitor your Front/Back-end JS App in few steps easily.')
.version("1.0.1"); // Todo: Find a way to read the package.json without using --experimental-json-modules.
program
.option('-d, --deploy <repo>', 'Switch to deployment process with given Repository.')
.option('-u, --update <path>', 'Update app at given Path with his default Repository.')
.option('-m, --monitor <app_name>', 'Switch to MONITORING Mode of The Given App.');
// allow commander to parse `process.argv`
program.parse();
const options = program.opts();
if (options.deploy) {
APP_REPO = options.deploy;
welcome(`-> Launched in DEPLOY MODE. Given Repo : [${APP_REPO}]`);
}
if (options.update) {
APP_PATH = options.update;
welcome(`-> Launched in UPDATE MODE. Given Path : [${APP_PATH}]`);
}
if (options.monitor) {
APP_NAME = options.monitor;
welcome(`-> Launched in MONITORING MODE. Given App NAME : [${APP_NAME}]`);
}
if (isEmpty(options)) {
await welcome();
await sleep(100);
return _ShowMainMenu();
}
};
// ====================================================
// ====================================================
// 🚩 MAIN 🚀
// ====================================================
export function _ShowMainMenu() {
OrbitLogger.trace('fhjkfhk')
console.log(gradient.pastel.multiline(mainMenuStream) + '\n');
inquirer.prompt(menuChoice).then((answer) =>{
console.log(answer, typeof answer)
switch (answer.choosedMenu) {
case 1:
console.log(chalk.green(`🔰 Entering Module: ${moduleList.DEPLOY} 🔰`))
InitDeployModule();
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 0:
bye();
break;
}
});
}
async function welcome(message = 'You Called the CLI without params.\nBootstraping to Main Menu...\n') {
console.clear();
console.clear(); // Dumb Bug Where Console doesn't get properly cleared.
await sleep(100);
const rainbowTitle = chalkAnimation.rainbow(
message
);
await sleep(100);
rainbowTitle.stop();
return figlet(`WURUS-CLI`, (err, data) => {
console.log(gradient.pastel.multiline(data) + '\n');
});
}
async function bye(){
console.clear();
console.clear(); // Dumb Bug Where Console doesn't get properly cleared.
await sleep(100);
const rainbowTitle = chalkAnimation.rainbow(
`😉 See you later 👋🏾\n🚩 Checkout my website and my Github Profile For more !🚀\n
🌌 https://orbitturner.com/ 🌌\n
🔮 https://github.com/orbitturner 🔮\n\n`
);
await sleep(3000);
rainbowTitle.stop();
await figlet.text(`BYE-BYE`,{
font: 'ANSI Shadow'
}, (err, data) => {
console.log(gradient.pastel.multiline(data) + '\n');
});
await sleep(500);
return process.exit(1);
}