diff --git a/.changeset/green-monkeys-cough.md b/.changeset/green-monkeys-cough.md new file mode 100644 index 00000000..857495d1 --- /dev/null +++ b/.changeset/green-monkeys-cough.md @@ -0,0 +1,5 @@ +--- +"@smartthings/cli": patch +--- + +process exceptions manually for better error messages diff --git a/src/index.ts b/src/index.ts index dffdf6ab..3f6f8708 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,7 @@ import fs from 'node:fs' import path from 'node:path' +import { AxiosError } from 'axios' import yargs, { type Argv, type CommandModule } from 'yargs' import { hideBin } from 'yargs/helpers' @@ -28,7 +29,26 @@ export const buildInstance = (commands: CommandModule[]): Argv => { 'strip-aliased': true, 'strip-dashed': true, }) - .completion('generate-completions-script', 'output completion script setup') /* eslint-enable @typescript-eslint/naming-convention */ + .completion('generate-completions-script', 'output completion script setup') + .fail((message, error, yargs) => { + if ('isAxiosError' in error && error.isAxiosError) { + // We don't print axiosError.message here because it just duplicates the things + // we're displaying but unformatted. + const axiosError = error as AxiosError + console.error(`Request to API failed with status ${axiosError.response?.status}`) + if (axiosError.response) { + console.error('Response: ', JSON.stringify(axiosError.response.data, null, 4)) + } + } else if (error) { + console.error(error.message) + } else { + console.error(message) + console.error(yargs.help()) + } + + // eslint-disable-next-line no-process-exit + process.exit(1) + }) return instance }