From acca348e1e30fbc727ff7831c3929fe22b46762c Mon Sep 17 00:00:00 2001 From: p-sw Date: Fri, 7 Jun 2024 00:11:01 +0900 Subject: [PATCH] feat(cli): handle registry fetching errors This commit adds error handling for fetching operations from the registry in the CLI 'list' command. Now, any failure in retrieving the registry results in a failed spinner with a clear descriptive message, thus making the failure more apparent to the user. --- packages/cli/src/commands/list.ts | 9 +++++++-- packages/cli/src/helpers/registry.ts | 16 ++++++++++++++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/packages/cli/src/commands/list.ts b/packages/cli/src/commands/list.ts index 3d100c3..10c9bfb 100644 --- a/packages/cli/src/commands/list.ts +++ b/packages/cli/src/commands/list.ts @@ -22,10 +22,15 @@ export default class List extends Command { const registrySpinner = ora('Fetching registry...') const getInstalledSpinner = ora('Getting installed components...') - const loadedConfig = await validateConfig(await loadConfig(flags.config)) + const loadedConfig = await validateConfig(this.log, await loadConfig(flags.config)) registrySpinner.start() - const registry = await getRegistry() + const unsafeRegistry = await getRegistry() + if (!unsafeRegistry.ok) { + registrySpinner.fail(unsafeRegistry.message) + return + } + const registry = unsafeRegistry.registry registrySpinner.succeed(`Fetched ${Object.keys(registry.components).length} components.`) const names = await getAvailableComponentNames(registry) diff --git a/packages/cli/src/helpers/registry.ts b/packages/cli/src/helpers/registry.ts index 44cbe88..9b84611 100644 --- a/packages/cli/src/helpers/registry.ts +++ b/packages/cli/src/helpers/registry.ts @@ -1,7 +1,19 @@ import {REGISTRY_URL, Registry} from '../const.js' -export async function getRegistry(): Promise { - return (await (await fetch(REGISTRY_URL)).json()) as Registry +export async function getRegistry(): Promise<{ok: true; registry: Registry} | {ok: false; message: string}> { + const registryResponse = await fetch(REGISTRY_URL) + + if (registryResponse.ok) { + return { + ok: true, + registry: (await registryResponse.json()) as Registry, + } + } else { + return { + ok: false, + message: `Error while fetching registry: ${registryResponse.status} ${registryResponse.statusText}`, + } + } } export async function getAvailableComponentNames(registry: Registry): Promise {