one
Version:
One is a new React Framework that makes Vite serve both native and web.
47 lines (46 loc) • 1.75 kB
JavaScript
import ReactDOMServer from "react-dom/server.browser";
var renderToString = async function (app, options) {
var _options_deferredPreloads,
readableStream = await ReactDOMServer.renderToReadableStream(app, {
// Only pass critical scripts to bootstrapModules
// These generate both modulepreload links AND async script tags
bootstrapModules: options.preloads
});
await readableStream.allReady;
var out = await streamToString(readableStream);
if (!((_options_deferredPreloads = options.deferredPreloads) === null || _options_deferredPreloads === void 0) && _options_deferredPreloads.length) {
var modulepreloadLinks = options.deferredPreloads.map(function (src) {
return `<link rel="modulepreload" fetchPriority="low" href="${src}"/>`;
}).join("");
out = out.replace("</head>", `${modulepreloadLinks}</head>`);
}
return out;
};
async function streamToString(stream) {
var decoder = new TextDecoder("utf-8", {
fatal: !0
}),
result = "",
_iteratorNormalCompletion = !0,
_didIteratorError = !1,
_iteratorError = void 0;
try {
for (var _iterator = stream[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
var chunk = _step.value;
result += decoder.decode(chunk, {
stream: !0
});
}
} catch (err) {
_didIteratorError = !0, _iteratorError = err;
} finally {
try {
!_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
} finally {
if (_didIteratorError) throw _iteratorError;
}
}
return result += decoder.decode(), result;
}
export { renderToString };
//# sourceMappingURL=server-render.native.js.map