UNPKG

@grouparoo/core

Version:
197 lines (196 loc) 8.47 kB
"use strict"; 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 = {}));