import useSWRImmutable from "swr/immutable";
import { ObservatoryResult } from "../types";
export function ObservatoryHeaders({ result }: { result: ObservatoryResult }) {
return result.scan.response_headers ? (
| Header |
Value |
{Object.entries(result.scan.response_headers).map(([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("-");
}