---
url: >-
  https://lit-ui-router.dev/reference/lit-ui-router-ssr/vite/functions/definePrerender.md
---
[lit-ui-router-ssr](../../index.md) / [vite](../index.md) / definePrerender

# Function: definePrerender()

```ts
function definePrerender(script): PrerenderEntry;
```

Defined in: [packages/lit-ui-router-ssr/src/vite.ts:110](https://github.com/simshanith/lit-ui-router/blob/740888c2b2ba358c4dfa52a122e927df6a604b12/packages/lit-ui-router-ssr/src/vite.ts#L110)

Turns a callback that returns this package's prerender options into a
prerender script's default export. The export spreads the build's values
(`outDir`, `base`, `shellHtml`, `write`) under the options and calls this
package's `prerender()`, so the script never calls it itself.

## Parameters

| Parameter | Type | Description |
| ------ | ------ | ------ |
| `script` | [`PrerenderScript`](../type-aliases/PrerenderScript.md) | returns the prerender options; handed the build's values |

## Returns

[`PrerenderEntry`](../type-aliases/PrerenderEntry.md)

the default export for the prerender script, whose result's
pages carry their `payload` report

## Example

```ts
import type { TemplateResult } from 'lit';
import type { UIRouterLit } from 'lit-ui-router';
import { settle, type PrerenderOptions } from 'lit-ui-router-ssr';
import { definePrerender } from 'lit-ui-router-ssr/vite';

declare const mounts: PrerenderOptions['mounts'];
declare const router: UIRouterLit;
declare function page(router: UIRouterLit): TemplateResult;

export default definePrerender((site) => ({
  mounts,
  router,
  paths: ['/', '/about'],
  renderShell: async (_verdict, { path }) => {
    await settle(router, path);
    return page(router);
  },
  document: (body) => site.shellHtml.replace('<!--app-->', body),
}));
```
