export function renderDocument()

in packages/runtime/src/renderDocument.tsx [31:100]


export function renderDocument(options: RenderDocumentOptions): Response {
  const {
    matches,
    renderOptions,
    routePath = '',
    downgrade,
    routes,
    documentData,
  }: RenderDocumentOptions = options;

  const {
    assetsManifest,
    app,
    Document,
    basename,
    routesConfig = {},
    serverData,
  } = renderOptions;

  const appData = null;
  const appConfig = getAppConfig(app);

  const loaderData = {};
  matches.forEach(async (match) => {
    const { id } = match.route;
    const pageConfig = routesConfig[id];

    loaderData[id] = {
      pageConfig: pageConfig ? pageConfig({}) : {},
    };
  });

  const appContext: AppContext = {
    assetsManifest,
    appConfig,
    appData,
    loaderData,
    matches,
    routes,
    documentOnly: true,
    renderMode: 'CSR',
    routePath,
    basename,
    downgrade,
    serverData,
    documentData,
  };

  const documentContext = {
    main: null,
  };

  const htmlStr = ReactDOMServer.renderToString(
    <AppContextProvider value={appContext}>
      <DocumentContextProvider value={documentContext}>
        {
          Document && <Document pagePath={routePath} />
        }
      </DocumentContextProvider>
    </AppContextProvider>,
  );

  return {
    value: `<!DOCTYPE html>${htmlStr}`,
    headers: {
      'Content-Type': 'text/html; charset=utf-8',
    },
    statusCode: 200,
  };
}