From d643b7cc718c10bd9b955f2b0c2dd11f5682144d Mon Sep 17 00:00:00 2001 From: Anton Gilgur Date: Fri, 7 Feb 2020 01:58:40 -0500 Subject: [PATCH] (fix/refactor): rewrite some overbroad try/catches - so there's less silent failures that occur but don't error - replace overbroad try/catch in getProjectPath with just an fs.pathExists - replace overbroad try/catch in cleanDistFolder with just an fs.remove - fs.remove is like rimraf and `rm -rf` in that it won't error if the file/dir doesn't exist - if it does error, it's probably because it *failed* to remove the dir, and that should error, because it's potentially a problem, especially if you're publishing right after - rewrite moveTypes() so it doesn't have an overbroad try/catch - use fs.pathExists first and early return if it doesn't exist - this way if copy or remove actually fail, they will actually error - before they would silently fail, which could similarly be pretty bad if one were to publish right after a silent failure --- src/index.ts | 38 ++++++++++++++------------------------ 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/src/index.ts b/src/index.ts index de4d97b97..8a730dd56 100755 --- a/src/index.ts +++ b/src/index.ts @@ -12,13 +12,11 @@ import { } from 'rollup'; import asyncro from 'asyncro'; import chalk from 'chalk'; -import util from 'util'; import * as fs from 'fs-extra'; import jest from 'jest'; import { CLIEngine } from 'eslint'; import logError from './logError'; import path from 'path'; -import rimraf from 'rimraf'; import execa from 'execa'; import shell from 'shelljs'; import ora from 'ora'; @@ -102,13 +100,16 @@ async function getInputs( } async function moveTypes() { - try { - // Move the typescript types to the base of the ./dist folder - await fs.copy(paths.appDist + '/src', paths.appDist, { - overwrite: true, - }); - await fs.remove(paths.appDist + '/src'); - } catch (e) {} + const appDistSrc = paths.appDist + '/src'; + + const pathExists = await fs.pathExists(appDistSrc); + if (!pathExists) return; + + // Move the typescript types to the base of the ./dist folder + await fs.copy(appDistSrc, paths.appDist, { + overwrite: true, + }); + await fs.remove(appDistSrc); } prog @@ -140,16 +141,11 @@ prog // Helper fn to prompt the user for a different // folder name if one already exists async function getProjectPath(projectPath: string): Promise { - let exists = true; - try { - // will throw an exception if it does not exists - await util.promisify(fs.access)(projectPath); - } catch { - exists = false; - } + const exists = await fs.pathExists(projectPath); if (!exists) { return projectPath; } + bootSpinner.fail(`Failed to create ${chalk.bold.red(pkg)}`); const prompt = new Input({ message: `A folder named ${chalk.bold.red( @@ -158,6 +154,7 @@ prog initial: pkg + '-1', result: (v: string) => v.trim(), }); + pkg = await prompt.run(); projectPath = (await fs.realpath(process.cwd())) + '/' + pkg; bootSpinner.start(`Creating ${chalk.bold.green(pkg)}...`); @@ -453,14 +450,7 @@ async function normalizeOpts(opts: WatchOpts): Promise { } async function cleanDistFolder() { - try { - await util.promisify(fs.access)(paths.appDist); - return util.promisify(rimraf)(paths.appDist); - } catch { - // if an exception is throw, the files does not exists or it is not visible - // either way, we just return - return; - } + await fs.remove(paths.appDist); } function writeCjsEntryFile(name: string) {