UNPKG

react-cornerstone

Version:

A starter kit to form the cornerstones of your React+Redux+Express universal app

64 lines (46 loc) 2.22 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _server = require('react-dom/server'); var _reactRedux = require('react-redux'); var _reduxFirstRouter = require('redux-first-router'); var _HttpError = require('./HttpError'); var _HttpError2 = _interopRequireDefault(_HttpError); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function configureMiddleware(configureStore, createRoutesConfig, Component, template, _ref) { var getInitialState = _ref.getInitialState, getHelpers = _ref.getHelpers; return async function (req, res, next) { try { var initialState = getInitialState ? await getInitialState(req) : {}; var helpers = getHelpers ? getHelpers(req) : {}; var routesConfig = _extends({}, createRoutesConfig(helpers), { initialEntries: [req.url] }); var _configureStore = configureStore(false, routesConfig, initialState, req), store = _configureStore.store, thunk = _configureStore.thunk; await thunk(store); var _store$getState$locat = store.getState().location, type = _store$getState$locat.type, kind = _store$getState$locat.kind, pathname = _store$getState$locat.pathname, search = _store$getState$locat.search; var status = 200; if (type === _reduxFirstRouter.NOT_FOUND) status = 404;else if (kind === 'redirect') return res.redirect(302, search ? pathname + '?' + search : pathname); var html = (0, _server.renderToString)(_react2.default.createElement( _reactRedux.Provider, { store: store }, _react2.default.createElement(Component, null) )); res.status(status).send(template(html, store.getState())); } catch (err) { next(err); } }; } exports.default = configureMiddleware;