JezK
Edit File: base-reporter.js.map
{"version":3,"file":"base-reporter.js","names":["isCI","require","util","EventEmitter","stringifyLangArgs","args","map","val","inspect","str","JSON","stringify","replace","match","precededBacklash","os","EOL","e","BaseReporter","opts","lang","language","stdout","process","stderr","stdin","_getStandardInput","emoji","nonInteractive","noProgress","isVerbose","verbose","isTTY","peakMemory","startTime","Date","now","format","defaultFormatter","key","msg","languages","en","ReferenceError","stringifiedArgs","i","_verbose","_verboseInspect","standardInput","console","warn","message","checkPeakMemory","peakMemoryInterval","setInterval","unref","memoryUsage","heapTotal","clearInterval","items","hints","obj","force","current","total","command","value","pkg","showPeakMemory","head","body","recommendation","resolution","auditAdvisory","auditMetadata","tick","name","end","workers","spinners","Array","fill","clear","setPrefix","question","options","Promise","reject","Error","condition","answer","toLowerCase","error","header","choices"],"sourceRoot":"../../src","sources":["reporters/base-reporter.js"],"sourcesContent":["/* @flow */\n/* eslint no-unused-vars: 0 */\n\nimport type {\n ReporterSpinnerSet,\n ReporterSelectOption,\n Trees,\n Stdout,\n Stdin,\n Package,\n ReporterSpinner,\n QuestionOptions,\n PromptOptions,\n} from './types.js';\nimport type {LanguageKeys} from './lang/en.js';\nimport type {Formatter} from './format.js';\nimport type {AuditMetadata, AuditActionRecommendation, AuditAdvisory, AuditResolution} from '../cli/commands/audit';\n\nimport {defaultFormatter} from './format.js';\nimport * as languages from './lang/index.js';\nvar isCI = require('ci-info').isCI;\nimport os from 'os';\n\nconst util = require('util');\nconst EventEmitter = require('events').EventEmitter;\n\ntype Language = $Keys<typeof languages>;\n\nexport type ReporterOptions = {\n verbose?: boolean,\n language?: Language,\n stdout?: Stdout,\n stderr?: Stdout,\n stdin?: Stdin,\n emoji?: boolean,\n noProgress?: boolean,\n silent?: boolean,\n nonInteractive?: boolean,\n};\n\nexport function stringifyLangArgs(args: Array<any>): Array<string> {\n return args.map(function(val): string {\n if (val != null && val.inspect) {\n return val.inspect();\n } else {\n try {\n const str = JSON.stringify(val) || val + '';\n // should match all literal line breaks and\n // \"u001b\" that follow an odd number of backslashes and convert them to ESC\n // we do this because the JSON.stringify process has escaped these characters\n return str\n .replace(/((?:^|[^\\\\])(?:\\\\{2})*)\\\\u001[bB]/g, '$1\\u001b')\n .replace(/[\\\\]r[\\\\]n|([\\\\])?[\\\\]n/g, (match, precededBacklash) => {\n // precededBacklash not null when \"\\n\" is preceded by a backlash (\"\\\\n\")\n // match will be \"\\\\n\" and we don't replace it with os.EOL\n return precededBacklash ? match : os.EOL;\n });\n } catch (e) {\n return util.inspect(val);\n }\n }\n });\n}\n\nexport default class BaseReporter {\n constructor(opts?: ReporterOptions = {}) {\n const lang = 'en';\n this.language = lang;\n\n this.stdout = opts.stdout || process.stdout;\n this.stderr = opts.stderr || process.stderr;\n this.stdin = opts.stdin || this._getStandardInput();\n this.emoji = !!opts.emoji;\n this.nonInteractive = !!opts.nonInteractive;\n this.noProgress = !!opts.noProgress || isCI;\n this.isVerbose = !!opts.verbose;\n\n // $FlowFixMe: this is valid!\n this.isTTY = this.stdout.isTTY;\n\n this.peakMemory = 0;\n this.startTime = Date.now();\n this.format = defaultFormatter;\n }\n\n formatter: Formatter;\n language: Language;\n stdout: Stdout;\n stderr: Stdout;\n stdin: Stdin;\n isTTY: boolean;\n emoji: boolean;\n noProgress: boolean;\n isVerbose: boolean;\n isSilent: boolean;\n nonInteractive: boolean;\n format: Formatter;\n\n peakMemoryInterval: ?IntervalID;\n peakMemory: number;\n startTime: number;\n\n lang(key: LanguageKeys, ...args: Array<mixed>): string {\n const msg = languages[this.language][key] || languages.en[key];\n if (!msg) {\n throw new ReferenceError(`No message defined for language key ${key}`);\n }\n\n // stringify args\n const stringifiedArgs = stringifyLangArgs(args);\n\n // replace $0 placeholders with args\n return msg.replace(/\\$(\\d+)/g, (str, i: number) => {\n return stringifiedArgs[i];\n });\n }\n\n /**\n * `stringifyLangArgs` run `JSON.stringify` on strings too causing\n * them to appear quoted. This marks them as \"raw\" and prevents\n * the quoting and escaping\n */\n rawText(str: string): {inspect(): string} {\n return {\n inspect(): string {\n return str;\n },\n };\n }\n\n verbose(msg: string) {\n if (this.isVerbose) {\n this._verbose(msg);\n }\n }\n\n verboseInspect(val: any) {\n if (this.isVerbose) {\n this._verboseInspect(val);\n }\n }\n\n _verbose(msg: string) {}\n _verboseInspect(val: any) {}\n\n _getStandardInput(): Stdin {\n let standardInput;\n\n // Accessing stdin in a win32 headless process (e.g., Visual Studio) may throw an exception.\n try {\n standardInput = process.stdin;\n } catch (e) {\n console.warn(e.message);\n delete process.stdin;\n // $FlowFixMe: this is valid!\n process.stdin = new EventEmitter();\n standardInput = process.stdin;\n }\n\n return standardInput;\n }\n\n initPeakMemoryCounter() {\n this.checkPeakMemory();\n this.peakMemoryInterval = setInterval(() => {\n this.checkPeakMemory();\n }, 1000);\n // $FlowFixMe: Node's setInterval returns a Timeout, not a Number\n this.peakMemoryInterval.unref();\n }\n\n checkPeakMemory() {\n const {heapTotal} = process.memoryUsage();\n if (heapTotal > this.peakMemory) {\n this.peakMemory = heapTotal;\n }\n }\n\n close() {\n if (this.peakMemoryInterval) {\n clearInterval(this.peakMemoryInterval);\n this.peakMemoryInterval = null;\n }\n }\n\n getTotalTime(): number {\n return Date.now() - this.startTime;\n }\n\n // TODO\n list(key: string, items: Array<string>, hints?: Object) {}\n\n // Outputs basic tree structure to console\n tree(key: string, obj: Trees, {force = false}: {force?: boolean} = {}) {}\n\n // called whenever we begin a step in the CLI.\n step(current: number, total: number, message: string, emoji?: string) {}\n\n // a error message has been triggered. this however does not always meant an abrupt\n // program end.\n error(message: string) {}\n\n // an info message has been triggered. this provides things like stats and diagnostics.\n info(message: string) {}\n\n // a warning message has been triggered.\n warn(message: string) {}\n\n // a success message has been triggered.\n success(message: string) {}\n\n // a simple log message\n // TODO: rethink the {force} parameter. In the meantime, please don't use it (cf comments in #4143).\n log(message: string, {force = false}: {force?: boolean} = {}) {}\n\n // a shell command has been executed\n command(command: string) {}\n\n // inspect and pretty-print any value\n inspect(value: any) {}\n\n // the screen shown at the very start of the CLI\n header(command: string, pkg: Package) {}\n\n // the screen shown at the very end of the CLI\n footer(showPeakMemory: boolean) {}\n\n // a table structure\n table(head: Array<string>, body: Array<Array<string>>) {}\n\n // security audit action to resolve advisories\n auditAction(recommendation: AuditActionRecommendation) {}\n\n // security audit requires manual review\n auditManualReview() {}\n\n // security audit advisory\n auditAdvisory(resolution: AuditResolution, auditAdvisory: AuditAdvisory) {}\n\n // summary for security audit report\n auditSummary(auditMetadata: AuditMetadata) {}\n\n // render an activity spinner and return a function that will trigger an update\n activity(): ReporterSpinner {\n return {\n tick(name: string) {},\n end() {},\n };\n }\n\n //\n activitySet(total: number, workers: number): ReporterSpinnerSet {\n return {\n spinners: Array(workers).fill({\n clear() {},\n setPrefix() {},\n tick() {},\n end() {},\n }),\n end() {},\n };\n }\n\n //\n question(question: string, options?: QuestionOptions = {}): Promise<string> {\n return Promise.reject(new Error('Not implemented'));\n }\n\n //\n async questionAffirm(question: string): Promise<boolean> {\n const condition = true; // trick eslint\n if (this.nonInteractive) {\n return true;\n }\n\n while (condition) {\n let answer = await this.question(question);\n answer = answer.toLowerCase();\n\n if (answer === 'y' || answer === 'yes') {\n return true;\n }\n if (answer === 'n' || answer === 'no') {\n return false;\n }\n\n this.error('Invalid answer for question');\n }\n\n return false;\n }\n\n // prompt the user to select an option from an array\n select(header: string, question: string, options: Array<ReporterSelectOption>): Promise<string> {\n return Promise.reject(new Error('Not implemented'));\n }\n\n // render a progress bar and return a function which when called will trigger an update\n progress(total: number): () => void {\n return function() {};\n }\n\n // utility function to disable progress bar\n disableProgress() {\n this.noProgress = true;\n }\n\n //\n prompt<T>(message: string, choices: Array<*>, options?: PromptOptions = {}): Promise<Array<T>> {\n return Promise.reject(new Error('Not implemented'));\n }\n}\n"],"mappings":"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"}