@shopify/react-server
Version:
Utilities for React server-side rendering
63 lines (56 loc) • 2.21 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
require('cross-fetch');
var Koa = require('koa');
var compose = require('koa-compose');
var mount = require('koa-mount');
var ping = require('../ping/ping.js');
var logger$1 = require('../logger/logger.js');
var metrics = require('../metrics/metrics.js');
var render = require('../render/render.js');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var Koa__default = /*#__PURE__*/_interopDefaultLegacy(Koa);
var compose__default = /*#__PURE__*/_interopDefaultLegacy(compose);
var mount__default = /*#__PURE__*/_interopDefaultLegacy(mount);
const 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) {
const {
/* eslint-disable no-process-env */
ip = process.env.REACT_SERVER_IP && process.env.REACT_SERVER_IP !== 'undefined' ? process.env.REACT_SERVER_IP : '0.0.0.0',
port = process.env.REACT_SERVER_PORT && process.env.REACT_SERVER_PORT !== 'undefined' ? parseInt(process.env.REACT_SERVER_PORT, 10) : 8081,
// a default is set in sewingKitMiddleware
assetPrefix = process.env.CDN_URL && process.env.CDN_URL !== 'undefined' ? process.env.CDN_URL : undefined,
render: render$1,
renderError,
renderRawErrorMessage = process.env.NODE_ENV === 'development',
/* eslint-enable no-process-env */
serverMiddleware,
assetName,
htmlProps,
proxy = false,
app = new Koa__default["default"]()
} = options;
app.proxy = proxy;
app.use(mount__default["default"]('/services/ping', ping.ping));
app.use(logger$1.requestLogger);
app.use(metrics.metricsMiddleware);
if (serverMiddleware) {
app.use(compose__default["default"](serverMiddleware));
}
app.use(render.createRender(render$1, {
assetPrefix,
assetName,
renderError,
renderRawErrorMessage,
htmlProps
}));
return app.listen(port, ip, () => {
logger.log(`started react-server on ${ip}:${port}`);
});
}
exports.createServer = createServer;