UNPKG

@leafage/renderer

Version:

The React Server Side Render Framework

116 lines (113 loc) 4.21 kB
/** * @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 };