@gluonjs/ssr


@gluonjs/ssr / packages/ssr/src / SsrRequestOptions

Interface: SsrRequestOptions<Data>

Type Parameters

Data

Data = undefined

Properties

assets?

readonly optional assets?: AssetManifest


createApp

readonly createApp: (context) => GluonApp

Parameters

context

SsrRequestContext<Data>

Returns

GluonApp


load?

readonly optional load?: (context) => Data | Promise<Data>

Parameters

context

Omit<SsrRequestContext<Data>, "data">

Returns

Data | Promise<Data>


nonce?

readonly optional nonce?: string


routes?

readonly optional routes?: readonly RouteRecordRaw[] | ((store) => readonly RouteRecordRaw[])


signal?

readonly optional signal?: AbortSignal


state?

readonly optional state?: Readonly<Record<string, unknown>>


styles?

readonly optional styles?: StyleManifestSource


url

readonly url: string

Example

Describe the URL, route table, request loader, and application factory needed for one isolated SSR request:

ts
import { createApp, html } from '@gluonjs/core';
import { renderRequest, type SsrRequestContext, type SsrRequestOptions, type SsrRequestResult } from '@gluonjs/ssr';

type ReportData = { title: string };
const options = {
  url: '/reports/41',
  routes: [{ path: '/reports/:id', name: 'report' }],
  load: ({ router }: Omit<SsrRequestContext<ReportData>, 'data'>) => ({ title: `Report ${router.currentRoute.value.params.id}` }),
  createApp: ({ data }) => createApp(() => html`<main>${data.title}</main>`),
} satisfies SsrRequestOptions<ReportData>;

const response: SsrRequestResult = await renderRequest(options);
console.log(response.html, response.stateScript);