1 | const h = require('hub.js')
|
2 | const getFn = require('./util/get-fn')
|
3 | const getCwd = require('./util/get-cwd')
|
4 | const findPort = require('./util/find-port')
|
5 | const getIp = require('./util/get-ip')
|
6 |
|
7 | const inject = [
|
8 | require('./done'),
|
9 | require('./after'),
|
10 | require('./watch'),
|
11 | require('./restart'),
|
12 | require('./log'),
|
13 | { props: { cwd: true } }
|
14 | ]
|
15 |
|
16 | const 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 |
|
28 | const 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 |
|
71 | t.broadcast('error', val, stamp)
|
72 | }
|
73 | }
|
74 | }
|
75 | })
|
76 |
|
77 | module.exports = hub
|
78 |
|
79 | process.on('exit', () => (process.PLOY_TASK_HUB = null))
|
80 | process.on('SIGINT', () => process.exit(2))
|
81 | process.on('uncaughtException', e => {
|
82 | console.log(e.stack)
|
83 | process.exit(99)
|
84 | })
|