From 92af2c1f304f8fe729649613a16f88de64b23d49 Mon Sep 17 00:00:00 2001 From: Wataru Yamada Date: Fri, 7 Jun 2024 11:44:46 +0900 Subject: [PATCH] Fix error message for forbidden error --- src/commands/publish.ts | 16 ++++++++++++++-- src/lib/error-handler.ts | 9 +++++++++ src/qiita-api/errors.ts | 8 ++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/commands/publish.ts b/src/commands/publish.ts index 31cb3f8..0968955 100644 --- a/src/commands/publish.ts +++ b/src/commands/publish.ts @@ -6,7 +6,11 @@ import { getFileSystemRepo } from "../lib/get-file-system-repo"; import { getQiitaApiInstance } from "../lib/get-qiita-api-instance"; import { syncArticlesFromQiita } from "../lib/sync-articles-from-qiita"; import { validateItem } from "../lib/validators/item-validator"; -import { Item } from "../qiita-api"; +import { + Item, + QiitaForbiddenError, + QiitaForbiddenOrBadRequestError, +} from "../qiita-api"; export const publish = async (argv: string[]) => { const args = arg( @@ -117,6 +121,14 @@ export const publish = async (argv: string[]) => { await fileSystemRepo.saveItem(responseItem, false, true); }); - await Promise.all(promises); + try { + await Promise.all(promises); + } catch (err) { + if (err instanceof QiitaForbiddenError) { + // patchItem and postItem is possible to return 403 by bad request. + throw new QiitaForbiddenOrBadRequestError(err.message, { cause: err }); + } + throw err; + } console.log("Successful!"); }; diff --git a/src/lib/error-handler.ts b/src/lib/error-handler.ts index 7a02f4a..3dc7357 100644 --- a/src/lib/error-handler.ts +++ b/src/lib/error-handler.ts @@ -2,6 +2,7 @@ import { QiitaBadRequestError, QiitaFetchError, QiitaForbiddenError, + QiitaForbiddenOrBadRequestError, QiitaInternalServerError, QiitaNotFoundError, QiitaRateLimitError, @@ -44,6 +45,14 @@ export const handleError = async (error: Error) => { ); console.error(chalk.red("")); break; + case QiitaForbiddenOrBadRequestError.name: + console.error(chalk.red.bold("Qiita APIへのリクエストに失敗しました")); + console.error(chalk.red(" 記事ファイルに不備がないかご確認ください")); + console.error( + chalk.red(" または、Qiitaのアクセストークンが正しいかご確認ください"), + ); + console.error(chalk.red("")); + break; case QiitaNotFoundError.name: console.error(chalk.red.bold("記事が見つかりませんでした")); console.error( diff --git a/src/qiita-api/errors.ts b/src/qiita-api/errors.ts index f925eaa..9bfe96a 100644 --- a/src/qiita-api/errors.ts +++ b/src/qiita-api/errors.ts @@ -53,3 +53,11 @@ export class QiitaUnknownError extends Error { this.name = "QiitaUnknownError"; } } + +export class QiitaForbiddenOrBadRequestError extends Error { + constructor(message: string, options?: { cause?: Error }) { + // @ts-expect-error This error is fixed in ES2022. + super(message, options); + this.name = "QiitaForbiddenOrBadRequestError"; + } +}