UNPKG

one

Version:

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

126 lines 3.97 kB
var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var resolveResponse_exports = {}; __export(resolveResponse_exports, { resolveAPIEndpoint: () => resolveAPIEndpoint, resolveResponse: () => resolveResponse, withRequestContext: () => withRequestContext }); module.exports = __toCommonJS(resolveResponse_exports); var import_isResponse = require("../utils/isResponse.cjs"); var import_one_server_only = require("./one-server-only.cjs"); let _nextId = 1; function createId() { return { _id: _nextId++ }; } async function resolveResponse(getResponse) { const store = import_one_server_only.requestAsyncLocalStore ?? globalThis["__vxrnrequestAsyncLocalStore"]; if (store) { const id = createId(); let response; await store.run(id, async () => { try { response = await getResponse(); response = await getResponseWithAddedHeaders(response, id); } catch (err) { if ((0, import_isResponse.isResponse)(err)) { response = err; } else { throw err; } } }); return response; } return (0, import_one_server_only.runWithAsyncLocalContext)(async id => { try { const response = await getResponse(); return await getResponseWithAddedHeaders(response, id); } catch (err) { if ((0, import_isResponse.isResponse)(err)) { return err; } throw err; } }); } function withRequestContext(fn) { const store = import_one_server_only.requestAsyncLocalStore; if (store) { const id = createId(); return store.run(id, fn); } return fn(); } function resolveAPIEndpoint(runEndpoint, request, params) { return resolveResponse(async () => { const imported = await runEndpoint(); const requestType = request.method || "GET"; const 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 cache = globalThis["__vxrnasyncHeadersCache"] ?? import_one_server_only.asyncHeadersCache; const asyncHeaders = cache.get(id); if (asyncHeaders) { try { if (response instanceof Response) { const cloned = response.clone(); const headers = new Headers(); (0, import_one_server_only.mergeHeaders)(headers, cloned.headers); (0, import_one_server_only.mergeHeaders)(headers, asyncHeaders); response = new Response(cloned.body, { status: cloned.status, statusText: cloned.statusText, headers }); } else { if (response && typeof response === "object") { response = Response.json(response, { headers: asyncHeaders }); } else { const headers = new Headers(asyncHeaders); if (!headers.has("content-type")) { headers.set("content-type", "text/html"); } response = new Response(response, { headers }); } } } catch (err) { console.error(` [one] error adding headers: ${err}`); } } return response; }