72 lines
1.9 KiB
JavaScript
Raw Normal View History

2025-09-05 14:59:21 +08:00
import "#nitro-internal-pollyfills";
import { toPlainHandler } from "h3";
import { useNitroApp } from "nitropack/runtime";
import { toBuffer } from "nitropack/runtime/internal";
import { hasProtocol, joinURL } from "ufo";
const nitroApp = useNitroApp();
const _handler = toPlainHandler(nitroApp.h3App);
async function _handleEvent(event) {
try {
const res = await _handler({
path: event.request.url.pathname + (event.request.url.search ? `?${event.request.url.search}` : ""),
method: event.request.getMethod() || "GET",
body: event.request.body,
headers: event.request.headers,
context: {
waitUntil: (promise) => event.waitUntil(promise),
_platform: {
winterjs: {
event
}
}
}
});
const body = typeof res.body === "string" ? res.body : await toBuffer(res.body);
return new Response(body, {
status: res.status,
statusText: res.statusText,
headers: res.headers
});
} catch (error) {
const errString = error?.message + "\n" + error?.stack;
console.error(errString);
return new Response(errString, { status: 500 });
}
}
addEventListener("fetch", async (event) => {
event.respondWith(await _handleEvent(event));
});
if (!Headers.prototype.entries) {
Headers.prototype.entries = function() {
return [...this];
};
}
if (!URL.prototype.pathname) {
Object.defineProperty(URL.prototype, "pathname", {
get() {
return this.path || "/";
}
});
}
const _URL = globalThis.URL;
globalThis.URL = class URL2 extends _URL {
constructor(url, base) {
if (!base || hasProtocol(url)) {
super(url);
return;
}
super(joinURL(base, url));
}
};
const _Response = globalThis.Response;
globalThis.Response = class Response2 extends _Response {
_body;
constructor(body, init) {
super(body, init);
this._body = body;
}
get body() {
return this._body;
}
};