You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
2.3 KiB
49 lines
2.3 KiB
import { __assign } from "tslib"; |
|
import * as React from "rehackt"; |
|
import { getApolloContext } from "../context/index.js"; |
|
import { RenderPromises } from "./RenderPromises.js"; |
|
import { renderToStaticMarkup } from "react-dom/server"; |
|
export function getDataFromTree(tree, context) { |
|
if (context === void 0) { context = {}; } |
|
return getMarkupFromTree({ |
|
tree: tree, |
|
context: context, |
|
// If you need to configure this renderFunction, call getMarkupFromTree |
|
// directly instead of getDataFromTree. |
|
renderFunction: renderToStaticMarkup, |
|
}); |
|
} |
|
export function getMarkupFromTree(_a) { |
|
var tree = _a.tree, _b = _a.context, context = _b === void 0 ? {} : _b, |
|
// The rendering function is configurable! We use renderToStaticMarkup as |
|
// the default, because it's a little less expensive than renderToString, |
|
// and legacy usage of getDataFromTree ignores the return value anyway. |
|
_c = _a.renderFunction, |
|
// The rendering function is configurable! We use renderToStaticMarkup as |
|
// the default, because it's a little less expensive than renderToString, |
|
// and legacy usage of getDataFromTree ignores the return value anyway. |
|
renderFunction = _c === void 0 ? renderToStaticMarkup : _c; |
|
var renderPromises = new RenderPromises(); |
|
function process() { |
|
// Always re-render from the rootElement, even though it might seem |
|
// better to render the children of the component responsible for the |
|
// promise, because it is not possible to reconstruct the full context |
|
// of the original rendering (including all unknown context provider |
|
// elements) for a subtree of the original component tree. |
|
var ApolloContext = getApolloContext(); |
|
return new Promise(function (resolve) { |
|
var element = React.createElement(ApolloContext.Provider, { value: __assign(__assign({}, context), { renderPromises: renderPromises }) }, tree); |
|
resolve(renderFunction(element)); |
|
}) |
|
.then(function (html) { |
|
return renderPromises.hasPromises() ? |
|
renderPromises.consumeAndAwaitPromises().then(process) |
|
: html; |
|
}) |
|
.finally(function () { |
|
renderPromises.stop(); |
|
}); |
|
} |
|
return Promise.resolve().then(process); |
|
} |
|
//# sourceMappingURL=getDataFromTree.js.map
|