diff --git a/@commitlint/cli/src/cli.js b/@commitlint/cli/src/cli.js index 58c499944a..734eb302fd 100755 --- a/@commitlint/cli/src/cli.js +++ b/@commitlint/cli/src/cli.js @@ -5,7 +5,7 @@ const load = require('@commitlint/load'); const lint = require('@commitlint/lint'); const read = require('@commitlint/read'); const meow = require('meow'); -const {merge, pick} = require('lodash'); +const {merge, pick, isFunction} = require('lodash'); const stdin = require('get-stdin'); const resolveFrom = require('resolve-from'); const resolveGlobal = require('resolve-global'); @@ -314,7 +314,13 @@ function loadFormatter(config, flags) { resolveGlobal.silent(moduleName); if (modulePath) { - return require(modulePath); + const moduleInstance = require(modulePath); + + if (isFunction(moduleInstance.default)) { + return moduleInstance.default; + } + + return moduleInstance; } throw new Error(`Using format ${moduleName}, but cannot find the module.`); diff --git a/@commitlint/format/src/index.js b/@commitlint/format/src/index.js index b3dde9341b..171cbb3ace 100644 --- a/@commitlint/format/src/index.js +++ b/@commitlint/format/src/index.js @@ -38,7 +38,7 @@ function formatInput(result = {}, options = {}) { return `\n${decoration} input: ${decoratedInput}\n`; } -function formatResult(result = {}, options = {}) { +export function formatResult(result = {}, options = {}) { const { signs = DEFAULT_SIGNS, colors = DEFAULT_COLORS, diff --git a/@commitlint/format/src/index.test.js b/@commitlint/format/src/index.test.js index 428ac9f415..259254e4db 100644 --- a/@commitlint/format/src/index.test.js +++ b/@commitlint/format/src/index.test.js @@ -1,7 +1,7 @@ import test from 'ava'; import chalk from 'chalk'; import {includes} from 'lodash'; -import format from '.'; +import format, {formatResult} from '.'; const ok = chalk.bold( `${chalk.green( @@ -144,3 +144,46 @@ test('uses signs as configured', t => { t.true(includes(actualError, 'ERR')); t.true(includes(actualWarning, 'WRN')); }); + +test('format result provides summary without arguments', t => { + const actual = formatResult(); + const actualText = actual.join('\n'); + + t.true(includes(actualText, '0 problems, 0 warnings')); +}); + +test('format result transforms error to text', t => { + const actual = formatResult({ + errors: [ + { + level: 2, + name: 'error-name', + message: 'There was an error' + } + ] + }); + + const actualText = actual.join('\n'); + + t.true(includes(actualText, 'error-name')); + t.true(includes(actualText, 'There was an error')); + t.true(includes(actualText, '1 problems, 0 warnings')); +}); + +test('format result transforms warning to text', t => { + const actual = formatResult({ + warnings: [ + { + level: 1, + name: 'warning-name', + message: 'There was a warning' + } + ] + }); + + const actualText = actual.join('\n'); + + t.true(includes(actualText, 'warning-name')); + t.true(includes(actualText, 'There was a warning')); + t.true(includes(actualText, '0 problems, 1 warnings')); +});