one
Version:
One is a new React Framework that makes Vite serve both native and web.
97 lines • 3.35 kB
JavaScript
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: !0
});
},
__copyProps = (to, from, except, desc) => {
if (from && typeof from == "object" || typeof from == "function") for (let key of __getOwnPropNames(from)) !__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: !0
}), mod);
var resolveResponse_exports = {};
__export(resolveResponse_exports, {
resolveAPIEndpoint: () => resolveAPIEndpoint,
resolveResponse: () => resolveResponse
});
module.exports = __toCommonJS(resolveResponse_exports);
var import_isResponse = require("../utils/isResponse.cjs"),
import_one_server_only = require("./one-server-only.cjs");
function resolveResponse(getResponse) {
return new Promise((res, rej) => {
(0, import_one_server_only.runWithAsyncLocalContext)(async id => {
try {
const response = await getResponse(),
modifiedResponse = await getResponseWithAddedHeaders(response, id);
res(modifiedResponse);
} catch (err) {
(0, import_isResponse.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 = import_one_server_only.asyncHeadersCache.get(id);
if (asyncHeaders) try {
response instanceof Response ? (0, import_one_server_only.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
}), (0, import_one_server_only.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;
}