UNPKG

2.01 kBJavaScriptView Raw
1const h = require('hub.js')
2const getFn = require('./util/get-fn')
3const getCwd = require('./util/get-cwd')
4const findPort = require('./util/find-port')
5const getIp = require('./util/get-ip')
6
7const inject = [
8 require('./done'),
9 require('./after'),
10 require('./watch'),
11 require('./restart'),
12 require('./log'),
13 { props: { cwd: true } }
14]
15
16const typeFix = original => {
17 const replacement = { inject }
18 if (original.inject) {
19 if (Array.isArray(original.inject)) {
20 replacement.inject = inject.concat(original.inject)
21 } else {
22 replacement.inject.push(original.inject)
23 }
24 }
25 return Object.assign(replacement, original)
26}
27
28const hub = h({
29 inject,
30 types: {
31 tasks: {
32 props: {
33 default: {
34 tasks: { type: 'tasks' },
35 inject
36 }
37 },
38 inject (t) {
39 const prop = t.props.default
40 const props = {
41 default: (t, val, key, stamp) => {
42 if (val.type) val = typeFix(val)
43 const beforeFn = getFn(t[key])
44 const changed = prop(t, val, key, stamp)
45 const task = t[key]
46 const afterFn = getFn(task)
47 if (afterFn && afterFn !== beforeFn && typeof afterFn === 'function') {
48 task.set(afterFn(task, hub, getCwd(task)))
49 }
50 return changed
51 }
52 }
53 t.set({ props }, false)
54 }
55 }
56 },
57 props: {
58 cwd: true,
59 tasks: { type: 'tasks' }
60 },
61 _uid_: 'task-hub',
62 cwd: process.cwd(),
63 port: findPort(3000).then(port => {
64 process.env.PLOY_TASK_HUB = `ws://${getIp()}:${port}`
65 return port
66 }),
67 on: {
68 error: {
69 broadcast: (val, stamp, t) => {
70 // console.log('BROADCAST ♨️♨️♨️')
71 t.broadcast('error', val, stamp)
72 }
73 }
74 }
75})
76
77module.exports = hub
78
79process.on('exit', () => (process.PLOY_TASK_HUB = null))
80process.on('SIGINT', () => process.exit(2))
81process.on('uncaughtException', e => {
82 console.log(e.stack)
83 process.exit(99)
84})