UNPKG

@saber2pr/react

Version:

react in Typescript.

69 lines (68 loc) 2.57 kB
"use strict"; 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;