Add Web Worker Platform Adapter && Fix module path bug

This commit is contained in:
2022-06-29 20:00:52 +00:00
committed by GitHub
parent bdbb5deda9
commit b3552cb6a2
17 changed files with 4765 additions and 56 deletions

View File

@ -1 +1,9 @@
export { NodePlatformAdapter } from "./node";
import { NodePlatformAdapter } from "./node";
import { SWPlatformAdapter } from "./serviceworker";
export const platformAdapaterMapping = {
"Node.js": NodePlatformAdapter,
"Web Worker": SWPlatformAdapter,
};
export { NodePlatformAdapter, SWPlatformAdapter };

View File

@ -5,7 +5,7 @@ export interface platformAdapater<T = any, K = any> {
router: router<T, K>;
listen(port: number): void;
handleRequest(nativeRequest: any): Promise<request<T>>;
handleResponse(response: response<K>, nativeResponse?: any): any;
handleResponse(response: response<K> | Promise<response<K>>, nativeResponse?: any): any;
}
export interface platformAdapaterConstructor<T = any, K = any> {

View File

@ -1,6 +1,6 @@
import { platformAdapater } from ".";
import { platformAdapater } from "./index";
import { request, response } from "../interface";
import { router } from "../../";
import { router } from "../router";
import { headers } from "../interface/headers";
import http from "http";
@ -10,7 +10,6 @@ export class NodePlatformAdapter<T = any, K = any> implements platformAdapater {
constructor(router: router<T, K>) {
this.router = router;
return this;
}
async listen(port: number): Promise<void> {

View File

@ -0,0 +1,50 @@
import { platformAdapater } from "./index";
import { request } from "../interface/request";
import { response } from "../interface/response";
import { router } from "../router";
import { headers } from "../interface/headers";
export class SWPlatformAdapter<T = any, K = any> implements platformAdapater {
public router: router<T, K>;
constructor(router: router<T, K>) {
this.router = router;
}
async listen(_port?: number): Promise<void> {
self.addEventListener("fetch", (event: FetchEvent) => {
event.respondWith(this.handler(event));
});
}
async handleRequest(nativeRequest: Request): Promise<request<T>> {
const requestHeaders = new headers(
Object.fromEntries(nativeRequest.headers.entries())
);
const requestMessage: request<T> = new request(
nativeRequest.method,
new URL(nativeRequest.url),
requestHeaders,
await nativeRequest.text(),
{},
requestHeaders.get("CF-Connecting-IP") || ""
);
return requestMessage;
}
async handleResponse(response: response<K>): Promise<Response> {
const nativResponse = new Response(response.body, {
status: response.status,
headers: response.headers.headers,
});
return nativResponse;
}
async handler(event: FetchEvent): Promise<Response> {
return await this.handleResponse(
await this.handleRequest(event.request).then((request) =>
this.router.respond(request)
)
)
}
}