| 114 | } |
| 115 | |
| 116 | async respond(response: Response) { |
| 117 | if (this.#responded) { |
| 118 | throw new Error("Requested already responded to."); |
| 119 | } |
| 120 | for (const [key, value] of response.headers) { |
| 121 | this.#response.setHeader(key, value); |
| 122 | } |
| 123 | this.#response.writeHead(response.status, response.statusText); |
| 124 | if (response.body) { |
| 125 | for await (const chunk of response.body) { |
| 126 | const { promise, resolve, reject } = createPromiseWithResolvers<void>(); |
| 127 | // deno-lint-ignore no-explicit-any |
| 128 | this.#response.write(chunk, (err: any) => { |
| 129 | if (err) { |
| 130 | reject(err); |
| 131 | } else { |
| 132 | resolve(); |
| 133 | } |
| 134 | }); |
| 135 | await promise; |
| 136 | } |
| 137 | } |
| 138 | const { promise, resolve } = createPromiseWithResolvers<void>(); |
| 139 | this.#response.end(resolve); |
| 140 | await promise; |
| 141 | this.#responded = true; |
| 142 | } |
| 143 | } |
| 144 | |
| 145 | export class Server implements OakServer<NodeRequest> { |