UNPKG

@modern-js/server-core

Version:

A Progressive React Framework for modern web development.

102 lines (101 loc) 3.91 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var ssrRender_exports = {}; __export(ssrRender_exports, { ssrRender: () => ssrRender }); module.exports = __toCommonJS(ssrRender_exports); var import_constants = require("@modern-js/utils/universal/constants"); var import_constants2 = require("../../constants"); var import_utils = require("../../utils"); var import_ssrCache = require("./ssrCache"); var import_utils2 = require("./utils"); const SERVER_RUNTIME_ENTRY = "requestHandler"; async function ssrRender(request, { routeInfo, html, config: userConfig, staticGenerate, nodeReq, serverManifest, rscSSRManifest, rscClientManifest, rscServerManifest, locals, params, loaderContext, reporter, monitors, cacheConfig, logger, metrics, onError, onTiming }) { var _serverManifest_renderBundles; const { entryName } = routeInfo; const loadableStats = serverManifest.loadableStats || {}; const routeManifest = serverManifest.routeManifest || {}; const headers = (0, import_utils.parseHeaders)(request); if (nodeReq) { for (const key in nodeReq.headers) { if (!headers[key]) { headers[key] = nodeReq.headers[key]; } } } const renderBundle = (_serverManifest_renderBundles = serverManifest.renderBundles) === null || _serverManifest_renderBundles === void 0 ? void 0 : _serverManifest_renderBundles[entryName || import_constants.MAIN_ENTRY_NAME]; if (!renderBundle) { throw new Error(`Can't find renderBundle ${entryName || import_constants.MAIN_ENTRY_NAME}`); } const requestHandler = await renderBundle[SERVER_RUNTIME_ENTRY]; const config = (0, import_utils2.createRequestHandlerConfig)(userConfig); const requestHandlerOptions = { resource: { route: routeInfo, loadableStats, routeManifest, htmlTemplate: html, entryName: entryName || import_constants.MAIN_ENTRY_NAME }, params, loaderContext, config, rscSSRManifest, rscClientManifest, rscServerManifest, locals, reporter, staticGenerate, logger, metrics, monitors, onError, onTiming }; const cacheControl = await (0, import_ssrCache.matchCacheControl)(cacheConfig === null || cacheConfig === void 0 ? void 0 : cacheConfig.strategy, nodeReq || new IncomingMessgeProxy(request)); let response; if (cacheControl) { response = await (0, import_ssrCache.getCacheResult)(request, { cacheControl, container: cacheConfig === null || cacheConfig === void 0 ? void 0 : cacheConfig.container, requestHandler, requestHandlerOptions }); } else { response = await requestHandler(request, requestHandlerOptions); } response.headers.set(import_constants2.X_MODERNJS_RENDER, "server"); response.headers.set("content-type", "text/html; charset=UTF-8"); return response; } class IncomingMessgeProxy { constructor(req) { this.headers = {}; req.headers.forEach((value, key) => { this.headers[key] = value; }); this.method = req.method; this.url = (0, import_utils.getPathname)(req); } } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { ssrRender });