UNPKG

@leafage/renderer

Version:

The React Server Side Render Framework

118 lines (114 loc) 4.3 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 */ '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;