@graphql-inspector/action
Version:
GraphQL Inspector functionality for GitHub Actions
98 lines (97 loc) • 2.38 kB
JavaScript
import { Console } from 'node:console';
import { Transform } from 'node:stream';
import chalk from 'chalk';
import * as env from 'std-env';
export { default as figures } from 'figures';
export { default as symbols } from 'log-symbols';
export { chalk };
export function bolderize(msg) {
const findSingleQuotes = /'([^']+)'/gim;
const findDoubleQuotes = /"([^"]+)"/gim;
return msg
.replace(findSingleQuotes, (_, value) => chalk.bold(value))
.replace(findDoubleQuotes, (_, value) => chalk.bold(value));
}
let mockedFn = null;
const canBeFancy = env.hasTTY === true;
export const Logger = {
success(msg) {
emit('success', msg);
},
log(msg) {
emit('log', msg);
},
table(input) {
table(input);
},
info(msg) {
emit('info', msg);
},
error(msg) {
emit('error', msg);
},
warn(msg) {
emit('warn', msg);
},
};
export function mockLogger(fn) {
mockedFn = fn;
}
export function unmockLogger() {
mockedFn = null;
}
function emit(type, msg) {
if (mockedFn) {
return mockedFn(msg);
}
if (!canBeFancy) {
return console.log(`[${type}]`, msg);
}
if (type === 'success') {
emitSuccess(msg);
}
else if (type === 'error') {
emitError(msg);
}
else if (type === 'info') {
emitInfo(msg);
}
else if (type === 'warn') {
emitWarn(msg);
}
else {
console.log(msg);
}
}
function table(input) {
const ts = new Transform({
transform(chunk, _enc, cb) {
cb(null, chunk);
},
});
const logger = new Console({ stdout: ts });
logger.table(input);
const table = (ts.read() || '').toString();
let result = '';
for (const row of table.split(/[\r\n]+/)) {
let r = row.replace(/[^┬]*┬/, '┌');
r = r.replace(/^├─*┼/, '├');
r = r.replace(/│[^│]*/, '');
r = r.replace(/^└─*┴/, '└');
r = r.replace(/'/g, ' ');
result += `${r}\n`;
}
console.log(result);
}
function emitSuccess(msg) {
console.log(chalk.green('success'), msg);
}
function emitError(msg) {
console.log(chalk.red('error'), msg);
}
function emitInfo(msg) {
console.log(chalk.blue('info'), msg);
}
function emitWarn(msg) {
console.log(chalk.yellow('warning'), msg);
}