@grouparoo/core
Version:
The Grouparoo Core
197 lines (196 loc) • 8.47 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.GrouparooCLI = void 0;
const actionhero_1 = require("actionhero");
const safe_1 = __importDefault(require("colors/safe"));
var GrouparooCLI;
(function (GrouparooCLI) {
/** Settings and Boot Options */
function timestampOption(cli) {
if (!cli.inputs)
cli.inputs = {};
cli.inputs.timestamps = {
default: false,
description: "Should timestamps be prepended to each log line?",
letter: "t",
flag: true,
};
// we need to set this ENV before the process starts up
if (!process.argv.slice(2).includes("--timestamps") &&
!process.argv.slice(2).find((a) => a.match(/-.*t/))) {
process.env.GROUPAROO_LOGS_STDOUT_DISABLE_TIMESTAMP = "true";
}
}
GrouparooCLI.timestampOption = timestampOption;
function jsonOption(cli) {
if (!cli.inputs)
cli.inputs = {};
cli.inputs.json = {
default: false,
description: "Return data as JSON? Use process.env.GROUPAROO_LOG_LEVEL=alert to disable other messages.",
letter: "j",
flag: true,
};
}
GrouparooCLI.jsonOption = jsonOption;
function setGrouparooRunMode(cli) {
const onlyName = cli.name.split(" ")[0];
const prefixedName = `cli:${onlyName}`;
process.env.GROUPAROO_RUN_MODE = prefixedName;
return prefixedName;
}
GrouparooCLI.setGrouparooRunMode = setGrouparooRunMode;
function setNextDevelopmentMode(nextDevelopmentMode = false) {
if (process.env.NEXT_DEVELOPMENT_MODE === undefined) {
process.env.NEXT_DEVELOPMENT_MODE = nextDevelopmentMode.toString();
}
}
GrouparooCLI.setNextDevelopmentMode = setNextDevelopmentMode;
function logCLI(name, announcePlugins = true) {
if (announcePlugins)
actionhero_1.api.plugins.announcePlugins();
GrouparooCLI.logger.log("");
GrouparooCLI.logger.log(logger.underlineBold(`🦘 Grouparoo: ${name}`));
GrouparooCLI.logger.log("");
}
GrouparooCLI.logCLI = logCLI;
function disableWebServer() {
delete actionhero_1.api.servers.servers.web;
delete actionhero_1.api.servers.servers.websocket;
}
GrouparooCLI.disableWebServer = disableWebServer;
/** Logging */
/**
* We do not want to use the actionhero logger for CLI commands, as we do not want this info in the log files.
* We also want more fine-grained control of log display for the terminal.
*/
let logger;
(function (logger) {
function log(message) {
console.log(message);
}
logger.log = log;
function error(message) {
console.error(message);
}
logger.error = error;
function blueBold(s) {
return colorEnabled() ? safe_1.default.blue(safe_1.default.bold(s)) : s;
}
logger.blueBold = blueBold;
function cyanBold(s) {
return colorEnabled() ? safe_1.default.cyan(safe_1.default.bold(s)) : s;
}
logger.cyanBold = cyanBold;
function blue(s) {
return colorEnabled() ? safe_1.default.blue(s) : s;
}
logger.blue = blue;
function underlineBold(s) {
return colorEnabled() ? safe_1.default.underline(safe_1.default.bold(s)) : s;
}
logger.underlineBold = underlineBold;
function deCamel(s) {
return s
.replace(/([a-z])([A-Z])/g, "$1 $2")
.replace("Grouparoo Record", "Record"); // special replacement for logging "record"
}
logger.deCamel = deCamel;
function deCamelAndCapitalize(s) {
return s.charAt(0).toUpperCase() + deCamel(s.slice(1));
}
logger.deCamelAndCapitalize = deCamelAndCapitalize;
function fatal(message) {
logger.error("❌ " + message);
if (actionhero_1.env !== "test")
process.exit(1);
return true;
}
logger.fatal = fatal;
function status(title, statusArray, secondaryTitle = `@ ${new Date().toISOString()}`) {
const formattedTitle = `┌-- ${title} ${secondaryTitle} ---`;
GrouparooCLI.logger.log("");
GrouparooCLI.logger.log(blueBold(formattedTitle));
statusArray.forEach(({ header, status }, idx) => {
if (idx > 0)
logger.log(blueBold(`|`));
GrouparooCLI.logger.log(blueBold(`|`) + " " + underlineBold(header));
for (const key in status) {
const [v1, v2] = status[key];
GrouparooCLI.logger.log(`${blueBold("|")} * ${deCamel(key)}${(v1 !== null && v1 !== undefined ? ": " + v1.toString() : "") +
(v2 !== null && v2 !== undefined ? ` / ${v2.toString()}` : "")}`);
}
});
GrouparooCLI.logger.log(blueBold("└" + "-".repeat(formattedTitle.length - 1)));
GrouparooCLI.logger.log("");
}
logger.status = status;
function generateSummaryItems(categorySummary, logBlock) {
if (categorySummary.length === 0) {
GrouparooCLI.logger.log(`${cyanBold("|")} None affected`);
}
categorySummary.forEach((category, idx) => {
if (idx > 0)
logger.log(cyanBold(`|`));
if (category.name !== null) {
GrouparooCLI.logger.log(`${cyanBold(`|`)} ${idx + 1}. ${underlineBold(category.name)}`);
}
if (logBlock === "WARNINGS") {
for (const property in category) {
if (property !== "name") {
GrouparooCLI.logger.log(
//@ts-ignore
`${cyanBold("|")} ${category[property]}`);
}
}
}
else {
for (const property in category) {
if (property !== "name") {
GrouparooCLI.logger.log(
//@ts-ignore
category[property] === null
? `${cyanBold("|")} * ${deCamelAndCapitalize(property)}: none`
: `${cyanBold("|")} * ${deCamelAndCapitalize(property
//@ts-ignore
)}: ${category[property]}`);
}
}
}
});
return false;
}
logger.generateSummaryItems = generateSummaryItems;
function finalSummary(finalSummaryLogs, secondaryTitle = `${new Date().toISOString()}`) {
const formattedTitle = `┌-- 🦘 Run Completed @ ${secondaryTitle} ---`;
GrouparooCLI.logger.log("");
GrouparooCLI.logger.log(cyanBold(formattedTitle));
const headings = ["RECORDS", "SOURCES", "DESTINATIONS"];
if (finalSummaryLogs[3].length > 0)
headings.push("WARNINGS");
finalSummaryLogs.forEach((log, idx) => {
if (headings[idx]) {
GrouparooCLI.logger.log(cyanBold(`|`) +
"\n" +
cyanBold(`|`) +
" " +
underlineBold(headings[idx]) +
"\n" +
cyanBold(`|`));
generateSummaryItems(log, headings[idx]);
}
});
GrouparooCLI.logger.log(cyanBold("└" + "-".repeat(formattedTitle.length - 1)));
GrouparooCLI.logger.log("");
}
logger.finalSummary = finalSummary;
function colorEnabled() {
var _a;
return (((_a = process.env.GROUPAROO_LOGS_STDOUT_DISABLE_COLOR) === null || _a === void 0 ? void 0 : _a.toLowerCase()) !==
"true");
}
})(logger = GrouparooCLI.logger || (GrouparooCLI.logger = {}));
})(GrouparooCLI = exports.GrouparooCLI || (exports.GrouparooCLI = {}));