rvx
Version:
A signal based rendering library
48 lines • 1.33 kB
JavaScript
import { ASYNC, AsyncContext } from "../async/async-context.js";
import { Context } from "../core/context.js";
import { ENV } from "../core/env.js";
import { capture } from "../core/lifecycle.js";
import { render } from "../core/view.js";
import { Node, WINDOW } from "./model.js";
function renderDetachedView(view) {
const { first, last } = view;
if (!(first instanceof Node)) {
throw new Error("root is not an rvx dom node");
}
if (first === last) {
return first.outerHTML;
}
else {
return first.parentNode.outerHTML;
}
}
export function renderToString(component, props) {
let html;
capture(() => {
ENV.inject(WINDOW, () => {
const view = render(component(props));
html = renderDetachedView(view);
});
})();
return html;
}
export async function renderToStringAsync(component, props) {
const asyncCtx = new AsyncContext();
let view;
const dispose = capture(() => {
Context.inject([
ENV.with(WINDOW),
ASYNC.with(asyncCtx),
], () => {
view = render(component(props));
});
});
try {
await asyncCtx.complete();
return renderDetachedView(view);
}
finally {
dispose();
}
}
//# sourceMappingURL=render.js.map