From 0849165c6ed57ce211af3a2e6e8f115971f98df8 Mon Sep 17 00:00:00 2001 From: Ophelia Goldstein <159258143+opheliagoldstein@users.noreply.github.com> Date: Sat, 11 Oct 2025 20:57:00 +0300 Subject: [PATCH] fix: resolve vscode type errors in API endpoints files (#4555) Co-authored-by: Alexandr --- api/gist.js | 20 ++++++++++++++++++-- api/index.js | 20 ++++++++++++++++++-- api/pin.js | 20 ++++++++++++++++++-- api/top-langs.js | 20 ++++++++++++++++++-- api/wakatime.js | 20 ++++++++++++++++++-- src/common/error.js | 15 +++++++++++++++ 6 files changed, 105 insertions(+), 10 deletions(-) diff --git a/api/gist.js b/api/gist.js index d6713eaf..02d43d07 100644 --- a/api/gist.js +++ b/api/gist.js @@ -11,7 +11,9 @@ import { setErrorCacheHeaders, } from "../src/common/cache.js"; import { guardAccess } from "../src/common/access.js"; +import { retrieveSecondaryMessage } from "../src/common/error.js"; +// @ts-ignore export default async (req, res) => { const { id, @@ -89,10 +91,24 @@ export default async (req, res) => { ); } catch (err) { setErrorCacheHeaders(res); + if (err instanceof Error) { + return res.send( + renderError({ + message: err.message, + secondaryMessage: retrieveSecondaryMessage(err), + renderOptions: { + title_color, + text_color, + bg_color, + border_color, + theme, + }, + }), + ); + } return res.send( renderError({ - message: err.message, - secondaryMessage: err.secondaryMessage, + message: "An unknown error occurred", renderOptions: { title_color, text_color, diff --git a/api/index.js b/api/index.js index d5e55fbb..c8c5de63 100644 --- a/api/index.js +++ b/api/index.js @@ -8,10 +8,12 @@ import { setCacheHeaders, setErrorCacheHeaders, } from "../src/common/cache.js"; +import { retrieveSecondaryMessage } from "../src/common/error.js"; import { parseArray, parseBoolean, renderError } from "../src/common/utils.js"; import { fetchStats } from "../src/fetchers/stats.js"; import { isLocaleAvailable } from "../src/translations.js"; +// @ts-ignore export default async (req, res) => { const { username, @@ -127,10 +129,24 @@ export default async (req, res) => { ); } catch (err) { setErrorCacheHeaders(res); + if (err instanceof Error) { + return res.send( + renderError({ + message: err.message, + secondaryMessage: retrieveSecondaryMessage(err), + renderOptions: { + title_color, + text_color, + bg_color, + border_color, + theme, + }, + }), + ); + } return res.send( renderError({ - message: err.message, - secondaryMessage: err.secondaryMessage, + message: "An unknown error occurred", renderOptions: { title_color, text_color, diff --git a/api/pin.js b/api/pin.js index e1f46b32..c8fa5924 100644 --- a/api/pin.js +++ b/api/pin.js @@ -8,10 +8,12 @@ import { setCacheHeaders, setErrorCacheHeaders, } from "../src/common/cache.js"; +import { retrieveSecondaryMessage } from "../src/common/error.js"; import { parseBoolean, renderError } from "../src/common/utils.js"; import { fetchRepo } from "../src/fetchers/repo.js"; import { isLocaleAvailable } from "../src/translations.js"; +// @ts-ignore export default async (req, res) => { const { username, @@ -92,10 +94,24 @@ export default async (req, res) => { ); } catch (err) { setErrorCacheHeaders(res); + if (err instanceof Error) { + return res.send( + renderError({ + message: err.message, + secondaryMessage: retrieveSecondaryMessage(err), + renderOptions: { + title_color, + text_color, + bg_color, + border_color, + theme, + }, + }), + ); + } return res.send( renderError({ - message: err.message, - secondaryMessage: err.secondaryMessage, + message: "An unknown error occurred", renderOptions: { title_color, text_color, diff --git a/api/top-langs.js b/api/top-langs.js index df286b48..47c3c29d 100644 --- a/api/top-langs.js +++ b/api/top-langs.js @@ -8,10 +8,12 @@ import { setCacheHeaders, setErrorCacheHeaders, } from "../src/common/cache.js"; +import { retrieveSecondaryMessage } from "../src/common/error.js"; import { parseArray, parseBoolean, renderError } from "../src/common/utils.js"; import { fetchTopLanguages } from "../src/fetchers/top-languages.js"; import { isLocaleAvailable } from "../src/translations.js"; +// @ts-ignore export default async (req, res) => { const { username, @@ -150,10 +152,24 @@ export default async (req, res) => { ); } catch (err) { setErrorCacheHeaders(res); + if (err instanceof Error) { + return res.send( + renderError({ + message: err.message, + secondaryMessage: retrieveSecondaryMessage(err), + renderOptions: { + title_color, + text_color, + bg_color, + border_color, + theme, + }, + }), + ); + } return res.send( renderError({ - message: err.message, - secondaryMessage: err.secondaryMessage, + message: "An unknown error occurred", renderOptions: { title_color, text_color, diff --git a/api/wakatime.js b/api/wakatime.js index b8642649..9cb995e2 100644 --- a/api/wakatime.js +++ b/api/wakatime.js @@ -11,7 +11,9 @@ import { setErrorCacheHeaders, } from "../src/common/cache.js"; import { guardAccess } from "../src/common/access.js"; +import { retrieveSecondaryMessage } from "../src/common/error.js"; +// @ts-ignore export default async (req, res) => { const { username, @@ -108,10 +110,24 @@ export default async (req, res) => { ); } catch (err) { setErrorCacheHeaders(res); + if (err instanceof Error) { + return res.send( + renderError({ + message: err.message, + secondaryMessage: retrieveSecondaryMessage(err), + renderOptions: { + title_color, + text_color, + bg_color, + border_color, + theme, + }, + }), + ); + } return res.send( renderError({ - message: err.message, - secondaryMessage: err.secondaryMessage, + message: "An unknown error occurred", renderOptions: { title_color, text_color, diff --git a/src/common/error.js b/src/common/error.js index c76a198d..d3547bab 100644 --- a/src/common/error.js +++ b/src/common/error.js @@ -1,3 +1,5 @@ +// @ts-check + /** * @type {string} A general message to ask user to try again later. */ @@ -61,9 +63,22 @@ class MissingParamError extends Error { } } +/** + * Retrieve secondary message from an error object. + * + * @param {Error} err The error object. + * @returns {string|undefined} The secondary message if available, otherwise undefined. + */ +const retrieveSecondaryMessage = (err) => { + return "secondaryMessage" in err && typeof err.secondaryMessage === "string" + ? err.secondaryMessage + : undefined; +}; + export { CustomError, MissingParamError, SECONDARY_ERROR_MESSAGES, TRY_AGAIN_LATER, + retrieveSecondaryMessage, };