|
5 | 5 | */ |
6 | 6 |
|
7 | 7 | import * as net from "net"; |
| 8 | +import { Promise as bluebird } from "bluebird"; |
8 | 9 |
|
9 | | -const isPortAvailable = (port: number, host: string): Promise<void> => { |
| 10 | +const isPortAvailable = (port: number, host: string): Promise<void> => |
| 11 | + Promise.resolve(bluebird.each([host, "127.0.0.1", "localhost", "0.0.0.0"], h => |
| 12 | + portCheck(port, h) |
| 13 | + ) |
| 14 | + .then(() => Promise.resolve(undefined)) |
| 15 | + .catch(e => Promise.reject(e))); |
| 16 | + |
| 17 | +const portCheck = (port: number, host: string): Promise<void> => { |
10 | 18 | return new Promise((resolve, reject) => { |
11 | | - const server: any = net.createServer() |
| 19 | + const server: any = net |
| 20 | + .createServer() |
12 | 21 | .listen({ port, host, exclusive: true }) |
13 | | - .on("error", (e: any) => (e.code === "EADDRINUSE" ? reject(new Error(`Port ${port} is unavailable`)) : reject(e))) |
14 | | - .on("listening", () => server.once("close", () => resolve()).close()); |
| 22 | + .on("error", (e: any) => { |
| 23 | + if (e.code === "EADDRINUSE") { |
| 24 | + reject(new Error(`Port ${port} is unavailable`)) |
| 25 | + } else { |
| 26 | + reject(e); |
| 27 | + } |
| 28 | + }) |
| 29 | + .on("listening", () => { |
| 30 | + server.once("close", () => resolve()).close(); |
| 31 | + }); |
15 | 32 | }); |
16 | 33 | }; |
17 | 34 |
|
18 | | -export { |
19 | | - isPortAvailable, |
20 | | -}; |
| 35 | +export { isPortAvailable, portCheck }; |
0 commit comments