PageDefinition
interfaz
Opciones de ruta de una página que se renderiza en el servidor ("ssr", el modo por defecto,
"stream" o "prerender"). Se declaran con definePage en <script server> o en un
sidecar *.route.ts, que nunca llegan al navegador.
import type { PageDefinition } from "@meekojs/meeko/framework";Código fuente src/app/definitions/define-page.ts:333
Declaración #
interface PageDefinition<P extends PageSchema | undefined, S extends PageSchema | undefined, D, C = unknown> {
readonly params?: P
readonly search?: S
readonly render?: Exclude<PageRender, 'client'>
readonly prerenderEntries?: readonly Readonly<Record<string, string>>[] | (() => Promise<readonly Readonly<Record<string, string>>[]>)
readonly sitemapEntries?: readonly SitemapEntry[] | ((context: SitemapEntriesContext) => readonly SitemapEntry[] | Promise<readonly SitemapEntry[]>)
readonly load?: (args: PageLoadContext<P, S, C>) => Promise<D> | D
readonly head?: (args: PageLoadContext<P, S, C> & { data: D }) => PageHead
readonly layout?: unknown
readonly layoutProps?: unknown
readonly middleware?: readonly RouteMiddlewareName[] | false
readonly cache?: PageCache<P, S, C>
}Parámetros de tipo #
-
Pextends PageSchema | undefined Schema de
params, oundefined.-
Sextends PageSchema | undefined Schema de
search, oundefined.-
D Datos que devuelve
load.-
C= unknown Tipo del contexto de la petición.
Ejemplo #
import * as v from "valibot";
import { definePage } from "@meekojs/meeko/framework";
export const route = definePage({
render: "prerender",
params: v.object({ slug: v.string() }),
prerenderEntries: [{ slug: "hola" }, { slug: "adios" }],
load: ({ params }) => ({ slug: params.slug }),
});Propiedades #
params
#
readonly params?: PSchema de los parámetros de la ruta (los segmentos [id] del archivo), que se validan antes de
load y del código de nivel superior; una entrada inválida responde 400. Sin schema, params
son los segmentos como texto.
search
#
readonly search?: SSchema de los parámetros de búsqueda; una entrada inválida responde 400. Sin schema, cada
clave es un texto, o una lista si se repite en la URL.
render
#
readonly render?: Exclude<PageRender, 'client'>Cómo llega la página al navegador: "ssr" la renderiza en cada petición, "stream" envía el
HTML antes de sus valores defer y "prerender" genera el HTML en meeko build. Para
renderizarla en el navegador, "client" (véase ClientPageDefinition). Debe ser un
literal, porque meeko build lo lee sin ejecutar el archivo.
Por defecto: "ssr".
prerenderEntries
#
readonly prerenderEntries?: readonly Readonly<Record<string, string>>[] | (() => Promise<readonly Readonly<Record<string, string>>[]>)Parámetros de cada URL que meeko build prerenderiza en una ruta dinámica con
render: "prerender", o una función asíncrona que los devuelve. Una ruta estática se
prerenderiza sin ellos, y "ssr" y "stream" los ignoran.
sitemapEntries
#
readonly sitemapEntries?: readonly SitemapEntry[] | ((context: SitemapEntriesContext) => readonly SitemapEntry[] | Promise<readonly SitemapEntry[]>)URL de la ruta que meeko build añade a sitemap.xml (con sitemap en meeko.config.ts): una
lista de SitemapEntry o una función, síncrona o asíncrona, que la devuelve y recibe
SitemapEntriesContext. Sirve sobre todo para las rutas dinámicas con "ssr" o
"stream", que el build no conoce. En una ruta "prerender" sólo añade lastmod, changefreq
y priority a sus páginas prerenderizadas: una entrada sin página detiene el build. exclude y
noindex siguen ganando.
load
#
readonly load?: (args: PageLoadContext<P, S, C>) => Promise<D> | DLoader del servidor: se ejecuta en cada petición de la página (en SSR y en la petición de datos
de una navegación), o una vez por URL durante meeko build con "prerender". Lo que devuelve
llega a la página como props.data, que pasa a ser obligatorio. Puede devolver un Response
para redirigir y valores defer, que "stream" envía después del HTML.
head
#
readonly head?: (args: PageLoadContext<P, S, C> & { data: D }) => PageHeadCalcula el head de la página con los datos del loader: title, description y, desde 1.2,
las etiquetas de useHead. Tiene prioridad sobre useHead y sobre el document de la
configuración.
layout
#
readonly layout?: unknownLayout con nombre de la página (app/layouts/<nombre>.meeko), o false para quitarlo y dejar
sólo app/app.meeko. Sin él, el de los +group.ts de sus carpetas o default. Debe ser un
literal, porque meeko build lo lee sin ejecutar el archivo. En definePage, su tipo es la unión
de los layouts de la aplicación.
layoutProps
#
readonly layoutProps?: unknownProps para el layout de la página: un objeto o una función que las calcula con el contexto de
head (data incluido). Se combinan con las de los +group.ts, a las que ganan. Llegan en el
HTML del servidor y en el payload, así que deben poder serializarse en JSON. En definePage se
tipan contra las props del layout que elige layout.
middleware
#
readonly middleware?: readonly RouteMiddlewareName[] | falseMiddleware con nombre de app/middleware que la página añade, después de los globales y de los
de sus +group.ts, o false para quitar los heredados. Debe ser un array literal de nombres,
porque meeko build lo lee sin ejecutar el archivo; su tipo es la unión de los middleware con
nombre de la aplicación.
cache
#
readonly cache?: PageCache<P, S, C>Caché HTTP de la página: ETag (con 304 sin loader ni render), max-age,
stale-while-revalidate y, con memory, una caché en memoria del HTML renderizado. Sólo en
producción y para peticiones sin sesión (véase PageCache). Se lee al ejecutar la ruta,
como load.
Véase también #
- Opciones de ruta con definePage Framework full-stack