UNPKG

@report-toolkit/cli

Version:

See docs at [https://ibm.github.io/report-toolkit](https://ibm.github.io/report-toolkit)

105 lines (93 loc) 2.5 kB
import {_, constants, observable} from '@report-toolkit/common'; import {observable as core} from '@report-toolkit/core'; import {terminalColumns, toOutput} from '../console-utils.js'; import { fromFilepathsToReports, GROUPS, mergeCommandConfig, OPTIONS, getTransformerOptions } from './common.js'; const {ERROR, WARNING, INFO, DEFAULT_SEVERITY} = constants; const {inspect, transform, fromTransformerChain} = core; const {filter, take} = observable; const DEFAULT_INSPECT_CONFIG = { transformers: { table: { colWidths: [12, 20, 15], fields: [ { color: ({severity}) => SEVERITY_COLOR_MAP.get(severity), label: 'Severity', value: ({severity}) => _.toUpper(severity) }, { label: 'File', value: 'filepath' }, { label: 'Rule', value: 'id' }, { label: 'Message', value: 'message' } ], maxWidth: terminalColumns, outputHeader: 'Diagnostic Report Inspection' } } }; const SEVERITY_COLOR_MAP = _.toFrozenMap({ error: 'red', warning: 'yellow', info: 'blue' }); export const command = 'inspect <file..>'; export const desc = 'Inspect Diagnostic Report file(s) for problems'; // @ts-ignore export const builder = yargs => yargs .positional('file', { coerce: _.castArray, type: 'array' }) .options({ severity: { choices: [ERROR, WARNING, INFO], default: DEFAULT_SEVERITY, description: 'Minimum threshold for message severity', group: GROUPS.FILTER }, ...OPTIONS.OUTPUT, ...getTransformerOptions({sourceType: 'object'}) }); // @ts-ignore export const handler = argv => { const config = mergeCommandConfig('inspect', argv, DEFAULT_INSPECT_CONFIG); const {file, severity, output, transform: transformer, color} = config; const source = inspect(fromFilepathsToReports(file, config), { ruleConfig: config.rules, severity }); // if any of the messages have a severity of `error`, then // exit with code 1. source .pipe( filter(({severity}) => severity === ERROR), take(1) ) .subscribe(() => { process.exitCode = 1; }); fromTransformerChain(transformer, config) .pipe( transform(source, { beginWith: 'object', defaultTransformerConfig: config.transformers.table }), toOutput(output, {color}) ) .subscribe(); };