GSI - Employe Self Service Mobile
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

178 lines
4.8 KiB

const spawn = require("child_process").spawn;
const fork = require("child_process").fork;
const readline = require("readline");
const chalk = require("chalk");
const banner = ` ######## #### ######## ######## ######## ### ###### ######## ##
## ## ## ## ## ## ## ## ## ## ## ##
###### ## ######## ###### ######## ######### ###### ###### ##
## ## ## ## ## ## ## ## ## ## ##
## #### ## ## ######## ######## ## ## ###### ######## ##
`;
const firebase_exe = process.argv[2];
let firebase_bin;
(async () => {
const line = new Array(process.stdout.columns)
.fill(undefined)
.map(() => "#")
.join("");
const thin_line = new Array(process.stdout.columns)
.fill(undefined)
.map(() => "-")
.join("");
console.log(line);
console.log("");
console.log(" Welcome to...");
console.log(chalk.yellow(banner));
console.log("");
console.log(line);
console.log("");
await CheckFirebaseTools();
console.log("");
await CheckIsLoggedIn();
console.log("");
console.log(
`${chalk.green("+")} You can now use the 'firebase' or 'npm' commands!`
);
console.log(
`${chalk.blue("~")} For more help see https://firebase.google.com/docs/cli/`
);
console.log("");
console.log(thin_line);
process.exit();
})();
async function CheckFirebaseTools() {
console.log(
`${chalk.cyan("~")} Let's make sure your Firebase CLI is ready...`
);
firebase_bin = await GetFirebaseToolsBins();
const isSetup = !!firebase_bin;
if (isSetup) {
console.log(
`${chalk.green("+")} Looks like ${chalk.green("your CLI is set up")}!`
);
} else {
console.log(
`${chalk.cyan("~")} Looks like ${chalk.yellow(
"your CLI needs to be set up"
)}.\n`
);
console.log(`${chalk.cyan("~")} This may take a moment`);
process.stdout.write(`${chalk.green("+")} Setting up environment...`);
return new Promise(resolve => {
const exe_split = firebase_exe.split(" ");
const install = spawn(
exe_split[0],
[...exe_split.slice(1), "--tool:force-setup"],
{}
);
install.stderr.on("data", buf => {
readline.clearLine(process.stdout, 2);
readline.cursorTo(process.stdout, 2, null);
const line = (
buf
.toString()
.split("\n")
.filter(l => l)
.slice(-1)[0] || ""
)
.trim()
.slice(0, process.stdout.columns - 5);
process.stdout.write(line);
});
install.on("exit", () => {
readline.clearLine(process.stdout, 0);
readline.cursorTo(process.stdout, 0, null);
process.stdout.write(
`${chalk.green("+")} Alright, ${chalk.green("your CLI is set up")}!\n`
);
resolve();
});
});
}
}
async function GetFirebaseToolsBins() {
return new Promise(resolve => {
const exe_split = firebase_exe.split(" ");
const checkSpawn = spawn(exe_split[0], [
...exe_split.slice(1),
"--tool:setup-check"
]);
let checkSpawnData = "";
checkSpawn.stdout.on("data", buf => {
checkSpawnData += buf;
});
checkSpawn.on("close", () => {
firebase_bin = JSON.parse(checkSpawnData).bins[0];
resolve(firebase_bin);
});
});
}
async function CheckIsLoggedIn() {
firebase_bin = firebase_bin || (await GetFirebaseToolsBins());
return new Promise(resolve => {
const finish = SimpleSpinner(
`${chalk.cyan("~")} Checking your Firebase credentials`
);
const listSpawn = fork(firebase_bin, ["projects:list", "--json"], { silent: true });
let listSpawnData = "";
listSpawn.stdout.on("data", buf => {
listSpawnData += buf;
});
listSpawn.on("close", () => {
const isLoggedIn =
JSON.parse(listSpawnData.toString()).status === "success";
if (!isLoggedIn) {
finish(
"🚫",
`${chalk.cyan(
"~"
)} Looks like you're not authenticated. ${chalk.yellow(
"Let's log in"
)}!\n`
);
} else {
finish("", "");
}
const login = fork(firebase_bin, ["login"], { stdio: "inherit" });
login.on("exit", () => {
resolve(isLoggedIn);
});
});
});
}
function SimpleSpinner(message) {
const icons = ["[/]", "[-]", "[\\]", "[-]", "[|]"];
let index = 0;
const cancel = setInterval(() => {
readline.clearLine(process.stdout, 0);
readline.cursorTo(process.stdout, 0, null);
process.stdout.write(message + chalk.white(icons[index]));
index++;
index %= icons.length;
}, 300);
return (_, final_message) => {
clearInterval(cancel);
readline.clearLine(process.stdout, 0);
readline.cursorTo(process.stdout, 0, null);
process.stdout.write(final_message);
};
}