inventor-view-react-redux
Version:
150 lines (122 loc) • 5.57 kB
JavaScript
;
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;