mirror of
https://github.com/AikidoSec/safe-chain.git
synced 2026-05-26 12:10:49 +00:00
179 lines
3.6 KiB
JavaScript
179 lines
3.6 KiB
JavaScript
// oxlint-disable no-console
|
|
import chalk from "chalk";
|
|
import ora from "ora";
|
|
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();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @typedef {Object} Spinner
|
|
* @property {(message: string) => void} succeed
|
|
* @property {(message: string) => void} fail
|
|
* @property {() => void} stop
|
|
* @property {(message: string) => void} setText
|
|
*/
|
|
|
|
/**
|
|
* @param {string} message
|
|
*
|
|
* @returns {Spinner}
|
|
*/
|
|
function startProcess(message) {
|
|
if (isSilentMode()) {
|
|
return {
|
|
succeed: () => {},
|
|
fail: () => {},
|
|
stop: () => {},
|
|
setText: () => {},
|
|
};
|
|
}
|
|
|
|
if (isCi()) {
|
|
return {
|
|
succeed: (message) => {
|
|
writeInformation(message);
|
|
},
|
|
fail: (message) => {
|
|
writeError(message);
|
|
},
|
|
stop: () => {},
|
|
setText: (message) => {
|
|
writeInformation(message);
|
|
},
|
|
};
|
|
} else {
|
|
const spinner = ora(message).start();
|
|
return {
|
|
succeed: (message) => {
|
|
spinner.succeed(message);
|
|
},
|
|
fail: (message) => {
|
|
spinner.fail(message);
|
|
},
|
|
stop: () => {
|
|
spinner.stop();
|
|
},
|
|
setText: (message) => {
|
|
spinner.text = message;
|
|
},
|
|
};
|
|
}
|
|
}
|
|
|
|
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,
|
|
startProcess,
|
|
startBufferingLogs,
|
|
writeBufferedLogsAndStopBuffering,
|
|
};
|