Plugins | Yext Hitchhikers Platform
The Pages 2.0 system allows for executing user-defined code in the context of the plugin ecosystem.
Plugin Events
The plugin ecosystem supports several events which happen at different points of the deploy flow. The currently supported event types are:
OnUrlChange
- this event happens whenever the path of a production page changes{ "entityId": "[[external entity id]]", "locale": "[[entity profile locale]]", "url": "[[the new url]]", "feature": "[[the feature/template which generated this page]]" }
OnPageGenerate
- this event happens whenever a stream document is processed for HTML rendering{ "streamOutput": "[[the document body/entity data]]", "feature": "[[the feature/template name]]" }
API
- this event happens whenever a specific path is visited on the site{ "urlArgs": "[[map of named url arguments to values]]", "userAgent": "[[user agent in the request]]", "requestUrl": "[[requested url]]", "headers": "[[map of request header name to a list of values]]" }
Plugin Code
The code executed at each of these event invocations is defined within the site’s repository. The code can be housed in the repository in two different ways:
The code can live anywhere in the repo and be collected during the deploy build phase. This is called a “complex plugin”. Complex plugins can contain several files and are registered in the
ci.json
file under theartifactStructure.plugins
section. Check out this doc for more details on theci.json
file. Here is an example configuration:"plugins": [ { "pluginName": "Generator", "sourceFiles": [ { "root": "dist/plugin", "pattern": "*{.ts,.json}" }, { "root": "dist", "pattern": "assets/{server,static,renderer}/**/*{.js,.css}" } ], "event": "ON_PAGE_GENERATE", "functionName": "Generate" } ]
Plugins registered here must specify:
pluginName
sourceFiles
: a list of pattern matchers for all files to include in the plugin contextevent
: The event type for which this plugin is used. One of “onUrlChange”, “onPageGenerate”, or “api”functionName
: The name of the exported function to initially invoke for a plugin invocation
The code can live in a single file in a prescribed directory in the repository. This is called a “simple function”. Simple functions must be a single file and must be in the root level
functions/<event_type>
directory in the repository. Simple functions must export an entry-point function namedmain
.- For example,
functions/onUrlChange/urlUpdater.ts
would create a plugin with the nameurlUpdater
, the content ofurlUpdater.ts
as the single source file, the event “onUrlChange”, and the function name ”‘main”.
- For example,