UNPKG

utquidem

Version:

The meta-framework suite designed from scratch for frontend-focused modern web development.

67 lines (58 loc) 1.62 kB
import path from 'path'; import { mime, SERVER_RENDER_FUNCTION_NAME } from '@modern-js/utils'; import cookie from 'cookie'; import { ModernServerContext } from '../context'; import { RenderResult, ServerHookRunner } from '../../type'; import cache from './cache'; import { SSRServerContext } from './type'; export const render = async ( ctx: ModernServerContext, renderOptions: { distDir: string; bundle: string; urlPath: string; template: string; entryName: string; staticGenerate: boolean; }, runner: ServerHookRunner, ): Promise<RenderResult> => { const { urlPath, bundle, distDir, template, entryName, staticGenerate } = renderOptions; const bundleJS = path.join(distDir, bundle); const context: SSRServerContext = { request: { baseUrl: urlPath, params: ctx.params, pathname: ctx.path, host: ctx.host, query: ctx.query as Record<string, string>, url: ctx.href, cookieMap: cookie.parse(ctx.headers.cookie || ''), headers: ctx.headers, }, redirection: {}, template, entryName, distDir, staticGenerate, logger: ctx.logger, metrics: ctx.metrics, }; runner.extendSSRContext(context); const serverRender = require(bundleJS)[SERVER_RENDER_FUNCTION_NAME]; const html = await cache(serverRender, ctx)(context); const { url, status = 302 } = context.redirection; if (url) { return { content: url, contentType: '', statusCode: status, redirect: true, }; } return { content: html, contentType: mime.contentType('html') as string, }; };