* @param {(req: http.IncomingMessage, res: http.ServerResponse) => void} handler
(handler)
| 160 | * @param {(req: http.IncomingMessage, res: http.ServerResponse) => void} handler |
| 161 | */ |
| 162 | async function start_server(handler) { |
| 163 | if (server) { |
| 164 | throw new Error('server already started'); |
| 165 | } |
| 166 | server = http.createServer(handler); |
| 167 | |
| 168 | await new Promise((fulfil) => { |
| 169 | server.listen(0, 'localhost', () => { |
| 170 | fulfil(undefined); |
| 171 | }); |
| 172 | }); |
| 173 | |
| 174 | const { port } = /** @type {import('net').AddressInfo} */ (server.address()); |
| 175 | if (!port) { |
| 176 | throw new Error(`Could not find port from server ${JSON.stringify(server.address())}`); |
| 177 | } |
| 178 | sockets = new Set(); |
| 179 | server.on('connection', (socket) => { |
| 180 | sockets.add(socket); |
| 181 | socket.on('close', () => { |
| 182 | sockets.delete(socket); |
| 183 | }); |
| 184 | }); |
| 185 | return { |
| 186 | port |
| 187 | }; |
| 188 | } |
| 189 | await use(start_server); |
| 190 | |
| 191 | // @ts-expect-error use before set |
no outgoing calls
no test coverage detected