UNPKG

cspell

Version:

A Spelling Checker for Code!

62 lines 2.26 kB
import { dynamicImport } from '@cspell/dynamic-import'; import { pkgDir } from '../pkgInfo.js'; import { ApplicationError, toError } from './errors.js'; function callAll(methods) { return (...p) => { for (const method of methods) { method(...p); } return; }; } function extractEmitter(reporters, emitterName) { // The `bind` is used in case the reporter is a class. return reporters .map((r) => r[emitterName]?.bind(r)) .filter((r) => !!r); } function mergeResultEmitters(reporters) { return async (result) => { await Promise.all(reporters.map((reporter) => reporter.result?.(result))); }; } /** * Mergers several cspell reporters into a single one */ export function mergeReporters(...reporters) { return { issue: callAll(extractEmitter(reporters, 'issue')), info: callAll(extractEmitter(reporters, 'info')), debug: callAll(extractEmitter(reporters, 'debug')), progress: callAll(extractEmitter(reporters, 'progress')), error: callAll(extractEmitter(reporters, 'error')), result: mergeResultEmitters(reporters), }; } /** * Loads reporter modules configured in cspell config file */ export async function loadReporters(reporters, defaultReporter, config) { async function loadReporter(reporterSettings) { if (reporterSettings === 'default') return defaultReporter; if (!Array.isArray(reporterSettings)) { reporterSettings = [reporterSettings]; } const [moduleName, settings] = reporterSettings; try { const { getReporter } = await dynamicImport(moduleName, [process.cwd(), pkgDir]); return getReporter(settings, config); } catch (e) { throw new ApplicationError(`Failed to load reporter ${moduleName}: ${toError(e).message}`); } } reporters = !reporters || !reporters.length ? ['default'] : [...reporters]; const loadedReporters = await Promise.all(reporters.map(loadReporter)); return loadedReporters.filter((v) => v !== undefined); } export function finalizeReporter(reporter) { return reporter && mergeReporters(reporter); } //# sourceMappingURL=reporters.js.map