← back to Open Seo
badseo/src/fixtures/registry.ts
52 lines
import type { Fixture } from "./types";
import { headTagFixtures } from "./head-tags";
import { contentFixtures } from "./content";
import { indexabilityFixtures } from "./indexability";
import { httpStatusFixtures } from "./http-status";
import { redirectFixtures } from "./redirects";
import { performanceFixtures } from "./performance";
import { structureFixtures } from "./structure";
import { kitchenSinkFixtures } from "./kitchen-sink";
/** Every fixture on the site, in catalog order. */
export const allFixtures: Fixture[] = [
...headTagFixtures,
...contentFixtures,
...indexabilityFixtures,
...httpStatusFixtures,
...redirectFixtures,
...performanceFixtures,
...structureFixtures,
...kitchenSinkFixtures,
];
/** All URL paths a fixture answers on (canonical + any duplicates). */
export function fixturePaths(fixture: Fixture): string[] {
return [fixture.path, ...(fixture.extraPaths ?? [])];
}
/**
* Fixtures the catalog links to (so the crawler can reach them and they aren't
* orphaned). Each gets a card. Includes the deep-chain entrance even though
* it's technically plumbing.
*/
export const catalogLinkedFixtures = allFixtures.filter(
(f) => f.linkedFromCatalog !== false,
);
/** Fixtures whose paths belong in sitemap.xml. */
export const sitemapFixtures = allFixtures.filter((f) => f.inSitemap !== false);
/**
* Duplicate/alternate URLs (a fixture's extraPaths). The catalog links these so
* the duplicate pages are crawled — and, crucially, aren't mistaken for orphans.
*/
export const duplicateUrlLinks = allFixtures.flatMap((f) =>
(f.extraPaths ?? []).map((path) => ({ path, name: f.name })),
);
/** Distinct categories, in first-seen order. */
export const categories: string[] = [
...new Set(catalogLinkedFixtures.map((f) => f.category)),
];