UNPKG

@graphql-inspector/action

Version:

GraphQL Inspector functionality for GitHub Actions

98 lines (97 loc) 2.38 kB
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); }