🔗 docs: link the live site, now that Pages is confirmed
Pages serves docs/ from main, so the page rebuilt in #6 is live at avalon-vanguard.github.io/cereale. The README pointed at the local file because the URL could not be verified from here; it now links the site and keeps the local instructions as the fallback. package.json homepage moves there too — npm renders it as the package's headline link, and a live playground is a better landing spot than an anchor inside the README. Adds canonical and Open Graph tags. No og:image: a preview card with a broken image is worse than one without, and there is no artwork yet. check-docs.mjs flagged the canonical link as a remote subresource, which it is not — the browser never fetches it. Rather than exempt the URL, the check now looks at rel and only flags the relations that actually fetch or connect. Verified it still catches a CDN stylesheet, a preconnect and a script src; a check that cannot tell a declaration from a request is one that gets switched off the first time it is wrong. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SAcqrz3FcadkYr3xG32CjK
This commit is contained in:
+21
-1
@@ -22,12 +22,23 @@ const failures = [];
|
||||
/** Subresource references — the things a browser fetches without being clicked. */
|
||||
const SUBRESOURCES = [
|
||||
[/<script\b[^>]*\bsrc\s*=\s*["']([^"']+)["']/gi, 'script src'],
|
||||
[/<link\b[^>]*\bhref\s*=\s*["']([^"']+)["']/gi, 'link href'],
|
||||
[/<(?:img|iframe|video|audio|source|embed)\b[^>]*\bsrc\s*=\s*["']([^"']+)["']/gi, 'media src'],
|
||||
[/@import\s+(?:url\()?["']([^"']+)["']/gi, 'css @import'],
|
||||
[/url\(\s*["']?(https?:\/\/[^)"']+)/gi, 'css url()'],
|
||||
];
|
||||
|
||||
/**
|
||||
* `<link>` relations the browser actually fetches or connects to.
|
||||
*
|
||||
* Checked against `rel` rather than flagging every `<link href>`, because the metadata
|
||||
* relations — `canonical` above all — are declarations about the document, not requests. A
|
||||
* check that cannot tell the difference gets switched off the first time it is wrong.
|
||||
*/
|
||||
const FETCHING_REL = new Set([
|
||||
'stylesheet', 'icon', 'shortcut icon', 'apple-touch-icon', 'apple-touch-icon-precomposed',
|
||||
'manifest', 'preload', 'modulepreload', 'prefetch', 'prerender', 'preconnect', 'dns-prefetch',
|
||||
]);
|
||||
|
||||
const isRemote = (url) => /^(?:https?:)?\/\//i.test(url);
|
||||
|
||||
const html = (await readdir(docs)).filter((name) => name.endsWith('.html'));
|
||||
@@ -40,6 +51,15 @@ for (const name of html) {
|
||||
if (isRemote(match[1])) failures.push(`docs/${name}: remote ${kind} — ${match[1]}`);
|
||||
}
|
||||
}
|
||||
|
||||
for (const match of source.matchAll(/<link\b([^>]*)>/gi)) {
|
||||
const attrs = match[1];
|
||||
const rel = (/\brel\s*=\s*["']([^"']+)["']/i.exec(attrs)?.[1] ?? '').trim().toLowerCase();
|
||||
const href = /\bhref\s*=\s*["']([^"']+)["']/i.exec(attrs)?.[1];
|
||||
if (href && isRemote(href) && FETCHING_REL.has(rel)) {
|
||||
failures.push(`docs/${name}: remote link rel="${rel}" — ${href}`);
|
||||
}
|
||||
}
|
||||
// A fetch to a CDN would not be caught by the markup scan.
|
||||
for (const match of source.matchAll(/\b(?:fetch|importScripts)\(\s*["'`](https?:\/\/[^"'`]+)/gi)) {
|
||||
failures.push(`docs/${name}: remote fetch — ${match[1]}`);
|
||||
|
||||
Reference in New Issue
Block a user