PluginApp
interfaz Desde 1.2.0
Aplicación que recibe un plugin de app/plugins (o de un módulo) al arrancar. En el navegador
hay una por pestaña, antes de la hidratación; en el servidor, una por petición de página, antes
del render.
import type { PluginApp } from "@meekojs/meeko/framework";Código fuente src/app/definitions/define-plugin.ts:77
Declaración #
interface PluginApp {
readonly side: 'client' | 'server'
readonly route: RouteState
readonly request: Request | undefined
provide<T>(key: ContextKey<T>, value: T): void
addHead(input: () => HeadInput): void
beforeNavigate(handler: (url: URL, routeId: string | null) => boolean | void | Promise<boolean | void>): void
resolveLink(resolver: LinkResolver): void
onError(handler: PluginErrorHandler): void
}Ejemplo #
// app/plugins/analytics.client.ts
import { definePlugin } from "@meekojs/meeko/framework";
export default definePlugin((app) => {
console.log("arranca en", app.side, "con la ruta", app.route.path.value);
app.onError((error) => navigator.sendBeacon("/api/errors", String(error)));
});Miembros #
side
#
readonly side: 'client' | 'server'"client" en el navegador y "server" durante el render de una petición.
route
#
readonly route: RouteStateRuta de la aplicación, como la de useRoute(). En el servidor es la de la petición; en el
navegador sigue a la ruta confirmada, así que un effect que la lee se repite al navegar.
request
#
readonly request: Request | undefinedPetición HTTP que se renderiza; undefined en el navegador.
provide
#
provide<T>(key: ContextKey<T>, value: T): voidPublica un valor para todos los componentes de la aplicación, que lo leen con inject(key).
En el servidor el valor es de esta petición; no comparta en él estado mutable entre peticiones.
addHead
#
addHead(input: () => HeadInput): voidAdds document attributes and tags to every render root of this plugin.
beforeNavigate
#
beforeNavigate(handler: (url: URL, routeId: string | null) => boolean | void | Promise<boolean | void>): voidRuns before a client navigation; return false after taking over navigation.
resolveLink
#
resolveLink(resolver: LinkResolver): voidRegistra un resolvedor del href de cada <MeekoLink> de la aplicación (desde 1.8.0), por
ejemplo para añadir el prefijo del idioma. Varios resolvedores se encadenan en el orden de
registro: cada uno recibe el href del anterior. Un enlace con bind:resolve="false" no pasa
por ellos. Véase LinkResolver.
onError
#
onError(handler: PluginErrorHandler): voidRegistra un observador de errores de la aplicación. En el navegador recibe lo mismo que
mountClientApp({ onError }); en el servidor, los fallos del render de esta petición, además
del onError de server/runtime.ts.