@saber2pr/react
Version:
react in Typescript.
69 lines (68 loc) • 2.57 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
/*
* @Author: saber2pr
* @Date: 2019-12-07 22:09:45
* @Last Modified by: saber2pr
* @Last Modified time: 2019-12-08 12:17:36
*/
var ReactIs_1 = require("../../react-is/ReactIs");
var ReactChildren_1 = require("../../react/ReactChildren");
var toLowerCase = function (value) {
return value.replace(/\B([A-Z])/g, "-$1").toLowerCase();
};
var toArray = function (element) { return ReactChildren_1.Children.toArray(element); };
function createNode(element) {
var props = element.props;
var style = props.style;
if (style) {
props.style = Object.entries(style).reduce(function (receiver, _a) {
var k = _a[0], v = _a[1];
return receiver.concat(toLowerCase(k) + ":" + v + ";");
}, "");
}
return __assign(__assign({}, element), { props: props });
}
function renderToString(element) {
if (ReactIs_1.isTextFiber(element)) {
var nodeValue = element.props.nodeValue;
return nodeValue;
}
if (ReactIs_1.isHostFiber(element)) {
var _a = createNode(element), tag = _a.tag, props = _a.props;
var attr = Object.entries(props).reduce(function (receiver, _a) {
var k = _a[0], v = _a[1];
if (typeof v !== "string") {
return receiver;
}
if (k === "className") {
k = "class";
}
return receiver.concat(" " + k + "=\"" + v + "\"");
}, "");
var children = toArray(props.children);
return "<" + tag + attr + ">" + children.map(renderToString).join("") + "</" + tag + ">";
}
if (ReactIs_1.isFragmentFiber(element)) {
var props = element.props;
var children = toArray(props.children);
return children.map(renderToString).join("");
}
if (ReactIs_1.isHookFiber(element)) {
var constructor = element.tag, props = element.props;
var children = toArray(constructor(props));
return children.map(renderToString).join("");
}
}
exports.renderToString = renderToString;