import { IncomingMessage } from 'http'
import { Socket } from 'net'
export async function requestToIncomingMessage(webRequest: Request) {
const { method, headers, url, body } = webRequest
const socket = new Socket()
const incoming = new IncomingMessage(socket)
incoming.method = method
incoming.url = new URL(url).pathname + new URL(url).search
incoming.headers = Object.fromEntries(headers.entries())
if (body) {
const reader = body.getReader()
;(async () => {
try {
while (true) {
const { done, value } = await reader.read()
if (done) break
incoming.push(value)
}
} catch (err) {
incoming.destroy(err as Error)
return
}
incoming.push(null)
})()
} else {
incoming.push(null)
}
return incoming
}
export async function responseToServerResponse(
response: Response,
) {
const serverResponse = new ServerResponse({} as IncomingMessage)
serverResponse.statusCode = response.status
serverResponse.statusMessage = response.statusText
response.headers.forEach((value, key) => {
serverResponse.setHeader(key, value)
})
const body = await response.arrayBuffer()
serverResponse.end(body)
return serverResponse
}