@gluonjs/ssr


@gluonjs/ssr / packages/ssr/src / AssetManifest

Interface: AssetManifest

Properties

assets?

readonly optional assets?: readonly string[]


entry

readonly entry: string


imports?

readonly optional imports?: readonly string[]


shadowStyles?

readonly optional shadowStyles?: readonly ShadowStyleAsset[]

Optional CSS assets that must also cross Declarative Shadow DOM boundaries.


styles?

readonly optional styles?: readonly string[]

Example

Declare the client entry and its module, stylesheet, and preload assets for SSR head serialization:

ts
import { css } from '@gluonjs/core';
import {
  createStyleManifest,
  renderResourceHints,
  renderShadowStyleLinks,
  renderStyleCarriers,
  serializeSsrState,
  type AssetManifest,
  type StyleManifest,
  type StyleManifestEntry,
  type ShadowStyleAsset,
} from '@gluonjs/ssr';

const assets = {
  entry: '/assets/client.js',
  imports: ['/assets/vendor.js'],
  styles: ['/assets/app.css'],
  assets: ['/assets/orbit-lamp.webp'],
  shadowStyles: [{ id: 'tailwind', href: '/assets/tailwind.css', digest: '4a1f9d2b' }],
} satisfies AssetManifest;
const shadow: ShadowStyleAsset = assets.shadowStyles[0]!;
const sheet = css`:host { display: block; }`;
const styles: StyleManifest = createStyleManifest([sheet]);
const first: StyleManifestEntry | undefined = styles.entries[0];
const head = renderResourceHints(assets) + renderStyleCarriers(styles, { nonce: 'request-nonce' }) + renderShadowStyleLinks([shadow]);
const state = serializeSsrState({ product: 'Orbit <Lamp>', quantity: 1 });
console.log(first?.digest, head, state);