From 2e223b57340311953e04a21d04e769ee81b6547e Mon Sep 17 00:00:00 2001 From: Ross Stenersen Date: Thu, 9 Apr 2026 18:54:23 -0500 Subject: [PATCH] fix: cleaner error messages --- .changeset/green-monkeys-cough.md | 5 +++++ src/index.ts | 22 +++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 .changeset/green-monkeys-cough.md 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 }