Template: header
Template: markdown

Router plugins

Path format plugin

Custom functions can be added to use with the $path key in content documents and collections.

export default (pod: Pod) => {
  const plugin = pod.plugins.get('RouterPlugin') as RouterPlugin;
  plugin.addPathFormatFunction('slug', (title: string) => {
    return title.toLowerCase().replace(/\s+/g, '-');
  });
}
$path: /articles/${slug(doc.fields.title)}/
title: Lorem ipsum dolor sit amet

Adding routes

Amagaki provides a quick way to add new routes to extend functionality of your site outside of rendering content documents, collections, and static files. Routes may be added to integrate with external tools or generate custom output programmatically.

Note that if the list of URL paths changes after the development server is started, the router must be reset using pod.router.reset(). This may occur, for example, if you are building routes generated from items fetched from an external service.

export default (pod: Pod) => {
  // Example: Add a single route.
  pod.router.addRoutes('default', async (provider) => {
    provider.addRoute({
      urlPath: '/hello-world/',
      build: async() => {
        return '<!DOCTYPE html><title>Hello World!</title>'
      }
    });
  });
  // Example: Add multiple routes.
  pod.router.addRoutes('multiple', async (provider) => {
    // Get URL paths to add (for example, from a remote service).
    const urlPaths = await getUrlPaths();
    for (const urlPath of urlPaths) {
      provider.addRoute({
        urlPath: urlPath,
        build: async() => {
          return '<!DOCTYPE html><title>Hello World!</title>'
        }
      });
    }
  });
}
Template: footer