37 lines
971 B
JavaScript
37 lines
971 B
JavaScript
'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'
|
|
}
|