Repository URL to install this package:
|
Version:
1.3.2 ▾
|
import net from 'net'
export type ResolvedPortReturn =
| [NodeJS.ErrnoException, undefined]
| [undefined, boolean]
export type PortReturnPromiseValue = NodeJS.ErrnoException | boolean
/**
* 1. listen for port
* 2. if already listening, return EADDRINUSE
* 3. if able to listen, stop listening, return true
*/
function isPortTaken(port: number | string): Promise<PortReturnPromiseValue> {
return new Promise(resolve => {
// want to return a boolean
const toResolved = (
array: ResolvedPortReturn
): Promise<PortReturnPromiseValue> => {
const value = array[0] === undefined ? array[1] : array[0]
resolve(value)
return Promise.resolve(value)
}
const tester = net
.createServer()
.once('error', (EADDRINUSE: NodeJS.ErrnoException) => {
if (EADDRINUSE.code !== 'EADDRINUSE') {
return toResolved([EADDRINUSE, undefined])
}
return toResolved([undefined, false])
})
.once('listening', () => {
/* prettier-ignore */
tester
.once('close', () => {
return toResolved([undefined, true])
})
.close()
})
.listen(port)
})
}
export { isPortTaken }
export default isPortTaken