renderedPage

tcmts.cli.web.renderedPage · #m7ah35c2 · term · runs anywhere

A page of a component app (at, a path within its base), rendered as tcm start renders a page's first paint, as a string: for a request with these headers (its cookies, its host). Undefined if it can't render on the server.

import type { Codebase } from "#codebase/tcmts/cli/codebase";
import { renderPage } from "#codebase/tcmts/cli/web";
import type { ComponentPlan, RenderApp, RpcOptions } from "#codebase/tcmts/cli/web";
import type http from "node:http";

export async function renderedPage(
  cb: Codebase,
  at: string,
  headers: http.IncomingHttpHeaders,
  page: string,
  render: RenderApp,
  plan: ComponentPlan,
  opts: RpcOptions,
): Promise<string | undefined> {
  let html = "";
  const req = {
    url: at,
    method: "GET",
    headers: { ...headers, accept: "text/html" },
    socket: { remoteAddress: "127.0.0.1" },
  };
  const res = {
    statusCode: 200,
    headersSent: false,
    writableFinished: false,
    on() {
      return res;
    },
    setHeader() {},
    write(s: string) {
      html += s;
      return true;
    },
    end(s?: string) {
      if (s) html += s;
    },
  };
  const rendered = await renderPage(
    cb,
    req as unknown as http.IncomingMessage,
    res as unknown as http.ServerResponse,
    page,
    render,
    plan,
    opts,
  );
  return rendered ? html : undefined;
}

uses

used by