UNPKG

inventor-view-react-redux

Version:
150 lines (122 loc) 5.57 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _url = _interopRequireDefault(require("url")); var _react = _interopRequireDefault(require("react")); var _server = require("react-dom/server"); var _redux = require("redux"); var _HTML = _interopRequireDefault(require("./HTML")); var _Root = _interopRequireDefault(require("./Root")); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } var Engine = /*#__PURE__*/function () { function Engine(_ref) { var appPath = _ref.appPath, commonPath = _ref.commonPath, vendorPath = _ref.vendorPath; (0, _classCallCheck2["default"])(this, Engine); (0, _defineProperty2["default"])(this, "_appPath", ''); (0, _defineProperty2["default"])(this, "_commonPath", ''); (0, _defineProperty2["default"])(this, "_vendorPath", ''); this._appPath = appPath; this._commonPath = commonPath; this._vendorPath = vendorPath; } (0, _createClass2["default"])(Engine, [{ key: "render", value: function render(_ref2) { var appName = _ref2.appName, href = _ref2.href, viewConfig = _ref2.viewConfig, _ref2$initialState = _ref2.initialState, initialState = _ref2$initialState === void 0 ? {} : _ref2$initialState, _ref2$locals = _ref2.locals, locals = _ref2$locals === void 0 ? {} : _ref2$locals; var _this$renderApp = this.renderApp({ appName: appName, href: href, viewConfig: viewConfig, initialState: initialState, locals: locals }), html = _this$renderApp.html, state = _this$renderApp.state; var props = { ssr: viewConfig.ssr, locals: locals, initialState: state, appHTML: html, nodeEnv: process.env.NODE_ENV, appName: appName, appPath: this._appPath, commonPath: this._commonPath, vendorPath: this._vendorPath, publicHost: viewConfig.publicHost, rootDomId: _.get(viewConfig, 'rootDomId', '__APP__'), ignoreAssetHash: viewConfig.ignoreAssetHash }; var TargetHTML = viewConfig.HTML; if (!TargetHTML) { TargetHTML = _HTML["default"]; } var docHTML = (0, _server.renderToStaticMarkup)( /*#__PURE__*/_react["default"].createElement(TargetHTML, props)); docHTML = "<!DOCTYPE html>".concat(docHTML); return docHTML; } }, { key: "renderApp", value: function renderApp(_ref3) { var appName = _ref3.appName, href = _ref3.href, viewConfig = _ref3.viewConfig, _ref3$initialState = _ref3.initialState, initialState = _ref3$initialState === void 0 ? {} : _ref3$initialState, _ref3$locals = _ref3.locals, locals = _ref3$locals === void 0 ? {} : _ref3$locals; var html = ''; var state = initialState; var App = require("".concat(viewConfig.appPath, "/").concat(appName, "/App"))["default"]; var reducers = require("".concat(viewConfig.appPath, "/").concat(appName, "/redux"))["default"]; var urlObj = _url["default"].parse(href); var _router = { location: _.toPlainObject(urlObj) }; var _constants = _.get(locals, 'CONSTANTS', {}); var rootReducer = (0, _redux.combineReducers)(_objectSpread(_objectSpread({}, reducers), {}, { constants: function constants() { var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _constants; return state; }, router: function router() { var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _router; return state; } })); var store = (0, _redux.createStore)(rootReducer, initialState); var rootState = { App: App, store: store, context: {}, location: urlObj.pathname }; state = store.getState(); if (viewConfig.ssr) { html = (0, _server.renderToString)( /*#__PURE__*/_react["default"].createElement(_Root["default"], rootState)); } else { console.warn('ssr is not open, render just return empty string content.'); } return { html: html, state: state }; } }]); return Engine; }(); exports["default"] = Engine;