UNPKG

@platform/react.ssr

Version:

A lightweight SSR (server-side-rendering) system for react apps bundled with ParcelJS and hosted on S3.

68 lines (67 loc) 3.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.init = void 0; var tslib_1 = require("tslib"); var url_1 = require("url"); var common_1 = require("./common"); var CACHE = { 'Cache-Control': "s-maxage=5, stale-while-revalidate" }; function init(args) { var _this = this; var router = args.router, getManifest = args.getManifest; router.get('*', function (req) { return tslib_1.__awaiter(_this, void 0, void 0, function () { var manifest, status_1, message, host, hostname, site, status_2, message, url, route, ext, entry, status_3, url_2, message, location; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4, getManifest()]; case 1: manifest = _a.sent(); if (!manifest.ok) { status_1 = manifest.status; message = 'Manifest could not be loaded.'; return [2, { status: status_1, data: { status: status_1, message: message } }]; } host = req.headers.host; hostname = (host || '').split(':')[0]; site = manifest.site.byHost(hostname); if (!site) { status_2 = 404; message = "A site definition for the domain '" + hostname + "' does not exist in the manifest."; return [2, { status: status_2, data: { status: status_2, message: message } }]; } url = url_1.parse(req.url || '', false); route = site.route(url.pathname || ''); ext = common_1.fs.extname(url.pathname || ''); if (!(route && !ext)) return [3, 3]; return [4, route.entry()]; case 2: entry = _a.sent(); if (entry.ok) { return [2, { headers: CACHE, data: entry.html, }]; } else { status_3 = entry.status, url_2 = entry.url; message = "Failed to get entry HTML from CDN."; return [2, { status: status_3, headers: CACHE, data: { status: status_3, message: message, url: url_2 }, }]; } _a.label = 3; case 3: location = site.redirectUrl(url.pathname || ''); if (location) { return [2, { status: 307, data: location, }]; } return [2, undefined]; } }); }); }); } exports.init = init;