types/page.types.ts
types/page.types.ts is a file in Bane's Lab Build Scripts. 121 lines of code and 22 definitions.
import type { Discovery, Inline } from "#types/site.types";
import type {
PageDates,
RecordSubject,
SectionSeed,
SectionSubject,
SourceBody,
SourceSubject,
} from "@banes-lab/web/types/page.types.js";
import type { ModuleRunner } from "vite/module-runner";
import type { SectionExporter } from "#types/section.types";
export interface PageHead {
readonly description: string;
readonly path: string;
readonly robots: string;
readonly title: string;
}
export interface PageDefinition {
readonly content: unknown;
readonly description: string;
readonly id: string;
readonly title: string;
}
export interface PageRegistry {
readonly loadCompletePage: (id: string) => Promise<PageDefinition | undefined>;
readonly loadPage: (id: string) => Promise<PageDefinition | undefined>;
readonly loadedPage: (id: string) => PageDefinition | undefined;
}
export interface PageRenderer {
readonly applyHead: (root: Document, head: PageHead) => void;
readonly headOf: (page: string, definition?: PageDefinition, pathname?: string, dates?: PageDates) => PageHead;
readonly recordHead: (subject: RecordSubject) => PageHead;
readonly renderSectionPage: (subject: SectionSubject) => Element;
readonly renderStaticPage: (page: string) => readonly Element[];
readonly renderStaticSection: (page: string, path: string, id: string) => Element | null;
readonly sectionHead: (subject: SectionSubject) => PageHead;
readonly sourceHead: (subject: SourceSubject) => PageHead;
}
export type PageShell = "renderSectionPage" | "renderStaticPage" | "renderStaticSection";
export interface SectionSelector {
readonly sectionSeedsOf: (page: string, budget: number) => readonly SectionSeed[];
}
export interface SectionPageSource {
readonly main: string;
readonly renderer: Pick<PageRenderer, "applyHead" | "renderSectionPage" | "sectionHead">;
readonly site: string;
}
export interface Links {
readonly SITE_URL: string;
readonly pagePath: (page: string) => string;
readonly tabLink: (page: string, tab: string, section?: string) => string;
}
export type RouteExporter = (path: string, page: string, sections: readonly string[]) => string;
export interface Loaded {
readonly author: string;
readonly consent: string;
readonly exportSections: SectionExporter;
readonly exportText: RouteExporter;
readonly ids: readonly string[];
readonly inline: Inline;
readonly links: Links;
readonly main: string;
readonly name: string;
readonly registry: PageRegistry;
readonly renderer: PageRenderer;
readonly runner: ModuleRunner;
readonly summary: string;
readonly visit: (path: string) => void;
}
export type SiteSource = Pick<Loaded, "author" | "consent" | "exportText" | "ids" | "inline" | "name" | "summary"> & {
readonly links: Pick<Links, "SITE_URL" | "tabLink">;
readonly registry: Pick<PageRegistry, "loadedPage">;
readonly renderer: Pick<PageRenderer, "headOf">;
};
export type PageSource = Pick<Loaded, "main" | "visit"> & {
readonly registry: Pick<PageRegistry, "loadedPage">;
readonly renderer: Pick<PageRenderer, "applyHead" | "headOf" | "renderStaticPage">;
};
export interface SourceBodyRenderer {
readonly renderSourceBody: (body: SourceBody, text: string | null) => Element;
}
export interface RecordBodyRenderer {
readonly renderRecordBody: (subject: RecordSubject) => Element;
}
export interface RecordRegistry {
readonly registerRecords: (refs: readonly string[]) => void;
}
export interface RecordPageSource {
readonly body: RecordBodyRenderer;
readonly main: string;
readonly renderer: Pick<PageRenderer, "applyHead" | "recordHead" | "renderStaticSection">;
readonly site: string;
}
export interface SourcePageSource {
readonly body: SourceBodyRenderer;
readonly main: string;
readonly renderer: Pick<PageRenderer, "applyHead" | "sourceHead">;
readonly site: string;
}
export interface TextConverter {
readonly exportText: (element: Element) => string;
}
export interface TranscriptRenderer {
readonly renderTranscripts: (root: Element, recordings: readonly unknown[]) => void;
}
export interface PageRoute {
readonly dates?: PageDates;
readonly page: string;
readonly path: string;
}
export interface Prerendered {
readonly catalog: number;
readonly records: number;
readonly routes: number;
readonly sections: number;
readonly sources: number;
}
export interface DevState {
readonly discovery: Discovery;
readonly loaded: Loaded;
}