react-torch
Version:
A lib to server-side render with react.
72 lines (71 loc) • 4.04 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var react_1 = __importDefault(require("react"));
var htmlescape_1 = require("../utils/htmlescape");
function createDocument(_a) {
var dir = _a.dir, title = _a.title, context = _a.context, container = _a.container, element = _a.element, cdn = _a.cdn, assets = _a.assets, state = _a.state, mode = _a.mode, _b = _a.styles, styles = _b === void 0 ? [] : _b, _c = _a.scripts, scripts = _c === void 0 ? [] : _c, stateList = _a.stateList;
var data = {
context: context,
container: container,
state: state,
};
var styleElements = styles.map(getStyle);
var scriptElements = scripts.map(getScript);
var assetsScriptElement = [
getSrcScript("" + cdn + assets.vendor, 'vendor'),
getSrcScript("" + cdn + assets.index, 'index'),
];
return (react_1.default.createElement("html", null,
react_1.default.createElement("head", null,
react_1.default.createElement("title", null, title),
react_1.default.createElement("meta", { charSet: "utf-8" }),
react_1.default.createElement("meta", { httpEquiv: "X-UA-Compatible", content: "IE=edge" }),
react_1.default.createElement("meta", { name: "viewport", content: "width=device-width,initial-scale=1.0" }),
styleElements,
scriptElements),
react_1.default.createElement("body", null,
react_1.default.createElement("noscript", null,
react_1.default.createElement("strong", null,
"We're sorry but ",
title,
" doesn't work properly without JavaScript enabled.You need to enable JavaScript to run this app.")),
react_1.default.createElement("div", { id: "" + container }, element),
react_1.default.createElement("script", { id: "__TORCH_DATA__", type: "application/json", dangerouslySetInnerHTML: {
__html: (0, htmlescape_1.htmlEscapeJsonStringify)(data),
} }),
react_1.default.createElement("script", { type: "application/javascript", dangerouslySetInnerHTML: {
__html: (0, htmlescape_1.htmlEscapeJsonStringify)("\n (function() {\n window.__DEV__ = " + (context.env === 'development') + "\n })()\n "),
} }),
react_1.default.createElement("script", { type: "application/javascript", dangerouslySetInnerHTML: {
__html: (0, htmlescape_1.htmlEscapeJsonStringify)("\n (function() {\n window.__MODEL_STATE_LIST__ = " + JSON.stringify(stateList) + "\n })()\n "),
} }),
assetsScriptElement)));
}
exports.default = createDocument;
function getStyle(style, index) {
return style.type === 'link'
? getStyleLink(style.href, index)
: getInnerStyle(style.content, index);
}
function getInnerStyle(content, key) {
return (react_1.default.createElement("style", { key: key, type: "text/css", dangerouslySetInnerHTML: { __html: (0, htmlescape_1.htmlEscapeJsonStringify)(content) } }));
}
function getStyleLink(href, key) {
return react_1.default.createElement("link", { key: key, rel: "stylesheet", type: "text/css", href: href });
}
function getScript(script, key) {
return script.type == 'inner'
? getInnerScript(script.content, key)
: getSrcScript(script.src, key);
}
function getSrcScript(src, key) {
return react_1.default.createElement("script", { key: key, src: src, type: "application/javascript" });
}
function getInnerScript(content, key) {
return (react_1.default.createElement("script", { key: key, type: "application/javascript", dangerouslySetInnerHTML: {
__html: (0, htmlescape_1.htmlEscapeJsonStringify)(content),
} }));
}