61 lines
No EOL
1.3 KiB
JavaScript
61 lines
No EOL
1.3 KiB
JavaScript
import { r as wrapFetch, t as errorPlugin } from "../_chunks/_plugins.mjs";
|
|
|
|
//#region src/adapters/cloudflare.ts
|
|
const FastURL = URL;
|
|
const FastResponse = Response;
|
|
function serve(options) {
|
|
return new CloudflareServer(options);
|
|
}
|
|
var CloudflareServer = class {
|
|
runtime = "cloudflare";
|
|
options;
|
|
serveOptions;
|
|
fetch;
|
|
constructor(options) {
|
|
this.options = {
|
|
...options,
|
|
middleware: [...options.middleware || []]
|
|
};
|
|
for (const plugin of options.plugins || []) plugin(this);
|
|
errorPlugin(this);
|
|
const fetchHandler = wrapFetch(this);
|
|
this.fetch = (request, env, context) => {
|
|
Object.defineProperties(request, {
|
|
waitUntil: { value: context.waitUntil.bind(context) },
|
|
runtime: {
|
|
enumerable: true,
|
|
value: {
|
|
name: "cloudflare",
|
|
cloudflare: {
|
|
env,
|
|
context
|
|
}
|
|
}
|
|
},
|
|
ip: {
|
|
enumerable: true,
|
|
get() {
|
|
return request.headers.get("cf-connecting-ip");
|
|
}
|
|
}
|
|
});
|
|
return fetchHandler(request);
|
|
};
|
|
this.serveOptions = { fetch: this.fetch };
|
|
if (!options.manual) this.serve();
|
|
}
|
|
serve() {
|
|
addEventListener("fetch", (event) => {
|
|
event.respondWith(this.fetch(event.request, {}, event));
|
|
});
|
|
}
|
|
ready() {
|
|
return Promise.resolve().then(() => this);
|
|
}
|
|
close() {
|
|
return Promise.resolve();
|
|
}
|
|
};
|
|
|
|
//#endregion
|
|
export { FastResponse, FastURL, serve }; |