Files
privacy.sexy/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/utils/log.ts
undergroundwires 19e42c9c52 Refactor and improve external URL checks
- Move external URL checks to its own module under `tests/`. This
  separates them from integration test, addressing long runs and
  frequent failures that led to ignoring test results.
- Move `check-desktop-runtime-errors` to `tests/checks` to keep all
  test-related checks into one directory.
- Replace `ts-node` with `vite` for running
  `check-desktop-runtime-errors` to maintain a consistent execution
  environment across checks.
- Implement a timeout for each fetch call.
- Be nice to external sources, wait 5 seconds before sending another
  request to an URL under same domain. This solves rate-limiting issues.
- Instead of running test on every push/pull request, run them only
  weekly.
- Do not run tests on each commit/PR but only scheduled (weekly) to
  minimize noise.
- Fix URLs are not captured correctly inside backticks or parenthesis.
2023-09-01 00:18:47 +02:00

69 lines
1.5 KiB
TypeScript

export enum LogLevel {
Info,
Warn,
Error,
}
export function log(message: string, level = LogLevel.Info): void {
const timestamp = new Date().toISOString();
const config = LOG_LEVEL_CONFIG[level] || LOG_LEVEL_CONFIG[LogLevel.Info];
const logLevelText = `${getColorCode(config.color)}${LOG_LEVEL_LABELS[level]}${getColorCode(TextColor.Reset)}`;
const formattedMessage = `[${timestamp}][${logLevelText}] ${message}`;
config.method(formattedMessage);
}
export function die(message: string): never {
log(message, LogLevel.Error);
return process.exit(1);
}
enum TextColor {
Reset,
LightRed,
Yellow,
LightBlue,
}
function getColorCode(color: TextColor): string {
return COLOR_CODE_MAPPING[color];
}
const LOG_LEVEL_LABELS: {
readonly [K in LogLevel]: string;
} = {
[LogLevel.Info]: 'INFO',
[LogLevel.Error]: 'ERROR',
[LogLevel.Warn]: 'WARN',
};
const COLOR_CODE_MAPPING: {
readonly [K in TextColor]: string;
} = {
[TextColor.Reset]: '\x1b[0m',
[TextColor.LightRed]: '\x1b[91m',
[TextColor.Yellow]: '\x1b[33m',
[TextColor.LightBlue]: '\x1b[94m',
};
interface ColorLevelConfig {
readonly color: TextColor;
readonly method: (...data: unknown[]) => void;
}
const LOG_LEVEL_CONFIG: {
readonly [K in LogLevel]: ColorLevelConfig;
} = {
[LogLevel.Info]: {
color: TextColor.LightBlue,
method: console.log,
},
[LogLevel.Warn]: {
color: TextColor.Yellow,
method: console.warn,
},
[LogLevel.Error]: {
color: TextColor.LightRed,
method: console.error,
},
};