mirror of
https://github.com/AikidoSec/safe-chain.git
synced 2026-05-26 12:10:49 +00:00
122 lines
2.5 KiB
JavaScript
122 lines
2.5 KiB
JavaScript
// oxlint-disable no-console
|
|
import chalk from "chalk";
|
|
import { isCi } from "./environment.js";
|
|
import {
|
|
getLoggingLevel,
|
|
LOGGING_SILENT,
|
|
LOGGING_VERBOSE,
|
|
} from "../config/settings.js";
|
|
|
|
/**
|
|
* @type {{ bufferOutput: boolean, bufferedMessages:(() => void)[]}}
|
|
*/
|
|
const state = {
|
|
bufferOutput: false,
|
|
bufferedMessages: [],
|
|
};
|
|
|
|
function isSilentMode() {
|
|
return getLoggingLevel() === LOGGING_SILENT;
|
|
}
|
|
|
|
function isVerboseMode() {
|
|
return getLoggingLevel() === LOGGING_VERBOSE;
|
|
}
|
|
|
|
function emptyLine() {
|
|
if (isSilentMode()) return;
|
|
|
|
writeInformation("");
|
|
}
|
|
|
|
/**
|
|
* @param {string} message
|
|
* @param {...any} optionalParams
|
|
* @returns {void}
|
|
*/
|
|
function writeInformation(message, ...optionalParams) {
|
|
if (isSilentMode()) return;
|
|
|
|
writeOrBuffer(() => console.log(message, ...optionalParams));
|
|
}
|
|
|
|
/**
|
|
* @param {string} message
|
|
* @param {...any} optionalParams
|
|
* @returns {void}
|
|
*/
|
|
function writeWarning(message, ...optionalParams) {
|
|
if (isSilentMode()) return;
|
|
|
|
if (!isCi()) {
|
|
message = chalk.yellow(message);
|
|
}
|
|
writeOrBuffer(() => console.warn(message, ...optionalParams));
|
|
}
|
|
|
|
/**
|
|
* @param {string} message
|
|
* @param {...any} optionalParams
|
|
* @returns {void}
|
|
*/
|
|
function writeError(message, ...optionalParams) {
|
|
if (!isCi()) {
|
|
message = chalk.red(message);
|
|
}
|
|
writeOrBuffer(() => console.error(message, ...optionalParams));
|
|
}
|
|
|
|
function writeExitWithoutInstallingMaliciousPackages() {
|
|
let message = "Safe-chain: Exiting without installing malicious packages.";
|
|
if (!isCi()) {
|
|
message = chalk.red(message);
|
|
}
|
|
writeOrBuffer(() => console.error(message));
|
|
}
|
|
|
|
/**
|
|
* @param {string} message
|
|
* @param {...any} optionalParams
|
|
* @returns {void}
|
|
*/
|
|
function writeVerbose(message, ...optionalParams) {
|
|
if (!isVerboseMode()) return;
|
|
|
|
writeOrBuffer(() => console.log(message, ...optionalParams));
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param {() => void} messageFunction
|
|
*/
|
|
function writeOrBuffer(messageFunction) {
|
|
if (state.bufferOutput) {
|
|
state.bufferedMessages.push(messageFunction);
|
|
} else {
|
|
messageFunction();
|
|
}
|
|
}
|
|
|
|
function startBufferingLogs() {
|
|
state.bufferOutput = true;
|
|
state.bufferedMessages = [];
|
|
}
|
|
|
|
function writeBufferedLogsAndStopBuffering() {
|
|
state.bufferOutput = false;
|
|
for (const log of state.bufferedMessages) {
|
|
log();
|
|
}
|
|
state.bufferedMessages = [];
|
|
}
|
|
|
|
export const ui = {
|
|
writeVerbose,
|
|
writeInformation,
|
|
writeWarning,
|
|
writeError,
|
|
writeExitWithoutInstallingMaliciousPackages,
|
|
emptyLine,
|
|
startBufferingLogs,
|
|
writeBufferedLogsAndStopBuffering,
|
|
};
|