diff --git a/bin/svgo b/bin/svgo index 14b21b8e4..0c2945204 100755 --- a/bin/svgo +++ b/bin/svgo @@ -1,6 +1,10 @@ #!/usr/bin/env node +const { red } = require('chalk'); const { program } = require('commander'); const makeProgram = require('../lib/svgo/coa'); makeProgram(program); -program.parseAsync(process.argv); +program.parseAsync(process.argv).catch(error => { + console.error(red(error.stack)); + process.exit(1); +}); diff --git a/lib/svgo-node.js b/lib/svgo-node.js index ae9935719..6a5057221 100644 --- a/lib/svgo-node.js +++ b/lib/svgo-node.js @@ -33,13 +33,11 @@ const loadConfig = async (configFile, cwd = process.cwd()) => { } let dir = cwd; while (true) { - try { - const file = path.join(dir, "svgo.config.js"); - const stats = await fs.promises.stat(file); - if (stats.isFile()) { - return await importConfig(file); - } - } catch {} + const file = path.join(dir, "svgo.config.js"); + const stats = await fs.promises.stat(file); + if (stats.isFile()) { + return await importConfig(file); + } const parent = path.dirname(dir); if (dir === parent) { return null; diff --git a/lib/svgo/coa.js b/lib/svgo/coa.js index de7e17a96..4163540ec 100644 --- a/lib/svgo/coa.js +++ b/lib/svgo/coa.js @@ -9,7 +9,6 @@ const pluginsMap = require('../../plugins/plugins.js'); const PKG = require('../../package.json'); const { encodeSVGDatauri, decodeSVGDatauri } = require('./tools.js'); const regSVGFile = /\.svg$/i; -const noop = () => {}; /** * Synchronously check if path is a directory. Tolerant to errors like ENOENT. @@ -97,18 +96,14 @@ async function action(args, opts) { if (typeof process == 'object' && process.versions && process.versions.node && PKG && PKG.engines.node) { var nodeVersion = String(PKG.engines.node).match(/\d*(\.\d+)*/)[0]; if (parseFloat(process.versions.node) < parseFloat(nodeVersion)) { - return printErrorAndExit(`Error: ${PKG.name} requires Node.js version ${nodeVersion} or higher.`); + throw Error(`${PKG.name} requires Node.js version ${nodeVersion} or higher.`); } } // --config - try { - const loadedConfig = await loadConfig(opts.config); - if (loadedConfig != null) { - config = loadedConfig; - } - } catch (error) { - return printErrorAndExit(error.message); + const loadedConfig = await loadConfig(opts.config); + if (loadedConfig != null) { + config = loadedConfig; } // --quiet @@ -166,7 +161,7 @@ async function action(args, opts) { // --folder if (opts.folder) { var ouputFolder = output && output[0] || opts.folder; - return optimizeFolder(config, opts.folder, ouputFolder).then(noop, printErrorAndExit); + await optimizeFolder(config, opts.folder, ouputFolder); } // --input @@ -183,8 +178,9 @@ async function action(args, opts) { }); // file } else { - return Promise.all(input.map((file, n) => optimizeFile(config, file, output[n]))) - .then(noop, printErrorAndExit); + await Promise.all( + input.map((file, n) => optimizeFile(config, file, output[n])) + ); } // --string @@ -390,15 +386,4 @@ function showAvailablePlugins() { console.log('Currently available plugins:\n' + list); } -/** - * Write an error and exit. - * @param {Error} error - * @return {Promise} a promise for running tests - */ -function printErrorAndExit(error) { - console.error(chalk.red(error)); - process.exit(1); - return Promise.reject(error); // for tests -} - module.exports.checkIsDir = checkIsDir;