UNPKG

@shopify/react-server

Version:
48 lines (47 loc) 1.99 kB
"use strict"; 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"; }