'use strict' const connect = require('gulp-connect') const os = require('os') const ANY_HOST = '0.0.0.0' const URL_RX = /(https?):\/\/(?:[^/: ]+)(:\d+)?/ module.exports = (root, opts = {}, watch = undefined) => (done) => { connect.server({ ...opts, middleware: opts.host === ANY_HOST ? decorateLog : undefined, root }, function () { this.server.on('close', done) if (watch) watch() }) } function decorateLog (_, app) { const _log = app.log app.log = (msg) => { if (msg.startsWith('Server started ')) { const localIp = getLocalIp() const replacement = '$1://localhost$2' + (localIp ? ` and $1://${localIp}$2` : '') msg = msg.replace(URL_RX, replacement) } _log(msg) } return [] } function getLocalIp () { for (const records of Object.values(os.networkInterfaces())) { for (const record of records) { if (!record.internal && record.family === 'IPv4') return record.address } } return 'localhost' }