UNPKG

one

Version:

One is a new React Framework that makes Vite serve both native and web.

64 lines (63 loc) 2.28 kB
import { isResponse } from "../utils/isResponse"; import { asyncHeadersCache, mergeHeaders, runWithAsyncLocalContext } from "./one-server-only"; function resolveResponse(getResponse) { return new Promise((res, rej) => { runWithAsyncLocalContext(async (id) => { try { const response = await getResponse(), modifiedResponse = await getResponseWithAddedHeaders(response, id); res(modifiedResponse); } catch (err) { isResponse(err) ? res(err) : rej(err); } }); }); } function resolveAPIEndpoint(runEndpoint, request, params) { return resolveResponse(async () => { const imported = await runEndpoint(), requestType = request.method || "GET", handler = imported[requestType] || imported.default; if (!handler) { console.warn(`No handler found for request ${requestType}`); return; } return await handler(request, { params }); }); } async function getResponseWithAddedHeaders(response, id) { const asyncHeaders = asyncHeadersCache.get(id); if (asyncHeaders) try { response instanceof Response ? mergeHeaders(response.headers, asyncHeaders) : response && typeof response == "object" ? response = Response.json(response, { headers: asyncHeaders }) : response = new Response(response, { headers: asyncHeaders }); } catch (err) { if (`${err}`.includes("immutable")) { const body = response.body ? await streamToString(response.body) : ""; response = new Response(body, { headers: response.headers, status: response.status, statusText: response.statusText }), mergeHeaders(response.headers, asyncHeaders); } else console.error(` [one] error adding headers: ${err}`); } return response; } async function streamToString(stream) { const reader = stream.getReader(), decoder = new TextDecoder(); let result = ""; try { for (; ; ) { const { done, value } = await reader.read(); if (done) break; result += decoder.decode(value, { stream: !0 }); } } catch (error) { console.error("Error reading the stream:", error); } finally { reader.releaseLock(); } return result; } export { resolveAPIEndpoint, resolveResponse }; //# sourceMappingURL=resolveResponse.js.map