UNPKG

next

Version:

The React Framework

174 lines (173 loc) 5.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _baseServer = _interopRequireDefault(require("./base-server")); var _render = require("./render"); var _web = require("./api-utils/web"); var _etag = require("./lib/etag"); var _requestMeta = require("./request-meta"); class NextWebServer extends _baseServer.default { constructor(options){ super(options); // Extend `renderOpts`. Object.assign(this.renderOpts, options.webServerConfig.extendRenderOpts); } generateRewrites() { // @TODO: assuming minimal mode right now return { beforeFiles: [], afterFiles: [], fallback: [] }; } handleCompression() { // For the web server layer, compression is automatically handled by the // upstream proxy (edge runtime or node server) and we can simply skip here. } getRoutesManifest() { return { headers: [], rewrites: { fallback: [], afterFiles: [], beforeFiles: [] }, redirects: [] }; } getPagePath() { // @TODO return ""; } getPublicDir() { // Public files are not handled by the web server. return ""; } getBuildId() { return this.serverOptions.webServerConfig.extendRenderOpts.buildId; } loadEnvConfig() { // The web server does not need to load the env config. This is done by the // runtime already. } getHasStaticDir() { return false; } generateImageRoutes() { return []; } generateStaticRoutes() { return []; } generateFsStaticRoutes() { return []; } generatePublicRoutes() { return []; } generateCatchAllMiddlewareRoute() { return []; } getFontManifest() { return undefined; } getPagesManifest() { return { [this.serverOptions.webServerConfig.page]: "" }; } getAppPathsManifest() { return { [this.serverOptions.webServerConfig.page]: "" }; } getFilesystemPaths() { return new Set(); } attachRequestMeta(req, parsedUrl) { (0, _requestMeta).addRequestMeta(req, "__NEXT_INIT_QUERY", { ...parsedUrl.query }); } getPrerenderManifest() { return { version: 3, routes: {}, dynamicRoutes: {}, notFoundRoutes: [], preview: { previewModeId: "", previewModeSigningKey: "", previewModeEncryptionKey: "" } }; } getServerComponentManifest() { // @TODO: Need to return `extendRenderOpts.serverComponentManifest` here. return undefined; } async renderHTML(req, _res, pathname, query, renderOpts) { return (0, _render).renderToHTML({ url: req.url, cookies: req.cookies, headers: req.headers }, {}, pathname, query, { ...renderOpts, disableOptimizedLoading: true, runtime: "experimental-edge" }); } async sendRenderResult(_req, res, options) { res.setHeader("X-Edge-Runtime", "1"); // Add necessary headers. // @TODO: Share the isomorphic logic with server/send-payload.ts. if (options.poweredByHeader && options.type === "html") { res.setHeader("X-Powered-By", "Next.js"); } if (!res.getHeader("Content-Type")) { res.setHeader("Content-Type", options.type === "json" ? "application/json" : "text/html; charset=utf-8"); } if (options.result.isDynamic()) { const writer = res.transformStream.writable.getWriter(); options.result.pipe({ write: (chunk)=>writer.write(chunk), end: ()=>writer.close(), destroy: (err)=>writer.abort(err), cork: ()=>{}, uncork: ()=>{} }); } else { const payload = await options.result.toUnchunkedString(); res.setHeader("Content-Length", String((0, _web).byteLength(payload))); if (options.generateEtags) { res.setHeader("ETag", (0, _etag).generateETag(payload)); } res.body(payload); } res.send(); } async runApi() { // @TODO return true; } async findPageComponents(pathname, query, params) { const result = await this.serverOptions.webServerConfig.loadComponent(pathname); if (!result) return null; return { query: { ...query || {}, ...params || {} }, components: result }; } } exports.default = NextWebServer; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } //# sourceMappingURL=web-server.js.map