Options
All
  • Public
  • Public/Protected
  • All
Menu

@xdn/core - v1.37.0

Overview

The @xdn/core package provides a JavaScript API for defining edge routing and logic.

Example Routes File

// routes.js

import { Router } from '@xdn/core/router'
import { createNextPlugin } = from '@xdn/next'
import { renderNextPage, nextRoutes } from '@xdn/next'

export default new Router()
  // redirect at edge
  .match('/some/path/:withVar', async ({ redirect }) => {
    redirect('/some/other/path/:withVar', 301)
  })

  // proxy the legacy site
  .match('/some/path/:withVar', async ({ proxy }) => {
    proxy('legacy', {
      path: '/some/other/path/:withVar',
    })
  })

  // match based on header and proxy the legacy site
  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {
    proxy('legacy')
  })

  // vanity URL for next.js
  .match('/some/vanity/url/:productId', res => {
    renderNextPage('/p/[productId]', res)
  })

  // Send a synthetic html response
  .match('/static-html', ({ setResponseHeader, send }) => {
    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')
    send('<html><body><h1>Hello world!</h1></body></html>', 200)
  })

  // match Next.js routes based on the pages directory
  .use(nextRoutes)

  // fall back to proxying the legacy site
  .fallback(({ proxy }) => proxy('legacy'))

Generated using TypeDoc