Tipo de complemento routeProcess
Visión General
Cualquier ruta dentro de la aplicación que contenga un parámetro deber estar configurado en un complemento route process. El complemento le enseña a Scully como obtener los datos requiridos para pre-renderizar las páginas webs para esos route-params.
Un complemento route process
permite modificar cualquiera de esas rutas.
Uso
Imagina una aplicación que tenga las siguientes rutas configuradas por el complemento route process:
/user/1
/user/2
/user/3
/user/4
/user/5
Si quieres removes las rutas 'user/3
u 'user/5
. Un complemento route process
puede hacerlo.
Creando un Complemento route process
Veamos cómo implementar un complemento route process
que elimine 2 HandledRoutes
de una aplicación que tiene la siguiente ruta: /user/:userId
.
const { registerPlugin } = require('@scullyio/scully');
function removeUserIdPlugin(
routes: HandledRoute[],
config = {}
): Promise<HandledRoute[]> {
return Promise.resolve([{ route: '/user/3' }, { route: '/user/5' }]);
}
registerPlugin('router', 'removeUserIds', removeUserIdPlugin, validator);
Luego de implementar el complemento, se configura el archivo scully.config.ts
para que pueda ser usado.
Configurando el complementoroute process
La siguiente configuración usa el complemento removeUserIds
para procesar las HandledRoute[]
recibidas por la implementacion anterior:
// scully.config.ts
import './myPlugins/removeUserIdPlugin';
exports.config = {
// Add the following to your file
routes: {
'/user/:userId': {
type: 'removeUserIds',
},
},
};
Interfaz
Interfaz HandledRoute
interface RouteConfig {
/** this route does a manual Idle check */
manualIdleCheck?: boolean;
/** type of the route */
type?: string;
/**
* an optional function that will be executed on render.
* Receives the route string, and the config of this route.
*/
preRenderer?: (route?: string, config?: RouteConfig) => Promise<void | false>;
/** Allow in every other setting possible, depends on plugins */
[key: string]: any;
}
export interface HandledRoute {
/** the _complete_ route */
route: string;
/** String, must be an existing plugin name */
type: string;
/** the relevant part of the scully-config */
config?: RouteConfig;
/** variables exposed to angular _while rendering only!_ */
exposeToPage?: {
manualIdle?: boolean;
transferState?: Serializable;
[key: string]: Serializable;
};
/** data will be injected into the static page */
injectToPage?: {
[key: string]: Serializable;
};
/** an array with render plugin names that will be executed */
postRenderers?: string[];
/** the path to the file for a content file */
templateFile?: string;
/**
* additional data that will end up in scully.routes.json
* the frontMatter data will be added here too.
*/
data?: RouteData;
}
La interfaz HandledRoute
provee las propiedades necesarias para desarrollar tu propio complemento.
route: string
Una ruta de la aplicación para ser manejadas por Scully.
Corresponde a la información una ruta completa. Esto significa que no debe tener variables definidas.
#
no está permitido, y los query parameters
son ignorados.
type: RoutesTypes
Indica el tipo de complemento. Contiene el nombre del complemento que debería manejarlo. Este es un campo obligatorio y debe ser definido. Si falta este campo, Scully terminá su ejecución porque no sabrá qué hacer.
defaultPostRenderers?: string[]
Arreglo con un string con los identificadores de los content-renderers que ejecutaran todas las rutas.
postRenderers?: string[]
Arreglo de nombres de complementos que se ejecutarán después de renderizar la página inicial.
Cada uno de los complementos en este arreglo renderizán en el orden establecido, recibirán el HTML resultante del complemento anterior.
Además, este arreglo reemplaza el arreglo de defaultPostRenderers
.
const defaultPostRenderers = ['seoHrefOptimise'];
const sampleConf: ScullyConfig = {
defaultPostRenderers,
routes: {
/** gets the default postrenderes */
normalRoute: {
type: 'default',
},
/** adds to the default postrenderes */
someRoute: {
type: 'default',
postRenderers: [...defaultPostRenderers, 'myAddition'],
},
/** removes the default postrenderes */
someOtherRoute: {
type: 'default',
postRenderers: ['unique'],
},
},
};
El defaultPostRenderers
y postRenderers
son está diseñados para poder reemplzar los renderizadores por defecto. Además, el diseño actual es versátil, flexible y facilita el reemplazo de post-renderes.
¡No te olvides de agregar el defaultPostRenderers
!
templateFile?: string
El nombre del archivo que contiene la plantillaque a renderizar ¡No tiene relación con las plantillas Angular!
Esta propiedad es especifica para contentFolder
. Contiene la ruta completa al archivo que se usará para generar el contenido.
Recuerda que el contenido será insertado despues del renderizado inicial.
data?: RouteData
Los datos que hay en esta propiedad serán agregados en scully.routes.json
Esta información también se extiende en las rutas contentFolder
con los datos del encabezado del archivo template.
export interface RouteData {
title?: string;
author?: string;
published?: boolean;
[prop: string]: any;
}
Interfaz del complemento de Route Process
export type RouteProcess = (routes: HandledRoute[]) => Promise<HandledRoute[]>;
Un complemento route process es una función que recive un arreglo de HandledRoute
para ser procesada y luego devuelta
La interfaz HandledRoute
se descrita arriba, recibe un string junto con una ruta no controlada, y la configuración que especifica esa ruta.
La función del complemento route process debería ser así:
function exampleRouterPlugin(routes: HandledRoute[]): Promise<HandledRoute[]> {}
Recibe un arreglo de HandledRoute
. Luego, espera a que procese cada ruta y luego son devueltas
Luego, se agregan dentro del archivo scully-routes.json
generado por el comando npx scully
.
- Tipo de complemento routeProcess
- Visión General
- Uso
- Creando un Complemento route process
- Configurando el complementoroute process
- Interfaz
- Interfaz HandledRoute
- route: string
- type: RoutesTypes
- defaultPostRenderers?: string[]
- postRenderers?: string[]
- templateFile?: string
- data?: RouteData
- Interfaz del complemento de Route Process