@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
JavaScript
;
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;