@shopify/react-server
Version:
Utilities for React server-side rendering.
48 lines (47 loc) • 1.99 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
require("isomorphic-fetch");
var path_1 = require("path");
var fs_extra_1 = require("fs-extra");
var koa_1 = tslib_1.__importDefault(require("koa"));
var koa_compose_1 = tslib_1.__importDefault(require("koa-compose"));
var koa_mount_1 = tslib_1.__importDefault(require("koa-mount"));
var sewing_kit_koa_1 = require("@shopify/sewing-kit-koa");
var render_1 = require("../render");
var logger_1 = require("../logger");
var metrics_1 = require("../metrics");
var ping_1 = require("../ping");
var logger = console;
/**
* Create a full Koa server for server rendering an `@shopify/react-html` based React application defined by `options.render`
* @param options
* @returns a Server instance
*/
function createServer(options) {
var port = options.port, assetPrefix = options.assetPrefix, render = options.render, serverMiddleware = options.serverMiddleware, ip = options.ip;
var app = new koa_1.default();
var manifestPath = getManifestPath(process.cwd());
app.use(koa_mount_1.default('/services/ping', ping_1.ping));
app.use(logger_1.requestLogger);
app.use(metrics_1.metricsMiddleware);
app.use(sewing_kit_koa_1.middleware({ assetPrefix: assetPrefix, manifestPath: manifestPath }));
if (serverMiddleware) {
app.use(koa_compose_1.default(serverMiddleware));
}
app.use(render_1.createRender(render));
return app.listen(port || 3000, function () {
logger.log("started react-server on " + ip + ":" + port);
});
}
exports.createServer = createServer;
function getManifestPath(root) {
var gemFileExists = fs_extra_1.pathExistsSync(path_1.join(root, 'Gemfile'));
if (!gemFileExists) {
return;
}
// eslint-disable-next-line no-process-env
return process.env.NODE_ENV === 'development'
? "tmp/sewing-kit/sewing-kit-manifest.json"
: "public/bundles/sewing-kit-manifest.json";
}