import useSWRImmutable from "swr/immutable"; import { ObservatoryResult } from "../types"; export function ObservatoryHeaders({ result }: { result: ObservatoryResult }) { return result.scan.response_headers ? ( {Object.entries(result.scan.response_headers).map(([header, value]) => ( ))}
Header Value
{value}
) : null; } function HeaderLink({ header }: { header: string }) { // try a HEAD fetch for /en-US/docs/Web/HTTP/Headers//metadata.json // if successful, link to /en-US/docs/Web/HTTP/Headers/ const { data } = useHeaderLink(header); const hasData = !!data; const displayHeaderName = upperCaseHeaderName(header); return hasData ? ( {displayHeaderName} ) : ( <>{displayHeaderName} ); } function useHeaderLink(header: string) { const prettyHeaderName = upperCaseHeaderName(header); return useSWRImmutable(`headerLink-${header}`, async (key) => { const url = `/en-US/docs/Web/HTTP/Reference/Headers/${encodeURIComponent(prettyHeaderName)}/metadata.json`; try { const res = await fetch(url, { method: "HEAD" }); return res.ok ? `/en-US/docs/Web/HTTP/Reference/Headers/${encodeURIComponent(prettyHeaderName)}` : null; } catch (e) { return null; } }); } function upperCaseHeaderName(header: string) { return header .split("-") .map((p) => (p ? p[0].toUpperCase() + p.substring(1) : "")) .join("-"); }