Saltar al contenido
Meeko
Escribe para buscar en las guías y en la referencia de la API. Ábrela desde cualquier página con / o Ctrl K; muévete con las flechas y entra con Intro.
Empezar

Contenidos

En esta página

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.

ts
import type { PageDefinition } from "@meekojs/meeko/framework";

Código fuente src/app/definitions/define-page.ts:333

Declaración #

ts
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 #

P extends PageSchema | undefined

Schema de params, o undefined.

S extends PageSchema | undefined

Schema de search, o undefined.

D

Datos que devuelve load.

C = unknown

Tipo del contexto de la petición.

Ejemplo #

ts
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 #

propiedad sólo lectura opcional

readonly params?: P

Schema 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.

propiedad sólo lectura opcional

readonly search?: S

Schema 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 #

propiedad sólo lectura opcional

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 #

propiedad sólo lectura opcional

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 #

propiedad sólo lectura opcional desde 1.7.0

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 #

propiedad sólo lectura opcional

readonly load?: (args: PageLoadContext<P, S, C>) => Promise<D> | D

Loader 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.

propiedad sólo lectura opcional

readonly head?: (args: PageLoadContext<P, S, C> & { data: D }) => PageHead

Calcula 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 #

propiedad sólo lectura opcional desde 1.5.0

readonly layout?: unknown

Layout 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 #

propiedad sólo lectura opcional desde 1.5.0

readonly layoutProps?: unknown

Props 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 #

propiedad sólo lectura opcional desde 1.6.0

readonly middleware?: readonly RouteMiddlewareName[] | false

Middleware 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 #

propiedad sólo lectura opcional desde 1.7.0

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 #

¿Te sirvió esta página?

Añadir un comentario

Se envía al elegir «Sí» o «No». Solo se guardan la página, tu respuesta y el comentario: ni cookies ni datos tuyos.

0 de 2000 caracteres

Editar en GitHub: packages/meeko/src/app/definitions/define-page.ts