// Prueft, ob ein Repo-Branch ein dev-Skript in package.json hat (Dev-Modus nur dann sinnvoll). import { giteaFetch, splitRepo } from './giteaClient.js' export const cacheTtlMs = 60 * 1000 const cache = new Map() export function clearDevScriptCache() { cache.clear() } /** true = dev-Skript vorhanden, false = kein package.json oder kein dev-Skript, null = unbekannt (Gitea-Fehler). */ export async function repoHasDevScript(repoFullName, branch) { const key = `${repoFullName}@${branch}` const hit = cache.get(key) if (hit && Date.now() - hit.at < cacheTtlMs) return hit.value const value = await lookup(repoFullName, branch) cache.set(key, { at: Date.now(), value }) return value } async function lookup(repoFullName, branch) { const [owner, repo] = splitRepo(repoFullName) if (!owner || !repo) return null let data try { data = await giteaFetch(`/repos/${owner}/${repo}/contents/package.json?ref=${encodeURIComponent(branch)}`) } catch (err) { return err?.status === 404 ? false : null } try { const pkg = JSON.parse(Buffer.from(data?.content || '', 'base64').toString('utf8')) const dev = pkg?.scripts?.dev return typeof dev === 'string' && dev.trim() !== '' } catch { return null } }