UNPKG

1.5 kBJavaScriptView Raw
1const path = require('path')
2const http = require('http')
3
4const cwd = process.cwd()
5
6function req (file) {
7 let mod = null
8
9 try {
10 mod = require(file)
11 mod = mod.default || mod
12 } catch (e) {}
13
14 return mod
15}
16
17module.exports = function createServer ({ file, port }) {
18 let active = false
19
20 const serverProps = require(path.join(cwd, '.rola', 'props.js'))
21
22 return {
23 server: null,
24 app: null,
25 get active () {
26 return active
27 },
28 update () {
29 try {
30 delete require.cache[file]
31 } catch (e) {}
32 this.app = req(file)
33 this.socket && this.socket.emit('update')
34 },
35 init () {
36 this.app = req(file)
37
38 this.server = http.createServer(
39 require('connect')()
40 .use(require('compression')())
41 .use(require('serve-static')(path.join(cwd, 'build/assets')))
42 .use((req, res, next) => {
43 if (!this.app) return next()
44 this.app(req, res, next, serverProps)
45 })
46 .use((req, res) => {
47 res.writeHead(404, {
48 'Content-Type': 'text/plain'
49 })
50 res.write('rola')
51 res.end()
52 })
53 )
54
55 this.socket = require('socket.io')(this.server, {
56 serveClient: false
57 })
58
59 this.server.listen(port, e => {
60 if (e) return console.log(e)
61 active = true
62 })
63 },
64 close () {
65 this.server && this.server.close()
66 this.socket && this.socket.close()
67 }
68 }
69}