From 6d1a5e51bcc7b2b9f57144cc370a884541fc7384 Mon Sep 17 00:00:00 2001 From: Alexandr Garbuzov <186095128+alexandr-garbuzov@users.noreply.github.com> Date: Wed, 15 Oct 2025 23:03:48 +0300 Subject: [PATCH] refactor: move logger into separate module (#4581) * refactor: move logger into separate module * Update api/status/pat-info.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Alexandr Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- api/status/pat-info.js | 3 ++- api/status/up.js | 2 +- src/common/index.js | 1 - src/common/log.js | 14 ++++++++++++++ src/common/retryer.js | 2 +- src/common/utils.js | 6 ------ src/fetchers/stats.js | 2 +- src/fetchers/top-languages.js | 2 +- tests/retryer.test.js | 7 ++++++- 9 files changed, 26 insertions(+), 13 deletions(-) create mode 100644 src/common/log.js diff --git a/api/status/pat-info.js b/api/status/pat-info.js index f6d917ce..87cdc6e4 100644 --- a/api/status/pat-info.js +++ b/api/status/pat-info.js @@ -8,7 +8,8 @@ */ import { request } from "../../src/common/http.js"; -import { logger, dateDiff } from "../../src/common/utils.js"; +import { logger } from "../../src/common/log.js"; +import { dateDiff } from "../../src/common/utils.js"; export const RATE_LIMIT_SECONDS = 60 * 5; // 1 request per 5 minutes diff --git a/api/status/up.js b/api/status/up.js index 35964388..4af4530a 100644 --- a/api/status/up.js +++ b/api/status/up.js @@ -9,7 +9,7 @@ import { request } from "../../src/common/http.js"; import retryer from "../../src/common/retryer.js"; -import { logger } from "../../src/common/utils.js"; +import { logger } from "../../src/common/log.js"; export const RATE_LIMIT_SECONDS = 60 * 5; // 1 request per 5 minutes diff --git a/src/common/index.js b/src/common/index.js index 22330a45..84638a6f 100644 --- a/src/common/index.js +++ b/src/common/index.js @@ -14,7 +14,6 @@ export { parseArray, clampValue, flexLayout, - logger, measureText, lowercaseTrim, chunkArray, diff --git a/src/common/log.js b/src/common/log.js new file mode 100644 index 00000000..8a0e58b6 --- /dev/null +++ b/src/common/log.js @@ -0,0 +1,14 @@ +// @ts-check + +const noop = () => {}; + +/** + * Return console instance based on the environment. + * + * @type {Console | {log: () => void, error: () => void}} + */ +const logger = + process.env.NODE_ENV === "test" ? { log: noop, error: noop } : console; + +export { logger }; +export default logger; diff --git a/src/common/retryer.js b/src/common/retryer.js index 569108b1..b3ea7064 100644 --- a/src/common/retryer.js +++ b/src/common/retryer.js @@ -1,7 +1,7 @@ // @ts-check import { CustomError } from "./error.js"; -import { logger } from "./utils.js"; +import { logger } from "./log.js"; // Script variables. diff --git a/src/common/utils.js b/src/common/utils.js index 39a859de..28e6774a 100644 --- a/src/common/utils.js +++ b/src/common/utils.js @@ -211,11 +211,6 @@ const renderError = ({ `; }; -const noop = () => {}; -// return console instance based on the environment -const logger = - process.env.NODE_ENV === "test" ? { log: noop, error: noop } : console; - /** * Retrieve text length. * @@ -329,7 +324,6 @@ export { parseArray, clampValue, flexLayout, - logger, measureText, lowercaseTrim, chunkArray, diff --git a/src/fetchers/stats.js b/src/fetchers/stats.js index 29b7b975..376a1581 100644 --- a/src/fetchers/stats.js +++ b/src/fetchers/stats.js @@ -5,7 +5,7 @@ import * as dotenv from "dotenv"; import githubUsernameRegex from "github-username-regex"; import { calculateRank } from "../calculateRank.js"; import { retryer } from "../common/retryer.js"; -import { logger } from "../common/utils.js"; +import { logger } from "../common/log.js"; import { excludeRepositories } from "../common/envs.js"; import { CustomError, MissingParamError } from "../common/error.js"; import { wrapTextMultiline } from "../common/fmt.js"; diff --git a/src/fetchers/top-languages.js b/src/fetchers/top-languages.js index 601de295..91e3618f 100644 --- a/src/fetchers/top-languages.js +++ b/src/fetchers/top-languages.js @@ -1,7 +1,7 @@ // @ts-check import { retryer } from "../common/retryer.js"; -import { logger } from "../common/utils.js"; +import { logger } from "../common/log.js"; import { excludeRepositories } from "../common/envs.js"; import { CustomError, MissingParamError } from "../common/error.js"; import { wrapTextMultiline } from "../common/fmt.js"; diff --git a/tests/retryer.test.js b/tests/retryer.test.js index 36ea8d35..6f2bc2ed 100644 --- a/tests/retryer.test.js +++ b/tests/retryer.test.js @@ -1,7 +1,9 @@ +// @ts-check + import { describe, expect, it, jest } from "@jest/globals"; import "@testing-library/jest-dom"; import { RETRIES, retryer } from "../src/common/retryer.js"; -import { logger } from "../src/common/utils.js"; +import { logger } from "../src/common/log.js"; const fetcher = jest.fn((variables, token) => { logger.log(variables, token); @@ -17,6 +19,7 @@ const fetcherFail = jest.fn(() => { const fetcherFailOnSecondTry = jest.fn((_vars, _token, retries) => { return new Promise((res) => { // faking rate limit + // @ts-ignore if (retries < 1) { return res({ data: { errors: [{ type: "RATE_LIMITED" }] } }); } @@ -28,6 +31,7 @@ const fetcherFailWithMessageBasedRateLimitErr = jest.fn( (_vars, _token, retries) => { return new Promise((res) => { // faking rate limit + // @ts-ignore if (retries < 1) { return res({ data: { @@ -72,6 +76,7 @@ describe("Test Retryer", () => { await retryer(fetcherFail, {}); } catch (err) { expect(fetcherFail).toHaveBeenCalledTimes(RETRIES + 1); + // @ts-ignore expect(err.message).toBe("Downtime due to GitHub API rate limiting"); } });