Refactor code structure for improved readability and maintainability

This commit is contained in:
2026-02-01 15:43:35 +00:00
parent 3cf7e76d21
commit d306267d58
16 changed files with 286 additions and 42 deletions

View File

@@ -1,5 +1,6 @@
import { readJsonFile } from "./storage.js";
import { getCached, setCached } from "./cache.js";
import { getGiteaToken } from "./config.js";
export function parseRepoEntry(entry) {
if (typeof entry === "string") {
@@ -51,6 +52,12 @@ async function fetchJson(url, cacheKey, opts = {}) {
if (!opts.provider || opts.provider === "github") {
headers.Accept = "application/vnd.github+json";
}
if (opts.provider === "gitea") {
const token = opts.token || getGiteaToken(opts.baseUrl || url);
if (token) {
headers.Authorization = `token ${token}`;
}
}
const response = await fetch(url, { headers });
if (!response.ok) {
throw new Error(`${opts.provider || "git"} request failed for ${url}`);
@@ -76,7 +83,7 @@ export async function fetchRepo(entry) {
let data;
if (provider === "gitea") {
const url = `${baseUrl.replace(/\/$/, "")}/api/v1/repos/${ownerRepo}`;
data = await fetchJson(url, `repo-raw:${provider}:${ownerRepo}`, { provider });
data = await fetchJson(url, `repo-raw:${provider}:${ownerRepo}`, { provider, baseUrl });
const mapped = {
fullName: data.full_name || `${ownerRepo}`,
name: data.name || ownerRepo.split("/")[1] || ownerRepo,
@@ -90,13 +97,16 @@ export async function fetchRepo(entry) {
topics: data.topics || [],
provider,
ownerRepo,
baseUrl
baseUrl,
isPrivate: Boolean(data.private)
};
setCached(cacheKey, mapped);
return mapped;
}
data = await fetchJson(`https://api.github.com/repos/${ownerRepo}`, `repo-raw:github:${ownerRepo}`, { provider: "github" });
data = await fetchJson(`https://api.github.com/repos/${ownerRepo}`, `repo-raw:github:${ownerRepo}`, {
provider: "github"
});
const mapped = {
fullName: data.full_name,
name: data.name,
@@ -110,7 +120,8 @@ export async function fetchRepo(entry) {
topics: data.topics || [],
provider,
ownerRepo,
baseUrl: "https://github.com"
baseUrl: "https://github.com",
isPrivate: Boolean(data.private)
};
setCached(cacheKey, mapped);
return mapped;
@@ -131,7 +142,14 @@ export async function fetchManifest(entry, defaultBranch) {
} else {
url = `https://raw.githubusercontent.com/${ownerRepo}/${branch}/manifest.json`;
}
const response = await fetch(url, { headers: { "User-Agent": "siti-plugin-repo" } });
const headers = { "User-Agent": "siti-plugin-repo" };
if (provider === "gitea") {
const token = getGiteaToken(baseUrl);
if (token) {
headers.Authorization = `token ${token}`;
}
}
const response = await fetch(url, { headers });
if (response.ok) {
const manifest = await response.json().catch(() => null);
setCached(cacheKey, manifest);
@@ -145,7 +163,7 @@ export async function fetchReleases(entry) {
const { provider, ownerRepo, baseUrl } = parseRepoEntry(entry);
if (provider === "gitea") {
const url = `${baseUrl.replace(/\/$/, "")}/api/v1/repos/${ownerRepo}/releases?limit=5`;
const data = await fetchJson(url, `releases:${provider}:${ownerRepo}`, { provider });
const data = await fetchJson(url, `releases:${provider}:${ownerRepo}`, { provider, baseUrl });
return Array.isArray(data)
? data.map((release) => ({
tag: release.tag_name || release.name,
@@ -175,7 +193,7 @@ export async function fetchCommits(entry) {
const { provider, ownerRepo, baseUrl } = parseRepoEntry(entry);
if (provider === "gitea") {
const url = `${baseUrl.replace(/\/$/, "")}/api/v1/repos/${ownerRepo}/commits?limit=5`;
const data = await fetchJson(url, `commits:${provider}:${ownerRepo}`, { provider });
const data = await fetchJson(url, `commits:${provider}:${ownerRepo}`, { provider, baseUrl });
return Array.isArray(data)
? data.map((commit) => ({
sha: commit.sha,