@leafage/renderer
Version:
The React Server Side Render Framework
116 lines (113 loc) • 4.21 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
*/
import { asyncToGenerator as _asyncToGenerator, regenerator as _regenerator, extends as _extends, objectWithoutProperties as _objectWithoutProperties } from '../_virtual/_rollupPluginBabelHelpers.js';
import { uneval } from 'devalue';
import React from 'react';
import { renderToString, renderToStaticMarkup } from 'react-dom/server';
import { Helmet, RenderJudge } from '@leafage/component';
import { imports } from '@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 = _objectWithoutProperties(_ref, _excluded);
return resource.scripts.map(function (src) {
return /*#__PURE__*/React.createElement("script", _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", _extends({
href: href,
key: href,
rel: "stylesheet"
}, props));
});
};
};
var getRenderContext = function getRenderContext(props, options) {
var _Object$keys;
return /*#__PURE__*/React.createElement(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(uneval(props))
}
})
});
};
var renderPreset = function renderPreset(ctx) {
ctx.render = /*#__PURE__*/function () {
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(view, props) {
var resource, _yield$imports$import, Document, _yield$imports$import2, App, _yield$imports$import3, Component, body, helmet, content;
return _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 imports.importServerModule('Document', ctx.options);
case 2:
_yield$imports$import = _context.v;
Document = _yield$imports$import.Component;
_context.n = 3;
return imports.importServerModule('App', ctx.options);
case 3:
_yield$imports$import2 = _context.v;
App = _yield$imports$import2.Component;
_context.n = 4;
return imports.importServerModule(resource.view, ctx.options);
case 4:
_yield$imports$import3 = _context.v;
Component = _yield$imports$import3.Component;
// render body
body = renderToString(/*#__PURE__*/React.createElement(App, {
Component: Component,
props: props
})); // helmet
helmet = Helmet.renderStatic(); // render content
content = 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);
};
}();
};
export { renderPreset };