@tanstack/router-core
Version:
Modern and scalable routing for React applications
49 lines (48 loc) • 1.5 kB
JavaScript
//#region src/ssr/handlerCallback.ts
function isSsrResponse(value) {
return typeof value === "object" && value !== null && "response" in value && "serverSsrCleanup" in value;
}
function normalizeSsrResponse(result) {
return isSsrResponse(result) ? result : {
response: result,
serverSsrCleanup: "none"
};
}
function createSsrStreamResponse(router, response) {
if (!response.body) throw new Error("Invariant failed: SSR stream response requires a body");
let disposed = false;
return {
response,
serverSsrCleanup: "stream",
async dispose(reason) {
if (disposed) return;
disposed = true;
try {
await response.body.cancel(reason);
} catch {}
router.serverSsr?.cleanup();
}
};
}
async function replaceSsrResponse(result, response, reason) {
const ssrResponse = normalizeSsrResponse(result);
if (ssrResponse.serverSsrCleanup === "stream") await ssrResponse.dispose(reason);
return {
response,
serverSsrCleanup: "none"
};
}
async function stripSsrResponseBody(result, reason) {
const ssrResponse = normalizeSsrResponse(result);
if (ssrResponse.serverSsrCleanup === "stream") await ssrResponse.dispose(reason);
return {
response: new Response(null, ssrResponse.response),
serverSsrCleanup: "none"
};
}
function defineHandlerCallback(handler) {
return handler;
}
//#endregion
export { createSsrStreamResponse, defineHandlerCallback, isSsrResponse, normalizeSsrResponse, replaceSsrResponse, stripSsrResponseBody };
//# sourceMappingURL=handlerCallback.js.map