import type { ReactElement } from "react"; import { clientEntrypoints, type ClientEntrypoint } from "@/client/entrypoints"; import { AccountPage, type AccountPageProps } from "@/client/pages/AccountPage"; import { AdminPage, type AdminPageProps } from "@/client/pages/AdminPage"; import { AuthSignInPage, type AuthSignInPageProps } from "@/client/pages/AuthSignInPage"; import { BlobPage, type BlobPageProps } from "@/client/pages/BlobPage"; import { CommitPage, type CommitPageProps } from "@/client/pages/CommitPage"; import { CommitsPage, type CommitsPageProps } from "@/client/pages/CommitsPage"; import { ErrorPage, type ErrorPageProps } from "@/client/pages/ErrorPage"; import { HomePage } from "@/client/pages/HomePage"; import { NotFoundPage } from "@/client/pages/NotFoundPage"; import { OverviewPage, type OverviewPageProps } from "@/client/pages/OverviewPage"; import { OwnerPage, type OwnerPageProps } from "@/client/pages/OwnerPage"; import { TreePage, type TreePageProps } from "@/client/pages/TreePage"; type ViewDefinition = { kind: "document" | "fragment"; title?: string; clientEntrypoints?: ClientEntrypoint[]; render: (data: Record) => ReactElement; }; function renderWithProps( renderPage: (props: Props) => ReactElement ): (data: Record) => ReactElement { return (data) => renderPage(data as Props); } const views: Record = { home: { kind: "document", title: "git-on-cloudflare", clientEntrypoints: [clientEntrypoints.shell], render: () => , }, "404": { kind: "document", title: "404 · git-on-cloudflare", clientEntrypoints: [clientEntrypoints.shell], render: () => , }, error: { kind: "document", title: "Error · git-on-cloudflare", clientEntrypoints: [clientEntrypoints.shell], render: renderWithProps((props: ErrorPageProps) => ), }, owner: { kind: "document", clientEntrypoints: [clientEntrypoints.shell], render: renderWithProps((props: OwnerPageProps) => ), }, overview: { kind: "document", clientEntrypoints: [clientEntrypoints.shell], render: renderWithProps((props: OverviewPageProps) => ), }, tree: { kind: "document", clientEntrypoints: [clientEntrypoints.shell, clientEntrypoints.treePage], render: renderWithProps((props: TreePageProps) => ), }, blob: { kind: "document", clientEntrypoints: [clientEntrypoints.shell, clientEntrypoints.blobPage], render: renderWithProps((props: BlobPageProps) => ), }, commit: { kind: "document", clientEntrypoints: [clientEntrypoints.shell, clientEntrypoints.commitPage], render: renderWithProps((props: CommitPageProps) => ), }, commits: { kind: "document", clientEntrypoints: [clientEntrypoints.shell, clientEntrypoints.commitsPage], render: renderWithProps((props: CommitsPageProps) => ), }, "auth-signin": { kind: "document", title: "Sign in · git-on-cloudflare", clientEntrypoints: [clientEntrypoints.shell], render: renderWithProps((props: AuthSignInPageProps) => ), }, account: { kind: "document", title: "Account · git-on-cloudflare", clientEntrypoints: [clientEntrypoints.shell, clientEntrypoints.accountPage], render: renderWithProps((props: AccountPageProps) => ), }, admin: { kind: "document", clientEntrypoints: [clientEntrypoints.shell, clientEntrypoints.adminPage], render: renderWithProps((props: AdminPageProps) => ), }, }; export function getViewDefinition(name: string): ViewDefinition | undefined { return views[name]; }