UNPKG

@toolpad/utils

Version:

Shared utilities used by Toolpad packages.

35 lines (34 loc) 883 B
import * as http from 'http'; import invariant from 'invariant'; /** * A Promise wrapper for server.listen */ export async function listen(handler, port) { const server = typeof handler === 'function' ? http.createServer(handler) : handler; let app; await new Promise((resolve, reject) => { app = server.listen(port); app.once('listening', resolve); app.once('error', reject); }); const address = app?.address(); invariant(address && typeof address === 'object', 'expected address to be an AddressInfo object'); return { port: address.port, async close() { await new Promise((resolve, reject) => { if (app) { app.close(err => { if (err) { reject(err); } else { resolve(); } }); } else { resolve(); } }); } }; }