import { Cli, CliCommandDefinitionOption, CliProgramDefinition } from '@cirrusct/cli'; import { createConsoleLogger, Logger, LogLevelString, parseLogLevel } from '@cirrusct/logging'; import { createError } from '@cirrusct/mr-core'; import * as path from 'path'; import { MrCliDebug as d } from './debug'; export const createLogger = (level: LogLevelString | string = 'info', includeSrc = false): Logger => { const logLevel = parseLogLevel(level); return createConsoleLogger('mr-cli', logLevel, includeSrc, { showLevelLabel: false, showTimeStamp: false }); }; export interface PreParsedCliOptions { logLevel: string; cwd: string; } /** * Pre-process Cli with just Global options to get settings that may be required * before command-specific options can be parsed (e.g. cwd, log-level) */ export const preParseCliOptions = (): PreParsedCliOptions => { const preParseDef: CliProgramDefinition = { commands: [], name: 'preparse', options: [ { default: 'info', flag: '-l', name: 'logLevel', transform: val => { return parseLogLevel(val as string); }, valueType: 'string', }, { default: process.cwd(), name: 'cwd', transform: val => { return path.resolve(val as string); }, valueType: 'string', }, ], }; try { d.markPreParseCliOptionsStart(); const parsed = Cli.parse(preParseDef); d.markPreParseCliOptionsEnd(); return parsed.options as PreParsedCliOptions; } catch (e) { throw createError(`PreParse Cli Failed`, e); } };