one
Version:
One is a React framework for web, iOS, and Android apps.
117 lines (114 loc) • 3.27 kB
JavaScript
import { isResponse } from "../utils/isResponse.native.js";
import { asyncHeadersCache, mergeHeaders, requestAsyncLocalStore, runWithAsyncLocalContext } from "./one-server-only.native.js";
var _nextId = 1;
function createId() {
return { _id: _nextId++ };
}
async function resolveResponse(getResponse) {
var store = requestAsyncLocalStore !== null && requestAsyncLocalStore !== void 0 ? requestAsyncLocalStore : globalThis["__vxrnrequestAsyncLocalStore"];
if (store) {
var id = createId();
var response;
await store.run(id, async function() {
try {
response = await getResponse();
response = await getResponseWithAddedHeaders(response, id);
} catch (err) {
if (isResponse(err)) {
response = err;
} else {
throw err;
}
}
});
return response;
}
return runWithAsyncLocalContext(async function(id2) {
try {
var response2 = await getResponse();
return await getResponseWithAddedHeaders(response2, id2);
} catch (err) {
if (isResponse(err)) {
return err;
}
throw err;
}
});
}
function withRequestContext(fn) {
var store = requestAsyncLocalStore;
if (store) {
var id = createId();
return store.run(id, fn);
}
return fn();
}
function resolveAPIEndpoint(runEndpoint, request, params, env, executionCtx) {
return resolveResponse(async function() {
var imported = await runEndpoint();
var requestType = request.method || "GET";
var handler = imported[requestType] || imported.default;
if (!handler) {
var allowedMethods = [
"GET",
"HEAD",
"POST",
"PUT",
"DELETE",
"CONNECT",
"OPTIONS",
"TRACE",
"PATCH"
].filter(function(method) {
return typeof imported[method] === "function";
}).join(", ");
return new Response(null, {
status: 405,
headers: { Allow: allowedMethods }
});
}
var worker = env !== void 0 || executionCtx !== void 0 ? {
env,
executionCtx
} : void 0;
return await handler(request, {
params,
worker
});
});
}
async function getResponseWithAddedHeaders(response, id) {
var _globalThis___vxrnasyncHeadersCache;
var cache = (_globalThis___vxrnasyncHeadersCache = globalThis["__vxrnasyncHeadersCache"]) !== null && _globalThis___vxrnasyncHeadersCache !== void 0 ? _globalThis___vxrnasyncHeadersCache : asyncHeadersCache;
var asyncHeaders = cache.get(id);
if (asyncHeaders) {
try {
if (response instanceof Response) {
var cloned = response.clone();
var headers = new Headers();
mergeHeaders(headers, cloned.headers);
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 {
var headers1 = new Headers(asyncHeaders);
if (!headers1.has("content-type")) {
headers1.set("content-type", "text/html");
}
response = new Response(response, { headers: headers1 });
}
}
} catch (err) {
console.error(` [one] error adding headers: ${err}`);
}
}
return response;
}
export { resolveAPIEndpoint, resolveResponse, withRequestContext };
//# sourceMappingURL=resolveResponse.native.js.map