@speedy-js/depcost
Version:
[](https://npm.im/@speedy-js/depcost)
50 lines (42 loc) • 1.19 kB
JavaScript
const cors = require('cors')
const express = require('express')
const generateReportHTML = require('./html')
const DEFAULT_PORT = 8888
module.exports = class VisualizationServer {
constructor({
results,
} = {}) {
this.results = results
}
async listen(port, host, callback) {
const availblePort = await require('detect-port')(DEFAULT_PORT)
if (DEFAULT_PORT !== availblePort) {
console.log(`${DEFAULT_PORT} 已被占用,默认端口变更为 ${availblePort}`)
}
port = port ? Number(port) : availblePort
port = port || DEFAULT_PORT
host = host || '127.0.0.1'
this.app.listen(port, host, () => {
const url = `http://${host}:${port}`
console.log()
console.info(`Visualization Server is listening on ${url}\n`)
callback && callback(url)
})
}
async destroy() {
await new Promise((resolve, reject) => {
this.server.close(err => (err ? reject(err) : resolve()))
})
this.server = null
}
bootstrap() {
if (this.app) {
return
}
this.app = express()
this.app.use(cors())
this.app.get('/', (req, res) => {
res.send(generateReportHTML(this.results))
})
}
}