@leafage/renderer
Version:
The React Server Side Render Framework
118 lines (114 loc) • 4.3 kB
JavaScript
/**
* @leafage/renderer v1.3.2
*
* Copyright (c) Leafage.
*
* This source code is licensed under the MIT license found in the
* LICENSE.md file in the root directory of this source tree.
*
* @license MIT
*/
'use strict';
var _rollupPluginBabelHelpers = require('../_virtual/_rollupPluginBabelHelpers.js');
var devalue = require('devalue');
var React = require('react');
var server = require('react-dom/server');
var component = require('@leafage/component');
var toolkit = require('@leafage/toolkit');
var _excluded = ["defer"];
var genScripts = function genScripts(resource) {
return function (_ref) {
var _ref$defer = _ref.defer,
defer = _ref$defer === void 0 ? true : _ref$defer,
props = _rollupPluginBabelHelpers.objectWithoutProperties(_ref, _excluded);
return resource.scripts.map(function (src) {
return /*#__PURE__*/React.createElement("script", _rollupPluginBabelHelpers.extends({
src: src,
key: src,
type: "text/javascript",
defer: defer
}, props));
});
};
};
var genLinks = function genLinks(resource) {
return function (props) {
return resource.styles.map(function (href) {
return /*#__PURE__*/React.createElement("link", _rollupPluginBabelHelpers.extends({
href: href,
key: href,
rel: "stylesheet"
}, props));
});
};
};
var getRenderContext = function getRenderContext(props, options) {
var _Object$keys;
return /*#__PURE__*/React.createElement(component.RenderJudge, {
value: (_Object$keys = Object.keys(props || {})) === null || _Object$keys === void 0 ? void 0 : _Object$keys.length,
active: /*#__PURE__*/React.createElement("script", {
type: "text/javascript"
// eslint-disable-next-line react/no-danger
,
dangerouslySetInnerHTML: {
__html: "".concat(options.globals.context, "=").concat(devalue.uneval(props))
}
})
});
};
var renderPreset = function renderPreset(ctx) {
ctx.render = /*#__PURE__*/function () {
var _ref2 = _rollupPluginBabelHelpers.asyncToGenerator(/*#__PURE__*/_rollupPluginBabelHelpers.regenerator().m(function _callee(view, props) {
var resource, _yield$imports$import, Document, _yield$imports$import2, App, _yield$imports$import3, Component, body, helmet, content;
return _rollupPluginBabelHelpers.regenerator().w(function (_context) {
while (1) switch (_context.n) {
case 0:
resource = ctx.findResource(view);
if (resource) {
_context.n = 1;
break;
}
return _context.a(2);
case 1:
_context.n = 2;
return toolkit.imports.importServerModule('Document', ctx.options);
case 2:
_yield$imports$import = _context.v;
Document = _yield$imports$import.Component;
_context.n = 3;
return toolkit.imports.importServerModule('App', ctx.options);
case 3:
_yield$imports$import2 = _context.v;
App = _yield$imports$import2.Component;
_context.n = 4;
return toolkit.imports.importServerModule(resource.view, ctx.options);
case 4:
_yield$imports$import3 = _context.v;
Component = _yield$imports$import3.Component;
// render body
body = server.renderToString(/*#__PURE__*/React.createElement(App, {
Component: Component,
props: props
})); // helmet
helmet = component.Helmet.renderStatic(); // render content
content = server.renderToStaticMarkup(/*#__PURE__*/React.createElement(Document, {
Scripts: genScripts(resource),
Links: genLinks(resource),
helmet: helmet,
context: getRenderContext(props, ctx.options)
}, /*#__PURE__*/React.createElement("div", {
id: ctx.options.globals.id,
dangerouslySetInnerHTML: {
__html: body
}
})));
return _context.a(2, "<!doctype html>".concat(content));
}
}, _callee);
}));
return function (_x, _x2) {
return _ref2.apply(this, arguments);
};
}();
};
exports.renderPreset = renderPreset;