From 7f0306593614a1ad701945899516f20da3b000e1 Mon Sep 17 00:00:00 2001 From: Anatoly Kopyl Date: Sat, 28 Sep 2024 01:28:50 +0300 Subject: [PATCH] Cache stars --- package-lock.json | 24 ++---------------------- package.json | 1 - src/lib/getStars.ts | 20 ++++++++------------ src/routes/+page.server.ts | 17 ++++++++++++++++- src/routes/Hero.svelte | 10 ++++++---- 5 files changed, 32 insertions(+), 40 deletions(-) diff --git a/package-lock.json b/package-lock.json index feb6c0d..659fb60 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,6 @@ "version": "0.0.1", "dependencies": { "gsap": "^3.12.5", - "ofetch": "^1.4.0", "sveltekit-i18n": "^2.4.2" }, "devDependencies": { @@ -2232,11 +2231,6 @@ "node": ">=0.10.0" } }, - "node_modules/destr": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.3.tgz", - "integrity": "sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==" - }, "node_modules/detect-libc": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", @@ -3292,11 +3286,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/node-fetch-native": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.4.tgz", - "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==" - }, "node_modules/node-releases": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", @@ -3339,16 +3328,6 @@ "node": ">= 6" } }, - "node_modules/ofetch": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.4.0.tgz", - "integrity": "sha512-MuHgsEhU6zGeX+EMh+8mSMrYTnsqJQQrpM00Q6QHMKNqQ0bKy0B43tk8tL1wg+CnsSTy1kg4Ir2T5Ig6rD+dfQ==", - "dependencies": { - "destr": "^2.0.3", - "node-fetch-native": "^1.6.4", - "ufo": "^1.5.4" - } - }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -4547,7 +4526,8 @@ "node_modules/ufo": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", - "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==" + "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", + "dev": true }, "node_modules/unplugin": { "version": "1.14.1", diff --git a/package.json b/package.json index 73235b9..39ed7d3 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,6 @@ "type": "module", "dependencies": { "gsap": "^3.12.5", - "ofetch": "^1.4.0", "sveltekit-i18n": "^2.4.2" } } diff --git a/src/lib/getStars.ts b/src/lib/getStars.ts index 6d99c7c..e9c0c95 100644 --- a/src/lib/getStars.ts +++ b/src/lib/getStars.ts @@ -1,7 +1,5 @@ -import { ofetch } from "ofetch"; - -export default async function getStarsForUser(username: string, auth?: string) { - const userResponse = await request(`/users/${username}`, auth); +export default async function getStarsForUser(username: string) { + const userResponse = await request(`/users/${username}`); if (!userResponse || !userResponse.public_repos) { throw new Error(userResponse ? userResponse.message : 'User not found.'); } @@ -11,7 +9,7 @@ export default async function getStarsForUser(username: string, auth?: string) { const fetchReposPromises = []; for (let i = 1; i <= pages; i++) { - fetchReposPromises.push(request(`/users/${username}/repos?per_page=100&page=${i}`, auth)); + fetchReposPromises.push(request(`/users/${username}/repos?per_page=100&page=${i}`)); } const reposResponses = await Promise.all(fetchReposPromises); @@ -20,16 +18,14 @@ export default async function getStarsForUser(username: string, auth?: string) { return starSum(repos); } -async function request(url, auth) { - const headers = { +async function request(url) { + const headers= { 'User-Agent': 'GitHub StarCounter', + // Authorization: `Basic ${Buffer.from(auth).toString('base64')}` }; - if (auth) { - headers.Authorization = `Basic ${Buffer.from(auth).toString('base64')}`; - } - - return ofetch(`https://api.github.com${url}`, { headers }); + const response = await fetch(`https://api.github.com${url}`, { headers }); + return response.json() } async function starSum(repos) { diff --git a/src/routes/+page.server.ts b/src/routes/+page.server.ts index 3a4dbbf..ebf60a1 100644 --- a/src/routes/+page.server.ts +++ b/src/routes/+page.server.ts @@ -1,8 +1,23 @@ import type {PageServerLoad} from "./$types"; import getStars from "$lib/getStars"; +let lastRequest = Date.now() +let starCount: number + export const load: PageServerLoad = async () => { + const now = Date.now() + const CACHE_LIFE = 1000 * 60 * 5 + + if (now - CACHE_LIFE > lastRequest || starCount === undefined) { + lastRequest = Date.now() + try { + starCount = await getStars('anatolykopyl') + } catch (error) { + console.log(error) + } + } + return { - starCount: await getStars('anatolykopyl') + starCount, }; } diff --git a/src/routes/Hero.svelte b/src/routes/Hero.svelte index c3810af..a2d6051 100644 --- a/src/routes/Hero.svelte +++ b/src/routes/Hero.svelte @@ -73,10 +73,12 @@ const goTop = () => { href="https://github.com/anatolykopyl" > -
- {starCount} - -
+ {#if starCount} +
+ {starCount} + +
+ {/if}